{"version":3,"file":"index.mjs","sources":["webpack://@iflyrpa/actions/./src/utils/XhsXsCommonEnc.js","webpack://@iflyrpa/actions/./src/utils/douyin/douyinSafe/a_bogus.js","webpack://@iflyrpa/actions/./src/utils/douyin/douyinSafe/bd_para.js","webpack://@iflyrpa/actions/./src/utils/douyin/douyinSafe/csrfToken.js","webpack://@iflyrpa/actions/./src/utils/douyin/douyinSafe/dtrait.js","webpack://@iflyrpa/actions/./src/utils/douyin/douyinSign.js","webpack://@iflyrpa/actions/./src/utils/ttABEncrypt.js","webpack://@iflyrpa/actions/./src/utils/xhs_ob/x_s.encoder.js","webpack://@iflyrpa/actions/./src/utils/xhs_ob_feed/ob.enc.js","webpack://@iflyrpa/actions/./src/utils/xhs_ob_feed/ob.env.js","webpack://@iflyrpa/actions/./src/utils/xhs_ob_feed/x_s.encoder.js","webpack://@iflyrpa/actions/./src/utils/proxy.ts","webpack://@iflyrpa/actions/./src/utils/http.ts","webpack://@iflyrpa/actions/./src/utils/index.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoLogin/rpa.ts","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/core.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/util.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/errors.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/parse.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/regexes.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/checks.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/doc.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/versions.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/schemas.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/en.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/registries.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/api.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/iso.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/errors.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/parse.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/schemas.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/compat.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/external.js","webpack://@iflyrpa/actions/./src/types.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoLogin/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoLogin/index.ts","webpack://@iflyrpa/actions/./src/utils/reportLogger.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoPublish/utils.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/common/FansTool/index.ts","webpack://@iflyrpa/actions/./src/utils/xhsXsEncrypt.ts","webpack://@iflyrpa/actions/./src/actions/common/sessionCheck/index.ts","webpack://@iflyrpa/actions/./src/utils/shipinhao/utils.ts","webpack://@iflyrpa/actions/./src/actions/createShipinhaoComment/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinCheckVerifyQrCode/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinCreateCommentReply/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinCreateCommentReply/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetCollection/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetCollection/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetCommentList/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetCommentList/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetCommentReplyList/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetCommentReplyList/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetHot/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetHot/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetLocation/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetLocation/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetMusic/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetMusic/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetMusicByCategory/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetMusicByCategory/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetMusicCategory/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetTopics/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetTopics/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetVerifyQrCode/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetWorkList/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetWorkList/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinLogin/rpa.ts","webpack://@iflyrpa/actions/./src/actions/douyinLogin/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/douyinLogin/index.ts","webpack://@iflyrpa/actions/./src/utils/douyin/imageUploader.ts","webpack://@iflyrpa/actions/./src/utils/douyin/verify-parser.ts","webpack://@iflyrpa/actions/./src/actions/douyinPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/douyinPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/douyinPublish/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/douyinPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/getBaijiahaoActivity/index.ts","webpack://@iflyrpa/actions/./src/actions/getBaijiaohaoConfig/index.ts","webpack://@iflyrpa/actions/./src/actions/getShipinhaoBgm/index.ts","webpack://@iflyrpa/actions/./src/actions/getShipinhaoBgmCategory/index.ts","webpack://@iflyrpa/actions/./src/actions/getShipinhaoCollection/index.ts","webpack://@iflyrpa/actions/./src/actions/getShipinhaoCommentList/index.ts","webpack://@iflyrpa/actions/./src/actions/getShipinhaoConfig/index.ts","webpack://@iflyrpa/actions/./src/actions/getShipinhaoPostList/index.ts","webpack://@iflyrpa/actions/./src/actions/getToutiaoCollection/index.ts","webpack://@iflyrpa/actions/./src/actions/getToutiaoConfig/index.ts","webpack://@iflyrpa/actions/./src/actions/getWeixinCollection/index.ts","webpack://@iflyrpa/actions/./src/actions/getWeixinConfig/index.ts","webpack://@iflyrpa/actions/./src/actions/getXhsCollection/index.ts","webpack://@iflyrpa/actions/./src/actions/getXhsGroup/index.ts","webpack://@iflyrpa/actions/./src/actions/getXhsHotTopic/index.ts","webpack://@iflyrpa/actions/./src/actions/getXhsWebUnreadCount/index.ts","webpack://@iflyrpa/actions/./src/actions/searchAccountInfo/getBjhInfo.ts","webpack://@iflyrpa/actions/./src/actions/searchAccountInfo/getDouyinInfo.ts","webpack://@iflyrpa/actions/./src/actions/searchAccountInfo/getShipinhaoInfo.ts","webpack://@iflyrpa/actions/./src/actions/searchAccountInfo/getTTInfo.ts","webpack://@iflyrpa/actions/./src/actions/searchAccountInfo/getWxInfo.ts","webpack://@iflyrpa/actions/./src/actions/searchAccountInfo/getXhsInfo.ts","webpack://@iflyrpa/actions/./src/actions/searchAccountInfo/index.ts","webpack://@iflyrpa/actions/./src/actions/searchBjhTopicList/index.ts","webpack://@iflyrpa/actions/./src/actions/searchBjhUserArticle/index.ts","webpack://@iflyrpa/actions/./src/actions/searchPublishInfo/types.ts","webpack://@iflyrpa/actions/./src/actions/searchPublishInfo/handleBjhData.ts","webpack://@iflyrpa/actions/./src/actions/searchPublishInfo/handleDouyinData.ts","webpack://@iflyrpa/actions/./src/actions/searchPublishInfo/handleShipinhaoData.ts","webpack://@iflyrpa/actions/./src/actions/searchPublishInfo/handleTTData.ts","webpack://@iflyrpa/actions/./src/actions/searchPublishInfo/handleWXData.ts","webpack://@iflyrpa/actions/./src/actions/searchPublishInfo/handleXhsData.ts","webpack://@iflyrpa/actions/./src/actions/searchPublishInfo/index.ts","webpack://@iflyrpa/actions/./src/actions/searchToutiaoLocation/index.ts","webpack://@iflyrpa/actions/./src/actions/searchToutiaoTopicList/index.ts","webpack://@iflyrpa/actions/./src/actions/searchToutiaoUserID/index.ts","webpack://@iflyrpa/actions/./src/actions/searchWeixinAccountCard/index.ts","webpack://@iflyrpa/actions/./src/actions/searchWeixinUserArticle/index.ts","webpack://@iflyrpa/actions/./src/actions/searchXhsWebConnections/index.ts","webpack://@iflyrpa/actions/./src/actions/searchXhsWebLike/index.ts","webpack://@iflyrpa/actions/./src/actions/searchXhsWebMentions/index.ts","webpack://@iflyrpa/actions/./src/actions/searchXiaohongshuLocation/index.ts","webpack://@iflyrpa/actions/./src/actions/searchXiaohongshuTopicList/index.ts","webpack://@iflyrpa/actions/./src/actions/searchXiaohongshuUserArticle/index.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoCheckLinkValidate/schema.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoCheckLinkValidate/index.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoGetLocation/schema.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoGetLocation/index.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoGetMsg/schema.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoGetMsg/index.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoGetMsgImage/index.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoLogin/rpa.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoLogin/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoLogin/index.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoPublish/uploader.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoPublish/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoSendMsg/schema.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoSendMsg/index.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoLogin/rpa.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoLogin/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoLogin/index.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/weitoutiaoPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/weitoutiaoPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/weitoutiaoPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/weixinLogin/rpa.ts","webpack://@iflyrpa/actions/./src/actions/weixinLogin/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/weixinLogin/index.ts","webpack://@iflyrpa/actions/./src/actions/weixinmpPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/weixinmpPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/weixinmpPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/weixinPublish/utils.ts","webpack://@iflyrpa/actions/./src/actions/weixinPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/weixinPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/weixinPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuLogin/rpa.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuLogin/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuLogin/index.ts","webpack://@iflyrpa/actions/./src/utils/xhs_ob_feed/mnsvc2.ts","webpack://@iflyrpa/actions/./src/utils/xhs_ob_feed/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuPublish/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuPublish/rpa-server-mock.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuWebCommentAction/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuWebIntimacySearch/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuWebMsgRead/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuWebMsgReply/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuWebNoteFeed/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuWebRelationAction/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuWebSearch/index.ts","webpack://@iflyrpa/actions/./src/actions/searchAccountInfo/types.ts","webpack://@iflyrpa/actions/./src/index.ts"],"sourcesContent":["\nvar encrypt_lookup = [\n  \"Z\",\n  \"m\",\n  \"s\",\n  \"e\",\n  \"r\",\n  \"b\",\n  \"B\",\n  \"o\",\n  \"H\",\n  \"Q\",\n  \"t\",\n  \"N\",\n  \"P\",\n  \"+\",\n  \"w\",\n  \"O\",\n  \"c\",\n  \"z\",\n  \"a\",\n  \"/\",\n  \"L\",\n  \"p\",\n  \"n\",\n  \"g\",\n  \"G\",\n  \"8\",\n  \"y\",\n  \"J\",\n  \"q\",\n  \"4\",\n  \"2\",\n  \"K\",\n  \"W\",\n  \"Y\",\n  \"j\",\n  \"0\",\n  \"D\",\n  \"S\",\n  \"f\",\n  \"d\",\n  \"i\",\n  \"k\",\n  \"x\",\n  \"3\",\n  \"V\",\n  \"T\",\n  \"1\",\n  \"6\",\n  \"I\",\n  \"l\",\n  \"U\",\n  \"A\",\n  \"F\",\n  \"M\",\n  \"9\",\n  \"7\",\n  \"h\",\n  \"E\",\n  \"C\",\n  \"v\",\n  \"u\",\n  \"R\",\n  \"X\",\n  \"5\"\n];\n\nlet esm_typeof = {}\nesm_typeof.A = function (t) {\n  return typeof t\n}\n\nfunction encrypt_b64Encode(t) {\n  var e = 664\n    , r = 634\n    , n = 448\n    , o = 599\n    , i = 315\n    , a = 416\n    , u = 512\n    , s = 361\n    , c = 406\n    , l = 487\n    , f = 496\n    , p = 333\n    , h = 630\n    , d = 639\n    , v = 548\n    , g = 582\n    , m = 447\n    , y = 468\n    , w = 375\n    , b = 331\n    , _ = 149\n    , E = 382\n    , x = 265\n    , k = 625\n    , T = 570\n    , S = 551\n    , A = 582\n    , L = 581\n    , I = 638\n    , R = 618\n    , O = 606\n    , C = 429\n    , N = 651\n    , P = 667\n    , B = 817\n    , M = 333\n    , j = 567\n    , F = 747\n    , D = 561\n    , q = 570\n    , U = 676\n    , G = 840\n    , H = 240\n    , V = {\n      udFrB: function (t, e) {\n        return t % e\n      },\n      cCZFe: function (t, e) {\n        return t === e\n      },\n      jevwl: function (t, e) {\n        return t - e\n      },\n      aqlTy: function (t, e) {\n        return t + e\n      },\n      rceYY: function (t, e) {\n        return t >> e\n      },\n      OwjMq: function (t, e) {\n        return t & e\n      },\n      kSGXO: function (t, e) {\n        return t << e\n      },\n      veNiI: function (t, e) {\n        return t === e\n      },\n      QLthP: function (t, e) {\n        return t + e\n      },\n      wDtJz: function (t, e) {\n        return t + e\n      },\n      nYqUQ: function (t, e) {\n        return t & e\n      },\n      TCArD: function (t, e) {\n        return t << e\n      },\n      RHteb: function (t, e) {\n        return t - e\n      },\n      mZPJZ: function (t, e) {\n        return t < e\n      },\n      zDETq: function (t, e, r, n) {\n        return t(e, r, n)\n      },\n      YlZGp: function (t, e) {\n        return t > e\n      }\n    };\n  function W(t, e) {\n    return a0_0x10f4ac(e, t - -H)\n  }\n  for (var X = (W(-413, -442) + W(-e, -r) + \"7\")[W(-n, -o)](\"|\"), z = 0; ;) {\n    switch (X[z++]) {\n      case \"0\":\n        var Y;\n        continue;\n      case \"1\":\n        var K = [];\n        continue;\n      case \"2\":\n        var J = V[W(-i, -a)]($, 3);\n        continue;\n      case \"3\":\n        var $ = t[W(-350, -u)];\n        continue;\n      case \"4\":\n        V[W(-s, -c)](J, 1) ? (Y = t[V[W(-l, -f)]($, 1)],\n          K[W(-p, -346)](V[W(-h, -d)](encrypt_lookup[V[W(-503, -v)](Y, 2)] + encrypt_lookup[V[W(-g, -741)](V[W(-331, -m)](Y, 4), 63)], \"==\"))) : V[W(-y, -w)](J, 2) && (Y = V[W(-b, -_)](t[$ - 2], 8) + t[V[W(-l, -E)]($, 1)],\n            K[W(-333, -x)](V[W(-k, -505)](V[W(-T, -S)](encrypt_lookup[Y >> 10], encrypt_lookup[V[W(-A, -L)](Y >> 4, 63)]) + encrypt_lookup[V[W(-I, -R)](V[W(-O, -C)](Y, 2), 63)], \"=\")));\n        continue;\n      case \"5\":\n        var Q = 16383;\n        continue;\n      case \"6\":\n        for (var Z = 0, tt = V[W(-509, -N)]($, J); V[W(-P, -B)](Z, tt); Z += Q)\n          K[W(-M, -153)](V[W(-j, -F)](encrypt_encodeChunk, t, Z, V[W(-D, -413)](Z + Q, tt) ? tt : V[W(-q, -501)](Z, Q)));\n        continue;\n      case \"7\":\n        return K[W(-U, -G)](\"\")\n    }\n    break\n  }\n}\n\nfunction encrypt_encodeUtf8(t) {\n  var e = 185\n    , r = 410\n    , n = 480\n    , o = 222\n    , i = 194\n    , a = 165\n    , u = 147\n    , s = 290\n    , c = 460\n    , l = 472\n    , f = 497\n    , p = 462\n    , h = 286\n    , d = 209\n    , v = 223\n    , g = 590\n    , m = {\n      bIGxm: function (t, e) {\n        return t(e)\n      },\n      MahgM: function (t, e) {\n        return t < e\n      },\n      czxKn: function (t, e) {\n        return t === e\n      },\n      clYIu: function (t, e) {\n        return t + e\n      }\n    }\n    , y = m[b(477, 488)](encodeURIComponent, t)\n    , w = [];\n  function b(t, e) {\n    return a0_0x10f4ac(t, e - g)\n  }\n  for (var _ = 0; m[b(333, e)](_, y[b(r, n)]); _++) {\n    var E = y[b(o, 290)](_);\n    if (m[b(i, a)](E, \"%\")) {\n      var x = y[b(u, s)](m[b(574, 472)](_, 1)) + y[b(c, 290)](m[b(605, l)](_, 2))\n        , k = parseInt(x, 16);\n      w[b(592, f)](k),\n        _ += 2\n    } else\n      w[b(p, f)](E[b(217, h) + b(d, v)](0))\n  }\n  return w\n}\n\nfunction sign_common(h) {\n    return encrypt_b64Encode(encrypt_encodeUtf8(JSON.stringify(h)))\n}\nfunction encrypt_tripletToBase64(t) {\n  var e = 11\n    , r = 15\n    , n = 199\n    , o = 34\n    , i = 4\n    , a = 102\n    , u = 276\n    , s = 205\n    , c = 218\n    , l = 11\n    , f = 115\n    , p = 34\n    , h = 161\n    , d = 123\n    , v = 335\n    , g = {};\n  function m(t, e) {\n    return a0_0x10f4ac(e, t - v)\n  }\n  g[m(205, 328)] = function (t, e) {\n    return t + e\n  }\n    ,\n    g[m(e, 53)] = function (t, e) {\n      return t >> e\n    }\n    ,\n    g[m(r, n)] = function (t, e) {\n      return t & e\n    }\n    ,\n    g[m(o, i)] = function (t, e) {\n      return t >> e\n    }\n    ,\n    g[m(-a, -u)] = function (t, e) {\n      return t & e\n    }\n    ;\n  var y = g;\n  return y[m(s, c)](encrypt_lookup[63 & y[m(l, -75)](t, 18)], encrypt_lookup[y[m(r, f)](y[m(p, h)](t, 12), 63)]) + encrypt_lookup[t >> 6 & 63] + encrypt_lookup[y[m(-a, -d)](t, 63)]\n}\nfunction encrypt_encodeChunk(t, e, r) {\n  var n, o = 165, i = 246, a = 205, u = 353, s = 162, c = 17, l = 351, f = 191, p = 139, h = 79, d = 86, v = 233, g = 270, m = 166, y = {\n    hwomB: function (t, e) {\n      return t < e\n    },\n    iHUeL: function (t, e) {\n      return t & e\n    },\n    ELxEv: function (t, e) {\n      return t << e\n    },\n    lBuRH: function (t, e) {\n      return t << e\n    },\n    SkIJl: function (t, e) {\n      return t & e\n    },\n    JYxWY: function (t, e) {\n      return t + e\n    },\n    CxjtF: function (t, e) {\n      return t(e)\n    }\n  }, w = [];\n  function b(t, e) {\n    return a0_0x10f4ac(t, e - m)\n  }\n  for (var _ = e; y[b(-63, -o)](_, r); _ += 3)\n    n = y[b(-i, -a)](y[b(-166, -124)](t[_], 16), 16711680) + y[b(-u, -205)](y[b(s, -c)](t[_ + 1], 8), 65280) + y[b(-l, -208)](t[y[b(-350, -f)](_, 2)], 255),\n      w[b(p, 73)](y[b(h, d)](encrypt_tripletToBase64, n));\n  return w[b(-v, -g)](\"\")\n}\n\nfunction a0_0x3693(t, e) {\n  var r = [\n    \"xUKNL\",\n    \"jUrZI\",\n    \"rviFu\",\n    \"join\",\n    \"get\",\n    \"LjDtD\",\n    \"ZJHyP\",\n    \"wOmGY\",\n    \"enumera\",\n    \"aONWR\",\n    \"string\",\n    \"kQpMi\",\n    \"mZPJZ\",\n    \"Ysiay\",\n    \"czxKn\",\n    \"|5|6|4|\",\n    \"prototy\",\n    \"jklmnop\",\n    \"MuYbw\",\n    \"diDwk\",\n    \"TRFtx\",\n    \"drDHI\",\n    \"WLARA\",\n    \"xyz0123\",\n    \"asBytes\",\n    \"|6|0|1|\",\n    \"JOtEi\",\n    \"Oialn\",\n    \"OQrEi\",\n    \"uPnXq\",\n    \"VWXYZab\",\n    \"cIbFa\",\n    \"qYuta\",\n    \"QDOZZ\",\n    \"MahgM\",\n    \"iRXZq\",\n    \"22098XlFGYn\",\n    \"mmLKn\",\n    \"jMcIE\",\n    \"stringi\",\n    \"[object\",\n    \"nYqUQ\",\n    \"jSgjk\",\n    \"ucyEo\",\n    \"iewJI\",\n    \"vgTwl\",\n    \"DnNGR\",\n    \"oBytes\",\n    \"Xtwzk\",\n    \"aqlTy\",\n    \"JWnPK\",\n    \"1|0|2|4\",\n    \"qrstuvw\",\n    \"_gg\",\n    \"QLthP\",\n    \"FJIWy\",\n    \"yRnhISG\",\n    \"pjUsr\",\n    \"KAwuh\",\n    \"Thhoa\",\n    \"jarkJ\",\n    \"WjRNN\",\n    \"asStrin\",\n    \"x3VT16I\",\n    \"357835LaQWjW\",\n    \"SkIJl\",\n    \"size\",\n    \"iyorr\",\n    \"iHUeL\",\n    \"tTanW\",\n    \"tNusJ\",\n    \"NiSrP\",\n    \"eAt\",\n    \"TCArD\",\n    \"a2r1ZQo\",\n    \"iamspam\",\n    \"bOnfu\",\n    \"UNSKg\",\n    \"HIJKLMN\",\n    \"ZfMKC\",\n    \"bJhXU\",\n    \"zwAAc\",\n    \"JYxWY\",\n    \"lUAFM97\",\n    \"mwaRe\",\n    \"EzYWD\",\n    \"replace\",\n    \"uOtUJ\",\n    \"__esMod\",\n    \"ViQWI\",\n    \"aCMFL\",\n    \"EAKSd\",\n    \"ule\",\n    \"pqnFP\",\n    \"qYDsL\",\n    \"270726pnaYfG\",\n    \"glBZG\",\n    \"OwjMq\",\n    \"YGrjc\",\n    \"ZhAcd\",\n    \"JDqFL\",\n    \"456789+\",\n    \"kEjQs\",\n    \"lWhbD\",\n    \"OaLTI\",\n    \"dXlgm\",\n    \"cVte9UJ\",\n    \"ctor\",\n    \"hwomB\",\n    \"wDtJz\",\n    \"constru\",\n    \"ABHuC\",\n    \"zDETq\",\n    \"SYNeA\",\n    \"BGbij\",\n    \"ionFq\",\n    \"QzaNS\",\n    \"7|3|5|4\",\n    \"YlZGp\",\n    \"Bjniw\",\n    \"ZITuN\",\n    \"KPTzH\",\n    \"HrBeq\",\n    \"xobsT\",\n    \"kXJkC\",\n    \"QSrEZ\",\n    \"ENXtO\",\n    \"FYbRJ\",\n    \"wOcza/L\",\n    \"_hh\",\n    \"dVXMb\",\n    \"ppkua\",\n    \"WgamZ\",\n    \"HuwCW\",\n    \"362424fnLCuh\",\n    \"charCod\",\n    \"HhPqg\",\n    \"ODunI\",\n    \"eJzqq\",\n    \"charAt\",\n    \"JGAgI\",\n    \"ZmserbB\",\n    \"TURcG\",\n    \"WyrqF\",\n    \"iYJzH\",\n    \"VIwfH\",\n    \"tzzOB\",\n    \"YgiCH\",\n    \"byyMQ\",\n    \"ELxEv\",\n    \"0DSfdik\",\n    \"HRihr\",\n    \"_ii\",\n    \"aDsrp\",\n    \"ble\",\n    \"jTGtW\",\n    \"configu\",\n    \"cXiYW\",\n    \"56kSpAsC\",\n    \"158KIldlA\",\n    \"oHQtNP+\",\n    \"BHavO\",\n    \"PCIlh\",\n    \"QatIf\",\n    \"IKyqh\",\n    \"Words\",\n    \"Qwnrg\",\n    \"44lQAgNu\",\n    \"cdefghi\",\n    \"nTwxD\",\n    \"RHteb\",\n    \"coqPr\",\n    \"rJwmI\",\n    \"aBoeK\",\n    \"default\",\n    \"exports\",\n    \"rceYY\",\n    \"isArray\",\n    \"mdKKO\",\n    \"kzxWE\",\n    \"DeBtm\",\n    \"tjjUn\",\n    \"vJEcD\",\n    \"LpfE8xz\",\n    \"bin\",\n    \"HKazo\",\n    \"rable\",\n    \"call\",\n    \"wordsTo\",\n    \"zBiyt\",\n    \"GrsGL\",\n    \"fqulF\",\n    \"jevwl\",\n    \"mxfLj\",\n    \"xlUnt\",\n    \"q42KWYj\",\n    \"endian\",\n    \"eEqDc\",\n    \"oyGAZ\",\n    \"bytesTo\",\n    \"OzjuJ\",\n    \"IfwWq\",\n    \"ize\",\n    \"6648810piiNEz\",\n    \"lTHdy\",\n    \"vDLZJ\",\n    \"stringT\",\n    \"A4NjFqY\",\n    \"GkjTz\",\n    \"eooJA\",\n    \"substr\",\n    \"veNiI\",\n    \"LYfDp\",\n    \"ljKsP\",\n    \"jJYWG\",\n    \"bcYAf\",\n    \"srikB\",\n    \"utf8\",\n    \"qTbeY\",\n    \"yqRzd\",\n    \"|3|5\",\n    \"bjbAy\",\n    \" Array]\",\n    \"rMbXP\",\n    \"u5wPHsO\",\n    \"test\",\n    \"gMIMC\",\n    \"Deyqv\",\n    \" argume\",\n    \"ABCDEFG\",\n    \"undefin\",\n    \"split\",\n    \"QTlsj\",\n    \"_isBuff\",\n    \"OPQRSTU\",\n    \"Illegal\",\n    \"loSen\",\n    \"navigat\",\n    \"ObwNo\",\n    \"qPbcq\",\n    \"7182692QogvXX\",\n    \"tvqSn\",\n    \"DGptJ\",\n    \"HhTfW\",\n    \"avIYx\",\n    \"defineP\",\n    \"PFQbW\",\n    \"CjFyM\",\n    \"toStrin\",\n    \"yMWXS\",\n    \"yMyOy\",\n    \"0XTdDgM\",\n    \"eXkru\",\n    \"_blocks\",\n    \"indexOf\",\n    \"mbBQr\",\n    \"lBuRH\",\n    \"HzGjH\",\n    \"HNErV\",\n    \"mEokX\",\n    \"userAge\",\n    \"UpmtD\",\n    \"sgomx\",\n    \"KDfKS\",\n    \"OTbSq\",\n    \"lxMGW\",\n    \"0|3|2|1\",\n    \"dfWyB\",\n    \"lWzAd\",\n    \"eyXTL\",\n    \"5624qreyZK\",\n    \"pow\",\n    \"IJstz\",\n    \"LMlMB\",\n    \"INlwI\",\n    \"lRulU\",\n    \"TCgZh\",\n    \"_digest\",\n    \"UBhIl\",\n    \"fLtZZ\",\n    \"FYSKq\",\n    \"2|8|0\",\n    \"IoCeZ\",\n    \" Object\",\n    \"UuTvI\",\n    \"lNKLD\",\n    \"String\",\n    \"Bytes\",\n    \"rBVvW\",\n    \"KblCWi+\",\n    \"pRaIH\",\n    \"roperty\",\n    \"vTINI\",\n    \"atLE\",\n    \"functio\",\n    \"Udqoy\",\n    \"nt \",\n    \"htSWx\",\n    \"hEwRK\",\n    \"encodin\",\n    \"sCSVK\",\n    \"VuAZF\",\n    \"xeIIy\",\n    \"RBjMb\",\n    \"taTrq\",\n    \"vDLFJ\",\n    \"bPkya\",\n    \"HzimH\",\n    \"nCffO\",\n    \"BWbtU\",\n    \"2|8\",\n    \"slice\",\n    \"lxMGQ\",\n    \"tTiwe\",\n    \"JDhJB\",\n    \"rCode\",\n    \"gNDzY\",\n    \"wJkyu\",\n    \"cCZFe\",\n    \"RNGSl\",\n    \"floor\",\n    \"clYIu\",\n    \"vLiwz\",\n    \"BiNSE\",\n    \"MtYWB\",\n    \"fromCha\",\n    \"StNOc\",\n    \"|7|5|3|\",\n    \"9|1|4|6\",\n    \"length\",\n    \"UNYAE\",\n    \"pngG8yJ\",\n    \"hasOwnP\",\n    \"pYeWu\",\n    \"wTjkk\",\n    \"Bvk6/7=\",\n    \"KTmgk\",\n    \"bIGxm\",\n    \"readFlo\",\n    \"LFZch\",\n    \"_ff\",\n    \"1|3|4|2\",\n    \"binary\",\n    \"LLdJZ\",\n    \"ZofOU\",\n    \"6399uFPxTQ\",\n    \"push\",\n    \"YntPT\",\n    \"kSGXO\",\n    \"random\",\n    \"HfpCU\",\n    \"hECvuRX\",\n    \"getTime\",\n    \"iwSyV\",\n    \"alert\",\n    \"LKMcb\",\n    \"DJVdg\",\n    \"Hex\",\n    \"URzKO\",\n    \"CxjtF\",\n    \"ZVOCs\",\n    \"isBuffe\",\n    \"vGpbT\",\n    \"rotl\",\n    \"udFrB\",\n    \"CnbsH\",\n    \"crLST\"\n  ]\n  return r[t -= 131]\n}\nfunction a0_0x10f4ac(t, e) {\n  return a0_0x3693(e - -570, t)\n}\n\nvar encrypt_mcr = function (t) {\n  var e = 67\n    , r = 15\n    , n = 164\n    , o = 126\n    , i = 137\n    , a = 39\n    , u = 176\n    , s = 72\n    , c = 56\n    , l = 21\n    , f = 35\n    , p = 34\n    , h = 35\n    , d = 18\n    , v = 25\n    , g = 185\n    , m = 1149\n    , y = 744\n    , w = 1295\n    , b = 1248\n    , _ = 1310\n    , E = 1096\n    , x = 1166\n    , k = 1095\n    , T = 1196\n    , S = 1180\n    , A = 1039\n    , L = 976\n    , R = 1347\n    , I = 1117\n    , O = 1168\n    , C = 1233\n    , N = 1157\n    , P = 1006\n    , B = 1122\n    , M = 1277\n    , j = 1288\n    , F = 1271\n    , D = 986\n    , q = 162\n    , U = {};\n  function H(t, e) {\n    return a0_0x10f4ac(e, t - q)\n  }\n  U[H(-73, -66)] = function (t, e) {\n    return t === e\n  }\n    ,\n    U[H(e, 186)] = function (t, e) {\n      return t < e\n    }\n    ,\n    U[H(-r, -n)] = function (t, e) {\n      return t ^ e\n    }\n    ,\n    U[H(r, -o)] = function (t, e) {\n      return t & e\n    }\n    ,\n    U[H(-i, -a)] = function (t, e) {\n      return t < e\n    }\n    ,\n    U[H(-175, -u)] = function (t, e) {\n      return t ^ e\n    }\n    ,\n    U[H(-59, s)] = function (t, e) {\n      return t ^ e\n    }\n    ,\n    U[H(-c, -l)] = function (t, e) {\n      return t >>> e\n    }\n    ,\n    U[H(f, p)] = function (t, e) {\n      return t >>> e\n    }\n    ;\n  for (var G, V, W = U, z = 3988292384, X = 256, Y = []; X--; Y[X] = W[H(h, -66)](G, 0))\n    for (V = 8,\n      G = X; V--;)\n      G = W[H(r, d)](G, 1) ? W[H(35, v)](G, 1) ^ z : W[H(h, g)](G, 1);\n  return function (t) {\n    function e(t, e) {\n      return H(e - 1181, t)\n    }\n    if (W[e(m, 1108)]((0,\n      esm_typeof.A)(t), e(y, 914))) {\n      for (var r = 0, n = -1; W[e(w, b)](r, t[e(_, 1233)]); ++r)\n        n = W[e(E, x)](Y[W[e(k, T)](n, 255) ^ t[e(S, A) + e(1022, L)](r)], n >>> 8);\n      return W[e(R, 1166)](n, -1) ^ z\n    }\n    for (r = 0,\n      n = -1; W[e(I, 1044)](r, t[e(O, C)]); ++r)\n      n = W[e(N, P)](Y[W[e(1229, B)](W[e(M, T)](n, 255), t[r])], W[e(j, 1125)](n, 8));\n    return W[e(F, B)](W[e(D, 1122)](n, -1), z)\n  }\n}();\n\nfunction GenXSCommon(a1cookie, x_t, x_s) {\n    let b1 = 'I38rHdgsjopgIvesdVwgIC+oIELmBZ5e3VwXLgFTIxS3bqwErFeexd0ekncAzMFYnqthIhJeSnMDKutRI3KsYorWHPtGrbV0P9WfIi/eWc6eYqtyQApPI37ekmR1QL+5Ii6sdnoeSfqYHqwl2qt5B0DoIvMzOZQqZVw7IxOeTqwr4qtiIkrOIi/skccxICLdI3Oe0utl2ADZsLveDSKsSPw5IEvsiutJOqw8BVwfPpdeTDWOIx4VIiu6ZPwbPut5IvlaLbgs3qtxIxes1VwHIkumIkIyejgsY/WTge7sjutKrZgedWI9gfKeYWZGI36eWPwyIEJefut0ocVAPBLLI3Aeiqt3cZ7sVom4IESyIhEqQd4AICY24F4gIiifpVwAICZVJo3sWWJs1qwiIvdef97e0ekKIi/e1piS8qwUIE7s1fds6WAeiVwqed5sdut3IxILbd6sdqtDbgKs0PwgIv8aI3z5rqwGBVtwzfTsKD7sdBdskut+Iioed/As1SiiIkKs0F6s3nVuIkge1Pt0IkVkwPwwNVtMI3/e1qtdIkKs1VwVIEesdutA+qwKsuw7IvrRIxDgJfIj2IJexVtVIhiKIi6eDVw/bz4zLadsYjmfIkWo4VtPmVw5IvAe3qtk+LJeTl5sTSEyIEJekdgs3PtsnPwqI35sSPt0Ih/sV04TIk0ejjNsfqw7Iv3sVut04B8qIkWyIvKsxFOekzNsdAKsYPtKIiMFI3MurVtKIvzjIh6s6lFut//sWqtaI3IYbuwl'\n    let h = {\n      \"s0\": 3,\n      \"s1\": \"\",\n      \"x0\": \"1\",\n      \"x1\": \"3.6.8\",\n      \"x2\": \"Mac OS\",\n      \"x3\": \"xhs-pc-web\",\n      \"x4\": \"4.20.1\",\n      \"x5\": a1cookie, // a1 cookie\n      \"x6\": x_t,\n      \"x7\": x_s,\n      \"x8\": b1,\n      \"x9\": encrypt_mcr(x_t + x_s + b1),\n      \"x10\": 1,\n    }\n\n    return sign_common(h)\n}\n\nmodule.exports = GenXSCommon\n\n\n// let a1 = '195b24e679dmxgripk2o89yld9kdnoklz0h04octb40000365251';\n// let x_t = 1754108104611;\n// const x_s = 'XYS_2UQhPsHCH0c1PjhFHjIj2erjwjQM89PjNsQhPjHCHDlkJdphHjIj2ePjwjQTJdPIP/ZlgAmGy0Yt4Lh3cFq34DE84F+ewBrM/9IUwebz8F+3J9Qi+SQD8dzN4e8EPeYS2eb7c0mTc9Yrc7z14nI3nLkQcDSenLkG4sR68FVM+nSF2e+NJ9zca0mkzrTj4DV3GMqMpoS3yeWEznbM+L40wn4Lpbb9zr+7/SW6PMYYzeQ1aFTI8gm8J/YL/FzTc0D6zgSyPjTy+0Ys+7c38g8NLSQD8AWjNsQh+sHCHfRjyfp04sQR'\n\n// console.log(GenXSCommon(a1, x_t, x_s));\n","const encoder = new TextEncoder();\n\nfunction leftRotate(x, n) {\n  const shift = n % 32;\n  return (((x << shift) | (x >>> (32 - shift))) >>> 0);\n}\n\nfunction gt(value, length, _padChar) {\n  return String(value).padStart(length, '0');\n}\n\nfunction normalizeRuntime(runtime = {}) {\n  return {\n    nowMs: typeof runtime.nowMs === 'function' ? runtime.nowMs : () => Date.now(),\n    random: typeof runtime.random === 'function' ? runtime.random : () => Math.random(),\n  };\n}\n\nfunction getArr(input, format = 'array') {\n  const reg = {\n    chunk: [],\n    reg: [\n      1937774191,\n      1226093241,\n      388252375,\n      3666478592,\n      2842636476,\n      372324522,\n      3817729613,\n      2969243214,\n    ],\n    size: 0,\n  };\n\n  function compress(block) {\n    if (block.length < 64) {\n      return;\n    }\n\n    const temp = new Array(132).fill(0);\n\n    for (let i = 0; i < 16; i += 1) {\n      temp[i] = (\n        ((block[4 * i] << 24) >>> 0)\n        | (block[4 * i + 1] << 16)\n        | (block[4 * i + 2] << 8)\n        | block[4 * i + 3]\n      ) >>> 0;\n    }\n\n    for (let i = 16; i < 68; i += 1) {\n      let value = (temp[i - 16] ^ temp[i - 9] ^ leftRotate(temp[i - 3], 15)) >>> 0;\n      value = (value ^ leftRotate(value, 15) ^ leftRotate(value, 23)) >>> 0;\n      temp[i] = (value ^ leftRotate(temp[i - 13], 7) ^ temp[i - 6]) >>> 0;\n    }\n\n    for (let i = 0; i < 64; i += 1) {\n      temp[i + 68] = (temp[i] ^ temp[i + 4]) >>> 0;\n    }\n\n    const state = reg.reg.slice();\n\n    for (let i = 0; i < 64; i += 1) {\n      let tValue;\n      let ff;\n      let gg;\n\n      if (i < 16) {\n        tValue = 2043430169;\n        ff = (state[0] ^ state[1] ^ state[2]) >>> 0;\n      } else {\n        tValue = 2055708042;\n        ff = ((state[0] & state[1]) | (state[0] & state[2]) | (state[1] & state[2])) >>> 0;\n      }\n\n      const ss1 = leftRotate((leftRotate(state[0], 12) + state[4] + leftRotate(tValue, i)) >>> 0, 7);\n      const ss2 = (ss1 ^ leftRotate(state[0], 12)) >>> 0;\n      const tt1 = (ff + state[3] + ss2 + temp[i + 68]) >>> 0;\n\n      if (i < 16) {\n        gg = (state[4] ^ state[5] ^ state[6]) >>> 0;\n      } else {\n        gg = ((state[4] & state[5]) | ((~state[4]) & state[6])) >>> 0;\n      }\n\n      const tt2 = (gg + state[7] + ss1 + temp[i]) >>> 0;\n\n      state[3] = state[2];\n      state[2] = leftRotate(state[1], 9);\n      state[1] = state[0];\n      state[0] = tt1;\n      state[7] = state[6];\n      state[6] = leftRotate(state[5], 19);\n      state[5] = state[4];\n      state[4] = (tt2 ^ leftRotate(tt2, 9) ^ leftRotate(tt2, 17)) >>> 0;\n    }\n\n    for (let i = 0; i < 8; i += 1) {\n      reg.reg[i] = (reg.reg[i] ^ state[i]) >>> 0;\n    }\n  }\n\n  function write(value) {\n    const bytes = typeof value === 'string'\n      ? Array.from(encoder.encode(value))\n      : Array.from(value);\n\n    reg.size += bytes.length;\n    let index = 64 - reg.chunk.length;\n\n    if (bytes.length < index) {\n      reg.chunk.push(...bytes);\n      return;\n    }\n\n    reg.chunk.push(...bytes.slice(0, index));\n    while (reg.chunk.length >= 64) {\n      compress(reg.chunk.slice(0, 64));\n      if (index < bytes.length) {\n        reg.chunk = bytes.slice(index, Math.min(index + 64, bytes.length));\n      } else {\n        reg.chunk = [];\n      }\n      index += 64;\n    }\n  }\n\n  function fill() {\n    const bitLength = BigInt(reg.size) * 8n;\n    reg.chunk.push(128);\n    let index = reg.chunk.length % 64;\n\n    if (64 - index < 8) {\n      index -= 64;\n    }\n\n    while (index < 56) {\n      reg.chunk.push(0);\n      index += 1;\n    }\n\n    const high = Number(bitLength / 4294967296n);\n    for (let i = 0; i < 4; i += 1) {\n      reg.chunk.push((high >> (8 * (3 - i))) & 255);\n    }\n\n    const low = Number(bitLength & 4294967295n);\n    for (let i = 0; i < 4; i += 1) {\n      reg.chunk.push((low >> (8 * (3 - i))) & 255);\n    }\n  }\n\n  write(input);\n  fill();\n\n  for (let i = 0; i < reg.chunk.length; i += 64) {\n    compress(reg.chunk.slice(i, i + 64));\n  }\n\n  if (format === 'hex') {\n    let result = '';\n    for (let i = 0; i < 8; i += 1) {\n      result += gt(reg.reg[i].toString(16), 8, '0');\n    }\n    return result;\n  }\n\n  const result = new Array(32).fill(0);\n  for (let i = 0; i < 8; i += 1) {\n    let value = reg.reg[i];\n    result[4 * i + 3] = value & 255;\n    value >>>= 8;\n    result[4 * i + 2] = value & 255;\n    value >>>= 8;\n    result[4 * i + 1] = value & 255;\n    value >>>= 8;\n    result[4 * i] = value & 255;\n  }\n  return result;\n}\n\nfunction encodeCustomBase64(input, alphabet) {\n  let result = '';\n  let j = 0;\n\n  for (let i = 0; i < input.length + 1; i += 3) {\n    if (i + 3 <= input.length) {\n      const charCode0 = input.charCodeAt(i);\n      const charCode1 = input.charCodeAt(i + 1);\n      const charCode2 = input.charCodeAt(i + 2);\n      const baseNum = (charCode2 | (charCode1 << 8) | (charCode0 << 16)) >>> 0;\n\n      result += alphabet[(baseNum & 16515072) >> 18];\n      result += alphabet[(baseNum & 258048) >> 12];\n      result += alphabet[(baseNum & 4032) >> 6];\n      result += alphabet[baseNum & 63];\n    }\n\n    if (i + 3 > input.length) {\n      const remaining = input.length - j;\n      if (remaining === 2) {\n        const charCode0 = input.charCodeAt(j);\n        const charCode1 = input.charCodeAt(j + 1);\n        const baseNum = ((charCode1 << 8) | (charCode0 << 16)) >>> 0;\n        result += alphabet[(baseNum & 16515072) >> 18];\n        result += alphabet[(baseNum & 258048) >> 12];\n        result += alphabet[(baseNum & 4032) >> 6];\n        result += '=';\n      } else if (remaining === 1) {\n        const charCode0 = input.charCodeAt(j);\n        const baseNum = (charCode0 << 16) >>> 0;\n        result += alphabet[(baseNum & 16515072) >> 18];\n        result += alphabet[(baseNum & 258048) >> 12];\n        result += '==';\n      }\n    }\n\n    j += 3;\n  }\n\n  return result;\n}\n\nfunction abArr256() {\n  const nums = Array.from({ length: 256 }, (_, index) => 255 - index);\n  let previousValue = 0;\n  const lm = 211;\n\n  for (let i = 0; i < nums.length; i += 1) {\n    const num1 = previousValue * nums[i];\n    previousValue = (num1 + previousValue + lm) % 256;\n    [nums[i], nums[previousValue]] = [nums[previousValue], nums[i]];\n  }\n\n  return nums;\n}\n\nfunction abGarbledCharacters(value) {\n  const arr256 = abArr256();\n  let n4 = 0;\n  let result = '';\n\n  for (let i = 0; i < value.length; i += 1) {\n    const n2 = (i + 1) % 256;\n    const n3 = n4 + arr256[n2];\n    n4 = n3 % 256;\n    const oldArrN2 = arr256[n2];\n    arr256[n2] = arr256[n4];\n    arr256[n4] = oldArrN2;\n    const n5 = value.charCodeAt(i);\n    const n6 = arr256[n2] + oldArrN2;\n    const n7 = n6 % 256;\n    const n8 = n5 ^ arr256[n7];\n    result += String.fromCharCode(n8);\n  }\n\n  return result;\n}\n\nfunction uaArr256(userAgent, uaSalt) {\n  const nums = Array.from({ length: 256 }, (_, index) => 255 - index);\n  let previousValue = 0;\n  const lm = [0, 1, uaSalt];\n\n  for (let i = 0; i < nums.length; i += 1) {\n    const num1 = previousValue * nums[i];\n    previousValue = (num1 + previousValue + lm[i % 3]) % 256;\n    [nums[i], nums[previousValue]] = [nums[previousValue], nums[i]];\n  }\n\n  return nums;\n}\n\nfunction uaGarbledCharacters(userAgent, uaSalt) {\n  const arr256 = uaArr256(userAgent, uaSalt);\n  let n4 = 0;\n  let result = '';\n\n  for (let i = 0; i < userAgent.length; i += 1) {\n    const n2 = (i + 1) % 256;\n    const n3 = n4 + arr256[n2];\n    n4 = n3 % 256;\n    const oldArrN2 = arr256[n2];\n    arr256[n2] = arr256[n4];\n    arr256[n4] = oldArrN2;\n    const n5 = userAgent.charCodeAt(i);\n    const n6 = arr256[n2] + oldArrN2;\n    const n7 = n6 % 256;\n    const n8 = n5 ^ arr256[n7];\n    result += String.fromCharCode(n8);\n  }\n\n  return result;\n}\n\nfunction encryptionUa(value) {\n  const chars = 'ckdp1h4ZKsUB80/Mfvw36XIgR25+WQAlEi7NLboqYTOPuzmFjJnryx9HVGDaStCe';\n  return encodeCustomBase64(value, chars);\n}\n\nfunction getArr2(userAgent) {\n  const data = userAgent.includes('Win')\n    ? '1280|585|1280|672|1280|672|1280|720|Win32'\n    : '2056|1080|2056|1201|2056|1201|2056|1329|MacIntel';\n\n  return Array.from(data, (char) => char.charCodeAt(0));\n}\n\nfunction getLast3Num(dateTime1) {\n  const timestamp = `${(Math.trunc(dateTime1) + 3) & 255},`;\n  return Array.from(timestamp, (char) => char.charCodeAt(0));\n}\n\nfunction getLastNum2(arr1, arr) {\n  const arrIndexes = [\n    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n    20, 21, 22, 23, 25, 26, 27, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40,\n    41, 42, 43, 44, 45, 46, 47, 48, 50, 51, 53, 54,\n  ];\n\n  let xorResult = 0;\n  for (let i = 0; i < arr1.length; i += 1) {\n    xorResult ^= arr1[i];\n  }\n  for (const index of arrIndexes) {\n    xorResult ^= arr[index];\n  }\n  return xorResult;\n}\n\nfunction getNumList(arr0, arrAr, runtime) {\n  const numList = [];\n\n  for (let i = 0; i < arrAr.length; i += 3) {\n    if (i + 2 >= arrAr.length) {\n      if (i + 1 >= arrAr.length) {\n        numList.push(arrAr[i]);\n      } else {\n        numList.push(arrAr[i], arrAr[i + 1]);\n      }\n      continue;\n    }\n\n    const randomValue = Math.trunc(runtime.random() * 1000) & 255;\n    const num1 = (randomValue & 145) | (arrAr[i] & 110);\n    const num2 = (randomValue & 66) | (arrAr[i + 1] & 189);\n    const num3 = (randomValue & 44) | (arrAr[i + 2] & 211);\n    const num4 = ((arrAr[i] & 145) | (arrAr[i + 1] & 66) | (arrAr[i + 2] & 44)) >>> 0;\n    numList.push(num1, num2, num3, num4);\n  }\n\n  return arr0.concat(numList);\n}\n\nfunction topHeaderRandomGarbledCharacters(runtime) {\n  const arr = [];\n  const randomValue = runtime.random() * 65535;\n  const num1 = Math.trunc(randomValue) & 255;\n  const num2 = Math.trunc(runtime.random() * 40);\n\n  arr.push((num1 & 170) | (3 & 85));\n  arr.push((num1 & 85) | (3 & 170));\n  arr.push((num2 & 170) | (82 & 85));\n  arr.push((num2 & 85) | (82 & 170));\n\n  return String.fromCharCode(...arr);\n}\n\nfunction randomGarbledCharactersArrayList(runtime) {\n  function randomGarbledCharactersArray1() {\n    const arr = [];\n    const randomValue = runtime.random() * 65535;\n    const num1 = Math.trunc(randomValue) & 255;\n    const num2 = (Math.trunc(randomValue) >> 8) & 255;\n\n    arr.push((num1 & 170) | (1 & 85));\n    arr.push((num1 & 85) | (1 & 170));\n    arr.push((num2 & 170) | (0 & 85));\n    arr.push((num2 & 85) | (0 & 170));\n    return arr;\n  }\n\n  function randomGarbledCharactersArray2() {\n    const arr = [];\n    const num1 = Math.trunc(runtime.random() * 240);\n    const num2 = ((Math.trunc(runtime.random() * 255)) & 77) | 2 | 16 | 32 | 128;\n\n    arr.push((num1 & 170) | (1 & 85));\n    arr.push((num1 & 85) | (1 & 170));\n    arr.push((num2 & 170) | (0 & 85));\n    arr.push((num2 & 85) | (0 & 170));\n    return arr;\n  }\n\n  return randomGarbledCharactersArray1().concat(randomGarbledCharactersArray2());\n}\n\nfunction getArr29(dateTime1, dateTime2, params, data, userAgent, runtime) {\n  const parArr = getArr(getArr(params));\n  const dataArr = getArr(getArr(data));\n  const uaSalt = userAgent.includes('Win') ? 0 : 14;\n  const browserArr = getArr(encryptionUa(uaGarbledCharacters(userAgent, uaSalt)));\n  const arr = new Array(55).fill(0);\n  const arr2 = new Array(50).fill(0);\n  const num = getArr2(userAgent);\n  const dateTime3 = Math.trunc((runtime.nowMs() - 1721836800000) / 1000 / 60 / 60 / 24 / 14);\n  const arr0 = randomGarbledCharactersArrayList(runtime);\n\n  arr[0] = 41;\n  arr[1] = dateTime3;\n  arr[2] = 5;\n  arr[3] = (Math.trunc(dateTime1) - Math.trunc(dateTime2) + 3) & 255;\n  arr[4] = dateTime1 & 255;\n  arr[5] = (dateTime1 >> 8) & 255;\n  arr[6] = (dateTime1 >> 16) & 255;\n  arr[7] = (dateTime1 >> 24) & 255;\n  arr[8] = Math.floor(dateTime1 / 256 ** 4) & 255;\n  arr[9] = Math.floor(dateTime1 / 256 ** 5) & 255;\n  arr[10] = 1 & 255;\n  arr[11] = (1 / 256) & 255;\n  arr[12] = 1 & 255;\n  arr[13] = (1 >> 8) & 255;\n  arr[14] = 1;\n  arr[15] = 0 & 255;\n  arr[16] = 0 & 255;\n  arr[17] = 0 & 255;\n  arr[18] = uaSalt & 255;\n  arr[19] = (uaSalt >> 8) & 255;\n  arr[20] = (uaSalt >> 16) & 255;\n  arr[21] = (uaSalt >> 24) & 255;\n  arr[22] = parArr[9];\n  arr[23] = parArr[18];\n  arr[24] = 3;\n  arr[25] = parArr[3];\n  arr[26] = dataArr[10];\n  arr[27] = dataArr[19];\n  arr[28] = 4;\n  arr[29] = dataArr[4];\n  arr[30] = browserArr[11];\n  arr[31] = browserArr[21];\n  arr[32] = 5;\n  arr[33] = browserArr[5];\n  arr[34] = dateTime2 & 255;\n  arr[35] = (dateTime2 >> 8) & 255;\n  arr[36] = (dateTime2 >> 16) & 255;\n  arr[37] = (dateTime2 >> 24) & 255;\n  arr[38] = Math.floor(dateTime2 / 256 ** 4) & 255;\n  arr[39] = Math.floor(dateTime2 / 256 ** 5) & 255;\n  arr[40] = 3;\n\n  const arr32 = 6241;\n  arr[41] = arr32 & 255;\n  arr[42] = (arr32 >> 8) & 255;\n  arr[43] = (arr32 >> 16) & 255;\n  arr[44] = (arr32 >> 24) & 255;\n\n  const arr36 = 6383;\n  arr[45] = arr36 & 255;\n  arr[46] = (arr36 >> 8) & 255;\n  arr[47] = (arr36 >> 16) & 255;\n  arr[48] = (arr36 >> 24) & 255;\n\n  const lastNumOne = getLast3Num(dateTime1);\n  arr[49] = num.length;\n  arr[50] = num.length & 255;\n  arr[51] = (num.length >> 8) & 255;\n  arr[52] = lastNumOne.length;\n  arr[53] = lastNumOne.length & 255;\n  arr[54] = (lastNumOne.length >> 8) & 255;\n\n  const lastNum = getLastNum2(arr0, arr);\n\n  arr2[0] = arr[9];\n  arr2[1] = arr[18];\n  arr2[2] = arr[30];\n  arr2[3] = arr[35];\n  arr2[4] = arr[47];\n  arr2[5] = arr[4];\n  arr2[6] = arr[44];\n  arr2[7] = arr[19];\n  arr2[8] = arr[10];\n  arr2[9] = arr[23];\n  arr2[10] = arr[12];\n  arr2[11] = arr[40];\n  arr2[12] = arr[25];\n  arr2[13] = arr[42];\n  arr2[14] = arr[3];\n  arr2[15] = arr[22];\n  arr2[16] = arr[38];\n  arr2[17] = arr[21];\n  arr2[18] = arr[5];\n  arr2[19] = arr[45];\n  arr2[20] = arr[1];\n  arr2[21] = arr[29];\n  arr2[22] = arr[6];\n  arr2[23] = arr[43];\n  arr2[24] = arr[33];\n  arr2[25] = arr[14];\n  arr2[26] = arr[36];\n  arr2[27] = arr[37];\n  arr2[28] = arr[2];\n  arr2[29] = arr[46];\n  arr2[30] = arr[15];\n  arr2[31] = arr[48];\n  arr2[32] = arr[31];\n  arr2[33] = arr[26];\n  arr2[34] = arr[16];\n  arr2[35] = arr[13];\n  arr2[36] = arr[8];\n  arr2[37] = arr[41];\n  arr2[38] = arr[27];\n  arr2[39] = arr[17];\n  arr2[40] = arr[39];\n  arr2[41] = arr[20];\n  arr2[42] = arr[11];\n  arr2[43] = arr[0];\n  arr2[44] = arr[34];\n  arr2[45] = arr[7];\n  arr2[46] = arr[50];\n  arr2[47] = arr[51];\n  arr2[48] = arr[53];\n  arr2[49] = arr[54];\n\n  const newArr = arr2.concat(num);\n  const newArr2 = newArr.concat(lastNumOne);\n  newArr2.push(lastNum);\n\n  return getNumList(arr0, newArr2, runtime);\n}\n\nfunction getGarbledString(params, data, userAgent, runtimeOptions) {\n  const runtime = normalizeRuntime(runtimeOptions);\n  const timestamp1 = Math.trunc(runtime.nowMs());\n  const timestamp2 = timestamp1 - Math.floor(runtime.random() * 10);\n  const arr29 = getArr29(timestamp1, timestamp2, params, data, userAgent, runtime);\n  const prefix = topHeaderRandomGarbledCharacters(runtime);\n  const mixed = abGarbledCharacters(String.fromCharCode(...arr29));\n  return prefix + mixed;\n}\n\nfunction getABogus(url, data, userAgent, runtimeOptions) {\n  const safeUrl = String(url);\n  const safeData = String(data);\n  const safeUserAgent = String(userAgent);\n  const params = safeUrl.slice(safeUrl.indexOf('?') + 1) + 'dhzx';\n  const mixedData = safeData + 'dhzx';\n  const garbledString = getGarbledString(params, mixedData, safeUserAgent, runtimeOptions);\n  const alphabet = 'Dkdpgh2ZmsQB80/MfvV36XI1R45-WUAlEixNLwoqYTOPuzKFjJnry79HbGcaStCe';\n\n  return encodeCustomBase64(garbledString, alphabet);\n}\n\nmodule.exports = {\n  leftRotate,\n  left_rotate: leftRotate,\n  gt,\n  getArr,\n  get_arr: getArr,\n  getABogus,\n  getGarbledString,\n  abGarbledCharacters,\n  abArr256,\n  ab_arr_256: abArr256,\n  getArr29,\n  get_arr29: getArr29,\n  getLast3Num,\n  getLast_3Num: getLast3Num,\n  getArr2,\n  get_arr2: getArr2,\n  getLastNum2,\n  getNumList,\n  topHeaderRandomGarbledCharacters,\n  randomGarbledCharactersArrayList,\n  encryptionUa,\n  uaGarbledCharacters,\n  uaArr256,\n  ua_arr_256: uaArr256,\n};\n","const crypto = require('crypto');\n\nfunction hexToBuffer(hexString) {\n  if (!hexString) {\n    return Buffer.alloc(0);\n  }\n\n  let normalized = String(hexString).trim();\n  if (normalized.startsWith('0x') || normalized.startsWith('0X')) {\n    normalized = normalized.slice(2);\n  }\n  if (normalized.length % 2 === 1) {\n    normalized = `0${normalized}`;\n  }\n  return Buffer.from(normalized, 'hex');\n}\n\nfunction concatByteArrays(...arrays) {\n  const parts = [];\n\n  for (const arr of arrays) {\n    if (arr == null) {\n      continue;\n    }\n    if (Buffer.isBuffer(arr) || arr instanceof Uint8Array) {\n      parts.push(Buffer.from(arr));\n      continue;\n    }\n    if (Array.isArray(arr)) {\n      parts.push(Buffer.from(arr));\n    }\n  }\n\n  return Buffer.concat(parts);\n}\n\nfunction sliceArray(array, length) {\n  const values = Array.from(array);\n  return length == null ? values : values.slice(0, length);\n}\n\nfunction hmacSha256Sign(key, data) {\n  const keyBuffer = typeof key === 'string' ? Buffer.from(key, 'utf8') : Buffer.from(key);\n  const dataBuffer = typeof data === 'string' ? Buffer.from(data, 'utf8') : Buffer.from(data);\n  return crypto.createHmac('sha256', keyBuffer).update(dataBuffer).digest('hex');\n}\n\nfunction base64UrlToBuffer(value) {\n  const normalized = String(value)\n    .replace(/-/g, '+')\n    .replace(/_/g, '/')\n    .padEnd(Math.ceil(value.length / 4) * 4, '=');\n  return Buffer.from(normalized, 'base64');\n}\n\nfunction getXCoordinateHexFromCertificate(certificatePem) {\n  const certificate = new crypto.X509Certificate(certificatePem);\n  const jwk = certificate.publicKey.export({ format: 'jwk' });\n  return base64UrlToBuffer(jwk.x).toString('hex').padStart(64, '0');\n}\n\nfunction getPrivateScalarHex(privateKeyPem) {\n  const privateKey = crypto.createPrivateKey(privateKeyPem);\n  const jwk = privateKey.export({ format: 'jwk' });\n  return base64UrlToBuffer(jwk.d).toString('hex').padStart(64, '0');\n}\n\nfunction getF(privateKeyHex, publicKeyHex) {\n  const ecdh = crypto.createECDH('prime256v1');\n  ecdh.setPrivateKey(hexToBuffer(privateKeyHex));\n  return ecdh.computeSecret(hexToBuffer(publicKeyHex));\n}\n\nfunction ne(privateKeyPem, certificatePem) {\n  const compressedPublicKeyHex = `02${getXCoordinateHexFromCertificate(certificatePem)}`;\n  const privateKeyHex = getPrivateScalarHex(privateKeyPem);\n  const sharedKey = getF(privateKeyHex, compressedPublicKeyHex);\n  const zeroKey = Buffer.alloc(32);\n  const emptyBytes = Buffer.alloc(0);\n  const outputLength = 32;\n\n  function kdfFunction(seedHex, extraBytes, requiredLength = 32) {\n    let output = Buffer.alloc(0);\n    let previousHex = '';\n    let counter = 0;\n\n    while (output.length < requiredLength) {\n      counter += 1;\n      const previousBytes = previousHex ? hexToBuffer(previousHex) : Buffer.alloc(0);\n      const combined = concatByteArrays(\n        [],\n        sliceArray(previousBytes),\n        sliceArray(extraBytes),\n        [counter],\n      );\n\n      previousHex = hmacSha256Sign(seedHex ? hexToBuffer(seedHex) : Buffer.alloc(0), combined);\n      output = Buffer.concat([output, hexToBuffer(previousHex)]);\n    }\n\n    return output.subarray(0, requiredLength);\n  }\n\n  const initialKey = hmacSha256Sign(zeroKey, sharedKey);\n  return kdfFunction(initialKey, emptyBytes, outputLength);\n}\n\nfunction customHexBase64(hexString) {\n  const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n  let result = '';\n\n  for (let i = 0; i < hexString.length - (hexString.length % 3); i += 3) {\n    const value = Number.parseInt(hexString.slice(i, i + 3), 16);\n    result += alphabet[value >> 6] + alphabet[value & 63];\n  }\n\n  const remaining = hexString.length % 3;\n  if (remaining === 1) {\n    const value = Number.parseInt(hexString.slice(-1), 16);\n    result += alphabet[value << 2];\n  } else if (remaining === 2) {\n    const value = Number.parseInt(hexString.slice(-2), 16);\n    result += alphabet[value >> 2] + alphabet[(value & 3) << 4];\n  }\n\n  while (result.length % 4 !== 0) {\n    result += '=';\n  }\n\n  return result;\n}\n\nfunction getHeadersBdTicketGuardClientData(\n  ticket,\n  path,\n  timestamp,\n  tsSign,\n  privateKeyPem,\n  certificatePem,\n) {\n  const secretKey = ne(privateKeyPem, certificatePem);\n  const dataToSign = `ticket=${ticket}&path=${path}&timestamp=${timestamp}`;\n  const signature = hmacSha256Sign(secretKey, dataToSign);\n  const reqSign = customHexBase64(signature);\n\n  const clientData = {\n    ts_sign: tsSign,\n    req_content: 'ticket,path,timestamp',\n    req_sign: reqSign,\n    timestamp,\n  };\n\n  return Buffer.from(JSON.stringify(clientData), 'utf8').toString('base64');\n}\n\nfunction getBdV2(responseObj, options = {}) {\n  const timestamp = Math.trunc(Date.now() / 1000);\n  const path = options.path ?? '/web/api/media/aweme/create_v2/';\n\n  const headersBdTicketGuardClientData = getHeadersBdTicketGuardClientData(\n    responseObj.ticket,\n    path,\n    timestamp,\n    responseObj.ts_sign,\n    responseObj.ec_privateKey,\n    responseObj.certificate,\n  );\n\n  return {\n    headers_bd_ticket_guard_client_data: headersBdTicketGuardClientData,\n    headers_bd_ticket_guard_ree_public_key: responseObj.bd_ticket_guard_ree_public_key,\n  };\n}\n\nmodule.exports = {\n  hexToBuffer,\n  concatByteArrays,\n  sliceArray,\n  customHexBase64,\n  Lt: hexToBuffer,\n  Kt: concatByteArrays,\n  Rt: sliceArray,\n  hmacSha256Sign,\n  hmac_sha256_sign: hmacSha256Sign,\n  getF,\n  get_f: getF,\n  ne,\n  y: customHexBase64,\n  getHeadersBdTicketGuardClientData,\n  get_headers_bd_ticket_guard_client_data: getHeadersBdTicketGuardClientData,\n  getBdV2,\n  get_bd_v2: getBdV2,\n};","/**\n * 抖音 X-secsdk-csrf-token 生成工具\n * \n * 生成规则：\n * 1. 从 Cookie 中提取关键参数（sessionid, uid_tt, msToken 等）\n * 2. 结合时间戳和请求路径\n * 3. 使用 MD5 加密\n * 4. 转换为16进制字符串\n */\n\nconst crypto = require('crypto');\n\n/**\n * 生成 X-secsdk-csrf-token\n * @param {Object} options 配置项\n * @param {Array} options.cookies Cookie 数组\n * @param {string} options.url 请求 URL（可选）\n * @param {string} options.method 请求方法（可选，默认 'POST'）\n * @returns {string} CSRF Token\n */\nfunction generateCsrfToken(options = {}) {\n    const { cookies = [], url = '', method = 'POST' } = options;\n    \n    // 1. 从 cookies 中提取关键字段\n    const sessionid = getCookieValue(cookies, 'sessionid') || '';\n    const uid_tt = getCookieValue(cookies, 'uid_tt') || '';\n    const msToken = getCookieValue(cookies, 'msToken') || '';\n    const ttwid = getCookieValue(cookies, 'ttwid') || '';\n    \n    // 2. 生成时间戳（秒级）\n    const timestamp = Math.floor(Date.now() / 1000);\n    \n    // 3. 构建签名字符串\n    // 格式：0001{version}{timestamp_hex}{random}{hash}\n    const version = '0000';  // 版本号\n    const timestampHex = timestamp.toString(16).padStart(8, '0');\n    const random = generateRandomHex(8);  // 8位随机数\n    \n    // 4. 计算哈希值\n    const signData = `${method}${url}${sessionid}${uid_tt}${msToken}${ttwid}${timestamp}`;\n    const hash = crypto.createHash('md5').update(signData).digest('hex');\n    \n    // 5. 组合最终 token\n    // 格式：0001 + version(4位) + timestamp(8位) + random(8位) + hash(32位)\n    const csrfToken = `0001${version}${timestampHex}${random}${hash}`;\n    \n    return csrfToken;\n}\n\n/**\n * 从 Cookie 数组中获取指定名称的值\n * @param {Array} cookies Cookie 数组\n * @param {string} name Cookie 名称\n * @returns {string} Cookie 值\n */\nfunction getCookieValue(cookies, name) {\n    const cookie = cookies.find(c => c.name === name);\n    return cookie ? cookie.value : '';\n}\n\n/**\n * 生成随机16进制字符串\n * @param {number} length 长度\n * @returns {string} 随机16进制字符串\n */\nfunction generateRandomHex(length) {\n    const bytes = crypto.randomBytes(Math.ceil(length / 2));\n    return bytes.toString('hex').slice(0, length);\n}\n\n/**\n * 高级版本：基于真实浏览器环境的 token 生成\n * 这个版本更接近真实浏览器的生成逻辑\n * @param {Object} options 配置项\n * @returns {string} CSRF Token\n */\nfunction generateCsrfTokenAdvanced(options = {}) {\n    const { cookies = [], url = '', method = 'POST', userAgent = '' } = options;\n    \n    // 提取关键 Cookie\n    const sessionid = getCookieValue(cookies, 'sessionid') || '';\n    const sid_guard = getCookieValue(cookies, 'sid_guard') || '';\n    const uid_tt = getCookieValue(cookies, 'uid_tt') || '';\n    const msToken = getCookieValue(cookies, 'msToken') || '';\n    const ttwid = getCookieValue(cookies, 'ttwid') || '';\n    const odin_tt = getCookieValue(cookies, 'odin_tt') || '';\n    \n    // 当前时间戳（毫秒）\n    const timestamp = Date.now();\n    const timestampSec = Math.floor(timestamp / 1000);\n    \n    // 解析 URL 路径\n    let pathname = '';\n    try {\n        const urlObj = new URL(url, 'https://creator.douyin.com');\n        pathname = urlObj.pathname;\n    } catch (e) {\n        pathname = url;\n    }\n    \n    // 构建签名字符串（按照抖音 SecSDK 的规则）\n    const signParts = [\n        method.toUpperCase(),\n        pathname,\n        timestampSec,\n        sessionid,\n        sid_guard,\n        uid_tt,\n        msToken,\n        ttwid,\n        odin_tt,\n        userAgent\n    ].filter(Boolean);\n    \n    const signData = signParts.join('|');\n    \n    // 双重 MD5 加密（增强安全性）\n    const firstHash = crypto.createHash('md5').update(signData).digest('hex');\n    const secondHash = crypto.createHash('md5').update(firstHash + timestamp).digest('hex');\n    \n    // 生成最终 token\n    // 格式：0001 + 0000(version) + timestamp_hex(8) + random(8) + hash(32)\n    const timestampHex = timestampSec.toString(16).padStart(8, '0');\n    const random = generateRandomHex(16);\n    \n    return `0001000${timestampHex.slice(0,2)}${random}${secondHash}`;\n}\n\n/**\n * 简化版本：使用固定算法生成 token\n * 适合快速测试和调试\n * @param {Array} cookies Cookie 数组\n * @returns {string} CSRF Token\n */\nfunction generateCsrfTokenSimple(cookies = []) {\n    const sessionid = getCookieValue(cookies, 'sessionid') || 'default_session';\n    const timestamp = Math.floor(Date.now() / 1000);\n    const random = generateRandomHex(32);\n    \n    const hash = crypto.createHash('md5')\n        .update(`${sessionid}${timestamp}${random}`)\n        .digest('hex');\n    \n    const timestampHex = timestamp.toString(16).padStart(8, '0');\n    \n    return `0001000${timestampHex}${random}${hash}`.slice(0, 90);\n}\n\n/**\n * 从真实的 token 中提取时间戳（用于调试）\n * @param {string} token CSRF Token\n * @returns {Object} 解析结果\n */\nfunction parseCsrfToken(token) {\n    if (!token || token.length < 20) {\n        return null;\n    }\n    \n    try {\n        const prefix = token.slice(0, 4);  // 0001\n        const version = token.slice(4, 8);  // 版本号\n        const timestampHex = token.slice(8, 16);  // 时间戳（16进制）\n        const timestamp = parseInt(timestampHex, 16);\n        const date = new Date(timestamp * 1000);\n        \n        return {\n            prefix,\n            version,\n            timestamp,\n            date: date.toISOString(),\n            isValid: prefix === '0001'\n        };\n    } catch (e) {\n        return null;\n    }\n}\n\nmodule.exports = {\n    generateCsrfToken,\n    generateCsrfTokenAdvanced,\n    generateCsrfTokenSimple,\n    parseCsrfToken\n};\n","const crypto = require('crypto');\n\nconst RSA_PUBLIC_KEY_PEM = `-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEA4+dvvY7uM+opc+nLG/DumSeFo7aVcIm1LO+mUIrWprRzP0a1GpEQ\n4qtO9MRf/lwEIx38+4BZ4XOGzevVtuUvfIOUE7ATtQW7FKJf5PnSLCI6/k0vl1FC\nLUSVmEP6qPJrIjZ4zXoqi3yuNZ+1odbRA//GHgcgSyyyaLqzwjkpWGXouMYmvYsS\nppk/fv2EWABstPNxWa4EOBCadTUPkXNQ76NBEP9xzfJS20wiDv1oS/vKvrSUpWcJ\nnazkkBvqQbbAqVbQFTF/DPikppu6ZT6lGIXvJKCreeFiHA2qK6tS18SWVHW9ARz1\n+pjB1eqIIYtohWpT2B40OC4O8tVeBAnbiQIDAQAB\n-----END RSA PUBLIC KEY-----`;\n\nfunction normalizeRuntime(runtime = {}) {\n  return {\n    nowSeconds: typeof runtime.nowSeconds === 'function'\n      ? runtime.nowSeconds\n      : () => Math.trunc(Date.now() / 1000),\n    randomBytes: typeof runtime.randomBytes === 'function'\n      ? runtime.randomBytes\n      : (size) => crypto.randomBytes(size),\n    rsaEncryptBase64: typeof runtime.rsaEncryptBase64 === 'function'\n      ? runtime.rsaEncryptBase64\n      : (plaintext, publicKeyPem) => rsaEncryptBase64(plaintext, publicKeyPem),\n  };\n}\n\nfunction hexToBytes(hexStr) {\n  let normalized = String(hexStr).trim();\n  if (normalized.toLowerCase().startsWith('0x')) {\n    normalized = normalized.slice(2);\n  }\n  return Buffer.from(normalized, 'hex');\n}\n\nfunction importAesCbcKey(raw) {\n  const key = Buffer.from(raw);\n  if (![16, 24, 32].includes(key.length)) {\n    throw new Error('AES key must be 16/24/32 bytes for 128/192/256-bit');\n  }\n  return key;\n}\n\nfunction bytesToB64(data) {\n  return Buffer.from(data).toString('base64');\n}\n\nfunction aesCbcEncrypt(plainText, keyHex, ivBytes) {\n  const key = importAesCbcKey(hexToBytes(keyHex));\n  const iv = Buffer.from(ivBytes);\n  if (iv.length !== 16) {\n    throw new Error('AES-CBC IV must be exactly 16 bytes');\n  }\n\n  const cipher = crypto.createCipheriv(`aes-${key.length * 8}-cbc`, key, iv);\n  const ctBytes = Buffer.concat([\n    cipher.update(Buffer.from(String(plainText), 'utf8')),\n    cipher.final(),\n  ]);\n  const ivPlusCt = Buffer.concat([iv, ctBytes]);\n\n  return {\n    cipherText: bytesToB64(ivPlusCt),\n    encryptedData: bytesToB64(ctBytes),\n    iv: bytesToB64(iv),\n  };\n}\n\nfunction bytesToHex(data) {\n  return Buffer.from(data).toString('hex');\n}\n\nfunction rsaEncryptBase64(plaintext, publicKeyPem) {\n  const encrypted = crypto.publicEncrypt(\n    {\n      key: publicKeyPem,\n      padding: crypto.constants.RSA_PKCS1_PADDING,\n    },\n    Buffer.from(String(plaintext), 'utf8'),\n  );\n  return bytesToB64(encrypted);\n}\n\nfunction aesCbcEncryptWithRandomIv(plaintext, keyHex, runtimeOptions) {\n  const runtime = normalizeRuntime(runtimeOptions);\n  const iv = Buffer.from(runtime.randomBytes(16));\n  if (iv.length !== 16) {\n    throw new Error('Random IV must be exactly 16 bytes');\n  }\n  return aesCbcEncrypt(plaintext, keyHex, iv);\n}\n\nfunction encryptWithRsaPublicKeyBase64(plaintext, runtimeOptions) {\n  const runtime = normalizeRuntime(runtimeOptions);\n  const result = runtime.rsaEncryptBase64(plaintext, RSA_PUBLIC_KEY_PEM);\n  if (!result) {\n    throw new Error('RSA encrypt failed');\n  }\n  return result;\n}\n\nfunction dtraitToken(path, runtimeOptions) {\n  const runtime = normalizeRuntime(runtimeOptions);\n  const payload = {\n    dtrait: 'IAAAAAAA',\n    timestamp: Math.trunc(runtime.nowSeconds()),\n    sdkVersion: '1.0.31',\n    path: String(path),\n  };\n  const jsonText = JSON.stringify(payload);\n\n  const randKeyBytes = Buffer.from(runtime.randomBytes(16));\n  if (randKeyBytes.length !== 16) {\n    throw new Error('Random AES key must be exactly 16 bytes');\n  }\n  const keyHex = bytesToHex(randKeyBytes);\n\n  const enc = aesCbcEncryptWithRandomIv(jsonText, keyHex, runtime);\n  const rsaB64 = encryptWithRsaPublicKeyBase64(keyHex, runtime);\n  return `d0_${rsaB64}_${enc.cipherText}`;\n}\n\nfunction generateDtrait(path, runtimeOptions) {\n  return dtraitToken(path, runtimeOptions);\n}\n\nmodule.exports = {\n  RSA_PUBLIC_KEY_PEM,\n  normalizeRuntime,\n  hexToBytes,\n  hex_to_bytes: hexToBytes,\n  importAesCbcKey,\n  import_aes_cbc_key: importAesCbcKey,\n  bytesToB64,\n  bytes_to_b64: bytesToB64,\n  aesCbcEncrypt,\n  aes_cbc_encrypt: aesCbcEncrypt,\n  bytesToHex,\n  bytes_to_hex: bytesToHex,\n  rsaEncryptBase64,\n  rsa_encrypt_base64: rsaEncryptBase64,\n  aesCbcEncryptWithRandomIv,\n  aes_cbc_encrypt_with_random_iv: aesCbcEncryptWithRandomIv,\n  encryptWithRsaPublicKeyBase64,\n  encrypt_with_rsa_public_key_base64: encryptWithRsaPublicKeyBase64,\n  dtraitToken,\n  dtrait_token: dtraitToken,\n  generateDtrait,\n  generate_dtrait: generateDtrait,\n};\n","const crypto = require('crypto');\n\n// 黑名单头部（不参与签名）\nconst UNSIGNABLE_HEADERS = [\n    'authorization',\n    'content-type',\n    'content-length',\n    'user-agent',\n    'presigned-expires',\n    'expect',\n    'x-amzn-trace-id'\n];\n\n// SHA256 hash\nfunction sha256(data) {\n    return crypto.createHash('sha256').update(data, 'utf8').digest('hex');\n}\n\n// HMAC SHA256\nfunction hmac(key, data) {\n    return crypto.createHmac('sha256', key).update(data, 'utf8').digest();\n}\n\n// 获取签名密钥\nfunction getSigningKey(secretAccessKey, dateStamp, region, service) {\n    const kDate = hmac('AWS4' + secretAccessKey, dateStamp);\n    const kRegion = hmac(kDate, region);\n    const kService = hmac(kRegion, service);\n    const kSigning = hmac(kService, 'aws4_request');\n    return kSigning;\n}\n\n// 判断头部是否可签名\nfunction isSignableHeader(header) {\n    const lowerHeader = header.toLowerCase();\n    return lowerHeader.startsWith('x-amz-') || !UNSIGNABLE_HEADERS.includes(lowerHeader);\n}\n\n// 规范化头部值（移除多余空格）\nfunction canonicalHeaderValues(value) {\n    return value.replace(/\\s+/g, ' ').replace(/^\\s+|\\s+$/g, '');\n}\n\n// 生成 Canonical Headers\nfunction canonicalHeaders(headers) {\n    const headerPairs = [];\n    \n    Object.keys(headers).forEach(key => {\n        headerPairs.push([key, headers[key]]);\n    });\n    \n    // 按头部名称排序\n    headerPairs.sort((a, b) => {\n        return a[0].toLowerCase() < b[0].toLowerCase() ? -1 : 1;\n    });\n    \n    const result = [];\n    headerPairs.forEach(([key, value]) => {\n        const lowerKey = key.toLowerCase();\n        if (isSignableHeader(lowerKey)) {\n            result.push(`${lowerKey}:${canonicalHeaderValues(value.toString())}`);\n        }\n    });\n    \n    return result.join('\\n');\n}\n\n// 生成 Signed Headers\nfunction signedHeaders(headers) {\n    const headerNames = [];\n    \n    Object.keys(headers).forEach(key => {\n        const lowerKey = key.toLowerCase();\n        if (isSignableHeader(lowerKey)) {\n            headerNames.push(lowerKey);\n        }\n    });\n    \n    return headerNames.sort().join(';');\n}\n\n// 生成 Canonical Query String\nexport function canonicalQueryString(params) {\n    if (!params || Object.keys(params).length === 0) {\n        return '';\n    }\n    \n    return Object.keys(params)\n        .sort()\n        .map(key => {\n            const value = params[key];\n            return encodeURIComponent(key) + '=' + encodeURIComponent(String(value));\n        })\n        .join('&');\n}\n\n// ISO8601 时间格式\nfunction iso8601(date) {\n    return date.toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n}\n\n// 生成随机字符串\nexport function randomS() {\n    const pool = '0123456789abcdefghijklmnopqrstuvwxyz';\n    let s = '';\n    for (let i = 0; i < 11; i++) {\n        s += pool.charAt(Math.floor(Math.random() * pool.length));\n    }\n    return s;\n}\n\n// 主函数：生成 Authorization\nexport function generateAuthorization(config) {\n    const {\n        accessKeyId,\n        secretAccessKey,\n        sessionToken,\n        region,\n        service,\n        method = 'GET',\n        pathname = '/',\n        params = {},\n        body = '',\n        headers = {}\n    } = config;\n    \n    // 1. 准备时间\n    const now = new Date();\n    const amzDate = iso8601(now).replace(/[:\\-]|\\.\\d{3}/g, '');\n    const dateStamp = amzDate.substr(0, 8);\n    \n    // 2. 准备请求头\n    const requestHeaders = {\n        ...headers,\n        'X-Amz-Date': amzDate\n    };\n    \n    if (sessionToken) {\n        requestHeaders['x-amz-security-token'] = sessionToken;\n    }\n    \n    // 如果有 body，添加 content hash\n    if (body) {\n        requestHeaders['X-Amz-Content-Sha256'] = sha256(JSON.stringify(body));\n    }\n    \n    // 3. 生成 Canonical Request\n    const canonicalQueryStr = canonicalQueryString(params);\n    const canonicalHeadersStr = canonicalHeaders(requestHeaders);\n    const signedHeadersStr = signedHeaders(requestHeaders);\n    const payloadHash = body ? sha256(JSON.stringify(body)) : sha256('');\n    \n    const canonicalRequest = [\n        method.toUpperCase(),\n        pathname,\n        canonicalQueryStr,\n        canonicalHeadersStr + '\\n',\n        signedHeadersStr,\n        payloadHash\n    ].join('\\n');\n    \n    // console.log('=== Canonical Request ===');\n    // console.log(canonicalRequest);\n    // console.log('========================\\n');\n    \n    // 4. 生成 String to Sign\n    const algorithm = 'AWS4-HMAC-SHA256';\n    const credentialScope = `${dateStamp}/${region}/${service}/aws4_request`;\n    const canonicalRequestHash = sha256(canonicalRequest);\n    \n    const stringToSign = [\n        algorithm,\n        amzDate,\n        credentialScope,\n        canonicalRequestHash\n    ].join('\\n');\n    \n    // console.log('=== String to Sign ===');\n    // console.log(stringToSign);\n    // console.log('======================\\n');\n    \n    // 5. 计算签名\n    const signingKey = getSigningKey(secretAccessKey, dateStamp, region, service);\n    const signature = crypto.createHmac('sha256', signingKey)\n        .update(stringToSign, 'utf8')\n        .digest('hex');\n    \n    // console.log('=== Signature ===');\n    // console.log(signature);\n    // console.log('=================\\n');\n    \n    // 6. 生成 Authorization 头\n    const authorization = `${algorithm} Credential=${accessKeyId}/${credentialScope}, SignedHeaders=${signedHeadersStr}, Signature=${signature}`;\n    \n    return {\n        authorization,\n        headers: requestHeaders,\n        amzDate\n    };\n}\nconst fs = require('fs');\n\nexport function calculateFileCrc32(filePath) {\n    const data = fs.readFileSync(filePath);\n    const crc32Value = crc32(data);\n    const crc32Hex = crc32Value.toString(16);\n    return crc32Hex;\n}\n\nfunction crc32(data) {\n    const CRC_TABLE = [];\n    for (let i = 0; i < 256; i++) {\n        let crc = i;\n        for (let j = 0; j < 8; j++) {\n            crc = (crc & 1) ? (0xEDB88320 ^ (crc >>> 1)) : (crc >>> 1);\n        }\n        CRC_TABLE.push(crc >>> 0);\n    }\n\n    let crc = 0xFFFFFFFF;\n    for (let i = 0; i < data.length; i++) {\n        const byte = data[i];\n        const index = (crc ^ byte) & 0xFF;\n        crc = (CRC_TABLE[index] ^ (crc >>> 8)) >>> 0;\n    }\n\n    crc = (crc ^ 0xFFFFFFFF) >>> 0;\n    return crc;\n}\n\n","const a0_0x45db08=a0_0x4b0d;function a0_0x4b0d(_0x2bd218,_0x316d6){const _0x165410=a0_0x1654();return a0_0x4b0d=function(_0x4b0d73,_0x5794db){_0x4b0d73=_0x4b0d73-0x84;let _0x1859e3=_0x165410[_0x4b0d73];return _0x1859e3;},a0_0x4b0d(_0x2bd218,_0x316d6);}(function(_0x1b2596,_0x16c0e0){const _0x1227f1=a0_0x4b0d,_0x46fb59=_0x1b2596();while(!![]){try{const _0x383dd4=parseInt(_0x1227f1(0x85))/0x1+-parseInt(_0x1227f1(0xb0))/0x2*(-parseInt(_0x1227f1(0x9b))/0x3)+parseInt(_0x1227f1(0xaa))/0x4+-parseInt(_0x1227f1(0xa0))/0x5*(parseInt(_0x1227f1(0x9d))/0x6)+parseInt(_0x1227f1(0x86))/0x7+-parseInt(_0x1227f1(0xab))/0x8*(parseInt(_0x1227f1(0x8d))/0x9)+parseInt(_0x1227f1(0x91))/0xa;if(_0x383dd4===_0x16c0e0)break;else _0x46fb59['push'](_0x46fb59['shift']());}catch(_0x4fc071){_0x46fb59['push'](_0x46fb59['shift']());}}}(a0_0x1654,0x807f8));const Random=Math['random'](),Ts=Date['now'](),Sm3DoneTs=Ts+0x30,xhrParaDoneTs=Ts+0x109,xhrReqDoneTs=Ts+0x10af0;function a0_0x1654(){const _0x46e031=['floor','dhzx','map','_compress','charCodeAt','min','invalid\\x20j\\x20for\\x20constant\\x20Tj','reset','662|856|1920|977|1920|977|1920|1080|Linux\\x20x86_64','6GqxJwW','error','1578UVUSyW','fromCharCode','replace','17445vhaSjq','isNaN','toString','push','length','write','reduce','charAt','reg','split','2475936ufrFMu','2137592VTpBSF','join','Dkdpgh2ZmsQB80/MfvV36XI1R45-WUAlEixNLwoqYTOPuzKFjJnry79HbGcaStCe','exports','fmUmtNjj1OfTrR716RULEyQaLPrOG1jpZz0/4Tyzr7/IbcOXs8PxVxHmrAIsIMm6IfTserj+JgCbPHUssUmedGKwCrIziubgSU0FT1MmqPOZXcPDGB3xUyq+vaM7HZyYgJtKyMR=','48064qVwnFy','concat','prototype','167524mhzzJE','5968354Oyyfma','chunk','string','forEach','size','slice','sort','9BjSPrC','sum','repeat','splice','239400JtRPVl'];a0_0x1654=function(){return _0x46e031;};return a0_0x1654();}class SM3Hasher{constructor(){const _0x468533=a0_0x4b0d;this[_0x468533(0xa8)]=new Array(0x8),this[_0x468533(0x87)]=[],this[_0x468533(0x8a)]=0x0,this[_0x468533(0x99)]();}[a0_0x45db08(0x99)](){const _0x11e792=a0_0x45db08;this[_0x11e792(0xa8)][0x0]=0x7380166f,this[_0x11e792(0xa8)][0x1]=0x4914b2b9,this['reg'][0x2]=0x172442d7,this[_0x11e792(0xa8)][0x3]=0xda8a0600,this['reg'][0x4]=0xa96f30bc,this[_0x11e792(0xa8)][0x5]=0x163138aa,this[_0x11e792(0xa8)][0x6]=0xe38dee4d,this[_0x11e792(0xa8)][0x7]=0xb0fb0e4e,this[_0x11e792(0x87)]=[],this[_0x11e792(0x8a)]=0x0;}[a0_0x45db08(0xa5)](_0x22d1ef){const _0x182388=a0_0x45db08;var _0x2ded18=_0x182388(0x88)==typeof _0x22d1ef?function(_0x5e491d){const _0x12d911=_0x182388;var _0x5795ab=encodeURIComponent(_0x5e491d)[_0x12d911(0x9f)](/%([0-9A-F]{2})/g,function(_0x22d98b,_0x5659da){const _0x357908=_0x12d911;return String[_0x357908(0x9e)]('0x'+_0x5659da);}),_0x5c0d1c=new Array(_0x5795ab['length']);return Array[_0x12d911(0x84)][_0x12d911(0x89)]['call'](_0x5795ab,function(_0x2e8583,_0x28f42f){const _0x4b2a85=_0x12d911;_0x5c0d1c[_0x28f42f]=_0x2e8583[_0x4b2a85(0x96)](0x0);}),_0x5c0d1c;}(_0x22d1ef):_0x22d1ef;this['size']+=_0x2ded18['length'];var _0xffe4ea=0x40-this[_0x182388(0x87)][_0x182388(0xa4)];if(_0x2ded18[_0x182388(0xa4)]<_0xffe4ea)this['chunk']=this[_0x182388(0x87)][_0x182388(0xb1)](_0x2ded18);else{for(this['chunk']=this[_0x182388(0x87)][_0x182388(0xb1)](_0x2ded18[_0x182388(0x8b)](0x0,_0xffe4ea));this[_0x182388(0x87)]['length']>=0x40;)this['_compress'](this[_0x182388(0x87)]),_0xffe4ea<_0x2ded18[_0x182388(0xa4)]?this['chunk']=_0x2ded18[_0x182388(0x8b)](_0xffe4ea,Math[_0x182388(0x97)](_0xffe4ea+0x40,_0x2ded18['length'])):this[_0x182388(0x87)]=[],_0xffe4ea+=0x40;}}[a0_0x45db08(0x8e)](_0x34ff8d,_0xecf9f6){const _0x3ddb20=a0_0x45db08;_0x34ff8d&&(this[_0x3ddb20(0x99)](),this[_0x3ddb20(0xa5)](_0x34ff8d)),this['_fill']();for(var _0x28ac8a=0x0;_0x28ac8a<this[_0x3ddb20(0x87)][_0x3ddb20(0xa4)];_0x28ac8a+=0x40)this[_0x3ddb20(0x95)](this[_0x3ddb20(0x87)]['slice'](_0x28ac8a,_0x28ac8a+0x40));var _0x117621,_0x335539,_0x450e58,_0x5b1ad8=null;if('hex'==_0xecf9f6){_0x5b1ad8='';for(_0x28ac8a=0x0;_0x28ac8a<0x8;_0x28ac8a++)_0x5b1ad8+=(_0x117621=this[_0x3ddb20(0xa8)][_0x28ac8a][_0x3ddb20(0xa2)](0x10),_0x335539=0x8,_0x450e58='0',_0x117621[_0x3ddb20(0xa4)]>=_0x335539?_0x117621:_0x450e58[_0x3ddb20(0x8f)](_0x335539-_0x117621[_0x3ddb20(0xa4)])+_0x117621);}else for(_0x5b1ad8=new Array(0x20),_0x28ac8a=0x0;_0x28ac8a<0x8;_0x28ac8a++){var _0x46ad66=this[_0x3ddb20(0xa8)][_0x28ac8a];_0x5b1ad8[0x4*_0x28ac8a+0x3]=(0xff&_0x46ad66)>>>0x0,_0x46ad66>>>=0x8,_0x5b1ad8[0x4*_0x28ac8a+0x2]=(0xff&_0x46ad66)>>>0x0,_0x46ad66>>>=0x8,_0x5b1ad8[0x4*_0x28ac8a+0x1]=(0xff&_0x46ad66)>>>0x0,_0x46ad66>>>=0x8,_0x5b1ad8[0x4*_0x28ac8a]=(0xff&_0x46ad66)>>>0x0;}return this[_0x3ddb20(0x99)](),_0x5b1ad8;}['_fill'](){const _0xa844a0=a0_0x45db08;var _0x15bc36=0x8*this[_0xa844a0(0x8a)],_0x4a32f3=this['chunk'][_0xa844a0(0xa3)](0x80)%0x40;for(0x40-_0x4a32f3<0x8&&(_0x4a32f3-=0x40);_0x4a32f3<0x38;_0x4a32f3++)this[_0xa844a0(0x87)][_0xa844a0(0xa3)](0x0);for(var _0x36cc0b=0x0;_0x36cc0b<0x4;_0x36cc0b++){var _0xd7dcfe=Math[_0xa844a0(0x92)](_0x15bc36/0x100000000);this['chunk'][_0xa844a0(0xa3)](_0xd7dcfe>>>0x8*(0x3-_0x36cc0b)&0xff);}for(_0x36cc0b=0x0;_0x36cc0b<0x4;_0x36cc0b++)this[_0xa844a0(0x87)][_0xa844a0(0xa3)](_0x15bc36>>>0x8*(0x3-_0x36cc0b)&0xff);}[a0_0x45db08(0x95)](_0x1e530c){const _0x3c50af=a0_0x45db08;function _0x3da582(_0x14b06e,_0x4ec82e){return(_0x14b06e<<(_0x4ec82e%=0x20)|_0x14b06e>>>0x20-_0x4ec82e)>>>0x0;}function _0x489962(_0x5dd43e){const _0x744660=a0_0x4b0d;return 0x0<=_0x5dd43e&&_0x5dd43e<0x10?0x79cc4519:0x10<=_0x5dd43e&&_0x5dd43e<0x40?0x7a879d8a:void console[_0x744660(0x9c)](_0x744660(0x98));}function _0x197f71(_0x5e22dd,_0xfc800b,_0x1300f1,_0xed8891){const _0x3414cb=a0_0x4b0d;return 0x0<=_0x5e22dd&&_0x5e22dd<0x10?(_0xfc800b^_0x1300f1^_0xed8891)>>>0x0:0x10<=_0x5e22dd&&_0x5e22dd<0x40?(_0xfc800b&_0x1300f1|_0xfc800b&_0xed8891|_0x1300f1&_0xed8891)>>>0x0:(console[_0x3414cb(0x9c)]('invalid\\x20j\\x20for\\x20bool\\x20function\\x20FF'),0x0);}function _0x2f42fb(_0x326645,_0x2c63af,_0x558c0d,_0x4a902b){const _0x493bba=a0_0x4b0d;return 0x0<=_0x326645&&_0x326645<0x10?(_0x2c63af^_0x558c0d^_0x4a902b)>>>0x0:0x10<=_0x326645&&_0x326645<0x40?(_0x2c63af&_0x558c0d|~_0x2c63af&_0x4a902b)>>>0x0:(console[_0x493bba(0x9c)]('invalid\\x20j\\x20for\\x20bool\\x20function\\x20GG'),0x0);}if(_0x1e530c[_0x3c50af(0xa4)]<0x40){console[_0x3c50af(0x9c)]('compress\\x20error:\\x20not\\x20enough\\x20data');return;}else{for(var _0x23a9bd=function(_0x7114f5){for(var _0x49cf1f=new Array(0x84),_0x698c70=0x0;_0x698c70<0x10;_0x698c70++)_0x49cf1f[_0x698c70]=_0x7114f5[0x4*_0x698c70]<<0x18,_0x49cf1f[_0x698c70]|=_0x7114f5[0x4*_0x698c70+0x1]<<0x10,_0x49cf1f[_0x698c70]|=_0x7114f5[0x4*_0x698c70+0x2]<<0x8,_0x49cf1f[_0x698c70]|=_0x7114f5[0x4*_0x698c70+0x3],_0x49cf1f[_0x698c70]>>>=0x0;for(var _0xe5328=0x10;_0xe5328<0x44;_0xe5328++){var _0x2b58f2=_0x49cf1f[_0xe5328-0x10]^_0x49cf1f[_0xe5328-0x9]^_0x3da582(_0x49cf1f[_0xe5328-0x3],0xf);_0x2b58f2=_0x2b58f2^_0x3da582(_0x2b58f2,0xf)^_0x3da582(_0x2b58f2,0x17),_0x49cf1f[_0xe5328]=(_0x2b58f2^_0x3da582(_0x49cf1f[_0xe5328-0xd],0x7)^_0x49cf1f[_0xe5328-0x6])>>>0x0;}for(_0xe5328=0x0;_0xe5328<0x40;_0xe5328++)_0x49cf1f[_0xe5328+0x44]=(_0x49cf1f[_0xe5328]^_0x49cf1f[_0xe5328+0x4])>>>0x0;return _0x49cf1f;}(_0x1e530c),_0x17c086=this[_0x3c50af(0xa8)][_0x3c50af(0x8b)](0x0),_0x3621a2=0x0;_0x3621a2<0x40;_0x3621a2++){var _0x5959b9=_0x3da582(_0x17c086[0x0],0xc)+_0x17c086[0x4]+_0x3da582(_0x489962(_0x3621a2),_0x3621a2),_0x3b42ff=((_0x5959b9=_0x3da582(_0x5959b9=(0xffffffff&_0x5959b9)>>>0x0,0x7))^_0x3da582(_0x17c086[0x0],0xc))>>>0x0,_0x50d411=_0x197f71(_0x3621a2,_0x17c086[0x0],_0x17c086[0x1],_0x17c086[0x2]);_0x50d411=(0xffffffff&(_0x50d411=_0x50d411+_0x17c086[0x3]+_0x3b42ff+_0x23a9bd[_0x3621a2+0x44]))>>>0x0;var _0x910e21=_0x2f42fb(_0x3621a2,_0x17c086[0x4],_0x17c086[0x5],_0x17c086[0x6]);_0x910e21=(0xffffffff&(_0x910e21=_0x910e21+_0x17c086[0x7]+_0x5959b9+_0x23a9bd[_0x3621a2]))>>>0x0,_0x17c086[0x3]=_0x17c086[0x2],_0x17c086[0x2]=_0x3da582(_0x17c086[0x1],0x9),_0x17c086[0x1]=_0x17c086[0x0],_0x17c086[0x0]=_0x50d411,_0x17c086[0x7]=_0x17c086[0x6],_0x17c086[0x6]=_0x3da582(_0x17c086[0x5],0x13),_0x17c086[0x5]=_0x17c086[0x4],_0x17c086[0x4]=(_0x910e21^_0x3da582(_0x910e21,0x9)^_0x3da582(_0x910e21,0x11))>>>0x0;}for(var _0x459622=0x0;_0x459622<0x8;_0x459622++)this['reg'][_0x459622]=(this[_0x3c50af(0xa8)][_0x459622]^_0x17c086[_0x459622])>>>0x0;}}}function EnvData2CharCode(_0x58cd97,_0x23e1e0,_0x3ca6b2){const _0x56cb93=a0_0x45db08;let _0x2d49d4=Random*0xf0>>0x0>0x6d?(Random*0xf0>>0x0)+0x2:Random*0xf0>>0x0,_0x3f2013=Random*0xff>>0x0&0x4d|0x2|0x10|0x20|0x80,_0x4b8ded=[Random*0xffff&0xff&0xaa|[0x1,0x0,0x1,0xf][_0x56cb93(0x8b)](0x0,0x2)[0x0]&0x55,Random*0xffff&0xff&0x55|[0x1,0x0,0x1,0xf][_0x56cb93(0x8b)](0x0,0x2)[0x0]&0xaa,Random*0xffff>>0x8&0xaa|[0x1,0x0,0x1,0xf]['slice'](0x0,0x2)[0x1]&0x55,Random*0xffff>>0x8&0x55|[0x1,0x0,0x1,0xf][_0x56cb93(0x8b)](0x0,0x2)[0x1]&0xaa,_0x2d49d4&0xaa|[0x1,0x0,0x1,0xf][_0x56cb93(0x8b)](0x2,0x4)[0x0]&0x55,_0x2d49d4&0x55|[0x1,0x0,0x1,0xf][_0x56cb93(0x8b)](0x2,0x4)[0x0]&0xaa,_0x3f2013&0xaa|[0x1,0x0,0x1,0xf][_0x56cb93(0x8b)](0x2,0x4)[0x1]&0x55,_0x3f2013&0x55|[0x1,0x0,0x1,0xf][_0x56cb93(0x8b)](0x2,0x4)[0x1]&0xaa],_0x5bb315=_0x56cb93(0x9a)['split']('')[_0x56cb93(0x94)](_0x42b4c4=>_0x42b4c4[_0x56cb93(0x96)](0x0)),_0x1cdc95=((String(xhrParaDoneTs+0x3)&0xff)+',')[_0x56cb93(0xa9)]('')[_0x56cb93(0x94)](_0x58aa5d=>_0x58aa5d[_0x56cb93(0x96)](0x0));const _0x26ee7a=new SM3Hasher(),_0xe2d586=_0x26ee7a[_0x56cb93(0x8e)](_0x26ee7a['sum'](_0x58cd97+_0x56cb93(0x93))),_0x571095=_0x26ee7a[_0x56cb93(0x8e)](_0x26ee7a[_0x56cb93(0x8e)](_0x23e1e0+'dhzx')),_0x4dabdb=_0x26ee7a[_0x56cb93(0x8e)](_0x3ca6b2);let _0x4139e6=[0x29,(xhrReqDoneTs-0x190e5788800)/0x3e8/0x3c/0x3c/0x18/0xe>>0x0,0x6,xhrParaDoneTs-Ts+0x3&0xff,xhrParaDoneTs&0xff,xhrParaDoneTs>>0x8&0xff,xhrParaDoneTs>>0x10&0xff,xhrParaDoneTs>>0x18&0xff,xhrParaDoneTs/0x100/0x100/0x100/0x100&0xff,xhrParaDoneTs/0x100/0x100/0x100/0x100/0x100&0xff,xhrParaDoneTs/0x100/0x100/0x100/0x100/0x100&0xff%0x100&0xff,xhrParaDoneTs/0x100/0x100/0x100/0x100/0x100&0xff%0x100&0xff/0x100&0xff,[0xa,0x4,0x4,0x0,0x1][0x4]&0xff,[0xa,0x4,0x4,0x0,0x1][0x4]>>0x8&0xff,[0xa,0x4,0x4,0x0,0x1][0x0],[0xa,0x4,0x4,0x0,0x1][0x1],[0xa,0x4,0x4,0x0,0x1][0x2],[0xa,0x4,0x4,0x0,0x1][0x3],0x8&0xff,0x8>>0x8&0xff,0x8>>0x10&0xff,0x8>>0x18&0xff,_0xe2d586[0x9],_0xe2d586[0x12],0x3,_0xe2d586[0x3],_0x571095[0xa],_0x571095[0x13],0x4,_0x571095[0x4],_0x4dabdb[0xb],_0x4dabdb[0x15],0x5,_0x4dabdb[0x5],Sm3DoneTs&0xff,Sm3DoneTs>>0x8&0xff,Sm3DoneTs>>0x10&0xff,Sm3DoneTs>>0x18&0xff,Sm3DoneTs/0x100/0x100/0x100/0x100&0xff,Sm3DoneTs/0x100/0x100/0x100/0x100/0x100&0xff,0x3,0x6529&0xff,0x6529>>0x8&0xff,0x6529>>0x10&0xff,0x6529>>0x18&0xff,0x4cf&0xff,0x4cf>>0x8&0xff,0x4cf>>0x10&0xff,0x4cf>>0x18&0xff,_0x5bb315['length'],_0x5bb315['length'],0x0,_0x1cdc95[_0x56cb93(0xa4)],_0x1cdc95[_0x56cb93(0xa4)],0x0],_0x339170=[_0x4139e6[0x9],_0x4139e6[0x12],_0x4139e6[0x1e],_0x4139e6[0x23],_0x4139e6[0x2f],_0x4139e6[0x4],_0x4139e6[0x2c],_0x4139e6[0x13],_0x4139e6[0xa],_0x4139e6[0x17],_0x4139e6[0xc],_0x4139e6[0x28],_0x4139e6[0x19],_0x4139e6[0x2a],_0x4139e6[0x3],_0x4139e6[0x16],_0x4139e6[0x26],_0x4139e6[0x15],_0x4139e6[0x5],_0x4139e6[0x2d],_0x4139e6[0x1],_0x4139e6[0x1d],_0x4139e6[0x6],_0x4139e6[0x2b],_0x4139e6[0x21],_0x4139e6[0xe],_0x4139e6[0x24],_0x4139e6[0x25],_0x4139e6[0x2],_0x4139e6[0x2e],_0x4139e6[0xf],_0x4139e6[0x30],_0x4139e6[0x1f],_0x4139e6[0x1a],_0x4139e6[0x10],_0x4139e6[0xd],_0x4139e6[0x8],_0x4139e6[0x29],_0x4139e6[0x1b],_0x4139e6[0x11],_0x4139e6[0x27],_0x4139e6[0x14],_0x4139e6[0xb],_0x4139e6[0x0],_0x4139e6[0x22],_0x4139e6[0x7],_0x4139e6[0x32],_0x4139e6[0x33],_0x4139e6[0x35],_0x4139e6[0x36]];function _0x56e1cd(_0x24b6d5,_0x196cf7){const _0x2eb1f3=_0x56cb93;return _0x196cf7[_0x2eb1f3(0x8c)]((_0x2171ba,_0x925e58)=>_0x925e58-_0x2171ba)[_0x2eb1f3(0x89)](_0x540dbd=>{const _0x2fbb10=_0x2eb1f3;_0x540dbd>=0x0&&_0x540dbd<_0x24b6d5[_0x2fbb10(0xa4)]&&_0x24b6d5[_0x2fbb10(0x90)](_0x540dbd,0x1);}),_0x24b6d5;}let _0x41ebdd=_0x4b8ded[_0x56cb93(0xb1)](_0x56e1cd(_0x4139e6,[0x18,0x1c,0x20,0x31,0x34])),_0x42a240=_0x41ebdd[_0x56cb93(0xa6)]((_0x49ec53,_0x3d9ba0)=>_0x49ec53^_0x3d9ba0),_0xeaa831=_0x339170['concat'](_0x5bb315,_0x1cdc95,_0x42a240),_0x477e24=[],_0x3bd924=0x0;for(let _0xa7bf19=0x0;_0xa7bf19+0x2<_0xeaa831[_0x56cb93(0xa4)];){_0x477e24[_0x56cb93(0xa3)](Random*0x3e8&0xff&0x91|_0xeaa831[_0xa7bf19++]&0x6e),_0x477e24['push'](Random*0x3e8&0xff&0x42|_0xeaa831[_0xa7bf19++]&0xbd),_0x477e24[_0x56cb93(0xa3)](Random*0x3e8&0xff&0x2c|_0xeaa831[_0xa7bf19++]&0xd3),_0x477e24[_0x56cb93(0xa3)](_0xeaa831[_0xa7bf19-0x3]&0x91|_0xeaa831[_0xa7bf19-0x2]&0x42|_0xeaa831[_0xa7bf19-0x1]&0x2c),_0x3bd924+=0x3;}let _0x23c273=_0x4b8ded[_0x56cb93(0xb1)](_0x477e24,_0xeaa831[_0x56cb93(0x8b)](_0x3bd924,_0xeaa831[_0x56cb93(0xa4)]));return _0x23c273[_0x56cb93(0x94)](_0x4d13ab=>String['fromCharCode'](_0x4d13ab))[_0x56cb93(0xac)]('');}function Base2Data(_0x348aa6){const _0x2bc7c7=a0_0x45db08;let _0x874207=[Random*0xffff&0xff&0xaa|[0x3,0x52][0x0]&0x55,Random*0xffff&0xff&0x55|[0x3,0x52][0x0]&0xaa,Random*0x28>>0x0&0xaa|[0x3,0x52][0x1]&0x55,Random*0x28>>0x0&0x55|[0x3,0x52][0x1]&0xaa][_0x2bc7c7(0x94)](_0x224d00=>{const _0x31697c=_0x2bc7c7;return String[_0x31697c(0x9e)](_0x224d00);})[_0x2bc7c7(0xac)](''),_0x235e4f=[0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0,0xef,0xee,0xed,0xec,0xeb,0xea,0xe9,0xe8,0xe7,0xe6,0xe5,0xe4,0xe3,0xe2,0xe1,0xe0,0xdf,0xde,0xdd,0xdc,0xdb,0xda,0xd9,0xd8,0xd7,0xd6,0xd5,0xd4,0xd3,0xd2,0xd1,0xd0,0xcf,0xce,0xcd,0xcc,0xcb,0xca,0xc9,0xc8,0xc7,0xc6,0xc5,0xc4,0xc3,0xc2,0xc1,0xc0,0xbf,0xbe,0xbd,0xbc,0xbb,0xba,0xb9,0xb8,0xb7,0xb6,0xb5,0xb4,0xb3,0xb2,0xb1,0xb0,0xaf,0xae,0xad,0xac,0xab,0xaa,0xa9,0xa8,0xa7,0xa6,0xa5,0xa4,0xa3,0xa2,0xa1,0xa0,0x9f,0x9e,0x9d,0x9c,0x9b,0x9a,0x99,0x98,0x97,0x96,0x95,0x94,0x93,0x92,0x91,0x90,0x8f,0x8e,0x8d,0x8c,0x8b,0x8a,0x89,0x88,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x70,0x6f,0x6e,0x6d,0x6c,0x6b,0x6a,0x69,0x68,0x67,0x66,0x65,0x64,0x63,0x62,0x61,0x60,0x5f,0x5e,0x5d,0x5c,0x5b,0x5a,0x59,0x58,0x57,0x56,0x55,0x54,0x53,0x52,0x51,0x50,0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x49,0x48,0x47,0x46,0x45,0x44,0x43,0x42,0x41,0x40,0x3f,0x3e,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x37,0x36,0x35,0x34,0x33,0x32,0x31,0x30,0x2f,0x2e,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0];const _0x29dde1='Ó'[_0x2bc7c7(0x96)](0x0);let _0x4a74f1=0x0;for(let _0xef36c2=0x0;_0xef36c2<_0x235e4f[_0x2bc7c7(0xa4)];_0xef36c2++){let _0x4120e4=_0x235e4f[_0xef36c2];_0x4a74f1=(_0x4a74f1*_0x4120e4+_0x4a74f1+_0x29dde1)%0x100,[_0x235e4f[_0xef36c2],_0x235e4f[_0x4a74f1]]=[_0x235e4f[_0x4a74f1],_0x235e4f[_0xef36c2]];}let _0x39cb62=0x0,_0x5cbaf6='';for(let _0x29a672=0x0;_0x29a672<_0x348aa6[_0x2bc7c7(0xa4)];_0x29a672++){let _0x96c5ae=_0x348aa6[_0x2bc7c7(0x96)](_0x29a672),_0x46c34b=_0x29a672+0x1,_0x5d4cb4=_0x235e4f[_0x46c34b];[_0x235e4f[_0x46c34b],_0x235e4f[(_0x39cb62+_0x5d4cb4)%0x100]]=[_0x235e4f[(_0x39cb62+_0x5d4cb4)%0x100],_0x235e4f[_0x46c34b]];let _0x506f4f=_0x235e4f[(_0x235e4f[_0x46c34b]+_0x5d4cb4)%0x100];_0x39cb62=(_0x39cb62+_0x5d4cb4)%0x100,_0x5cbaf6+=String['fromCharCode'](_0x96c5ae^_0x506f4f);}return _0x874207+_0x5cbaf6;}function Data2A_B(_0x19ca6d){const _0x5d8d72=a0_0x45db08;let _0x225e7d=_0x5d8d72(0xad),_0x4f0a28='',_0x251d62=[0x3e,0x12a,0x10,0x0,0x4,0x9,0x10,0x0,0x5,0x36,0x0,0x5,0x3e,0x12b,0x1a,0x12c,0x36,0x0,0x5,0x3e,0x12d,0x1a,0x12e,0x36,0x0,0x5,0x3e,0x12f,0x1a,0x130,0x36,0x0,0x5,0x3e,0x131,0x1a,0x10c,0x36,0x0,0x5,0x3e,0x132,0x1a,0x128,0x36,0x0,0x5,0x36,0x0,0x3,0x4c,0x10,0x0,0x6,0x3e,0x24,0x10,0x0,0x7,0x17,0x0,0x10,0x0,0x9,0x36,0x0,0x2,0x4,0x19,0x36,0x0,0x9,0x17,0x3,0x31,0x43,0xe,0x9f,0x36,0x0,0x2,0x16,0x4,0xf7,0x22,0x0,0x9,0x3c,0xc,0x1,0x17,0xff,0x32,0x17,0x10,0x1f,0x36,0x0,0x2,0x16,0x4,0xf7,0x22,0x0,0x9,0x3c,0xc,0x1,0x17,0xff,0x32,0x17,0x8,0x1f,0x20,0x36,0x0,0x2,0x16,0x4,0xf7,0x22,0x0,0x9,0x3c,0xc,0x1,0x17,0xff,0x32,0x20,0x10,0x0,0x8,0x36,0x0,0x7,0x36,0x0,0x6,0x16,0x4,0x67,0x36,0x0,0x8,0x17,0xfc0000,0x32,0x17,0x12,0x33,0xc,0x1,0x31,0x22,0x0,0x7,0x48,0x2b,0x36,0x0,0x7,0x36,0x0,0x6,0x16,0x4,0x67,0x36,0x0,0x8,0x17,0x3f000,0x32,0x17,0xc,0x33,0xc,0x1,0x31,0x22,0x0,0x7,0x48,0x2b,0x36,0x0,0x7,0x36,0x0,0x6,0x16,0x4,0x67,0x36,0x0,0x8,0x17,0xfc0,0x32,0x17,0x6,0x33,0xc,0x1,0x31,0x22,0x0,0x7,0x48,0x2b,0x36,0x0,0x7,0x36,0x0,0x6,0x16,0x4,0x67,0x36,0x0,0x8,0x17,0x3f,0x32,0xc,0x1,0x31,0x22,0x0,0x7,0x48,0x2b,0x12,-0xad,0x36,0x0,0x2,0x4,0x19,0x36,0x0,0x9,0x0,0x17,0x0,0x13,0xe,0xa0,0x36,0x0,0x2,0x16,0x4,0xf7,0x22,0x0,0x9,0x3c,0xc,0x1,0x17,0xff,0x32,0x17,0x10,0x1f,0x36,0x0,0x2,0x4,0x19,0x36,0x0,0x9,0x13,0xe,0x13,0x36,0x0,0x2,0x16,0x4,0xf7,0x36,0x0,0x9,0xc,0x1,0x17,0xff,0x32,0x17,0x8,0x1f,0x12,0x2,0x17,0x0,0x20,0x10,0x0,0x8,0x36,0x0,0x7,0x36,0x0,0x6,0x16,0x4,0x67,0x36,0x0,0x8,0x17,0xfc0000,0x32,0x17,0x12,0x33,0xc,0x1,0x31,0x22,0x0,0x7,0x48,0x2b,0x36,0x0,0x7,0x36,0x0,0x6,0x16,0x4,0x67,0x36,0x0,0x8,0x17,0x3f000,0x32,0x17,0xc,0x33,0xc,0x1,0x31,0x22,0x0,0x7,0x48,0x2b,0x36,0x0,0x7,0x36,0x0,0x2,0x4,0x19,0x36,0x0,0x9,0x13,0xe,0x13,0x36,0x0,0x6,0x16,0x4,0x67,0x36,0x0,0x8,0x17,0xfc0,0x32,0x17,0x6,0x33,0xc,0x1,0x12,0x3,0x36,0x0,0x4,0x31,0x22,0x0,0x7,0x48,0x2b,0x36,0x0,0x7,0x36,0x0,0x4,0x31,0x22,0x0,0x7,0x48,0x2b,0x36,0x0,0x7,0x41];for(let _0x2b8eea=0x0;_0x2b8eea<_0x19ca6d['length'];_0x2b8eea+=0x3){const _0x3fca04=_0x19ca6d[_0x5d8d72(0x96)](_0x2b8eea),_0xb85a46=_0x19ca6d[_0x5d8d72(0x96)](_0x2b8eea+0x1),_0x4e702d=_0x19ca6d[_0x5d8d72(0x96)](_0x2b8eea+0x2),_0x4382e1=_0x3fca04<<_0x251d62[0x5e]|_0xb85a46<<_0x251d62[0x70]|_0x4e702d,_0x225aa0=(_0x4382e1&_0x251d62[0x93])>>_0x251d62[0x96];_0x4f0a28+=_0x225e7d[_0x5d8d72(0xa7)](_0x225aa0);const _0x5607b9=(_0x4382e1&_0x251d62[0xad])>>_0x251d62[0xb0];_0x4f0a28+=!Number[_0x5d8d72(0xa1)](_0x3fca04)?_0x225e7d[_0x5d8d72(0xa7)](_0x5607b9):'=';const _0x3fb7b7=(_0x4382e1&_0x251d62[0xc7])>>_0x251d62[0xca];_0x4f0a28+=!Number[_0x5d8d72(0xa1)](_0xb85a46)?_0x225e7d[_0x5d8d72(0xa7)](_0x3fb7b7):'=';const _0x425784=_0x4382e1&_0x251d62[0xe1];_0x4f0a28+=!Number[_0x5d8d72(0xa1)](_0x4e702d)?_0x225e7d[_0x5d8d72(0xa7)](_0x425784):'=';}return _0x4f0a28;}function GenAB(_0x315138,_0x1c32b3){const _0x206982=a0_0x45db08,_0x56536b=_0x206982(0xaf);return Data2A_B(Base2Data(EnvData2CharCode(_0x315138,_0x1c32b3,_0x56536b)));}module[a0_0x45db08(0xae)]=GenAB;","function encodeUtf8(e) {\n  let r2 = []\n  for (let a = encodeURIComponent(e), c = 0;c < a.length; c++) {\n    const d = a.charAt(c);\n    if (d === \"%\") {\n      const s = Number.parseInt(a.charAt(c + 1) + a.charAt(c + 2), 16);\n      r2.push(s), c += 2;\n    } else\n      r2.push(d.charCodeAt(0));\n  }\n  return r2;\n}\nvar c = [\n  \"Z\",\n  \"m\",\n  \"s\",\n  \"e\",\n  \"r\",\n  \"b\",\n  \"B\",\n  \"o\",\n  \"H\",\n  \"Q\",\n  \"t\",\n  \"N\",\n  \"P\",\n  \"+\",\n  \"w\",\n  \"O\",\n  \"c\",\n  \"z\",\n  \"a\",\n  \"/\",\n  \"L\",\n  \"p\",\n  \"n\",\n  \"g\",\n  \"G\",\n  \"8\",\n  \"y\",\n  \"J\",\n  \"q\",\n  \"4\",\n  \"2\",\n  \"K\",\n  \"W\",\n  \"Y\",\n  \"j\",\n  \"0\",\n  \"D\",\n  \"S\",\n  \"f\",\n  \"d\",\n  \"i\",\n  \"k\",\n  \"x\",\n  \"3\",\n  \"V\",\n  \"T\",\n  \"1\",\n  \"6\",\n  \"I\",\n  \"l\",\n  \"U\",\n  \"A\",\n  \"F\",\n  \"M\",\n  \"9\",\n  \"7\",\n  \"h\",\n  \"E\",\n  \"C\",\n  \"v\",\n  \"u\",\n  \"R\",\n  \"X\",\n  \"5\"\n];\nfunction tripletToBase64(e) {\n  return c[e >> 18 & 63] + c[e >> 12 & 63] + c[e >> 6 & 63] + c[63 & e];\n}\nfunction encodeChunk(e, a, r2) {\n  for (var c2, d = [], s = a;s < r2; s += 3)\n    c2 = (e[s] << 16 & 16711680) + (e[s + 1] << 8 & 65280) + (255 & e[s + 2]), d.push(tripletToBase64(c2));\n  return d.join(\"\");\n}\nfunction b64Encode(e) {\n  for (var a, r2 = e.length, d = r2 % 3, s = [], f = 16383, u = 0, l = r2 - d;u < l; u += f)\n    s.push(encodeChunk(e, u, u + f > l ? l : u + f));\n  return d === 1 ? (a = e[r2 - 1], s.push(c[a >> 2] + c[a << 4 & 63] + \"==\")) : d === 2 && (a = (e[r2 - 2] << 8) + e[r2 - 1], s.push(c[a >> 10] + c[a >> 4 & 63] + c[a << 2 & 63] + \"=\")), s.join(\"\");\n}\nfunction encode_mnsv2(mnsv2, type, platform, req_type) {\n  const f = {\n    x0: \"4.2.8\",\n    x1: type,\n    x2: platform,\n    x3: mnsv2,\n    x4: req_type\n  };\n  return \"XYS_\" + b64Encode(encodeUtf8(JSON.stringify(f)));\n}\nmodule.exports = encode_mnsv2\n","var _0x5e26 = ['1OWxddp', 'UMGUw', 'PqfSQ', 'bAFBA', 'RdZOW', 'VTKBBQFM', 'zxdmC', 'tmPwM', 'wiumi', 'ΙIΙ', 'MhWZS', 'setPrototypeOf', 'PyUdY', 'MjAjc', 'xPcsI', 'EJjtF', 'HGVol', 'yxiaz', 'prototype', 'OBxQX', 'apply', 'cXDFm', '[object\\x20Arguments]', 'BqDfU', 'IIΙ', 'HaYEx', 'XVDwO', 'jqHEd', 'eJIqr', 'BmFKC', 'vFVcP', 'length', 'rUBOo', 'kouSN', 'IVyLJ', 'UgkRn', '231578RZAPRo', 'iJhUX', 'slice', 'PWtFM', 'HkaBE', 'tYXYt', '321249iOnvFh', 'GADdy', 'IUXjo', 'AbRVN', 'Hcklz', 'hwjfK', 'kmriT', 'uMRFn', 'rttQd', '__bc', 'XxNlA', 'kqKnQ', 'mQhYz', 'sWKCl', 'construct', '260713ggTmlX', 'BYbSM', '3icXZpW', 'mZrHM', 'ZYFsA', 'ZQUMb', 'YtJvW', 'yuUMe', 'euoqz', 'jHwuh', 'CciCu', 'bind', 'JOCDJ', 'gqOZZ', 'IΙI', 'TNifp', 'CozeT', 'sham', 'SMVQv', 'ksZAC', '258308ThHaAN', 'qDuah', 'XBnTt', 'LzUba', '746795dpceNN', 'POWBq', 'Pwrup', 'BdEvR', 'fromCharCode', 'juZTe', 'iGuJR', 'bPojh', 'keys', 'lzlIX', 'yZBVv', 'yOsHa', 'err-209e10:\\x20+\\x20', 'QiARX', 'ABRVQ', 'xRIOr', 'XDOoR', 'oRfag', 'undefined', '1QZcWJQ', 'FdcjM', 'PczfC', 'ΙII', 'uixXY', 'ahwRp', 'SOoBb', 'RMSgu', 'hJTjo', 'yrDYx', 'dxzss', 'qfwSc', 'idiYu', 'DlfXv', 'UwVWk', 'PdbAc', 'push', 'gZeSF', 'nWekH', 'Kbhwt', 'ndGnJ', 'kPvxn', '121585KCTaKM', 'comGc', 'wnbho', 'QBTLS', 'NOFBb', 'SAYoa', 'XDLWq', 'cFexY', 'SygNu', 'function', 'HTOjf', 'hOwmN', 'EGbYA', 'suYWh', 'vvqfG', 'EJPiB', 'uCThz', 'FSTxk', 'Awtlv', 'XLyDS', 'qskTK', 'ZqAbc', 'PzXQN', 'sGqQS', 'JsjPA', 'tLDgE', 'QqSfw', 'xMjZi', 'Tthhs', 'IΙΙ', '742454TyjCbv', 'zmfqy', 'WLUSP', 'yrZuT', 'call', 'toString'];\nvar _0x4a41 = function(_0x1218b5, _0x5e2612) {\n    _0x1218b5 = _0x1218b5 - 0x0;\n    var _0x4a419f = _0x5e26[_0x1218b5];\n    return _0x4a419f;\n};\n(function(_0xe72767, _0xe7f5e) {\n    var _0x3fd162 = _0x4a41;\n    while (!![]) {\n        try {\n            var _0x257514 = parseInt(_0x3fd162(0x29)) * -parseInt(_0x3fd162(0x54)) + parseInt(_0x3fd162(0x14)) + parseInt(_0x3fd162(0x41)) + -parseInt(_0x3fd162(0x2b)) * parseInt(_0x3fd162(0x6a)) + -parseInt(_0x3fd162(0x1a)) + -parseInt(_0x3fd162(0x3d)) + parseInt(_0x3fd162(0x8e)) * parseInt(_0x3fd162(0x88));\n            if (_0x257514 === _0xe7f5e)\n                break;\n            else\n                _0xe72767['push'](_0xe72767['shift']());\n        } catch (_0x5c8197) {\n            _0xe72767['push'](_0xe72767['shift']());\n        }\n    }\n}(_0x5e26, 0x7deda));\nvar glb = globalThis;\nglb['c93b4da3'] = function(_0x24c604, _0x6a35ed, _0x22f624) {\n    var _0x7083c4 = _0x4a41\n      , _0x12b83a = {\n        'gqOZZ': function(_0x1ff265, _0x19dd10) {\n            return _0x1ff265 == _0x19dd10;\n        },\n        'iLzQB': _0x7083c4(0x53),\n        'ksZAC': function(_0x2bfbca, _0x5cafee) {\n            return _0x2bfbca === _0x5cafee;\n        },\n        'rUBOo': _0x7083c4(0x1f),\n        'NOFBb': function(_0x2f08d7, _0x37fbe9) {\n            return _0x2f08d7 === _0x37fbe9;\n        },\n        'yOsHa': function(_0x33582f, _0x641642) {\n            return _0x33582f + _0x641642;\n        },\n        'mZrHM': function(_0x2fdb95, _0x1258bd) {\n            return _0x2fdb95 >> _0x1258bd;\n        },\n        'JMbrB': function(_0x5bf9ad, _0xf255ce) {\n            return _0x5bf9ad + _0xf255ce;\n        },\n        'nWekH': function(_0xee3311, _0x318ddf, _0x4385f3) {\n            return _0xee3311(_0x318ddf, _0x4385f3);\n        },\n        'HGVol': function(_0x584e4a, _0x5c149f) {\n            return _0x584e4a + _0x5c149f;\n        },\n        'dxzss': function(_0x17b7fe, _0x174344) {\n            return _0x17b7fe > _0x174344;\n        },\n        'oRfag': function(_0x18d99e, _0x5cbc7d) {\n            return _0x18d99e + _0x5cbc7d;\n        },\n        'zxdmC': function(_0x56bf71, _0x3dc1b2) {\n            return _0x56bf71 + _0x3dc1b2;\n        },\n        'bAFBA': function(_0x16e5da, _0xa53bfb) {\n            return _0x16e5da > _0xa53bfb;\n        },\n        'wnbho': function(_0x485b39, _0x387bd5) {\n            return _0x485b39 + _0x387bd5;\n        },\n        'comGc': function(_0x3dcf70, _0x48eb89) {\n            return _0x3dcf70 + _0x48eb89;\n        },\n        'IVyLJ': function(_0x5d0e43, _0xe05ad5) {\n            return _0x5d0e43 + _0xe05ad5;\n        },\n        'SAYoa': function(_0x2463d8, _0x1a5a8f, _0x49936e) {\n            return _0x2463d8(_0x1a5a8f, _0x49936e);\n        },\n        'SOoBb': _0x7083c4(0x57),\n        'yZBVv': 'IIΙ',\n        'MjAjc': 'ΙIΙ',\n        'MhWZS': function(_0x45d1a1, _0x2a01a0) {\n            return _0x45d1a1 ^ _0x2a01a0;\n        },\n        'EJjtF': function(_0x3ff15b, _0x4f901b) {\n            return _0x3ff15b * _0x4f901b;\n        },\n        'qskTK': function(_0x1dfe70, _0x51b176) {\n            return _0x1dfe70 === _0x51b176;\n        },\n        'ABRVQ': function(_0x3d45e0, _0xf84a5d) {\n            return _0x3d45e0 === _0xf84a5d;\n        },\n        'lzlIX': function(_0x39dfca, _0x3e5179) {\n            return _0x39dfca === _0x3e5179;\n        },\n        'WDtsC': function(_0x3f8716, _0x3aa298, _0x4d3f6b, _0x4446eb, _0x4c8666, _0x1397bd, _0x3b53d5, _0x25f6f4, _0x29b4e2) {\n            return _0x3f8716(_0x3aa298, _0x4d3f6b, _0x4446eb, _0x4c8666, _0x1397bd, _0x3b53d5, _0x25f6f4, _0x29b4e2);\n        },\n        'HTOjf': function(_0x3f4419, _0x5170ae, _0x1359a6, _0x50e590, _0x338aeb, _0x3a9605, _0x290bc9, _0x1ff6c7, _0xcd43a3) {\n            return _0x3f4419(_0x5170ae, _0x1359a6, _0x50e590, _0x338aeb, _0x3a9605, _0x290bc9, _0x1ff6c7, _0xcd43a3);\n        },\n        'GrFtx': _0x7083c4(0x37),\n        'PWtFM': function(_0x3b25e9, _0x5e42f8) {\n            return _0x3b25e9 === _0x5e42f8;\n        },\n        'tLDgE': function(_0x1ba8e5, _0x26aef5) {\n            return _0x1ba8e5 > _0x26aef5;\n        },\n        'POWBq': function(_0x65c1f7, _0x373aa4) {\n            return _0x65c1f7 === _0x373aa4;\n        },\n        'mpwlj': function(_0x50d703, _0x928a91) {\n            return _0x50d703 * _0x928a91;\n        },\n        'hJTjo': function(_0xb408a6, _0x20a02d) {\n            return _0xb408a6 + _0x20a02d;\n        },\n        'AbRVN': function(_0x29f74b, _0x545253) {\n            return _0x29f74b === _0x545253;\n        },\n        'FSTxk': function(_0x358a47, _0x3f46e4) {\n            return _0x358a47 < _0x3f46e4;\n        },\n        'UwVWk': function(_0x18ec78, _0x4a7966) {\n            return _0x18ec78 > _0x4a7966;\n        },\n        'OBxQX': function(_0x31653d, _0x3e50ef) {\n            return _0x31653d === _0x3e50ef;\n        },\n        'mQhYz': _0x7083c4(0x9a),\n        'SMVQv': function(_0x4d3a96, _0x1a13b2) {\n            return _0x4d3a96 === _0x1a13b2;\n        },\n        'DgvJt': function(_0x3bacd8, _0x5887b3) {\n            return _0x3bacd8 === _0x5887b3;\n        },\n        'PqfSQ': function(_0x436eef, _0x5222c2) {\n            return _0x436eef > _0x5222c2;\n        },\n        'BYbSM': function(_0x2c8c91, _0x7980dd) {\n            return _0x2c8c91 === _0x7980dd;\n        },\n        'EGbYA': function(_0xd59293, _0x2b8404) {\n            return _0xd59293 === _0x2b8404;\n        },\n        'PDTHy': function(_0x24f33b, _0xd06423) {\n            return _0x24f33b + _0xd06423;\n        },\n        'Pwrup': function(_0x472411, _0x583510) {\n            return _0x472411 + _0x583510;\n        },\n        'JOCDJ': function(_0x560524, _0x189796) {\n            return _0x560524 === _0x189796;\n        },\n        'ZQUMb': function(_0x28584e, _0x4faf64) {\n            return _0x28584e === _0x4faf64;\n        },\n        'jHwuh': function(_0x4b2e99, _0x3623da) {\n            return _0x4b2e99 - _0x3623da;\n        },\n        'eJIqr': function(_0xce7c94, _0x9032ec) {\n            return _0xce7c94 === _0x9032ec;\n        },\n        'XxNlA': function(_0x14736a, _0x6288b8) {\n            return _0x14736a === _0x6288b8;\n        },\n        'zmfqy': function(_0x4f7385, _0x49c856) {\n            return _0x4f7385 === _0x49c856;\n        },\n        'suYWh': function(_0x176f10, _0x5253ed) {\n            return _0x176f10 === _0x5253ed;\n        },\n        'yuUMe': function(_0x261198, _0x176d4f) {\n            return _0x261198 === _0x176d4f;\n        },\n        'wUDmg': function(_0x5cb9a5, _0x319795) {\n            return _0x5cb9a5 > _0x319795;\n        },\n        'HaYEx': function(_0x380a2e, _0x42b18d) {\n            return _0x380a2e > _0x42b18d;\n        },\n        'euoqz': function(_0x38ffc5, _0x5cfc49) {\n            return _0x38ffc5 === _0x5cfc49;\n        },\n        'ndGnJ': function(_0x2f4e06, _0x1f4ce1) {\n            return _0x2f4e06(_0x1f4ce1);\n        },\n        'kouSN': function(_0x579306, _0x125668) {\n            return _0x579306 === _0x125668;\n        },\n        'pKKkl': function(_0x1a570e, _0x15b5be) {\n            return _0x1a570e === _0x15b5be;\n        },\n        'juZTe': function(_0x55b590, _0x5a2f99) {\n            return _0x55b590 === _0x5a2f99;\n        },\n        'BqDfU': function(_0x2b20aa, _0x25efe9) {\n            return _0x2b20aa === _0x25efe9;\n        },\n        'yrZuT': function(_0x5a70e7, _0x301cd3) {\n            return _0x5a70e7 > _0x301cd3;\n        },\n        'RdZOW': function(_0x1701b4, _0x42f110) {\n            return _0x1701b4 > _0x42f110;\n        },\n        'wsfhT': function(_0x5aa648, _0x105428) {\n            return _0x5aa648 === _0x105428;\n        },\n        'FdcjM': function(_0x47dd10, _0x410a4e) {\n            return _0x47dd10 === _0x410a4e;\n        },\n        'QiARX': function(_0x97fa53, _0x8beaee) {\n            return _0x97fa53 > _0x8beaee;\n        },\n        'yxiaz': function(_0x584b00, _0x4e8343, _0x434d83) {\n            return _0x584b00(_0x4e8343, _0x434d83);\n        },\n        'JsjPA': function(_0x3e4974, _0x1f5b2f) {\n            return _0x3e4974 > _0x1f5b2f;\n        },\n        'GADdy': function(_0xfeec47, _0x9fb647) {\n            return _0xfeec47 + _0x9fb647;\n        },\n        'Awtlv': function(_0x8c3df2, _0x17fbce) {\n            return _0x8c3df2 < _0x17fbce;\n        },\n        'gZeSF': function(_0x246e23, _0x2163fd) {\n            return _0x246e23 - _0x2163fd;\n        },\n        'LdgBs': function(_0x4557a3, _0x5ce007) {\n            return _0x4557a3 * _0x5ce007;\n        },\n        'vFVcP': function(_0x189e3c, _0x39d9b2) {\n            return _0x189e3c === _0x39d9b2;\n        },\n        'EJPiB': function(_0x4d5e62, _0x3c4e2e) {\n            return _0x4d5e62 > _0x3c4e2e;\n        },\n        'sGqQS': function(_0x1275b5, _0x111acb) {\n            return _0x1275b5 === _0x111acb;\n        },\n        'wiumi': function(_0x45d234, _0x5c740a) {\n            return _0x45d234 > _0x5c740a;\n        },\n        'kmriT': function(_0x330c1e, _0x496b23) {\n            return _0x330c1e === _0x496b23;\n        },\n        'BPpsP': function(_0x3b8ef1, _0x231263) {\n            return _0x3b8ef1 === _0x231263;\n        },\n        'UgkRn': function(_0x25eebc, _0x1b69fa) {\n            return _0x25eebc ^ _0x1b69fa;\n        },\n        'RMSgu': function(_0x1da372, _0x2272aa) {\n            return _0x1da372 === _0x2272aa;\n        },\n        'sKqsm': function(_0x11af26, _0x4404cf) {\n            return _0x11af26 === _0x4404cf;\n        },\n        'QqSfw': function(_0x35dada, _0x334cfd) {\n            return _0x35dada === _0x334cfd;\n        },\n        'TNifp': function(_0x43e4f0, _0x3cf229) {\n            return _0x43e4f0 > _0x3cf229;\n        },\n        'kqKnQ': function(_0x1b53c3, _0x5d9a2a) {\n            return _0x1b53c3 === _0x5d9a2a;\n        },\n        'PcJlX': function(_0x2e2a54, _0x1d5c8b) {\n            return _0x2e2a54 === _0x1d5c8b;\n        },\n        'uCThz': function(_0x275a32, _0x4b36cf) {\n            return _0x275a32 === _0x4b36cf;\n        },\n        'xMjZi': _0x7083c4(0x51),\n        'HkaBE': function(_0x974374, _0x11b253) {\n            return _0x974374 === _0x11b253;\n        },\n        'Tthhs': function(_0x3510ae, _0x2c1c19) {\n            return _0x3510ae === _0x2c1c19;\n        },\n        'hOwmN': function(_0x237c62, _0x2ed7be) {\n            return _0x237c62 > _0x2ed7be;\n        },\n        'UWMGT': function(_0x27caf3, _0x59cf43) {\n            return _0x27caf3 === _0x59cf43;\n        },\n        'PzXQN': function(_0x161ca7, _0x351dad) {\n            return _0x161ca7 === _0x351dad;\n        },\n        'tYXYt': function(_0x59f40f, _0x56db54) {\n            return _0x59f40f > _0x56db54;\n        },\n        'RbRaq': _0x7083c4(0x7f),\n        'CciCu': 'ZefSz',\n        'XVDwO': function(_0x2731c5, _0x215661) {\n            return _0x2731c5 + _0x215661;\n        },\n        'PdbAc': function(_0x20571c, _0x2f81a1) {\n            return _0x20571c * _0x2f81a1;\n        },\n        'tmPwM': function(_0x325743, _0x315b84) {\n            return _0x325743 > _0x315b84;\n        },\n        'vvqfG': function(_0x29299d, _0x26e36b) {\n            return _0x29299d === _0x26e36b;\n        },\n        'qfwSc': function(_0x3ccd9d, _0x1bb79d) {\n            return _0x3ccd9d + _0x1bb79d;\n        },\n        'ZYFsA': function(_0xc8fbc5, _0x1a7921) {\n            return _0xc8fbc5 - _0x1a7921;\n        },\n        'OCCVJ': function(_0x10f7a4, _0x1e948f) {\n            return _0x10f7a4 > _0x1e948f;\n        },\n        'UMGUw': function(_0x5ec926, _0x2a9505) {\n            return _0x5ec926 === _0x2a9505;\n        },\n        'Kbhwt': function(_0x3a3eed, _0x55fbaf) {\n            return _0x3a3eed > _0x55fbaf;\n        },\n        'CozeT': function(_0x266fac, _0x3c78a3) {\n            return _0x266fac === _0x3c78a3;\n        },\n        'SygNu': function(_0x35474d, _0xa44cbd) {\n            return _0x35474d * _0xa44cbd;\n        },\n        'PczfC': function(_0xb82f14, _0x22aa37) {\n            return _0xb82f14 > _0x22aa37;\n        },\n        'LzUba': function(_0x17d4ea, _0x2636de) {\n            return _0x17d4ea !== _0x2636de;\n        },\n        'Hcklz': function(_0x45fc23, _0x56bd98) {\n            return _0x45fc23 === _0x56bd98;\n        },\n        'jqHEd': function(_0x17a8e3, _0x1bb49c) {\n            return _0x17a8e3 + _0x1bb49c;\n        },\n        'yrDYx': function(_0x406702, _0x5cfd36) {\n            return _0x406702 < _0x5cfd36;\n        },\n        'YtJvW': function(_0x38316d, _0x172a9d) {\n            return _0x38316d + _0x172a9d;\n        },\n        'IUXjo': function(_0x5382c2, _0x2ad38b, _0x367bd3) {\n            return _0x5382c2(_0x2ad38b, _0x367bd3);\n        }\n    };\n    function _0x39fe15() {\n        var _0xf72fd1 = _0x7083c4;\n        if (_0x12b83a[_0xf72fd1(0x36)](_0x12b83a['iLzQB'], typeof Reflect) || !Reflect[_0xf72fd1(0x28)])\n            return !0x1;\n        if (Reflect[_0xf72fd1(0x28)][_0xf72fd1(0x3a)])\n            return !0x1;\n        if (_0x12b83a[_0xf72fd1(0x36)]('function', typeof Proxy))\n            return !0x0;\n        try {\n            return Date[_0xf72fd1(0x2)][_0xf72fd1(0x8d)][_0xf72fd1(0x8c)](Reflect[_0xf72fd1(0x28)](Date, [], function() {})),\n            !0x0;\n        } catch (_0x1acf38) {\n            return !0x1;\n        }\n    }\n    function _0x5419d5(_0xc4e151, _0x1cdc6a, _0x385b68) {\n        var _0x3cb9ef = _0x7083c4\n          , _0xaf1f2b = {\n            'uMRFn': function(_0x2035d4, _0xa530a2, _0x5349ad) {\n                return _0x2035d4(_0xa530a2, _0x5349ad);\n            }\n        };\n        return (_0x5419d5 = _0x39fe15() ? Reflect['construct'] : function(_0x31f90b, _0x355d4c, _0x28afe6) {\n            var _0x17e79c = _0x4a41\n              , _0x1b4231 = {\n                'WLUSP': function(_0x3d7900, _0x1a45c4) {\n                    return _0x3d7900 + _0x1a45c4;\n                },\n                'idiYu': function(_0xfd41fb, _0x1dade8) {\n                    return _0xfd41fb + _0x1dade8;\n                },\n                'iGuJR': function(_0x23bd86, _0x5044eb) {\n                    return _0x23bd86 - _0x5044eb;\n                }\n            };\n            if (_0x17e79c(0x7d) === _0x17e79c(0x58)) {\n                function _0x1b4a48() {\n                    var _0xed3200 = _0x17e79c\n                      , _0x1f9d27 = _0x4b6f90[_0x1b4231[_0xed3200(0x8a)](_0xafab0f -= 0x2, 0x1)];\n                    for (_0x22e6cd = _0x3d3dc6[_0x36209c][_0x1f9d27] = _0x5aa9d8[_0x1b4231[_0xed3200(0x60)](_0x1ad466, 0x2)]; 0x166e === _0x3355d2; )\n                        _0x4386e5 = _0x230507[_0x2cbcdf][_0x1b4231[_0xed3200(0x47)](_0x1f9d27, 0x1)] = !_0x159f0e[_0x4d33d1 + 0x2];\n                    0x166e === _0x1f9d27 && (_0x197574 = _0xe2df51[_0x35fa65][_0x1f9d27 - 0x1] = !_0x194e9c[_0x1b4231[_0xed3200(0x60)](_0xa0cfd3, 0x2)]),\n                    _0x4e9811--;\n                }\n            } else {\n                var _0x12fb2d = [null];\n                _0x12fb2d[_0x17e79c(0x64)][_0x17e79c(0x4)](_0x12fb2d, _0x355d4c);\n                var _0x2fcaa9 = new (Function[_0x17e79c(0x34)]['apply'](_0x31f90b, _0x12fb2d))();\n                return _0x28afe6 && _0xaf1f2b[_0x17e79c(0x21)](_0x2e7a26, _0x2fcaa9, _0x28afe6[_0x17e79c(0x2)]),\n                _0x2fcaa9;\n            }\n        }\n        )[_0x3cb9ef(0x4)](null, arguments);\n    }\n    function _0x2e7a26(_0x50aa3b, _0x5b028a) {\n        var _0x120a3e = _0x7083c4;\n        return (_0x2e7a26 = Object[_0x120a3e(0x99)] || function(_0x5179ac, _0x5685b9) {\n            return _0x5179ac['__proto__'] = _0x5685b9,\n            _0x5179ac;\n        }\n        )(_0x50aa3b, _0x5b028a);\n    }\n    function _0x1373ba(_0xa8799b) {\n        var _0x5b8490 = {\n            'XBnTt': function(_0x4e36e2, _0x92f5b1) {\n                return _0x4e36e2 == _0x92f5b1;\n            },\n            'ErAsM': function(_0x2bb008, _0x12649b) {\n                return _0x2bb008 < _0x12649b;\n            },\n            'bPojh': function(_0x1c25d9, _0x365c42) {\n                return _0x1c25d9 < _0x365c42;\n            }\n        };\n        return function(_0x11608f) {\n            var _0x4605ce = _0x4a41;\n            if (_0x12b83a[_0x4605ce(0x3c)](_0x12b83a[_0x4605ce(0x10)], _0x4605ce(0x27))) {\n                function _0x3d378b() {\n                    var _0x43afe4 = _0x4605ce, _0x532ac4, _0x2a8eba;\n                    _0x5b8490[_0x43afe4(0x3f)](null, _0x548930) && (_0x4a688e = this),\n                    _0x55558e && !_0x177290['d'] && (_0x5cc057['d'] = 0x0,\n                    _0x4cb4f8['$0'] = _0x4b0f36,\n                    _0x5e1932[0x1] = {});\n                    var _0x2b7d1e = {}\n                      , _0xec9b8d = _0x2b7d1e['d'] = _0x58d483 ? _0x13e036['d'] + 0x1 : 0x0;\n                    for (_0x2b7d1e['$' + _0xec9b8d] = _0x2b7d1e,\n                    _0x2a8eba = 0x0; _0x5b8490['ErAsM'](_0x2a8eba, _0xec9b8d); _0x2a8eba++)\n                        _0x2b7d1e[_0x532ac4 = '$' + _0x2a8eba] = _0x345188[_0x532ac4];\n                    for (_0x2a8eba = 0x0,\n                    _0xec9b8d = _0x2b7d1e[_0x43afe4(0xf)] = _0x476742[_0x43afe4(0xf)]; _0x5b8490[_0x43afe4(0x48)](_0x2a8eba, _0xec9b8d); _0x2a8eba++)\n                        _0x2b7d1e[_0x2a8eba] = _0x4d830d[_0x2a8eba];\n                    return _0xd4d768 && _0x5a461e[_0x322e98],\n                    _0x58df46[_0x7e9d11],\n                    _0x5decd7(_0x37654f, _0x4ebe6a, _0x87d026, 0x0, _0x2b7d1e, _0x54e185, null)[0x1];\n                }\n            } else {\n                if (Array['isArray'](_0x11608f)) {\n                    for (var _0x458cba = 0x0, _0x40af62 = new Array(_0x11608f[_0x4605ce(0xf)]); _0x458cba < _0x11608f[_0x4605ce(0xf)]; _0x458cba++)\n                        _0x40af62[_0x458cba] = _0x11608f[_0x458cba];\n                    return _0x40af62;\n                }\n            }\n        }(_0xa8799b) || function(_0x47239e) {\n            var _0xd94b9a = _0x4a41;\n            if (Symbol['iterator']in Object(_0x47239e) || _0xd94b9a(0x6) === Object[_0xd94b9a(0x2)][_0xd94b9a(0x8d)][_0xd94b9a(0x8c)](_0x47239e))\n                return Array['from'](_0x47239e);\n        }(_0xa8799b) || function() {\n            throw new TypeError('Invalid\\x20attempt\\x20to\\x20spread\\x20non-iterable\\x20instance');\n        }();\n    }\n    this[_0x7083c4(0x23)] = _0x24c604;\n    for (var _0x22f5c2 = [], _0xc15748 = 0x0, _0x498cf3 = [], _0x2ab336 = 0x0, _0x49c968 = function(_0x2435ac, _0x4de9cc) {\n        var _0x43ddd5 = _0x7083c4;\n        if (_0x12b83a[_0x43ddd5(0x6e)]('rohmx', 'rohmx')) {\n            var _0xb96fbb = _0x2435ac[_0x4de9cc++]\n              , _0x3ad1bc = _0x2435ac[_0x4de9cc]\n              , _0x2a37cd = parseInt(_0x12b83a['yOsHa']('', _0xb96fbb) + _0x3ad1bc, 0x10);\n            if (_0x12b83a['mZrHM'](_0x2a37cd, 0x7) == 0x0)\n                return [0x1, _0x2a37cd];\n            if (_0x12b83a[_0x43ddd5(0x36)](_0x2a37cd >> 0x6, 0x2)) {\n                var _0x486235 = parseInt('' + _0x2435ac[++_0x4de9cc] + _0x2435ac[++_0x4de9cc], 0x10);\n                return _0x2a37cd &= 0x3f,\n                [0x2, _0x486235 = _0x12b83a[_0x43ddd5(0x4c)](_0x2a37cd <<= 0x8, _0x486235)];\n            }\n            if (_0x12b83a[_0x43ddd5(0x2c)](_0x2a37cd, 0x6) == 0x3) {\n                var _0x105c68 = parseInt(_0x12b83a['JMbrB']('', _0x2435ac[++_0x4de9cc]) + _0x2435ac[++_0x4de9cc], 0x10)\n                  , _0x4f381c = _0x12b83a[_0x43ddd5(0x66)](parseInt, _0x12b83a['JMbrB']('' + _0x2435ac[++_0x4de9cc], _0x2435ac[++_0x4de9cc]), 0x10);\n                return _0x2a37cd &= 0x3f,\n                [0x3, _0x4f381c = (_0x2a37cd <<= 0x10) + (_0x105c68 <<= 0x8) + _0x4f381c];\n            }\n        } else {\n            function _0x9949() {\n                var _0x4f1a1d = _0x323767[_0x455c3c++];\n                _0x2ee7b2[++_0x17f54b] = _0x4f1a1d;\n            }\n        }\n    }, _0xfa87b5 = function(_0x5c9ccf, _0x2fc50f) {\n        var _0x5ac37a = _0x7083c4\n          , _0x5d468d = _0x12b83a[_0x5ac37a(0x66)](parseInt, _0x12b83a[_0x5ac37a(0x0)]('' + _0x5c9ccf[_0x2fc50f], _0x5c9ccf[_0x2fc50f + 0x1]), 0x10);\n        return _0x5d468d = _0x12b83a[_0x5ac37a(0x5e)](_0x5d468d, 0x7f) ? -0x100 + _0x5d468d : _0x5d468d;\n    }, _0xd412d2 = function(_0x2b32ac, _0x26614f) {\n        var _0x1b0b08 = _0x7083c4\n          , _0x89bc72 = parseInt(_0x12b83a[_0x1b0b08(0x52)](_0x12b83a[_0x1b0b08(0x94)]('' + _0x2b32ac[_0x26614f], _0x2b32ac[_0x26614f + 0x1]) + _0x2b32ac[_0x26614f + 0x2], _0x2b32ac[_0x26614f + 0x3]), 0x10);\n        return _0x89bc72 = _0x12b83a[_0x1b0b08(0x91)](_0x89bc72, 0x7fff) ? _0x12b83a[_0x1b0b08(0x94)](-0x10000, _0x89bc72) : _0x89bc72;\n    }, _0x10e5cb = function(_0x2a1ef9, _0x4112a4) {\n        var _0x14cec8 = _0x7083c4\n          , _0x586fa1 = parseInt(_0x12b83a[_0x14cec8(0x94)](_0x12b83a['zxdmC'](_0x12b83a[_0x14cec8(0x6c)]('' + _0x2a1ef9[_0x4112a4] + _0x2a1ef9[_0x12b83a['wnbho'](_0x4112a4, 0x1)], _0x2a1ef9[_0x12b83a['comGc'](_0x4112a4, 0x2)]) + _0x2a1ef9[_0x4112a4 + 0x3] + _0x2a1ef9[_0x4112a4 + 0x4], _0x2a1ef9[_0x12b83a[_0x14cec8(0x6b)](_0x4112a4, 0x5)]), _0x2a1ef9[_0x12b83a[_0x14cec8(0x6b)](_0x4112a4, 0x6)]) + _0x2a1ef9[_0x4112a4 + 0x7], 0x10);\n        return _0x586fa1 = _0x12b83a[_0x14cec8(0x91)](_0x586fa1, 0x7fffffff) ? _0x12b83a[_0x14cec8(0x6b)](0x0, _0x586fa1) : _0x586fa1;\n    }, _0x4746fc = function(_0x50db27, _0x3a05d0) {\n        var _0x4987a0 = _0x7083c4;\n        return parseInt('' + _0x50db27[_0x3a05d0] + _0x50db27[_0x12b83a[_0x4987a0(0x12)](_0x3a05d0, 0x1)], 0x10);\n    }, _0x29944e = function(_0x8bea75, _0x4da4b2) {\n        var _0x2ce82e = _0x7083c4;\n        return _0x12b83a[_0x2ce82e(0x6f)](parseInt, _0x12b83a['IVyLJ']('', _0x8bea75[_0x4da4b2]) + _0x8bea75[_0x4da4b2 + 0x1] + _0x8bea75[_0x4da4b2 + 0x2] + _0x8bea75[_0x4da4b2 + 0x3], 0x10);\n    }, _0x24f400 = _0x24f400 || this || globalThis, _0x51cce9 = Object[_0x7083c4(0x49)] || function(_0x1414c9) {\n        var _0x48f581 = {}\n          , _0x53ce65 = 0x0;\n        for (var _0x428514 in _0x1414c9)\n            _0x48f581[_0x53ce65++] = _0x428514;\n        return _0x48f581['length'] = _0x53ce65,\n        _0x48f581;\n    }\n    , _0x5c4110 = (_0x24c604[_0x7083c4(0xf)],\n    0x0), _0x5e0b6d = '', _0x168ac1 = _0x5c4110; _0x12b83a[_0x7083c4(0x5d)](_0x168ac1, _0x5c4110 + 0x10); _0x168ac1++) {\n        var _0xdeab25 = '' + _0x24c604[_0x168ac1++] + _0x24c604[_0x168ac1];\n        _0xdeab25 = parseInt(_0xdeab25, 0x10),\n        _0x5e0b6d += String[_0x7083c4(0x45)](_0xdeab25);\n    }\n    if (_0x7083c4(0x93) != _0x5e0b6d)\n        throw new Error('err:d93135:' + _0x5e0b6d);\n    _0x5c4110 += 0x10,\n    parseInt(_0x12b83a['jqHEd'](_0x12b83a[_0x7083c4(0xb)]('', _0x24c604[_0x5c4110]), _0x24c604[_0x5c4110 + 0x1]), 0x10),\n    (_0x5c4110 += 0x8,\n    _0xc15748 = 0x0);\n    for (var _0x323a2b = 0x0; _0x323a2b < 0x4; _0x323a2b++) {\n        var _0x28c6bf = _0x12b83a[_0x7083c4(0xb)](_0x5c4110, _0x12b83a[_0x7083c4(0x72)](0x2, _0x323a2b))\n          , _0x8096f5 = _0x12b83a[_0x7083c4(0x2f)](_0x12b83a[_0x7083c4(0x2f)]('', _0x24c604[_0x28c6bf++]), _0x24c604[_0x28c6bf])\n          , _0x2d0b41 = _0x12b83a[_0x7083c4(0x1c)](parseInt, _0x8096f5, 0x10);\n        _0xc15748 += (0x3 & _0x2d0b41) << _0x12b83a[_0x7083c4(0x72)](0x2, _0x323a2b);\n    }\n    _0x5c4110 += 0x10,\n    _0x5c4110 += 0x8;\n    var _0x1d2320 = parseInt(_0x12b83a[_0x7083c4(0x2f)]('' + _0x24c604[_0x5c4110] + _0x24c604[_0x5c4110 + 0x1] + _0x24c604[_0x12b83a[_0x7083c4(0x2f)](_0x5c4110, 0x2)] + _0x24c604[_0x5c4110 + 0x3] + _0x24c604[_0x12b83a[_0x7083c4(0x2f)](_0x5c4110, 0x4)] + _0x24c604[_0x5c4110 + 0x5] + _0x24c604[_0x5c4110 + 0x6], _0x24c604[_0x5c4110 + 0x7]), 0x10)\n      , _0x3121f2 = _0x1d2320\n      , _0x23b9e8 = _0x5c4110 += 0x8\n      , _0x42ee3d = _0x29944e(_0x24c604, _0x5c4110 += _0x1d2320);\n    _0x5c4110 += 0x4,\n    _0x22f5c2 = {\n        'p': [],\n        'q': []\n    };\n    for (var _0x440e84 = 0x0; _0x440e84 < _0x42ee3d; _0x440e84++) {\n        for (var _0x36c245 = _0x49c968(_0x24c604, _0x5c4110), _0x377410 = _0x5c4110 += 0x2 * _0x36c245[0x0], _0x36ee46 = _0x22f5c2['p']['length'], _0x50dc14 = 0x0; _0x50dc14 < _0x36c245[0x1]; _0x50dc14++) {\n            var _0x2d295a = _0x49c968(_0x24c604, _0x377410);\n            _0x22f5c2['p'][_0x7083c4(0x64)](_0x2d295a[0x1]),\n            _0x377410 += 0x2 * _0x2d295a[0x0];\n        }\n        _0x5c4110 = _0x377410,\n        _0x22f5c2['q'][_0x7083c4(0x64)]([_0x36ee46, _0x22f5c2['p'][_0x7083c4(0xf)]]);\n    }\n    var _0x4fed5f = [];\n    return _0x1fdc1b(_0x24c604, _0x23b9e8, _0x3121f2 / 0x2, [], _0x6a35ed, _0x22f624);\n    function _0x3714b9(_0x484194, _0x7e7569, _0x1b87f3, _0x4e3c2b, _0x33e19f, _0xa3097b, _0xa9d1be, _0x4ab42b) {\n        var _0x564652 = _0x7083c4\n          , _0xe4f438 = {\n            'ozVGE': function(_0x58c899, _0x3c7e4c) {\n                return _0x58c899 == _0x3c7e4c;\n            },\n            'xRIOr': _0x564652(0x53),\n            'cFexY': _0x564652(0x73),\n            'cXDFm': function(_0x36c27e, _0x102483, _0xa0b332) {\n                return _0x36c27e(_0x102483, _0xa0b332);\n            },\n            'zrNGy': _0x12b83a[_0x564652(0x5a)],\n            'DlfXv': 'IIΙ',\n            'XDLWq': 'IΙI',\n            'rttQd': function(_0x4b430a, _0x524bf4) {\n                return _0x4b430a < _0x524bf4;\n            }\n        };\n        if (_0x564652(0x69) === _0x564652(0x9c)) {\n            function _0xb458fa() {\n                var _0x55abd2 = _0x564652;\n                if (_0xe4f438['ozVGE'](_0xe4f438[_0x55abd2(0x50)], typeof _0x2a4cdc) || !_0x442910['construct'])\n                    return !0x1;\n                if (_0x4aa130[_0x55abd2(0x28)]['sham'])\n                    return !0x1;\n                if (_0xe4f438[_0x55abd2(0x71)] == typeof _0x5e5cdd)\n                    return !0x0;\n                try {\n                    return _0x13077c[_0x55abd2(0x2)][_0x55abd2(0x8d)][_0x55abd2(0x8c)](_0x5a7929[_0x55abd2(0x28)](_0x3b1fe0, [], function() {})),\n                    !0x0;\n                } catch (_0x3ef480) {\n                    return !0x1;\n                }\n            }\n        } else {\n            null == _0xa3097b && (_0xa3097b = this);\n            var _0x2f0111, _0x4a995d, _0x31793d, _0x568eef, _0x1d4fa7 = [], _0x1c5004 = 0x0;\n            _0xa9d1be && (_0x2f0111 = _0xa9d1be);\n            for (var _0x30595f, _0x4e19c9, _0xf3aac1 = _0x7e7569, _0xcd74f4 = _0x12b83a['IVyLJ'](_0xf3aac1, _0x12b83a[_0x564652(0x9d)](0x2, _0x1b87f3)); _0xf3aac1 < _0xcd74f4; )\n                if (_0x30595f = parseInt('' + _0x484194[_0xf3aac1] + _0x484194[_0xf3aac1 + 0x1], 0x10),\n                _0xf3aac1 += 0x2,\n                _0x12b83a[_0x564652(0x7e)](0x46, _0x30595f)) {\n                    for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                    _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] != _0x2f0111; _0x12b83a[_0x564652(0x91)](_0x30595f, 0x10c3); )\n                        0x10c3 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                        _0x1c5004--;\n                } else {\n                    if (_0x12b83a[_0x564652(0x4f)](0x47, _0x30595f)) {\n                        for (_0x1d4fa7[_0x1c5004] = ++_0x1d4fa7[_0x1c5004]; _0x30595f > 0x15cc; )\n                            0x15cc === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                            _0x1c5004--;\n                    } else {\n                        if (0x33 === _0x30595f) {\n                            for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] <= _0x2f0111; _0x30595f > 0x10e9; )\n                                _0x12b83a['lzlIX'](0x10e9, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                _0x1c5004--;\n                        } else {\n                            if (0x38 === _0x30595f) {\n                                for (_0x4e19c9 = _0x29944e(_0x484194, _0xf3aac1),\n                                _0xf3aac1 += 0x4,\n                                _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                _0x33e19f[_0x4e19c9] = _0x2f0111; _0x30595f > 0xaa7; )\n                                    0xaa7 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                    _0x1c5004--;\n                            } else {\n                                if (0x26 === _0x30595f) {\n                                    for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                    _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] - _0x2f0111; _0x30595f > 0xe18; )\n                                        _0x12b83a['lzlIX'](0xe18, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                        _0x1c5004--;\n                                } else {\n                                    if (0x4b === _0x30595f) {\n                                        for (_0x4a995d = _0x1d4fa7[_0x1c5004--],\n                                        _0x31793d = _0x1d4fa7[_0x1c5004--],\n                                        (_0x568eef = _0x1d4fa7[_0x1c5004--])['IΙΙ'] === _0x3714b9 ? _0x568eef[_0x564652(0x57)] >= 0x1 ? _0x1d4fa7[++_0x1c5004] = _0x12b83a['WDtsC'](_0x1fdc1b, _0x484194, _0x568eef[_0x12b83a[_0x564652(0x4b)]], _0x568eef['IΙI'], _0x4a995d, _0x568eef[_0x12b83a[_0x564652(0x9b)]], _0x31793d, null, 0x1) : (_0x1d4fa7[++_0x1c5004] = _0x12b83a[_0x564652(0x74)](_0x1fdc1b, _0x484194, _0x568eef[_0x564652(0x8)], _0x568eef[_0x12b83a['GrFtx']], _0x4a995d, _0x568eef[_0x12b83a['MjAjc']], _0x31793d, null, 0x0),\n                                        _0x568eef[_0x564652(0x57)]++) : _0x1d4fa7[++_0x1c5004] = _0x568eef[_0x564652(0x4)](_0x31793d, _0x4a995d); _0x30595f > 0xcc5; )\n                                            0xcc5 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                            _0x1c5004--;\n                                    } else {\n                                        if (_0x12b83a[_0x564652(0x4a)](0x45, _0x30595f)) {\n                                            for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004]instanceof _0x2f0111; _0x12b83a[_0x564652(0x91)](_0x30595f, 0x15fa); )\n                                                0x15fa === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                _0x1c5004--;\n                                        } else {\n                                            if (_0x12b83a[_0x564652(0x17)](0x28, _0x30595f)) {\n                                                for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] * _0x2f0111; _0x12b83a['tLDgE'](_0x30595f, 0xa3c); )\n                                                    _0x12b83a[_0x564652(0x17)](0xa3c, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                    _0x1c5004--;\n                                            } else {\n                                                if (_0x12b83a[_0x564652(0x17)](0x1a, _0x30595f)) {\n                                                    for (_0x1d4fa7[_0x1c5004] = !_0x1d4fa7[_0x1c5004]; _0x30595f > 0x11f6; )\n                                                        _0x12b83a[_0x564652(0x42)](0x11f6, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                        _0x1c5004--;\n                                                } else {\n                                                    if (0x5 === _0x30595f) {\n                                                        for (_0x1d4fa7[++_0x1c5004] = void 0x0; _0x30595f > 0x5c8; )\n                                                            _0x12b83a[_0x564652(0x42)](0x5c8, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                            _0x1c5004--;\n                                                    } else {\n                                                        if (0x59 === _0x30595f) {\n                                                            for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] || _0x2f0111; _0x30595f > 0xc6e; )\n                                                                _0x12b83a[_0x564652(0x42)](0xc6e, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                _0x1c5004--;\n                                                        } else {\n                                                            if (0x2 === _0x30595f) {\n                                                                for (_0x1d4fa7[_0x1c5004] = _0xd412d2(_0x484194, _0xf3aac1),\n                                                                _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] && _0x2f0111,\n                                                                _0x12b83a['tLDgE'](_0xf3aac1, 0x0) && (_0xf3aac1 -= _0x12b83a['mpwlj'](0x5, _0x12b83a[_0x564652(0x5c)](_0x1d4fa7[_0x1c5004], 0x36))); _0x30595f > 0xc9c; )\n                                                                    0xc9c === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                    _0x1c5004--;\n                                                            } else {\n                                                                if (_0x12b83a[_0x564652(0x42)](0x3c, _0x30595f)) {\n                                                                    for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                    _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] | _0x2f0111; _0x30595f > 0x186b; )\n                                                                        0x186b === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                        _0x1c5004--;\n                                                                } else {\n                                                                    if (_0x12b83a['POWBq'](0xc, _0x30595f)) {\n                                                                        for (_0x4e19c9 = _0x4746fc(_0x484194, _0xf3aac1),\n                                                                        _0xf3aac1 += 0x2,\n                                                                        _0x1d4fa7[++_0x1c5004] = _0x33e19f['$' + _0x4e19c9]; _0x30595f > 0x1106; )\n                                                                            0x1106 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                            _0x1c5004--;\n                                                                    } else {\n                                                                        if (0xf === _0x30595f) {\n                                                                            for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] / _0x2f0111; _0x30595f > 0x1004; )\n                                                                                0x1004 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                _0x1c5004--;\n                                                                        } else {\n                                                                            if (_0x12b83a['AbRVN'](0x30, _0x30595f)) {\n                                                                                for (_0x1d4fa7[_0x1c5004] = _0xd412d2(_0x484194, _0xf3aac1),\n                                                                                _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] <= _0x2f0111,\n                                                                                _0x12b83a[_0x564652(0x83)](_0xf3aac1, 0x0) && (_0xf3aac1 -= 0x5 * (_0x1d4fa7[_0x1c5004] + 0x3c)); _0x30595f > 0xd38; )\n                                                                                    0xd38 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                    _0x1c5004--;\n                                                                            } else {\n                                                                                if (_0x12b83a[_0x564652(0x1d)](0x3d, _0x30595f)) {\n                                                                                    for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                    _0x1d4fa7[_0x1c5004] = _0x12b83a[_0x564652(0x7b)](_0x1d4fa7[_0x1c5004], _0x2f0111); _0x12b83a[_0x564652(0x62)](_0x30595f, 0xcdc); )\n                                                                                        _0x12b83a['OBxQX'](0xcdc, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                        _0x1c5004--;\n                                                                                } else {\n                                                                                    if (0x24 === _0x30595f) {\n                                                                                        if (_0x12b83a[_0x564652(0x3)](_0x12b83a[_0x564652(0x26)], _0x12b83a['mQhYz'])) {\n                                                                                            for (_0x4e19c9 = _0x12b83a[_0x564652(0x6f)](_0x29944e, _0x484194, _0xf3aac1),\n                                                                                            _0x568eef = '',\n                                                                                            _0x50dc14 = _0x22f5c2['q'][_0x4e19c9][0x0]; _0x50dc14 < _0x22f5c2['q'][_0x4e19c9][0x1]; _0x50dc14++)\n                                                                                                _0x568eef += String[_0x564652(0x45)](_0x12b83a[_0x564652(0x98)](_0xc15748, _0x22f5c2['p'][_0x50dc14]));\n                                                                                            for (_0xf3aac1 += 0x4,\n                                                                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004][_0x568eef]; _0x30595f > 0xe38; )\n                                                                                                _0x12b83a[_0x564652(0x3b)](0xe38, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                _0x1c5004--;\n                                                                                        } else {\n                                                                                            function _0x4b747b() {\n                                                                                                var _0x14e520 = _0x564652\n                                                                                                  , _0xae6caa = {\n                                                                                                    'ahwRp': _0x12b83a['SOoBb']\n                                                                                                };\n                                                                                                _0x2c6152 = _0x23d147(_0x3f1ea3, _0x2275d3);\n                                                                                                var _0x322b7d = function _0x45ed34() {\n                                                                                                    var _0x5aa2f9 = _0x4a41\n                                                                                                      , _0x3bbcf8 = arguments;\n                                                                                                    return _0x45ed34[_0xae6caa[_0x5aa2f9(0x59)]] > 0x0 || _0x45ed34['ΙII']++,\n                                                                                                    _0x596942(_0x4bc5ed, _0x45ed34[_0x5aa2f9(0x8)], _0x45ed34[_0x5aa2f9(0x37)], _0x3bbcf8, _0x45ed34[_0x5aa2f9(0x97)], this, null, 0x0);\n                                                                                                };\n                                                                                                for (_0x322b7d[_0x12b83a[_0x14e520(0x4b)]] = _0x23de6f + 0x4,\n                                                                                                _0x322b7d[_0x14e520(0x37)] = _0x313fa0 - 0x2,\n                                                                                                _0x322b7d['IΙΙ'] = _0x4903b6,\n                                                                                                _0x322b7d[_0x12b83a['SOoBb']] = 0x0,\n                                                                                                _0x322b7d[_0x12b83a[_0x14e520(0x9b)]] = _0x18d83a,\n                                                                                                _0x5e9908[_0x2cacaa] = _0x322b7d,\n                                                                                                _0x1d6fe2 += 0x2 * _0xc315ac - 0x2; _0x2dee16 > 0x869; )\n                                                                                                    _0x12b83a['NOFBb'](0x869, _0x2a6fda) && (_0x4c114f[_0x5dce57--][_0xbd9e4e] = _0x4782af[_0x23fb08++]),\n                                                                                                    _0xb2dc6f--;\n                                                                                            }\n                                                                                        }\n                                                                                    } else {\n                                                                                        if (_0x12b83a['DgvJt'](0x41, _0x30595f)) {\n                                                                                            for (_0x4e19c9 = _0x29944e(_0x484194, _0xf3aac1),\n                                                                                            _0x568eef = '',\n                                                                                            _0x50dc14 = _0x22f5c2['q'][_0x4e19c9][0x0]; _0x12b83a[_0x564652(0x7b)](_0x50dc14, _0x22f5c2['q'][_0x4e19c9][0x1]); _0x50dc14++)\n                                                                                                _0x568eef += String[_0x564652(0x45)](_0x12b83a[_0x564652(0x98)](_0xc15748, _0x22f5c2['p'][_0x50dc14]));\n                                                                                            for (_0x568eef = +_0x568eef,\n                                                                                            _0xf3aac1 += 0x4,\n                                                                                            _0x1d4fa7[++_0x1c5004] = _0x568eef; _0x12b83a[_0x564652(0x90)](_0x30595f, 0x885); )\n                                                                                                _0x12b83a[_0x564652(0x2a)](0x885, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                _0x1c5004--;\n                                                                                        } else {\n                                                                                            if (_0x12b83a[_0x564652(0x76)](0x29, _0x30595f)) {\n                                                                                                for (_0x1d4fa7[_0x1c5004] = --_0x1d4fa7[_0x1c5004]; _0x30595f > 0x1319; )\n                                                                                                    0x1319 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                    _0x1c5004--;\n                                                                                            } else {\n                                                                                                if (_0x12b83a[_0x564652(0x76)](0x1c, _0x30595f)) {\n                                                                                                    for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                    _0x1d4fa7[_0x1c5004] = _0x12b83a[_0x564652(0x36)](_0x1d4fa7[_0x1c5004], _0x2f0111); _0x30595f > 0xca1; )\n                                                                                                        0xca1 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                        _0x1c5004--;\n                                                                                                } else {\n                                                                                                    if (0x1 === _0x30595f) {\n                                                                                                        for (_0x1d4fa7[_0x1c5004] = _0xd412d2(_0x484194, _0xf3aac1),\n                                                                                                        _0x1d4fa7[_0x1c5004] = !_0x1d4fa7[_0x1c5004],\n                                                                                                        _0xf3aac1 > 0x0 && (_0xf3aac1 -= 0x5 * _0x12b83a['PDTHy'](_0x1d4fa7[_0x1c5004], 0x38)); _0x30595f > 0x51a; )\n                                                                                                            0x51a === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                            _0x1c5004--;\n                                                                                                    } else {\n                                                                                                        if (0x2d === _0x30595f) {\n                                                                                                            for (_0x1d4fa7[_0x1c5004] = _0x12b83a['SAYoa'](_0xd412d2, _0x484194, _0xf3aac1),\n                                                                                                            _0x1d4fa7[++_0x1c5004] = void 0x0,\n                                                                                                            _0xf3aac1 > 0x0 && (_0xf3aac1 -= 0x5 * _0x12b83a[_0x564652(0x43)](_0x1d4fa7[_0x1c5004], 0x21)); _0x30595f > 0x1a25; )\n                                                                                                                0x1a25 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                _0x1c5004--;\n                                                                                                        } else {\n                                                                                                            if (_0x12b83a[_0x564652(0x35)](0x52, _0x30595f)) {\n                                                                                                                var _0x4857c3 = _0x1d4fa7[_0x12b83a[_0x564652(0x43)](_0x1c5004 -= 0x2, 0x1)];\n                                                                                                                for (_0x2f0111 = _0x1d4fa7[_0x1c5004][_0x4857c3] = _0x1d4fa7[_0x1c5004 + 0x2]; _0x12b83a[_0x564652(0x2e)](0x166e, _0x30595f); )\n                                                                                                                    _0x2f0111 = _0x1d4fa7[_0x1c5004][_0x12b83a[_0x564652(0x32)](_0x4857c3, 0x1)] = !_0x1d4fa7[_0x1c5004 + 0x2];\n                                                                                                                0x166e === _0x4857c3 && (_0x2f0111 = _0x1d4fa7[_0x1c5004][_0x4857c3 - 0x1] = !_0x1d4fa7[_0x1c5004 + 0x2]),\n                                                                                                                _0x1c5004--;\n                                                                                                            } else {\n                                                                                                                if (_0x12b83a[_0x564652(0xc)](0xa, _0x30595f)) {\n                                                                                                                    for (_0x1d4fa7[++_0x1c5004] = _0x24f400; _0x30595f > 0x6c8; )\n                                                                                                                        _0x12b83a[_0x564652(0xc)](0x6c8, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                        _0x1c5004--;\n                                                                                                                } else {\n                                                                                                                    if (_0x12b83a[_0x564652(0x24)](0x25, _0x30595f)) {\n                                                                                                                        for (_0x1d4fa7[++_0x1c5004] = null; _0x30595f > 0xe7d; )\n                                                                                                                            0xe7d === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                            _0x1c5004--;\n                                                                                                                    } else {\n                                                                                                                        if (0x3f === _0x30595f)\n                                                                                                                            return [0x1, _0x1d4fa7[_0x1c5004--]];\n                                                                                                                        if (_0x12b83a['XxNlA'](0x54, _0x30595f)) {\n                                                                                                                            _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004]in _0x2f0111;\n                                                                                                                            for (; _0x30595f > 0x1a19; )\n                                                                                                                                0x1a19 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                _0x1c5004--;\n                                                                                                                        } else {\n                                                                                                                            if (0x1f === _0x30595f) {\n                                                                                                                                for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] >> _0x2f0111; _0x30595f > 0x91c; )\n                                                                                                                                    _0x12b83a[_0x564652(0x89)](0x91c, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                    _0x1c5004--;\n                                                                                                                            } else {\n                                                                                                                                if (0x55 === _0x30595f) {\n                                                                                                                                    for (_0x4a995d = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                    _0x2f0111 = delete _0x1d4fa7[_0x1c5004--][_0x4a995d]; _0x30595f > 0x146a; )\n                                                                                                                                        0x146a === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                        _0x1c5004--;\n                                                                                                                                } else {\n                                                                                                                                    if (0x4a === _0x30595f) {\n                                                                                                                                        for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                        _0x1d4fa7[_0x1c5004] = typeof _0x2f0111; _0x30595f > 0x1375; )\n                                                                                                                                            _0x12b83a[_0x564652(0x77)](0x1375, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                            _0x1c5004--;\n                                                                                                                                    } else {\n                                                                                                                                        if (0x36 === _0x30595f) {\n                                                                                                                                            for (_0x4e19c9 = _0xd412d2(_0x484194, _0xf3aac1),\n                                                                                                                                            _0x498cf3[++_0x2ab336] = [[_0xf3aac1 + 0x4, _0x4e19c9 - 0x3], 0x0, 0x0],\n                                                                                                                                            _0xf3aac1 += 0x2 * _0x4e19c9 - 0x2; _0x30595f > 0x1963; )\n                                                                                                                                                0x1963 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                _0x1c5004--;\n                                                                                                                                        } else {\n                                                                                                                                            if (0x22 === _0x30595f) {\n                                                                                                                                                for (_0x4e19c9 = _0x12b83a[_0x564652(0x6f)](_0x29944e, _0x484194, _0xf3aac1),\n                                                                                                                                                _0x2f0111 = '',\n                                                                                                                                                _0x50dc14 = _0x22f5c2['q'][_0x4e19c9][0x0]; _0x50dc14 < _0x22f5c2['q'][_0x4e19c9][0x1]; _0x50dc14++)\n                                                                                                                                                    _0x2f0111 += String[_0x564652(0x45)](_0xc15748 ^ _0x22f5c2['p'][_0x50dc14]);\n                                                                                                                                                for (_0x1d4fa7[++_0x1c5004] = _0x2f0111,\n                                                                                                                                                _0xf3aac1 += 0x4; _0x30595f > 0x44f; )\n                                                                                                                                                    0x44f === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                    _0x1c5004--;\n                                                                                                                                            } else {\n                                                                                                                                                if (0x3a === _0x30595f) {\n                                                                                                                                                    for (_0x1d4fa7[++_0x1c5004] = _0xd412d2(_0x484194, _0xf3aac1),\n                                                                                                                                                    _0xf3aac1 += 0x4; _0x30595f > 0x1a40; )\n                                                                                                                                                        _0x12b83a[_0x564652(0x30)](0x1a40, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                } else {\n                                                                                                                                                    if (0x3e === _0x30595f) {\n                                                                                                                                                        for (; _0x12b83a['wUDmg'](_0x30595f, 0x1587); )\n                                                                                                                                                            _0x12b83a[_0x564652(0x30)](0x1587, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                    } else {\n                                                                                                                                                        if (0x32 === _0x30595f) {\n                                                                                                                                                            for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] >= _0x2f0111; _0x12b83a[_0x564652(0x9)](_0x30595f, 0xf4a); )\n                                                                                                                                                                _0x12b83a[_0x564652(0x31)](0xf4a, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                        } else {\n                                                                                                                                                            if (_0x12b83a[_0x564652(0x31)](0x13, _0x30595f)) {\n                                                                                                                                                                for (_0x4e19c9 = _0x4746fc(_0x484194, _0xf3aac1),\n                                                                                                                                                                _0xf3aac1 += 0x2,\n                                                                                                                                                                _0x1d4fa7[_0x1c5004 -= _0x4e19c9] = 0x0 === _0x4e19c9 ? new _0x1d4fa7[_0x1c5004]() : _0x12b83a['SAYoa'](_0x5419d5, _0x1d4fa7[_0x1c5004], _0x12b83a[_0x564652(0x68)](_0x1373ba, _0x1d4fa7[_0x564652(0x16)](_0x1c5004 + 0x1, _0x12b83a[_0x564652(0x43)](_0x1c5004 + _0x4e19c9, 0x1)))); _0x30595f > 0x1187; )\n                                                                                                                                                                    0x1187 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                            } else {\n                                                                                                                                                                if (0x58 === _0x30595f) {\n                                                                                                                                                                    for (_0x1d4fa7[++_0x1c5004] = _0x2f0111; _0x30595f > 0x15b7; )\n                                                                                                                                                                        0x15b7 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                } else {\n                                                                                                                                                                    if (_0x12b83a[_0x564652(0x31)](0x23, _0x30595f)) {\n                                                                                                                                                                        for (_0x1d4fa7[_0x1c5004 -= 0x1] = _0x1d4fa7[_0x1c5004][_0x1d4fa7[_0x1c5004 + 0x1]]; _0x12b83a[_0x564652(0x9)](_0x30595f, 0x140c); )\n                                                                                                                                                                            0x140c === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                    } else {\n                                                                                                                                                                        if (_0x12b83a[_0x564652(0x31)](0x35, _0x30595f)) {\n                                                                                                                                                                            for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] & _0x2f0111; _0x12b83a['HaYEx'](_0x30595f, 0x70c); )\n                                                                                                                                                                                0x70c === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                        } else {\n                                                                                                                                                                            if (_0x12b83a['euoqz'](0x27, _0x30595f)) {\n                                                                                                                                                                                for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] === _0x2f0111; _0x12b83a[_0x564652(0x9)](_0x30595f, 0x1767); )\n                                                                                                                                                                                    _0x12b83a[_0x564652(0x31)](0x1767, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                            } else {\n                                                                                                                                                                                if (_0x12b83a[_0x564652(0x11)](0x3b, _0x30595f)) {\n                                                                                                                                                                                    for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                    _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] ^ _0x2f0111; _0x30595f > 0x19f5; )\n                                                                                                                                                                                        _0x12b83a[_0x564652(0x11)](0x19f5, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                } else {\n                                                                                                                                                                                    if (0x37 === _0x30595f) {\n                                                                                                                                                                                        for (_0x1d4fa7[_0x1c5004] = _0x12b83a['SAYoa'](_0xd412d2, _0x484194, _0xf3aac1),\n                                                                                                                                                                                        _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                        _0x1d4fa7[_0x1c5004] = _0x12b83a[_0x564652(0x7b)](_0x1d4fa7[_0x1c5004], _0x2f0111),\n                                                                                                                                                                                        _0xf3aac1 > 0x0 && (_0xf3aac1 -= 0x5 * (_0x1d4fa7[_0x1c5004] + 0x3a)); _0x30595f > 0x10f6; )\n                                                                                                                                                                                            _0x12b83a['pKKkl'](0x10f6, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                    } else {\n                                                                                                                                                                                        if (_0x12b83a[_0x564652(0x46)](0x18, _0x30595f)) {\n                                                                                                                                                                                            for (_0x1d4fa7[++_0x1c5004] = !0x0; _0x30595f > 0x1398; )\n                                                                                                                                                                                                _0x12b83a['BqDfU'](0x1398, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                        } else {\n                                                                                                                                                                                            if (0x1e === _0x30595f) {\n                                                                                                                                                                                                for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                _0x1d4fa7[_0x1c5004] = _0x12b83a[_0x564652(0x9)](_0x1d4fa7[_0x1c5004], _0x2f0111); _0x30595f > 0x13a3; )\n                                                                                                                                                                                                    0x13a3 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                            } else {\n                                                                                                                                                                                                if (0x1d === _0x30595f) {\n                                                                                                                                                                                                    for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                    _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] << _0x2f0111; _0x12b83a[_0x564652(0x8b)](_0x30595f, 0x1667); )\n                                                                                                                                                                                                        0x1667 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                } else {\n                                                                                                                                                                                                    if (0x2b === _0x30595f) {\n                                                                                                                                                                                                        for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                        _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] >>> _0x2f0111; _0x12b83a[_0x564652(0x8b)](_0x30595f, 0x1a51); )\n                                                                                                                                                                                                            0x1a51 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                        if (_0x12b83a[_0x564652(0x7)](0x34, _0x30595f)) {\n                                                                                                                                                                                                            for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] % _0x2f0111; _0x12b83a[_0x564652(0x92)](_0x30595f, 0x8f1); )\n                                                                                                                                                                                                                _0x12b83a['wsfhT'](0x8f1, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                            if (_0x12b83a['FdcjM'](0x56, _0x30595f)) {\n                                                                                                                                                                                                                for (_0x1d4fa7[_0x1c5004] = ~_0x1d4fa7[_0x1c5004]; _0x12b83a[_0x564652(0x4e)](_0x30595f, 0x17ea); )\n                                                                                                                                                                                                                    0x17ea === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                if (0x16 === _0x30595f) {\n                                                                                                                                                                                                                    for (_0x1d4fa7[_0x1c5004] = _0x12b83a[_0x564652(0x1)](_0xd412d2, _0x484194, _0xf3aac1),\n                                                                                                                                                                                                                    _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                    _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] >= _0x2f0111,\n                                                                                                                                                                                                                    _0x12b83a['JsjPA'](_0xf3aac1, 0x0) && (_0xf3aac1 -= 0x5 * _0x12b83a[_0x564652(0x1b)](_0x1d4fa7[_0x1c5004], 0x3b)); _0x12b83a[_0x564652(0x82)](_0x30595f, 0x182a); )\n                                                                                                                                                                                                                        0x182a === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                    if (0x7 === _0x30595f) {\n                                                                                                                                                                                                                        for (_0x12b83a[_0x564652(0x7c)](_0x4e19c9 = _0xd412d2(_0x484194, _0xf3aac1), 0x0) ? (0x1,\n                                                                                                                                                                                                                        _0xf3aac1 += _0x12b83a['gZeSF'](0x2 * _0x4e19c9, 0x2)) : _0xf3aac1 += 0x2 * _0x4e19c9 - 0x2; _0x30595f > 0x1a38; )\n                                                                                                                                                                                                                            _0x12b83a[_0x564652(0x55)](0x1a38, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                        if (0xd === _0x30595f) {\n                                                                                                                                                                                                                            for (_0x1d4fa7[_0x1c5004] = _0x12b83a[_0x564652(0x1)](_0xd412d2, _0x484194, _0xf3aac1),\n                                                                                                                                                                                                                            _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] / _0x2f0111,\n                                                                                                                                                                                                                            _0xf3aac1 > 0x0 && (_0xf3aac1 -= _0x12b83a['LdgBs'](0x5, _0x1d4fa7[_0x1c5004] + 0x2b)); _0x30595f > 0x756; )\n                                                                                                                                                                                                                                0x756 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                                            if (_0x12b83a[_0x564652(0x55)](0x48, _0x30595f)) {\n                                                                                                                                                                                                                                for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                                _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] && _0x2f0111; _0x30595f > 0x18cb; )\n                                                                                                                                                                                                                                    0x18cb === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                if (_0x12b83a[_0x564652(0xe)](0x40, _0x30595f)) {\n                                                                                                                                                                                                                                    for (_0x1d4fa7[++_0x1c5004] = !0x1; _0x12b83a[_0x564652(0x79)](_0x30595f, 0x103b); )\n                                                                                                                                                                                                                                        _0x12b83a[_0x564652(0x81)](0x103b, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                    if (0xe === _0x30595f)\n                                                                                                                                                                                                                                        throw _0x1d4fa7[_0x1c5004] = _0xd412d2(_0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                        _0x1d4fa7[_0x1c5004--];\n                                                                                                                                                                                                                                    if (0x2f === _0x30595f) {\n                                                                                                                                                                                                                                        for (_0x1d4fa7[++_0x1c5004] = _0xa3097b; _0x30595f > 0x1137; )\n                                                                                                                                                                                                                                            0x1137 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                        if (_0x12b83a[_0x564652(0x81)](0x3, _0x30595f)) {\n                                                                                                                                                                                                                                            for (_0x1d4fa7[_0x1c5004] = !_0x1d4fa7[_0x1c5004]; _0x12b83a[_0x564652(0x96)](_0x30595f, 0x103b); )\n                                                                                                                                                                                                                                                _0x12b83a['kmriT'](0x103b, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                                                            if (_0x12b83a[_0x564652(0x20)](0x17, _0x30595f)) {\n                                                                                                                                                                                                                                                for (_0x2f0111 = _0x1d4fa7[_0x1c5004--]; _0x12b83a['wiumi'](_0x30595f, 0x8a9); )\n                                                                                                                                                                                                                                                    _0x12b83a['kmriT'](0x8a9, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                                if (0x2a === _0x30595f) {\n                                                                                                                                                                                                                                                    for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                                                    _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] !== _0x2f0111; _0x12b83a[_0x564652(0x96)](_0x30595f, 0x1091); )\n                                                                                                                                                                                                                                                        _0x12b83a['BPpsP'](0x1091, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                                    if (0x10 === _0x30595f) {\n                                                                                                                                                                                                                                                        for (_0x1d4fa7[_0x1c5004] > 0x0 && (_0xf3aac1 -= 0x5 * (_0x1d4fa7[_0x1c5004] + 0x1d)),\n                                                                                                                                                                                                                                                        _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                                                        _0x4e19c9 = _0x12b83a['yxiaz'](_0x29944e, _0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                        _0x568eef = '',\n                                                                                                                                                                                                                                                        _0x50dc14 = _0x22f5c2['q'][_0x4e19c9][0x0]; _0x50dc14 < _0x22f5c2['q'][_0x4e19c9][0x1]; _0x50dc14++)\n                                                                                                                                                                                                                                                            _0x568eef += String[_0x564652(0x45)](_0x12b83a[_0x564652(0x13)](_0xc15748, _0x22f5c2['p'][_0x50dc14]));\n                                                                                                                                                                                                                                                        for (_0xf3aac1 += 0x4,\n                                                                                                                                                                                                                                                        _0x1d4fa7[_0x1c5004--][_0x568eef] = _0x2f0111; _0x30595f > 0x1a47; )\n                                                                                                                                                                                                                                                            _0x12b83a[_0x564652(0x5b)](0x1a47, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                                        if (_0x12b83a[_0x564652(0x5b)](0x4c, _0x30595f)) {\n                                                                                                                                                                                                                                                            for (_0x1d4fa7[_0x1c5004] > 0x0 && (_0xf3aac1 -= 0x5 * (_0x1d4fa7[_0x1c5004] + 0x1d)),\n                                                                                                                                                                                                                                                            _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                                                            _0x4e19c9 = _0x29944e(_0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                            _0x568eef = '',\n                                                                                                                                                                                                                                                            _0x50dc14 = _0x22f5c2['q'][_0x4e19c9][0x0]; _0x50dc14 < _0x22f5c2['q'][_0x4e19c9][0x1]; _0x50dc14++)\n                                                                                                                                                                                                                                                                _0x568eef += String[_0x564652(0x45)](_0xc15748 ^ _0x22f5c2['p'][_0x50dc14]);\n                                                                                                                                                                                                                                                            for (_0xf3aac1 += 0x4,\n                                                                                                                                                                                                                                                            _0x1d4fa7[_0x1c5004--][_0x568eef] = _0x2f0111; _0x30595f > 0xca6; )\n                                                                                                                                                                                                                                                                0xca6 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                                                                            if (_0x12b83a['sKqsm'](0x42, _0x30595f)) {\n                                                                                                                                                                                                                                                                for (_0x4e19c9 = _0x12b83a[_0x564652(0x1)](_0x29944e, _0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                                _0xf3aac1 += 0x4,\n                                                                                                                                                                                                                                                                _0x1d4fa7[_0x1c5004][_0x4e19c9] = _0x1d4fa7[_0x1c5004]; _0x12b83a[_0x564652(0x96)](_0x30595f, 0xfbb); )\n                                                                                                                                                                                                                                                                    0xfbb === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                                                if (_0x12b83a[_0x564652(0x84)](0x57, _0x30595f)) {\n                                                                                                                                                                                                                                                                    for (_0x4e19c9 = _0x12b83a[_0x564652(0x1)](_0x29944e, _0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                                    _0xf3aac1 += 0x4,\n                                                                                                                                                                                                                                                                    _0x2f0111 = _0x33e19f[_0x4e19c9],\n                                                                                                                                                                                                                                                                    _0x1d4fa7[++_0x1c5004] = _0x2f0111; _0x12b83a[_0x564652(0x96)](_0x30595f, 0x131d); )\n                                                                                                                                                                                                                                                                        0x131d === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                                                    if (0x1b === _0x30595f) {\n                                                                                                                                                                                                                                                                        for (_0x2f0111 = _0x1d4fa7[_0x1c5004],\n                                                                                                                                                                                                                                                                        _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004 - 0x1],\n                                                                                                                                                                                                                                                                        _0x1d4fa7[_0x1c5004 - 0x1] = _0x2f0111; _0x12b83a[_0x564652(0x38)](_0x30595f, 0x1492); )\n                                                                                                                                                                                                                                                                            _0x12b83a[_0x564652(0x25)](0x1492, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                                                        if (_0x12b83a['PcJlX'](0x2e, _0x30595f)) {\n                                                                                                                                                                                                                                                                            for (_0x4a995d = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                                                                            _0x12b83a[_0x564652(0x7a)]((_0x568eef = _0x1d4fa7[_0x1c5004])[_0x564652(0x87)], _0x3714b9) ? _0x568eef[_0x564652(0x57)] >= 0x1 ? _0x1d4fa7[_0x1c5004] = _0x1fdc1b(_0x484194, _0x568eef[_0x564652(0x8)], _0x568eef[_0x564652(0x37)], [_0x4a995d], _0x568eef[_0x12b83a[_0x564652(0x9b)]], _0x31793d, null, 0x1) : (_0x1d4fa7[_0x1c5004] = _0x1fdc1b(_0x484194, _0x568eef[_0x564652(0x8)], _0x568eef[_0x564652(0x37)], [_0x4a995d], _0x568eef[_0x564652(0x97)], _0x31793d, null, 0x0),\n                                                                                                                                                                                                                                                                            _0x568eef[_0x564652(0x57)]++) : _0x1d4fa7[_0x1c5004] = _0x568eef(_0x4a995d); _0x12b83a[_0x564652(0x38)](_0x30595f, 0x1a61); )\n                                                                                                                                                                                                                                                                                _0x12b83a[_0x564652(0x7a)](0x1a61, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                                                                                            if (0xb === _0x30595f) {\n                                                                                                                                                                                                                                                                                if (_0x12b83a[_0x564652(0x7a)](_0x12b83a['xMjZi'], _0x12b83a[_0x564652(0x85)])) {\n                                                                                                                                                                                                                                                                                    _0x4e19c9 = _0xd412d2(_0x484194, _0xf3aac1);\n                                                                                                                                                                                                                                                                                    try {\n                                                                                                                                                                                                                                                                                        if (_0x498cf3[_0x2ab336][0x2] = 0x1,\n                                                                                                                                                                                                                                                                                        _0x12b83a['gqOZZ'](0x1, (_0x2f0111 = _0x3714b9(_0x484194, _0x12b83a['GADdy'](_0xf3aac1, 0x4), _0x4e19c9 - 0x3, [], _0x33e19f, _0xa3097b, null, 0x0))[0x0]))\n                                                                                                                                                                                                                                                                                            return _0x2f0111;\n                                                                                                                                                                                                                                                                                    } catch (_0x6ea9fa) {\n                                                                                                                                                                                                                                                                                        if (_0x498cf3[_0x2ab336] && _0x498cf3[_0x2ab336][0x1] && 0x1 == (_0x2f0111 = _0x12b83a[_0x564652(0x74)](_0x3714b9, _0x484194, _0x498cf3[_0x2ab336][0x1][0x0], _0x498cf3[_0x2ab336][0x1][0x1], [], _0x33e19f, _0xa3097b, _0x6ea9fa, 0x0))[0x0])\n                                                                                                                                                                                                                                                                                            return _0x2f0111;\n                                                                                                                                                                                                                                                                                    } finally {\n                                                                                                                                                                                                                                                                                        if (_0x498cf3[_0x2ab336] && _0x498cf3[_0x2ab336][0x0] && 0x1 == (_0x2f0111 = _0x12b83a['HTOjf'](_0x3714b9, _0x484194, _0x498cf3[_0x2ab336][0x0][0x0], _0x498cf3[_0x2ab336][0x0][0x1], [], _0x33e19f, _0xa3097b, null, 0x0))[0x0])\n                                                                                                                                                                                                                                                                                            return _0x2f0111;\n                                                                                                                                                                                                                                                                                        _0x498cf3[_0x2ab336] = 0x0,\n                                                                                                                                                                                                                                                                                        _0x2ab336--;\n                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                    for (_0xf3aac1 += 0x2 * _0x4e19c9 - 0x2; _0x30595f > 0x620; )\n                                                                                                                                                                                                                                                                                        0x620 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                                                                    function _0x22cc38() {\n                                                                                                                                                                                                                                                                                        var _0x38b253 = _0x564652\n                                                                                                                                                                                                                                                                                          , _0x131d91 = [null];\n                                                                                                                                                                                                                                                                                        _0x131d91[_0x38b253(0x64)][_0x38b253(0x4)](_0x131d91, _0x36d39c);\n                                                                                                                                                                                                                                                                                        var _0x3bd6f3 = new (_0x4facba['bind']['apply'](_0x4a1881, _0x131d91))();\n                                                                                                                                                                                                                                                                                        return _0x30a343 && _0x12b83a[_0x38b253(0x6f)](_0x1aa65d, _0x3bd6f3, _0x1d74df['prototype']),\n                                                                                                                                                                                                                                                                                        _0x3bd6f3;\n                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                                                                if (_0x12b83a[_0x564652(0x18)](0x44, _0x30595f)) {\n                                                                                                                                                                                                                                                                                    if (_0x564652(0xd) !== _0x564652(0x44)) {\n                                                                                                                                                                                                                                                                                        for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                                                                                        _0x4e19c9 = _0x29944e(_0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                                                        _0x568eef = '',\n                                                                                                                                                                                                                                                                                        _0x50dc14 = _0x22f5c2['q'][_0x4e19c9][0x0]; _0x50dc14 < _0x22f5c2['q'][_0x4e19c9][0x1]; _0x50dc14++)\n                                                                                                                                                                                                                                                                                            _0x568eef += String[_0x564652(0x45)](_0xc15748 ^ _0x22f5c2['p'][_0x50dc14]);\n                                                                                                                                                                                                                                                                                        for (_0xf3aac1 += 0x4,\n                                                                                                                                                                                                                                                                                        _0x1d4fa7[_0x1c5004--][_0x568eef] = _0x2f0111; _0x30595f > 0xe0c; )\n                                                                                                                                                                                                                                                                                            0xe0c === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                                                                        function _0x596110() {\n                                                                                                                                                                                                                                                                                            var _0x3ffbd7 = _0x564652\n                                                                                                                                                                                                                                                                                              , _0x1b6b51 = {\n                                                                                                                                                                                                                                                                                                'QBTLS': function(_0x5855a7, _0x4983c5, _0x5c73fe) {\n                                                                                                                                                                                                                                                                                                    var _0x53cab5 = _0x4a41;\n                                                                                                                                                                                                                                                                                                    return _0xe4f438[_0x53cab5(0x5)](_0x5855a7, _0x4983c5, _0x5c73fe);\n                                                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                                                            };\n                                                                                                                                                                                                                                                                                            return (_0xa930c4 = _0x20908c() ? _0x2977d9[_0x3ffbd7(0x28)] : function(_0x35a188, _0x490a4b, _0x52bfdd) {\n                                                                                                                                                                                                                                                                                                var _0x587c50 = _0x3ffbd7\n                                                                                                                                                                                                                                                                                                  , _0x51b449 = [null];\n                                                                                                                                                                                                                                                                                                _0x51b449['push'][_0x587c50(0x4)](_0x51b449, _0x490a4b);\n                                                                                                                                                                                                                                                                                                var _0x57e6a7 = new (_0x24c6cb[_0x587c50(0x34)]['apply'](_0x35a188, _0x51b449))();\n                                                                                                                                                                                                                                                                                                return _0x52bfdd && _0x1b6b51[_0x587c50(0x6d)](_0x32ca83, _0x57e6a7, _0x52bfdd[_0x587c50(0x2)]),\n                                                                                                                                                                                                                                                                                                _0x57e6a7;\n                                                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                                                            )[_0x3ffbd7(0x4)](null, arguments);\n                                                                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                                                                    if (0x53 === _0x30595f) {\n                                                                                                                                                                                                                                                                                        for (_0x1d4fa7[++_0x1c5004] = _0xfa87b5(_0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                                                        _0xf3aac1 += 0x2; _0x12b83a['TNifp'](_0x30595f, 0x19f3); )\n                                                                                                                                                                                                                                                                                            0x19f3 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                                                                        if (_0x12b83a[_0x564652(0x86)](0x31, _0x30595f)) {\n                                                                                                                                                                                                                                                                                            for (_0x4e19c9 = _0x12b83a[_0x564652(0x1)](_0x29944e, _0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                                                            _0xf3aac1 += 0x4,\n                                                                                                                                                                                                                                                                                            _0x4a995d = _0x1c5004 + 0x1,\n                                                                                                                                                                                                                                                                                            _0x1d4fa7[_0x1c5004 -= _0x4e19c9 - 0x1] = _0x4e19c9 ? _0x1d4fa7[_0x564652(0x16)](_0x1c5004, _0x4a995d) : []; _0x12b83a[_0x564652(0x75)](_0x30595f, 0x1435); )\n                                                                                                                                                                                                                                                                                                _0x12b83a[_0x564652(0x86)](0x1435, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                                                                                                            if (_0x12b83a[_0x564652(0x86)](0x4d, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                for (; _0x12b83a['hOwmN'](_0x30595f, 0x1071); )\n                                                                                                                                                                                                                                                                                                    _0x12b83a[_0x564652(0x86)](0x1071, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                                                                                if (_0x12b83a['UWMGT'](0x15, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                    for (_0x2f0111 = _0x1d4fa7[_0x12b83a[_0x564652(0x65)](_0x1c5004, 0x1)],\n                                                                                                                                                                                                                                                                                                    _0x4a995d = _0x1d4fa7[_0x1c5004],\n                                                                                                                                                                                                                                                                                                    _0x1d4fa7[++_0x1c5004] = _0x2f0111,\n                                                                                                                                                                                                                                                                                                    _0x1d4fa7[++_0x1c5004] = _0x4a995d; _0x30595f > 0x183c; )\n                                                                                                                                                                                                                                                                                                        0x183c === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                                                                                    if (_0x12b83a[_0x564652(0x80)](0x4, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                        for (_0x2f0111 = _0x1d4fa7[_0x1c5004],\n                                                                                                                                                                                                                                                                                                        _0x1d4fa7[++_0x1c5004] = _0x2f0111; _0x12b83a[_0x564652(0x19)](_0x30595f, 0xf71); )\n                                                                                                                                                                                                                                                                                                            _0x12b83a[_0x564652(0x80)](0xf71, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                                                                                        if (_0x12b83a[_0x564652(0x80)](0x11, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                            if (_0x12b83a['RbRaq'] !== _0x12b83a[_0x564652(0x33)]) {\n                                                                                                                                                                                                                                                                                                                _0x4e19c9 = _0x12b83a['yxiaz'](_0xd412d2, _0x484194, _0xf3aac1);\n                                                                                                                                                                                                                                                                                                                var _0x1338c6 = function _0x1cc642() {\n                                                                                                                                                                                                                                                                                                                    var _0xf70f4c = _0x564652\n                                                                                                                                                                                                                                                                                                                      , _0x391e0e = arguments;\n                                                                                                                                                                                                                                                                                                                    return _0x1cc642[_0xe4f438['zrNGy']] > 0x0 || _0x1cc642[_0xe4f438['zrNGy']]++,\n                                                                                                                                                                                                                                                                                                                    _0x1fdc1b(_0x484194, _0x1cc642[_0xe4f438[_0xf70f4c(0x61)]], _0x1cc642[_0xe4f438[_0xf70f4c(0x70)]], _0x391e0e, _0x1cc642[_0xf70f4c(0x97)], this, null, 0x0);\n                                                                                                                                                                                                                                                                                                                };\n                                                                                                                                                                                                                                                                                                                for (_0x1338c6[_0x564652(0x8)] = _0x12b83a[_0x564652(0xa)](_0xf3aac1, 0x4),\n                                                                                                                                                                                                                                                                                                                _0x1338c6[_0x564652(0x37)] = _0x4e19c9 - 0x2,\n                                                                                                                                                                                                                                                                                                                _0x1338c6['IΙΙ'] = _0x3714b9,\n                                                                                                                                                                                                                                                                                                                _0x1338c6[_0x12b83a['SOoBb']] = 0x0,\n                                                                                                                                                                                                                                                                                                                _0x1338c6['ΙIΙ'] = _0x33e19f,\n                                                                                                                                                                                                                                                                                                                _0x1d4fa7[_0x1c5004] = _0x1338c6,\n                                                                                                                                                                                                                                                                                                                _0xf3aac1 += _0x12b83a[_0x564652(0x63)](0x2, _0x4e19c9) - 0x2; _0x12b83a['tYXYt'](_0x30595f, 0x869); )\n                                                                                                                                                                                                                                                                                                                    _0x12b83a[_0x564652(0x80)](0x869, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                                                                                                function _0x6c9fba() {\n                                                                                                                                                                                                                                                                                                                    var _0x23db2b = _0x564652;\n                                                                                                                                                                                                                                                                                                                    for (_0x5358df = _0x37df01[_0x39a85a--],\n                                                                                                                                                                                                                                                                                                                    _0x2cfce7 = _0x5cac76(_0x52b4f9, _0x1390aa),\n                                                                                                                                                                                                                                                                                                                    _0x5aa74b = '',\n                                                                                                                                                                                                                                                                                                                    _0x23270e = _0x1be6f4['q'][_0x3b727d][0x0]; _0x3abcae < _0x1b0bde['q'][_0x425292][0x1]; _0x219b63++)\n                                                                                                                                                                                                                                                                                                                        _0x4ce2a2 += _0x9d7c49[_0x23db2b(0x45)](_0x12b83a[_0x23db2b(0x98)](_0x31ab8d, _0x322583['p'][_0x304385]));\n                                                                                                                                                                                                                                                                                                                    for (_0x127502 += 0x4,\n                                                                                                                                                                                                                                                                                                                    _0x278007[_0x4d9bd5--][_0x2eaf43] = _0x397069; _0x4e2c50 > 0xe0c; )\n                                                                                                                                                                                                                                                                                                                        0xe0c === _0x589c7e && (_0x41e04a[_0x3671bd--][_0x57ea2a] = _0x478084[_0x4befae++]),\n                                                                                                                                                                                                                                                                                                                        _0x22dc14--;\n                                                                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                                                                                                                            if (0x49 === _0x30595f) {\n                                                                                                                                                                                                                                                                                                                for (; _0x12b83a[_0x564652(0x95)](_0x30595f, 0x16b7); )\n                                                                                                                                                                                                                                                                                                                    0x16b7 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                                                                                                if (_0x12b83a[_0x564652(0x80)](0x2c, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                                    for (; _0x30595f > 0xf17; )\n                                                                                                                                                                                                                                                                                                                        _0x12b83a[_0x564652(0x80)](0xf17, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                                                                                                    if (_0x12b83a['vvqfG'](0x19, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                                        for (_0x1d4fa7[++_0x1c5004] = _0x10e5cb(_0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                                                                                        _0xf3aac1 += 0x8; _0x30595f > 0x19dc; )\n                                                                                                                                                                                                                                                                                                                            _0x12b83a[_0x564652(0x78)](0x19dc, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                                                                                                        if (0x14 === _0x30595f) {\n                                                                                                                                                                                                                                                                                                                            for (_0x4e19c9 = _0x12b83a[_0x564652(0x1)](_0xd412d2, _0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                                                                                            _0x498cf3[_0x2ab336][0x0] && !_0x498cf3[_0x2ab336][0x2] ? _0x498cf3[_0x2ab336][0x1] = [_0x12b83a['qfwSc'](_0xf3aac1, 0x4), _0x12b83a[_0x564652(0x65)](_0x4e19c9, 0x3)] : _0x498cf3[_0x2ab336++] = [0x0, [_0x12b83a['qfwSc'](_0xf3aac1, 0x4), _0x12b83a[_0x564652(0x2d)](_0x4e19c9, 0x3)], 0x0],\n                                                                                                                                                                                                                                                                                                                            _0xf3aac1 += _0x12b83a[_0x564652(0x63)](0x2, _0x4e19c9) - 0x2; _0x12b83a['OCCVJ'](_0x30595f, 0xa3d); )\n                                                                                                                                                                                                                                                                                                                                0xa3d === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                                                                                                                                            if (0x20 === _0x30595f) {\n                                                                                                                                                                                                                                                                                                                                for (_0x1d4fa7[_0x1c5004] = _0x51cce9(_0x1d4fa7[_0x1c5004]); _0x30595f > 0x17ec; )\n                                                                                                                                                                                                                                                                                                                                    0x17ec === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                                                                                                                if (_0x564652(0x3e) !== 'YAaGs') {\n                                                                                                                                                                                                                                                                                                                                    if (0x0 === _0x30595f)\n                                                                                                                                                                                                                                                                                                                                        throw _0x1d4fa7[_0x1c5004--];\n                                                                                                                                                                                                                                                                                                                                    if (_0x12b83a[_0x564652(0x8f)](0x4e, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                                                        var _0x25d459 = 0x0\n                                                                                                                                                                                                                                                                                                                                          , _0x42fb78 = _0x1d4fa7[_0x1c5004]['length']\n                                                                                                                                                                                                                                                                                                                                          , _0x28fdfd = _0x1d4fa7[_0x1c5004];\n                                                                                                                                                                                                                                                                                                                                        for (_0x1d4fa7[++_0x1c5004] = function() {\n                                                                                                                                                                                                                                                                                                                                            var _0x20fe2e = _0x564652\n                                                                                                                                                                                                                                                                                                                                              , _0x1bafbb = _0xe4f438[_0x20fe2e(0x22)](_0x25d459, _0x42fb78);\n                                                                                                                                                                                                                                                                                                                                            if (_0x1bafbb) {\n                                                                                                                                                                                                                                                                                                                                                var _0x24e420 = _0x28fdfd[_0x25d459++];\n                                                                                                                                                                                                                                                                                                                                                _0x1d4fa7[++_0x1c5004] = _0x24e420;\n                                                                                                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                                                                                                            _0x1d4fa7[++_0x1c5004] = _0x1bafbb;\n                                                                                                                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                                                                                                                        ; _0x12b83a[_0x564652(0x67)](_0x30595f, 0xcda); )\n                                                                                                                                                                                                                                                                                                                                            0xcda === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                                                                                                                        if (_0x12b83a['CozeT'](0x12, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                                                            var _0xbd2f50 = _0xfa87b5(_0x484194, _0xf3aac1)\n                                                                                                                                                                                                                                                                                                                                              , _0x3c286b = _0x1c5004;\n                                                                                                                                                                                                                                                                                                                                            for (_0x1d4fa7[_0x1c5004 + 0x1] = _0x1d4fa7[_0x3c286b] + _0xbd2f50,\n                                                                                                                                                                                                                                                                                                                                            _0xf3aac1 += 0x0; _0x12b83a[_0x564652(0x67)](_0x30595f, 0x515); )\n                                                                                                                                                                                                                                                                                                                                                0x515 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                                                                                                                                                            if (_0x12b83a[_0x564652(0x39)](0x51, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                                                                for (_0x1d4fa7[_0x1c5004--] ? _0xf3aac1 += 0x4 : _0x12b83a['Awtlv'](_0x4e19c9 = _0xd412d2(_0x484194, _0xf3aac1), 0x0) ? (0x1,\n                                                                                                                                                                                                                                                                                                                                                _0xf3aac1 += _0x12b83a[_0x564652(0x72)](0x2, _0x4e19c9) - 0x2) : _0xf3aac1 += _0x12b83a['ZYFsA'](_0x12b83a[_0x564652(0x72)](0x2, _0x4e19c9), 0x2); _0x30595f > 0x60d; )\n                                                                                                                                                                                                                                                                                                                                                    0x60d === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                                                                                                                                if (0x5a === _0x30595f) {\n                                                                                                                                                                                                                                                                                                                                                    for (_0x4e19c9 = _0x12b83a[_0x564652(0x1)](_0x29944e, _0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                                                                                                                    _0xf3aac1 += 0x4,\n                                                                                                                                                                                                                                                                                                                                                    _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004][_0x4e19c9]; _0x12b83a[_0x564652(0x56)](_0x30595f, 0xb63); )\n                                                                                                                                                                                                                                                                                                                                                        0xb63 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                                                                                                                                    if (0x50 === _0x30595f) {\n                                                                                                                                                                                                                                                                                                                                                        for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                                                                                                                                                        _0x1d4fa7[_0x1c5004] = _0x12b83a['qfwSc'](_0x1d4fa7[_0x1c5004], _0x2f0111); _0x12b83a[_0x564652(0x56)](_0x30595f, 0xce5); )\n                                                                                                                                                                                                                                                                                                                                                            0xce5 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                                                                                                                                        if (_0x12b83a[_0x564652(0x40)](0x43, _0x30595f))\n                                                                                                                                                                                                                                                                                                                                                            throw new Error(_0x564652(0x4d) + _0x30595f);\n                                                                                                                                                                                                                                                                                                                                                        for (; _0x30595f > 0xe8d; )\n                                                                                                                                                                                                                                                                                                                                                            _0x12b83a[_0x564652(0x1e)](0xe8d, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                                                                                                                    function _0x1fe1b3() {\n                                                                                                                                                                                                                                                                                                                                        var _0x58eb4d = _0x564652\n                                                                                                                                                                                                                                                                                                                                          , _0x31617d = {}\n                                                                                                                                                                                                                                                                                                                                          , _0x474f20 = 0x0;\n                                                                                                                                                                                                                                                                                                                                        for (var _0x4fa1b5 in _0x16872a)\n                                                                                                                                                                                                                                                                                                                                            _0x31617d[_0x474f20++] = _0x4fa1b5;\n                                                                                                                                                                                                                                                                                                                                        return _0x31617d[_0x58eb4d(0xf)] = _0x474f20,\n                                                                                                                                                                                                                                                                                                                                        _0x31617d;\n                                                                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                }\n                                                                                                                                                                                                            }\n                                                                                                                                                                                                        }\n                                                                                                                                                                                                    }\n                                                                                                                                                                                                }\n                                                                                                                                                                                            }\n                                                                                                                                                                                        }\n                                                                                                                                                                                    }\n                                                                                                                                                                                }\n                                                                                                                                                                            }\n                                                                                                                                                                        }\n                                                                                                                                                                    }\n                                                                                                                                                                }\n                                                                                                                                                            }\n                                                                                                                                                        }\n                                                                                                                                                    }\n                                                                                                                                                }\n                                                                                                                                            }\n                                                                                                                                        }\n                                                                                                                                    }\n                                                                                                                                }\n                                                                                                                            }\n                                                                                                                        }\n                                                                                                                    }\n                                                                                                                }\n                                                                                                            }\n                                                                                                        }\n                                                                                                    }\n                                                                                                }\n                                                                                            }\n                                                                                        }\n                                                                                    }\n                                                                                }\n                                                                            }\n                                                                        }\n                                                                    }\n                                                                }\n                                                            }\n                                                        }\n                                                    }\n                                                }\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            return [0x0, null];\n        }\n    }\n    function _0x1fdc1b(_0x407daf, _0x2b4fe1, _0x1bf090, _0x502aec, _0x2086de, _0x13679c, _0x357cd1, _0x3b8cb1) {\n        var _0x44fdd7 = _0x7083c4;\n        if ('iJhUX' === _0x44fdd7(0x15)) {\n            var _0x3a98c2, _0x43c136;\n            _0x12b83a[_0x44fdd7(0x36)](null, _0x13679c) && (_0x13679c = this),\n            _0x2086de && !_0x2086de['d'] && (_0x2086de['d'] = 0x0,\n            _0x2086de['$0'] = _0x2086de,\n            _0x2086de[0x1] = {});\n            var _0x121dbc = {}\n              , _0x210cf9 = _0x121dbc['d'] = _0x2086de ? _0x12b83a[_0x44fdd7(0x5f)](_0x2086de['d'], 0x1) : 0x0;\n            for (_0x121dbc[_0x12b83a[_0x44fdd7(0xb)]('$', _0x210cf9)] = _0x121dbc,\n            _0x43c136 = 0x0; _0x43c136 < _0x210cf9; _0x43c136++)\n                _0x121dbc[_0x3a98c2 = '$' + _0x43c136] = _0x2086de[_0x3a98c2];\n            for (_0x43c136 = 0x0,\n            _0x210cf9 = _0x121dbc[_0x44fdd7(0xf)] = _0x502aec['length']; _0x43c136 < _0x210cf9; _0x43c136++)\n                _0x121dbc[_0x43c136] = _0x502aec[_0x43c136];\n            return _0x3b8cb1 && _0x4fed5f[_0x2b4fe1],\n            _0x4fed5f[_0x2b4fe1],\n            _0x3714b9(_0x407daf, _0x2b4fe1, _0x1bf090, 0x0, _0x121dbc, _0x13679c, null)[0x1];\n        } else {\n            function _0x417546() {\n                var _0x17f3de = _0x44fdd7;\n                return _0x2edd65[_0x17f3de(0x2)][_0x17f3de(0x8d)][_0x17f3de(0x8c)](_0x2cbce0[_0x17f3de(0x28)](_0x5956b3, [], function() {})),\n                !0x0;\n            }\n        }\n    }\n}\n;\nvar _0x5479 = ['_f523010cd8cf5fb75250d1fc2f671c73', 'push', 'EhLkd', '_2b3beb7962f7014c81b260f8aa1890be', 'tFBhT', 'length', '112237xHQyuJ', '8LIglkV', 'Invalid\\x20code\\x20point:\\x20', '_575364e3fbdd1929a75a10a5118cc687', 'FMtAg', 'dCVzD', 'nHBiG', '5ekKZPb', 'XADBI', '184993ShoWTj', 'byRPx', 'zwMfF', '756117jhUodH', '1sUsefP', 'iacYd', '1138479XrELIw', '1087901hELCjO', 'fromCharCode', 'DOGdJ', '_972e441617b5152eab406b3c2c8e25ff', '835795CfxVfq', '706685rELxlJ', 'sVNOf', 'XolAc', 'UzJLB'];\nvar _0x55e4 = function(_0x5a83dc, _0x547951) {\n    _0x5a83dc = _0x5a83dc - 0x0;\n    var _0x55e409 = _0x5479[_0x5a83dc];\n    return _0x55e409;\n};\nvar _0x4d6a1b = _0x55e4;\n(function(_0xf55a6c, _0x4256ee) {\n    var _0x17d3cf = _0x55e4;\n    while (!![]) {\n        try {\n            var _0xa70d40 = -parseInt(_0x17d3cf(0x8)) * -parseInt(_0x17d3cf(0x7)) + -parseInt(_0x17d3cf(0x16)) + parseInt(_0x17d3cf(0x17)) + -parseInt(_0x17d3cf(0x1c)) + -parseInt(_0x17d3cf(0x14)) * -parseInt(_0x17d3cf(0x1b)) + -parseInt(_0x17d3cf(0xe)) * parseInt(_0x17d3cf(0x10)) + parseInt(_0x17d3cf(0x13));\n            if (_0xa70d40 === _0x4256ee)\n                break;\n            else\n                _0xf55a6c['push'](_0xf55a6c['shift']());\n        } catch (_0x50a5e0) {\n            _0xf55a6c['push'](_0xf55a6c['shift']());\n        }\n    }\n}(_0x5479, 0xc529c));\nfunction _d1b4df64eb152aa1d24e82f9bd0bfe7b(_0x1acabb, _0x456f43) {\n    var _0x106df0 = _0x55e4;\n    let _0x1e2b8c = '';\n    for (let _0x3e16ea = _0x1acabb; 0x0 != new Uint8Array(_0x456f43)[_0x3e16ea]; _0x3e16ea++)\n        _0x1e2b8c += String[_0x106df0(0x18)](new Uint8Array(_0x456f43)[_0x3e16ea]);\n    return _0x1e2b8c;\n}\nfunction _7140998d8f99c8324e0fcd817edff9b2(_0x139611) {\n    var _0x131c86 = _0x55e4\n      , _0x434b65 = {\n        'WcjOV': function(_0x2fdad2, _0x11de5b) {\n            return _0x2fdad2 % _0x11de5b;\n        },\n        'iacYd': function(_0x54f135, _0x47d7a2) {\n            return _0x54f135 / _0x47d7a2;\n        }\n    }\n      , _0x1cdab2 = 0x0 | _0x139611;\n    if (_0x1cdab2 < 0x80)\n        return [_0x1cdab2];\n    var _0x3621ec = _0x434b65['WcjOV'](_0x1cdab2, 0x80)\n      , _0x1b667f = _0x434b65[_0x131c86(0x15)](_0x1cdab2 - _0x3621ec, 0x80)\n      , _0x7a6865 = [];\n    return _0x7a6865[_0x131c86(0x2)](_0x3621ec + 0x80, 0x7f & _0x1b667f),\n    _0x7a6865;\n}\nfunction _6e8d40c844a972a6429074a59f678907(_0x496cdc) {\n    var _0x5dd132 = _0x55e4\n      , _0x5e2e3a = {\n        'wxcvd': function(_0x5266f7, _0x46cb26) {\n            return _0x5266f7 & _0x46cb26;\n        }\n    }\n      , _0x4a0480 = _0x496cdc >>> 0x0;\n    if (_0x4a0480 < 0x4000)\n        return _7140998d8f99c8324e0fcd817edff9b2(_0x4a0480);\n    var _0x2eac01 = [];\n    do {\n        if (_0x5dd132(0x5) === 'tFBhT') {\n            var _0x56ce93 = 0x7f & _0x4a0480;\n            (_0x4a0480 >>>= 0x7) && (_0x56ce93 |= 0x80),\n            _0x2eac01['push'](_0x56ce93);\n        } else {\n            function _0x35bd24() {\n                for (var _0xdc4172 = 0x0, _0x139652 = 0x0; _0x139652 < _0x520d19['length']; _0x139652++)\n                    _0xdc4172 = _0x5e2e3a['wxcvd'](_0xdc4172 + (_0x28b208[_0x139652] & _0x4b3f49), 0xff);\n                return _0xdc4172;\n            }\n        }\n    } while (_0x4a0480);\n    return _0x2eac01;\n}\nfunction _575364e3fbdd1929a75a10a5118cc687(_0x362fcb) {\n    var _0x3d21ce = _0x55e4;\n    for (var _0x1e626c = 0x0, _0x58bacc = 0x0; _0x58bacc < _0x362fcb[_0x3d21ce(0x6)]; _0x58bacc++)\n        _0x1e626c = _0x1e626c + (0xe9 & _0x362fcb[_0x58bacc]) & 0xff;\n    return _0x1e626c;\n}\nfunction _972e441617b5152eab406b3c2c8e25ff(_0x17d27e, _0x3f568d) {\n    var _0x17f238 = _0x55e4\n      , _0x5ce91f = {\n        'UzJLB': function(_0x32e788, _0x38e84a) {\n            return _0x32e788 < _0x38e84a;\n        }\n    };\n    for (var _0x914ea2 = 0x0, _0x259971 = 0x0; _0x5ce91f[_0x17f238(0x0)](_0x259971, _0x17d27e[_0x17f238(0x6)]); _0x259971++)\n        _0x914ea2 = _0x914ea2 + (_0x17d27e[_0x259971] & _0x3f568d) & 0xff;\n    return _0x914ea2;\n}\nfunction _2b3beb7962f7014c81b260f8aa1890be() {\n    var _0x2d2326 = {\n        'zYdkX': function(_0x43e7ad, _0x5c56da) {\n            return _0x43e7ad == _0x5c56da;\n        }\n    };\n    const _0x2055b1 = new function() {\n        eval('this[\\'a\\'] = 2;');\n    }\n    ();\n    return _0x2d2326['zYdkX'](!0x0, !_0x2055b1['a']);\n}\nfunction _2d6b4518857b5d2355e5bd9809691b44(_0x543826, _0x3993fb) {\n    var _0x3f7c9e = _0x55e4\n      , _0x1bf349 = {\n        'XADBI': function(_0x298685, _0x585396) {\n            return _0x298685 + _0x585396;\n        },\n        'ySAch': function(_0x30fb04, _0x21db63) {\n            return _0x30fb04 < _0x21db63;\n        },\n        'zwMfF': 'ZIhrN',\n        'FMtAg': function(_0x382aae, _0x546bf) {\n            return _0x382aae <= _0x546bf;\n        },\n        'EhLkd': function(_0x434164, _0x204d91) {\n            return _0x434164 & _0x204d91;\n        },\n        'sVNOf': function(_0x19f010, _0x160df0) {\n            return _0x19f010 >> _0x160df0;\n        },\n        'DOGdJ': function(_0x528411, _0x4d6e02) {\n            return _0x528411 | _0x4d6e02;\n        },\n        'XolAc': function(_0x7e49ef, _0x543b8f) {\n            return _0x7e49ef & _0x543b8f;\n        },\n        'nHBiG': function(_0x16b1fb, _0x3d4192) {\n            return _0x16b1fb | _0x3d4192;\n        },\n        'tPlMb': function(_0xfd6cc0, _0x3fbacd) {\n            return _0xfd6cc0 | _0x3fbacd;\n        },\n        'dCVzD': function(_0x45d0a5, _0x5c2c91) {\n            return _0x45d0a5 & _0x5c2c91;\n        }\n    };\n    for (var _0x922e84 = [], _0x4a3e21 = 0x0; _0x1bf349['ySAch'](_0x4a3e21, _0x543826['length']); _0x4a3e21 += _0x3993fb) {\n        if (_0x1bf349[_0x3f7c9e(0x12)] === 'SCMie') {\n            function _0x48cef0() {\n                var _0x1ae327 = _0x3f7c9e;\n                for (var _0x2061b9 = 0x0, _0xd2b865 = 0x0; _0xd2b865 < _0x12548c[_0x1ae327(0x6)]; _0xd2b865++)\n                    _0x2061b9 = _0x1bf349[_0x1ae327(0xf)](_0x2061b9, 0x21 & _0x588673[_0xd2b865]) & 0xff;\n                return _0x2061b9;\n            }\n        } else {\n            var _0x4f3d04 = _0x543826['charCodeAt'](_0x4a3e21);\n            if (_0x1bf349[_0x3f7c9e(0xb)](_0x4f3d04, 0x7f))\n                _0x922e84[_0x3f7c9e(0x2)](_0x4f3d04);\n            else {\n                if (_0x1bf349['FMtAg'](_0x4f3d04, 0x7ff))\n                    _0x922e84[_0x3f7c9e(0x2)](0xc0 | _0x4f3d04 >> 0x6),\n                    _0x922e84[_0x3f7c9e(0x2)](0x80 | _0x1bf349[_0x3f7c9e(0x3)](0x3f, _0x4f3d04));\n                else {\n                    if (_0x4f3d04 <= 0xffff)\n                        _0x922e84['push'](0xe0 | _0x1bf349[_0x3f7c9e(0x1d)](_0x4f3d04, 0xc)),\n                        _0x922e84[_0x3f7c9e(0x2)](_0x1bf349[_0x3f7c9e(0x19)](0x80, _0x1bf349[_0x3f7c9e(0x1e)](_0x1bf349[_0x3f7c9e(0x1d)](_0x4f3d04, 0x6), 0x3f))),\n                        _0x922e84[_0x3f7c9e(0x2)](0x80 | 0x3f & _0x4f3d04);\n                    else {\n                        if (!(_0x4f3d04 <= 0x10ffff))\n                            throw new Error(_0x3f7c9e(0x9) + _0x4f3d04);\n                        _0x922e84['push'](_0x1bf349[_0x3f7c9e(0xd)](0xf0, _0x4f3d04 >> 0x12)),\n                        _0x922e84[_0x3f7c9e(0x2)](0x80 | _0x1bf349[_0x3f7c9e(0x1d)](_0x4f3d04, 0xc) & 0x3f),\n                        _0x922e84[_0x3f7c9e(0x2)](_0x1bf349['tPlMb'](0x80, _0x1bf349[_0x3f7c9e(0xc)](_0x4f3d04 >> 0x6, 0x3f))),\n                        _0x922e84[_0x3f7c9e(0x2)](0x80 | 0x3f & _0x4f3d04);\n                    }\n                }\n            }\n        }\n    }\n    return new Uint8Array(_0x922e84);\n}\nfunction _f523010cd8cf5fb75250d1fc2f671c73(_0xe64b03) {\n    var _0x1e8b75 = _0x55e4\n      , _0x1447ab = {\n        'SypXu': function(_0x2c06b2, _0x202073) {\n            return _0x2c06b2 < _0x202073;\n        },\n        'byRPx': function(_0x429066, _0x56585f) {\n            return _0x429066 + _0x56585f;\n        }\n    };\n    for (var _0xffa0f2 = 0x0, _0x29f84f = 0x0; _0x1447ab['SypXu'](_0x29f84f, _0xe64b03[_0x1e8b75(0x6)]); _0x29f84f++)\n        _0xffa0f2 = _0x1447ab[_0x1e8b75(0x11)](_0xffa0f2, 0x21 & _0xe64b03[_0x29f84f]) & 0xff;\n    return _0xffa0f2;\n}\nvar _e0c26a2a191851217a8ed324fc1d568d = globalThis;\n_e0c26a2a191851217a8ed324fc1d568d['_d1b4df64eb152aa1d24e82f9bd0bfe7b'] = _d1b4df64eb152aa1d24e82f9bd0bfe7b,\n_e0c26a2a191851217a8ed324fc1d568d['_6e8d40c844a972a6429074a59f678907'] = _6e8d40c844a972a6429074a59f678907,\n_e0c26a2a191851217a8ed324fc1d568d[_0x4d6a1b(0xa)] = _575364e3fbdd1929a75a10a5118cc687,\n_e0c26a2a191851217a8ed324fc1d568d[_0x4d6a1b(0x1a)] = _972e441617b5152eab406b3c2c8e25ff,\n_e0c26a2a191851217a8ed324fc1d568d[_0x4d6a1b(0x4)] = _2b3beb7962f7014c81b260f8aa1890be,\n_e0c26a2a191851217a8ed324fc1d568d['_2d6b4518857b5d2355e5bd9809691b44'] = _2d6b4518857b5d2355e5bd9809691b44,\n_e0c26a2a191851217a8ed324fc1d568d[_0x4d6a1b(0x1)] = _f523010cd8cf5fb75250d1fc2f671c73;\nvar __$c = '56544b424251464d001f320474df1decedf402a0000000000002ed4c22000011001c570000240001240002240003042400041b5700013100014b3f380003220000110046570001240005042400061b2200073100014b530027510005403f0c015a0003255700005700013100024b380006570006042400061b2200083100014b53005301262a3f3800042200001100270c015a00042557000057000024000924000a3100024b51000607000a0c01530144000b3f38000522000011009b0c005a0002240002240003042400031b3100004b0424000c1b2200083100014b38000657000651000607000a0c01530144000b36000314000e583800a00c01530144000b0b00530c005a00030424000d1b0c005a00022400022400032400030c005a00022400022400033100003100034b380007570007042400061b2200083100014b53005301262a51000607000a0c01530144000b4d3f38000622000011006a0c005a000424000224000c042400031b3100004b0424000c1b2200083100014b38000657000651000607000a0c01530144000b0c005a000524000224000c042400031b3100004b0424000c1b2200083100014b38000757000751000607000a0c01530144000b3f38000722000011007922000e050a4a1c5100560c01530144000b1053013800060c005a000224000224000f51000a570006473800060c005a00062522000011001d0d0c005a000224000224000f51000d0c0204240010474400103f3a012c3100024b1707001b0a042400031b3100004b2200112a51000a0c0153014400123f38000822000011004b0c005a000722000011003d0c005a0006252200001100280c015a000a250c025a00000c025a00010c025a00023100034b170c035a00002200132e173f3a012c3100024b173f13013f3800092200001102ec0c005a00081300530026380006190000bcdd3800073a00f83800083a179e380009532938000a3a05e738000b537438000c3a02f438000d3a00e238000e3a017a38000f5700075700012400142a5100530c0153014400120d53013800100c005a000224000224000f51000a570010473800100c005a00062522000011001d4c0c005a000224000224000f51000d0c0204240015474400153f3a012c3100024b175300380011530038001257000253082a51002557000253202a51002b57000253402a5100315700023a00802a51003607004207003f57000838001157000938001207003057000a38001157000b38001207002157000c38001157000d38001207001257000e38001157000f3800120700035700125300275100530c0153014400120153013800100c005a000224000224000f51000a570010473800100c005a00062522000011001d0d0c005a000224000224000f51000d0c0204240015474400153f3a012c3100024b170c010c005a0009220016234400170c015a0015042400181b2200001100180a042400191b0c025a00010c025a00023100024b3f3100014b0424001a1b2200001100cc5700003800065700062400143800070c015a0015042400181b2200001100130a0424001b1b0c035a00063100014b3f3100014b0424001a1b2200001100885700003800060c025a0011570006270451000f170c025a00120c035a0007275100060700620c0153014400120c025a00002200001100043f44001c4c53013800070c005a000224000224000f51000a570007473800070c005a00062522000011001d370c005a000224000224000f51000d0c040424001d4744001d3f3a012c3100024b173f3100014b173f3100014b170c005a00081300530026570006263800135700133a03e8530a281e5100530c0153014400120e53013800100c005a000224000224000f51000a570010473800100c005a00062522000011001d100c005a000224000224000f51000d0c0204240015474400153f3a012c3100024b173f38000a22000011024057000024001c380006055700064a22001e2a5100530c0153014400123753013800070c005a000224000224000f51000a570007473800070c005a00062522000011001d020c005a000224000224000f51000d0c020424001d4744001d3f3a012c3100024b1722001f380008055700064a22000e2a510012570006042400031b3100004b380008570008042400201b2200213100014b24001438000957000953011e5100530c0153014400120d53013800070c005a000224000224000f51000a570007473800070c005a00062522000011001d4c0c005a000224000224000f51000d0c020424001d4744001d3f3a012c3100024b175700080424000c1b2200223100014b5100530c0153014400120d53013800070c005a000224000224000f51000a570007473800070c005a00062522000011001d010c005a000224000224000f51000d0c020424001d4744001d3f3a012c3100024b175700080424000c1b2200233100014b5100530c0153014400120253013800070c005a000224000224000f51000a570007473800070c005a00062522000011001d100c005a000224000224000f51000d0c020424001d4744001d3f3a012c3100024b170c015a0009255700005700085700013100034b0424001a1b2200001100043f3100014b042400241b2200001100540c0153014400120153013800060c005a000224000224000f51000a570006473800060c005a00062522000011001d4c0c005a000224000224000f51000d0c0304240010474400103f3a012c3100024b173f3100014b173f38000b2200001100a70c005a000813005300263800060c015a00085700002e170c015a00075700002e170c015a00065700002e170c015a00055700002e170c005a00081300530026570006263800075700073a03e8530a281e5100530c01530144000b4c53013800080c005a000224000224000f51000a570008473800080c005a00062522000011001d0d0c005a000224000224000f51000d0c0204240025474400253f3a012c3100024b173f38000c2200001100140c015a000b2557000053203100024b173f38000d2200001100900c005a000813005300263800060c015a000c5700002e170c005a00081300530026570006263800075700073a03e8530a281e5100530c01530144000b3053013800080c005a000224000224000f51000a570008473800080c005a00062522000011001d010c005a000224000224000f51000d0c0204240025474400253f3a012c3100024b170c0153014400263f38000e2200001100250c005a0006252200001100100c015a000e0c025a00002e173f3a1b583100024b173f38000f2200001102742200001100ba0c005a000b042400271b3100004b3800060c005a000b042400271b3100004b5700062653083d0451000f170c025a000624001453001e5100660c025a0006042400281b3100004b38000736000314002058380012570007240029510013570007042400291b5700123100014b170b002c5700070424002a1b3100004b38000857000724002b5100135700070424002b1b5700083100014b174d07ff780c025a000624001453001e51000f0c005a000c0c025a000c2e173f38000b2200001100800c025a00071a510063050c005a000d4a22001e275100400c005a000d2200001100305700000424002c1b3100004b53051e5100110c025a000b253100004b1707000f0c005a000c0c025a000c2e173f2e170700150c005a0006250c025a000b53323100024b170700160c005a0006250c025a000c3a03e83100024b173f38000c310000380006403800072538000822002d22002e22002f220030310004380009530038000a57000a5700092400143d5100570a042400311b57000957000a232200001100350c021844001d0c005a000a0c025a00082e170c020c005a00062522000011000a0c024044001d3f3a03e83100024b4400253f3100024b1757000a4738000a07ffa20a2400321300042200001100390c025a0006042400331b0a24003213000457000044002a3100014b170c025a000624001453012751000e0c025a000c253100004b173f440034042200001100570c005a00072200001100490c025a0006042400331b0a2400321300040c035a000044002a0457000044002b045700014400293100014b170c025a000624001453012751000e0c025a000c253100004b173f13013f4400183f380010220000110057310000380006570006042400351b0c015a00113100014b380006570006042400331b0c015a00003100014b17570006042400331b0c015a00013100014b17570006042400331b0c015a00023100014b175700063f3800122200001101805700000c015a00165301525700000c015a00175300525700000c015a00185300525700000c015a00195300525700000c015a001a5300525700000c015a001b40525700000c015a001c5300525700000c015a001f5300525700000c015a001d5300525700000c015a001e5300525700000c015a00205300525700000c015a002140525700000c015a00225300525700000c015a00235300525700000c015a002440525700000c015a00255303525700000c015a002625525700000c015a002c570001525700000c015a002d0c005a0009525700000c015a002b5300525700000c015a002840525700000c015a002e405257000153004400365700010c005a000f4400375700010c005a000f44003857000153004400395700010c005a000f44003a57000122003b23220031233800065700000c015a0029570006525700000c015a00305300525700000c015a00315300525700000c015a00325300525700000c015a00335300525700000c015a00345300525700000c015a003540523f3800362200001100c657000053004400360c005a000b042400271b3100004b38000657000022003c235100860c015a0079255700000c015a00772200001100330c005a000b042400271b3100004b3800060c025a000053014400360c015a004e252200002200003a27103100034b173f2200001100340c025a000053024400360c015a004e250c005a001057000024003d2e0c005a001057000024003e2e3a27113100034b173f3100044b1707001f57000053034400360c015a004e252200002200003a27123100034b173f38003722000011001b0c015a007f250a0a24003f570000193332ecaf3100044b3f38003822000011002f220040380006220041380007570006570007503800080c015a007c250a0a24003f5700085700003100044b3f3800392200001100140a042400421b5700002200433100024b3f38003a22000011002a220044380006220045380007570006570007503800080a042400461b5700005700083100024b3f38003b22000011005a57000124003953012a51004d5700005301275100255700010c015a00384400375700010c015a00394400385700012200474400480700225700010c015a003a4400375700010c015a003b4400385700012200494400483f38003c22000011023053733a00f85353536653673a00c93a00b53a00835363535e530453443a00fa3a0084531531000f380006310000380007570007042400331b53013100014b17570007042400331b5700000c015a0027235700065300233b3100014b17570007042400331b5700012400365700065301233b3100014b173a00ff38000822004a570001540451000b172200395700015451001d570001240039530f3553041d57000122004a23530f353c380008570007042400331b5700085700065302233b3100014b17570007042400331b5700000c015a0016235700065303233b3100014b17570007042400331b5700000c015a0017235700065304233b3100014b17570007042400331b5700000c015a0018235700065305233b3100014b17570007042400331b5700000c015a0019235700065306233b3100014b17570007042400331b5700000c015a001a235700065307233b3100014b17570007042400331b5700000c015a001d235700065308233b3100014b17570007042400331b5700000c015a001e235700065309233b3100014b17570007042400331b5700000c015a002523570006530a233b3100014b17570007042400331b5300570006530b233b3100014b17570007042400331b5700000c015a002023570006530c233b3100014b17570007042400351b5300570006530d233b5300570006530e233b3100023100014b38000757000124003a5100215700010424003a1b5700073100014b3800095700095100095700093800075700073f38003d2200001105f20c005a00050424004b1b0c005a001113000424004c1b5700003100014b3100014b3800065700062400143800070c005a000813005300263800083100003800090c015a00745700022e170c015a002f51027e5700020c015a00172353002a51026f5700020c015a00233a07d152530038000c0c005a000224000224000f51000c57000c53025038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c1657000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c530138000d0c005a000224000224000f51000a57000d4738000d0c005a00062522000011001d2d0c005a000224000224000f51000d0c0204240050474400503f3a012c3100024b170c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b38000e57000e3a00ff3538000f5700020c015a002757000f5257000f5302345100100c015a005c5700022e1707000d0c015a005d5700022e170c015a006a5700022e170c015a006e5700022e170c015a00675700022e17570009042400351b53775368536053293100043100014b380009570009042400351b0c015a004457000e2e3100014b380009570009042400351b0c015a0048255700085700023100024b3100014b38000957000322005123041a51000717220052380010570009042400351b0c015a00465700102e3100014b3800095700020c015a002223380011570011473800110c015a00445700112e380012570009042400351b5700123100014b3800095700020c015a0022570011520c015a00755700022e170c015a0073253100004b3800130c015a00445700132e380014570009042400351b5700143100014b3800090c015a00445700072e380015570009042400351b5700153100014b3800090c015a00432557000157000f3100024b042400531b530053083100024b380016570009042400351b5700163100014b3800090c015a00412200542e38001757000322005523041a510007172200563800185700175100095700170700062200563800175700185100095700180700062200563800180c005a00050424004b1b570003042400571b5700173100014b3100014b3800190c005a00050424004b1b570003042400571b5700183100014b3100014b38001a570003042400581b5700192400143100014b38001b57001b042400351b5700193100014b38001c570003042400581b57001a2400143100014b38001d57001d042400351b57001a3100014b38001e570009042400351b57001c3100014b380009570009042400351b57001e3100014b3800090c015a003d255700025700033100024b38001f570009042400351b57001f3100014b380009570003042400371b5700093100014b38000a570003042400381b57000a3100014b38000b0c005a00081300530026570008263800205700203a03e8530a281e5100105700020c015a00233a07d2520d57000b3f38003e2200001100c52200003800060c015a003c255700032400365700033100024b1757000324004822005950380006360003140050583800285700062200005700020c015a00172350503800060c015a004e250c005a001057002824003d2e0c005a001057002824003e2e5700020c015a0023235700020c015a0017233100044b170b00440c015a003e255700005700015700025700033100044b380007570007510010570006570007503800060700175700062200005700020c015a00172350503800064d5700063f38003f2200001100950c015a00375700012e170c015a0036255700005700013100024b170c015a005c5700002e170c015a005d5700002e170c015a00725700002e170c015a00645700002e170c015a00685700002e170c015a006a5700002e170c015a006e5700002e170c015a00745700002e170c015a00655700002e175700000c015a00240c015a004b22005a2e520c015a00835700012e173f3800402200001100460c005a001222005b5700005022005c5013013800070c005a001324005d0424005e1b5700073100014b380006585100130c005a00145700065302232e3f070005253f3f38004122000011005331000038000653003800075700075700003d51003a570006042400331b0c005a000e0424004d1b0c005a000e0424004e1b3100004b3a0100283100014b3100014b175700074738000707ffc25700063f3800422200001100845700000c005a000f2751000c0c015a004253102e3f57000024001453023453002a5100041631000038000653003800075700075700002400143d5100430c005a0015255700000424005f1b57000753023100024b53103100024b380008570006042400331b5700085700013b3100014b1757000753025038000707ffb65700063f3800432200001100500c005a00055304130138000657000653005700003a00ff3552570006530157000053082b3a00ff3552570006530257000053102b3a00ff3552570006530357000053182b3a00ff35525700063f3800442200001100ae0c005a0005530813013800060c005a000e0424004d1b5700004100600f3100014b38000757000053002b38000857000653005700083a00ff3552570006530157000853082b3a00ff3552570006530257000853102b3a00ff3552570006530357000853182b3a00ff355257000653045700073a00ff3552570006530557000753082b3a00ff3552570006530657000753102b3a00ff3552570006530757000753182b3a00ff35525700063f38004522000011000d0c015a00455700002e3f38004622000011003e530038000653003800075700075700002400143d510023570006570000570007233a00e935503a00ff353800065700074738000707ffd65700063f3800472200001102be0c005a0005530813013800060c005a000e0424004d1b5700004100600f3100014b38000757000053002b38000853003800095700083a00ff3538000a57000853082b3a00ff3538000b57000957000b503a00ff3538000957000853102b3a00ff3538000c57000957000c503a00ff3538000957000853182b3a00ff3538000d57000957000d503a00ff353800095700073a00ff3538000e57000957000e503a00ff3538000957000753082b3a00ff3538000f57000957000f503a00ff3538000957000753102b3a00ff35380010570009570010503a00ff3538000957000753182b3a00ff35380011570009570011503a00ff35380009570006530057000a53293b52570006530157000b53293b52570006530257000c53293b52570006530357000d53293b525700062400145308270451000d175700010c015a002b2351014a3600031400955838006e5700010c015a00282340275100041253013800150c005a000224000224000f51000a570015473800155700010c015a002e53012623182751000f570006530057000953293b5257000653002357000653012350570006530223505700065303235038001353013800150c005a000224000224000f51000a570015473800155700155700010c015a002b23503800130b00a35300510012570006530357000d53273b5207ffef5700010c015a002c233800125700122400610424004b1b534353783a009153323100043100014b380013570012240061240062042400031b3100004b3800145700010c015a002e231827045100071757001451000f570006530457000e53293b5253013800150c005a000224000224000f51000a570015473800155700155700010c015a002b23503800134d5700010c015a002a57001352570006530457000e53293b52570006530557000f53293b52570006530657001053293b52570006530757001153293b525700063f3800482200001100850c005a00162400633800065700060424000c1b2200643100014b5100072200653f5700060424005e1b0a24006622006722006813023100014b5100072200693f5700060424005e1b0a24006622006a22006813023100014b51000722006b3f5700060424005e1b0a24006622006c22006813023100014b51000722006d3f22006e3f3800492200001100120c015a0049253100004b22006e273f38004a2200001101a00a24006f1a1a041a51000a170a2400701a1a380006050c005a00174a22000e2a041a51000a170a2400711a1a380007050a2400724a22000e270451000e17050a2400734a22000e270451001217050c005a00162400744a22000e27041a51001d170a2400662200752200681302042400761b0a2400773100014b041a51002a170a2400780451000b170a240078240079041a51000717220000042400031b3100004b22007a2738000840041a51000e170c005a001324007b1a1a3800095700091a0451000a170a24007c1a1a0451000a170a24007d1a1a041a510018170a24003b1a1a0451000d170a24003b24007b1a1a041a510028170a24007e240063042400061b22007f3100014b53005301261e0451000a170a24005a1a1a38000a0a24005a1a1a04510008175700061a045100081757000a1a38000b57000022005a2751000a57000b3f0700555700002200782751000a5700083f0700445700002200802751000a5700093f0700335700002200812751000a5700073f0700225700002200822751000a57000a3f070011570000220070275100075700063f3f38004b2200001100560c005a0013042400831b2200843100014b3800060c005a001813003800075700064e380009570009052e510025380008570007042400851b570008240086042400871b3100004b3100014b1707ffd95700073f38004c2200001100130c005a00192200881301253100004b3f38004d2200001101830c005a0002042400891b0c005a001324005d042400201b22008a3100014b0424008b1b220000110013570000042400201b22008c3100014b3f3100014b3100014b22005523041a51000517253800060c005a0002042400891b0c005a001324005d042400201b22008a3100014b0424008b1b220000110013570000042400201b22008c3100014b3f3100014b3100014b22008d23041a51000517253800070c005a001a13003800085700080424008e1b22008f220090183100034b17570008042400911b2200922200933100024b17570008042400911b2200942200953100024b170c005a001b042400961b0a2400321300042200974400980422009944009a0422009b44009c040a24009d24009e44009f040a24007e2400634400a0040a24007e2400a14400a2040a2400321300045700004400a30457000144003e045700064400a404570003220000504400a5040a2400484400a6045700074400a7045700024400a84400a93100014b380009570008042400aa1b5700093100014b173f38004e22000011003a57000253052b57000153021d3b57000153032b57000253041d3b505700005700013b5700055700035303355700043b235700023b503b3f38004f22000011002b193c6ef3733800065700005700065038000057000053022b5303353800075700075700003100023f380050220000110032570001042400531b530053203100024b3800060c005a00192200a82200ab2200ac1303255700005700063100024b3f38005122000011001f0c005a00192200ad2200ae2200af1303255700005700013100024b3f38005222000011001f0c005a00192200ae2200ad2200b01303255700005700013100024b3f3800532200001100150c005a00192200ae2200b113025700002e3f38005422000011001f0c005a00192200ad2200a82200b21303255700005700013100024b3f3800552200001100150c005a00192200a32200b313025700002e3f38005622000011008f2200b43800062200b53800072200b6380008570001042400531b530053023100024b57000750570001042400531b5302530c3100024b503800095700065700075057000850380009570001042400531b530853063100024b57000650570008042400531b530253083100024b5038000a0c005a00192200a82200ad2200b71303255700005700093100024b3f3800572200001100150c005a00192200592200b813025700002e3f3800582200001100150c005a00192200ad2200b913025700002e3f38005922000011004b403800060c015a004a253100004b5100365700002200ba235700002200bb23263a00aa1e041a510017175700002200bc235700002200bd23263a00aa1e510007183800065700063f38005a220000110062403800063600031400455838000e0c005a0002042400be1b57000e22003e0a24003213000422000011000a0c02184400103f4400bf3100034b170c005a00192200a32200c0130257000e2e170b000f0c005a001c2200001301004d5700063f38005b22000011004a5700000c015a002c233800065700000c015a001623530027510005183f403800070c015a005b253100004b5100071838000757000751000e5700000c015a00165300525700073f38005c2200001100565700000c015a001823530127510005183f403800060c015a005e253100004b380007570007533f2a5100125700000c015a0018530152183800065700000c015a002b5700000c015a001723530350525700063f38005d22000011028e2200001100405700002400c13800065700065100305700062400c238000757000653644400c257000613003800085700065700074400c257000824003e220000503f3f3800060a2400321300042200c34400c4042200c34400c5042200c34400c6042200c34400c73800073100003800082200c33800092200c338000a2200c338000b2200c338000c537f38000d5700060a2e38000e0a2400662200c82200001302042400c91b57000e3100014b38000f57000f51000f57000757000f5300234400c557000e5100ab57000e042400ca1b0a2400662200cb2200cc13022200213100024b042400ca1b0a2400662200cd2200cc13022200003100024b042400201b0a2400662200ce2200cc13023100014b38001057001024001438000d570010530023041a510007172200cf0424005f1b53003a00803100024b38000957001057000d53012623041a51000e1757001057000d53022623041a510007172200cf0424005f1b53003a00803100024b38000a57000757000a4400c45700075700094400c757000a38000b57001157000b045100191757000b042400061b2200d03100014b53005301261e1a53001d3c38001157001157000b045100191757000b042400061b2200d13100014b53005301261e1a53011d3c38001157001157000b045100191757000b042400061b2200d23100014b53005301261e1a53021d3c38001157001157000b045100191757000b042400061b2200d33100014b53005301261e1a53031d3c38001157001157000b045100191757000b042400061b2200d43100014b53005301261e1a53041d3c38001157001157000b045100191757000b042400061b2200d53100014b53005301261e1a53051d3c38001157000051000b5700005700112e175700113f38005e2200001100b136000314000b58380099403800070b009c0c005a00162400d6380006403800070c005a00162400d7402a51000a1838000707000e0c005a00162400d73800072200d70c005a0016540451000b172200d7570006543800085700081a5100095700083800070c005a00160451001a170c005a0002042400d81b0c005a00162200d73100024b0451001d170c005a0002042400d81b0c005a00162200d73100024b2400bf510007183800074d5700073f38005f22000011011a5700003800060c005a00133800075700072400d93800082200d757000654041a51000b172200da57000654041a51000b172200db57000654041a51000b172200dc57000654041a51000b172200dd57000754041a51000b172200de57000754041a51000b172200df57000754041a51000b172200e057000754041a51000b172200e157000754041a51000b172200e257000754041a51000b172200e357000754041a51000b172200e457000754041a51000b172200e557000754041a51000b172200e657000754041a5100151725570008042400e71b2200e83100014b2a041a5100151725570008042400e71b2200d73100014b2a041a5100151725570008042400e71b2200e93100014b2a510008183f070005403f3f3800602200001100c85700003800062200ea5700065404510011175700062200ea230c005a000f2a510005183f2200eb57000654041a51000b172200ec57000654041a51000b172200ed57000654041a51000b172200ee57000654041a51000b172200ef57000654041a51000b172200f057000654041a51000b172200f157000654041a51000b172200f257000654041a51000b172200f357000654041a51000b172200f457000654041a51000b172200f557000654041a51000b172200f657000654510008183f070005403f3f3800612200001100345700000c015a00242351002636000314000958380012183f0b00170c005a00162400f72400f8530027510005183f4d403f380062220000110005403f3800632200001100ab5700000c015a002c233800065700000c015a00192353002a510005183f53003800070c015a005f5700062e51000f570007530153001d3c3800070c015a00605700062e51000f570007530153011d3c3800070c015a00615700062e51000f570007530153021d3c3800070c015a00625700002e51000f570007530153031d3c3800070c015a00635700062e51000f570007530153041d3c3800075700000c015a001957000752403f3800642200001100cd5700000c015a002c2338000653003800073600031400075838003f0b00a122005a5700065451002f57000622005a233800085700080451000f172200f90c005a001d54402751000f570007530153001d3c3800075700000c015a002123402751005c0c005a00162400fa042400fb1b0a2400321300042200fc4400053100014b0424001a1b2200001100245700002400fd2200fe275100160c025a00000c015a00201523530153011d3c523f3100014b175700000c015a002118524d5700000c015a002057000752403f3800652200001100260c015a004d253100004b380006570006042400ff1b2201003100014b510005183f403f3800662200001100845700000c015a00332353001e04510010175700000c015a00342353001e04510017175700000c015a0033235700000c015a0034233251004b0c005a000e042401011b5700000c015a0033235700000c015a003423263100014b38000657000653023d04510010175700000c015a00312353143d51000d5700000c015a003518523f3800672200001101a95700000c015a0029233800065700062522002d2200001100610c025a00000c015a001c53015257000024010240275100160c025a00000c015a001f1523530153001d3c520c025a00000c015a00310c025a00000c015a003123530150520c025a00000c015a00340c005a000b042400271b3100004b523f3100024b175700062522010322000011002f0c025a00000c015a001c53015257000024010240275100160c025a00000c015a001f1523530153011d3c523f3100024b175700062522002f22000011003b57000024010240275100160c025a00000c015a001f1523530153021d3c520c025a00000c015a00320c025a00000c015a003223530150523f3100024b175700062522010422000011002257000024010240275100160c025a00000c015a001f1523530153031d3c523f3100024b17570006252200302200001100610c025a00000c015a001c53015257000024010240275100160c025a00000c015a001f1523530153041d3c520c025a00000c015a00300c025a00000c015a003023530150520c025a00000c015a00330c005a000b042400271b3100004b523f3100024b173f38006822000011001f0c005a001e22003013013800065700062401021827510005183f403f3800692200001100cc5700000c015a001b2340275100490c015a0066253100004b5100145700000c015a001a1523530153001d3c520c015a0069253100004b5100145700000c015a001a1523530153021d3c525700000c015a001b18525700000c015a001c235300275100175700000c015a001a1523530153011d3c520700175700000c015a001a152353ff530153011d3b35525700000c015a0035235100145700000c015a001a1523530153031d3c525700000c015a001f2353001e5100145700000c015a001a1523530153041d3c523f38006a2200001100e6403800063600180c005a0013240105042401061b5700073100014b1714000b583801ae183800060b00b80c005a001324010724001453001e51001b050c005a00132401074a22000e2a51000718380006070007183800065700061a5100830c005a0013042401081b2201093100014b38000757000722010a4400050c005a00132401050424010b1b5700073100014b170c005a001324010724010a3800080c005a001922010c22010d130222010a2e380009055700084a22000e27041a51000917570009252751000a183800060700115700085700092a510007183800064d5700063f38006b220000110076403800065700000c015a002d23380007570007240061510007183800060c005a000b1a041a51000d170c005a000b24010e1a041a51000c170c005a001f24010f51000a183800060700280c005a0003042400bf1b0c005a000b2201103100024b3800085700080527510007183800065700063f38006c2200001100285700000c015a002c2338000622011157000654510010570006042401111b3100004b3f183f38006d2200001100705700000c015a001e2353002a510005183f53003800060c015a006b253100004b51000f570006530153001d3c3800060c015a006c5700002e51000f570006530153011d3c3800060c015a006d5700002e51000f570006530153021d3c3800065700000c015a001e57000652403f38006e2200001100fd22000011000d0c022f4400102201123f38000757000024000138000857000824000238000957000924000338000a57000024011338000b57000b1a51000757000a3f57000b24000d38000c57000924000438000d57000924000d38000e57000957000744000457000957000744000d360003140007583800400b000c57000722000050174d57000957000d44000457000957000e44000d055700064a22001e2a041a51000e175700062400052200032a041a51000d1757000624001453002a51000757000a3f57000c255700065700073100003100034b38000f57000f042400061b2201123100014b53005301262751000757000a3f5700063f38006f2200001100d50c015a006f5700002e380006570000042400661b2201143100014b38000757000624000422000050042400ca1b5700072200003100024b380008310000380009530038000a530038000b57000124001438000c57000b57000c3d51007457000157000b2338000d57000d51003f570006042400041b57000d3100014b042400ca1b5700072200003100024b38000e57000957000b57000e57000827510008530107000553005207000c57000957000b53005257000a57000957000b2357000b1d3c38000a57000b4738000b07ff8857000a3f38007022000011011a0a38000657000624011524004e5700062401165700062400c131000338000757000624011722011831000257000624011922010c31000257000624011922011a31000257000624011b22011c31000257000624011b2200a13100023100053800085700062401132400d8380009530038000a57000824001438000b57000a57000b3d51007457000857000a2338000c57000c53002338000d57000d51004257000d24000238000e57000e5100335700092557000e57000c5301233100024b38000f57000f510019570007042400331b57000f2400bf3100014b17070012570007042400331b53003100014b1757000a4738000a07ff880c015a0070255700065700073100024b3800105700103a00ff2a510005183f403f3800712200001100335700000c015a001d2353002a510005183f0c015a0071253100004b5100145700000c015a001d1523530153001d3c523f3800722200001100640a38000657000624011d22011e27041a51000e1757000624011d22011f27041a51000a17570006240120041a51000a17570006240121041a51000a1757000624012251000953003f0700180c005a0002042401231b5700063100014b2400143f3f3800732200001100cf5700000c015a002c233800065700000c015a00172353002a510005183f53003800070c005a000f38000822012457000654510015570006042401241b3100004b38000807000f570007530153001d3c38000757000851000c570008530523070005530038000957000953002751000f570007530153011d3c3800075700000c015a0017570007525700000c015a00172353002a5100370c005a0006252200001100230c015a004e252200002200003a07d30c025a00000c015a0017233100044b173f3a012c3100024b17403f3800742200001100865700000c015a00172353002a510005183f5700000c015a0022310001233800065700000c015a002c23380007570006536334532127041a51000b175700063a00821c38000857000851002022012557000754510016570007042401251b5700073a00803100024b1722012657000754510013570007042401261b5700073100014b173f3800752200001100960a22003c2304220127231b5700010a2400321300040a2400321300040a22003c23220128230a2400321300043a0800440129130144012a44012b3100024b0424001a1b2200001100250c025a000057000024012c44003f0c025a000251000e0c025a0002253100004b173f3100014b042400241b2200001100160c025a000351000d0c025a00035700002e173f3100014b173f3800792200001100542200003800065700003800070c005a00205700011301570007235300465100305700060c005a00040424000a1b0c005a00205700011301570007233100014b503800065700074738000707ffc25700063f38007a22000011002d570000042400531b570001570001570002503100024b3800060c005a002057000613013800075700073f38007b2200001100d90c005a0008130053002638000657000124012d24012a24012e38000757000338000857000124012d0424012f1b5700082400143100014b3800090c005a00205700075700095700082400141303042401301b5700083100014b1757000124012d042401311b5700095700082400143100024b38000a22000038000b570000240132510018570000042401321b57000a5700073100024b0700130c015a007a2557000a5700073100024b38000b57000124012d042401331b57000a3100014b1757000124012d042401331b5700093100014b1757000b3f38007c2200001100b70c005a0008130053002638000657000124012d24012a24012e38000757000338000857000124012d0424012f1b5700082400143100014b3800090c005a00205700075700095700082400141303042401301b5700083100014b1757000124012d042401341b5700095700082400143100024b38000a0c015a007b2557000757000a53103100034b38000b57000124012d042401331b57000a3100014b1757000124012d042401331b5700093100014b1757000b3f38007d2200001100b70c005a0008130053002638000657000124012d24012a24012e38000757000338000857000124012d0424012f1b5700082400143100014b3800090c005a00205700075700095700082400141303042401301b5700083100014b1757000124012d042401351b5700095700082400143100024b38000a0c015a007b2557000757000a53103100034b38000b57000124012d042401331b57000a3100014b1757000124012d042401331b5700093100014b1757000b3f38007e2200001100be0c005a0008130053002638000657000124012d24012a24012e38000757000238000857000124012d0424012f1b5700082400143100014b3800090c005a00205700075700095700082400141303042401301b5700083100014b1757000124012d042401361b5700095700082400145700033100034b38000a0c015a007b2557000757000a5700082400143100034b38000b57000124012d042401331b57000a3100014b1757000124012d042401331b5700093100014b1757000b3f38007f2200001100275700002201372200001100190c015a0084250c015a00825700005700013100034b3f523f38008322000011008c2f380007530053012638000853003800093600031400075838004e0b006d0a38000a0c015a008038000b0c005a000f38000c570000530026570000275100475700000c015a0081275100160c015a00402557000b57000a3100024b38000c5700000c015a00822751001c0c015a003f2557000157000257000b57000a3100044b38000c57000c3f4d3f3800845300380000530038000153003800023100003800110c005a0009380013530038008557008553053d5100520c005a000e0424004d1b0c005a0008042400271b3100004b3a03e80f0c005a000e0424004e1b3100004b505302343100014b380014570011042400331b5700143100014b175700854738008507ffab57001357000c44012657001357000b440125570013570012440124570010253100004b38001557001322001657001552570013190025030144013857000e5700132e175364380016536538001753663800185367380019536838001a3a041038001b536938001c536a38001d536b38001e536c38001f536d3800203a04423800213a00cb3800223a00cc3800233a012d3800243a01913800253a01923800263a01933800273a01943800283a01f53800293a03e338002a3a03e438002b3a03e538002c3a03e638002d3a166e38002e1838002f3a02593800303a025a3800313a025b3800323a025c3800333a025d3800343a025e3800350a5700504401390a57004f44013a0a5700514400460a57005244013b0a57005344013c0a57005444013d0a57005544013e0a5700564400570a5700574400420a57005844013f0a570059440058530053615373536d530153005300530053015324530753605303537f537f537f530053605301537f5301537f53605302537f537f5301537f536053005301537f53605301537f530053605300530053605303537f537f537f5301537f530353135312530553025306530053025302530053005300530153005303530153045301530353045301530453055301537053015302530253055306530153013a008053023a00805302530653085301537f530153413a00903a00965304530b53073a00975302530d5306536d5365536d536f5372537953025300532353785379535f53645361536153395332533653385338536653665339533353305339536553315361533253395364533253355332533253345366536453305331533653345361530053015306536d5361536c536c536f53635300530c530453665372536553655300530d532353785379535f5331533853645331533253625338536553355334533153625331536653645338533053625331536353335363533253655365536253365333536153325330533853005302532353785379535f5363536153345365536453615332533653345332536553345339536353335333533853315331533553385366533653625330533953625330533153355336533753005304532353785379535f5336536653355364533153315362536453395337533353625337536153615365533153635331536253655339533253355364533553645336533953395363533153005305530b535f5369536e5369537453695361536c5369537a5365530053005319535f535f5369536e536453695372536553635374535f53665375536e536353745369536f536e535f537453615362536c5365530153005310535f535f536553725372536e536f535f536c536f5363536153745369536f536e5300530b53095373537453615363536b53535361537653655300530f530c5373537453615363536b5352536553735374536f5372536553005310530a5373537453615363536b5341536c536c536f536353005311530953075301530053415301530b53015300530a3a00ef3a008f53025312530353005301530b3a00df3a0083530153025307537f5301537e5323530053413a00a05302536b5322530653245300532053065322530353413a009c3a00fa3a00b73a00c5530653365302530c5320530353413a00f4530a5328530253005341537f537353413a00f8530a5328530253005341537f53735372532253025341537f53735320530253413a00a53a009d3a00f33a00d653055372536a53413a00a73a00be3a00dc3a008c5301536a533653023a009c530253205303532053035341530c536a53365302530853035340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405320530353285302530c5322530253413a00983a00e23a008c5372534c530453405320530253413a00873a00fa3a00c13a00b9537b534c530453405320530253413a00fc3a00ed3a00dc3a00b55379534c530453405320530253413a00cc3a00e23a00db3a00d85378534c530453405320530253413a00a23a00ab3a00ea3a00bf5378534c530453405320530253413a00933a00813a00a43a008f5378534c530453405320530253413a00bb3a00de3a00db3a008453785346530d530a5320530253413a00d33a009f3a00813a008853785347530d53675320530353285302530853413a00b13a00c03a008c3a00ad537a533653025300530c5367530b5320530253413a00943a00813a00a43a008f53785346530d53185320530253413a00bf3a00fa3a00dd3a009253785346530d53275320530253413a00ea3a00e43a00ac3a00ba53785347530d536653413a00cc530b532853025300531a53413a00d0530b532853025300531a5320530353285302530853413a00dd3a00a93a00cd3a00835379533653025300530c5366530b5320530253413a009f3a00de3a00853a00c95378534c530453405320530253413a00a33a00ab3a00ea3a00bf53785346530d53505320530253413a00d03a00e23a00e53a00c253785347530d53665320530353285302530853413a00ea3a00e43a00ac3a00ba5378533653025300530c5366530b5320530253413a00a03a00de3a00853a00c953785346530d53235320530253413a00d93a00d83a00e23a00d353785346530d53375320530253413a009a3a00ea3a00a73a00d853785347530d53655320530353285302530853413a00e53a00fe3a00eb3a00a3530653413a00db3a008c3a00c13a0085537953205303532d53003a00fa5301531b533653025300532053035320530353285302534c533653023a00885301530c5365530b5320530253413a00d03a00e53a00843a00fe5378534c530453405320530253413a00f13a00ea3a00d93a00e25378534c530453405320530253413a00cd3a00e23a00db3a00d853785346530d53055320530253413a00ca3a00c13a00b83a00e253785347530d53665320530353285302530853413a00f93a00b43a00d63a00e153015336530253005320530353205303532853025314533653025350530c5366530b5320530253413a00f23a00ea3a00d93a00e253785346530d53245320530253413a00e53a00ad3a00f13a00f453785346530d53435320530253413a00c73a00b93a00ef3a00fb53785347530d53655320530353285302530853413a00d83a00b93a00863a009b5301533653025300530c5365530b5320530253413a00f43a00d53a00aa3a00855379534c530453405320530253413a00d13a00e53a00843a00fe53785346530d53495320530253413a00dd3a00a93a00cd3a008353795347530d53655320530353285302530853413a00f93a00b43a00d63a00e1530153413a00a13a00fa3a00d53a00d7537c53205303532d53003a00895302531b5336530253005320530353415300533653025350530c5365530b5320530253413a00f53a00d53a00aa3a008553795346530d530e5320530253413a00db3a008c3a00c13a008553795346530d53205320530253413a00e83a00bc3a00a13a00ab53795347530d53645320530353285302530853413a00c13a00a53a00e13a009c537f533653025300530c5364530b5320530253413a00dd3a00bf3a00ae3a00ab537a534c530453405320530253413a00a03a00d23a00dc3a0082537a534c530453405320530253413a00813a00853a00c73a00cc5379534c530453405320530253413a00fd3a00ed3a00dc3a00b553795346530d53615320530253413a00803a00ca3a00803a00cc53795347530d53665320530353285302530853413a00913a00f63a00ff3a00f1537c533653025300530c5366530b5320530253413a00823a00853a00c73a00cc53795346530d534d5320530253413a00f83a00e83a00903a00dd53795346530d53115320530253413a00843a00d43a00b83a00ea53795347530d5365532053035320530353285302535453365302531453413a0094530f532853025300531a53413a0098530f532853025300531a5320530353285302530853413a00823a00853a00c73a00cc5379533653025300530c5365530b5320530253413a00ea3a00b93a00ad3a0085537a534c530453405320530253413a00a13a00d23a00dc3a0082537a5346530d535a5320530253413a00b93a00b03a00b83a0084537a5347530d53655320530353285302530853413a00ce3a008f3a009f3a00fa537d533653025300530c5365530b5320530253413a00eb3a00b93a00ad3a0085537a5346530d53125320530253413a00fe3a00883a00be3a009a537a5346530d53475320530253413a00c33a008f3a009b3a00a7537a5347530d53645320530353285302530853413a00f73a00e23a00ce3a00e7537a53413a00fd3a00ed3a00dc3a00b5537953413a00e4530e53285302530053413a00e8530e532853025300536c53413a008e3a00f53a00c03a00845302536e532253025341537f537353413a00d13a00c43a00a4534953715320530253415306537153725322530453413a00b43a00853a00fe3a00b5537953735322530253413a00c23a00e23a00da3a00fa537c53725320530253413a00c23a00c03a00da3a00f853045371536c5320530253413a00a53a00813a00803a0084530253715320530453413a00823a00a23a00805302537353413a00823a00a23a00803a008253785371536c536a53413a00dc3a00863a00d5537c5349531b533653025300530c5364530b5320530253413a00aa3a00d53a00873a00fc537a534c530453405320530253413a00ad3a00b03a00da3a00e5537a534c530453405320530253413a00de3a00bf3a00ae3a00ab537a5346530d531c5320530253413a00b13a00c03a008c3a00ad537a5347530d536553413a0094530d532853025300531a53413a0098530d532853025300531a5320530353285302530853413a00ea3a00cf3a009b3a00bf5301533653025300530c5365530b5320530253413a00ae3a00b03a00da3a00e5537a5346530d53045320530253413a00f73a00e23a00ce3a00e7537a5346530d53445320530253413a00873a009b3a00a03a00e9537a5347530d53645320530353285302530853413a00943a00813a00a43a008f5378533653025300530c5364530b5320530253413a00fe3a00843a00933a0096537b534c530453405320530253413a00ab3a00d53a00873a00fc537a5346530d53375320530253413a008b3a00923a00813a0087537b5346530d533b5320530253413a00d33a00953a009f3a008a537b5347530d53645320530353285302530853413a00ca3a00d63a009e3a00a0537f533653025300530c5364530b5320530253413a00ff3a00843a00933a0096537b5346530d535d5320530253413a00fd3a00e33a00b13a00af537b5346530d53175320530253413a00fc3a00d73a00c83a00b5537b5347530d5363532053035320530353285302536453365302532c5320530353205303532853025368533653025328532053035320530353285302536c53365302532453413a009c530e53285302530053413a00a0530e532853025300536e531a5320530353285302530853413a00da3a00ee3a008f5325533653025300530c5363530b5320530253413a00fe3a00d93a00e23a00fa537d534c530453405320530253413a00a33a009e3a008a3a00ee537c534c530453405320530253413a00c03a00b23a00ec3a00aa537c534c530453405320530253413a00c13a008c3a009a3a00e7537b534c530453405320530253413a00883a00fa3a00c13a00b9537b5346530d53375320530253413a00873a00d63a00b53a00d2537b5347530d53665320530353285302530853413a009a3a00ac3a00bb5333533653025300530c5366530b5320530253413a00c23a008c3a009a3a00e7537b5346530d532f5320530253413a00863a00d93a00863a00ec537b5346530d53395320530253413a008d3a00ae3a009f3a0085537c5347530d536553205303532853023a009053015322530253205303532853023a008c5302536a53205303532853023a009053025320530253205303532853023a008453025370536a532d53005300532253045320530253413a00805309536a532d530053005322530553715341537f5373532053045341537f5373532053055341537f537353715341537f53735371533a53005300532053025341530153725322530453205303532853023a008c5302536a53205303532853023a009053025320530453205303532853023a008453025370536a532d53005300532253055320530453413a00805309536a532d5300530053225304536a53205304532053055371534153015374536b533a530053005320530353285302530853413a00c43a00e53a00f03a0081537e53413a008d3a00ae3a009f3a0085537c5320530253415302537153205302534153025372536a5322530253413a00c053005346531b5336530253005320530353205302533653023a00905301530c5365530b5320530253413a009b3a008d3a00b03a00bc537c534c530453405320530253413a00c13a00b23a00ec3a00aa537c5346530d53405320530253413a00843a00e93a008b3a00b6537c5347530d53655320530353285302530853413a00fa3a00eb3a00c13a00c95306533653025300530c5365530b5320530253413a009c3a008d3a00b03a00bc537c5346530d534d5320530253413a00873a00c33a009e3a00bd537c5346530d534b5320530253413a00a13a00fa3a00d53a00d7537c5347530d53645320530353285302530853413a00c13a00b93a00ef3a00d7530753413a00f83a00e83a00903a00dd537953413a00d4530b53285302530053413a00d8530b532853025300536b53413a00d33a008f3a00ba3a00f053025372532253025320530253413a00883a00873a00d33a00b553065371534153015374536b53413a00913a00cf3a00903a00e05304536a53413a00d53a00fb3a00f63a00a9537f534b531b533653025300530c5364530b5320530253413a00943a00963a00af3a00b6537d534c530453405320530253413a00a03a009e3a00943a008a537d534c530453405320530253413a00a43a009e3a008a3a00ee537c5346530d53205320530253413a00913a00f63a00ff3a00f1537c5347530d53655320530353205303532853023a00fc530153415301536a533653023a00dc530153413a00ec530c532853025300531a53413a00f0530c532853025300531a5320530353285302530853413a00bf3a00fa3a00dd3a00925378533653025300530c5365530b5320530253413a00a13a009e3a00943a008a537d5346530d531c5320530253413a00a83a00953a00aa3a009e537d5346530d530d5320530253413a00f83a00bb3a00e43a00af537d5347530d536453413a0098530c5328530253005321530253413a0094530c5328530253005321530453205303532853023a00fc53015320530053205301531053065320530353285302530853413a00b13a00fd3a00933a00d9530653413a00a43a00963a00cf3a00875301532053025320530453715322530253413a00f43a00ce3a00fd3a00b6537e53725320530253413a00f43a00ce3a00fd3a00b6537e5371536c5320530253413a008b3a00b13a00823a00c953015371532053025341537f537353413a00f43a00ce3a00fd3a00b6537e5371536c536a5322530253413a00c93a00863a00de3a00eb530453725320530253413a00c83a00863a00de3a00eb53045371536c532053025341537f537353413a00c93a00863a00de3a00eb530453715320530253413a00b43a00f93a00a13a0094537b5371536c536a53413a00ec3a00bd3a00973a00db5379537153413a00a53a00b73a00f33a00e753055346531b533653025300530c5364530b5320530253413a00a93a00f33a00d73a00ec537d534c530453405320530253413a00953a00963a00af3a00b6537d5346530d53565320530253413a00b83a00833a00c53a00c1537d5347530d536453413a00f0530b5328530253005321530453413a00ec530b5328530253005321530553205303532853023a008c5302532253025342530053375303533853205302534253005337530353305320530253425300533753035328532053025342530053375303532053205302534253005337530353185320530253425300533753035310532053025342530053375303530853205302534253005337530353005320530353285302530853413a00b83a00833a00c53a00c1537d53413a00eb3a00b93a00ad3a0085537a5320530453205305537153413a00a63a00e13a00bb3a0092537a534f53413a00d73a00a73a00e63a00b65304536a5322530253413a00cb3a00a63a00805316537353205302537153413a00813a00d63a00dd3a00a45378534b531b533653025300530c5364530b5320530253413a00aa3a00f33a00d73a00ec537d5346530d53395320530253413a009c3a00a03a00c63a00f2537d5346530d53385320530253413a00ce3a008f3a009f3a00fa537d5347530d53635320530353285302530853413a00ce3a008f3a009f3a00fa537d53413a00a33a008f3a00a03a00fc530753413a00cc530e53285302530053413a00d0530e532853025300537253413a00f73a00ac3a00d23a00f55379534f53413a00b73a009c3a00b33a00ca5302536c532253025341537f537353413a00d63a00bc3a00b53a00bc537a53715320530253413a00a93a00c33a00ca3a00c353015371537253413a008d3a008f3a00ce3a00c3537a534b531b533653025300530c5363530b5320530253413a00ac3a00bf3a00e33a00cd537e534c530453405320530253413a00eb3a00c93a00ab3a0098537e534c530453405320530253413a00c33a00e53a00f03a0081537e534c530453405320530253413a00ff3a00d93a00e23a00fa537d5346530d53635320530253413a00d73a00ca3a00e83a0080537e5347530d53655320530353285302530853413a00a83a00953a00aa3a009e537d533653025300530c5365530b5320530253413a00c43a00e53a00f03a0081537e5346530d53145320530253413a00863a00fa3a00f33a008a537e5346530d530b5320530253413a00ef3a00ab3a00d83a008e537e5347530d53645320530353285302530853413a00cf3a00ea3a0091531c533653025300530c5364530b5320530253413a008f3a00b13a00be3a00ba537e534c530453405320530253413a00ec3a00c93a00ab3a0098537e5346530d53535320530253413a00a73a00d33a00cc3a00b1537e5347530d536453413a00ae530a53205303532d53003a00965302533a5300530053413a00af530a53413a008f530a532d5300530053413a00a453015373533a5300530053413a00e0530953413a00c05309532d5300530053413a00a853015373533a5300530053413a00e1530953413a00c15309532d53005300534153085373533a5300530053413a00e4530953413a00c45309532d530053005341530f5373533a5300530053413a00e5530953413a00c55309532d53005300534153305373533a5300530053413a00e3530953413a00c35309532d53005300532253025341537f537353413a00f253015371532053025341530d53715372533a5300530053413a00b0530a53413a0090530a532d5300530053225302532053025341533a5371534153015374536b53413a00c65300536b533a5300530053413a00e2530953413a00c25309532d53005300532253025320530253413a00e453005371534153015374536b5341531c536b533a5300530053413a00e6530953413a00c65309532d53005300532253025320530253413a00c253005371534153015374536b5341533e536b533a5300530053413a00e7530953413a00c75309532d5300530053413a00ea53005373533a5300530053413a00e8530953413a00c85309532d5300530053413a00eb53015373533a5300530053413a00eb530953413a00cb5309532d530053005341530d5373533a5300530053413a00e9530953413a00c95309532d53005300532253025320530253413a00eb53005371534153015374536b53415315536b533a5300530053413a00ea530953413a00ca5309532d53005300532253025341537f537353413a008a530153715320530253413a00f553005371537253413a00d453005373533a5300530053413a00ec530953413a00cc5309532d530053005322530253413a00e153015372532053025341537f53735341531e537253715341537f5373533a5300530053413a00ed530953413a00cd5309532d530053005322530253413a00bf53015372532053025341537f537353413a00c05300537253715341537f5373533a5300530053413a00ee530953413a00ce5309532d530053005322530253205302534153135371534153015374536b53415313536a533a5300530053413a00ef530953413a00cf5309532d530053005322530253413a009c53015371532053025341537f537353413a00e35300537153725341537f5373533a5300530053413a00f0530953413a00d05309532d530053005341533b5373533a5300530053413a00e0530a53413a00c0530a532d530053005322530253205302534153165371534153015374536b53413a00ea5300536b533a5300530053413a00e1530a53413a00c1530a532d53005300532253025341537f537353413a00f9530053715320530253413a0086530153715372533a5300530053413a00e2530a53413a00c2530a532d53005300534153095373533a5300530053413a00e3530a53413a00c3530a532d5300530053413a00b353015373533a5300530053413a00e4530a53413a00c4530a532d53005300534153235373533a5300530053413a00e5530a53413a00c5530a532d5300530053413a008f53015373533a5300530053413a00e6530a53413a00c6530a532d5300530053413a00c553005373533a5300530053413a00e7530a53413a00c7530a532d53005300532253025341537f537353413a00a2530153715320530253413a00dd530053715372533a5300530053413a00e8530a53413a00c8530a532d5300530053413a00c353015373533a5300530053413a00e9530a53413a00c9530a532d53005300532253025341537f537353413a00f65301537153205302534153095371537253413a00f853005373533a5300530053413a00ea530a53413a00ca530a532d5300530053413a00d353005373533a5300530053413a00eb530a53413a00cb530a532d53005300532253025341537f537353413a008f530153715320530253413a00f0530053715372533a5300530053413a00ec530a53413a00cc530a532d5300530053413a00b353015373533a5300530053413a00ed530a53413a00cd530a532d5300530053413a00cd53015373533a5300530053413a00ee530a53413a00ce530a532d5300530053413a00c453015373533a5300530053413a00ef530a53413a00cf530a532d530053005322530253205302534153365371534153015374536b53415336536a533a5300530053413a00f0530a53413a00d0530a532d530053005322530253205302534153295371534153015374536b53415329536a533a5300530053413a0080530953413a00c05308532d530053005322530253413a00d053005372532053025341537f537353413a00af5301537253715341537f5373533a5300530053413a0081530953413a00c15308532d5300530053413a00e653005373533a5300530053413a0082530953413a00c25308532d53005300532253025341537f53735341533f53715320530253413a00c0530153715372534153015373533a5300530053413a0083530953413a00c35308532d53005300532253025341537f537353413a00bf530153715320530253413a00c0530053715372533a5300530053413a0084530953413a00c45308532d530053005341531c5373533a5300530053413a0085530953413a00c55308532d530053005322530253413a00c053005372532053025341537f537353413a00bf5301537253715341537f5373533a5300530053413a0086530953413a00c65308532d53005300532253025341537f537353413a00af530153715320530253413a00d0530053715372533a5300530053413a0087530953413a00c75308532d530053005322530253413a00ea53015372532053025341537f537353415315537253715341537f5373533a5300530053413a0088530953413a00c85308532d5300530053413a00b253015373533a5300530053413a0089530953413a00c95308532d53005300532253025341537f537353413a00c253015372532053025341533d53725371533a5300530053413a008a530953413a00ca5308532d53005300532253025320530253413a00c953005371534153015374536b53413a00c95300536a533a5300530053413a008b530953413a00cb5308532d5300530053413a00bb53015373533a5300530053413a008c530953413a00cc5308532d5300530053225302534153325371532053025341537f537353413a00cd5301537153725341537f5373533a5300530053413a008d530953413a00cd5308532d53005300532253025341537f53735341532053715320530253413a00df530153715372533a5300530053413a008e530953413a00ce5308532d5300530053225302532053025341532c5371534153015374536b5341532c536a533a5300530053413a008f530953413a00cf5308532d5300530053413a008553015373533a5300530053413a0090530953413a00d05308532d53005300532253025320530253413a00c853005371534153015374536b53413a00c85300536a533a5300530053413a0091530953413a00d15308532d53005300532253025320530253413a00dc53005371534153015374536b53413a00dc5300536a533a5300530053413a0092530953413a00d25308532d53005300532253025341537f537353413a00ed530053715320530253413a0092530153715372533a5300530053413a0093530953413a00d35308532d5300530053413a00aa53015373533a5300530053413a0094530953413a00d45308532d530053005341531b5373533a5300530053413a0095530953413a00d55308532d53005300532253025341537f537353413a00fe530053715320530253413a008153015371537253413a00f753005373533a5300530053413a0096530953413a00d65308532d5300530053413a00a853015373533a5300530053413a0097530953413a00d75308532d5300530053413a008b53015373533a5300530053413a0098530953413a00d85308532d5300530053413a008953015373533a5300530053413a0099530953413a00d95308532d53005300534153295373533a5300530053413a009a530953413a00da5308532d5300530053413a00e853015373533a5300530053413a009b530953413a00db5308532d53005300534153295373533a5300530053413a009c530953413a00dc5308532d5300530053413a00f753015373533a5300530053413a009d530953413a00dd5308532d53005300532253025341537f537353413a00d4530053725320530253413a00ab530153725371533a5300530053413a009e530953413a00de5308532d530053005322530253205302534153015371534153015374536b53413a00ff5300536b533a5300530053413a009f530953413a00df5308532d530053005322530253205302534153225371534153015374536b53413a00de5300536b533a5300530053413a00a0530953413a00e05308532d5300530053413a00ff53005373533a5300530053413a00a1530953413a00e15308532d53005300532253025320530253413a00d853005371534153015374536b53413a00d85300536a533a5300530053413a00a2530953413a00e25308532d53005300534153205373533a5300530053413a00a3530953413a00e35308532d5300530053413a00ba53015373533a5300530053413a00a4530953413a00e45308532d53005300532253025320530253413a00fc53005371534153015374536b53413a00fc5300536a533a5300530053413a00a5530953413a00e55308532d53005300532253025341537f537353413a00f253015371532053025341530d5371537253413a00ef53005373533a5300530053413a00a6530953413a00e65308532d5300530053413a00dc53015373533a5300530053413a00a7530953413a00e75308532d53005300534153305373533a5300530053413a00a8530953413a00e85308532d53005300532253025341537f537353413a00f7530053715320530253413a008853015371537253413a00e753005373533a5300530053413a00a9530953413a00e95308532d5300530053413a00cc53005373533a5300530053413a00aa530953413a00ea5308532d5300530053413a00e953005373533a5300530053413a00ab530953413a00eb5308532d5300530053225302532053025341533f5371534153015374536b53413a00c15300536b533a5300530053413a00ac530953413a00ec5308532d53005300532253025341537f53735341533953715320530253413a00c653015371537253413a00cd53005373533a5300530053413a00ad530953413a00ed5308532d5300530053413a00dc53015373533a5300530053413a00ae530953413a00ee5308532d53005300532253025341537f537353413a00d753015371532053025341532853715372533a5300530053413a00af530953413a00ef5308532d5300530053413a00c453015373533a5300530053413a00b0530953413a00f05308532d53005300534153175373533a530053005320530353285302530853413a00e43a00d03a00b23a00a65304533653025300530c5364530b5320530253413a00903a00b13a00be3a00ba537e5346530d53575320530253413a00fc3a009b3a00af3a00c0537e5346530d532e5320530253413a00f43a00b93a00cc3a00c7537e5347530d53635320530353205303532853023a009853015345533a53003a0097530153413a00bc530e532853025300531a53413a00c0530e532853025300531a5320530353285302530853413a00e53a00ff3a00e23a0088537f533653025300530c5363530b5320530253413a00c03a00a53a00e13a009c537f534c530453405320530253413a00e43a00ff3a00e23a0088537f534c530453405320530253413a00ad3a00bf3a00e33a00cd537e5346530d53305320530253413a00b93a00843a00fe3a0082537f5347530d536453413a00a4530d532853025300531a53413a00a8530d532853025300531a5320530353285302530853413a00a23a00da3a00fd3a00805304533653025300530c5364530b5320530253413a00e53a00ff3a00e23a0088537f5346530d533f5320530253413a00f23a00ab3a009e3a0089537f5346530d53565320530253413a00f03a00cd3a00a73a009c537f5347530d53635320530353285302530853413a00b33a00f83a00943a00e65306533653025300530c5363530b5320530253413a00853a00e43a00d03a00be537f534c530453405320530253413a00c13a00a53a00e13a009c537f5346530d53165320530253413a00ca3a00d63a009e3a00a0537f5346530d53105320530253413a00f33a00993a00ce3a00be537f5347530d53635320530353205303532853023a00d853015341537e5371533653023a00cc53015320530353285302530853413a00f33a00993a00ce3a00be537f53413a00d33a009f3a00813a0088537853413a008c530d53285302530053413a0090530d532853025300536a532253025341537f537353413a00a73a00f13a009e3a0081530453715320530253413a00d83a008e3a00e13a00fe537b5371537253413a009a3a00843a00973a00ac537c534f53413a008c3a00b33a00bb5344536c53413a00973a00f53a00c83a00b45302534b531b533653025300530c5363530b5320530253413a00863a00e43a00d03a00be537f5346530d53135320530253413a00a43a00f43a00d153435346530d53615320530253413a00fa3a00dd3a008a53675347530d53625320530353285302530853413a00de3a00bf3a00ae3a00ab537a533653025300530c5362530b530253405320530253413a009d3a00b43a00973a008e5304534c530453405320530253413a00c83a00843a00893a00e75301534c530453405320530253413a00c63a00843a00c83a008c5301534c530453405320530253413a00d33a00b13a00875334534c530453405320530253413a00d93a00ee3a008f5325534c530453405320530253413a00993a00e23a008c53725346530d53165320530253413a00cf3a00ea3a0091531c5347530d53675320530353285302530853413a00c13a00a53a00e13a009c537f533653025300530c5367530b5320530253413a00da3a00ee3a008f53255346530d533f5320530253413a00e83a00c33a00c8532d5346530d53075320530253413a009a3a00ac3a00bb53335347530d536653413a00fc530d532853025300531a53413a0080530e532853025300531a5320530353285302530853413a00863a00d93a00863a00ec537b533653025300530c5366530b5320530253413a00993a00dd3a00fa3a00ee5300534c530453405320530253413a00d43a00b13a008753345346530d53345320530253413a00f03a00cc3a00a0533f5346530d532d5320530253413a00f43a00803a00b73a00c253005347530d53665320530353285302530853413a00fc3a009b3a00af3a00c0537e533653025300530c5366530b5320530253413a00f83a00ce3a00b93a00fe53005346530d53505320530253413a00a43a00963a00cf3a008753015346530d531a5320530253413a009a3a00dd3a00fa3a00ee53005347530d536553205303532853025310532153005320530353413a00a05302536a5324530053205300530f530b5320530253413a009b3a00bb3a00de3a00c05301534c530453405320530253413a00a03a008d3a00b93a009e5301534c530453405320530253413a00c73a00843a00c83a008c53015346530d535f5320530253413a00d83a00b93a00863a009b53015347530d5366532053035320530353285302532053415301536b53225302533653023a0098530153413a00b0530e5328530253005321530453413a00ac530e5328530253005321530553205303532853023a00fc530153205303532853023a00dc530153205302531053075320530353285302530853413a00e63a009d3a00e13a00bb530653413a00c73a00843a00c83a008c53015320530453205305537153413a00bf3a00b63a00d63a00925306536b5322530253413a00863a00ae3a00b73a00eb530253725320530253413a00863a00ae3a00b73a00eb53025371536c5320530253413a00f93a00d13a00c83a009453055371532053025341537f537353413a00863a00ae3a00b73a00eb53025371536c536a53413a00be3a008f3a00d73a00ff5307537153413a00df3a00b13a00973a009f53055349531b533653025300530c5366530b5320530253413a00a13a008d3a00b93a009e53015346530d534a5320530253413a00813a00fc3a00c63a00a353015346530d53425320530253413a00ea3a00cf3a009b3a00bf53015347530d53655320530353285302530853413a00f23a00ab3a009e3a0089537f53413a008f3a00b43a00973a00a3530753413a009c530d53285302530053413a00a0530d532853025300537253413a008d3a009a3a00d15314536a5322530253413a00eb3a00da3a00dd3a00ad537f5371532053025341537f537353413a00943a00a53a00a23a00d25300537153725341537f537353413a00b03a00ed3a00f03a00825303536a53413a00903a00e13a00c23a00d4537c5349531b533653025300530c5365530b5320530253413a00c33a00873a00c53a00da5301534c530453405320530253413a009c3a00bb3a00de3a00c053015346530d530a5320530253413a00943a00a53a00903a00d253015347530d53655320530353285302530853413a00f43a00b93a00cc3a00c7537e533653025300530c5365530b5320530253413a00c43a00873a00c53a00da53015346530d535a5320530253413a00933a00ae3a00cf3a00e053015346530d53265320530253413a00f93a00b43a00d63a00e153015347530d5364532053035320530353285302535053365302531053413a00a4530f532853025300531a53413a00a8530f532853025300531a5320530353285302530853413a00a33a00e03a00f13a00e35306533653025300530c5364530b5320530253413a00993a00ed3a00ba3a009f5303534c530453405320530253413a009e3a00c93a00e73a00c05302534c530453405320530253413a00fd3a00a43a00a13a00805302534c530453405320530253413a00c93a00843a00893a00e753015346530d53525320530253413a00923a009f3a00f23a00fb53015347530d53665320530353285302530853413a00e43a00d03a00b23a00a6530453413a00a73a00d33a00cc3a00b1537e53413a00a4530b53285302530053413a00a8530b532853025300536a5322530453413a00b53a00f83a00f93a00dc530753735322530253413a00ff3a00883a00c53a008b537953725320530253413a00ff3a00883a00c53a008b53795371536c5320530453413a00ca3a00803a00843a00835378537353413a00ff3a00883a00c53a008b537953715320530253413a00803a00f73a00ba3a00f453065371536c536a53413a00973a00ec3a00e2531e5347531b533653025300530c5366530b5320530253413a00fe3a00a43a00a13a008053025346530d53285320530253413a00913a00eb3a00a03a009353025346530d53035320530253413a00e33a00f73a00873a00ad53025347530d53655320530353205303532853023a00e8530153205303532853023a00805302536a533653023a00e053015320530353285302530853413a00f23a00ea3a00d93a00e25378533653025300530c5365530b5320530253413a00f63a00933a00e73a00de5302534c530453405320530253413a009f3a00c93a00e73a00c053025346530d530d5320530253413a00e63a00c03a00aa3a00c753025347530d53655320530353285302530853413a00e93a008f3a00c63a00e35303533653025300530c5365530b5320530253413a00f73a00933a00e73a00de53025346530d530a5320530253413a00b33a00973a00a13a008853035346530d532d5320530253413a00d43a00af3a00c23a009d53035347530d53645320530353285302530853413a00d43a00b13a0087533453413a00fc3a00d73a00c83a00b5537b53205303532d53003a009f5301531b5336530253005320530353205303532853023a00a853015322530253365302537c5320530353205303532853023a00a45301532253045336530253785320530353205302533653025374532053035320530453365302536c53205303532053025336530253685320530353205303532853023a00a05301533653025364530c5364530b5320530253413a00cb3a00d53a00bb3a00e35303534c530453405320530253413a00893a00d33a009d3a00bb5303534c530453405320530253413a009a3a00ed3a00ba3a009f53035346530d53555320530253413a00f93a00a43a00f23a00b753035347530d53655320530353285302530853413a00aa3a00f33a00d73a00ec537d53413a00953a009d3a00e73a0090530453205303532d53003a00bf5301531b5336530253005320530353205303532853025334533653025370530c5365530b5320530253413a008a3a00d33a009d3a00bb53035346530d53065320530253413a00af3a00833a00863a00bc53035346530d53335320530253413a00e13a00823a00f33a00d253035347530d536453205303532053005320530353285302534c536a532d530053005345533a53003a00fa53015320530353285302530853413a00eb3a00e03a00963a00d0530653413a009a3a00ea3a00a73a00d8537853413a00ac530c53285302530053413a00b0530c5328530253005341537f5373536a53413a00803a00eb3a00e33a00aa5379536c53413a00bd3a00d53a009c3a00f65307536a53413a00ec3a00e83a00c53a00c05379534b531b533653025300530c5364530b5320530253413a00a73a00a03a00f43a00ed5303534c530453405320530253413a00cc3a00d53a00bb3a00e353035346530d53295320530253413a00e93a008f3a00c63a00e353035347530d53645320530353285302530853413a00db3a008c3a00c13a0085537953413a00fe3a00ff3a008a3a00da530553205303532d53003a00f35301531b5336530253005320530353205301533653023a008853015320530353205303532853023a00f45301533653023a008c5301530c5364530b5320530253413a00a83a00a03a00f43a00ed53035346530d533b5320530253413a00a23a00da3a00fd3a008053045346530d53295320530253413a00d13a00c93a00a43a008b53045347530d536353413a00c4530d532853025300531a53413a00c8530d532853025300531a5320530353285302530853413a00fc3a009b3a00af3a00c0537e533653025300530c5363530b5320530253413a00923a00853a00eb3a00c05306534c530453405320530253413a00c23a00fd3a00cc3a00b35305534c530453405320530253413a00ae3a00c33a008c3a00b55304534c530453405320530253413a00b63a00cb3a00c63a009f5304534c530453405320530253413a009e3a00b43a00973a008e53045346530d53475320530253413a00953a009d3a00e73a009053045347530d53665320530353285302530853413a00af3a00c33a008c3a00b5530453413a00c43a00873a00c53a00da530153413a00e4530d5328530253005341537f537353413a00e8530d5328530253005341537f537353715341537f5373532253025320530253413a00d93a009c3a00ca3a00e253005371534153015374536b53413a00d93a009c3a00ca3a00e25300536a53413a00853a00803a00c93a00d75304537253413a00973a00c43a00cb3a00f7537d537153413a00c23a00ae3a00bb3a00d6537e5349531b533653025300530c5366530b5320530253413a00b73a00cb3a00c63a009f53045346530d53325320530253413a00e43a00d03a00b23a00a653045346530d53095320530253413a00a13a00ee3a00873a00a953045347530d53655320530353285302530853413a00cd3a00e23a00db3a00d8537853413a00a33a00ab3a00ea3a00bf537853413a0084530b53285302530053413a0088530b532853025300537353413a00ef3a008c3a00fb3a00c85300536a532253025341537f537353413a00cd3a00b73a00e53a00b3530253715320530253413a00b23a00c83a009a3a00cc537d5371537253413a00873a00fb3a00c53a00c55306536b53413a00ae3a00c93a00d53a008b5301534b531b533653025300530c5365530b5320530253413a00ba3a00fd3a00e53a00e65304534c530453405320530253413a00af3a00c33a008c3a00b553045346530d53355320530253413a00e23a00b83a009e3a00ca53045347530d53655320530353285302534053205303532853023a00e85301536a53415301536b53205303532853023a008c530253205303532853025330536a532d53005300533a530053005320530353285302530853413a008b3a00923a00813a0087537b533653025300530c5365530b5320530253413a00bb3a00fd3a00e53a00e653045346530d53215320530253413a00fc3a00983a008e3a00ff53045346530d53435320530253413a00c53a00f33a00ab3a00a953055347530d53645320530353285302530853413a00843a00d43a00b83a00ea537953413a00fd3a00e33a00b13a00af537b53205303532d53003a00fb5301531b5336530253005320530353415300533653025354530c5364530b5320530253413a009d3a00fd3a00cb3a00965306534c530453405320530253413a00e03a00f63a00e43a00c55305534c530453405320530253413a00c33a00fd3a00cc3a00b353055346530d533f5320530253413a00b53a00cd3a00b83a00be53055347530d53655320530353285302530853413a00b13a00b33a00f43a00b2530653413a00c23a008c3a009a3a00e7537b53205303532d53003a00cb5301531b5336530253005320530353205303532853023a00ac530153365302535c530c5365530b5320530253413a00e13a00f63a00e43a00c553055346530d53615320530253413a00b63a00df3a00e13a00d153055346530d530f5320530253413a00fe3a00ff3a008a3a00da53055347530d53645320530353205303532853023a008c530153365302534c5320530353285302530853413a00e13a00823a00f33a00d2530353413a00eb3a00e03a00963a00d0530653413a00a4530c53285302530053413a00a8530c532853025300536e53413a00d83a00bb3a00c33a009a5306536b53413a00f03a00843a00883a008d5307537353413a00863a00b93a00e73a00d05378537253413a00c63a00bb3a00a13a00ca537b534b531b533653025300530c5364530b5320530253413a00d83a00dc3a00f73a00a65306534c530453405320530253413a009e3a00fd3a00cb3a009653065346530d53605320530253413a00e53a00fe3a00eb3a00a353065347530d53645320530353285302530853413a00843a00e93a008b3a00b6537c53413a00fa3a00eb3a00c13a00c9530653413a00b4530c53285302530053413a00b8530c532853025300536c53413a00ca3a00803a00de3a00b05306536a53413a009f3a00d33a00b73a00a15305537253413a00a33a00cd3a00e73a00fe53005349531b533653025300530c5364530b5320530253413a00d93a00dc3a00f73a00a653065346530d53545320530253413a00b13a00b33a00f43a00b253065346530d53455320530253413a00e63a009d3a00e13a00bb53065347530d53635320530353285302530853413a00c13a00b23a00ec3a00aa537c533653025300530c5363530b5320530253413a00c83a00bd3a00b83a00fa5306534c530453405320530253413a00b03a00fd3a00933a00d95306534c530453405320530253413a00f93a00eb3a00c13a00c95306534c530453405320530253413a00933a00853a00eb3a00c053065346530d535d5320530253413a009c3a00fa3a00b73a00c553065347530d53655320530353285302530853413a00d03a00b73a00cb3a00c9530753413a009c3a008d3a00b03a00bc537c53205303532853023a009c530253413a00aa3a00893a00f03a00db5301534b531b533653025300530c5365530b5320530253413a00fa3a00eb3a00c13a00c953065346530d531d5320530253413a00eb3a00e03a00963a00d053065346530d53525320530253413a00a63a00a13a00dd3a00d553065347530d53645320530353285302530853413a00ff3a00843a00933a0096537b53413a00e53a00ad3a00f13a00f4537853413a00d4530e5328530253005322530253413a00d8530e53285302530053225304537253205302532053045371536c53205302532053045341537f53735322530453725341537f537353205302532053045371536c536a5322530253413a00e83a00e43a00ee3a00e6530653725320530253413a00e83a00e43a00ee3a00e653065371536c5320530253413a00973a009b3a00913a009953795371532053025341537f537353413a00e83a00e43a00ee3a00e653065371536c536a5322530253413a00f23a00ce3a00d53a00e0530553725320530253413a00f03a00ce3a00d53a00e053055371536c5320530253413a00883a00b13a00aa3a009f537a5371532053025341537f537353413a00f23a00ce3a00d53a00e053055371536c536a5322530253413a00d03a00f23a00ef3a00ec530153725320530253413a00a83a008d3a00903a0093537e5373537153413a00a43a00e53a00e85317534b531b533653025300530c5364530b5320530253413a00b23a00f83a00943a00e65306534c530453405320530253413a00b13a00fd3a00933a00d953065346530d53515320530253413a00a33a00e03a00f13a00e353065347530d53645320530353285302530853413a009a3a00dd3a00fa3a00ee530053413a00a33a00e03a00f13a00e3530653413a00ac530f5328530253005322530253413a00b0530f532853025300532253045341537f5373537153415301537453205302532053045373536b53413a00b53a00b73a00df5341537253413a00843a00f53a00ec3a00fe5306536a53413a00cc3a00f43a009a3a009a53785349531b533653025300530c5364530b5320530253413a00b33a00f83a00943a00e653065346530d531d5320530253413a00ef3a00fb3a00c33a00eb53065346530d535a5320530253413a00f33a00c63a008d3a00f553065347530d536353205303532853023a00fc530153205303532853025324536a5322530253205302532d53005300532053035328530253285341530853745372532253045341533a536e53225302533a5300530053205303532853023a00fc53015320530353285302532453225305532053055341537f53735341537e5372536a536a5322530553205305532d5300530253205304532053025341533a5371532053025341533a5372536c532053025341537f53735341533a53715320530253413a00c53a00ff3a00ff53075371536c536a536b53415308537453725341533a536e533a530053025320530353285302530853413a00da3a00ee3a008f5325533653025300530c5363530b5320530253413a00cf3a00973a00ca3a00ba5307534c530453405320530253413a00c63a00bd3a00ef3a00a05307534c530453405320530253413a00c93a00bd3a00b83a00fa53065346530d534a5320530253413a00803a00d33a00ce3a00a053075347530d53645320530353285302530853413a00b33a00973a00a13a00885303533653025300530c5364530b5320530253413a00c73a00bd3a00ef3a00a053075346530d53275320530253413a00b13a00ad3a00b33a00a153075346530d532b5320530253413a008f3a00b43a00973a00a353075347530d53635320530353285302530853413a00fc3a00d73a00c83a00b5537b5336530253005320530353415300533653025368532053035341530053365302536c5320530353415300533653025364530c5363530b53025340530253405320530253413a00d53a00fb3a00e63a00f65307534c530453405320530253413a00d03a00973a00ca3a00ba53075346530d53025320530253413a00d03a00b73a00cb3a00c953075346530d53015320530253413a00c13a00b93a00ef3a00d753075347530d53655320530353285302530853413a00f83a00e83a00903a00dd5379533653025300530c5365530b5320530253413a00d63a00fb3a00e63a00f653075346530d531a5320530253413a00bb3a00c53a008f3a00f853075346530d53245320530253413a00a33a008f3a00a03a00fc53075347530d53645320530353285302530853413a00b93a00843a00fe3a0082537f53413a00c33a00fd3a00cc3a00b3530553205303532d53003a00975301531b5336530253005320530353205303532853023a00985301533653025360530c5364530b5320530353413a00805312532853025300533653023a009853025320530353285302530853413a00d03a00b73a00cb3a00c9530753413a00d03a00973a00ca3a00ba530753413a00fc530a532853025300532253025341537f537353413a0080530b532853025300532253045341537f53735372532053025320530453715341537f537353715341537f537353413a00f13a00d93a00bf3a00e15305536a5322530253413a008a3a00a13a009b3a0083530253725320530253413a00f53a00de3a00e43a00fc537d53735371532253025341537f537353413a00e13a00a33a00893a00f4530253715320530253413a009e3a00dc3a00f63a008b537d5371537253413a00c73a00bf3a00ec3a009f537b53735320530253413a00a63a009c3a00e53a00eb53795371537253413a00bd3a00ee3a00f453055346531b533653025300530c5363530b5320530353285302530853413a00913a00eb3a00a03a00935302533653025300530c5362530b5320530353205303532853023a009853025345533a53003a009753025320530353285302530853413a00a13a00ee3a00873a00a95304533653025300530c5361530b53413a0090530b532853025300531a53413a008c530b532853025300531a5320530353285302530853413a00ae3a00b03a00da3a00e5537a533653025300530c5360530b5320530353285302530853413a00e83a00c33a00c8532d53413a00863a00fa3a00f33a008a537e53205303532d53003a00975302531b533653025300530c535f530b5320530353285302530853413a008a3a00d33a009d3a00bb530353413a00f83a00ce3a00b93a00fe530053413a0094530b53285302530053413a0098530b532853025300537153413a00c83a00f13a00fc3a00be5305537153413a00ce3a00cb3a00f53a00dd537c536c53413a00f53a00c93a008e533e536b53413a00c33a00a63a00aa3a009e537d5349531b533653025300530c535e530b53413a00a0530a53413a0080530a532d5300530053413a00e653015373533a5300530053413a00a1530a53413a0081530a532d5300530053413a00de53015373533a5300530053413a00a2530a53413a0082530a532d5300530053413a009053015373533a5300530053413a00a3530a53413a0083530a532d5300530053413a00b753015373533a5300530053413a00a5530a53413a0085530a532d5300530053413a008953015373533a5300530053413a00a4530a53413a0084530a532d53005300532253025341537f537353413a00c053015371532053025341533f5371537253413a009b53015373533a5300530053413a00a6530a53413a0086530a532d53005300532253025341531b5371532053025341537f537353413a00e45301537153725341537f5373533a5300530053413a00a7530a53413a0087530a532d5300530053225302534153275372532053025341537f537353413a00d85301537253715341537f5373533a5300530053413a00a0530b5328530253005321530453413a009c530b5328530253005321530253413a00ab530a53413a008b530a532d5300530053413a00bf53015373533a5300530053413a00ad530a53413a008d530a532d5300530053413a00cb53005373533a5300530053413a00a8530a53413a0088530a532d530053005322530553205305534153155371534153015374536b53413a00eb5300536b533a5300530053413a00a9530a53413a0089530a532d53005300532253055320530553413a00f453005371534153015374536b53413a00f45300536a533a5300530053413a00aa530a53413a008a530a532d53005300532253055320530553413a00ed53005371534153015374536b53415313536b533a5300530053413a00ac530a53413a008c530a532d53005300532253055341537f53735341531053715320530553413a00ef5301537153725341531e5373533a530053005320530353413a008e530a532d5300530053413a00ad53015373533a53003a009653025320530353285302530853413a00f83a00ce3a00b93a00fe530053413a00bb3a00de3a00db3a0084537853205302532053025320530453735341537f5373537153413a00a73a009e3a00a53a00af5306536a53413a008c3a00f83a00ef3a00ab5301536e53413a00da3a00ac3a00f83a00e15307536b53413a00873a00ba3a009c533c5349531b533653025300530c535d530b5320530353285302530853413a00923a009f3a00f23a00fb5301533653025300530c535c530b53413a00ae530a53205303532d53003a00965302533a5300530053413a00b0530a53413a0090530a532d5300530053413a00ba53015373533a5300530053413a00e1530953413a00c15309532d53005300534153085373533a5300530053413a00e2530953413a00c25309532d5300530053413a00e453015373533a5300530053413a00e4530953413a00c45309532d530053005341530f5373533a5300530053413a00af530a53413a008f530a532d530053005322530253413a00db53005372532053025341537f537353413a00a45301537253715341537f5373533a5300530053413a00e0530953413a00c05309532d530053005322530253205302534153285371534153015374536b53413a00d85300536b533a5300530053413a00e3530953413a00c35309532d53005300532253025320530253413a00f253005371534153015374536b5341530e536b533a5300530053413a00b0530b532853025300531a53413a00ac530b532853025300531a53413a00e7530953413a00c75309532d5300530053413a00ea53005373533a5300530053413a00e8530953413a00c85309532d5300530053413a00eb53015373533a5300530053413a00ea530953413a00ca5309532d5300530053413a00de53015373533a5300530053413a00ed530953413a00cd5309532d5300530053413a00c053005373533a5300530053413a00e9530953413a00c95309532d53005300532253025341537f537353413a00eb53015371532053025341531453715372533a5300530053413a00eb530953413a00cb5309532d53005300532253025341537f53735341530d53715320530253413a00f2530153715372533a5300530053413a00e5530953413a00c55309532d530053005322530253205302534153305371534153015374536b53415330536a533a5300530053413a00e6530953413a00c65309532d53005300532253025320530253413a00c253005371534153015374536b5341533e536b533a5300530053413a00ec530953413a00cc5309532d5300530053225302532053025341531e5371534153015374536b5341531e536a533a5300530053413a00ee530953413a00ce5309532d53005300534153135373533a5300530053413a00ef530953413a00cf5309532d5300530053413a009c53015373533a5300530053413a00f0530953413a00d05309532d530053005322530253413a00c453015372532053025341537f53735341533b537253715341537f5373533a5300530053413a00e0530a53413a00c0530a532d530053005322530253413a009653015371532053025341537f537353413a00e95300537153725341537f5373533a5300530053413a00e1530a53413a00c1530a532d53005300532253025341537f537353413a0099530153715320530253413a00e653005371537253413a00e053015373533a5300530053413a00e2530a53413a00c2530a532d53005300534153095373533a5300530053413a00e3530a53413a00c3530a532d530053005322530253413a00b353015371532053025341537f537353413a00cc5300537153725341537f5373533a5300530053413a00e4530a53413a00c4530a532d53005300534153235373533a5300530053413a00e5530a53413a00c5530a532d5300530053413a008f53015373533a5300530053413a00e6530a53413a00c6530a532d53005300532253025341537f537353413a00ba530153725320530253413a00c5530053725371533a5300530053413a00e7530a53413a00c7530a532d5300530053413a00a253015373533a5300530053413a00e8530a53413a00c8530a532d5300530053413a00c353015373533a5300530053413a00e9530a53413a00c9530a532d53005300532253025341537f537353413a00ee5301537153205302534153115371537253413a00e053005373533a5300530053413a00ea530a53413a00ca530a532d5300530053413a00d353005373533a5300530053413a00eb530a53413a00cb530a532d53005300532253025341537f537353413a008f530153715320530253413a00f0530053715372533a5300530053413a00ec530a53413a00cc530a532d53005300532253025341537f537353413a00ee530053715320530253413a009153015371537253413a00dd53015373533a5300530053413a00ed530a53413a00cd530a532d5300530053413a00cd53015373533a5300530053413a00ee530a53413a00ce530a532d53005300532253025320530253413a00c453005371534153015374536b5341533c536b533a5300530053413a00ef530a53413a00cf530a532d53005300532253025341537f537353413a00c953015372532053025341533653725371533a5300530053413a00f0530a53413a00d0530a532d53005300534153295373533a5300530053413a0080530953413a00c05308532d530053005322530253413a00af53015371532053025341537f537353413a00d05300537153725341537f5373533a5300530053413a0081530953413a00c15308532d5300530053413a00e653005373533a5300530053413a0082530953413a00c25308532d530053005322530253413a00c153015372532053025341537f53735341533e537253715341537f5373533a5300530053413a0083530953413a00c35308532d530053005322530253413a00c053005372532053025341537f537353413a00bf5301537253715341537f5373533a5300530053413a0084530953413a00c45308532d5300530053225302532053025341531c5371534153015374536b5341531c536a533a5300530053413a0085530953413a00c55308532d5300530053413a00bf53015373533a5300530053413a0086530953413a00c65308532d5300530053225302532053025341532f5371534153015374536b53413a00d15300536b533a5300530053413a0087530953413a00c75308532d530053005322530253413a00ea53015372532053025341537f537353415315537253715341537f5373533a5300530053413a0088530953413a00c85308532d53005300532253025341537f537353413a00b2530153715320530253413a00cd530053715372533a5300530053413a0089530953413a00c95308532d530053005341533d5373533a5300530053413a008a530953413a00ca5308532d5300530053413a00c953005373533a5300530053413a008b530953413a00cb5308532d5300530053413a00bb53015373533a5300530053413a008c530953413a00cc5308532d53005300534153325373533a5300530053413a008d530953413a00cd5308532d530053005322530253205302534153205371534153015374536b53415320536a533a5300530053413a008e530953413a00ce5308532d5300530053225302532053025341532c5371534153015374536b5341532c536a533a5300530053413a008f530953413a00cf5308532d530053005322530253413a008553015371532053025341537f537353413a00fa5300537153725341537f5373533a5300530053413a0090530953413a00d05308532d53005300532253025341537f537353413a0081530153715320530253413a00fe53005371537253413a00c953015373533a5300530053413a0091530953413a00d15308532d5300530053413a00dc53005373533a5300530053413a0092530953413a00d25308532d5300530053413a00ed53005373533a5300530053413a0093530953413a00d35308532d5300530053413a00aa53015373533a5300530053413a0094530953413a00d45308532d53005300532253025341537f53735341531b53715320530253413a00e4530153715372533a5300530053413a0095530953413a00d55308532d53005300534153095373533a5300530053413a0096530953413a00d65308532d5300530053413a00a853015373533a5300530053413a0097530953413a00d75308532d530053005322530253413a008b53015371532053025341537f537353413a00f45300537153725341537f5373533a5300530053413a0098530953413a00d85308532d530053005322530253205302534153095371534153015374536b53413a00f75300536b533a5300530053413a0099530953413a00d95308532d53005300532253025341537f53735341532953715320530253413a00d6530153715372533a5300530053413a009a530953413a00da5308532d5300530053413a00e853015373533a5300530053413a009b530953413a00db5308532d53005300534153295373533a5300530053413a009c530953413a00dc5308532d5300530053413a00f753015373533a5300530053413a009d530953413a00dd5308532d5300530053413a00ab53015373533a5300530053413a009e530953413a00de5308532d5300530053413a008153015373533a5300530053413a009f530953413a00df5308532d5300530053413a00a253015373533a5300530053413a00a0530953413a00e05308532d53005300532253025341537f537353413a0090530153715320530253413a00ef53005371537253413a00ef53015373533a5300530053413a00a1530953413a00e15308532d5300530053413a00d853005373533a5300530053413a00a2530953413a00e25308532d530053005322530253205302534153205371534153015374536b53415320536a533a5300530053413a00a3530953413a00e35308532d5300530053413a00ba53015373533a5300530053413a00a4530953413a00e45308532d53005300532253025341537f537353413a00fc530053715320530253413a0083530153715372533a5300530053413a00a5530953413a00e55308532d5300530053413a009d53015373533a5300530053413a00a6530953413a00e65308532d53005300532253025320530253413a00dc53005371534153015374536b53415324536b533a5300530053413a00a7530953413a00e75308532d53005300534153305373533a5300530053413a00a8530953413a00e85308532d5300530053225302534153105371532053025341537f537353413a00ef5301537153725341537f5373533a5300530053413a00a9530953413a00e95308532d5300530053413a00cc53005373533a5300530053413a00aa530953413a00ea5308532d5300530053413a00e953005373533a5300530053413a00ab530953413a00eb5308532d5300530053413a00bf53015373533a5300530053413a00ac530953413a00ec5308532d53005300532253025341537f537353413a00f4530053715320530253413a008b530153715372533a5300530053413a00ad530953413a00ed5308532d5300530053413a00dc53015373533a5300530053413a00ae530953413a00ee5308532d53005300532253025320530253413a00d753005371534153015374536b53415329536b533a5300530053413a00af530953413a00ef5308532d53005300532253025320530253413a00c453005371534153015374536b5341533c536b533a5300530053413a00b0530953413a00f05308532d53005300534153175373533a530053005320530353413a00f15308532d53005300533a53003a009553025320530353285302530853413a009c3a00bb3a00de3a00c05301533653025300530c535b530b5320530353285302530853413a00f73a00933a00e73a00de5302533653025300530c535a530b53413a00b1530953205303532d53003a0095530253413a009a53015373533a5300530053413a00b2530953413a00f25308532d5300530053413a00dc53005373533a5300530053413a00b5530953413a00f55308532d5300530053413a00e953015373533a5300530053413a00b8530953413a00f85308532d53005300532253025341537f537353413a00f253015371532053025341530d53715372533a5300530053413a00b3530953413a00f35308532d53005300532253025320530253413a00e053005371534153015374536b53415320536b533a5300530053413a00b4530953413a00f45308532d53005300532253025320530253413a00e953005371534153015374536b53413a00e95300536a533a5300530053413a00b6530953413a00f65308532d53005300532253025341537f537353413a0093530153715320530253413a00ec53005371537253413a00d953005373533a5300530053413a00b7530953413a00f75308532d5300530053225302534153365372532053025341537f537353413a00c95301537253715341537f5373533a5300530053413a00b9530953413a00f95308532d53005300532253025341537f537353413a00da5301537153205302534153255371537253413a00db53005373533a5300530053413a00ba530953413a00fa5308532d5300530053413a00a553015373533a5300530053413a00bb530953413a00fb5308532d5300530053413a009a53015373533a5300530053413a00bc530953413a00fc5308532d5300530053413a00e453015373533a5300530053413a00bd530953413a00fd5308532d5300530053413a00e453005373533a5300530053413a00a1530853413a00815308532d5300530053413a00c553005373533a5300530053413a00a0530853413a00805308532d53005300532253025341537f537353413a00ac530153725320530253413a00d3530053725371533a5300530053413a00a3530853413a00835308532d53005300532253025341537f537353413a00b5530153725320530253413a00ca530053725371533a5300530053413a00be530953413a00fe5308532d530053005322530253413a00a853015372532053025341537f537353413a00d75300537253715341537f5373533a5300530053413a00bf530953413a00ff5308532d530053005322530253205302534153335371534153015374536b53413a00cd5300536b533a5300530053413a00a2530853413a00825308532d53005300532253025341537f537353413a00cc530053715320530253413a00b353015371537253413a00bd53015373533a5300530053413a00a4530853413a00845308532d53005300532253025320530253413a00c153005371534153015374536b53413a00c15300536a533a5300530053413a00a5530853413a00855308532d5300530053413a00ea53015373533a5300530053413a00a6530853413a00865308532d5300530053413a00f453015373533a5300530053413a00a7530853413a00875308532d5300530053413a00d353005373533a5300530053413a00a8530853413a00885308532d53005300534153025373533a5300530053413a00a9530853413a00895308532d5300530053413a00e153005373533a5300530053413a00aa530853413a008a5308532d530053005322530253205302534153315371534153015374536b53413a00cf5300536b533a5300530053413a00ab530853413a008b5308532d5300530053413a00dd53005373533a5300530053413a00ac530853413a008c5308532d530053005322530253413a00fb53005371532053025341537f537353413a00845301537153725341537f5373533a5300530053413a00ad530853413a008d5308532d53005300532253025341532d5372532053025341537f537353413a00d25301537253715341537f5373533a5300530053413a00ae530853413a008e5308532d530053005322530253413a00fb53015372532053025341537f537353415304537253715341537f5373533a5300530053413a00af530853413a008f5308532d5300530053413a00db53015373533a5300530053413a00b0530853413a00905308532d530053005341531b5373533a530053005320530353285302530853413a00863a00fa3a00f33a008a537e533653025300530c5359530b53413a00805312534153015336530253005320530653415330536b53225306532453005320530353205306533653023a009053025320530653415340536a532253065324530053205303532053005345533a53003a008b53025320530353205306533653023a008c530253205303532053015345533a53003a008a53025320530353285302530853413a009f3a00c93a00e73a00c05302533653025300530c5358530b5320530353285302530853413a00d73a00ca3a00e83a0080537e53413a00a83a00953a00aa3a009e537d53413a00b4530b53285302530053413a00b8530b532853025300537253413a00cf3a00dd3a008c3a00d1537a534f532253025320530253413a00b33a00953a00923a00a0537c5373536a5322530253413a00983a00a43a00ed3a00b15301537253413a00903a00843a00805320536c5320530253413a00a73a00913a00923a0080537c537153413a00883a00a03a00ed3a00915301536c536a53413a00b83a009a3a00c13a00d95378534b531b533653025300530c5357530b5320530353205303532d53003a008b5302532253025341537f537353205303532d53003a008a5302532253045341537f53735371532053025320530453725341537f537353725341537f5373534153015371533a53003a008953025320530353285302530853413a00f53a00d53a00aa3a0085537953413a00a83a00953a00aa3a009e537d53413a00bc530b53285302530053413a00c0530b532853025300536e53413a00b93a00aa3a00c23a0090537b534f53413a008f3a00873a009e3a00985302536b532253025341537f537353413a00873a00803a00985310537153413a00803a00b03a00e05300537253413a00cd3a00803a00943a00a8537853735320530253413a00b23a00c83a00813a00c753055371537253413a00d83a00a23a00de3a00a0537f5349531b533653025300530c5356530b5320530353285302530853413a00b63a00df3a00e13a00d15305533653025300530c5355530b5320530353285302530853413a00d03a00e23a00e53a00c2537853413a00ea3a00e43a00ac3a00ba537853413a00c4530b53285302530053413a00c8530b532853025300537253413a00a23a00e03a00f63a00cf5303537253413a00f93a00993a00e73a00d05305536b53413a00c83a00933a009e3a0099537f537153413a00b83a009e3a00bc3a00bf53785346531b533653025300530c5354530b53413a00dc530b532853025300531a53413a00e0530b532853025300531a5320530353285302530853413a00d33a00953a009f3a008a537b533653025300530c5353530b5320530353285302530853413a00c93a00843a00893a00e7530153413a00b83a00833a00c53a00c1537d53413a00e4530b53285302530053413a00e8530b532853025300536b5322530253413a00c33a00f53a00933a00f353795372532053025341537f537353413a00bc3a008a3a00ec3a008c530653725371532253045341537f53735322530253413a00df3a00a63a008d3a008f530653725320530253413a00df3a00a63a008d3a008f53065371536c5320530253413a00a03a00d93a00f23a00f0537953715320530453413a00df3a00a63a008d3a008f53065371536c536a53413a00f53a00e43a00e53a00e4537c537353413a00e83a00fe3a00ba3a00f153075349531b533653025300530c5352530b5320530353285302530853413a00993a00e23a008c5372533653025300530c5351530b53205303532853023a0090530253225302534253005337530353005320530253415300533b5301532053205302534253005337530353185320530253425300533753035310532053025342530053375303530853205303532853023a0090530253413a00e0530a534153035310530a53205303532853023a0090530253413a00a0530a534153075310530a53205303532853023a0090530253413a00e05309534153075310530a53205303532853023a0090530253205303532853023a0090530253105309536a5322530253413a00a053085329530353005337530053005320530253413a00b05308532d53005300533a530053105320530253413a00a853085329530353005337530053085320530353205303532853023a0090530253105309533653023a008453025320530353285302530853413a008d3a00ae3a009f3a0085537c5336530253005320530353415300533653023a00905301530c5350530b532053035320530153415301537453225302533653023a00805302530253405302537f53415300532053025345530d5300531a532053023a00ad532253093a00a7532253045320530253415301537253413a00803a008053045349530d5300531a5341537f5320530453205309534253203a00883a00a7531b530b532253045310530c532253025345530d53005320530253415304536b532d530053005341530353715345530d530053205302534153005320530453105308530b5320530353205302533653023a00fc53015320530353285302530853413a00863a00e43a00d03a00be537f533653025300530c534f530b53413a00f4530b532853025300531a53413a00f8530b532853025300531a5320530353285302530853413a00943a00813a00a43a008f5378533653025300530c534e530b5320530353205303532853023a00fc53015345533a53003a00fb53015320530353285302530853413a00943a00813a00a43a008f537853413a00ef3a00ab3a00d83a008e537e53413a00fc530b5328530253005322530253413a0080530c532853025300532253045371532053025320530453725341537f537353725341537f537353413a00fb3a00f23a00ec3a00cd5306536c532253025320530253413a008c3a00963a00c33a00e053015373536a5320530253413a00f33a00e93a00bc3a009f537e5371536b53413a00833a00ca3a00f63a00fb5379537153413a00fb3a00e03a00f53a00f8537b534b531b533653025300530c534d530b53413a0084530c532853025300531a53413a0088530c532853025300531a5320530353285302530853413a00c53a00f33a00ab3a00a95305533653025300530c534c530b5320530353285302530853413a00f83a00bb3a00e43a00af537d53413a00b13a00fd3a00933a00d9530653413a008c530c53285302530053413a0090530c532853025300536a532253025341537f537353413a00d93a00b33a00ae531353715320530253413a00a63a00cc3a00d1536c537153725322530253413a00893a009f3a00ff3a00da53795371532053025341537f537353413a00f63a00e93a00913a00a553065372536a53413a00a23a00c43a008a3a00ab537a5347531b533653025300530c534b530b5320530353285302530853413a00d63a00fb3a00e63a00f65307533653025300530c534a530b5320530353285302530853413a00fa3a00dd3a008a536753413a00de3a00bf3a00ae3a00ab537a53413a009c530c53285302530053413a00a0530c532853025300536e53413a00fe3a00c43a00823a008b5303537253413a00863a00933a00f03a00dd5306536b53413a00f93a00d63a00c13a00da5378537153413a00f73a00f23a00e43a00a3537b534b531b533653025300530c5349530b5320530353285302530853413a00a13a009e3a00943a008a537d533653025300530c5348530b5320530353285302530853413a00fe3a00ff3a008a3a00da53055336530253005320530353415300533653023a008c5301530c5347530b532053035320530353285302534c53415301536a533653023a00f453015320530353285302530853413a00fa3a00eb3a00c13a00c9530653413a00f03a00cd3a00a73a009c537f53413a00bc530c53285302530053413a00c0530c532853025300537353413a00e93a00f03a0098536e536c53413a009f3a00ce3a00e13a00a7537f534f53413a00ab3a00903a00e23a00e35378537353413a009b3a00c93a00f73a00e153065349531b533653025300530c5346530b5320530353285302530853413a00a43a009e3a008a3a00ee537c53413a00ec3a00c93a00ab3a0098537e53413a00c4530c5328530253005322530253413a00c8530c53285302530053225304537153205302532053045372536a53413a00853a00de3a00af3a009d5303536a53413a00a93a00c13a00fc3a0081537d534f53413a009c3a00d53a009f3a00ba537d537253413a00f43a00823a00da3a009e537b534b531b533653025300530c5345530b5320530353205303532853023a00f45301532053015346533a53003a00f353015320530353285302530853413a00e63a00c03a00aa3a00c7530253413a00ec3a00c93a00ab3a0098537e53413a00cc530c53285302530053413a00d0530c532853025300537253413a009c3a00a13a00915334537353413a00e23a00d43a00ee3a00cb5307537253413a00883a00e13a00993a008653045347531b533653025300530c5344530b5320530353205303532853023a008853015336530253485320530353285302530853413a009a3a00ed3a00ba3a009f530353413a00bb3a00fd3a00e53a00e6530453413a00d4530c53285302530053413a00d8530c532853025300536e53413a009c3a00eb3a00c23a00c85306536c5341537f537353413a00d33a00933a00fa3a00ab537d537153413a009e3a00f13a00893a00e65301537353413a00a03a00cb3a00dd3a00cf53795349531b533653025300530c5343530b5320530353205303532853023a0080530253415301537253225305533653023a00ec530153413a00e0530c5328530253005321530253413a00dc530c5328530253005321530453205303532053055310530c53225305533653023a00e8530153205303532053055345533a53003a00e753015320530353285302530853413a00a03a00de3a00853a00c9537853413a00bb3a00fd3a00e53a00e6530453205304532053025341537f5373537153205302532053045341537f53735371536b53413a00c03a00f73a00bd3a00dd5302537253413a00ab3a00923a00883a00f35305536a53413a00d73a00f83a009f3a00c8537a5349531b533653025300530c5342530b5320530353285302530853413a00a13a008d3a00b93a009e530153413a00e33a00f73a00873a00ad530253205303532d53003a00e75301531b5336530253005320530353415300533653025358530c5341530b53205303532853023a00e0530153415300533a530053005320530353285302530853413a00bb3a00c53a008f3a00f85307533653025300530c5340530b5320530353285302530853413a00913a00f63a00ff3a00f1537c53413a00803a00ca3a00803a00cc537953413a00e4530c5328530253005322530253413a00e8530c53285302530053225304536a53205302532053045371534153015374536b5322530253413a00a93a00a33a00c1535953735320530253413a00a83a00a13a00c03a00d05303537353413a00ae3a00f53a00f83a00d653035371534153015374536b53413a00ae3a00f53a00f83a00d65303536a5322530253413a008d3a00fa3a00803a00e0530453735320530253413a008d3a00fa3a00803a00e053045371534153015374536a53413a00923a00e93a00a93a00a15379534b531b533653025300530c533f530b5320530353285302530853413a00933a00ae3a00cf3a00e053015336530253005320530353205301533653023a008053015320530353205303532853023a00805302533653023a00845301530c533e530b5320530353205303532853023a008053015336530253445320530353205303532853023a008453015336530253405320530353285302530853413a00fe3a00a43a00a13a0080530253413a00d93a00dc3a00f73a00a6530653413a00f4530c53285302530053413a00f8530c532853025300537253413a00cb3a00f03a00873a00bb5305536b53413a00d83a00f93a00e23a00c85302536e53413a009c3a00d83a00873a00f3537c537253413a009c3a00e53a00843a00ac5304534b531b533653025300530c533d530b532053035320530353285302534453225302534153025349533a53003a00d353015320530353415301532053025320530253415301534d531b53225302533653023a00d853015320530353205302534153015371533653023a00d453015320530353285302530853413a00c73a00bd3a00ef3a00a0530753413a00d93a00dc3a00f73a00a6530653413a00fc530c5328530253005341537f537353413a0080530d5328530253005341537f537353715341537f537353413a00cd3a00f83a00b33a00d7537d536c53413a00b33a00e13a00e33a00dc5301536a5322530253413a00a33a00893a00ac3a00fd537c53725320530253413a00a33a00893a00ac3a00fd537c5371536c5320530253413a00dc3a00f63a00d33a008253035371532053025341537f537353413a00a33a00893a00ac3a00fd537c5371536c536a53413a00e93a00db3a00c33a00e1537e5349531b533653025300530c533c530b5320530353285302530853413a00d43a00b13a0087533453413a00cc3a00d53a00bb3a00e3530353205303532d53003a00d35301531b53365302530053205303534153005336530253785320530353415300533653025374530c533b530b53413a0084530d532853025300531a53413a0088530d532853025300531a5320530353285302530853413a00f33a00993a00ce3a00be537f533653025300530c533a530b53205303532053035328530253485345533a53003a00cb53015320530353285302530853413a00a23a00da3a00fd3a0080530453413a00f03a00cc3a00a0533f53413a00ac530d53285302530053413a00b0530d532853025300537253413a008e3a00df3a00d33a00ec5306536e53413a00a13a008b3a00b53a00b25301536c53413a008c3a00bc3a00c3532c5346531b533653025300530c5339530b5320530353285302530853413a00b13a00ad3a00b33a00a15307533653025300530c5338530b5320530353285302530853413a00803a00d33a00ce3a00a0530753413a00b33a00973a00a13a0088530353413a00b4530d53285302530053413a00b8530d532853025300536a5322530253413a00d23a00e23a00fd530553725320530253413a00d23a00e23a00fd53055371536c5320530253413a00ad3a009d3a008253025371532053025341537f537353413a00d23a00e23a00fd53055371536c536a53413a008c3a00f23a00d63a00975303536a53413a00d43a00863a00fa537b537253413a00c23a009d3a00973a00f0537e5349531b533653025300530c5337530b5320530353285302530853413a00803a00d33a00ce3a00a0530753413a00b53a00cd3a00b83a00be530553413a00bc530d53285302530053413a00c0530d532853025300536b53413a00803a00fa3a00ca3a009a5305536a53413a00943a00813a009a3a009f5379537353413a009f3a00dd3a00c13a00f55306536c53413a008c3a00ae3a00803a009c537f534b531b533653025300530c5336530b5320530353205303532853023a00ac530153205303532853025348536b533653023a00c453015320530353285302530853413a00d13a00c93a00a43a008b5304533653025300530c5335530b5320530353205303532853023a00e8530153205303532853023a00c45301536a533653023a00c053015320530353285302530853413a00fc3a009b3a00af3a00c0537e53413a00ad3a00bf3a00e33a00cd537e53413a00cc530d53285302530053413a00d0530d532853025300536c53413a00da3a00e03a00d43a00a05302536a53413a00c23a00c03a00913a00e7537d537153413a00833a00ac3a008b3a00b1537f5346531b533653025300530c5334530b5320530353285302530853413a00b73a00cb3a00c63a009f5304533653025300530c5333530b53205303532853023a00c053015341533153205303532853025348531053085320530353285302530853413a00b13a00b33a00f43a00b253065336530253005320530353205303532853023a00c4530153365302535c530c5332530b532053035320530353285302537453365302533c5320530353205303532853025378533653025338532053035320530353285302537c53365302533453413a00d4530d532853025300531a53413a00d8530d532853025300531a5320530353285302530853413a00af3a00833a00863a00bc5303533653025300530c5331530b5320530353205303532853023a00d453015345533a53003a00bf53015320530353285302530853413a00f93a00a43a00f23a00b7530353413a00a13a00d23a00dc3a0082537a53413a00dc530d53285302530053413a00e0530d5328530253005371532253025320530253413a00f63a00c23a00d23a009d53025373536a5320530253413a00893a00bd3a00ad3a00e253015371536b53413a009f3a00ff3a008f3a00d95302537153413a00bd3a00c63a00b13a00ec5303536b53413a00ae3a00b03a00a553705349531b533653025300530c5330530b5320530353205303532853023a00fc530153205303532853025338536a53225305532d530053005320530353285302533c534153085374537253225302533653023a00b8530153205303532053025341533a536e53225307533653023a00b4530153413a00f0530d5328530253005321530253413a00ec530d532853025300532153045320530553205307533a530053005320530353285302530853413a00883a00fa3a00c13a00b9537b53413a00af3a00c33a008c3a00b5530453205304532053025341537f5373537153205302532053045341537f53735371536b53413a00d33a008e3a00803a00925306536c5322530253413a008f3a00e53a00c93a00c5537953725320530253413a008f3a00e53a00c93a00c553795371536c532053025341537f537353413a008f3a00e53a00c93a00c5537953715320530253413a00f03a009a3a00b63a00ba53065371536c536a53413a00f83a00ac3a00bc3a00b55302537353413a009c3a00e43a00d33a00815302534b531b533653025300530c532f530b5320530353285302530853413a00d93a00d83a00e23a00d35378533653025300530c532e530b5320530353285302530853413a00ab3a00d53a00873a00fc537a533653025300530c532d530b5320530353205303532853023a00b8530153205303532853023a00b45301532253025341533a5372532053025341533a5371536c53205302534153455371532053025341537f53735341533a5371536c536a536b533653023a00b053015320530353285302530853413a00ab3a00d53a00873a00fc537a53413a00873a00d63a00b53a00d2537b53413a00f4530d53285302530053413a00f8530d532853025300536e53413a00d93a00983a00b93a00fe537e537353413a00b23a00b03a00a33a00a05304536b532253025341537f537353413a00fb3a00873a00b13a00fb537b53725320530253413a00843a00f83a00ce3a008453045372537153413a00eb3a00db3a00c03a00a6537b5346531b533653025300530c532c530b5320530353285302530853413a00863a00d93a00863a00ec537b53413a009c3a00a03a00c63a00f2537d53413a0084530e53285302530053413a0088530e532853025300536a53413a00863a00de3a00ed3a00ea5300536e532253025341530653715341530153745320530253413a00d93a00ce3a00813a00a553055373536b53413a00863a00dc3a00e43a00ac537b536c53413a00f53a00f93a00873a00945378534b531b533653025300530c532b530b5320530353285302530853413a00aa3a00f33a00d73a00ec537d5336530253005320530353205303532853023a00b05301533653025370530c532a530b53205303532053035328530253705336530253305320530353285302530853413a008b3a00923a00813a0087537b53413a00e23a00b83a009e3a00ca530453413a008c530e5328530253005322530253413a0090530e532853025300532253045371532053025341537f5373532053045341537f5373537153725341537f537353413a00ed3a00de3a00bc3a00e1537c537253413a00a33a00eb3a00c73a00a85307537353413a00c93a00fc3a00973a008f5301534b531b533653025300530c5329530b53205303532853023a008c530253205303532853025330536a532d5300530053215302532053035320530353285302534053415301536b53225304533653023a00ac530153413a0098530e5328530253005321530553413a0094530e5328530253005321530753205303532853023a00e8530153205304536a53205302533a530053005320530353285302530853413a008b3a00923a00813a0087537b53413a00a83a00a03a00f43a00ed53035320530553205307537253413a00b23a00b23a00fc535a534f53413a00b13a00843a00e63a00d05378536c5322530253413a009f3a00f93a00be3a00e5530053715341530153745320530253413a00e03a00863a00c13a009a537f5373536b53413a00863a00d43a00a53a00b7537e534b531b533653025300530c5328530b5320530353285302530853413a00c33a00fd3a00cc3a00b353055336530253005320530353205303532853025344533653025360530c5327530b53413a00a8530e5328530253005321530553413a00a4530e5328530253005321530753205303532853023a00fc530153205303532853025324536a5322530253205302532d53005300532053035328530253285341530853745372532253025341533a536e53225308533a5300530053205303532853023a00fc530153205303532853025324532253045341537f537353413a00fd3a00b53a00b43a0081537c53715320530453413a00823a00ca3a00cb3a00fe53035371537253413a00fc3a00b53a00b43a0081537c5373532053045341530153715372536a5322530453205304532d5300530053205302532053085341533a536c532253045341537f5373537153415301537453205302532053045373536b5341530853745372532253025341533a536e53225304533a53005300532053035320530353285302532453415302536a533653023a00a453015320530353205302532053045341533a536c532253045341537f53735371532053025341537f5373532053045371536b533653023a00a85301532053035320530353285302532c53415302536a53225302533653023a00a05301532053035320530253205303532853023a00cc53015346533a53003a009f53015320530353285302530853413a00da3a00ee3a008f532553413a00d43a00af3a00c23a009d53035320530553205307536c53413a00d43a00d13a00b93a0089537d536c53413a00f53a00e33a00983a00bb53015346531b533653025300530c5326530b53205303532053035328530253605336530253205320530353285302530853413a00a63a00a13a00dd3a00d5530653413a00c73a00b93a00ef3a00fb537853205303532853023a00fc5301532d53005300531b533653025300530c5325530b5320530353285302530853413a00f43a00b93a00cc3a00c7537e53413a00943a00a53a00903a00d2530153413a00b4530e53285302530053413a00b8530e532853025300536a5322530253413a00843a0088530e537353205302537153413a00b63a00ca3a008e3a00da5378537153413a00a03a00be3a00c93a00ff5303536b53413a00e63a00903a00e73a00ac5304534b531b533653025300530c5324530b5320530353285302530853413a00813a00fc3a00c63a00a35301533653025300530c5323530b5320530353285302530853413a00ce3a008f3a009f3a00fa537d53413a00b93a00b03a00b83a0084537a53413a00c4530e53285302530053413a00c8530e532853025300536b53413a00e23a00de3a00ae3a00df5303536b53413a00ff3a00a33a00dc3a00a3537a534f5322530253413a00933a00903a00cd3a00a65304537353205302534153015374536a53413a00b83a00bb3a00dc531c534b531b533653025300530c5322530b53205303532053035328530253205345533a53003a009653015320530353285302530853413a00fc3a00983a008e3a00ff530453413a00e53a00ad3a00f13a00f4537853413a00dc530e53285302530053413a00e0530e532853025300536e53413a00d63a00813a00ed3a00eb5301536a53413a00a13a00b53a00eb3a00d35378534f53413a00f33a00b83a00b23a00e95305537353413a00c53a00c33a00d43a00f75303534b531b533653025300530c5321530b5320530353285302530853413a00c33a008f3a009b3a00a7537a533653025300530c5320530b5320530353285302530853413a00fd3a00ed3a00dc3a00b5537953413a009e3a00b43a00973a008e530453413a00ec530e53285302530053413a00f0530e532853025300536a5322530253413a00d03a00853a00e73a00ce530453715341530153745320530253413a00af3a00fa3a00983a00b1537b5373536b5322530253413a00c53a00e23a00ce3a0088530153725320530253413a00c53a00e23a00ce3a008853015371536c5320530253413a00ba3a009d3a00b13a00f7537e5371532053025341537f537353413a00c53a00e23a00ce3a008853015371536c536a53413a00de3a00823a00ec3a008b5302537253413a00893a00843a00d03a008753025346531b533653025300530c531f530b5320530353285302530853413a00b93a00843a00fe3a0082537f53413a00933a00ae3a00cf3a00e0530153205303532d53003a00965301531b5336530253005320530353205303532853023a00ac5301533653023a008453015320530353205303532853025320533653023a00805301530c531e530b532053035320530353285302535c53365302531c5320530353285302530853413a009e3a00fd3a00cb3a0096530653413a00fe3a00883a00be3a009a537a53413a00f4530e5328530253005322530253413a00f8530e53285302530053225304537253205302532053045371536c53205302532053045341537f53735322530453725341537f537353205302532053045371536c536a53413a00ae3a00e23a009d3a00a85303536a5322530453413a00b23a009f3a00da3a00f3537d53735322530253413a00d43a00be3a00ec3a009d537a53725320530253413a00d43a00be3a00ec3a009d537a5371536c5320530453413a00c43a00a03a00a43a008c5302537353413a00d43a00be3a00ec3a009d537a53715320530253413a00ab3a00c13a00933a00e253055371536c536a53413a008c3a00af3a00e23a00a053795349531b533653025300530c531d530b53413a0080530f5328530253005321530253413a00fc530e5328530253005321530453205303532853023a00e8530153225305532053055320530353285302531c53225307536a53205303532853023a00ec530153205307536b531053075320530353285302530853413a00d13a00e53a00843a00fe537853413a009e3a00fd3a00cb3a009653065320530453205302536b53413a00f23a00ca3a00f93a00b25303536a532253025320530253413a00fa3a00d83a00be3a008a53045371534153015374536b53413a00863a00a73a00c13a00f55303536b53413a00d13a00823a009d3a0097537e537353413a00823a00cb3a009b3a00c7537b5349531b533653025300530c531c530b5320530353285302530853413a00a13a008d3a00b93a009e53015336530253005320530353205303532853023a00e85301533653025358530c531b530b53205303532053035328530253585336530253185320530353285302530853413a00c93a00bd3a00b83a00fa530653413a00e13a00f63a00e43a00c5530553413a0084530f53285302530053413a0088530f532853025300537253413a00c23a00c43a00a13a00815305537353413a00de3a00c53a00ab3a00b15305537153413a00b53a00d93a00933a00955379536c53413a00bb3a009e3a00923a00e053075349531b533653025300530c531a530b53413a0090530f5328530253005321530253413a008c530f5328530253005321530453205303532853023a00fc53015310530d5320530353285302530853413a00e13a00f63a00e43a00c5530553413a00873a00c33a009e3a00bd537c53205302532053045371532253025341537f537353413a00e73a00f43a00a03a009f530253725320530253413a00823a00e43a00805309537153413a00e53a00933a00a13a00d653035372537153413a00a63a00cc3a009e3a00f953015349531b533653025300530c5319530b5320530353285302530853413a00843a00d43a00b83a00ea53795336530253005320530353205303532853025318533653025354530c5318530b5320530353285302530853413a00ca3a00c13a00b83a00e2537853413a00823a00853a00c73a00cc537953413a009c530f53285302530053413a00a0530f532853025300537353413a00f73a00df3a009f3a009f5304536e53413a00ed3a00983a00e43a00ba5302536b53413a00ca3a00d83a00803a00ea5304534b531b533653025300530c5317530b5320530353285302530853413a00d03a00b73a00cb3a00c95307533653025300530c5316530b5320530353285302530853413a00cd3a00e23a00db3a00d85378533653025300530c5315530b53413a00a1530a53413a0081530a532d5300530053413a00de53015373533a5300530053413a00a3530a53413a0083530a532d5300530053413a00b753015373533a5300530053413a00a6530a53413a0086530a532d530053005341531b5373533a5300530053413a00a7530a53413a0087530a532d5300530053413a00d853015373533a5300530053413a00a8530a53413a0088530a532d5300530053413a009553015373533a5300530053413a00a0530a53413a0080530a532d53005300532253025341537f537353413a00e653015371532053025341531953715372533a5300530053413a00a2530a53413a0082530a532d530053005322530253205302534153105371534153015374536b53413a00f05300536b533a5300530053413a00a4530a53413a0084530a532d53005300532253025341537f537353413a00a4530153715320530253413a00db5300537153725341537f5373533a5300530053413a00a5530a53413a0085530a532d530053005322530253205302534153095371534153015374536b53413a00f75300536b533a5300530053413a00a9530a53413a0089530a532d5300530053413a00f453005373533a5300530053413a00aa530a53413a008a530a532d5300530053413a00ed53015373533a5300530053413a00ac530a53413a008c530a532d530053005341530e5373533a5300530053413a00ad530a53413a008d530a532d5300530053413a00cb53005373533a5300530053413a00ab530a53413a008b530a532d53005300532253025341537f537353413a00bf530153715320530253413a00c0530053715372533a530053005320530353285302530853413a008a3a00d33a009d3a00bb5303533653025300530c5314530b53205303532853023a008c5302532253025342530053375303530053205302534253005337530353385320530253425300533753035330532053025342530053375303532853205302534253005337530353205320530253425300533753035318532053025342530053375303531053205302534253005337530353085320530353285302530853413a00b83a00833a00c53a00c1537d533653025300530c5313530b53205303532853023a00fc53015320530053205301531053065320530353285302530853413a00f83a00bb3a00e43a00af537d533653025300530c5312530b5320530353285302530853413a00e13a00823a00f33a00d25303533653025300530c5311530b5320530353285302530853413a00a43a009e3a008a3a00ee537c533653025300530c5310530b53205303532853023a008053025341530153725310530c531a5320530353285302530853413a00bb3a00fd3a00e53a00e65304533653025300530c530f530b5320530353285302530853413a00fe3a00a43a00a13a00805302533653025300530c530e530b5320530353285302530853413a00f33a00993a00ce3a00be537f533653025300530c530d530b5320530353285302530853413a00ea3a00cf3a009b3a00bf5301533653025300530c530c530b5320530353285302530853413a00a23a00da3a00fd3a00805304533653025300530c530b530b5320530353285302530853413a00af3a00833a00863a00bc5303533653025300530c530a530b53205303532853023a00fc530153205303532853025338536a5322530253205302532d530053005320530353285302533c53415308537453725341533a536e533a530053005320530353285302530853413a00af3a00c33a008c3a00b55304533653025300530c5309530b5320530353285302530853413a00ab3a00d53a00873a00fc537a533653025300530c5308530b5320530353285302530853413a00863a00d93a00863a00ec537b533653025300530c5307530b53205303532853023a00fc530153205303532853023a00dc53015320530353285302532053415301536b531053075320530353285302530853413a00d83a00b93a00863a009b5301533653025300530c5306530b5320530353285302530853413a00e53a00ad3a00f13a00f45378533653025300530c5305530b5320530353285302530853413a00f73a00e23a00ce3a00e7537a533653025300530c5304530b53205303532853023a00e8530153225302532053025320530353285302531c53225304536a53205303532853023a00ec530153205304536b531053075320530353285302530853413a00fe3a00883a00be3a009a537a533653025300530c5303530b53205303532853023a00fc53015310530d5320530353285302530853413a00c93a00bd3a00b83a00fa5306533653025300530c5302530b5320530353285302530853413a00823a00853a00c73a00cc5379533653025300530c5301530b5320530353285302530853413a00a33a00e03a00f13a00e35306533653025300530c5300530b5300530b3a00ee530953015306537f5323530053415330536b53225304532453005320530453413a00f23a008c3a00af3a0098537e5336530253045320530453413a00b4530f5328530253005322530353413a00b8530f53285302530053225305537253205303532053055371536c53205303532053055341537f53735322530553725341537f537353205303532053055371536c536a53413a00c23a00963a00e73a00b35301536e53413a00873a00953a00d23a00b05303536c53413a00ca3a00f73a00c33a00975302536a53365302532c532053045320530453415304536a5336530253005303534053025340530253405302534053025340530253405302534053025340532053045328530253045322530353413a00f13a008c3a00af3a0098537e534c530453405320530353413a00d63a00a73a00ab3a00a6537a534c530453405320530353413a00d83a00d93a00903a00a253785346530d53025320530353413a00f33a00e53a00e83a00fe53785346530d53055320530353413a00b83a00ff3a00fb3a00fb53795347530d53095320530453285302530053413a00d73a00a73a00ab3a00a6537a53413a00b43a00f33a008b3a0088537c53205304532d53005327531b53365302530053205304532053025336530253105320530453415300533653025314530c5309530b5320530353413a00c53a00ef3a00cf3a00f6537b534c530453405320530353413a00cb3a00e83a00c03a00d8537b5346530d53065320530353413a00d73a00a73a00ab3a00a6537a5347530d530953205304532853025328532153005320530453415330536a5324530053205300530f530b5320530353413a00c63a00ef3a00cf3a00f6537b5346530d53065320530353413a00b43a00f33a008b3a0088537c5347530d5308532053045320530453285302531053365302530c53205304532053045328530253145336530253085320530453285302530053413a00c63a00a13a00d53a00e9530753413a00853a00bd3a00c13a00da530753413a00d4530f53285302530053413a00d8530f5328530253005372532253035320530353413a00b33a00923a00aa3a009a53075371534153015374536b53413a00b33a00923a00aa3a009a5307536a5322530353413a00c53a00ff3a00e03a00d2537953715320530353413a00c53a00ff3a00e03a00d253795372536a53225303532053035341537f537353413a00fb3a00ba3a00b03a00e853055372536a53415301536a53413a00d03a00d73a00ea3a00df5306534b531b533653025300530c5308530b530253405320530353413a009c3a00c53a00fb3a00835303534c530453405320530353413a00f23a008c3a00af3a0098537e5346530d53015320530353413a00e83a00e73a00c93a00a7537e5346530d53045320530353413a009d3a00c43a00833a00e3537e5347530d53095320530453285302530053413a00b83a00ff3a00fb3a00fb5379533653025300530c5309530b5320530353413a00c53a00a13a00d53a00e95307534c530453405320530353413a009d3a00c53a00fb3a008353035346530d53035320530353413a00853a00bd3a00c13a00da53075347530d530953413a00e0530f5328530253005321530553413a00dc530f53285302530053215307532053045328530253085322530653205304532853025328536a5320530453285302530c532253035320530053205306536a532d530053005373533a5300530053205304532053035341530f537653225306532053035341530d5376532253085341537f5373537153205308532053065341537f537353715372532053035341530c53765373532053035341530a537653735341531f53745320530453285302530c5341530153765372533653025320532053045320530453285302530853415301536a5322530353365302531c5320530453205301532053035346533a5300531b5320530453285302530053413a00cb3a00e83a00c03a00d8537b53413a00c63a00a13a00d53a00e953075320530553205307537253413a00cc3a00b93a00f83a00975305536c53413a00983a00cf3a00b43a00e65307536a5322530353413a00dc3a00d73a00e43a00a1530653735320530353413a00dc3a00d73a00e43a00a153065371534153015374536a53413a009d3a00a43a00a23a00ac537e5347531b533653025300530c5309530b5320530353413a00c63a00a13a00d53a00e953075346530d53075320530353413a00bc3a00db3a00993a00ed53075347530d5308532053015310530c531a5320530453285302530053413a00d83a00d93a00903a00a25378533653025300530c5308530b5320530453285302530053413a00d83a00d93a00903a00a2537853413a00bc3a00db3a00993a00ed53075320530453285302532c53413a00ac3a00f83a00833a009753795349531b533653025300530c5307530b53413a00c0530f5328530253005321530353413a00bc530f5328530253005321530553205304532053015310530c5336530253285320530453285302530053413a00bc3a00db3a00993a00ed530753413a009d3a00c53a00fb3a00835303532053035320530553725322530353413a00e43a00fa3a00893a0094537d53735320530353413a00843a00f83a00883a00945305537353413a00943a00fd3a009c3a009753055371534153015374536b53413a00ec3a00823a00e33a00e85302536b5322530353413a00f03a00ed3a00873a00ba530753725320530353413a008f3a00923a00f83a00c553785373537153413a00cd3a00a83a00b53a008753035349531b533653025300530c5306530b5320530453285302530053413a00e83a00e73a00c93a00a7537e533653025300530c5305530b5320530453285302530053413a00c63a00ef3a00cf3a00f6537b53413a00f33a00e53a00e83a00fe537853413a00c4530f53285302530053413a00c8530f5328530253005373532253035341537f537353413a00b93a00d53a0094532953725320530353413a00c63a00aa3a00eb53565372537153413a008f3a00f13a00c13a009c5305536b532253035341537f537353413a00be3a00c43a00963a008d537f53725320530353413a00c13a00bb3a00e93a00f253005372537153413a00cb3a00943a00d83a00eb537c534b531b533653025300530c5304530b53205304532053015345533a530053275320530453285302530053413a00c63a00ef3a00cf3a00f6537b53413a009d3a00c43a00833a00e3537e53413a00cc530f5328530253005341537f537353413a00d0530f5328530253005341537f537353725322530353413a00803a00953a00a83a00f253005371532053035341537f53735322530353413a00e83a00a03a00853a008553045371537253413a00a03a00b13a008d533553735320530353413a00a03a00a43a00a53a00c753005371537253413a00973a00ca3a00d23a0088537b537253413a00b83a00813a00aa3a00c753025346531b533653025300530c5303530b5320530453285302530053413a00d73a00a73a00ab3a00a6537a53413a00b43a00f33a008b3a0088537c53205304532d5300531b531b533653025300532053045320530453285302531c5336530253145320530453205304532853025320533653025310530c5302530b5320530453285302530053413a00f33a00e53a00e83a00fe5378533653025300530c5301530b532053045328530253085322530353205304532853025328536a5320530053205303536a532d530053005322530353205304532d5300530c5322530553715341537f5373532053035341537f5373532053055341537f537353715341537f53735371533a530053005320530453285302530053413a00853a00bd3a00c13a00da5307533653025300530c5300530b5300530b3a00b5531853025311537f5301537e5323530053413a00e05300536b53225303532453005320530353413a00d13a00f33a00d53a00ea53045336530253085320530353413a00e4530f5328530253005322530453413a00e8530f532853025300532253075371532053045341537f5373532053075341537f5373537153725341537f537353413a00ca3a00f13a00a85376534f53413a00b23a00db3a00b63a00fb5379536c53413a00f43a00943a00ec3a00ac5306536e53365302535c532053035320530353415308536a533653025304532053025341530e536a53215309532053025341530f536a5321530a532053015341530853765321530b532053015341531053765321530753205301534153185376532153085320530253415303536a5321530c5320530253415305536a5321530d5320530253415306536a5321530e5320530253415307536a5321530f5320530253415309536a53215310532053025341530a536a53215311532053025341530b536a53215312532053025341530d536a532153135303534053025340530253405302534053025340530253405302534053025340532053035328530253085322530453413a00e63a00a33a00c43a009d5302534c530453405320530453413a00aa3a00ab3a00903a00f6537c534c530453405320530453413a00ad3a00f83a00e83a00c353795346530d53025320530453413a00a43a00843a00d83a0088537c5346530d53075320530453413a00e53a00df3a00c43a00dd537a5347530d53095320530353413a00e05300536a53245300530f530b5320530453413a00ab3a00ab3a00903a00f6537c5346530d53035320530453413a00923a00ce3a00dd3a0089537e5346530d53045320530453413a00c83a00b93a00913a009f537f5347530d53085320530353285302530453413a00a73a00c63a00a93a00e85303533653025300530c5308530b530253405320530453413a00d03a00f33a00d53a00ea5304534c530453405320530453413a00e73a00a33a00c43a009d53025346530d53085320530453413a00f13a00c23a00c23a00aa53025346530d53015320530453413a00a73a00c63a00a93a00e853035347530d53095320530353285302530453413a00ad3a00f83a00e83a00c3537953413a00a43a00843a00d83a0088537c53413a00f4530f53285302530053413a00f8530f532853025300536e53413a00c23a00833a00ba3a00c7537e537353413a00f73a00a03a00e75321536c5322530453413a00de3a00f53a00e3530e53725320530453413a00de3a00f53a00e3530e5371536c5320530453413a00a13a008a3a009c53715371532053045341537f537353413a00de3a00f53a00e3530e5371536c536a53413a00833a00953a008653335347531b533653025300530c5309530b5320530453413a00ee3a00933a00863a00c253055346530d53055320530453413a00cc3a00e83a008e3a009b53055346530d53025320530453413a00d13a00f33a00d53a00ea53045347530d53085320530353285302530453413a00ee3a00933a00863a00c2530553413a00f13a00c23a00c23a00aa53025320530353285302535c53413a00e53a00ec3a008b3a00e853795346531b533653025300530c5308530b53413a00f0530f5328530253005321530453413a00ec530f5328530253005321530653413a008853125320530053205301536a53415301536b3a00ad53375303530053413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530053413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530253415301536a5336530253585320530253205305533a5300530153413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530253415302536a5336530253545320530253205305533a5300530253413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530c5336530253505320530253205305533a5300530353413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530253415304536a53365302534c5320530253205305533a5300530453413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530d5336530253485320530253205305533a5300530553413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530e5336530253445320530253205305533a5300530653413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530f5336530253405320530253205305533a5300530753413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530253415308536a53365302533c5320530253205305533a5300530853413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a75321530553205303532053105336530253385320530253205305533a5300530953413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a75321530553205303532053115336530253345320530253205305533a5300530a53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a75321530553205303532053125336530253305320530253205305533a5300530b53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a75321530553205303532053025341530c536a53365302532c5320530253205305533a5300530c53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a75321530553205303532053135336530253285320530253205305533a5300530d53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530353205314534253213a0088533c530053275320530353285302530453413a00f13a00c23a00c23a00aa530253413a00c83a00b93a00913a009f537f5320530453205306537353205304532053065371534153015374536a53413a00973a00c23a00bc3a00a2537b537153413a00db3a00c13a00853a00b45304536b53413a00943a00e43a00e53a00d3537b537353413a00fe3a00e93a00c23a00db537d5349531b533653025300530c5307530b532053035320530953365302532053413a00fc530f5328530253005321530453413a00805310532853025300532153065320530253205303532d53005327533a5300530e53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530a53365302531c5320530253205305533a5300530f53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530353205314534253213a00883a00a753225305532053055341537f5373534153015372536a53415302536a53225305533a5300531b5320530253205305533a530053005320530353205303532d5300531b532253055336530253145320530253205305536a53205301533a53005300532053035320530b533a53005313532053035320530253205303532853025314534153045372536a53365302530c5320530353285302530453413a00cc3a00e83a008e3a009b530553413a00ad3a00f83a00e83a00c3537953205306532053045341537f537353715341537f537353205304532053065341537f537353715341537f537353715341537f537353413a00ea3a00b93a00e13a00fd537d537153413a009a3a00d13a00b23a00c7537c536c53413a00923a00893a00f53a00d85303536b53413a00e73a00a43a00993a00b65302534b531b533653025300530c5306530b5320530353285302530453413a00ab3a00ab3a00903a00f6537c533653025300530c5305530b53413a00845310532853025300531a53413a00885310532853025300531a5320530353285302530453413a00923a00ce3a00dd3a0089537e533653025300530c5304530b53413a00905310532853025300531a53413a008c5310532853025300531a5320530353285302530c53205303532d53005313533a530053005320530253205303532853025314534153085372536a53205307533a5300530053205302532053035328530253145341530c5372536a53205308533a530053005320530353285302531c53205303532d5300531b53225304532053045341537f5373534153335372536a53205303532853025358532d5300530053225304532053045341537f5373534153335372536a536a53205303532853025354532d53005300534153335371536a53415302536a5322530453205303532853025350532d5300530053415333537153225306537353205304532053065371534153015374536a5320530353285302534c532d53005300534153335371536a53205303532853025348532d5300530053225304534153335372532053045341534c53735371536a53205303532853025344532d53005300534153335371536a53205303532853025340532d53005300534153335371536a5320530353285302533c532d53005300534153335371536a53205303532853025338532d53005300534153335371536a53205303532853025334532d53005300534153335371536a53205303532853025330532d5300530053225304532053045341537f5373534153335372536a536a5320530353285302532c532d53005300534153335371536a53205303532853025328532d5300530053225304534153335372532053045341534c53735371536a53415301536a5322530453205303532853025320532d5300530053415333537153225306537153205304532053065372536a533a530053005320530353285302530453413a00e53a00df3a00c43a00dd537a533653025300530c5303530b53413a008853125320530053205301536a53415301536b3a00ad53375303530053413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530053413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530153413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530253413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530353413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530453413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530553413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530653413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530753413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530853413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530953413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530a53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530b53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530c53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530d53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5337530353005320530353285302530453413a00f13a00c23a00c23a00aa5302533653025300530c5302530b5320530253205303532d53005327533a5300530e53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530f53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c53225314533753035300532053025341530053205314534253213a00883a00a75341537f53735341537e537253225304536b533a530053005320530253205304536b53205301533a530053005320530353285302530453413a00ad3a00f83a00e83a00c35379533653025300530c5301530b5320530353285302530c53205303532d53005313533a530053005320530253205303532853025314532253045341537f537353413a00ee3a00a03a00983a0090537953715320530453413a00913a00df3a00e73a00ef53065371537253413a00e63a00a03a00983a009053795373532053045341530853715372536a53205307533a530053005320530253205303532853025314532253045341537f537353413a00833a00cb3a00f13a0087530253715320530453413a00fc3a00b43a008e3a00f8537d5371537253413a008f3a00cb3a00f13a008753025373532053045341530c53715372536a53205308533a530053005320530353285302531c53205303532d5300531b53415333537153205303532853025358532d53005300534153335371536a53205303532853025354532d53005300534153335371536a53205303532853025350532d5300530053225304532053045341537f5373534153335372536a536a5320530353285302534c532d53005300534153335371536a53205303532853025348532d53005300534153335371536a53205303532853025344532d53005300534153335371536a53205303532853025340532d53005300534153335371536a5320530353285302533c532d5300530053225304534153335372532053045341534c53735371536a53205303532853025338532d53005300534153335371536a53415301536a5322530453205303532853025334532d53005300532253065341534c537353205306537153225306537153205304532053065372536a53205303532853025330532d53005300534153335371536a532253045320530353285302532c532d5300530053225306534153335372532053065341534c5373537153225306537153205304532053065372536a53205303532853025328532d53005300534153335371536a53205303532853025320532d53005300534153335371536a533a530053005320530353285302530453413a00923a00ce3a00dd3a0089537e533653025300530c5300530b5300530b3a0088531353015309537f5323530053415340536a5322530553245300532053055322530353413a00fa3a00d43a009a3a00ed537b5336530253045320530353413a009453105328530253005322530253413a009853105328530253005322530453205304532053025320530453735341537f53735371534153015374536b536a5322530453413a00db3a00eb3a009f537e53725320530453413a00c93a00aa3a009f3a00b6537e53725322530253413a00da3a00e93a009a3a00ce53035371536c5320530253413a00a53a00963a00e53a00b1537c5371532053045341537f537353413a00923a00c13a00803a00c853015371536c536a5322530253413a00d03a00f43a00b73a00cf5307537353205302537153365302533c532053035320530353415304536a53365302530053035340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340532053035328530253045322530253413a00813a00833a00b53a00a1537e534c530453405320530253413a00b43a00803a00d63a008e537c534c530453405320530253413a00e73a00dc3a00803a00a15379534c530453405320530253413a00e13a00983a00c03a008753785346530d530f5320530253413a00d23a00c03a00cd3a00da53785346530d53055320530253413a00e13a00ed3a00e43a00f153785347530d53125320530553415310536b53225305532453005320530353285302530053413a009b3a00fa3a00ab3a008a5301533653025300530c5312530b5320530253413a00eb3a00853a00c13a00dc537a534c530453405320530253413a00e83a00dc3a00803a00a153795346530d53095320530253413a00eb3a00ff3a00d13a00c3537a5347530d53125320530353285302530053413a00b53a00803a00d63a008e537c533653025300530c5312530b5320530253413a00ec3a00853a00c13a00dc537a5346530d530a5320530253413a00fa3a00d43a009a3a00ed537b5347530d53115320530353285302530053413a009b3a00fa3a00ab3a008a530153413a00e13a00ed3a00e43a00f153785320530353285302533c53413a00bd3a008a3a00e73a00a5537a5349531b533653025300530c5311530b5320530253413a00ed3a00f53a00c73a00f1537c534c530453405320530253413a00b53a00803a00d63a008e537c5346530d530b5320530253413a00d13a00823a00f43a00bf537c5346530d53025320530253413a00bf3a00ed3a00b83a00d3537c5347530d531153413a00e453105328530253005321530253413a00e85310532853025300532153025320530353285302530053413a00b53a00803a00d63a008e537c533653025300530c5311530b5320530253413a00f23a00b83a00c93a00b0537d534c530453405320530253413a00ee3a00f53a00c73a00f1537c5346530d53105320530253413a00d23a00be3a00853a00ae537d5347530d53115320530353285302530053413a00d13a00823a00f43a00bf537c533653025300530c5311530b5320530253413a00f33a00b83a00c93a00b0537d5346530d53045320530253413a008c3a00b43a00893a00b8537d5347530d53105320530353285302530053413a00f33a00b83a00c93a00b0537d53413a00fd3a00943a00a43a0093530653413a00b4531053285302530053413a00b85310532853025300537253413a00bc3a00d73a00a03a00de5304536a53413a00cc3a00ee3a00da3a0088537e537353413a00a23a00d83a00e33a00a45379534b531b533653025300530c5310530b530253405320530253413a00a83a00da3a00f33a00ad5305534c530453405320530253413a009a3a00fa3a00ab3a008a5301534c530453405320530253413a00823a00833a00b53a00a1537e5346530d53075320530253413a00ae3a00d33a009d3a00dc537e5346530d53105320530253413a00d53a00973a00f83a00fb537e5347530d53125320530353285302530053413a00ec3a00853a00c13a00dc537a533653025300530c5312530b5320530253413a00a13a00d93a00863a00f35303534c530453405320530253413a009b3a00fa3a00ab3a008a53015346530d53025320530253413a00f13a00e23a00923a00dd53015347530d53125320530353285302530053413a00bf3a00ed3a00b83a00d3537c533653025300530c5312530b5320530253413a00a23a00d93a00863a00f353035346530d53035320530253413a00d33a00a53a00a23a009953045347530d53115320530353285302530053413a00aa3a00ce3a00e23a00d153065336530253005320530353205303532853025324533653025314530c5311530b5320530253413a00a93a00ce3a00e23a00d15306534c530453405320530253413a00f23a00ed3a00a23a00915306534c530453405320530253413a00823a00f73a00fe3a00b853055346530d530e5320530253413a00a93a00da3a00f33a00ad53055347530d531253205303532853025320532153005320530353415340536b5324530053205300530f530b5320530253413a00f33a00ed3a00a23a009153065346530d53095320530253413a00fd3a00943a00a43a009353065347530d53115320530353285302530053413a00f33a00b83a00c93a00b0537d533653025300530c5311530b5320530253413a00aa3a00ce3a00e23a00d153065346530d530b5320530253413a00c93a00993a00b93a00fc53065346530d53065320530253413a009f3a00c23a00ba3a00d153075347530d53105320530353285302530053413a00aa3a00ce3a00e23a00d1530653413a00823a00833a00b53a00a1537e53205303532d53005337531b533653025300532053035341537f533653025318532053035341530053365302531c5320530353415300533653025314530c5310530b53413a00a053105328530253005321530453413a009c5310532853025300532153025320530553415310536b532253055324530053205303532053055336530253385320530353285302530053413a00d23a00be3a00853a00ae537d53413a009b3a00fa3a00ab3a008a53015320530253205304536a5322530253413a009d3a00983a008f3a00ef530553725320530253413a00e23a00e73a00f03a0090537a5373537153413a00bf3a00f43a009e3a00ec5300536e532253025341531c53715341530153745320530253413a00a33a009f3a00dc3a00d953005373536b53413a00da3a00d03a00a63a00be537b534b531b533653025300530c530f530b5320530353285302530053413a00a23a00d93a00863a00f3530353413a00e13a00983a00c03a0087537853413a00a4531053285302530053413a00a85310532853025300536e53413a00e83a008b3a00c23a0099537c53725322530253413a00a33a00f03a00a13a00fb530253715341530153745320530253413a00dc3a008f3a00de3a0084537d5373536b53413a00843a00e03a00eb3a00aa5307536c53413a009d3a009e3a00eb3a00c5537d5349531b533653025300530c530e530b53205303532053015345533a530053375320530353285302530053413a00d23a00c03a00cd3a00da537853413a00e13a00983a00c03a0087537853413a00ac531053285302530053413a00b05310532853025300536c5322530253413a00923a00903a00815309537353413a00e93a00a33a00fc3a00d2537c53725320530253413a00883a00813a00c83a00d05300537353413a00963a00dc3a00833a00ad5303537253715322530253413a00ec3a00cb3a00ad3a00b9537e53725320530253413a00ec3a00cb3a00ad3a00b9537e5371536c532053025341537f537353413a00ec3a00cb3a00ad3a00b9537e53715320530253413a00933a00b43a00d23a00c653015371536c536a53413a00823a00d23a00c43a0097537a534b531b533653025300530c530d530b5320530353285302530053413a008c3a00b43a00893a00b8537d533653025300530c530c530b53413a00bc531053285302530053413a00c05310532853025300536e531a5320530353285302530053413a009f3a00c23a00ba3a00d15307533653025300530c530b530b5320530353205303532853025318533653025310532053035320530353285302531c53365302530c5320530353285302530053413a00ae3a00d33a009d3a00dc537e53413a00c93a00993a00b93a00fc530653413a00c45310532853025300532253025341537f537353413a00c33a00a73a00e63a00d2537b53715320530253413a00bc3a00d83a00993a00ad53045371537253413a00c85310532853025300532253025341537f537353413a00c33a00a73a00e63a00d2537b53715320530253413a00bc3a00d83a00993a00ad53045371537253735322530253413a00a13a00f43a008d3a00ba530653725320530253413a00a13a00f43a008d3a00ba53065371536c532053025341537f537353413a00a13a00f43a008d3a00ba530653715320530253413a00de3a008b3a00f23a00c553795371536c536a53413a00c43a009a3a00ef3a00db5306536b53225302532053025341537f537353413a00953a00ed3a00f93a008b53015372536a53413a00993a00ec3a00f73a00b253785346531b533653025300530c530a530b532053005320530353285302530c53225302536a532d5300530053215304532053035320530253415301537153205302534153015372536a5322530253365302532c5320530353205301532053025346533a5300532b5320530353413a00a03a00863a00e23a00ed537e5341530053205304532053035328530253105373532253065341537e5373532053065371531b532253045320530653415301537653225302536a53205302532053045371534153015374536b532253095341530153765322530453413a00a03a00863a00e23a00ed537e53415300532053065341537f53735322530a5341537d53725341537f5347531b5322530253715341537f5373532053045341537f5373532053025341537f537353715341537f537353715322530753415306537653225308532053065341531b53745341531f537553413a00e43a00a03a00dc3a00ed53015371532053065341531c53745341531f537553413a00b23a00903a00ee3a00f65300537153225304532053065341531d53745341531f537553413a00993a00883a00b7533b5371532253025371532053025320530453725341537f5373537253735322530253413a00fd3a00ae3a00df53445371532053025341537f537353413a00823a00903a00a0533b5371537253413a00c83a00c13a00b83a00db5303534153005320530a5341535f53725341537f5347531b532253025341537f537353413a00fd3a00ae3a00df534453715320530253413a00803a00c13a00a0531b537153725373532253025341537f5373537153205302532053085341537f53735371537253413a00903a00833a00f13a00b6530753415300532053095341537f53735341535f53725341537f5347531b537353413a00a03a00863a00e23a00ed537e53415300532053075341537f53735341535f53725341537f5347531b53735336530253305320530353285302530053413a00e83a00dc3a00803a00a1537953413a00c93a00993a00b93a00fc530653413a00cc531053285302530053413a00d05310532853025300536b53413a00e23a00973a00ac3a00e35305536a5322530253413a009a3a00c83a00813a00c8537b53735320530253413a009a3a00c83a00813a00c853035371534153015374536a53413a00b93a00bf3a008a3a008553065349531b533653025300530c5309530b5320530353285302530053413a00f33a00ed3a00a23a0091530653413a00823a00833a00b53a00a1537e53205303532d5300532b531b533653025300532053035320530353285302532c53365302531c5320530353205303532853025330533653025318530c5308530b5320530353285302530053413a00d53a00973a00f83a00fb537e53413a00ec3a00853a00c13a00dc537a53413a00d453105328530253005322530453413a00d85310532853025300532253025372532053025320530453735341537f5373537153413a00883a00b23a00f83a00945378537253413a00a53a00883a00b43a00a85302537353413a00d73a00a13a00e53a00df5300536b53413a00f03a00ec3a008c3a00c3537b534b531b533653025300530c5307530b53205303532053035328530253305341537f537353365302532453413a00dc5310532853025300531a53413a00e05310532853025300531a5320530353285302530053413a00f13a00e23a00923a00dd5301533653025300530c5306530b53413a00ec5310532853025300531a53413a00f05310532853025300531a5320530353285302530053413a00d33a00a53a00a23a00995304533653025300530c5305530b53205303532053035328530253145336530253085320530353285302530053413a00823a00f73a00fe3a00b8530553413a00ee3a00f53a00c73a00f1537c53413a00f4531053285302530053413a00f85310532853025300536e53413a00c53a00f73a00eb3a00ed5301536b5322530253413a00983a00ec3a00843a00be53015371532053025341537f537353413a00e73a00933a00fb3a00c1537e537153725341537f5373532253025320530253413a009c3a00b73a00c33a00ba53035371534153015374536b53413a00da3a00843a008153225347531b533653025300530c5304530b53413a008053115328530253005321530853413a00fc53105328530253005321530453205303532853025338532253025342530053375303530853205302534253005337530353005320530153205303532853025308532053035328530253385310530353205303534153105310530c5322530753365302532053205307532053035328530253385322530253295300530053375300530053205307532053025329530053085337530053085320530353285302530053413a00a93a00da3a00f33a00ad530553413a00823a00f73a00fe3a00b853055320530453205308536a53413a00e93a00a83a00d03a00905301536b5322530253413a00cb3a00a43a00983a00c05378537253413a00fb3a00be3a00da3a00cc537a53715320530253413a00fb3a00bf3a00df3a00dd537e5372536a53413a00a43a00cf3a009d3a00825303534b531b533653025300530c5303530b5320530353285302530053413a00a23a00d93a00863a00f35303533653025300530c5302530b5320530353285302530053413a00c93a00993a00b93a00fc5306533653025300530c5301530b532053035328530253385322530253425300533753035300532053025342530053375303530853205301532053035328530253085320530353285302533853105303534153105310530c53225304532053035328530253385322530253295300530053375300530053205304532053025329530053085337530053085320530353285302530053413a00823a00f73a00fe3a00b85305533653025300530c5300530b5300530b3a00a853175301530c537f5323530053413a00805301536b5322530553245300532053055322530353413a00c93a00e53a00a93a00c953025336530253085320530353413a0084531153285302530053413a00885311532853025300536e53413a00ed3a00db3a00805367537353413a00cd3a00b23a009c3a00945378536c53413a00ea3a00d53a00df3a00d55307536b53365302537c532053035320530353415308536a533653025304532053015341530353715321530a532053015341530453495321530b532053015341537c53725321530c5303534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340532053035328530253085322530253413a00aa3a009e3a00915333534c530453405320530253413a00b73a00d93a00b73a00b4537c534c530453405320530253413a00a93a009e3a00bb3a00b6537a534c530453405320530253413a00da3a00c33a00c53a00875379534c530453405320530253413a00f63a00a93a00ef3a00b553785346530d53075320530253413a00943a00863a00903a008453795347530d531753205303532053015345533a530053775320530353285302530453413a00f63a00a93a00ef3a00b55378533653025300530c5317530b5320530253413a00db3a00c33a00c53a008753795346530d53145320530253413a00953a00f73a00fe3a009a53795347530d53165320530353285302530453413a00b83a00d93a00b73a00b4537c53413a008a3a00da3a00c53a0082537d53205303532d53005377531b5336530253005320530353413a00c53a00bb3a00f23a00885378533653025328530c5316530b5320530253413a008e3a00e53a00bb3a00bb537b534c530453405320530253413a00aa3a009e3a00bb3a00b6537a5346530d53035320530253413a00ac3a00bd3a00ea3a008c537b5347530d53165320530353285302530453413a009c3a00d73a008b3a0080530453413a00c73a009d3a00cd3a00d1530153205303532d5300536f531b533653025300532053035341530053365302533c5320530353413a00c53a00bb3a00f23a00885378533653025338530c5316530b5320530253413a008f3a00e53a00bb3a00bb537b5346530d530d5320530253413a00ea3a00bb3a00a23a00d5537b5346530d53065320530253413a009c3a00f63a00ad3a00d6537b5347530d53155320530353285302530453413a00d73a00c33a00ef3a00d65301533653025300530c5315530b5320530253413a00b33a00f03a00a23a00d8537d534c530453405320530253413a00893a00da3a00c53a0082537d534c530453405320530253413a00b83a00d93a00b73a00b4537c5346530d53105320530253413a00c63a00b83a00813a00ea537c5347530d5316532053035320530353285302532c533653025318532053035320530353285302533053365302531453205303532053035328530253345336530253105320530353285302530453413a00db3a00c33a00c53a0087537953413a00923a00f13a009f3a00e9530453413a00dc531153285302530053413a00e05311532853025300536b53413a00873a00c23a00cb3a00a25305536b53413a00e63a00a83a00863a00965307536e5322530253413a00f23a00d53a00913a00a65303537253205302534153025371536c532053025341537f537353413a00f23a00d53a00913a00a65303537153205302534153015371536c536a53413a00de3a00f33a009d3a00b65302534b531b533653025300530c5316530b5320530253413a008a3a00da3a00c53a0082537d5346530d53075320530253413a00d93a00953a00d63a0096537d5347530d53155320530553415310536b53225305532453005320530353285302530453413a00aa3a009e3a00bb3a00b6537a533653025300530c5315530b5320530253413a00f63a009f3a00cc3a00de537e534c530453405320530253413a00b43a00f03a00a23a00d8537d5346530d53035320530253413a008b3a00d33a00fe3a0087537e5347530d531553413a00f853115328530253005321530753413a00f45311532853025300532153045320530353285302537853225302534253005337530353085320530253425300533753035300532053015320530353285302530c532053035328530253785310530353205303534153105310530c5322530653365302535053205306532053035328530253785322530253295300530053375300530053205306532053025329530053085337530053085320530353285302530453413a008a3a00843a00f33a00d7530053413a009e3a008b3a009b3a00a6530353205304532053075372532253025320530253413a00d93a00bd3a00f63a009953045371534153015374536b53413a00be3a00cb3a00a63a008f537b536c53413a00fb3a00ae3a009a3a00df53795347531b533653025300530c5315530b5320530253413a00f73a009f3a00cc3a00de537e5346530d53105320530253413a00f53a00d73a00e03a009f537f5346530d53035320530253413a00953a008c3a008053605347530d53145320530353285302530453413a00873a00993a00913a00a55304533653025300530c5314530b530253405320530253413a009b3a00d73a008b3a00805304534c530453405320530253413a00c83a00e53a00a93a00c95302534c530453405320530253413a00d63a00c33a00ef3a00d65301534c530453405320530253413a00ab3a009e3a009153335346530d530a5320530253413a00c73a009d3a00cd3a00d153015346530d530b5320530253413a008a3a00843a00f33a00d753005347530d531753205303532853025350532153005320530353413a00805301536a5324530053205300530f530b5320530253413a00d73a00c33a00ef3a00d653015346530d530b5320530253413a00c93a00b63a009b3a00f253015347530d53165320530353285302530453413a00953a00f73a00fe3a009a537953413a00f73a009f3a00cc3a00de537e53413a00a4531153285302530053413a00a85311532853025300537253413a00e13a00bd3a008f3a00af537b537253413a00aa3a00e13a00df5330536b53413a00ed3a00ab3a00a83a00f1537d537353413a00c73a00b93a00933a00c053055349531b533653025300530c5316530b5320530253413a009d3a008b3a009b3a00a65303534c530453405320530253413a00c93a00e53a00a93a00c953025346530d53025320530253413a00b23a00bf3a00913a009453035347530d53165320530353285302530453413a00f43a00e03a00a93a00c7530353413a00ab3a009e3a0091533353413a00ac531153285302530053413a00b05311532853025300537253413a00da3a00f03a00de3a00875303537153413a00f13a00923a00b63a00f95302536c53413a00e63a00863a00913a009f5302537153413a00a83a00c63a00f73a00e95302534b531b533653025300530c5316530b5320530253413a009e3a008b3a009b3a00a653035346530d53145320530253413a00f43a00e03a00a93a00c753035347530d53155320530353285302530453413a00ab3a009e3a00915333533653025300530c5315530b5320530253413a00833a00d13a00e83a00ec5304534c530453405320530253413a00bb3a00a23a00bc3a00cb5304534c530453405320530253413a009c3a00d73a008b3a008053045346530d530d5320530253413a00873a00993a00913a00a553045347530d53165320530353285302530453413a00e33a00e93a00dd3a008153055336530253005320530353413a00c53a00bb3a00f23a00885378533653025348532053035341530053365302534c5320530353415300533653025344530c5316530b5320530253413a00bc3a00a23a00bc3a00cb53045346530d53105320530253413a00923a00f13a009f3a00e953045347530d5315532053005320530353285302531053225302536a532d5300530053215304532053035320530253415301536a53365302535c532053035320530353285302531853415301536a532253025336530253585320530353205302532053035328530253705346533a5300535753205303532053045320530353285302531453735322530253413a00933a00833a0080530853725320530253413a00933a00833a008053085371536c5320530253413a00ec3a00fc3a00ff53775371532053025341537f537353413a00933a00833a008053085371536c536a5336530253605320530353285302530453413a00d93a00d03a00813a0081530753413a00db3a00c33a00c53a0087537953413a00e453115328530253005322530253413a00e853115328530253005322530453205304532053025320530453735341537f53735371534153015374536b536a5322530253413a00bb3a00b63a00d53a008753025373532053025371532253025341537f537353413a00c03a00c03a00a0531b537253413a00f83a00c83a00a13a00bb537d53715320530253413a00833a00a73a00c43a00c053025371537253413a00fb3a00d63a00c23a00d0537c537353413a00b93a00f83a009e3a00d35303534b531b533653025300530c5315530b5320530253413a00e23a00e93a00dd3a00815305534c530453405320530253413a00843a00d13a00e83a00ec53045346530d530e5320530253413a00cb3a00c63a00b33a00f353045347530d53155320530353285302530453413a00ac3a00bd3a00ea3a008c537b533653025300530c5315530b5320530253413a00e33a00e93a00dd3a008153055346530d530a5320530253413a00c53a00d33a00de3a00af53065346530d53115320530253413a00d93a00d03a00813a008153075347530d53145320530353285302530453413a00b83a00d93a00b73a00b4537c53413a00c63a00b83a00813a00ea537c53205303532d53005357531b533653025300532053035320530353285302535c533653025334532053035320530353285302536053225302533653025330532053035320530353285302535853365302532c5320530353205302533653025328530c5314530b5320530353285302530453413a00d93a00953a00d63a0096537d53413a00aa3a009e3a00bb3a00b6537a5320530353285302537c53413a00f63a00ce3a00a83a00f253005346531b533653025300530c5313530b53413a00905311532853025300531a53413a008c5311532853025300531a5320530553415310536b532253055324530053205303532053055336530253785320530353285302530453413a00b43a00f03a00a23a00d8537d533653025300530c5312530b5320530353285302530453413a00f53a00d73a00e03a009f537f533653025300530c5311530b53413a00985311532853025300531a53413a00945311532853025300531a5320530353285302530453413a00943a00863a00903a00845379533653025300530c5310530b5320530353285302530453413a00ea3a00bb3a00a23a00d5537b533653025300530c530f530b5320530353285302530453413a00f73a009f3a00cc3a00de537e53413a00c93a00b63a009b3a00f2530153413a009c531153285302530053413a00a05311532853025300536e53413a00a53a00d53a00b03a00a85304536a53413a00b53a00e03a00f33a00e65303536e532253025320530253413a00d13a00ee3a00cc3a008e537e5373536a53205302534153065371536b53413a00a23a00873a00f63a00d353785346531b533653025300530c530e530b532053035320530a5336530253705320530353285302530453413a00b23a00bf3a00913a00945303533653025300530c530d530b532053035320530b533a5300536f5320530353285302530453413a00f43a00e03a00a93a00c7530353413a00cb3a00c63a00b33a00f3530453413a00b4531153285302530053413a00b85311532853025300536a53413a00d53a00b63a00b83a00fb537a534f53413a00d13a00c93a00cb3a009f5304536c5322530253413a009e3a00e73a00e03a00d95301537353205302537153413a00843a00e33a00ad3a008b537c5346531b533653025300530c530c530b5320530353285302530453413a009c3a00f63a00ad3a00d6537b53413a00d73a00c33a00ef3a00d6530153413a00bc53115328530253005341537f537353413a00c053115328530253005341537f537353725322530253413a00973a00cb3a00be3a00cb53015371532053025341537f537353413a00e83a00b43a00c13a00b4537e5371537253413a00d43a00b53a00ef3a00d75304537353413a00f43a00ec3a00953a00d05300536b53413a008e3a00bf3a00a83a00ce537d534b531b533653025300530c530b530b532053035320530c5320530153415303537353715336530253685320530353285302530453413a009c3a00f63a00ad3a00d6537b53413a00953a008c3a0080536053413a00c4531153285302530053413a00c85311532853025300536e53413a00cc3a00b83a00ea3a00965304536a5322530253413a00db3a00e93a00823a00a7530553725320530253413a00db3a00e93a00823a00a753055371536c5320530253413a00a43a00963a00fd3a00d8537a5371532053025341537f537353413a00db3a00e93a00823a00a753055371536c536a532253025341537f537353413a00ab3a00a63a008e3a0086537b53715320530253413a00d43a00d93a00f13a00f953045371537253413a00e63a00863a00c93a00a4537c534b531b533653025300530c530a530b532053005320530353285302534c53225302534153035372536a532d53005300532153085320530053205302534153025372536a532d530053005321530d5320530053205302534153015372536a532d53005300532153095320530053205302536a532d530053005321530653205303532853025348532153075320530353285302530453413a009c3a00d73a008b3a0080530453413a00e33a00e93a00dd3a008153055320530353285302534453415304536a53225304532053035328530253685346531b533653025300532053035320530253415304537153205302534153045372536a5322530253365302534c5320530353205304533653025344532053035320530253365302533c532053035320530d532053065320530753735322530253413a00933a00833a0080530853725320530253413a00933a00833a008053085371536c532053025341537f537353413a00933a00833a0080530853715320530253413a00ec3a00fc3a00ff53775371536c536a532253025341537f537353413a009b3a00ea3a00893a009d537c53715320530253413a00e43a00953a00f63a00e2530353715372532053095341537f537353413a009b3a00ea3a00893a009d537c53715320530953413a00e453015371537253735322530253413a00933a00833a0080530853725320530253413a00933a00833a008053085371536c532053025341537f537353413a00933a00833a0080530853715320530253413a00ec3a00fc3a00ff53775371536c536a537353413a00933a00833a00805308536c532253025320530853205308532053025320530853735341537f53735371534153015374536b536a5322530253413a00933a00833a0080530853725320530253413a00933a00833a008053085371536c5320530253413a00ec3a00fc3a00ff53775371532053025341537f537353413a00933a00833a008053085371536c536a5322530253365302534853205303532053025336530253405320530353205302533653025338530c5309530b5320530353205303532853025338533653025324532053035320530353285302533c533653025320532053035320530353285302534053365302531c5320530353285302530453413a00c53a00d33a00de3a00af530653413a008f3a00e53a00bb3a00bb537b5341530053413a00cc531153285302530053413a00d05311532853025300536e53413a00b73a00b63a00a93a00aa537a537353413a00ca3a00e33a00df3a00f85379534f5341537f537353413a00f33a00813a00e23a00ad53075371536b53413a00bf3a00973a00a43a008a53055349531b533653025300530c5308530b53205303532053035328530253705345533a530053675320530353285302530453413a008f3a00e53a00bb3a00bb537b53413a00843a00d13a00e83a00ec530453413a00d4531153285302530053413a00d85311532853025300536e532253025320530253413a00a43a00a13a00cf3a00dd53075371534153015374536b53413a00a33a00cd3a00c33a00e353025346531b533653025300530c5307530b5320530353285302530453413a00b83a00d93a00b73a00b4537c53413a00c63a00b83a00813a00ea537c53205303532d53005367531b533653025300532053035341530053365302532c53205303532053035328530253205336530253345320530353205303532853025324533653025330532053035320530353285302531c533653025328530c5306530b532053035320530353285302532853365302530c5320530353285302530453413a008b3a00d33a00fe3a0087537e53413a009e3a008b3a009b3a00a6530353413a00ec531153285302530053413a00f05311532853025300536a53413a00843a009f3a00db3a00eb5301536e53413a00d43a00b53a00de3a00c15378537253413a00d53a00b53a00de3a00c15378537153413a00e43a00bd3a00c83a00fb53795349531b533653025300530c5305530b5320530353285302530453413a00943a00863a00903a00845379533653025300530c5304530b5320530353285302530453413a00c93a00b63a009b3a00f25301533653025300530c5303530b5320530353285302530453413a008f3a00e53a00bb3a00bb537b533653025300530c5302530b5320530353285302530453413a00923a00f13a009f3a00e95304533653025300530c5301530b5320530353285302537853225302534253005337530353005320530253425300533753035308532053015320530353285302530c5320530353285302537853105303534153105310530c53225304532053035328530253785322530253295300530053375300530053205304532053025329530053085337530053085320530353285302530453413a008b3a00d33a00fe3a0087537e533653025300530c5300530b5300530b3a00e2530353015302537f5320530053205302536a5321530353025340530253405302534053205300532053015373534153035371534553045340532053005341530353715345530d53015320530253415300534c530d53015320530053215302530353405320530253205301532d53005300533a530053005320530153415301536a532153015320530253415301536a532253025341530353715345530d530353205302532053035349530d5300530b530c5302530b5302534053205303534153045349530d53005320530353415304536b53225304532053005349530d53005320530053215302530353405320530253205301532d53005300533a530053005320530253205301532d53005301533a530053015320530253205301532d53005302533a530053025320530253205301532d53005303533a530053035320530153415304536a532153015320530253415304536a5322530253205304534d530d5300530b530c5303530b5320530053215302530c5302530b5320530053215302530b53025340532053035341537c53715322530053413a00c053005349530d5300532053025320530053415340536a53225304534b530d530053035340532053025320530153285302530053365302530053205302532053015328530253045336530253045320530253205301532853025308533653025308532053025320530153285302530c53365302530c532053025320530153285302531053365302531053205302532053015328530253145336530253145320530253205301532853025318533653025318532053025320530153285302531c53365302531c532053025320530153285302532053365302532053205302532053015328530253245336530253245320530253205301532853025328533653025328532053025320530153285302532c53365302532c532053025320530153285302533053365302533053205302532053015328530253345336530253345320530253205301532853025338533653025338532053025320530153285302533c53365302533c5320530153415340536b532153015320530253415340536b5322530253205304534d530d5300530b530b5320530053205302534d530d53005303534053205302532053015328530253005336530253005320530153415304536a532153015320530253415304536a53225302532053005349530d5300530b530b5320530253205303534953045340530353405320530253205301532d53005300533a530053005320530153415301536a532153015320530253415301536a53225302532053035347530d5300530b530b530b3a00d4530253015302537f5302534053205300532053015346530d5300532053015320530053205302536a53225304536b5341530053205302534153015374536b534d5304534053205300532053015320530253105306530f530b53205300532053015373534153035371532153035302534053025340532053005320530153495304534053205303530d5302532053005341530353715345530d530153035340532053025345530d53045320530053205301532d53005300533a530053005320530153415301536a532153015320530253415301536b532153025320530053415301536a53225300534153035371530d5300530b530c5301530b5302534053205303530d5300532053045341530353715304534053035340532053025345530d5305532053005320530253415301536b53225302536a532253035320530153205302536a532d53005300533a5300530053205303534153035371530d5300530b530b5320530253415303534d530d530053035340532053005320530253415304536b53225302536a5320530153205302536a5328530253005336530253005320530253415303534b530d5300530b530b532053025345530d530253035340532053005320530253415301536b53225302536a5320530153205302536a532d53005300533a5300530053205302530d5300530b530c5302530b5320530253415303534d530d53005303534053205300532053015328530253005336530253005320530153415304536a532153015320530053415304536a532153005320530253415304536b5322530253415303534b530d5300530b530b532053025345530d5300530353405320530053205301532d53005300533a530053005320530053415301536a532153005320530153415301536a532153015320530253415301536b53225302530d5300530b530b530b3a00f0530253025302537f5301537e53025340532053025345530d53005320530053205301533a530053005320530053205302536a5322530353415301536b53205301533a5300530053205302534153035349530d53005320530053205301533a530053025320530053205301533a530053015320530353415303536b53205301533a530053005320530353415302536b53205301533a5300530053205302534153075349530d53005320530053205301533a530053035320530353415304536b53205301533a5300530053205302534153095349530d5300532053005341530053205300536b53415303537153225304536a532253035320530153413a00ff5301537153413a00813a00823a00845308536c53225300533653025300532053035320530253205304536b5341537c537153225302536a5322530153415304536b5320530053365302530053205302534153095349530d5300532053035320530053365302530853205303532053005336530253045320530153415308536b53205300533653025300532053015341530c536b5320530053365302530053205302534153195349530d5300532053035320530053365302531853205303532053005336530253145320530353205300533653025310532053035320530053365302530c5320530153415310536b532053005336530253005320530153415314536b532053005336530253005320530153415318536b53205300533653025300532053015341531c536b53205300533653025300532053025320530353415304537153415318537253225301536b53225302534153205349530d5300532053003a00ad53423a00813a00803a00803a00805310537e532153055320530153205303536a532153015303534053205301532053055337530353185320530153205305533753035310532053015320530553375303530853205301532053055337530353005320530153415320536a532153015320530253415320536b532253025341531f534b530d5300530b530b530b536953015303537f530253405320530053225301534153035371530453405303534053205301532d530053005345530d53025320530153415301536a53225301534153035371530d5300530b530b53035340532053015322530253415304536a5321530153205302532853025300532253035341537f53735320530353413a00813a00823a00845308536b537153413a00803a00813a00823a0084537853715345530d5300530b53035340532053025322530153415301536a5321530253205301532d53005300530d5300530b530b5320530153205300536b530b534753015301537f532053005310530953205300536a5321530053025340532053025345530d53005303534053205301532d53005300532253035345530d53015320530053205303533a530053005320530053415301536a532153005320530153415301536a532153015320530253415301536b53225302530d5300530b530b5320530053415300533a53005300530b5305530053413a00905312530b3a009553285301530b537f5323530053415310536b5322530b532453005302534053025340530253405302534053025340530253405302534053025340530253405320530053413a00f45301534d5304534053413a009453125328530253005322530653415310532053005341530b536a534153785371532053005341530b5349531b53225305534153035376532253005376532253015341530353715304534053025340532053015341537f537353415301537153205300536a532253025341530353745322530153413a00bc5312536a532253005320530153413a00c45312536a532853025300532253015328530253085322530453465304534053413a00945312532053065341537e5320530253775371533653025300530c5301530b532053045320530053365302530c5320530053205304533653025308530b5320530153415308536a532153005320530153205302534153035374532253025341530353725336530253045320530153205302536a5322530153205301532853025304534153015372533653025304530c530a530b5320530553413a009c531253285302530053225307534d530d530153205301530453405302534053415302532053005374532253025341530053205302536b5372532053015320530053745371532253005341530053205300536b53715368532253015341530353745322530053413a00bc5312536a532253025320530053413a00c45312536a532853025300532253005328530253085322530453465304534053413a00945312532053065341537e532053015377537153225306533653025300530c5301530b532053045320530253365302530c5320530253205304533653025308530b53205300532053055341530353725336530253045320530053205305536a53225308532053015341530353745322530153205305536b532253045341530153725336530253045320530053205301536a5320530453365302530053205307530453405320530753415378537153413a00bc5312536a5321530153413a00a85312532853025300532153025302537f532053065341530153205307534153035376537453225303537153455304534053413a009453125320530353205306537253365302530053205301530c5301530b53205301532853025308530b532153035320530153205302533653025308532053035320530253365302530c532053025320530153365302530c5320530253205303533653025308530b5320530053415308536a5321530053413a00a853125320530853365302530053413a009c531253205304533653025300530c530a530b53413a009853125328530253005322530a5345530d53015320530a534153005320530a536b5371536853415302537453413a00c45314536a5328530253005322530253285302530453415378537153205305536b5321530353205302532153015303534053025340532053015328530253105322530053455304534053205301532853025314532253005345530d5301530b5320530053285302530453415378537153205305536b53225301532053035320530153205303534953225301531b53215303532053005320530253205301531b532153025320530053215301530c5301530b530b5320530253285302531853215309532053025320530253285302530c5322530453475304534053413a00a45312532853025300531a53205302532853025308532253005320530453365302530c5320530453205300533653025308530c5309530b5320530253415314536a532253015328530253005322530053455304534053205302532853025310532253005345530d53035320530253415310536a53215301530b530353405320530153215308532053005322530453415314536a5322530153285302530053225300530d53005320530453415310536a532153015320530453285302531053225300530d5300530b5320530853415300533653025300530c5308530b5341537f532153055320530053413a00bf537f534b530d5300532053005341530b536a532253005341537853715321530553413a00985312532853025300532253085345530d53005341530053205305536b532153035302534053025340530253405302537f534153005320530553413a008053025349530d5300531a5341531f5320530553413a00ff3a00ff3a00ff5307534b530d5300531a532053055341532653205300534153085376536753225300536b537653415301537153205300534153015374536b5341533e536a530b5322530753415302537453413a00c45314536a532853025300532253015345530453405341530053215300530c5301530b5341530053215300532053055341531953205307534153015376536b53415300532053075341531f5347531b53745321530253035340530253405320530153285302530453415378537153205305536b5322530653205303534f530d530053205301532153045320530653225303530d530053415300532153035320530153215300530c5303530b5320530053205301532853025314532253065320530653205301532053025341531d5376534153045371536a532853025310532253015346531b5320530053205306531b53215300532053025341530153745321530253205301530d5300530b530b53205300532053045372534553045340534153005321530453415302532053075374532253005341530053205300536b5372532053085371532253005345530d5303532053005341530053205300536b5371536853415302537453413a00c45314536a53285302530053215300530b532053005345530d5301530b530353405320530053285302530453415378537153205305536b5322530253205303534953215301532053025320530353205301531b53215303532053005320530453205301531b5321530453205300532853025310532253015304537f53205301530553205300532853025314530b53225300530d5300530b530b532053045345530d53005320530353413a009c531253285302530053205305536b534f530d53005320530453285302531853215307532053045320530453285302530c5322530253475304534053413a00a45312532853025300531a53205304532853025308532253005320530253365302530c5320530253205300533653025308530c5307530b5320530453415314536a532253015328530253005322530053455304534053205304532853025310532253005345530d53035320530453415310536a53215301530b530353405320530153215306532053005322530253415314536a5322530153285302530053225300530d53005320530253415310536a532153015320530253285302531053225300530d5300530b5320530653415300533653025300530c5306530b5320530553413a009c531253285302530053225304534d5304534053413a00a8531253285302530053215300530253405320530453205305536b5322530153415310534f530453405320530053205305536a53225302532053015341530153725336530253045320530053205304536a532053015336530253005320530053205305534153035372533653025304530c5301530b53205300532053045341530353725336530253045320530053205304536a532253015320530153285302530453415301537253365302530453415300532153025341530053215301530b53413a009c53125320530153365302530053413a00a85312532053025336530253005320530053415308536a53215300530c5308530b5320530553413a00a053125328530253005322530253495304534053413a00a053125320530253205305536b5322530153365302530053413a00ac531253413a00ac53125328530253005322530053205305536a53225302533653025300532053025320530153415301537253365302530453205300532053055341530353725336530253045320530053415308536a53215300530c5308530b5341530053215300532053055341532f536a532253035302537f53413a00ec53155328530253005304534053413a00f45315532853025300530c5301530b53413a00f853155342537f53375302530053413a00f0531553423a00803a00a03a00803a00803a00803a0080530453375302530053413a00ec53155320530b5341530c536a53415370537153413a00d83a00aa3a00d53a00aa5305537353365302530053413a008053165341530053365302530053413a00d053155341530053365302530053413a00805320530b53225301536a532253065341530053205301536b5322530853715322530153205305534d530d530753413a00cc5315532853025300532253045304534053413a00c453155328530253005322530753205301536a5322530953205307534d530d530853205304532053095349530d5308530b5302534053413a00d05315532d530053005341530453715345530453405302534053025340530253405302534053413a00ac5312532853025300532253045304534053413a00d453155321530053035340532053045320530053285302530053225307534f530453405320530753205300532853025304536a53205304534b530d5303530b5320530053285302530853225300530d5300530b530b534153005310530e532253025341537f5346530d5303532053015321530653413a00f053155328530253005322530053415301536b53225304532053025371530453405320530153205302536b5320530253205304536a5341530053205300536b5371536a53215306530b5320530553205306534f530d530353413a00cc5315532853025300532253005304534053413a00c453155328530253005322530453205306536a5322530853205304534d530d530453205300532053085349530d5304530b532053065310530e53225300532053025347530d5301530c5305530b5320530653205302536b532053085371532253065310530e532253025320530053285302530053205300532853025304536a5346530d53015320530253215300530b532053005341537f5346530d5301532053065320530553415330536a534f530453405320530053215302530c5304530b53413a00f45315532853025300532253025320530353205306536b536a5341530053205302536b5371532253025310530e5341537f5346530d53015320530253205306536a532153065320530053215302530c5303530b532053025341537f5347530d5302530b53413a00d0531553413a00d05315532853025300534153045372533653025300530b532053015310530e53215302534153005310530e53215300532053025341537f5346530d5305532053005341537f5346530d53055320530053205302534d530d53055320530053205302536b532253065320530553415328536a534d530d5305530b53413a00c4531553413a00c4531553285302530053205306536a5322530053365302530053413a00c853155328530253005320530053495304534053413a00c8531553205300533653025300530b5302534053413a00ac5312532853025300532253035304534053413a00d4531553215300530353405320530253205300532853025300532253015320530053285302530453225304536a5346530d53025320530053285302530853225300530d5300530b530c5304530b53413a00a4531253285302530053225300534153005320530053205302534d531b53455304534053413a00a4531253205302533653025300530b534153005321530053413a00d853155320530653365302530053413a00d453155320530253365302530053413a00b453125341537f53365302530053413a00b8531253413a00ec531553285302530053365302530053413a00e053155341530053365302530053035340532053005341530353745322530153413a00c45312536a5320530153413a00bc5312536a532253045336530253005320530153413a00c85312536a532053045336530253005320530053415301536a53225300534153205347530d5300530b53413a00a053125320530653415328536b532253005341537853205302536b534153075371534153005320530253415308536a534153075371531b53225301536b5322530453365302530053413a00ac53125320530153205302536a5322530153365302530053205301532053045341530153725336530253045320530053205302536a5341532853365302530453413a00b0531253413a00fc5315532853025300533653025300530c5304530b53205300532d5300530c534153085371530d53025320530153205303534b530d53025320530253205303534d530d5302532053005320530453205306536a53365302530453413a00ac5312532053035341537853205303536b534153075371534153005320530353415308536a534153075371531b53225300536a5322530153365302530053413a00a0531253413a00a0531253285302530053205306536a5322530253205300536b5322530053365302530053205301532053005341530153725336530253045320530253205303536a5341532853365302530453413a00b0531253413a00fc5315532853025300533653025300530c5303530b5341530053215304530c5305530b5341530053215302530c5303530b53413a00a4531253285302530053205302534b5304534053413a00a4531253205302533653025300530b5320530253205306536a5321530153413a00d45315532153005302534053025340530253405302534053025340530253405303534053205301532053005328530253005347530453405320530053285302530853225300530d5301530c5302530b530b53205300532d5300530c5341530853715345530d5301530b53413a00d453155321530053035340532053035320530053285302530053225301534f530453405320530153205300532853025304536a5322530453205303534b530d5303530b5320530053285302530853215300530c5300530b5300530b5320530053205302533653025300532053005320530053285302530453205306536a533653025304532053025341537853205302536b534153075371534153005320530253415308536a534153075371531b536a5322530753205305534153035372533653025304532053015341537853205301536b534153075371534153005320530153415308536a534153075371531b536a532253065320530553205307536a53225305536b53215300532053035320530653465304534053413a00ac53125320530553365302530053413a00a0531253413a00a0531253285302530053205300536a532253005336530253005320530553205300534153015372533653025304530c5303530b53413a00a853125328530253005320530653465304534053413a00a853125320530553365302530053413a009c531253413a009c531253285302530053205300536a5322530053365302530053205305532053005341530153725336530253045320530053205305536a53205300533653025300530c5303530b5320530653285302530453225303534153035371534153015346530453405320530353415378537153215309530253405320530353413a00ff5301534d530453405320530653285302530c53225301532053065328530253085322530253465304534053413a0094531253413a009453125328530253005341537e5320530353415303537653775371533653025300530c5302530b532053025320530153365302530c5320530153205302533653025308530c5301530b532053065328530253185321530853025340532053065320530653285302530c5322530253475304534053205306532853025308532253015320530253365302530c5320530253205301533653025308530c5301530b530253405320530653415314536a5322530353285302530053225301530d53005320530653415310536a5322530353285302530053225301530d53005341530053215302530c5301530b530353405320530353215304532053015322530253415314536a5322530353285302530053225301530d53005320530253415310536a532153035320530253285302531053225301530d5300530b5320530453415300533653025300530b532053085345530d5300530253405320530653285302531c5322530153415302537453413a00c45314536a5322530453285302530053205306534653045340532053045320530253365302530053205302530d530153413a0098531253413a009853125328530253005341537e5320530153775371533653025300530c5302530b53205308534153105341531453205308532853025310532053065346531b536a53205302533653025300532053025345530d5301530b532053025320530853365302531853205306532853025310532253015304534053205302532053015336530253105320530153205302533653025318530b53205306532853025314532253015345530d530053205302532053015336530253145320530153205302533653025318530b5320530653205309536a53225306532853025304532153035320530053205309536a53215300530b53205306532053035341537e537153365302530453205305532053005341530153725336530253045320530053205305536a532053005336530253005320530053413a00ff5301534d530453405320530053415378537153413a00bc5312536a532153015302537f53413a00945312532853025300532253025341530153205300534153035376537453225300537153455304534053413a009453125320530053205302537253365302530053205301530c5301530b53205301532853025308530b532153005320530153205305533653025308532053005320530553365302530c532053055320530153365302530c5320530553205300533653025308530c5303530b5341531f532153035320530053413a00ff3a00ff3a00ff5307534d53045340532053005341532653205300534153085376536753225301536b537653415301537153205301534153015374536b5341533e536a53215303530b532053055320530353365302531c53205305534253005337530253105320530353415302537453413a00c45314536a532153015302534053413a00985312532853025300532253025341530153205303537453225304537153455304534053413a00985312532053025320530453725336530253005320530153205305533653025300530c5301530b532053005341531953205303534153015376536b53415300532053035341531f5347531b5374532153035320530153285302530053215302530353405320530253225301532853025304534153785371532053005346530d5303532053035341531d53765321530253205303534153015374532153035320530153205302534153045371536a5322530453285302531053225302530d5300530b5320530453205305533653025310530b5320530553205301533653025318532053055320530553365302530c5320530553205305533653025308530c5302530b53413a00a053125320530653415328536b532253005341537853205302536b534153075371534153005320530253415308536a534153075371531b53225301536b5322530853365302530053413a00ac53125320530153205302536a5322530153365302530053205301532053085341530153725336530253045320530053205302536a5341532853365302530453413a00b0531253413a00fc531553285302530053365302530053205303532053045341532753205304536b534153075371534153005320530453415327536b534153075371531b536a5341532f536b53225300532053005320530353415310536a5349531b532253015341531b5336530253045320530153413a00dc53155329530253005337530253105320530153413a00d4531553295302530053375302530853413a00dc53155320530153415308536a53365302530053413a00d853155320530653365302530053413a00d453155320530253365302530053413a00e05315534153005336530253005320530153415318536a532153005303534053205300534153075336530253045320530053415308536a532153025320530053415304536a5321530053205302532053045349530d5300530b53205301532053035346530d530353205301532053015328530253045341537e5371533653025304532053035320530153205303536b5322530253415301537253365302530453205301532053025336530253005320530253413a00ff5301534d530453405320530253415378537153413a00bc5312536a532153005302537f53413a00945312532853025300532253015341530153205302534153035376537453225302537153455304534053413a009453125320530153205302537253365302530053205300530c5301530b53205300532853025308530b532153015320530053205303533653025308532053015320530353365302530c532053035320530053365302530c5320530353205301533653025308530c5304530b5341531f532153005320530253413a00ff3a00ff3a00ff5307534d53045340532053025341532653205302534153085376536753225300536b537653415301537153205300534153015374536b5341533e536a53215300530b532053035320530053365302531c53205303534253005337530253105320530053415302537453413a00c45314536a532153015302534053413a00985312532853025300532253045341530153205300537453225306537153455304534053413a00985312532053045320530653725336530253005320530153205303533653025300530c5301530b532053025341531953205300534153015376536b53415300532053005341531f5347531b5374532153005320530153285302530053215304530353405320530453225301532853025304534153785371532053025346530d5304532053005341531d53765321530453205300534153015374532153005320530153205304534153045371536a5322530653285302531053225304530d5300530b5320530653205303533653025310530b5320530353205301533653025318532053035320530353365302530c5320530353205303533653025308530c5303530b53205301532853025308532253005320530553365302530c53205301532053055336530253085320530553415300533653025318532053055320530153365302530c5320530553205300533653025308530b5320530753415308536a53215300530c5305530b53205301532853025308532253005320530353365302530c53205301532053035336530253085320530353415300533653025318532053035320530153365302530c5320530353205300533653025308530b53413a00a053125328530253005322530053205305534d530d530053413a00a053125320530053205305536b5322530153365302530053413a00ac531253413a00ac53125328530253005322530053205305536a53225302533653025300532053025320530153415301537253365302530453205300532053055341530353725336530253045320530053415308536a53215300530c5303530b53413a00905312534153305336530253005341530053215300530c5302530b53025340532053075345530d5300530253405320530453285302531c5322530053415302537453413a00c45314536a5322530153285302530053205304534653045340532053015320530253365302530053205302530d530153413a00985312532053085341537e532053005377537153225308533653025300530c5302530b53205307534153105341531453205307532853025310532053045346531b536a53205302533653025300532053025345530d5301530b532053025320530753365302531853205304532853025310532253005304534053205302532053005336530253105320530053205302533653025318530b53205304532853025314532253005345530d530053205302532053005336530253145320530053205302533653025318530b53025340532053035341530f534d53045340532053045320530353205305536a532253005341530353725336530253045320530053205304536a5322530053205300532853025304534153015372533653025304530c5301530b53205304532053055341530353725336530253045320530453205305536a53225302532053035341530153725336530253045320530253205303536a532053035336530253005320530353413a00ff5301534d530453405320530353415378537153413a00bc5312536a532153005302537f53413a00945312532853025300532253015341530153205303534153035376537453225303537153455304534053413a009453125320530153205303537253365302530053205300530c5301530b53205300532853025308530b532153015320530053205302533653025308532053015320530253365302530c532053025320530053365302530c5320530253205301533653025308530c5301530b5341531f532153005320530353413a00ff3a00ff3a00ff5307534d53045340532053035341532653205303534153085376536753225300536b537653415301537153205300534153015374536b5341533e536a53215300530b532053025320530053365302531c53205302534253005337530253105320530053415302537453413a00c45314536a532153015302534053025340532053085341530153205300537453225306537153455304534053413a00985312532053065320530853725336530253005320530153205302533653025300530c5301530b532053035341531953205300534153015376536b53415300532053005341531f5347531b5374532153005320530153285302530053215305530353405320530553225301532853025304534153785371532053035346530d5302532053005341531d53765321530653205300534153015374532153005320530153205306534153045371536a5322530653285302531053225305530d5300530b5320530653205302533653025310530b5320530253205301533653025318532053025320530253365302530c5320530253205302533653025308530c5301530b53205301532853025308532253005320530253365302530c53205301532053025336530253085320530253415300533653025318532053025320530153365302530c5320530253205300533653025308530b5320530453415308536a53215300530c5301530b53025340532053095345530d5300530253405320530253285302531c5322530053415302537453413a00c45314536a5322530153285302530053205302534653045340532053015320530453365302530053205304530d530153413a009853125320530a5341537e5320530053775371533653025300530c5302530b53205309534153105341531453205309532853025310532053025346531b536a53205304533653025300532053045345530d5301530b532053045320530953365302531853205302532853025310532253005304534053205304532053005336530253105320530053205304533653025318530b53205302532853025314532253005345530d530053205304532053005336530253145320530053205304533653025318530b53025340532053035341530f534d53045340532053025320530353205305536a532253005341530353725336530253045320530053205302536a5322530053205300532853025304534153015372533653025304530c5301530b53205302532053055341530353725336530253045320530253205305536a53225304532053035341530153725336530253045320530353205304536a5320530353365302530053205307530453405320530753415378537153413a00bc5312536a5321530053413a00a85312532853025300532153015302537f534153015320530753415303537653745322530553205306537153455304534053413a009453125320530553205306537253365302530053205300530c5301530b53205300532853025308530b532153065320530053205301533653025308532053065320530153365302530c532053015320530053365302530c5320530153205306533653025308530b53413a00a853125320530453365302530053413a009c531253205303533653025300530b5320530253415308536a53215300530b5320530b53415310536a5324530053205300530b3a00cb530b53015307537f53025340532053005345530d53005320530053415308536b532253025320530053415304536b5328530253005322530153415378537153225300536a532153055302534053205301534153015371530d5300532053015341530353715345530d5301532053025320530253285302530053225301536b5322530253413a00a453125328530253005349530d53015320530053205301536a5321530053413a00a85312532853025300532053025347530453405320530153413a00ff5301534d5304534053205301534153035376532153015320530253285302530c53225303532053025328530253085322530453465304534053413a0094531253413a009453125328530253005341537e5320530153775371533653025300530c5303530b532053045320530353365302530c5320530353205304533653025308530c5302530b532053025328530253185321530653025340532053025320530253285302530c5322530153475304534053205302532853025308532253035320530153365302530c5320530153205303533653025308530c5301530b530253405320530253415314536a5322530453285302530053225303530d53005320530253415310536a5322530453285302530053225303530d53005341530053215301530c5301530b530353405320530453215307532053035322530153415314536a5322530453285302530053225303530d53005320530153415310536a532153045320530153285302531053225303530d5300530b5320530753415300533653025300530b532053065345530d5301530253405320530253285302531c5322530453415302537453413a00c45314536a5322530353285302530053205302534653045340532053035320530153365302530053205301530d530153413a0098531253413a009853125328530253005341537e5320530453775371533653025300530c5303530b53205306534153105341531453205306532853025310532053025346531b536a53205301533653025300532053015345530d5302530b532053015320530653365302531853205302532853025310532253035304534053205301532053035336530253105320530353205301533653025318530b53205302532853025314532253035345530d530153205301532053035336530253145320530353205301533653025318530c5301530b5320530553285302530453225301534153035371534153035347530d530053413a009c53125320530053365302530053205305532053015341537e537153365302530453205302532053005341530153725336530253045320530053205302536a53205300533653025300530f530b5320530253205305534f530d530053205305532853025304532253015341530153715345530d5300530253405320530153415302537153455304534053413a00ac53125328530253005320530553465304534053413a00ac53125320530253365302530053413a00a0531253413a00a0531253285302530053205300536a5322530053365302530053205302532053005341530153725336530253045320530253413a00a853125328530253005347530d530353413a009c53125341530053365302530053413a00a8531253415300533653025300530f530b53413a00a853125328530253005320530553465304534053413a00a853125320530253365302530053413a009c531253413a009c531253285302530053205300536a5322530053365302530053205302532053005341530153725336530253045320530053205302536a53205300533653025300530f530b5320530153415378537153205300536a53215300530253405320530153413a00ff5301534d5304534053205301534153035376532153015320530553285302530c53225303532053055328530253085322530453465304534053413a0094531253413a009453125328530253005341537e5320530153775371533653025300530c5302530b532053045320530353365302530c5320530353205304533653025308530c5301530b532053055328530253185321530653025340532053055320530553285302530c5322530153475304534053413a00a45312532853025300531a53205305532853025308532253035320530153365302530c5320530153205303533653025308530c5301530b530253405320530553415314536a5322530453285302530053225303530d53005320530553415310536a5322530453285302530053225303530d53005341530053215301530c5301530b530353405320530453215307532053035322530153415314536a5322530453285302530053225303530d53005320530153415310536a532153045320530153285302531053225303530d5300530b5320530753415300533653025300530b532053065345530d5300530253405320530553285302531c5322530453415302537453413a00c45314536a5322530353285302530053205305534653045340532053035320530153365302530053205301530d530153413a0098531253413a009853125328530253005341537e5320530453775371533653025300530c5302530b53205306534153105341531453205306532853025310532053055346531b536a53205301533653025300532053015345530d5301530b532053015320530653365302531853205305532853025310532253035304534053205301532053035336530253105320530353205301533653025318530b53205305532853025314532253035345530d530053205301532053035336530253145320530353205301533653025318530b53205302532053005341530153725336530253045320530053205302536a532053005336530253005320530253413a00a853125328530253005347530d530153413a009c531253205300533653025300530f530b53205305532053015341537e537153365302530453205302532053005341530153725336530253045320530053205302536a53205300533653025300530b5320530053413a00ff5301534d530453405320530053415378537153413a00bc5312536a532153015302537f53413a00945312532853025300532253035341530153205300534153035376537453225300537153455304534053413a009453125320530053205303537253365302530053205301530c5301530b53205301532853025308530b532153005320530153205302533653025308532053005320530253365302530c532053025320530153365302530c5320530253205300533653025308530f530b5341531f532153045320530053413a00ff3a00ff3a00ff5307534d53045340532053005341532653205300534153085376536753225301536b537653415301537153205301534153015374536b5341533e536a53215304530b532053025320530453365302531c53205302534253005337530253105320530453415302537453413a00c45314536a5321530753025340530253405302534053413a00985312532853025300532253035341530153205304537453225301537153455304534053413a009853125320530153205303537253365302530053205307532053025336530253005320530253205307533653025318530c5301530b532053005341531953205304534153015376536b53415300532053045341531f5347531b5374532153045320530753285302530053215301530353405320530153225303532853025304534153785371532053005346530d5302532053045341531d53765321530153205304534153015374532153045320530353205301534153045371536a5322530753415310536a53285302530053225301530d5300530b53205307532053025336530253105320530253205303533653025318530b532053025320530253365302530c5320530253205302533653025308530c5301530b53205303532853025308532253005320530253365302530c53205303532053025336530253085320530253415300533653025318532053025320530353365302530c5320530253205300533653025308530b53413a00b4531253413a00b4531253285302530053415301536b532253005341537f53205300531b533653025300530b530b534753015302537f53413a00fc5311532853025300532253015320530053415307536a53415378537153225302536a532153005302534053205302534153005320530053205301534d531b530d530053205300533f5300534153105374534b530d530053413a00fc53115320530053365302530053205301530f530b53413a00905312534153305336530253005341537f530b5304530053235300530b530653005320530053245300530b531053005323530053205300536b534153705371532253005324530053205300530b530b3a00c953095308530053413a00805308530b5311532653333a0086533053713a00db3a00c65360533653543a0087536a53433a00eb537c3a00a2531b530053413a00a05308530b53115347533253105336532b3a00f93a00a053293a00c53a009e535d3a00c1533d5325536b3a008b530f530053413a00c05308530b3a009153013a00ae5379533f3a008b53283a008b3a00b353093a00ae532153703a00ae5329533d53333a00a2536d534a53623a00a7535153083a00ab3a00fd3a00ff535b3a008953543a008c3a00de3a00dc3a00bf5360537053183a008253733a00903a00d7536c534c531053313a00b9537e3a00d63a00d93a00c353123a00ea53443a00f853713a00e33a00c23a00c13a00eb3a009d3a00d03a00fa3a00845322531d3a00f953133a00ea53693a00da53363a00ff3a00b03a00f3530453013a00c8537e3a00be3a009a3a00c03a00855321533a53613a00b3530b53223a0083533453403a00ed3a00b35314530153475321533e3a00ac3a00e253013a00c63a00c33a00bb3a00a55352534b3a00963a00ad3a00dc3a00ad53513a00f23a00e83a00c153253a00c93a00f95363534e530c533c3a00e03a00d93a00b53a00db3a00cc5330534153763a00e9534a3a00a73a00b6534a53763a008553223a00a23a00a13a009553415353530e53383a00b3533b530053413a00e05309530b531153633a00dc53063a00913a00e53a00fb532e3a00803a00e35359536c537553543a00943a00dc3a00df3a00c0530053413a0080530a530b53113a00833a00b83a00f73a00df53323a00e353703a00b43a00f8531a3a00823a00cf537f53393a00de3a00d03a00ba530053413a00a0530a530b53113a00d33a00eb3a00e053513a00f43a00f453745364533f3a00c13a00bd53583a00ed5379532853473a00fe530053413a00c0530a530b53113a00d9532953583a00e153703a00db53103a00f43a00943a00d6530a3a00d53a00d23a00af3a00a753525329530053413a00e0530a530b3a009f530753223a00aa536253213a00fe53393a00d55378535c53225348533d53395331535853593a00bf5300530053003a00df3a00ff5371532a3a00b73a00da53043a009a3a00a453085344536d53643a00f6532d53363a00d63a00aa3a00b55344532353563a00a23a0090537f3a00883a008a3a00e2534a3a00c0531c3a00963a00e13a00df53003a00b7533c531b3a00f33a0089533d534d3a00953a00c453073a00b3532e53445369531c5314531c3a00f73a009c533d534e5369532b3a00cd53233a00b9532d53625324535f3a00bd53183a00823a00c43a0090531f531d537353175335537053175337536e3a0090532453175353530a3a008f53713a009b3a00f7534d3a00af3a00ff3a00883a00db3a00ec53343a008e532c534453593a00bd3a00ec53233a00d03a00df535553523a00d33a00d33a00e33a00ab532853703a00933a00a13a00c63a00ca53663a00ba3a009a3a00ea53505321535c531b3a00953a00a353033a00893a00cc3a00903a00a7531a3a00ab535a53563a00c253463a00ae53323a00a63a008953733a008f535c3a00863a0087534a537b3a00ef533053023a00a953135319533f3a00b2532e5319535a533053143a009553143a008d53203a00935335534e5327537e3a00b8531353003a00ea537f535853275346537d3a008a533c533a53683a00af3a00bd536a533b532b53765367533c3a00c7533d5301537e3a00ad53153a00a1536e532d53483a00c03a009c3a0083530e532853373a00bf53793a00903a00ad3a00fb3a008b5367537653123a00db536a536d3a00d653353a00d03a00af535153503a00953a00a93a00bc53723a00993a00b13a00d13a00a83a00b353323a00f43a00dc3a008e3a00b6532a533b3a00a7533f5322537753503a00ef3a008a3a00ba3a008853273a00d553123a00e93a00cc53265365530f53013a00d33a00fe3a00bb536e530b3a008c534e3a00b3537b3a00d53a00873a00cc3a00fe3a00fd3a00f23a00e7536a3a00f05302532c532053043a00f0534e531553775372530653163a00c25369531153023a00bd3a00c4536e53605319535a3a008253243a00af53313a00cd53383a00e05361532a535e3a00cb537f3a008f53763a00a93a00c153763a00bf3a00bf3a00ae534e3a00a3533e3a00f1533353553a00d2532a3a00cd3a00ae53503a009c3a00ba3a00dd535b3a00f73a00ad532a3a00af3a00ca3a00c253623a00c23a00d95304535a53733a00d53a00f93a00b653185315535f3a009d3a00ad534b533c3a00ff3a00f23a00f63a00af3a00c23a00853a00f93a00af532b532d3a00bb5376537e3a00d2532d3a00f03a00db5318533a3a008e3a00fb531b3a00fa3a00be537e3a00d853373a00ae3a008153573a00b93a00fd53745335534e53323a00a1534c3a009353383a00a53a00993a00d23a00f33a00d23a00843a00a95323531a537e3a008753015348531b3a00ae3a00ac53715310533853163a00b03a00f853183a00ec5364534353535330531253093a00c33a00b4537753323a00d93a00a33a00d33a00ea3a00d653203a00da5345533e53003a00a753583a00973a00cb531753223a00fc5321534d531f3a00b653663a00ad531c3a00b43a00c73a00cf5368532f3a00f7534b533653483a008053563a00a85372532b5359532b3a00df530b3a00d23a00933a00a73a00a953683a00c13a00b43a00d53a00be533b5300530d3a00a63a00f73a00eb3a00d2530c3a00ef535e3a00f4530e533153623a00b353793a00fe3a00ca534353043a00c73a00e5531e3a00b153613a00fa53263a009c3a00e73a00d93a009c536153163a00c6532e5302533b3a00ab537153395329534a532f3a00d93a00d83a00af3a00e23a008253163a00d13a00ef536d3a00d953013a00e13a00f43a00963a00ac3a009f531d534f530d3a00d43a00f5534f535b3a00e73a00bc3a00a2533d53533a008c3a00c63a00ec3a00af532c3a00c33a0084531a3a00dc534253653a00a3536d3a00aa5310532c5362534f3a008353133a009b3a00cf5367530b53315315534f3a00fe535b535d5355534d531b3a00b753663a00bb3a00b453555315535253453a008a5300537053103a00ac531a3a00aa5310530d3a008453433a00c43a0084532d5330537b3a00ef3a00d53a00c43a00f153053a00ff3a00993a00ef3a00d253535301533f532c3a00e43a008153343a00883a00ef530d535e53063a00c33a00a553523a00c23a00b253635346536a3a00ae3a00f33a00a8532a53123a00d953543a00c4534a3a00bb53573a00dc3a00da53003a00e253633a00bb3a0097532d3a00eb532953163a00f23a00f53a00e63a00c83a00a053483a00d453333a00df535c3a00fe533b3a00af5328532a3a00ce3a00c03a00903a00a253423a00e9534c536a3a00ec532e53013a00b6533b5333531853533a00873a00bf3a008e5365531c53643a00ac3a00e453493a009b533053183a00fa5327530b53093a00f43a00fc530c535a3a00f03a00f853733a00c45373536a3a00933a00973a00d753603a00df5331532a53033a00c353463a00b2535d53373a00e6531f3a00f9536953523a00e653073a00d43a00c43a00cd3a00a53a00bd3a00963a00df3a00af3a00d03a00a13a00bc53605328530a3a00af536e53433a00a43a00ae536b3a00b23a00b53a00c153793a00955362533c53373a00f83a00e253363a00df3a00c8532a3a00843a00c6536d5322533553643a00e853403a00a3533f537553163a00b6536a3a00ad533d3a00ea53165322532e3a009b536a534253283a00b7530a3a0086536753643a008d3a00d853295315534f532a3a008f3a00bf537d536b3a00f053053a00d55304530c3a00fa3a00f85379535e5338534953343a0087537a533753363a00d43a00d73a00fa3a00eb3a00e153733a00c5535b53053a00bb53133a00ca530d3a00df3a009253263a00ca532d3a00c8537d3a008353605361537b3a00f53a0092530f53485337535f535b53523a00875366537553483a00e93a00f353173a00b63a009b53633a00b53a00d23a00ba3a00e93a00d3536953633a00ac530b3a00b1533e3a008b535d3a00903a00fa3a00cd3a00d13a009153483a00803a00935350537a534b3a00c03a00df3a00e6537753303a008f3a0091535b3a00893a00ad3a00eb533353775310530b5301318e3e3800760c005a0020570076130138007722000e050a4a1c5100070a0700040a3800783100003800804101403800814101413800825700845700812e173f014200085a69727f68757372096c6e73687368656c790868734f686e75727b047f7d707004727d7179077572787964537a067e736972783c0d47727d68756a793c7f73787941064f686e75727b0c7a6e73715f747d6e5f737879012d0875727f706978796f057d6c6c706509697278797a757279780e747d6f536b724c6e736c796e6865012a0f47737e76797f683c4b757278736b41012e0d7f74797f773c787372793d3d3d067079727b6874022d2a0b43436f7f7479786970796e022e2d117d7878487d6f774b7568744e796f69706821432e782a7e28292d2424292b7e29782e2f292979297e7825242c252a252d7e2828046874797221437a292e2f2c2d2c7f78247f7a297a7e2b292e292c782d7a7f2e7a2a2b2d7f2b2f087f252f7e28787d2f012b087a69727f687573720b64667d64787d6f786f7d78056f6c70756801160b7f73726f7370793270737b0878797e697b7b796e057f7d687f740124012c0372736b056f74757a68066e7976797f68027a72076e796f73706a790d687571794e79717d757275727b097173696f7971736a79066f7f6e7370700777796578736b72057f70757f77107d7878596a79726850756f687972796e06537e76797f68046c696f74077d7878487d6f77067f73727f7d68214379792c2d2578252f252c2c787f79792e7e787d7a7e7929242528792a7f247d2521432d2a2d25782a252b2f29792d7828242c7d2b2e782b792c2d7f287d282c7e2b7a2143292a2d2a7a2f2e2a7d7d7e7f292e28787a292b7d29787f7f2b2a2a28252b7d2c2143252c287e242c2d2d792f2e2e7d292a282a787f282c247e287e2e2a2e24292b2921437a2e2a782a287a2d2d797e2c7a2e2b2f2d782d782c2f7a7d7e7f7a242b7f297f0878737f69717972680b4b797e5d6f6f79717e70650771796f6f7d7b79056f687d7f77214325257f2a2f7a2c7e2a29257e2879792e797a2d2b7f2a282e7d2c782f2829797e207d6c242537335d4c4d4e4f68494a517879525346696a6b644b44457a7b6d6e6f205a4850742f73757677702829575b5455565e5f2a7e7f65662c2d2e58592b7172214378782a2e2d2c2c792d792b2c782d2a7f7a292c797f2d252f2a7e2d7a2b282b2c2025252b29282d2c2a2a2f2f7a2528782f292c787e2f2878292824782a2c252d7d20517a7b6d6e6f7e7f65664c4d4e4f68696a5f2b7172292c2d5455565e732e58592045467d7677702a2f5b6c242537335d28494a5a4857787952536b644b445074752143792d792a24252f2b2b7f2c7a7e787e797e2b7a292b2f7a2d282b2b2f2a282b250771726f2c2d2c2d21432a2a2c2a2e28242b7f7a2d2c2f2a2e2e282b297d2e7a257e2d2b78242e252f790771726f2c2e2c2d05786f6f686f047a6e73710679727f737879057a7073736e066e7d727873710a282e2528252a2b2e2529022d2f0670737d78686f09242c2b24282c282424056f70757f79027d2d09646f797f7d6c6c75780369727721432b2a297e287d2e2e242c24252f2f2c242e2a242a292e2979247d782d24252e79214325292c2e2a787a2a297e7d7f78792e2d2e2c2e2579287f792529242c7d7f2d240143067f746e737179053442603c350d21344742274136353427603835067f737377757905717d687f74066f697e6f686e0a282e2528252a2b2e252a065e697a7a796e045a6e737109696f796e5d7b7972680878756f7f736a796e0b64746f78756f7f736a796e064e797b59646c0932367d72786e7375780175077d72786e7375781234754c7473727960754c737860754c7d78350375736f08323671737e757079056c74737279026c7f03736c6e05736c796e7d0f717366557272796e4f7f6e797972451158796a757f79517368757372596a7972681658796a757f79536e757972687d68757372596a7972680d696f796e5d7b797268587d687d0b7f73726f686e697f68736e0468796f680b5448515059707971797268066f7d7a7d6e75106c696f74527368757a757f7d687573722147737e76797f683c4f7d7a7d6e754e7971736879527368757a757f7d68757372410c78737f6971797268517378790a4f68657079517978757d08727d6a757b7d687909727d6a757b7d68736e0359787b027579077a756e797a73640479787b79147b7968597079717972686f5e65487d7b527d71790136037d787807687d7b527d71790b687350736b796e5f7d6f79697079683c792178737f6971797268327b7968597079717972686f5e65487d7b527d7179343e363e3530682172796b3c4f7968277a736e347079683c7d3c737a3c793568327d7878347d32687d7b527d717932687350736b796e5f7d6f79343535276e7968696e723c680b7a6e73715972686e75796f02273c03717d6c0121056b797e557804736c7972044c534f48277468686c6f2633337d6c71317a793264757d737473727b6f7469327f7371337d6c7533787d687d106f79684e796d69796f6854797d78796e0c5f7372687972683148656c79107d6c6c70757f7d6875737233766f7372087e75663168656c79067d6c71437a79096f686e75727b757a65046b7d6c48137f73726879646843727d7179486e7d7f77796e0a64746f436b797e6f7877147f737268796468437d6e68757a7d7f68527d71790c6b797e71726f43796e6e736e1071797d6f696e797179726843727d71790870737f7d6875737204746e797a0d7f737268796468436e73696879117f73726879646843696f796e5d7b797268077d6c6c527d71790f7f737268796468437d6c6c527d71790179057d6c6c7578057964686e7d016a056b797e757801681071797d6f696e797179726843787d687d046f79727802686881286868216868373e5a4857787952536b644b4445467d6c242537335d28494a5074757677702a2f5b3e273c7079683c382168327079727b6874306e214741277a736e347079683c79212c27792038277937212f35677079683c73216847794130702179372d203823684779372d41262c30722179372e203823684779372e41262c3069217320202d2a60702020246072305a2147692222222d243a2a2f30692222222d2e3a2a2f30692222222a3a2a2f302a2f3a694130432138317922212f232c262f313438317935277a736e347079683c7a212c277a20283143277a3737356e326c696f74346868327f747d6e5d68345a477a413535277a736e347079683c74212c2774204327743737356e326c696f74343e213e35616e7968696e723c6e3276737572343e3e35016e017280956a7d6e3c68216e327079727b6874307d216820202e27757a347235676a7d6e3c79216e4768312d4127757a347920347d31212835312f606079227d356e7968696e723c72697070277d2179617a736e346a7d6e3c7a2172796b3c49757268245d6e6e7d65347d353075212c2775207d27373775357a477541216e477522222e41222234342f3a753520202f35276e7968696e723c7a80916a7d6e3c6830792172327079727b6874307d217922222e27342f3a79353d212c3a3a37377d306e2334682172796b3c497572682f2e5d6e6e7d65347d372d3535477d41217926682172796b3c497572682f2e5d6e6e7d65347d35277a736e346a7d6e3c73212c27732079273737733568477322222e41602172477341202034342f3a733520202f35276e7968696e723c683e757a3472327079727b6874202d2a35676a7d6e3c792172796b3c49757268245d6e6e7d65342d2a352779326f796834723530722179616e7968696e723c7281346a7d6e3c64307d3079307230383073307a216e327079727b68743070217a312d277a736e347d216e4770413079212c3073212c60517d6874327a7073736e342a37292e337a352773222c2731317335676a7d6e3c71216b757278736b3243257924292528282a2e2e2524282d7d7d2d7878252c29787d2c2c782e2d28297a347935277a736e3438212c30722171472c4130792171472d4127382070273737383564216e4738372d41307d216e47384137216b757278736b32437e25242c282d2b78297e7f782b2a7f2d79792e247e242a2b7d282f2e792e7d2c34793064307d303830723068352764216e472c41307d216e47704137216b757278736b32437e25242c282d2b78297e7f782b2a7f2d79792e247e242a2b7d282f2e792e7d2c34793064307d30383072306835616e7968696e723c6e226e7968696e723c72796b3c4879646859727f7378796e34353279727f73787934793502792a0428242f7f0a7d2e7d2d79797829792f81866e7968696e72343e6f686e75727b3e212168656c79737a3c683a3a3468216b757278736b32432b2a297e287d2e2e242c24252f2f2c242e2a242a292e2979247d782d24252e7934683535303e6f686e75727b3e212168656c79737a3c6e3a3a346e216b757278736b32432b2a297e287d2e2e242c24252f2f2c242e2a242a292e2979247d782d24252e79346e3535307269707021216860602c21212168327079727b6874352368266b757278736b32432c2b7d2825242e7e242c2e257d7d7a28247f287e287825297e7f2b287e787e25346b757278736b32432c7828242c782f2b2d2f787879792d29292b7d7e2e792a2e2f2b2c2c79782b7e346b757278736b32432d7f252e2c247e7f7a7e2e7e7a2b2825287f7d2b7a7a7e7e2e2e252d2d7a25783468303d2c35306b757278736b32432d7f252e2c247e7f7a7e2e7e7a2b2825287f7d2b7a7a7e7e2e2e252d2d7a2578346b757278736b32437f242d2824252b792a782e7f2d2a7e2b2b282d297d2a2c252b257d257d252c25346e35303d2d3535303d2d35526a7d6e3c6e212c604327757a346e202d2e24356e7968696e72476e41276a7d6e3c69216e392d2e243072214741276e7968696e723c72326c696f743469372d2e24302d2e2b3a346e316935332d2e2435307280906a7d6e3c69216e2222222c27757a3469202d2a2f2428356e7968696e723c6b757278736b32432d7e2b7f28782a2b2c292a282e7f7e2a7924292c2a257e7878797d28792c2d79346935276a7d6e3c79214741277873676a7d6e3c72212d2e2b3a69273469222222212b353a3a347260212d2e24353079326c696f74347235616b74757079346935276e7968696e723c790a736968796e4b757868740a757272796e4b757868740b736968796e5479757b74680b757272796e5479757b74680e78797a7572794c6e736c796e6865037b79680e7f73726f7370793270737b34793505596e6e736e0f6f687d7f77486e7d7f795075717568013f067e736868737103797578037079720368736c223423267f746e7371793179646879726f7573722640334033353447423f4033413735047964797f076e796c707d7f790934406e407260406e35017b1634323740333464746f7f7872354033604235323740720240720579716c686504796a7d70107f746e7371793179646879726f7573720970737f7d7074736f68092d2e2b322c322c322d097d727372657173696f047a7570790943436c6e7368734343096b797e786e756a796e187b7968536b724c6e736c796e686558796f7f6e756c68736e0f78737f69717972685970797179726816434f7970797275697143555859434e797f736e78796e0c7f7d70704f7970797275697109436f797079727569711543436b797e786e756a796e436f7f6e756c68437a72114343786e756a796e43796a7d70697d68791443436b797e786e756a796e43796a7d70697d68791343436f7970797275697143796a7d70697d68791343437a64786e756a796e43796a7d70697d6879124343786e756a796e4369726b6e7d6c6c79781543436b797e786e756a796e4369726b6e7d6c6c79781443436f797079727569714369726b6e7d6c6c79781443437a64786e756a796e4369726b6e7d6c6c79781743436b797e786e756a796e436f7f6e756c68437a69727f0c7b79685d68686e757e696879086f7970797275697106786e756a796e217f787f437d78734d6c737d6f727a7d2b2a6c7a7f4650717f7a70434f65717e7370207f787f437d78734d6c737d6f727a7d2b2a6c7a7f4650717f7a70435d6e6e7d65227f787f437d78734d6c737d6f727a7d2b2a6c7a7f4650717f7a70434c6e7371756f79194343386b797e786e756a796e5d6f65727f5964797f6968736e104343707d6f684b7d68756e5d70796e68124343707d6f684b7d68756e5f73727a756e71114343707d6f684b7d68756e4c6e73716c681243436b797e786e756a796e5a69727f7b797e1043436b797e786e756a796e43437f746e1b43436b797e786e756a796e436f7f6e756c68437a69727f687573720e7f7d707079784f79707972756971146b7d68757259646c6e796f6f757372596e6e736e156b7d68757259646c6e796f6f7573724e796f6970680a7f737272797f68757372036e6868037f6f750b6c796e71756f6f7573726f056d69796e65067f7d71796e7d056f687d6879077b6e7d7268797803747d6f0b6c707d6f7173317f6f6975037d7e6f09756f486e696f687978096873697f7471736a7905777965696c047e7378650b6e7971736a795f74757078037d70700d7f6e797d6879597079717972680575726c6968017d067d6c6c7972780164166e7968696e723c78737f6971797268327d7070346435107b79685972686e75796f5e6548656c790558797e697b1a73726e796f73696e7f7968757175727b7e697a7a796e7a69707021432e7e2f7e797e2b252a2e7a2b2c2d287f242d7e2e2a2c7a247d7d2d24252c7e79024741074e797a70797f68063c474234413604517d687404587d6879064f7f6e797972056b757868740a5173696f79596a7972680971736a79717972684409527d6a757b7d68736e086c707d687a736e711243436b64766f4379726a756e7372717972680b717572756c6e737b6e7d71077e6e736b6f796e0a43436b644b797e59726a1343436b64766f43756f436b776b797e6a75796b0e4b7975647572564f5e6e75787b79137b7968536b724c6e736c796e6865527d71796f0383857277088385727a75727568650483857268700b75726f687d7268757d687906517971736e650775727568757d7006717971736e650379726a0875726f687d727f790779646c736e686f067e697a7a796e06717d7070737f036f796823646543787d7d252e2a24247a7a252f2c25792d7d2e25782e292e2e287a782c2d2a287d2143782d7e28787a2a28797e2d292e7d7d2d782e2879242e7a257e782c7e7a792b7e047a6e7979236465437f7d2879787d2e2a282e7928257f2f2f242d2d29247a2a7e2c257e2c2d292a2b236465432a7a29782d2d7e78252b2f7e2b7d7d792d7f2d7e79252e297829782a25257f2d236465432d24782d2e7e247929282d7e2d7a78242c7e2d7f2f7f2e79797e2a2f7d2e2c240571726f6a2e21432b2f2c2d2b2e282e7f247e292b7f2d787d282a7e782d7a242d287d2d7a2d7e2c2143257924292528282a2e2e2524282d7d7d2d7878252c29787d2c2c782e2d28297a21437e25242c282d2b78297e7f782b2a7f2d79792e247e242a2b7d282f2e792e7d2c21432c2b7d2825242e7e242c2e257d7d7a28247f287e287825297e7f2b287e787e2521432d7f252e2c247e7f7a7e2e7e7a2b2825287f7d2b7a7a7e7e2e2e252d2d7a257821437f242d2824252b792a782e7f2d2a7e2b2b282d297d2a2c252b257d257d252c2521432c7828242c782f2b2d2f787879792d29292b7d7e2e792a2e2f2b2c2c79782b7e21432d7e2b7f28782a2b2c292a282e7f7e2a7924292c2a257e7878797d28792c2d790a282e2528252a2b2e252b0a282e2528252a2b2e2524';\nglobalThis['c93b4da3'](__$c, [, , typeof Object !== \"undefined\" ? Object : undefined, typeof Reflect !== \"undefined\" ? Reflect : undefined, typeof String !== \"undefined\" ? String : undefined, typeof Array !== \"undefined\" ? Array : undefined, typeof setTimeout !== \"undefined\" ? setTimeout : undefined, typeof Promise !== \"undefined\" ? Promise : undefined, typeof Date !== \"undefined\" ? Date : undefined, typeof globalThis !== \"undefined\" ? globalThis : undefined, typeof clearTimeout !== \"undefined\" ? clearTimeout : undefined, typeof performance !== \"undefined\" ? performance : undefined, typeof requestAnimationFrame !== \"undefined\" ? requestAnimationFrame : undefined, typeof requestIdleCallback !== \"undefined\" ? requestIdleCallback : undefined, typeof Math !== \"undefined\" ? Math : undefined, typeof undefined !== \"undefined\" ? undefined : undefined, typeof encodeURIComponent !== \"undefined\" ? encodeURIComponent : undefined, typeof TextEncoder !== \"undefined\" ? TextEncoder : undefined, typeof RegExp !== \"undefined\" ? RegExp : undefined, typeof document !== \"undefined\" ? document : undefined, typeof unescape !== \"undefined\" ? unescape : undefined, typeof parseInt !== \"undefined\" ? parseInt : undefined, typeof navigator !== \"undefined\" ? navigator : undefined, typeof InstallTrigger !== \"undefined\" ? InstallTrigger : undefined, typeof Set !== \"undefined\" ? Set : undefined, typeof Function !== \"undefined\" ? Function : undefined, typeof XMLHttpRequest !== \"undefined\" ? XMLHttpRequest : undefined, typeof JSON !== \"undefined\" ? JSON : undefined, typeof Error !== \"undefined\" ? Error : undefined, typeof chrome !== \"undefined\" ? chrome : undefined, typeof Event !== \"undefined\" ? Event : undefined, typeof top !== \"undefined\" ? top : undefined, typeof Uint8Array !== \"undefined\" ? Uint8Array : undefined])\n","\n!(function(){\n    const $toString = Function.prototype.toString;\n    const symbol = Symbol();\n    const myToString = function (){\n        return typeof this === 'function' && this[symbol] || $toString.call(this);\n    }\n    function safeFunction(func, key, value){\n        Object.defineProperty(func, key, {\n            enumerable: false,\n            configurable: true,\n            writable: true,\n            value: value,\n        })\n    };\n    delete Function.prototype.toString;\n    safeFunction(Function.prototype, \"toString\", myToString);\n    safeFunction(Function.prototype.toString, symbol, 'function toString() { [native code] }');\n    globalThis.safeFunction = function(func, funcname){\n        safeFunction(func, symbol, `function ${funcname || func.name || ''}() { [native code] }`);\n    }\n})();\n\nfunction makeFunction(name) {\n    // 动态创建一个函数\n    var func = new Function(`\n        return function ${name}() {\n        }\n    `)();\n\n    safeFunction(func)\n\n    return func;\n}\n\nfunction Window(){}\n\n// 兼容 Node.js 和浏览器环境，统一挂载到 globalThis\nif (typeof globalThis.window === 'undefined') {\n    globalThis.window = (typeof global !== 'undefined') ? global : globalThis;\n}\nsafeFunction(globalThis.window)\nglobalThis.self = globalThis.window;\nglobalThis.top = globalThis.window;\nglobalThis.outerWidth = 1536\nglobalThis.innerWidth = 1528\nglobalThis.outerHeight = 816\nglobalThis.innerHeight = 118\nglobalThis.name = \"\"\n\nglobalThis.window.addEventListener = function (tagName){}\nglobalThis.MouseEvent = function (tagName){}\nglobalThis.TouchEvent = function (tagName){}\n\nObject.setPrototypeOf(globalThis.window, Window.prototype)\nsafeFunction(globalThis.window, 'Window')\n\nglobalThis.XMLHttpRequest = function XMLHttpRequest(){};\nglobalThis.XMLHttpRequest.prototype.open = function (method, url, async){}\n\nglobalThis.Ιnfinity = function (tagName){}\nglobalThis.Ιnk = function (tagName){}\nglobalThis.DeviceOrientationEvent = function (tagName){}\nglobalThis.chrome = {\n    \"app\": {\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}\nglobalThis.HTMLElement = function (tagName){}\nglobalThis.StyleMedia = undefined\nglobalThis.DeviceMotionEvent = function (tagName){}\nglobalThis.loadts = new Date().toString()\nglobalThis.xsecappid = 'ugc'\n\nObject.setPrototypeOf(globalThis, Window.prototype)\nsafeFunction(globalThis, 'Window')\n\n\nfunction EventTarget() {}\nEventTarget.prototype.addEventListener = function (tagName){};\nEventTarget.prototype.constructor = EventTarget;\nsafeFunction(EventTarget.prototype.addEventListener)\n\n\nfunction Node(){}\nNode.prototype.constructor = Node;\nNode.prototype = Object.create(EventTarget.prototype);\n\n\nfunction Element(){}safeFunction(Element)\nElement.prototype.getAttribute = function getAttribute(){};safeFunction(Element.prototype.getAttribute)\nElement.prototype.removeChild = function removeChild(){};safeFunction(Element.prototype.removeChild)\n\nfunction HTMLElement(){\n    Element.call(this)\n};safeFunction(HTMLElement)\nHTMLElement.prototype = Object.create(Element.prototype)\nHTMLElement.prototype.constructor = HTMLElement;\n\nglobalThis.window.HTMLElement = HTMLElement;\n\nfunction HTMLHtmlElement(){}\nHTMLHtmlElement.prototype.getAttribute = function () {\n    return null;\n}\nfunction HTMLAllCollection (){\n    this.length = 1181;\n};safeFunction(HTMLAllCollection)\n\nfunction HTMLBodyElement (){\n    HTMLElement.call(this)\n};safeFunction(HTMLBodyElement)\nHTMLBodyElement.prototype = Object.create(HTMLElement.prototype)\nHTMLBodyElement.prototype.constructor = HTMLBodyElement;\n\nfunction Document(){}\nDocument.prototype = Object.create(Node.prototype);\nDocument.prototype.getElementsByTagName = function (tagName) {\n    if (tagName.toLowerCase() === \"*\") {\n        return [\n    {\"tagName\": \"html\"},\n    {\"tagName\": \"head\"},\n    {\"tagName\": \"script\"},\n    {\"tagName\": \"meta\"},\n    {\"tagName\": \"link\"},\n    {\"tagName\": \"style\"},\n    {\"tagName\": \"title\"},\n    {\"tagName\": \"body\"},\n    {\"tagName\": \"div\"},\n    {\"tagName\": \"svg\"},\n    {\"tagName\": \"defs\"},\n    {\"tagName\": \"clippath\"},\n    {\"tagName\": \"rect\"},\n    {\"tagName\": \"path\"},\n    {\"tagName\": \"symbol\"},\n    {\"tagName\": \"circle\"},\n    {\"tagName\": \"g\"},\n    {\"tagName\": \"header\"},\n    {\"tagName\": \"a\"},\n    {\"tagName\": \"img\"},\n    {\"tagName\": \"input\"},\n    {\"tagName\": \"use\"},\n    {\"tagName\": \"button\"},\n    {\"tagName\": \"span\"},\n    {\"tagName\": \"ul\"},\n    {\"tagName\": \"li\"},\n    {\"tagName\": \"picture\"},\n    {\"tagName\": \"i\"},\n    {\"tagName\": \"p\"},\n    {\"tagName\": \"section\"},\n    {\"tagName\": \"iframe\"}\n]\n    }\n}\nDocument.prototype.all = new HTMLAllCollection();\nDocument.prototype.body = new HTMLBodyElement();\nDocument.prototype.cookie = globalThis.window.ck;\n\nfunction HTMLDocument() {}\nHTMLDocument.prototype = Object.create(Document.prototype);\n\nglobalThis.document = Object.create(HTMLDocument.prototype);safeFunction(globalThis.document);\nglobalThis.document.documentElement = Object.create(HTMLHtmlElement.prototype);\n\nglobalThis.window.document = globalThis.document;\n\nglobalThis.Screen = makeFunction(\"Screen\");\nglobalThis.screen = new globalThis.Screen();\nglobalThis.window.screen = globalThis.screen;\nglobalThis.window.Screen = globalThis.Screen;\n\nglobalThis.History = makeFunction(\"History\");\nglobalThis.history = new globalThis.History();\nglobalThis.window.history = globalThis.history;\nglobalThis.window.History = globalThis.History;\n\n\nglobalThis.Navigator = makeFunction(\"Navigator\");\nglobalThis.Navigator.prototype.appCodeName = \"Mozilla\";\nglobalThis.Navigator.prototype.appName = \"Netscape\";\nglobalThis.Navigator.prototype.language = \"zh-CN\";\nglobalThis.Navigator.prototype.languages = [\n    \"zh-CN\",\n    \"zh\",\n    \"en\"\n];\nglobalThis.Navigator.prototype.platform = \"MacIntel\";\nglobalThis.Navigator.prototype.product = \"Gecko\";\nglobalThis.Navigator.prototype.productSub = \"20030107\";\nfunction PermissionStatus(){\n    this.state = \"denied\"\n    this.then = function then(){}\n};safeFunction(PermissionStatus)\nfunction Permissions(){\n}\nPermissions.prototype.query = function query() {\n    return Promise.resolve(new PermissionStatus())\n};safeFunction(Permissions.prototype.query)\nglobalThis.Navigator.prototype.permissions = new Permissions()\nglobalThis.Navigator.prototype.userAgent = \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36\";\nglobalThis.Navigator.prototype.vendor = \"Google Inc.\";\nglobalThis.Navigator.prototype.webdriver = false;\nglobalThis.navigator = new globalThis.Navigator();\nglobalThis.window.navigator = globalThis.navigator;\nglobalThis.window.Navigator = globalThis.Navigator;\n\n\nfunction Storage(){}\nglobalThis.sessionStorage = new Storage();\nglobalThis.window.sessionStorage = globalThis.sessionStorage;\n\nglobalThis.localStorage = new Storage();\nglobalThis.window.localStorage = globalThis.localStorage;\nglobalThis.window.Storage = Storage;\n\n\nfunction Location(){}\nLocation.prototype = {\n    \"ancestorOrigins\": {},\n    \"href\": \"https://bf5b000000001001945f?xsec_token=AB3TbsCqzVXoWzLIZU5EZiXQBkisr5haqXi5iXIV2NtO0=&xsec_source=pc_note\",\n    \"origin\": \"https:shu.com\",\n    \"protocol\": \"https:\",\n    \"host\": \"www..com\",\n    \"hostname\": \"www.xiaohongshu.com\",\n    \"port\": \"\",\n    \"pathname\": \"/user/00000001001945f\",\n    \"search\": \"?xsec_token=AB3TbsCqzVXoWzLIZU5EZiXQBkisr5haqXi5iXIV2NtO0=&xsec_source=pc_note\",\n    \"hash\": \"\"\n}\nglobalThis.location = new Location();\nglobalThis.window.location = globalThis.location;\nglobalThis.window.Location = Location;","function encodeUtf8(e) {\n  let r2 = []\n  for (let a = encodeURIComponent(e), c = 0;c < a.length; c++) {\n    const d = a.charAt(c);\n    if (d === \"%\") {\n      const s = Number.parseInt(a.charAt(c + 1) + a.charAt(c + 2), 16);\n      r2.push(s), c += 2;\n    } else\n      r2.push(d.charCodeAt(0));\n  }\n  return r2;\n}\nvar c = [\n  \"Z\",\n  \"m\",\n  \"s\",\n  \"e\",\n  \"r\",\n  \"b\",\n  \"B\",\n  \"o\",\n  \"H\",\n  \"Q\",\n  \"t\",\n  \"N\",\n  \"P\",\n  \"+\",\n  \"w\",\n  \"O\",\n  \"c\",\n  \"z\",\n  \"a\",\n  \"/\",\n  \"L\",\n  \"p\",\n  \"n\",\n  \"g\",\n  \"G\",\n  \"8\",\n  \"y\",\n  \"J\",\n  \"q\",\n  \"4\",\n  \"2\",\n  \"K\",\n  \"W\",\n  \"Y\",\n  \"j\",\n  \"0\",\n  \"D\",\n  \"S\",\n  \"f\",\n  \"d\",\n  \"i\",\n  \"k\",\n  \"x\",\n  \"3\",\n  \"V\",\n  \"T\",\n  \"1\",\n  \"6\",\n  \"I\",\n  \"l\",\n  \"U\",\n  \"A\",\n  \"F\",\n  \"M\",\n  \"9\",\n  \"7\",\n  \"h\",\n  \"E\",\n  \"C\",\n  \"v\",\n  \"u\",\n  \"R\",\n  \"X\",\n  \"5\"\n];\nfunction tripletToBase64(e) {\n  return c[e >> 18 & 63] + c[e >> 12 & 63] + c[e >> 6 & 63] + c[63 & e];\n}\nfunction encodeChunk(e, a, r2) {\n  for (var c2, d = [], s = a;s < r2; s += 3)\n    c2 = (e[s] << 16 & 16711680) + (e[s + 1] << 8 & 65280) + (255 & e[s + 2]), d.push(tripletToBase64(c2));\n  return d.join(\"\");\n}\nfunction b64Encode(e) {\n  for (var a, r2 = e.length, d = r2 % 3, s = [], f = 16383, u = 0, l = r2 - d;u < l; u += f)\n    s.push(encodeChunk(e, u, u + f > l ? l : u + f));\n  return d === 1 ? (a = e[r2 - 1], s.push(c[a >> 2] + c[a << 4 & 63] + \"==\")) : d === 2 && (a = (e[r2 - 2] << 8) + e[r2 - 1], s.push(c[a >> 10] + c[a >> 4 & 63] + c[a << 2 & 63] + \"=\")), s.join(\"\");\n}\nfunction encode_mnsv2(mnsv2, type, platform, req_type) {\n  const f = {\n    x0: \"4.2.8\",\n    x1: type,\n    x2: platform,\n    x3: mnsv2,\n    x4: req_type\n  };\n  return \"XYS_\" + b64Encode(encodeUtf8(JSON.stringify(f)));\n}\nmodule.exports = encode_mnsv2\n","import { LoggerImplement } from \"@iflyrpa/share\";\nimport { SocksProxyAgent } from \"socks-proxy-agent\";\nimport { Http } from \"./http\";\n\ninterface ProxyInfo {\n    code: string;\n    desc: string;\n    data: {\n        proxyIp: string;\n        proxyPort: string;\n    } | null;\n}\n\n// 代理鉴权凭证表：每个 IP + 端口区间对应一组账号/密码（来自 a.md）。\n// portStart/portEnd 为闭区间，例如 44001-44050 表示端口 44001 到 44050。\ninterface ProxyCredential {\n    ip: string;\n    portStart: number;\n    portEnd: number;\n    user: string;\n    pass: string;\n}\n\nconst PROXY_CREDENTIALS: ProxyCredential[] = [\n    {\n        ip: \"47.110.131.129\",\n        portStart: 44001,\n        portEnd: 44050,\n        user: \"m64ut33hvzUzuh\",\n        pass: \"pV2nKbhvgciM3URoRjnvk5D1d0CryaE\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 44051,\n        portEnd: 44100,\n        user: \"m64uz9EMrVpaCk\",\n        pass: \"pAhDnBmdn12odgffGJnbFt9Jts6EiRz\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 44101,\n        portEnd: 44150,\n        user: \"m64uacZLZ1hQuz\",\n        pass: \"p0oyBQtTFXk9x5BniP1GT3t5zmy1kWX\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 44151,\n        portEnd: 44200,\n        user: \"m64ugn30hbrv5w\",\n        pass: \"pDMlGki6kx5ObJmIVNX9IyaTyLCNdwF\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 44201,\n        portEnd: 44250,\n        user: \"m64uxrjtLEuuiJ\",\n        pass: \"pgSS3tw48oFBFKieAjJjsCzfdbvOxyD\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 45001,\n        portEnd: 45050,\n        user: \"m63uGNqJq3SfCR\",\n        pass: \"p9gDMdIlxrfwK6DPpYxad6nnLy2oz7b\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 45051,\n        portEnd: 45100,\n        user: \"m63usvfyWYu6vY\",\n        pass: \"pu0hLZL81K5u43XbWlWKjZsNOAPG238\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 45101,\n        portEnd: 45150,\n        user: \"m63uI2pvHbB0b0\",\n        pass: \"p353azuJBlrzuu2EidptuhdnBIybdUy\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 45151,\n        portEnd: 45200,\n        user: \"m63uSpJbw46qnQ\",\n        pass: \"pYWdnwHHXoKgIOLfuvruZFlSaGN2ZVO\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 45201,\n        portEnd: 45250,\n        user: \"m63ufKz8YekqZq\",\n        pass: \"phDmq6dBU85Z85A99LsrtluBgG5OFQ2\",\n    },\n];\n\n/**\n * 根据 IP 与端口查找对应的代理账号/密码。\n * 端口落在某条记录的 [portStart, portEnd] 闭区间内即命中，未命中返回 null。\n */\nfunction findProxyCredential(ip: string, port: string): ProxyCredential | null {\n    const portNum = Number(port);\n    if (Number.isNaN(portNum)) return null;\n    return PROXY_CREDENTIALS.find((c) => c.ip === ip && portNum >= c.portStart && portNum <= c.portEnd) ?? null;\n}\n\n/**\n * 构建带鉴权信息的 socks5h 代理 URL。\n * 使用 socks5h（h 表示由代理服务器做 DNS 解析），凭证写入 userinfo 部分，\n * SocksProxyAgent 会据此向代理服务器做 SOCKS5 用户名/密码鉴权。\n * 根据 ip + port 从凭证表查找对应账号密码，未命中则返回不带鉴权的 URL。\n */\nfunction buildProxyUrl(ip: string, port: string): string {\n    const credential = findProxyCredential(ip, port);\n    if (credential) {\n        // 对凭证做 URL 编码，避免用户名/密码中含有 `:`、`@`、`/` 等特殊字符破坏 URL 结构\n        const user = encodeURIComponent(credential.user);\n        const pass = encodeURIComponent(credential.pass);\n        return `socks5h://${user}:${pass}@${ip}:${port}`;\n    }\n    return `socks5h://${ip}:${port}`;\n}\n\nexport async function ProxyAgent(\n    task: { logger?: LoggerImplement },\n    addr: string | null,\n    accountId?: number,\n    refresh?: boolean,\n) {\n    const http = new Http({\n        headers: {\n            \"content-type\": \"application/json\",\n        },\n    });\n    const params = {\n        addr: addr || null,\n        accountId: accountId,\n    };\n    const ProxyInfo: ProxyInfo = await http\n        .api({\n            method: \"POST\",\n            url: \"https://fetdev.iflysec.com/ip-pool/pool/eip/proxy\",\n            data: params,\n        })\n        .catch((err) => {\n            throw { code: 414, message: `请求代理失败：${err.message}`, data: {} };\n        });\n\n    const loggerInfo = {\n        params,\n        response: {\n            code: ProxyInfo.code,\n            desc: ProxyInfo.desc,\n            data: ProxyInfo.data,\n        },\n    };\n\n    task.logger?.info(\n        `请求代理：区域：${params.addr}, AccountId：${params.accountId}, 返回代理信息: ${ProxyInfo.data ? `${ProxyInfo.data.proxyIp}:${ProxyInfo.data.proxyPort}` : \"无可用代理\"}`,\n        loggerInfo,\n    );\n\n    // 在 URL 中写上认证信息，使用 SocksProxyAgent 支持 socks5h 协议\n    const proxyAgent =\n        ProxyInfo.code === \"000000\" && ProxyInfo.data\n            ? {\n                  ip: ProxyInfo.data.proxyIp,\n                  port: ProxyInfo.data.proxyPort,\n                  agent: new SocksProxyAgent(buildProxyUrl(ProxyInfo.data.proxyIp, ProxyInfo.data.proxyPort)),\n              }\n            : null;\n\n    return proxyAgent;\n}\n","import { createHash } from \"node:crypto\";\nimport type { Agent } from \"node:http\";\nimport type { LoggerImplement, ResponseData } from \"@iflyrpa/share\";\nimport axios, {\n    type AxiosError,\n    type AxiosInstance,\n    type AxiosRequestConfig,\n    type AxiosResponse,\n    type CreateAxiosDefaults,\n} from \"axios\";\nimport { stringifyError } from \"./index\";\nimport { ProxyAgent } from \"./proxy\";\n\nexport class Http {\n    private readonly apiClient: AxiosInstance;\n    public logger?: LoggerImplement;\n    public proxyInfo?: string;\n    private readonly platform?: string; // 业务标识（xiaohongshu、douyin、weixin等）\n    private readonly agentPromise?: Promise<{\n        ip: string;\n        port: string;\n        agent: Agent | null;\n    } | null> = undefined;\n\n    static handleApiError(error: unknown): ResponseData {\n        // 如果错误已经是 ResponseData 格式，直接抛出\n        if (error && typeof error === \"object\" && \"code\" in error && \"message\" in error) {\n            return error as ResponseData;\n        }\n\n        // 处理其他类型的错误\n        return {\n            code: 500,\n            message: error instanceof Error ? error.message : \"未知错误\",\n            data: error,\n        };\n    }\n\n    constructor(\n        config?: CreateAxiosDefaults,\n        logger?: LoggerImplement,\n        addr?: string | null,\n        accountId?: number,\n        platform?: string, // 业务标识，如 \"xiaohongshu\"、\"douyin\"、\"weixin\" 等\n    ) {\n        this.apiClient = axios.create({\n            ...config,\n            // proxy: {\n            //     host: \"127.0.0.1\", // 根据你的代理服务设置\n            //     port: 8888,\n            //     protocol: \"http\", // 可选\n            // },\n        });\n        this.logger = logger;\n        this.platform = platform;\n\n        if (addr) this.agentPromise = ProxyAgent({ logger }, addr, accountId);\n\n        this.addResponseInterceptor(() => undefined);\n    }\n\n    public clearResponseInterceptors(): void {\n        const interceptors = axios.interceptors.response as unknown as {\n            handlers: unknown[];\n            clear: () => void;\n        };\n\n        // 清除之前的拦截器\n        if (interceptors.handlers.length > 0) {\n            axios.interceptors.response.clear();\n        }\n    }\n\n    // 添加响应拦截器\n    // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n    public addResponseInterceptor<T = any>(findError: (response: AxiosResponse<T>) => ResponseData | undefined): void {\n        const interceptors = this.apiClient.interceptors.response as unknown as {\n            handlers: unknown[];\n            clear: () => void;\n        };\n\n        // 清除之前的拦截器，避免重复添加\n        if (interceptors.handlers.length > 0) {\n            this.apiClient.interceptors.response.clear();\n        }\n\n        this.apiClient.interceptors.response.use(\n            (response) => {\n                // 检查响应中的 errno 字段\n                const error = findError(response);\n\n                if (error) {\n                    return Promise.reject(\n                        Object.assign(error, {\n                            extra: {\n                                method: response.config.method,\n                                url: response.config.url,\n                            },\n                        }),\n                    );\n                }\n\n                return response;\n            },\n            (error: AxiosError) => {\n                const foundError = findError(error.response as AxiosResponse<T>);\n\n                // 创建标准错误响应格式\n                const errorResponse: ResponseData = {\n                    // 单独拦截401的状态码，映射为400，避免触发绘文平台的鉴权错误处理逻辑\n                    code: error.response?.status || 500,\n                    message: error.message || \"\",\n                    data: error.response?.data,\n                    extra: {\n                        method: error.config?.method,\n                        url: error.config?.url,\n                        isProxyRequest: !!(error.config && (error.config.httpAgent || error.config.httpsAgent)),\n                        params: error.config?.params,\n                        data: error.config?.data,\n                        serverDate: error.response?.headers?.date, // 服务端时间（用于时钟漂移检测）\n                    },\n                };\n\n                if (foundError) Object.assign(errorResponse, foundError);\n\n                if (error.response?.status === 403) {\n                    this.logger?.warn(`[403 详细信息] URL: ${error.config?.url}`);\n                    this.logger?.warn(`[403 响应头] ${JSON.stringify(error.response?.headers || {})}`);\n                    this.logger?.warn(`[403 响应体] ${JSON.stringify(error.response?.data || null)}`);\n                    const verifyDecision = error.response?.headers?.[\"x-tt-verify-passport-decision\"];\n                    if (verifyDecision) {\n                        this.logger?.warn(`[403 验证决策] x-tt-verify-passport-decision: ${verifyDecision}`);\n                    }\n                }\n\n                // 如果服务端返回了详细错误信息，可以使用服务端的错误信息\n                if (error.response?.data) {\n                    if (typeof error.response.data === \"object\") {\n                        // 如果服务端返回的是对象，可以尝试提取错误信息\n                        // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n                        const serverError = error.response.data as any;\n\n                        errorResponse.message = serverError.msg || serverError.message; // 匹配小红书与普通错误message\n\n                        // 可以保留原始错误数据\n                        errorResponse.data = serverError;\n                    }\n                }\n                let _message = error.message || \"\";\n                // ✅ 情况二：网络错误（没有 response）\n                if (error.code) {\n                    errorResponse.code = errorResponse.code === 401 ? 414 : errorResponse.code; // 屏蔽401错误，避免触发绘文平台鉴权逻辑\n\n                    switch (error.code) {\n                        case \"ECONNABORTED\":\n                            _message = \"请求超时，请检查网络连接！\";\n                            break;\n                        case \"ECONNRESET\":\n                            _message = \"连接被重置，请检查网络或稍后重试！\";\n                            break;\n                        case \"ENOTFOUND\":\n                            _message = \"域名解析失败，请检查 URL 是否正确！\";\n                            break;\n                        case \"ETIMEDOUT\":\n                            _message = \"网络请求超时，请检查网络连接！\";\n                            break;\n                        case \"ECONNREFUSED\":\n                            _message = \"服务器拒绝连接，请稍后重试！\";\n                            break;\n                        case \"EAI_AGAIN\":\n                            _message = \"DNS 查询超时，请稍后重试！\";\n                            break;\n                        case \"ERR_BAD_REQUEST\":\n                            _message = \"请求出现错误，请检查请求参数！\";\n                            break;\n                        case \"ERR_BAD_RESPONSE\":\n                            _message = `服务器响应异常 (${error.response?.status ?? \"unknown\"})，请稍后重试！`;\n                            break;\n                        case \"ERR_CANCELED\":\n                            errorResponse.code = 414; // 阻止前端报错\n                            _message = \"请求连接超时，请稍候重试！\";\n                            if (errorResponse.extra?.isProxyRequest) {\n                                _message = \"代理连接建立超时，请更换区域或稍后重试！\";\n                                errorResponse.code = 599;\n                                errorResponse.data = this.proxyInfo\n                                    ? createHash(\"md5\").update(this.proxyInfo.split(\":\")[0]).digest(\"hex\") +\n                                      this.proxyInfo.split(\":\")[1]\n                                    : {};\n                            }\n                            break;\n                        default:\n                            this.logger?.debug(`未处理的网络错误代码: ${error.code} ${error.message}`, {\n                                errorString: stringifyError(error),\n                            });\n                            _message = `网络错误: ${error.message}`;\n                            break;\n                    }\n                }\n                // 网络层错误（无服务端响应体）：errorResponse.message 此时仍是 axios 原始文案\n                // （如 \"timeout of 3000ms exceeded\"），应优先使用上面归一化后的友好文案 _message。\n                // 有服务端响应体时才保留服务端返回的 message。\n                if (error.code && !error.response?.data) {\n                    errorResponse.message = _message || errorResponse.message;\n                } else {\n                    errorResponse.message = errorResponse.message ? errorResponse.message : _message;\n                }\n\n                if (errorResponse.message === \"canceled\") {\n                    const message = errorResponse.extra?.isProxyRequest\n                        ? \"代理连接建立超时，请更换区域或稍后重试！\"\n                        : \"网络请求超时，请稍后重试！\";\n                    errorResponse.message = message;\n                }\n\n                if (error.message.includes(\"Proxy connection ended\")) {\n                    // 代理Connect阶段错误重写！\n                    errorResponse.message = \"所在区域代理连接超时，请更换区域或稍后重试！\";\n                }\n\n                // 返回标准化的错误响应\n                throw errorResponse;\n            },\n        );\n    }\n\n    // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n    public async api<T = any>(\n        config: AxiosRequestConfig,\n        options?: {\n            retries?: number;\n            retryDelay?: number;\n            timeout?: number;\n        },\n    ): Promise<T> {\n        const retries = options?.retries ?? 0; // 默认不重试\n        const retryDelay = options?.retryDelay ?? 500;\n        const reqTimeout = options?.timeout ?? 30 * 1000; // 10s 默认超时\n        let agent: { ip: string; port: string; agent: Agent | null } | null | undefined;\n        // let isForceRefreshProxy = false;\n        const sessionRt = async (Rtimes: number): Promise<T> => {\n            try {\n                // if (this.ip) {\n                // \tconst cacheKey = `${this.ip}|${this.adr ?? \"\"}|${this.accountId ?? \"\"}`;\n                //\n                //     if( this.adr && Rtimes === 1 ) {\n                //         this.adr = \"\";\n                //         Http.agentCache.delete(cacheKey);\n                //     }\n                //     if( Rtimes%2 === 0 && Rtimes > 0 ) {\n                //         // 重试时清除缓存，并强制刷新代理 refresh = true\n                //         Http.agentCache.delete(cacheKey);\n                //         isForceRefreshProxy = true;\n                //         this.task.debug && this.task.logger.info(`进入第${Rtimes+1}次重试，强制刷新代理！`);\n                //     }\n                //\n                //     if (Http.agentCache.has(cacheKey)) {\n                //         this.agent = Http.agentCache.get(cacheKey) ?? null;\n                //\n                //     } else if (Http.agentPromiseCache.has(cacheKey)) {\n                //         this.task.debug && this.task.logger.info(\"代理正在创建，等待中...\");\n                //         const agentResult = await Http.agentPromiseCache.get(cacheKey);\n                //         this.agent = agentResult?.agent ?? null;\n                //     } else {\n                //         const promise = ProxyAgent(this.ip, this.adr, this.accountId, isForceRefreshProxy);\n                //\n                //         Http.agentPromiseCache.set(cacheKey, promise);\n                //\n                //         this.agent = (await promise)?.agent;\n                //\n                //         if (this.agent) {\n                //             this.agent.options.keepAlive = true;\n                //             Http.agentCache.set(cacheKey, this.agent);\n                //         } else {\n                //             Http.agentCache.set(cacheKey, null);\n                //         }\n                //         Http.agentPromiseCache.delete(cacheKey);\n                //     }\n                // }\n                //\n                // if (this.agent === null) {\n                //     if (Rtimes === retries && this.ip) {\n                //         return Promise.reject({\n                //             code: 400,\n                //             message: \"\",\n                //             data: {\n                //                 code: 400, // 仅配合sessioncheck使用\n                //                 msg: \"当前所选区域暂不支持!\"\n                //             }\n                //         });\n                //     }\n                //     if (this.adr) {\n                //        throw {code: 500, message: \"\", data: {}}; // 触发重试\n                //     }\n                // }\n\n                this.proxyInfo = agent ? `${agent.ip}:${agent.port}` : undefined;\n\n                // 请求级别超时控制（即使代理层没超时，也能强制中断）\n                // 注意：AbortController 的兜底超时必须比 axios 自身 timeout 略长，\n                // 否则二者同时到点时 AbortController 会先触发 ERR_CANCELED(code 414)，\n                // 导致超时错误落不进重试白名单 [0,500,502,503,504,599]，使 retries 形同虚设。\n                // 让 axios 先以 ECONNABORTED(code 500) 触发常规 socket 超时即可正常重试，\n                // AbortController 仅作为 DNS/连接阶段卡死的最终兜底。\n                const controller = new AbortController();\n                const timeoutId = setTimeout(() => controller.abort(), reqTimeout + 500); // 全阶段超时兜底\n\n                const response = await this.apiClient<T>({\n                    ...config,\n                    timeout: reqTimeout, // Axios 自身的超时 http阶段，tcp socket已建立情况下的超时\n                    signal: controller.signal, // 自定义超时保护信号，用户axios监听\n                    ...(agent ? { httpAgent: agent.agent, httpsAgent: agent.agent } : {}),\n                }).finally(() => {\n                    clearTimeout(timeoutId);\n                });\n\n                return response.data;\n            } catch (error) {\n                const handledError: ResponseData = Http.handleApiError(error);\n                const isRetry = [0, 500, 502, 503, 504, 599].includes(handledError.code);\n\n                if (Rtimes < retries && isRetry) {\n                    const url = config.url || \"\";\n                    this.logger?.warn(`进入第${Rtimes + 1}次重试！错误码: ${handledError.code}, 请求地址: ${url}`);\n                    await new Promise((resolve) => setTimeout(resolve, retryDelay));\n                    return sessionRt(Rtimes + 1);\n                }\n                return Promise.reject(handledError);\n            }\n        };\n        if (this.agentPromise) {\n            const requestUrl = config.url || \"\";\n            const platformTag = this.platform ? `[${this.platform}]` : \"\";\n            this.logger?.info(`${platformTag}[代理请求] 接口: ${requestUrl}`);\n            agent = await this.agentPromise;\n            if (agent) {\n                this.logger?.info(`${platformTag}[代理请求] 代理地址: ${agent.ip}:${agent.port}`);\n            }\n        }\n\n        return sessionRt(0);\n    }\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { CommonAction, Page, ResponseData } from \"@iflyrpa/share\";\nimport domSerializer from \"dom-serializer\";\nimport { type ChildNode, DomHandler, type Element } from \"domhandler\";\nimport { DomUtils, Parser } from \"htmlparser2\";\nimport mime from \"mime-types\";\n\nimport { Http } from \"./http\";\n\n/**\n * 生成两数之间的随机整数\n * @param min\n * @param max\n * @returns\n */\nexport function getRandomInRange(min: number, max: number) {\n    return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\nexport const getFileState = (filePath: string) => {\n    // 获取文件名\n    const filename = path.basename(filePath);\n    // 获取文件类型\n    const fileType = mime.lookup(filePath);\n    const stats = fs.statSync(filePath);\n    // 获取文件大小\n    const fileSize = stats.size;\n    // 获取最后修改时间\n    const lastModifiedDate = stats.mtime;\n\n    return {\n        name: filename,\n        type: fileType,\n        size: fileSize,\n        lastModifiedDate: lastModifiedDate.toString(),\n    };\n};\n\nexport type AspectRatio = [number, number];\nexport type CropCoordinates = {\n    x1: number;\n    y1: number;\n    x2: number;\n    y2: number;\n};\n\n/**\n * 获取特定的比例切割图片，获取切割的坐标\n * @param width 图片长度\n * @param height 图片高度\n * @param aspectRatio 切割比例：[宽度，高度]\n * @returns\n */\nexport const calculateCropCoordinates = (width: number, height: number, aspectRatio: AspectRatio): CropCoordinates => {\n    const targetRatio = aspectRatio[0] / aspectRatio[1];\n    let cropWidth: number;\n    let cropHeight: number;\n\n    if (width / height > targetRatio) {\n        // 图片过宽，需要裁切宽度\n        cropHeight = height;\n        cropWidth = height * targetRatio;\n    } else {\n        // 图片过高，需要裁切高度\n        cropWidth = width;\n        cropHeight = width / targetRatio;\n    }\n\n    const x1 = (width - cropWidth) / 2;\n    const y1 = (height - cropHeight) / 2;\n    const x2 = x1 + cropWidth;\n    const y2 = y1 + cropHeight;\n\n    // 返回百分比坐标\n    return {\n        x1: x1 / width,\n        y1: y1 / height,\n        x2: x2 / width,\n        y2: y2 / height,\n    };\n};\n\n// 提取 html 中的 img 标签\nexport const extractImgTag = (html: string) => {\n    const srcList: string[] = [];\n\n    const parser = new Parser({\n        onopentag(name, attributes) {\n            const src = attributes.src?.trim();\n            const currentSrc = attributes.currentSrc?.trim();\n            if (name === \"img\" && (src || currentSrc)) {\n                srcList.push(src || currentSrc);\n            }\n        },\n    });\n\n    parser.write(html);\n    parser.end();\n\n    return srcList;\n};\n\n/**\n * 格式化 HTML 内容，删除无效的 section（没有 img 或 img src 为空）\n * @param html\n */\nexport const formatSectionHtml = (html: string): string => {\n    const handler = new DomHandler();\n    const parser = new Parser(handler, {\n        decodeEntities: false,\n    });\n\n    parser.write(html);\n    parser.end();\n\n    const dom = handler.dom;\n\n    // 找出所有 section\n    const sections = DomUtils.findAll((node) => node.type === \"tag\" && node.name === \"section\", dom) as Element[];\n\n    sections.forEach((section) => {\n        // 找出 section 内的 img\n        const imgs = DomUtils.findAll(\n            (node) => node.type === \"tag\" && node.name === \"img\",\n            section.children || [],\n        ) as Element[];\n\n        // 没有 img，不处理（避免误删）\n        if (imgs.length === 0) return;\n\n        const hasValidImg = imgs.some((img) => {\n            const src = img.attribs?.src?.trim();\n            return Boolean(src);\n        });\n\n        // section 内不存在任何有效 img，删除整个 section\n        if (!hasValidImg) {\n            DomUtils.removeElement(section);\n        }\n    });\n\n    return domSerializer(dom, { encodeEntities: false });\n};\n/**\n * 时间格式化\n * @param time\n * @param format 默认 yyyy-MM-dd HH:mm\n * @returns 时间字符串\n */\nexport namespace TimeFormatter {\n    export function format(timestamp: number, formatStr = \"yyyy-MM-dd hh:mm\"): string {\n        // 自动判断：如果是10位（秒），就转为毫秒\n        if (timestamp.toString().length === 10) {\n            timestamp *= 1000;\n        }\n\n        const date = new Date(timestamp);\n\n        const map: Record<string, string> = {\n            yyyy: String(date.getFullYear()),\n            yy: String(date.getFullYear()).slice(-2),\n            MM: String(date.getMonth() + 1).padStart(2, \"0\"),\n            dd: String(date.getDate()).padStart(2, \"0\"),\n            hh: String(date.getHours()).padStart(2, \"0\"),\n            mm: String(date.getMinutes()).padStart(2, \"0\"),\n            ss: String(date.getSeconds()).padStart(2, \"0\"),\n            M: String(date.getMonth() + 1), // 月不带前导零\n            d: String(date.getDate()), // 日不带前导零\n            h: String(date.getHours()), // 不带前导零\n            m: String(date.getMinutes()), // 不带前导零\n            s: String(date.getSeconds()), // 不带前导零\n        };\n\n        return formatStr.replace(/yyyy|yy|MM|dd|hh|mm|ss|M|d|h|m|s/g, (key) => map[key]);\n    }\n}\n\nexport const replaceImgSrc = (html: string, callback: (dom: Element) => Element) => {\n    let lastedHtml = html;\n\n    const isImageTag = (node: ChildNode): node is Element => node.type === \"tag\" && node.name === \"img\";\n\n    const traverseDom = (node: ChildNode) => {\n        if (DomUtils.hasChildren(node)) {\n            for (const child of node.children) {\n                if (isImageTag(child)) {\n                    callback(child);\n                }\n                traverseDom(child);\n            }\n        }\n    };\n\n    const handler = new DomHandler((error, dom) => {\n        if (error) {\n            console.log(error);\n        } else {\n            // 处理 DOM 节点的函数\n            dom.forEach(traverseDom);\n        }\n\n        lastedHtml = domSerializer(dom, { decodeEntities: false });\n    });\n\n    const parser = new Parser(handler, { decodeEntities: false });\n    parser.write(html);\n    parser.end();\n\n    return lastedHtml;\n};\n\nexport const stringifyError = (error: unknown) => {\n    if (error instanceof Error) {\n        return error.toString();\n    }\n\n    if (typeof error === \"object\") {\n        return JSON.stringify(error);\n    }\n\n    return error;\n};\n\n/**\n * 创建一个函数，该函数会依次执行传入的函数列表，直到有一个函数成功或所有函数都失败。\n *\n * @template P - 函数的参数类型，为一个任意长度的数组。\n * @template T - 函数的返回类型，为一个 Promise 的解析值类型。\n * @param {CommonAction<P, T>[]} actions - 一个函数列表，每个函数的类型为 `(...p: P) => Promise<T>`。\n * @returns {CommonAction<P, T>} - 返回一个新的函数，其类型与传入的函数列表中的函数类型相同。\n * 当调用该函数时，会依次执行 `actions` 中的函数，直到有一个函数成功（即返回一个解析的 Promise），\n * 或者所有函数都失败（即抛出异常）。如果所有函数都失败，则抛出最后一个错误。\n *\n * @example\n * const action1 = async (num) => {\n *   if (num > 0) return \"Action 1 succeeded\";\n *   throw new Error(\"Action 1 failed\");\n * };\n *\n * const action2 = async (num) => {\n *   if (num > 1) return \"Action 2 succeeded\";\n *   throw new Error(\"Action 2 failed\");\n * };\n *\n * const combinedAction = executeAction(action1, action2);\n *\n * (async () => {\n *   try {\n *     const result = await combinedAction(1);\n *     console.log(result); // 输出: \"Action 2 succeeded\"\n *   } catch (error) {\n *     console.error(error.message);\n *   }\n * })();\n */\nexport const executeAction = <P, T>(...actions: CommonAction<P, T>[]): CommonAction<P, T> => {\n    return async (task, params) => {\n        let result: ResponseData<T> = {\n            code: 500,\n            message: \"\",\n            // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n            data: null as any,\n        };\n\n        for (let index = 0; index < actions.length; index++) {\n            const action = actions[index];\n\n            try {\n                result = await action(task, params);\n            } catch (error) {\n                result = Http.handleApiError(error);\n            }\n\n            // code === 0 表示成功, code === 414 虽然表示失败，但是不需要继续执行后续的 action\n            if (result.code === 0 || result.code === 414) {\n                return result;\n            }\n\n            // 不是最后一个 action，上报错误信息\n            if (index !== actions.length - 1) {\n                task.logger.error(result.message, stringifyError(result.data), result.extra);\n            }\n        }\n\n        // 所有 action 都执行完毕但都失败了，返回最后一个失败结果\n        return result;\n    };\n};\n\n/**\n * 将 HTML 内容复制到剪贴板\n * @param page - 页面对象\n * @param html - HTML 内容\n * @param options - 选项，包括格式和回退\n * @returns 无返回值\n */\nexport async function copyHtmlToClipboard(page: Page, html: string, options = { format: \"text/html\", fallback: true }) {\n    try {\n        // 尝试使用原生 API\n        await page.evaluate(\n            async ({ htmlContent, format }) => {\n                const blob = new Blob([htmlContent], { type: format });\n                await navigator.clipboard.write([new ClipboardItem({ [format]: blob })]);\n            },\n            { htmlContent: html, format: options.format },\n        );\n    } catch (error) {\n        if (options.fallback) {\n            // 回退到 DOM 操作\n            await page.evaluate((htmlContent) => {\n                const div = document.createElement(\"div\");\n                div.contentEditable = \"true\";\n                div.style.cssText = `\n          position: fixed;\n          left: -9999px;\n          opacity: 0;\n          pointer-events: none;\n        `;\n\n                div.innerHTML = htmlContent;\n                document.body.appendChild(div);\n\n                const range = document.createRange();\n                range.selectNodeContents(div);\n\n                // biome-ignore lint/style/noNonNullAssertion: <忽略错误>\n                const selection = window.getSelection()!;\n                selection.removeAllRanges();\n                selection.addRange(range);\n\n                document.execCommand(\"copy\");\n                document.body.removeChild(div);\n                selection.removeAllRanges();\n            }, html);\n        }\n    }\n}\n\n/**\n * 通用弹窗监听处理器\n * @param page - Playwright 页面对象\n * @param popupSelector - 弹窗的选择器（字符串或 Locator）\n * @param popKey - 弹窗中的唯一键（字符串）\n * @param buttonSelector - 弹窗中需要点击的按钮选择器\n * @param options - 可选配置项\n */\nexport function PopupListener(\n    page: Page,\n    popupSelector: string,\n    popKey: string,\n    buttonSelector: string,\n    options: {\n        checkInterval?: number;\n        stopAfterClick?: boolean;\n    } = {},\n) {\n    const { checkInterval = 1000, stopAfterClick = false } = options;\n\n    const popup = page.locator(popupSelector);\n    const button = page.locator(buttonSelector);\n\n    const intervalId = setInterval(async () => {\n        try {\n            if (\n                (await popup.count()) > 0 &&\n                (await popup.isVisible()) &&\n                ((await popup.textContent()) || \"\").includes(popKey)\n            ) {\n                await button.click({ force: true });\n\n                if (stopAfterClick) {\n                    clearInterval(intervalId);\n                }\n            }\n        } catch (err) {}\n    }, checkInterval);\n\n    return () => {\n        clearInterval(intervalId);\n    };\n}\n\n// 将 url 的 queryString 解析成对象\nexport const parseUrlQueryString = (url: string) => {\n    const queryStringObject: Record<string, string> = {};\n\n    // 检查 URL 是否包含查询参数\n    if (!url || !url.includes(\"?\")) {\n        return queryStringObject;\n    }\n\n    // 提取查询字符串部分\n    const queryString = url.split(\"?\")[1];\n\n    // 检查查询字符串是否为空\n    if (!queryString) {\n        return queryStringObject;\n    }\n\n    // 处理 hash 部分\n    const queryWithoutHash = queryString.split(\"#\")[0];\n\n    // 分割查询参数\n    const queryStringArray = queryWithoutHash.split(\"&\");\n\n    for (const item of queryStringArray) {\n        // 跳过空参数\n        if (!item) continue;\n\n        const equalIndex = item.indexOf(\"=\");\n\n        // 处理没有值的参数 (如 ?param)\n        if (equalIndex === -1) {\n            queryStringObject[item] = \"\";\n        } else {\n            const key = item.slice(0, equalIndex);\n            const value = item.slice(equalIndex + 1);\n\n            // 尝试解码，如果解码失败则使用原始值\n            try {\n                queryStringObject[key] = decodeURIComponent(value);\n            } catch (e) {\n                queryStringObject[key] = value;\n            }\n        }\n    }\n\n    return queryStringObject;\n};\n\n/**\n * 合并默认参数\n * @param params\n * @param defaults\n * @returns\n */\nexport const defaultParams = <P = Record<string, unknown>>(params: P, defaults: Partial<P>): P => {\n    return Object.assign({}, defaults, params);\n};\n","import { type Page, success, type UserInfo } from \"@iflyrpa/share\";\nimport fetch from \"node-fetch\";\nimport type { APIResponse } from \"playwright-core\";\nimport type { SteelAction } from \"./index\";\n\n/**\n * 百家号登录 RPA\n *\n * 流程：\n * 1. 打开百家号登录页\n * 2. 拦截二维码请求，转换为 base64 注入页面（解决跨域问题）\n * 3. 点击\"登录/注册百家号\"按钮\n * 4. 等待页面跳转到 /builder/rc/home 判断登录成功\n * 5. 通过服务端请求 getPassinfo 接口获取用户信息和 token\n * 6. 收集 cookie 并返回结果\n */\nexport const rpaAction: SteelAction = async (task, _params) => {\n    const reporter = task.reportService?.reportLoginStatus ?? (() => Promise.resolve());\n\n    let page: Page;\n    let isSelfClosing = false;\n    let handleBrowserDisconnected: (() => void) | undefined;\n    const cleanup = async () => {\n        if (handleBrowserDisconnected) {\n            task._steelBrowser?.off(\"disconnected\", handleBrowserDisconnected);\n        }\n        if (page && !page.isClosed()) {\n            await page.close().catch(() => {});\n        }\n    };\n\n    // ========== 第一步：启动浏览器并打开登录页 ==========\n    try {\n        page = await task.createPage({\n            // 先进入空白页，确保路由拦截在真正导航前就生效\n            url: \"about:blank\",\n        });\n        if (!task._session?.id) throw new Error(\"Session ID 不存在\");\n        handleBrowserDisconnected = () => {\n            if (task.debug && isSelfClosing) {\n                task.logger.info(\"执行结束，关闭浏览器！\");\n            } else {\n                task.logger.info(\"浏览器被手动释放或意外关闭！\");\n            }\n        };\n        task._steelBrowser?.on(\"disconnected\", handleBrowserDisconnected);\n    } catch (e) {\n        return { code: 414, message: `浏览器启动失败: ${e}`, data: {} };\n    }\n\n    // ========== 第二步：生成远程调试地址 ==========\n    const pageInfo = await task._client?.sessions.liveDetails(task._session.id);\n    const pageId = pageInfo?.pages[0].id ?? \"\";\n\n    const baseHost = task._session.websocketUrl?.replace(/^wss?:\\/\\//, \"\") ?? \"\";\n    const connectAddress = new URLSearchParams({ baseHost, pageId }).toString();\n\n    task.reportService?.settingSessionID?.(task._session?.id || \"\");\n\n    // 拦截明显无关的重资源，防止未登录阶段内存快速上涨\n    await page.route(\"**/*.webm\", (route) => route.abort());\n    await page.route(\"**/*.mp4\", (route) => route.abort());\n\n    // 验证码图片跨域处理：转为 data URL 后注入指定元素，确保能渲染\n    task.logger.info(\"正在设置验证码图片拦截和注入...\");\n    await page.route(\"**/cgi-bin/genimage**\", async (route) => {\n        let response: APIResponse | undefined;\n        task.logger.info(\"正在获取验证码图片...\");\n        for (let i = 0; i < 3; i++) {\n            try {\n                response = await route.fetch();\n                break;\n            } catch (error) {\n                if (i === 2) {\n                    task.logger.error(\"验证码图片获取失败:\", error);\n                    await route.abort();\n                    return;\n                }\n                await new Promise((res) => setTimeout(res, 300));\n            }\n        }\n\n        if (!response) {\n            await route.abort();\n            return;\n        }\n\n        try {\n            const buffer = await response.body();\n            const mimeType = response.headers()[\"content-type\"] || \"image/png\";\n\n            await route.fulfill({\n                status: response.status(),\n                headers: response.headers(),\n                body: buffer,\n            });\n\n            if (!mimeType.toLowerCase().includes(\"image\")) {\n                return;\n            }\n\n            const dataUrl = `data:${mimeType};base64,${buffer.toString(\"base64\")}`;\n            await page.evaluate((src) => {\n                const img = document.querySelector<HTMLImageElement>(\"#TANGRAM__PSP_4__confirmVerifyCodeImg\");\n                if (img) img.src = src;\n            }, dataUrl);\n        } catch (error) {\n            task.logger.error(\"验证码图片渲染失败:\", error);\n            await route.abort();\n        }\n    });\n\n    await page.route(\"**/*\", (route) => {\n        const request = route.request();\n        const url = request.url().toLowerCase();\n        const type = request.resourceType();\n\n        if (url.includes(\"passport.baidu.com/cgi-bin/genimage\")) {\n            // 交给下一个更具体的 genimage 路由处理（转 data URL 注入）\n            return route.fallback();\n        }\n\n        if (type === \"ping\") {\n            return route.abort();\n        }\n\n        // 活动素材与大图资源对扫码登录无必要，优先拦截\n        if (url.includes(\"pic.rmb.bdstatic.com/activity/\")) {\n            if (type === \"image\" || type === \"media\" || type === \"font\") {\n                return route.abort();\n            }\n            if ((type === \"fetch\" || type === \"xhr\") && url.includes(\".json\")) {\n                return route.abort();\n            }\n        }\n\n        return route.continue();\n    });\n\n    // ========== 第三步：拦截二维码请求并注入 base64 图片 ==========\n    // 百家号二维码图片存在跨域限制，需要拦截请求后转为 base64 注入页面\n    let hasInjectedQrcode = false;\n    await page.route(\"**/v2/api/qrcode**\", async (route, _request) => {\n        // 仅首个二维码请求做 base64 注入，避免 data:image 反复注入导致内存堆积\n        if (hasInjectedQrcode) {\n            await route.continue();\n            return;\n        }\n\n        let response: APIResponse | undefined;\n\n        // 最多重试 3 次获取二维码\n        for (let i = 0; i < 3; i++) {\n            try {\n                response = await route.fetch();\n                break;\n            } catch (error) {\n                if (i === 2) {\n                    task.logger.error(\"二维码获取失败:\", error);\n                    await route.abort();\n                    return;\n                }\n                await new Promise((res) => setTimeout(res, 1000));\n            }\n        }\n\n        if (!response) throw new Error(\"二维码响应未定义\");\n\n        try {\n            // 将二维码图片转为 base64 DataURL\n            const buffer = await response.body();\n            const mimeType = response.headers()[\"content-type\"] || \"image/png\";\n\n            // 非图片响应不注入，避免错误地生成超大 data URL\n            if (!mimeType.toLowerCase().includes(\"image\")) {\n                await route.fulfill({\n                    status: response.status(),\n                    headers: response.headers(),\n                    body: buffer,\n                });\n                return;\n            }\n\n            const base64 = buffer.toString(\"base64\");\n            const dataUrl = `data:${mimeType};base64,${base64}`;\n\n            // 正常返回响应给页面\n            await route.fulfill({\n                status: response.status(),\n                headers: response.headers(),\n                body: buffer,\n            });\n\n            // 同时将 base64 图片注入到二维码 img 元素，绕过跨域限制\n            await page.evaluate((dataUrl) => {\n                const img = document.querySelector<HTMLImageElement>(\".tang-pass-qrcode-img\");\n                if (img) img.src = dataUrl;\n            }, dataUrl);\n            hasInjectedQrcode = true;\n        } catch (error) {\n            task.logger.error(\"二维码处理失败:\", error);\n            await route.abort();\n        }\n    });\n\n    // 在所有路由规则挂载后再进入百家号登录页，避免首屏资源在拦截前就加载\n    await page.goto(\"https://baijiahao.baidu.com/builder/theme/bjh/login\", {\n        timeout: 60 * 1000,\n        waitUntil: \"commit\",\n    });\n\n    await reporter(0, \"浏览器启动成功，请登录百家号……\", { connectAddress });\n\n    // 等待页面 DOM 加载完成\n    try {\n        await page.waitForLoadState(\"domcontentloaded\", { timeout: 10000 });\n        task.logger.info(\"页面 DOM 加载完成\");\n    } catch (e) {\n        task.logger.warn(\"页面加载超时，继续执行\", { error: String(e) });\n    }\n\n    // ========== 第四步：点击登录按钮 ==========\n    try {\n        await page.getByRole(\"button\", { name: \"登录/注册百家号\" }).click({ timeout: 15 * 1000 });\n        task.logger.info(\"点击登录按钮成功\");\n    } catch (e) {\n        task.logger.warn(\"未找到登录按钮或点击失败，可能已经在登录页面\", { error: String(e) });\n    }\n\n    // ========== 第五步：等待登录成功并获取用户信息 ==========\n    let token: string | null = null;\n    let userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n    try {\n        // 等待页面跳转到登录成功页面（不设超时，允许用户慢慢登录）\n        await page.waitForURL(\"**/builder/rc/home**\", {\n            timeout: 0,\n            waitUntil: \"domcontentloaded\",\n        });\n\n        task.logger.info(\"页面已跳转到登录成功页面\");\n        await reporter(0, \"登录成功，正在获取用户信息...\", { stage: \"scanQrcode\", connectAddress });\n\n        // 通过服务端请求获取用户信息（百家号需要从 Node 端发请求获取 token）\n        const cookies = await task._steelBrowserContext?.cookies();\n        const cookieHeader = cookies?.map((c) => `${c.name}=${c.value}`).join(\"; \") || \"\";\n\n        for (let i = 0; i < 3; i++) {\n            try {\n                const res = await fetch(\"https://baijiahao.baidu.com/user-ui/cms/getPassinfo\", {\n                    method: \"GET\",\n                    headers: { cookie: cookieHeader },\n                });\n\n                if (res.ok) {\n                    token = res.headers.get(\"token\");\n                    const jsonUser = (await res.json()) as {\n                        data: { avatar: string; uk: string; displayname: string };\n                    };\n                    userInfo = {\n                        name: jsonUser.data.displayname,\n                        avatar: jsonUser.data.avatar,\n                        uniqueId: jsonUser.data.uk,\n                    };\n                    break;\n                }\n\n                if (i < 2) await new Promise((res) => setTimeout(res, 500));\n            } catch (error) {\n                if (i === 2) {\n                    task.logger.error(\"获取用户信息失败\", { error: String(error) });\n                } else {\n                    await new Promise((res) => setTimeout(res, 500));\n                }\n            }\n        }\n    } catch (e) {\n        task.logger.error(\"等待登录跳转失败\", { error: String(e) });\n        isSelfClosing = true;\n        await cleanup();\n        return { code: 500, message: \"登录失败，请重试！\", data: { stage: \"waitForLogin\", connectAddress } };\n    }\n\n    // ========== 第六步：收集 cookie 并返回结果 ==========\n    const cookie = JSON.stringify(await task._steelBrowserContext?.cookies());\n\n    if (!token) task.logger.warn(\"未获取到 token，但继续返回结果\");\n    if (!userInfo.uniqueId) task.logger.warn(\"未获取到用户信息，但继续返回结果\");\n\n    task.logger.info(\"登录成功\", { hasToken: !!token, hasUserInfo: !!userInfo.uniqueId });\n\n    isSelfClosing = true;\n    await cleanup();\n\n    return success({ connectAddress, token, cookie, userInfo }, \"登录成功！\");\n};\n","/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n    status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n    function init(inst, def) {\n        var _a;\n        Object.defineProperty(inst, \"_zod\", {\n            value: inst._zod ?? {},\n            enumerable: false,\n        });\n        (_a = inst._zod).traits ?? (_a.traits = new Set());\n        inst._zod.traits.add(name);\n        initializer(inst, def);\n        // support prototype modifications\n        for (const k in _.prototype) {\n            if (!(k in inst))\n                Object.defineProperty(inst, k, { value: _.prototype[k].bind(inst) });\n        }\n        inst._zod.constr = _;\n        inst._zod.def = def;\n    }\n    // doesn't work if Parent has a constructor with arguments\n    const Parent = params?.Parent ?? Object;\n    class Definition extends Parent {\n    }\n    Object.defineProperty(Definition, \"name\", { value: name });\n    function _(def) {\n        var _a;\n        const inst = params?.Parent ? new Definition() : this;\n        init(inst, def);\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        for (const fn of inst._zod.deferred) {\n            fn();\n        }\n        return inst;\n    }\n    Object.defineProperty(_, \"init\", { value: init });\n    Object.defineProperty(_, Symbol.hasInstance, {\n        value: (inst) => {\n            if (params?.Parent && inst instanceof params.Parent)\n                return true;\n            return inst?._zod?.traits?.has(name);\n        },\n    });\n    Object.defineProperty(_, \"name\", { value: name });\n    return _;\n}\n//////////////////////////////   UTILITIES   ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n    constructor() {\n        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n    }\n}\nexport class $ZodEncodeError extends Error {\n    constructor(name) {\n        super(`Encountered unidirectional transform during encode: ${name}`);\n        this.name = \"ZodEncodeError\";\n    }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n    if (newConfig)\n        Object.assign(globalConfig, newConfig);\n    return globalConfig;\n}\n","// functions\nexport function assertEqual(val) {\n    return val;\n}\nexport function assertNotEqual(val) {\n    return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n    throw new Error();\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n    const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n    const values = Object.entries(entries)\n        .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n        .map(([_, v]) => v);\n    return values;\n}\nexport function joinValues(array, separator = \"|\") {\n    return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n    if (typeof value === \"bigint\")\n        return value.toString();\n    return value;\n}\nexport function cached(getter) {\n    const set = false;\n    return {\n        get value() {\n            if (!set) {\n                const value = getter();\n                Object.defineProperty(this, \"value\", { value });\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n    };\n}\nexport function nullish(input) {\n    return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n    const start = source.startsWith(\"^\") ? 1 : 0;\n    const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n    return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepString = step.toString();\n    let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n    if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n        const match = stepString.match(/\\d?e-(\\d?)/);\n        if (match?.[1]) {\n            stepDecCount = Number.parseInt(match[1]);\n        }\n    }\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n    let value = undefined;\n    Object.defineProperty(object, key, {\n        get() {\n            if (value === EVALUATING) {\n                // Circular reference detected, return undefined to break the cycle\n                return undefined;\n            }\n            if (value === undefined) {\n                value = EVALUATING;\n                value = getter();\n            }\n            return value;\n        },\n        set(v) {\n            Object.defineProperty(object, key, {\n                value: v,\n                // configurable: true,\n            });\n            // object[key] = v;\n        },\n        configurable: true,\n    });\n}\nexport function objectClone(obj) {\n    return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n    Object.defineProperty(target, prop, {\n        value,\n        writable: true,\n        enumerable: true,\n        configurable: true,\n    });\n}\nexport function mergeDefs(...defs) {\n    const mergedDescriptors = {};\n    for (const def of defs) {\n        const descriptors = Object.getOwnPropertyDescriptors(def);\n        Object.assign(mergedDescriptors, descriptors);\n    }\n    return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n    return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n    if (!path)\n        return obj;\n    return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n    const keys = Object.keys(promisesObj);\n    const promises = keys.map((key) => promisesObj[key]);\n    return Promise.all(promises).then((results) => {\n        const resolvedObj = {};\n        for (let i = 0; i < keys.length; i++) {\n            resolvedObj[keys[i]] = results[i];\n        }\n        return resolvedObj;\n    });\n}\nexport function randomString(length = 10) {\n    const chars = \"abcdefghijklmnopqrstuvwxyz\";\n    let str = \"\";\n    for (let i = 0; i < length; i++) {\n        str += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return str;\n}\nexport function esc(str) {\n    return JSON.stringify(str);\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n    return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n    // @ts-ignore\n    if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n        return false;\n    }\n    try {\n        const F = Function;\n        new F(\"\");\n        return true;\n    }\n    catch (_) {\n        return false;\n    }\n});\nexport function isPlainObject(o) {\n    if (isObject(o) === false)\n        return false;\n    // modified constructor\n    const ctor = o.constructor;\n    if (ctor === undefined)\n        return true;\n    // modified prototype\n    const prot = ctor.prototype;\n    if (isObject(prot) === false)\n        return false;\n    // ctor doesn't have static `isPrototypeOf`\n    if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n        return false;\n    }\n    return true;\n}\nexport function shallowClone(o) {\n    if (isPlainObject(o))\n        return { ...o };\n    if (Array.isArray(o))\n        return [...o];\n    return o;\n}\nexport function numKeys(data) {\n    let keyCount = 0;\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            keyCount++;\n        }\n    }\n    return keyCount;\n}\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return \"undefined\";\n        case \"string\":\n            return \"string\";\n        case \"number\":\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        case \"boolean\":\n            return \"boolean\";\n        case \"function\":\n            return \"function\";\n        case \"bigint\":\n            return \"bigint\";\n        case \"symbol\":\n            return \"symbol\";\n        case \"object\":\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return \"promise\";\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return \"map\";\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return \"set\";\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return \"date\";\n            }\n            // @ts-ignore\n            if (typeof File !== \"undefined\" && data instanceof File) {\n                return \"file\";\n            }\n            return \"object\";\n        default:\n            throw new Error(`Unknown data type: ${t}`);\n    }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n    const cl = new inst._zod.constr(def ?? inst._zod.def);\n    if (!def || params?.parent)\n        cl._zod.parent = inst;\n    return cl;\n}\nexport function normalizeParams(_params) {\n    const params = _params;\n    if (!params)\n        return {};\n    if (typeof params === \"string\")\n        return { error: () => params };\n    if (params?.message !== undefined) {\n        if (params?.error !== undefined)\n            throw new Error(\"Cannot specify both `message` and `error` params\");\n        params.error = params.message;\n    }\n    delete params.message;\n    if (typeof params.error === \"string\")\n        return { ...params, error: () => params.error };\n    return params;\n}\nexport function createTransparentProxy(getter) {\n    let target;\n    return new Proxy({}, {\n        get(_, prop, receiver) {\n            target ?? (target = getter());\n            return Reflect.get(target, prop, receiver);\n        },\n        set(_, prop, value, receiver) {\n            target ?? (target = getter());\n            return Reflect.set(target, prop, value, receiver);\n        },\n        has(_, prop) {\n            target ?? (target = getter());\n            return Reflect.has(target, prop);\n        },\n        deleteProperty(_, prop) {\n            target ?? (target = getter());\n            return Reflect.deleteProperty(target, prop);\n        },\n        ownKeys(_) {\n            target ?? (target = getter());\n            return Reflect.ownKeys(target);\n        },\n        getOwnPropertyDescriptor(_, prop) {\n            target ?? (target = getter());\n            return Reflect.getOwnPropertyDescriptor(target, prop);\n        },\n        defineProperty(_, prop, descriptor) {\n            target ?? (target = getter());\n            return Reflect.defineProperty(target, prop, descriptor);\n        },\n    });\n}\nexport function stringifyPrimitive(value) {\n    if (typeof value === \"bigint\")\n        return value.toString() + \"n\";\n    if (typeof value === \"string\")\n        return `\"${value}\"`;\n    return `${value}`;\n}\nexport function optionalKeys(shape) {\n    return Object.keys(shape).filter((k) => {\n        return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n    });\n}\nexport const NUMBER_FORMAT_RANGES = {\n    safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n    int32: [-2147483648, 2147483647],\n    uint32: [0, 4294967295],\n    float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n    float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n    int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n    uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n    const currDef = schema._zod.def;\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = {};\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                newShape[key] = currDef.shape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function omit(schema, mask) {\n    const currDef = schema._zod.def;\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = { ...schema._zod.def.shape };\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                delete newShape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function extend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to extend: expected a plain object\");\n    }\n    const checks = schema._zod.def.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\"Object schemas containing refinements cannot be extended. Use `.safeExtend()` instead.\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n    }\n    const def = {\n        ...schema._zod.def,\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        checks: schema._zod.def.checks,\n    };\n    return clone(schema, def);\n}\nexport function merge(a, b) {\n    const def = mergeDefs(a._zod.def, {\n        get shape() {\n            const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        get catchall() {\n            return b._zod.def.catchall;\n        },\n        checks: [], // delete existing checks\n    });\n    return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in oldShape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in shape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue !== true) {\n            return true;\n        }\n    }\n    return false;\n}\nexport function prefixIssues(path, issues) {\n    return issues.map((iss) => {\n        var _a;\n        (_a = iss).path ?? (_a.path = []);\n        iss.path.unshift(path);\n        return iss;\n    });\n}\nexport function unwrapMessage(message) {\n    return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n    const full = { ...iss, path: iss.path ?? [] };\n    // for backwards compatibility\n    if (!iss.message) {\n        const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n            unwrapMessage(ctx?.error?.(iss)) ??\n            unwrapMessage(config.customError?.(iss)) ??\n            unwrapMessage(config.localeError?.(iss)) ??\n            \"Invalid input\";\n        full.message = message;\n    }\n    // delete (full as any).def;\n    delete full.inst;\n    delete full.continue;\n    if (!ctx?.reportInput) {\n        delete full.input;\n    }\n    return full;\n}\nexport function getSizableOrigin(input) {\n    if (input instanceof Set)\n        return \"set\";\n    if (input instanceof Map)\n        return \"map\";\n    // @ts-ignore\n    if (input instanceof File)\n        return \"file\";\n    return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n    if (Array.isArray(input))\n        return \"array\";\n    if (typeof input === \"string\")\n        return \"string\";\n    return \"unknown\";\n}\nexport function issue(...args) {\n    const [iss, input, inst] = args;\n    if (typeof iss === \"string\") {\n        return {\n            message: iss,\n            code: \"custom\",\n            input,\n            inst,\n        };\n    }\n    return { ...iss };\n}\nexport function cleanEnum(obj) {\n    return Object.entries(obj)\n        .filter(([k, _]) => {\n        // return true if NaN, meaning it's not a number, thus a string key\n        return Number.isNaN(Number.parseInt(k, 10));\n    })\n        .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n    const binaryString = atob(base64);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n        bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n    let binaryString = \"\";\n    for (let i = 0; i < bytes.length; i++) {\n        binaryString += String.fromCharCode(bytes[i]);\n    }\n    return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n    const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n    return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n    return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n    const cleanHex = hex.replace(/^0x/, \"\");\n    if (cleanHex.length % 2 !== 0) {\n        throw new Error(\"Invalid hex string length\");\n    }\n    const bytes = new Uint8Array(cleanHex.length / 2);\n    for (let i = 0; i < cleanHex.length; i += 2) {\n        bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n    }\n    return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n    return Array.from(bytes)\n        .map((b) => b.toString(16).padStart(2, \"0\"))\n        .join(\"\");\n}\n// instanceof\nexport class Class {\n    constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n    inst.name = \"$ZodError\";\n    Object.defineProperty(inst, \"_zod\", {\n        value: inst._zod,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"issues\", {\n        value: def,\n        enumerable: false,\n    });\n    inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n    Object.defineProperty(inst, \"toString\", {\n        value: () => inst.message,\n        enumerable: false,\n    });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = {};\n    const formErrors = [];\n    for (const sub of error.issues) {\n        if (sub.path.length > 0) {\n            fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n            fieldErrors[sub.path[0]].push(mapper(sub));\n        }\n        else {\n            formErrors.push(mapper(sub));\n        }\n    }\n    return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = { _errors: [] };\n    const processError = (error) => {\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                issue.errors.map((issues) => processError({ issues }));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.path.length === 0) {\n                fieldErrors._errors.push(mapper(issue));\n            }\n            else {\n                let curr = fieldErrors;\n                let i = 0;\n                while (i < issue.path.length) {\n                    const el = issue.path[i];\n                    const terminal = i === issue.path.length - 1;\n                    if (!terminal) {\n                        curr[el] = curr[el] || { _errors: [] };\n                    }\n                    else {\n                        curr[el] = curr[el] || { _errors: [] };\n                        curr[el]._errors.push(mapper(issue));\n                    }\n                    curr = curr[el];\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n    const result = { errors: [] };\n    const processError = (error, path = []) => {\n        var _a, _b;\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                // regular union error\n                issue.errors.map((issues) => processError({ issues }, issue.path));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    result.errors.push(mapper(issue));\n                    continue;\n                }\n                let curr = result;\n                let i = 0;\n                while (i < fullpath.length) {\n                    const el = fullpath[i];\n                    const terminal = i === fullpath.length - 1;\n                    if (typeof el === \"string\") {\n                        curr.properties ?? (curr.properties = {});\n                        (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n                        curr = curr.properties[el];\n                    }\n                    else {\n                        curr.items ?? (curr.items = []);\n                        (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n                        curr = curr.items[el];\n                    }\n                    if (terminal) {\n                        curr.errors.push(mapper(issue));\n                    }\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n *   issues: [\n *     {\n *       expected: 'string',\n *       code: 'invalid_type',\n *       path: [ 'username' ],\n *       message: 'Invalid input: expected string'\n *     },\n *     {\n *       expected: 'number',\n *       code: 'invalid_type',\n *       path: [ 'favoriteNumbers', 1 ],\n *       message: 'Invalid input: expected number'\n *     }\n *   ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n *   ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n *   ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n    const segs = [];\n    const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n    for (const seg of path) {\n        if (typeof seg === \"number\")\n            segs.push(`[${seg}]`);\n        else if (typeof seg === \"symbol\")\n            segs.push(`[${JSON.stringify(String(seg))}]`);\n        else if (/[^\\w$]/.test(seg))\n            segs.push(`[${JSON.stringify(seg)}]`);\n        else {\n            if (segs.length)\n                segs.push(\".\");\n            segs.push(seg);\n        }\n    }\n    return segs.join(\"\");\n}\nexport function prettifyError(error) {\n    const lines = [];\n    // sort by path length\n    const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n    // Process each issue\n    for (const issue of issues) {\n        lines.push(`✖ ${issue.message}`);\n        if (issue.path?.length)\n            lines.push(`  → at ${toDotPath(issue.path)}`);\n    }\n    // Convert Map to formatted string\n    return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    if (result.issues.length) {\n        const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, _params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    if (result.issues.length) {\n        const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length\n        ? {\n            success: false,\n            error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length\n        ? {\n            success: false,\n            error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n    return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n    return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","export const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n    if (!version)\n        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n    return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n    return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\nexport const e164 = /^\\+(?:[0-9]){6,14}[0-9]$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n    const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n    const regex = typeof args.precision === \"number\"\n        ? args.precision === -1\n            ? `${hhmm}`\n            : args.precision === 0\n                ? `${hhmm}:[0-5]\\\\d`\n                : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n        : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n    return regex;\n}\nexport function time(args) {\n    return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n    const time = timeSource({ precision: args.precision });\n    const opts = [\"Z\"];\n    if (args.local)\n        opts.push(\"\");\n    // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n    if (args.offset)\n        opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n    const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n    return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n    const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n    return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n    return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n    return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n    var _a;\n    inst._zod ?? (inst._zod = {});\n    inst._zod.def = def;\n    (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n    number: \"number\",\n    bigint: \"bigint\",\n    object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n        if (def.value < curr) {\n            if (def.inclusive)\n                bag.maximum = def.value;\n            else\n                bag.exclusiveMaximum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n        if (def.value > curr) {\n            if (def.inclusive)\n                bag.minimum = def.value;\n            else\n                bag.exclusiveMinimum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        var _a;\n        (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n    });\n    inst._zod.check = (payload) => {\n        if (typeof payload.value !== typeof def.value)\n            throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n        const isMultiple = typeof payload.value === \"bigint\"\n            ? payload.value % def.value === BigInt(0)\n            : util.floatSafeRemainder(payload.value, def.value) === 0;\n        if (isMultiple)\n            return;\n        payload.issues.push({\n            origin: typeof payload.value,\n            code: \"not_multiple_of\",\n            divisor: def.value,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    def.format = def.format || \"float64\";\n    const isInt = def.format?.includes(\"int\");\n    const origin = isInt ? \"int\" : \"number\";\n    const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n        if (isInt)\n            bag.pattern = regexes.integer;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (isInt) {\n            if (!Number.isInteger(input)) {\n                // invalid_format issue\n                // payload.issues.push({\n                //   expected: def.format,\n                //   format: def.format,\n                //   code: \"invalid_format\",\n                //   input,\n                //   inst,\n                // });\n                // invalid_type issue\n                payload.issues.push({\n                    expected: origin,\n                    format: def.format,\n                    code: \"invalid_type\",\n                    continue: false,\n                    input,\n                    inst,\n                });\n                return;\n                // not_multiple_of issue\n                // payload.issues.push({\n                //   code: \"not_multiple_of\",\n                //   origin: \"number\",\n                //   input,\n                //   inst,\n                //   divisor: 1,\n                // });\n            }\n            if (!Number.isSafeInteger(input)) {\n                if (input > 0) {\n                    // too_big\n                    payload.issues.push({\n                        input,\n                        code: \"too_big\",\n                        maximum: Number.MAX_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        continue: !def.abort,\n                    });\n                }\n                else {\n                    // too_small\n                    payload.issues.push({\n                        input,\n                        code: \"too_small\",\n                        minimum: Number.MIN_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        continue: !def.abort,\n                    });\n                }\n                return;\n            }\n        }\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_small\",\n                minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inst,\n            });\n        }\n    };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_small\",\n                minimum: minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inst,\n            });\n        }\n    };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size <= def.maximum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size >= def.minimum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.size;\n        bag.maximum = def.size;\n        bag.size = def.size;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size === def.size)\n            return;\n        const tooBig = size > def.size;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length <= def.maximum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length >= def.minimum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.length;\n        bag.maximum = def.length;\n        bag.length = def.length;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length === def.length)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        const tooBig = length > def.length;\n        payload.issues.push({\n            origin,\n            ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n    var _a, _b;\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        if (def.pattern) {\n            bag.patterns ?? (bag.patterns = new Set());\n            bag.patterns.add(def.pattern);\n        }\n    });\n    if (def.pattern)\n        (_a = inst._zod).check ?? (_a.check = (payload) => {\n            def.pattern.lastIndex = 0;\n            if (def.pattern.test(payload.value))\n                return;\n            payload.issues.push({\n                origin: \"string\",\n                code: \"invalid_format\",\n                format: def.format,\n                input: payload.value,\n                ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n                inst,\n                continue: !def.abort,\n            });\n        });\n    else\n        (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n    $ZodCheckStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        def.pattern.lastIndex = 0;\n        if (def.pattern.test(payload.value))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"regex\",\n            input: payload.value,\n            pattern: def.pattern.toString(),\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.lowercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.uppercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const escapedRegex = util.escapeRegex(def.includes);\n    const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n    def.pattern = pattern;\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.includes(def.includes, def.position))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"includes\",\n            includes: def.includes,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.startsWith(def.prefix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"starts_with\",\n            prefix: def.prefix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.endsWith(def.suffix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"ends_with\",\n            suffix: def.suffix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n///////////////////////////////////\n/////    $ZodCheckProperty    /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n    if (result.issues.length) {\n        payload.issues.push(...util.prefixIssues(property, result.issues));\n    }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        const result = def.schema._zod.run({\n            value: payload.value[def.property],\n            issues: [],\n        }, {});\n        if (result instanceof Promise) {\n            return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n        }\n        handleCheckPropertyResult(result, payload, def.property);\n        return;\n    };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const mimeSet = new Set(def.mime);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.mime = def.mime;\n    });\n    inst._zod.check = (payload) => {\n        if (mimeSet.has(payload.value.type))\n            return;\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.mime,\n            input: payload.value.type,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        payload.value = def.tx(payload.value);\n    };\n});\n","export class Doc {\n    constructor(args = []) {\n        this.content = [];\n        this.indent = 0;\n        if (this)\n            this.args = args;\n    }\n    indented(fn) {\n        this.indent += 1;\n        fn(this);\n        this.indent -= 1;\n    }\n    write(arg) {\n        if (typeof arg === \"function\") {\n            arg(this, { execution: \"sync\" });\n            arg(this, { execution: \"async\" });\n            return;\n        }\n        const content = arg;\n        const lines = content.split(\"\\n\").filter((x) => x);\n        const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n        const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n        for (const line of dedented) {\n            this.content.push(line);\n        }\n    }\n    compile() {\n        const F = Function;\n        const args = this?.args;\n        const content = this?.content ?? [``];\n        const lines = [...content.map((x) => `  ${x}`)];\n        // console.log(lines.join(\"\\n\"));\n        return new F(...args, lines.join(\"\\n\"));\n    }\n}\n","export const version = {\n    major: 4,\n    minor: 1,\n    patch: 12,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n    var _a;\n    inst ?? (inst = {});\n    inst._zod.def = def; // set _def property\n    inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n    inst._zod.version = version;\n    const checks = [...(inst._zod.def.checks ?? [])];\n    // if inst is itself a checks.$ZodCheck, run it as a check\n    if (inst._zod.traits.has(\"$ZodCheck\")) {\n        checks.unshift(inst);\n    }\n    for (const ch of checks) {\n        for (const fn of ch._zod.onattach) {\n            fn(inst);\n        }\n    }\n    if (checks.length === 0) {\n        // deferred initializer\n        // inst._zod.parse is not yet defined\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred?.push(() => {\n            inst._zod.run = inst._zod.parse;\n        });\n    }\n    else {\n        const runChecks = (payload, checks, ctx) => {\n            let isAborted = util.aborted(payload);\n            let asyncResult;\n            for (const ch of checks) {\n                if (ch._zod.def.when) {\n                    const shouldRun = ch._zod.def.when(payload);\n                    if (!shouldRun)\n                        continue;\n                }\n                else if (isAborted) {\n                    continue;\n                }\n                const currLen = payload.issues.length;\n                const _ = ch._zod.check(payload);\n                if (_ instanceof Promise && ctx?.async === false) {\n                    throw new core.$ZodAsyncError();\n                }\n                if (asyncResult || _ instanceof Promise) {\n                    asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n                        await _;\n                        const nextLen = payload.issues.length;\n                        if (nextLen === currLen)\n                            return;\n                        if (!isAborted)\n                            isAborted = util.aborted(payload, currLen);\n                    });\n                }\n                else {\n                    const nextLen = payload.issues.length;\n                    if (nextLen === currLen)\n                        continue;\n                    if (!isAborted)\n                        isAborted = util.aborted(payload, currLen);\n                }\n            }\n            if (asyncResult) {\n                return asyncResult.then(() => {\n                    return payload;\n                });\n            }\n            return payload;\n        };\n        // const handleChecksResult = (\n        //   checkResult: ParsePayload,\n        //   originalResult: ParsePayload,\n        //   ctx: ParseContextInternal\n        // ): util.MaybeAsync<ParsePayload> => {\n        //   // if the checks mutated the value && there are no issues, re-parse the result\n        //   if (checkResult.value !== originalResult.value && !checkResult.issues.length)\n        //     return inst._zod.parse(checkResult, ctx);\n        //   return originalResult;\n        // };\n        const handleCanaryResult = (canary, payload, ctx) => {\n            // abort if the canary is aborted\n            if (util.aborted(canary)) {\n                canary.aborted = true;\n                return canary;\n            }\n            // run checks first, then\n            const checkResult = runChecks(payload, checks, ctx);\n            if (checkResult instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n            }\n            return inst._zod.parse(checkResult, ctx);\n        };\n        inst._zod.run = (payload, ctx) => {\n            if (ctx.skipChecks) {\n                return inst._zod.parse(payload, ctx);\n            }\n            if (ctx.direction === \"backward\") {\n                // run canary\n                // initial pass (no checks)\n                const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n                if (canary instanceof Promise) {\n                    return canary.then((canary) => {\n                        return handleCanaryResult(canary, payload, ctx);\n                    });\n                }\n                return handleCanaryResult(canary, payload, ctx);\n            }\n            // forward\n            const result = inst._zod.parse(payload, ctx);\n            if (result instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return result.then((result) => runChecks(result, checks, ctx));\n            }\n            return runChecks(result, checks, ctx);\n        };\n    }\n    inst[\"~standard\"] = {\n        validate: (value) => {\n            try {\n                const r = safeParse(inst, value);\n                return r.success ? { value: r.data } : { issues: r.error?.issues };\n            }\n            catch (_) {\n                return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n            }\n        },\n        vendor: \"zod\",\n        version: 1,\n    };\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n    inst._zod.parse = (payload, _) => {\n        if (def.coerce)\n            try {\n                payload.value = String(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"string\")\n            return payload;\n        payload.issues.push({\n            expected: \"string\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n    // check initialization must come first\n    checks.$ZodCheckStringFormat.init(inst, def);\n    $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.guid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n    if (def.version) {\n        const versionMap = {\n            v1: 1,\n            v2: 2,\n            v3: 3,\n            v4: 4,\n            v5: 5,\n            v6: 6,\n            v7: 7,\n            v8: 8,\n        };\n        const v = versionMap[def.version];\n        if (v === undefined)\n            throw new Error(`Invalid UUID version: \"${def.version}\"`);\n        def.pattern ?? (def.pattern = regexes.uuid(v));\n    }\n    else\n        def.pattern ?? (def.pattern = regexes.uuid());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.email);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        try {\n            // Trim whitespace from input\n            const trimmed = payload.value.trim();\n            // @ts-ignore\n            const url = new URL(trimmed);\n            if (def.hostname) {\n                def.hostname.lastIndex = 0;\n                if (!def.hostname.test(url.hostname)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid hostname\",\n                        pattern: regexes.hostname.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            if (def.protocol) {\n                def.protocol.lastIndex = 0;\n                if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid protocol\",\n                        pattern: def.protocol.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            // Set the output value based on normalize flag\n            if (def.normalize) {\n                // Use normalized URL\n                payload.value = url.href;\n            }\n            else {\n                // Preserve the original input (trimmed)\n                payload.value = trimmed;\n            }\n            return;\n        }\n        catch (_) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"url\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.emoji());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.nanoid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid2);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ulid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.xid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ksuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.datetime(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.date);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.time(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.duration);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv4);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = `ipv4`;\n    });\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv6);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = `ipv6`;\n    });\n    inst._zod.check = (payload) => {\n        try {\n            // @ts-ignore\n            new URL(`http://[${payload.value}]`);\n            // return;\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"ipv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv4);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        const parts = payload.value.split(\"/\");\n        try {\n            if (parts.length !== 2)\n                throw new Error();\n            const [address, prefix] = parts;\n            if (!prefix)\n                throw new Error();\n            const prefixNum = Number(prefix);\n            if (`${prefixNum}` !== prefix)\n                throw new Error();\n            if (prefixNum < 0 || prefixNum > 128)\n                throw new Error();\n            // @ts-ignore\n            new URL(`http://[${address}]`);\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"cidrv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64(data) {\n    if (data === \"\")\n        return true;\n    if (data.length % 4 !== 0)\n        return false;\n    try {\n        // @ts-ignore\n        atob(data);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.contentEncoding = \"base64\";\n    });\n    inst._zod.check = (payload) => {\n        if (isValidBase64(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64URL(data) {\n    if (!regexes.base64url.test(data))\n        return false;\n    const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n    const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n    return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64url);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.contentEncoding = \"base64url\";\n    });\n    inst._zod.check = (payload) => {\n        if (isValidBase64URL(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64url\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.e164);\n    $ZodStringFormat.init(inst, def);\n});\n//////////////////////////////   ZodJWT   //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n    try {\n        const tokensParts = token.split(\".\");\n        if (tokensParts.length !== 3)\n            return false;\n        const [header] = tokensParts;\n        if (!header)\n            return false;\n        // @ts-ignore\n        const parsedHeader = JSON.parse(atob(header));\n        if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n            return false;\n        if (!parsedHeader.alg)\n            return false;\n        if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidJWT(payload.value, def.alg))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"jwt\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (def.fn(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: def.format,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Number(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n            return payload;\n        }\n        const received = typeof input === \"number\"\n            ? Number.isNaN(input)\n                ? \"NaN\"\n                : !Number.isFinite(input)\n                    ? \"Infinity\"\n                    : undefined\n            : undefined;\n        payload.issues.push({\n            expected: \"number\",\n            code: \"invalid_type\",\n            input,\n            inst,\n            ...(received ? { received } : {}),\n        });\n        return payload;\n    };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    checks.$ZodCheckNumberFormat.init(inst, def);\n    $ZodNumber.init(inst, def); // no format checksp\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.boolean;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Boolean(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"boolean\")\n            return payload;\n        payload.issues.push({\n            expected: \"boolean\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.bigint;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = BigInt(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"bigint\")\n            return payload;\n        payload.issues.push({\n            expected: \"bigint\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    checks.$ZodCheckBigIntFormat.init(inst, def);\n    $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"symbol\")\n            return payload;\n        payload.issues.push({\n            expected: \"symbol\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.undefined;\n    inst._zod.values = new Set([undefined]);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"undefined\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.null;\n    inst._zod.values = new Set([null]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input === null)\n            return payload;\n        payload.issues.push({\n            expected: \"null\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.issues.push({\n            expected: \"never\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"void\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce) {\n            try {\n                payload.value = new Date(payload.value);\n            }\n            catch (_err) { }\n        }\n        const input = payload.value;\n        const isDate = input instanceof Date;\n        const isValidDate = isDate && !Number.isNaN(input.getTime());\n        if (isValidDate)\n            return payload;\n        payload.issues.push({\n            expected: \"date\",\n            code: \"invalid_type\",\n            input,\n            ...(isDate ? { received: \"Invalid Date\" } : {}),\n            inst,\n        });\n        return payload;\n    };\n});\nfunction handleArrayResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                expected: \"array\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = Array(input.length);\n        const proms = [];\n        for (let i = 0; i < input.length; i++) {\n            const item = input[i];\n            const result = def.element._zod.run({\n                value: item,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n            }\n            else {\n                handleArrayResult(result, payload, i);\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload; //handleArrayResultsAsync(parseResults, final);\n    };\n});\nfunction handlePropertyResult(result, final, key, input) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(key, result.issues));\n    }\n    if (result.value === undefined) {\n        if (key in input) {\n            final.value[key] = undefined;\n        }\n    }\n    else {\n        final.value[key] = result.value;\n    }\n}\nfunction normalizeDef(def) {\n    const keys = Object.keys(def.shape);\n    for (const k of keys) {\n        if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n            throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n        }\n    }\n    const okeys = util.optionalKeys(def.shape);\n    return {\n        ...def,\n        keys,\n        keySet: new Set(keys),\n        numKeys: keys.length,\n        optionalKeys: new Set(okeys),\n    };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n    const unrecognized = [];\n    // iterate over input keys\n    const keySet = def.keySet;\n    const _catchall = def.catchall._zod;\n    const t = _catchall.def.type;\n    for (const key of Object.keys(input)) {\n        if (keySet.has(key))\n            continue;\n        if (t === \"never\") {\n            unrecognized.push(key);\n            continue;\n        }\n        const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n        if (r instanceof Promise) {\n            proms.push(r.then((r) => handlePropertyResult(r, payload, key, input)));\n        }\n        else {\n            handlePropertyResult(r, payload, key, input);\n        }\n    }\n    if (unrecognized.length) {\n        payload.issues.push({\n            code: \"unrecognized_keys\",\n            keys: unrecognized,\n            input,\n            inst,\n        });\n    }\n    if (!proms.length)\n        return payload;\n    return Promise.all(proms).then(() => {\n        return payload;\n    });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodType.init(inst, def);\n    // const sh = def.shape;\n    const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n    if (!desc?.get) {\n        const sh = def.shape;\n        Object.defineProperty(def, \"shape\", {\n            get: () => {\n                const newSh = { ...sh };\n                Object.defineProperty(def, \"shape\", {\n                    value: newSh,\n                });\n                return newSh;\n            },\n        });\n    }\n    const _normalized = util.cached(() => normalizeDef(def));\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const shape = def.shape;\n        const propValues = {};\n        for (const key in shape) {\n            const field = shape[key]._zod;\n            if (field.values) {\n                propValues[key] ?? (propValues[key] = new Set());\n                for (const v of field.values)\n                    propValues[key].add(v);\n            }\n        }\n        return propValues;\n    });\n    const isObject = util.isObject;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = {};\n        const proms = [];\n        const shape = value.shape;\n        for (const key of value.keys) {\n            const el = shape[key];\n            const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((r) => handlePropertyResult(r, payload, key, input)));\n            }\n            else {\n                handlePropertyResult(r, payload, key, input);\n            }\n        }\n        if (!catchall) {\n            return proms.length ? Promise.all(proms).then(() => payload) : payload;\n        }\n        return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n    };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodObject.init(inst, def);\n    const superParse = inst._zod.parse;\n    const _normalized = util.cached(() => normalizeDef(def));\n    const generateFastpass = (shape) => {\n        const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n        const normalized = _normalized.value;\n        const parseStr = (key) => {\n            const k = util.esc(key);\n            return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n        };\n        doc.write(`const input = payload.value;`);\n        const ids = Object.create(null);\n        let counter = 0;\n        for (const key of normalized.keys) {\n            ids[key] = `key_${counter++}`;\n        }\n        // A: preserve key order {\n        doc.write(`const newResult = {};`);\n        for (const key of normalized.keys) {\n            const id = ids[key];\n            const k = util.esc(key);\n            doc.write(`const ${id} = ${parseStr(key)};`);\n            doc.write(`\n        if (${id}.issues.length) {\n          payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n            ...iss,\n            path: iss.path ? [${k}, ...iss.path] : [${k}]\n          })));\n        }\n        \n        \n        if (${id}.value === undefined) {\n          if (${k} in input) {\n            newResult[${k}] = undefined;\n          }\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        \n      `);\n        }\n        doc.write(`payload.value = newResult;`);\n        doc.write(`return payload;`);\n        const fn = doc.compile();\n        return (payload, ctx) => fn(shape, payload, ctx);\n    };\n    let fastpass;\n    const isObject = util.isObject;\n    const jit = !core.globalConfig.jitless;\n    const allowsEval = util.allowsEval;\n    const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n            // always synchronous\n            if (!fastpass)\n                fastpass = generateFastpass(def.shape);\n            payload = fastpass(payload, ctx);\n            if (!catchall)\n                return payload;\n            return handleCatchall([], input, payload, ctx, value, inst);\n        }\n        return superParse(payload, ctx);\n    };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n    for (const result of results) {\n        if (result.issues.length === 0) {\n            final.value = result.value;\n            return final;\n        }\n    }\n    const nonaborted = results.filter((r) => !util.aborted(r));\n    if (nonaborted.length === 1) {\n        final.value = nonaborted[0].value;\n        return nonaborted[0];\n    }\n    final.issues.push({\n        code: \"invalid_union\",\n        input: final.value,\n        inst,\n        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n    });\n    return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"values\", () => {\n        if (def.options.every((o) => o._zod.values)) {\n            return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n        }\n        return undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        if (def.options.every((o) => o._zod.pattern)) {\n            const patterns = def.options.map((o) => o._zod.pattern);\n            return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n        }\n        return undefined;\n    });\n    const single = def.options.length === 1;\n    const first = def.options[0]._zod.run;\n    inst._zod.parse = (payload, ctx) => {\n        if (single) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                if (result.issues.length === 0)\n                    return result;\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n    $ZodUnion.init(inst, def);\n    const _super = inst._zod.parse;\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const propValues = {};\n        for (const option of def.options) {\n            const pv = option._zod.propValues;\n            if (!pv || Object.keys(pv).length === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n            for (const [k, v] of Object.entries(pv)) {\n                if (!propValues[k])\n                    propValues[k] = new Set();\n                for (const val of v) {\n                    propValues[k].add(val);\n                }\n            }\n        }\n        return propValues;\n    });\n    const disc = util.cached(() => {\n        const opts = def.options;\n        const map = new Map();\n        for (const o of opts) {\n            const values = o._zod.propValues?.[def.discriminator];\n            if (!values || values.size === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n            for (const v of values) {\n                if (map.has(v)) {\n                    throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n                }\n                map.set(v, o);\n            }\n        }\n        return map;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isObject(input)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"object\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const opt = disc.value.get(input?.[def.discriminator]);\n        if (opt) {\n            return opt._zod.run(payload, ctx);\n        }\n        if (def.unionFallback) {\n            return _super(payload, ctx);\n        }\n        // no matching discriminator\n        payload.issues.push({\n            code: \"invalid_union\",\n            errors: [],\n            note: \"No matching discriminator\",\n            discriminator: def.discriminator,\n            input,\n            path: [def.discriminator],\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n        const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n        const async = left instanceof Promise || right instanceof Promise;\n        if (async) {\n            return Promise.all([left, right]).then(([left, right]) => {\n                return handleIntersectionResults(payload, left, right);\n            });\n        }\n        return handleIntersectionResults(payload, left, right);\n    };\n});\nfunction mergeValues(a, b) {\n    // const aType = parse.t(a);\n    // const bType = parse.t(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    if (a instanceof Date && b instanceof Date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    if (util.isPlainObject(a) && util.isPlainObject(b)) {\n        const bKeys = Object.keys(b);\n        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return { valid: false, mergeErrorPath: [] };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n    if (left.issues.length) {\n        result.issues.push(...left.issues);\n    }\n    if (right.issues.length) {\n        result.issues.push(...right.issues);\n    }\n    if (util.aborted(result))\n        return result;\n    const merged = mergeValues(left.value, right.value);\n    if (!merged.valid) {\n        throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n    }\n    result.value = merged.data;\n    return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const items = def.items;\n    const optStart = items.length - [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"tuple\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        payload.value = [];\n        const proms = [];\n        if (!def.rest) {\n            const tooBig = input.length > items.length;\n            const tooSmall = input.length < optStart - 1;\n            if (tooBig || tooSmall) {\n                payload.issues.push({\n                    ...(tooBig ? { code: \"too_big\", maximum: items.length } : { code: \"too_small\", minimum: items.length }),\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n                return payload;\n            }\n        }\n        let i = -1;\n        for (const item of items) {\n            i++;\n            if (i >= input.length)\n                if (i >= optStart)\n                    continue;\n            const result = item._zod.run({\n                value: input[i],\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n            }\n            else {\n                handleTupleResult(result, payload, i);\n            }\n        }\n        if (def.rest) {\n            const rest = input.slice(items.length);\n            for (const el of rest) {\n                i++;\n                const result = def.rest._zod.run({\n                    value: el,\n                    issues: [],\n                }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n                }\n                else {\n                    handleTupleResult(result, payload, i);\n                }\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleTupleResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isPlainObject(input)) {\n            payload.issues.push({\n                expected: \"record\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        if (def.keyType._zod.values) {\n            const values = def.keyType._zod.values;\n            payload.value = {};\n            for (const key of values) {\n                if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n                    const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                    if (result instanceof Promise) {\n                        proms.push(result.then((result) => {\n                            if (result.issues.length) {\n                                payload.issues.push(...util.prefixIssues(key, result.issues));\n                            }\n                            payload.value[key] = result.value;\n                        }));\n                    }\n                    else {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[key] = result.value;\n                    }\n                }\n            }\n            let unrecognized;\n            for (const key in input) {\n                if (!values.has(key)) {\n                    unrecognized = unrecognized ?? [];\n                    unrecognized.push(key);\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                });\n            }\n        }\n        else {\n            payload.value = {};\n            for (const key of Reflect.ownKeys(input)) {\n                if (key === \"__proto__\")\n                    continue;\n                const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                if (keyResult instanceof Promise) {\n                    throw new Error(\"Async schemas not supported in object keys currently\");\n                }\n                if (keyResult.issues.length) {\n                    payload.issues.push({\n                        code: \"invalid_key\",\n                        origin: \"record\",\n                        issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        input: key,\n                        path: [key],\n                        inst,\n                    });\n                    payload.value[keyResult.value] = keyResult.value;\n                    continue;\n                }\n                const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[keyResult.value] = result.value;\n                    }));\n                }\n                else {\n                    if (result.issues.length) {\n                        payload.issues.push(...util.prefixIssues(key, result.issues));\n                    }\n                    payload.value[keyResult.value] = result.value;\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload;\n    };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Map)) {\n            payload.issues.push({\n                expected: \"map\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Map();\n        for (const [key, value] of input) {\n            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n            const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n            if (keyResult instanceof Promise || valueResult instanceof Promise) {\n                proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n                    handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n                }));\n            }\n            else {\n                handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n    if (keyResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, keyResult.issues));\n        }\n        else {\n            final.issues.push({\n                code: \"invalid_key\",\n                origin: \"map\",\n                input,\n                inst,\n                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    if (valueResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, valueResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_element\",\n                input,\n                inst,\n                key: key,\n                issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Set)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"set\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Set();\n        for (const item of input) {\n            const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleSetResult(result, payload)));\n            }\n            else\n                handleSetResult(result, payload);\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleSetResult(result, final) {\n    if (result.issues.length) {\n        final.issues.push(...result.issues);\n    }\n    final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = util.getEnumValues(def.entries);\n    const valuesSet = new Set(values);\n    inst._zod.values = valuesSet;\n    inst._zod.pattern = new RegExp(`^(${values\n        .filter((k) => util.propertyKeyTypes.has(typeof k))\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (valuesSet.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    if (def.values.length === 0) {\n        throw new Error(\"Cannot create literal schema with no valid values\");\n    }\n    inst._zod.values = new Set(def.values);\n    inst._zod.pattern = new RegExp(`^(${def.values\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (inst._zod.values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        // @ts-ignore\n        if (input instanceof File)\n            return payload;\n        payload.issues.push({\n            expected: \"file\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        const _out = def.transform(payload.value, payload);\n        if (ctx.async) {\n            const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        if (_out instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        payload.value = _out;\n        return payload;\n    };\n});\nfunction handleOptionalResult(result, input) {\n    if (result.issues.length && input === undefined) {\n        return { issues: [], value: undefined };\n    }\n    return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (def.innerType._zod.optin === \"optional\") {\n            const result = def.innerType._zod.run(payload, ctx);\n            if (result instanceof Promise)\n                return result.then((r) => handleOptionalResult(r, payload.value));\n            return handleOptionalResult(result, payload.value);\n        }\n        if (payload.value === undefined) {\n            return payload;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n    });\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        // Forward direction (decode): allow null to pass through\n        if (payload.value === null)\n            return payload;\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // inst._zod.qin = \"true\";\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply defaults for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n            /**\n             * $ZodDefault returns the default value immediately in forward direction.\n             * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe.   */\n            return payload;\n        }\n        // Forward direction: continue with default handling\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleDefaultResult(result, def));\n        }\n        return handleDefaultResult(result, def);\n    };\n});\nfunction handleDefaultResult(payload, def) {\n    if (payload.value === undefined) {\n        payload.value = def.defaultValue;\n    }\n    return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply prefault for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => {\n        const v = def.innerType._zod.values;\n        return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleNonOptionalResult(result, inst));\n        }\n        return handleNonOptionalResult(result, inst);\n    };\n});\nfunction handleNonOptionalResult(payload, inst) {\n    if (!payload.issues.length && payload.value === undefined) {\n        payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: payload.value,\n            inst,\n        });\n    }\n    return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(\"ZodSuccess\");\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.issues.length === 0;\n                return payload;\n            });\n        }\n        payload.value = result.issues.length === 0;\n        return payload;\n    };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply catch logic\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.value;\n                if (result.issues.length) {\n                    payload.value = def.catchValue({\n                        ...payload,\n                        error: {\n                            issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        },\n                        input: payload.value,\n                    });\n                    payload.issues = [];\n                }\n                return payload;\n            });\n        }\n        payload.value = result.value;\n        if (result.issues.length) {\n            payload.value = def.catchValue({\n                ...payload,\n                error: {\n                    issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                },\n                input: payload.value,\n            });\n            payload.issues = [];\n        }\n        return payload;\n    };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"nan\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handlePipeResult(right, def.in, ctx));\n            }\n            return handlePipeResult(right, def.in, ctx);\n        }\n        const left = def.in._zod.run(payload, ctx);\n        if (left instanceof Promise) {\n            return left.then((left) => handlePipeResult(left, def.out, ctx));\n        }\n        return handlePipeResult(left, def.out, ctx);\n    };\n});\nfunction handlePipeResult(left, next, ctx) {\n    if (left.issues.length) {\n        // prevent further checks\n        left.aborted = true;\n        return left;\n    }\n    return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        const direction = ctx.direction || \"forward\";\n        if (direction === \"forward\") {\n            const left = def.in._zod.run(payload, ctx);\n            if (left instanceof Promise) {\n                return left.then((left) => handleCodecAResult(left, def, ctx));\n            }\n            return handleCodecAResult(left, def, ctx);\n        }\n        else {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handleCodecAResult(right, def, ctx));\n            }\n            return handleCodecAResult(right, def, ctx);\n        }\n    };\n});\nfunction handleCodecAResult(result, def, ctx) {\n    if (result.issues.length) {\n        // prevent further checks\n        result.aborted = true;\n        return result;\n    }\n    const direction = ctx.direction || \"forward\";\n    if (direction === \"forward\") {\n        const transformed = def.transform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.out, ctx);\n    }\n    else {\n        const transformed = def.reverseTransform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.in, ctx);\n    }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n    // Check if transform added any issues\n    if (left.issues.length) {\n        left.aborted = true;\n        return left;\n    }\n    return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then(handleReadonlyResult);\n        }\n        return handleReadonlyResult(result);\n    };\n});\nfunction handleReadonlyResult(payload) {\n    payload.value = Object.freeze(payload.value);\n    return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const regexParts = [];\n    for (const part of def.parts) {\n        if (typeof part === \"object\" && part !== null) {\n            // is Zod schema\n            if (!part._zod.pattern) {\n                // if (!source)\n                throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n            }\n            const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n            if (!source)\n                throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n            const start = source.startsWith(\"^\") ? 1 : 0;\n            const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n            regexParts.push(source.slice(start, end));\n        }\n        else if (part === null || util.primitiveTypes.has(typeof part)) {\n            regexParts.push(util.escapeRegex(`${part}`));\n        }\n        else {\n            throw new Error(`Invalid template literal part: ${part}`);\n        }\n    }\n    inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"string\") {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"template_literal\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        inst._zod.pattern.lastIndex = 0;\n        if (!inst._zod.pattern.test(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                code: \"invalid_format\",\n                format: def.format ?? \"template_literal\",\n                pattern: inst._zod.pattern.source,\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._def = def;\n    inst._zod.def = def;\n    inst.implement = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implement() must be called with a function\");\n        }\n        return function (...args) {\n            const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n            const result = Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return parse(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst.implementAsync = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implementAsync() must be called with a function\");\n        }\n        return async function (...args) {\n            const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n            const result = await Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return await parseAsync(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"function\") {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"function\",\n                input: payload.value,\n                inst,\n            });\n            return payload;\n        }\n        // Check if output is a promise type to determine if we should use async implementation\n        const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n        if (hasPromiseOutput) {\n            payload.value = inst.implementAsync(payload.value);\n        }\n        else {\n            payload.value = inst.implement(payload.value);\n        }\n        return payload;\n    };\n    inst.input = (...args) => {\n        const F = inst.constructor;\n        if (Array.isArray(args[0])) {\n            return new F({\n                type: \"function\",\n                input: new $ZodTuple({\n                    type: \"tuple\",\n                    items: args[0],\n                    rest: args[1],\n                }),\n                output: inst._def.output,\n            });\n        }\n        return new F({\n            type: \"function\",\n            input: args[0],\n            output: inst._def.output,\n        });\n    };\n    inst.output = (output) => {\n        const F = inst.constructor;\n        return new F({\n            type: \"function\",\n            input: inst._def.input,\n            output,\n        });\n    };\n    return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n    };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // let _innerType!: any;\n    // util.defineLazy(def, \"getter\", () => {\n    //   if (!_innerType) {\n    //     _innerType = def.getter();\n    //   }\n    //   return () => _innerType;\n    // });\n    util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n    util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType._zod.pattern);\n    util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType._zod.optin ?? undefined);\n    util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType._zod.optout ?? undefined);\n    inst._zod.parse = (payload, ctx) => {\n        const inner = inst._zod.innerType;\n        return inner._zod.run(payload, ctx);\n    };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n    checks.$ZodCheck.init(inst, def);\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _) => {\n        return payload;\n    };\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const r = def.fn(input);\n        if (r instanceof Promise) {\n            return r.then((r) => handleRefineResult(r, payload, input, inst));\n        }\n        handleRefineResult(r, payload, input, inst);\n        return;\n    };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n    if (!result) {\n        const _iss = {\n            code: \"custom\",\n            input,\n            inst, // incorporates params.error into issue reporting\n            path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n            continue: !inst._zod.def.abort,\n            // params: inst._zod.def.params,\n        };\n        if (inst._zod.def.params)\n            _iss.params = inst._zod.def.params;\n        payload.issues.push(util.issue(_iss));\n    }\n}\n","import * as util from \"../core/util.js\";\nexport const parsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"number\": {\n            return Number.isNaN(data) ? \"NaN\" : \"number\";\n        }\n        case \"object\": {\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                return data.constructor.name;\n            }\n        }\n    }\n    return t;\n};\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"characters\", verb: \"to have\" },\n        file: { unit: \"bytes\", verb: \"to have\" },\n        array: { unit: \"items\", verb: \"to have\" },\n        set: { unit: \"items\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const Nouns = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Invalid input: expected ${issue.expected}, received ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Invalid string: must start with \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Invalid string: must end with \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Invalid string: must include \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Invalid string: must match pattern ${_issue.pattern}`;\n                return `Invalid ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Invalid number: must be a multiple of ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Invalid key in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Invalid input\";\n            case \"invalid_element\":\n                return `Invalid value in ${issue.origin}`;\n            default:\n                return `Invalid input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","export const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n    constructor() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n    }\n    add(schema, ..._meta) {\n        const meta = _meta[0];\n        this._map.set(schema, meta);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            if (this._idmap.has(meta.id)) {\n                throw new Error(`ID ${meta.id} already exists in the registry`);\n            }\n            this._idmap.set(meta.id, schema);\n        }\n        return this;\n    }\n    clear() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n        return this;\n    }\n    remove(schema) {\n        const meta = this._map.get(schema);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.delete(meta.id);\n        }\n        this._map.delete(schema);\n        return this;\n    }\n    get(schema) {\n        // return this._map.get(schema) as any;\n        // inherit metadata\n        const p = schema._zod.parent;\n        if (p) {\n            const pm = { ...(this.get(p) ?? {}) };\n            delete pm.id; // do not inherit id\n            const f = { ...pm, ...this._map.get(schema) };\n            return Object.keys(f).length ? f : undefined;\n        }\n        return this._map.get(schema);\n    }\n    has(schema) {\n        return this._map.has(schema);\n    }\n}\n// registries\nexport function registry() {\n    return new $ZodRegistry();\n}\nexport const globalRegistry = /*@__PURE__*/ registry();\n","import * as checks from \"./checks.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\nexport function _string(Class, params) {\n    return new Class({\n        type: \"string\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedString(Class, params) {\n    return new Class({\n        type: \"string\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _email(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"email\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _guid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"guid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v4\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v6\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv7(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v7\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _emoji(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"emoji\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _nanoid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"nanoid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cuid2(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid2\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ulid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ulid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _xid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"xid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ksuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ksuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ipv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ipv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cidrv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cidrv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _base64(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _base64url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _e164(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"e164\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _jwt(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"jwt\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const TimePrecision = {\n    Any: null,\n    Minute: -1,\n    Second: 0,\n    Millisecond: 3,\n    Microsecond: 6,\n};\nexport function _isoDateTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"datetime\",\n        check: \"string_format\",\n        offset: false,\n        local: false,\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoDate(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"date\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"time\",\n        check: \"string_format\",\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoDuration(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"duration\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _number(Class, params) {\n    return new Class({\n        type: \"number\",\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedNumber(Class, params) {\n    return new Class({\n        type: \"number\",\n        coerce: true,\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"safeint\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _float32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _float64(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"int32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uint32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"uint32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _boolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedBoolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _bigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedBigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"int64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uint64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"uint64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _symbol(Class, params) {\n    return new Class({\n        type: \"symbol\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _undefined(Class, params) {\n    return new Class({\n        type: \"undefined\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _null(Class, params) {\n    return new Class({\n        type: \"null\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _any(Class) {\n    return new Class({\n        type: \"any\",\n    });\n}\nexport function _unknown(Class) {\n    return new Class({\n        type: \"unknown\",\n    });\n}\nexport function _never(Class, params) {\n    return new Class({\n        type: \"never\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _void(Class, params) {\n    return new Class({\n        type: \"void\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _date(Class, params) {\n    return new Class({\n        type: \"date\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedDate(Class, params) {\n    return new Class({\n        type: \"date\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _nan(Class, params) {\n    return new Class({\n        type: \"nan\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _lt(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\nexport function _lte(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\nexport function _gt(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\nexport function _gte(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\nexport function _positive(params) {\n    return _gt(0, params);\n}\n// negative\nexport function _negative(params) {\n    return _lt(0, params);\n}\n// nonpositive\nexport function _nonpositive(params) {\n    return _lte(0, params);\n}\n// nonnegative\nexport function _nonnegative(params) {\n    return _gte(0, params);\n}\nexport function _multipleOf(value, params) {\n    return new checks.$ZodCheckMultipleOf({\n        check: \"multiple_of\",\n        ...util.normalizeParams(params),\n        value,\n    });\n}\nexport function _maxSize(maximum, params) {\n    return new checks.$ZodCheckMaxSize({\n        check: \"max_size\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n}\nexport function _minSize(minimum, params) {\n    return new checks.$ZodCheckMinSize({\n        check: \"min_size\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\nexport function _size(size, params) {\n    return new checks.$ZodCheckSizeEquals({\n        check: \"size_equals\",\n        ...util.normalizeParams(params),\n        size,\n    });\n}\nexport function _maxLength(maximum, params) {\n    const ch = new checks.$ZodCheckMaxLength({\n        check: \"max_length\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n    return ch;\n}\nexport function _minLength(minimum, params) {\n    return new checks.$ZodCheckMinLength({\n        check: \"min_length\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\nexport function _length(length, params) {\n    return new checks.$ZodCheckLengthEquals({\n        check: \"length_equals\",\n        ...util.normalizeParams(params),\n        length,\n    });\n}\nexport function _regex(pattern, params) {\n    return new checks.$ZodCheckRegex({\n        check: \"string_format\",\n        format: \"regex\",\n        ...util.normalizeParams(params),\n        pattern,\n    });\n}\nexport function _lowercase(params) {\n    return new checks.$ZodCheckLowerCase({\n        check: \"string_format\",\n        format: \"lowercase\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uppercase(params) {\n    return new checks.$ZodCheckUpperCase({\n        check: \"string_format\",\n        format: \"uppercase\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _includes(includes, params) {\n    return new checks.$ZodCheckIncludes({\n        check: \"string_format\",\n        format: \"includes\",\n        ...util.normalizeParams(params),\n        includes,\n    });\n}\nexport function _startsWith(prefix, params) {\n    return new checks.$ZodCheckStartsWith({\n        check: \"string_format\",\n        format: \"starts_with\",\n        ...util.normalizeParams(params),\n        prefix,\n    });\n}\nexport function _endsWith(suffix, params) {\n    return new checks.$ZodCheckEndsWith({\n        check: \"string_format\",\n        format: \"ends_with\",\n        ...util.normalizeParams(params),\n        suffix,\n    });\n}\nexport function _property(property, schema, params) {\n    return new checks.$ZodCheckProperty({\n        check: \"property\",\n        property,\n        schema,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _mime(types, params) {\n    return new checks.$ZodCheckMimeType({\n        check: \"mime_type\",\n        mime: types,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _overwrite(tx) {\n    return new checks.$ZodCheckOverwrite({\n        check: \"overwrite\",\n        tx,\n    });\n}\n// normalize\nexport function _normalize(form) {\n    return _overwrite((input) => input.normalize(form));\n}\n// trim\nexport function _trim() {\n    return _overwrite((input) => input.trim());\n}\n// toLowerCase\nexport function _toLowerCase() {\n    return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\nexport function _toUpperCase() {\n    return _overwrite((input) => input.toUpperCase());\n}\nexport function _array(Class, element, params) {\n    return new Class({\n        type: \"array\",\n        element,\n        // get element() {\n        //   return element;\n        // },\n        ...util.normalizeParams(params),\n    });\n}\nexport function _union(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _intersection(Class, left, right) {\n    return new Class({\n        type: \"intersection\",\n        left,\n        right,\n    });\n}\n// export function _tuple(\n//   Class: util.SchemaClass<schemas.$ZodTuple>,\n//   items: [],\n//   params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new Class({\n        type: \"tuple\",\n        items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _record(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"record\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _map(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"map\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _set(Class, valueType, params) {\n    return new Class({\n        type: \"set\",\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _enum(Class, values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    // if (Array.isArray(values)) {\n    //   for (const value of values) {\n    //     entries[value] = value;\n    //   }\n    // } else {\n    //   Object.assign(entries, values);\n    // }\n    // const entries: util.EnumLike = {};\n    // for (const val of values) {\n    //   entries[val] = val;\n    // }\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _literal(Class, value, params) {\n    return new Class({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _file(Class, params) {\n    return new Class({\n        type: \"file\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _transform(Class, fn) {\n    return new Class({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport function _optional(Class, innerType) {\n    return new Class({\n        type: \"optional\",\n        innerType,\n    });\n}\nexport function _nullable(Class, innerType) {\n    return new Class({\n        type: \"nullable\",\n        innerType,\n    });\n}\nexport function _default(Class, innerType, defaultValue) {\n    return new Class({\n        type: \"default\",\n        innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport function _nonoptional(Class, innerType, params) {\n    return new Class({\n        type: \"nonoptional\",\n        innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _success(Class, innerType) {\n    return new Class({\n        type: \"success\",\n        innerType,\n    });\n}\nexport function _catch(Class, innerType, catchValue) {\n    return new Class({\n        type: \"catch\",\n        innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport function _pipe(Class, in_, out) {\n    return new Class({\n        type: \"pipe\",\n        in: in_,\n        out,\n    });\n}\nexport function _readonly(Class, innerType) {\n    return new Class({\n        type: \"readonly\",\n        innerType,\n    });\n}\nexport function _templateLiteral(Class, parts, params) {\n    return new Class({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _lazy(Class, getter) {\n    return new Class({\n        type: \"lazy\",\n        getter,\n    });\n}\nexport function _promise(Class, innerType) {\n    return new Class({\n        type: \"promise\",\n        innerType,\n    });\n}\nexport function _custom(Class, fn, _params) {\n    const norm = util.normalizeParams(_params);\n    norm.abort ?? (norm.abort = true); // default to abort:false\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...norm,\n    });\n    return schema;\n}\n// same as _custom but defaults to abort:false\nexport function _refine(Class, fn, _params) {\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...util.normalizeParams(_params),\n    });\n    return schema;\n}\nexport function _superRefine(fn) {\n    const ch = _check((payload) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = ch);\n                _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        return fn(payload.value, payload);\n    });\n    return ch;\n}\nexport function _check(fn, params) {\n    const ch = new checks.$ZodCheck({\n        check: \"custom\",\n        ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function _stringbool(Classes, _params) {\n    const params = util.normalizeParams(_params);\n    let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n    let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n    if (params.case !== \"sensitive\") {\n        truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n        falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n    }\n    const truthySet = new Set(truthyArray);\n    const falsySet = new Set(falsyArray);\n    const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n    const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n    const _String = Classes.String ?? schemas.$ZodString;\n    const stringSchema = new _String({ type: \"string\", error: params.error });\n    const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n    const codec = new _Codec({\n        type: \"pipe\",\n        in: stringSchema,\n        out: booleanSchema,\n        transform: ((input, payload) => {\n            let data = input;\n            if (params.case !== \"sensitive\")\n                data = data.toLowerCase();\n            if (truthySet.has(data)) {\n                return true;\n            }\n            else if (falsySet.has(data)) {\n                return false;\n            }\n            else {\n                payload.issues.push({\n                    code: \"invalid_value\",\n                    expected: \"stringbool\",\n                    values: [...truthySet, ...falsySet],\n                    input: payload.value,\n                    inst: codec,\n                    continue: false,\n                });\n                return {};\n            }\n        }),\n        reverseTransform: ((input, _payload) => {\n            if (input === true) {\n                return truthyArray[0] || \"true\";\n            }\n            else {\n                return falsyArray[0] || \"false\";\n            }\n        }),\n        error: params.error,\n    });\n    return codec;\n}\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n    const params = util.normalizeParams(_params);\n    const def = {\n        ...util.normalizeParams(_params),\n        check: \"string_format\",\n        type: \"string\",\n        format,\n        fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n        ...params,\n    };\n    if (fnOrRegex instanceof RegExp) {\n        def.pattern = fnOrRegex;\n    }\n    const inst = new Class(def);\n    return inst;\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n    core.$ZodISODateTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n    return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n    core.$ZodISODate.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n    return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n    core.$ZodISOTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n    return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n    core.$ZodISODuration.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n    return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n    $ZodError.init(inst, issues);\n    inst.name = \"ZodError\";\n    Object.defineProperties(inst, {\n        format: {\n            value: (mapper) => core.formatError(inst, mapper),\n            // enumerable: false,\n        },\n        flatten: {\n            value: (mapper) => core.flattenError(inst, mapper),\n            // enumerable: false,\n        },\n        addIssue: {\n            value: (issue) => {\n                inst.issues.push(issue);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        addIssues: {\n            value: (issues) => {\n                inst.issues.push(...issues);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        isEmpty: {\n            get() {\n                return inst.issues.length === 0;\n            },\n            // enumerable: false,\n        },\n    });\n    // Object.defineProperty(inst, \"isEmpty\", {\n    //   get() {\n    //     return inst.issues.length === 0;\n    //   },\n    // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n    Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n    core.$ZodType.init(inst, def);\n    inst.def = def;\n    inst.type = def.type;\n    Object.defineProperty(inst, \"_def\", { value: def });\n    // base methods\n    inst.check = (...checks) => {\n        return inst.clone(util.mergeDefs(def, {\n            checks: [\n                ...(def.checks ?? []),\n                ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n            ],\n        }));\n    };\n    inst.clone = (def, params) => core.clone(inst, def, params);\n    inst.brand = () => inst;\n    inst.register = ((reg, meta) => {\n        reg.add(inst, meta);\n        return inst;\n    });\n    // parsing\n    inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n    inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n    inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n    inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n    inst.spa = inst.safeParseAsync;\n    // encoding/decoding\n    inst.encode = (data, params) => parse.encode(inst, data, params);\n    inst.decode = (data, params) => parse.decode(inst, data, params);\n    inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n    inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n    inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n    inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n    inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n    inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n    // refinements\n    inst.refine = (check, params) => inst.check(refine(check, params));\n    inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n    inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n    // wrappers\n    inst.optional = () => optional(inst);\n    inst.nullable = () => nullable(inst);\n    inst.nullish = () => optional(nullable(inst));\n    inst.nonoptional = (params) => nonoptional(inst, params);\n    inst.array = () => array(inst);\n    inst.or = (arg) => union([inst, arg]);\n    inst.and = (arg) => intersection(inst, arg);\n    inst.transform = (tx) => pipe(inst, transform(tx));\n    inst.default = (def) => _default(inst, def);\n    inst.prefault = (def) => prefault(inst, def);\n    // inst.coalesce = (def, params) => coalesce(inst, def, params);\n    inst.catch = (params) => _catch(inst, params);\n    inst.pipe = (target) => pipe(inst, target);\n    inst.readonly = () => readonly(inst);\n    // meta\n    inst.describe = (description) => {\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, { description });\n        return cl;\n    };\n    Object.defineProperty(inst, \"description\", {\n        get() {\n            return core.globalRegistry.get(inst)?.description;\n        },\n        configurable: true,\n    });\n    inst.meta = (...args) => {\n        if (args.length === 0) {\n            return core.globalRegistry.get(inst);\n        }\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, args[0]);\n        return cl;\n    };\n    // helpers\n    inst.isOptional = () => inst.safeParse(undefined).success;\n    inst.isNullable = () => inst.safeParse(null).success;\n    return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodType.init(inst, def);\n    const bag = inst._zod.bag;\n    inst.format = bag.format ?? null;\n    inst.minLength = bag.minimum ?? null;\n    inst.maxLength = bag.maximum ?? null;\n    // validations\n    inst.regex = (...args) => inst.check(checks.regex(...args));\n    inst.includes = (...args) => inst.check(checks.includes(...args));\n    inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n    inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n    inst.min = (...args) => inst.check(checks.minLength(...args));\n    inst.max = (...args) => inst.check(checks.maxLength(...args));\n    inst.length = (...args) => inst.check(checks.length(...args));\n    inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n    inst.lowercase = (params) => inst.check(checks.lowercase(params));\n    inst.uppercase = (params) => inst.check(checks.uppercase(params));\n    // transforms\n    inst.trim = () => inst.check(checks.trim());\n    inst.normalize = (...args) => inst.check(checks.normalize(...args));\n    inst.toLowerCase = () => inst.check(checks.toLowerCase());\n    inst.toUpperCase = () => inst.check(checks.toUpperCase());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    _ZodString.init(inst, def);\n    inst.email = (params) => inst.check(core._email(ZodEmail, params));\n    inst.url = (params) => inst.check(core._url(ZodURL, params));\n    inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n    inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n    inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n    inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n    inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n    inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n    inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n    inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n    inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n    inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n    inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n    inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n    inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n    inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n    inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n    inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n    inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n    // iso\n    inst.datetime = (params) => inst.check(iso.datetime(params));\n    inst.date = (params) => inst.check(iso.date(params));\n    inst.time = (params) => inst.check(iso.time(params));\n    inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n    return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmail.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodGUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodUUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodURL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n    return core._url(ZodURL, {\n        protocol: /^https?$/,\n        hostname: core.regexes.domain,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmoji.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodNanoID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n    return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID2.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodULID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodXID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodKSUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodIPv4, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64URL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodE164.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodJWT.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n    const enc = params?.enc ?? \"hex\";\n    const format = `${alg}_${enc}`;\n    const regex = core.regexes[format];\n    if (!regex)\n        throw new Error(`Unrecognized hash format: ${format}`);\n    return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodType.init(inst, def);\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.int = (params) => inst.check(int(params));\n    inst.safe = (params) => inst.check(int(params));\n    inst.positive = (params) => inst.check(checks.gt(0, params));\n    inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n    inst.negative = (params) => inst.check(checks.lt(0, params));\n    inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n    // inst.finite = (params) => inst.check(core.finite(params));\n    inst.finite = () => inst;\n    const bag = inst._zod.bag;\n    inst.minValue =\n        Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n    inst.maxValue =\n        Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n    inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n    inst.isFinite = true;\n    inst.format = bag.format ?? null;\n});\nexport function number(params) {\n    return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodNumber.init(inst, def);\n});\nexport function int(params) {\n    return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n    return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n    return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n    return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n    return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function boolean(params) {\n    return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodType.init(inst, def);\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n    inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n    inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n    inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    const bag = inst._zod.bag;\n    inst.minValue = bag.minimum ?? null;\n    inst.maxValue = bag.maximum ?? null;\n    inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n    return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n    return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n    return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function symbol(params) {\n    return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _null(params) {\n    return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function any() {\n    return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function unknown() {\n    return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function never(params) {\n    return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _void(params) {\n    return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    const c = inst._zod.bag;\n    inst.minDate = c.minimum ? new Date(c.minimum) : null;\n    inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n    return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    ZodType.init(inst, def);\n    inst.element = def.element;\n    inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n    inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n    inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n    inst.length = (len, params) => inst.check(checks.length(len, params));\n    inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n    return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n    core.$ZodObjectJIT.init(inst, def);\n    ZodType.init(inst, def);\n    util.defineLazy(inst, \"shape\", () => {\n        return def.shape;\n    });\n    inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n    inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n    inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n    inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n    inst.extend = (incoming) => {\n        return util.extend(inst, incoming);\n    };\n    inst.safeExtend = (incoming) => {\n        return util.safeExtend(inst, incoming);\n    };\n    inst.merge = (other) => util.merge(inst, other);\n    inst.pick = (mask) => util.pick(inst, mask);\n    inst.omit = (mask) => util.omit(inst, mask);\n    inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n    inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        shape: shape ?? {},\n        ...util.normalizeParams(params),\n    };\n    return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodType.init(inst, def);\n    inst.options = def.options;\n});\nexport function union(options, params) {\n    return new ZodUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    // const [options, params] = args;\n    return new ZodDiscriminatedUnion({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function intersection(left, right) {\n    return new ZodIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    ZodType.init(inst, def);\n    inst.rest = (rest) => inst.clone({\n        ...inst._zod.def,\n        rest: rest,\n    });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    ZodType.init(inst, def);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n    const k = core.clone(keyType);\n    k._zod.values = undefined;\n    return new ZodRecord({\n        type: \"record\",\n        keyType: k,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    ZodType.init(inst, def);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n    return new ZodSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodType.init(inst, def);\n    inst.enum = def.entries;\n    inst.options = Object.values(def.entries);\n    const keys = new Set(Object.keys(def.entries));\n    inst.extract = (values, params) => {\n        const newEntries = {};\n        for (const value of values) {\n            if (keys.has(value)) {\n                newEntries[value] = def.entries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n    inst.exclude = (values, params) => {\n        const newEntries = { ...def.entries };\n        for (const value of values) {\n            if (keys.has(value)) {\n                delete newEntries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst.values = new Set(def.values);\n    Object.defineProperty(inst, \"value\", {\n        get() {\n            if (def.values.length > 1) {\n                throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n            }\n            return def.values[0];\n        },\n    });\n});\nexport function literal(value, params) {\n    return new ZodLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (size, params) => inst.check(core._minSize(size, params));\n    inst.max = (size, params) => inst.check(core._maxSize(size, params));\n    inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n    return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (_ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = inst);\n                // _issue.continue ??= true;\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        const output = def.transform(payload.value, payload);\n        if (output instanceof Promise) {\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        payload.value = output;\n        return payload;\n    };\n});\nexport function transform(fn) {\n    return new ZodTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n    return new ZodOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n    return new ZodNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n    return new ZodNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n    return new ZodSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function nan(params) {\n    return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodType.init(inst, def);\n    inst.in = def.in;\n    inst.out = def.out;\n});\nexport function pipe(in_, out) {\n    return new ZodPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        // ...util.normalizeParams(params),\n    });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n    ZodPipe.init(inst, def);\n    core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n    return new ZodCodec({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        transform: params.decode,\n        reverseTransform: params.encode,\n    });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n    return new ZodReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n    return new ZodLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n    return new ZodPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n    core.$ZodFunction.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function _function(params) {\n    return new ZodFunction({\n        type: \"function\",\n        input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n        output: params?.output ?? unknown(),\n    });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodType.init(inst, def);\n});\n// custom checks\nexport function check(fn) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        // ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function custom(fn, _params) {\n    return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n    return core._superRefine(fn);\n}\nfunction _instanceof(cls, params = {\n    error: `Input not instance of ${cls.name}`,\n}) {\n    const inst = new ZodCustom({\n        type: \"custom\",\n        check: \"custom\",\n        fn: (data) => data instanceof cls,\n        abort: true,\n        ...util.normalizeParams(params),\n    });\n    inst._zod.bag.Class = cls;\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Codec: ZodCodec,\n    Boolean: ZodBoolean,\n    String: ZodString,\n}, ...args);\nexport function json(params) {\n    const jsonSchema = lazy(() => {\n        return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n    return pipe(transform(fn), schema);\n}\n","// Zod 3 compat layer\nimport * as core from \"../core/index.js\";\n/** @deprecated Use the raw string literal codes instead, e.g. \"invalid_type\". */\nexport const ZodIssueCode = {\n    invalid_type: \"invalid_type\",\n    too_big: \"too_big\",\n    too_small: \"too_small\",\n    invalid_format: \"invalid_format\",\n    not_multiple_of: \"not_multiple_of\",\n    unrecognized_keys: \"unrecognized_keys\",\n    invalid_union: \"invalid_union\",\n    invalid_key: \"invalid_key\",\n    invalid_element: \"invalid_element\",\n    invalid_value: \"invalid_value\",\n    custom: \"custom\",\n};\nexport { $brand, config } from \"../core/index.js\";\n/** @deprecated Use `z.config(params)` instead. */\nexport function setErrorMap(map) {\n    core.config({\n        customError: map,\n    });\n}\n/** @deprecated Use `z.config()` instead. */\nexport function getErrorMap() {\n    return core.config().customError;\n}\n/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n","export * as core from \"../core/index.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./errors.js\";\nexport * from \"./parse.js\";\nexport * from \"./compat.js\";\n// zod-specified\nimport { config } from \"../core/index.js\";\nimport en from \"../locales/en.js\";\nconfig(en());\nexport { globalRegistry, registry, config, $output, $input, $brand, clone, regexes, treeifyError, prettifyError, formatError, flattenError, toJSONSchema, TimePrecision, util, NEVER, } from \"../core/index.js\";\nexport * as locales from \"../locales/index.js\";\n// iso\n// must be exported from top-level\n// https://github.com/colinhacks/zod/issues/4491\nexport { ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration } from \"./iso.js\";\nexport * as iso from \"./iso.js\";\nexport * as coerce from \"./coerce.js\";\n","import { CookieBaseSchema, LocalStorageBaseSchema, LoggerImplement } from \"@iflyrpa/share\";\nimport type { CreateAxiosDefaults } from \"axios\";\nimport { z } from \"zod\";\nimport { SearchAccountInfoResponse } from \"./actions/searchAccountInfo/types\";\n\ndeclare module \"axios\" {\n    export interface AxiosRequestConfig {\n        defaultErrorMsg?: string;\n    }\n}\n\nexport const ActionParamsSchema = z.object({\n    id: z.string().optional(), // steel 任务 id，客户端传入\n    // 以下为browser-use中需要携带的参数\n    userAgent: z.string().optional(),\n    viewport: z\n        .object({\n            width: z.number(),\n            height: z.number(),\n        })\n        .optional()\n        .nullable(),\n});\n\nexport const ActionCommonParamsSchema = ActionParamsSchema.extend({\n    url: z.string().optional(),\n    // cookie 必选项\n    cookies: z.array(CookieBaseSchema),\n    localStorage: z.array(LocalStorageBaseSchema).optional(),\n    extraParam: z.any().optional(), // 额外参数，供不同 action 使用\n    actionType: z.enum([\"mockApi\", \"rpa\", \"server\"]).optional(),\n    accountId: z.number().optional(),\n    proxyLoc: z.string().nullable().optional(), // TODO：兼容前端，后期考虑放弃\n    localIP: z.string().optional(),\n    huiwenToken: z.string().optional(),\n    articleId: z.string().optional(),\n    saveType: z.string().optional(),\n    uid: z.string().optional(),\n});\n\n// 自动生成 TypeScript 类型\nexport type ActiomCommonParams = z.infer<typeof ActionCommonParamsSchema>;\n\nexport type AxiosProxyParams = [\n    CreateAxiosDefaults, // axios 配置\n    LoggerImplement?,\n    (string | null)?, // addr (proxyLoc)\n    number?, // accountId\n    string?, // platform 业务标识\n];\n\nexport enum ExecutionState {\n    RUNNING = \"RUNNING\",\n    SCAN_WAITING = \"SCAN_WAITING\",\n    SCANNED = \"SCANNED\",\n    CONFIRMED = \"CONFIRMED\",\n    SUCCESS = \"SUCCESS\",\n    TIMEOUT = \"TIMEOUT\",\n    BROWSER_CLOSED = \"BROWSER_CLOSED\",\n    FAILED = \"FAILED\",\n}\n\nexport interface FansDetail {\n    following: number | null; // 关注数\n    fans_count: number | null; // 粉丝数\n    digg_count: number | null; // 获赞数\n    description: string; // 个人简介\n}\n\nexport namespace Weixin {\n    export interface FansCount extends FansDetail {}\n\n    export interface WeiXinCropResult {\n        cdnurl: string;\n        file_id: number;\n        width: number;\n        height: number;\n    }\n}\n\nexport namespace BaiJiaHao {\n    export interface FansCount extends FansDetail {}\n}\nexport namespace Toutiao {\n    export interface FansCount extends FansDetail {}\n\n    export interface Topic {\n        concern_id: string;\n        id: string;\n        talk_count: string;\n        talk_count_str: string;\n        type: number;\n        word: string;\n    }\n\n    export interface SuggestWords {\n        user_id: number;\n        name: string;\n        avatar_url: string;\n        followers_count: number;\n    }\n\n    export interface CityPoi {\n        position: string;\n        city: string;\n        longitude: number;\n        latitude: number;\n        type_code: string;\n        poi_id: string;\n    }\n\n    export interface CityDistrict {\n        gps_location: {\n            city_name: string;\n            city_code: string;\n            district_name: string;\n            district_code: string;\n        };\n    }\n\n    export interface UserRight {\n        benefit_list: Array<unknown>;\n        describe: string;\n        fans_num_threshold: number;\n        level: number;\n        type: number;\n    }\n\n    export interface ImageData {\n        image_url: string;\n        image_uri: string;\n        image_width: string;\n        image_height: string;\n        image_type: string;\n        image_mime_type: string;\n    }\n}\n\nexport namespace Xiaohongshu {\n    export interface FansCount extends FansDetail {}\n\n    export interface Topic {\n        id?: string;\n        name: string;\n        type: string;\n        link?: string;\n    }\n\n    export interface Location {\n        address: string;\n        city_name: string;\n        full_address: string;\n        latitude: number;\n        longitude: number;\n        name: string;\n        poi_id: string;\n        poi_type: number;\n        type: string;\n    }\n}\n\nexport const errorResponse = (message: string, code = 500): SearchAccountInfoResponse => ({\n    code,\n    message,\n    data: null,\n});\n\nexport const MockPublish = false;\nexport const DisabledReq = false;\n","import { TaskState, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response as FetchResponse } from \"node-fetch\";\nimport fetch from \"node-fetch\";\nimport { Response } from \"playwright-core\";\nimport { ExecutionState } from \"../../types\";\nimport { ProxyAgent } from \"../../utils/proxy\";\nimport type { SteelAction } from \"./index\";\n\nconst scanRetryMaxCount = 60; // 二维码扫描重试次数\nconst waitQrcodeResultMaxTime = scanRetryMaxCount * 2 * 1000; // 最长等待时间\n\nexport const rpaServer: SteelAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    let executionState: ExecutionState | undefined;\n\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n\n    const page = await task.createPage({\n        url: \"https://passport.baidu.com/v2/?login\",\n        proxyUrl,\n        userAgent: params.userAgent,\n        ...(params.viewport ? { viewport: params.viewport } : {}),\n    });\n\n    task.steelBrowser?.on(\"disconnected\", async () => {\n        const browserContext = task.steelBrowserContext;\n        const browser = task.steelBrowser;\n        executionState = ExecutionState.BROWSER_CLOSED;\n        await page.close();\n\n        if (browserContext) {\n            await browserContext.close();\n        }\n        if (browser) {\n            await browser.close();\n        }\n    });\n\n    // 删除 TANGRAM__PSP_3__QrcodeAnimation 元素\n    await page.locator(\"#TANGRAM__PSP_3__QrcodeAnimation\").evaluate((el) => el.remove());\n\n    // 修改 TANGRAM__PSP_3__QrcodeMain 的 style\n    await page.locator(\"#TANGRAM__PSP_3__QrcodeMain\").evaluate((el) => {\n        // 先获取现有 style\n        const style = el.getAttribute(\"style\") || \"\";\n        // 用正则去掉 margin-left: 39px;\n        const newStyle = style.replace(/margin-left:\\s*39px;?/i, \"\");\n        el.setAttribute(\"style\", newStyle);\n    });\n\n    await page.locator(\".tang-pass-qrcode-title a.pass-link\").evaluate((el) => {\n        el.textContent = \"百家号APP\";\n    });\n\n    await updateTaskState?.({\n        state: TaskState.WAIT_SCAN,\n        connectAddress: await task.steelConnector?.getLive(task.sessionId || \"\"),\n        sessionId: task.sessionId,\n    });\n\n    let token: string | undefined;\n    let userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            const timer = setTimeout(async () => {\n                cleanup();\n                executionState = ExecutionState.TIMEOUT;\n                await updateTaskState?.({\n                    state: TaskState.TIMEOUT,\n                    error: \"等待扫码登录超时\",\n                });\n                resolve();\n            }, waitQrcodeResultMaxTime);\n\n            const cleanup = () => {\n                if (finished) return; // 防止多次调用\n                finished = true;\n                clearTimeout(timer);\n                page.off(\"response\", handleWebCommon);\n                page.off(\"response\", handleCheckQR);\n                task.steelBrowser?.off(\"disconnected\", handleBrowserClosed);\n            };\n\n            const handleBrowserClosed = () => {\n                cleanup();\n                executionState = ExecutionState.BROWSER_CLOSED;\n                resolve();\n            };\n\n            const handleWebCommon = async (resp: Response) => {\n                try {\n                    const url = resp.url();\n\n                    // 获取用户信息和 token\n                    if (url.includes(\"/user-ui/cms/getPassinfo\") || url.includes(\"/pcui/home/dealtoken\")) {\n                        try {\n                            const headers = await resp.request().allHeaders();\n                            let res: FetchResponse;\n\n                            for (let i = 0; i < 3; i++) {\n                                try {\n                                    res = await fetch(\"https://baijiahao.baidu.com/user-ui/cms/getPassinfo\", {\n                                        method: \"GET\",\n                                        headers: {\n                                            cookie: headers.cookie,\n                                        },\n                                    });\n                                    if (res.ok) {\n                                        token = res.headers.get(\"token\") || \"\";\n                                        const jsonUser = (await res.json()) as {\n                                            data: { avatar: string; uk: string; displayname: string };\n                                        };\n                                        userInfo = {\n                                            name: jsonUser.data.displayname ?? \"\",\n                                            avatar: jsonUser.data.avatar ?? \"\",\n                                            uniqueId: jsonUser.data.uk ?? \"\",\n                                        };\n                                        break;\n                                    }\n                                    await new Promise((res) => setTimeout(res, 500));\n                                } catch (error) {\n                                    if (i === 2) {\n                                        task.logger.warn(\"获取用户信息失败:\", { error });\n                                    }\n                                    await new Promise((res) => setTimeout(res, 500));\n                                }\n                            }\n                        } catch (e) {\n                            task.logger.warn(\"处理用户信息失败:\", { url, error: e });\n                        }\n                    }\n\n                    // 登录成功\n                    if (url.includes(\"/pcui/home/dealtoken\")) {\n                        cleanup();\n                        await updateTaskState?.({\n                            state: TaskState.CONFIRMED,\n                        });\n\n                        executionState = ExecutionState.SUCCESS;\n                        resolve();\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            const handleCheckQR = async (response: Response) => {\n                try {\n                    const url = response.url();\n                    if (!url.includes(\"/channel/unicast\")) return;\n\n                    let jsonResponse: { errno: number; channel_v?: string };\n                    try {\n                        const jsonPStr = await response.text();\n                        if (!jsonPStr) {\n                            task.logger.warn(\"Empty response body:\", { url });\n                            return;\n                        }\n\n                        const jsonStr = jsonPStr.replace(/^[^(]+\\(([\\s\\S]*)\\)\\s*$/, \"$1\");\n                        jsonResponse = JSON.parse(jsonStr);\n                    } catch (e) {\n                        task.logger.warn(\"Failed to parse json:\", { url, error: e });\n                        return;\n                    }\n\n                    if (jsonResponse.errno === 0 && jsonResponse?.channel_v) {\n                        const channel_v: { status: number } = JSON.parse(jsonResponse.channel_v);\n                        if (channel_v.status === 1) {\n                            // 扫码成功\n                            await updateTaskState?.({\n                                state: TaskState.SCANNED,\n                            });\n                        }\n                        if (channel_v.status === 0) {\n                            page.off(\"response\", handleCheckQR);\n                            await page.goto(\"https://baijiahao.baidu.com/builder/rc/home\");\n                            page.on(\"response\", handleWebCommon);\n                        }\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 在页面加载之前就注册监听，防止丢失请求\n            task.steelBrowser?.on(\"disconnected\", handleBrowserClosed);\n            page.on(\"response\", handleCheckQR);\n        });\n    } finally {\n        await page.close();\n    }\n\n    if (executionState === undefined) return { code: 500, message: \"未知错误\", data: {} };\n\n    switch (executionState) {\n        case ExecutionState.BROWSER_CLOSED: {\n            const msg = \"浏览器已关闭，任务中断!\";\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: \"浏览器已关闭\",\n            });\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.TIMEOUT: {\n            const msg = \"等待用户扫码登录超时!\";\n            await updateTaskState?.({\n                state: TaskState.TIMEOUT,\n                error: msg,\n            });\n            task.logger.info(msg);\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.SUCCESS: {\n            // 直接序列化原始 cookie 数组，切勿对 JSON 字符串做 replace(/\\\\\"/g, \"\")：\n            // 部分百度 cookie（如 RT）的 value 自身包含双引号/反斜杠，\n            // 删除转义符会破坏 JSON 结构，parse 后产生 name:\"\" value:\"undefined\" 的脏数据。\n            const cookie = JSON.stringify(await task.steelBrowserContext?.cookies());\n            await updateTaskState?.({\n                state: TaskState.SUCCESS,\n                result: {\n                    cookie,\n                    token,\n                    userInfo: userInfo,\n                },\n            });\n            return {\n                code: 0,\n                message: \"成功\",\n                data: {\n                    cookie,\n                    token,\n                    userInfo,\n                },\n            };\n        }\n        default:\n            // 处理 RUNNING 和其他可能的状态\n            return { code: 500, message: \"任务执行中断\", data: {} };\n    }\n};\n","import { CommonAction, success } from \"@iflyrpa/share\";\nimport { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaServer } from \"./rpa-server\";\n\nexport type BaijiahaoLoginParams = ActiomCommonParams;\n\nexport type SteelAction = CommonAction<ActiomCommonParams, Record<string, unknown>>;\n\nexport const baijiahaoLogin: SteelAction = async (task, params) => {\n    // params.actionType = \"rpa\";\n\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return success({}, \"暂不支持mockApi\");\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaServer(task, params);\n    }\n\n    return executeAction(rpaAction)(task, params);\n};\n","import axios from \"axios\";\n\n/**\n * 服务端日志记录参数接口\n */\nexport interface ServerLogParams {\n    token: string; // 鉴权 token\n    enverionment: \"development\" | \"production\";\n    [key: string]: unknown; // 其他参数\n}\n\n/**\n * 调用服务端接口记录日志\n * @param params 请求参数，必须包含 token 字段\n * @returns Promise<void> 不影响主流程，错误会被捕获\n */\nexport async function reportLogger(params: ServerLogParams): Promise<void> {\n    try {\n        if (!params.token) {\n            console.warn(\"[ServerLogger] token 参数缺失，跳过日志上报\");\n            return;\n        }\n\n        const baseUrl =\n            params.enverionment === \"production\" ? \"https://turbodesk.xfyun.cn\" : \"https://fetdev.iflysec.com\";\n        // 发送请求\n        await axios.post(\n            `${baseUrl}/api/engine/v2/log/collect`,\n            {\n                errorMsg: `${params.platform}发布成功，文章id:${params.postId} uid:${params.uid} accountId:${params.accountId}`,\n                traceInfo: JSON.stringify(params),\n            },\n            {\n                headers: {\n                    token: params.token,\n                    \"Content-Type\": \"application/json\",\n                },\n                timeout: 5000,\n            },\n        );\n    } catch (error) {\n        // 捕获所有错误，不影响主流程\n        console.warn(\"[ServerLogger] 日志上报失败:\", error instanceof Error ? error.message : error);\n    }\n}\n","import crypto from \"node:crypto\";\n\n/**\n * 生成百家号话题html\n * @param topic\n * @param id\n * @param sv_small_images\n */\nexport const generateTopicHtml = function (topic: string, id?: string, sv_small_images?: {\n    http: string,\n    https: string\n}) {\n    const generateUid = function () {\n        const e = () => Math.floor(65536 * (1 + Math.random())).toString(16).substring(1);\n        return e() + e() + e() + e() + e() + e() + e() + e();\n    };\n    const topicBase = function (topic: string, id?: string, sv_small_images?: { http: string, https: string }) {\n        const t = function (r: any) {\n            let n = [];\n            let e = 0;\n            for (; e < 256; ++e)\n                n[e] = (e + 256).toString(16).substr(1);\n            let o = 0;\n            return [\n                n[r[o++]], n[r[o++]], n[r[o++]], n[r[o++]], \"-\",\n                n[r[o++]], n[r[o++]], \"-\",\n                n[r[o++]], n[r[o++]], \"-\",\n                n[r[o++]], n[r[o++]], \"-\",\n                n[r[o++]], n[r[o++]], n[r[o++]], n[r[o++]], n[r[o++]], n[r[o++]]\n            ].join(\"\");\n        };\n        const s = crypto.randomBytes(16);\n        // @ts-ignore\n        (s[6] = 15 & s[6] | 64, s[8] = 63 & s[8] | 128);\n        return {\n            id: id || t(s),\n            sv_small_images: sv_small_images || \"\",\n            title: topic.replace(/[^\\u4E00-\\u9FA5a-zA-Z0-9]/g, \"\"),\n            isCreate: 1\n        };\n    };\n\n    const n = id ? topicBase(topic, id, sv_small_images) : topicBase(topic);\n    const topicAttr = {\n        style: \"border:none;display:inline-block;color:#3E5599;text-decoration:none;font-style:normal;\",\n        href: `https://m.baidu.com/s?word=%23${n.title}%23&topic_id=${n.id}&sa=edit&sfrom=1023524a&append=1&newwindow=0&upqrade=1`.replace(/&/g, \"&amp;\"),\n        target: \"_blank\",\n        // @ts-ignore\n        \"data-bjh-cover\": \"\".concat(n.sv_small_images && (n.sv_small_images.https || n.sv_small_images.http)),\n        \"data-bjh-src\": `https://m.baidu.com/s?word=%23${n.title}%23&topic_id=${n.id}&sa=edit&sfrom=1023524a&append=1&newwindow=0&upqrade=1`.replace(/&/g, \"&amp;\"),\n        \"data-bjh-box\": \"topic\",\n        \"data-bjh-title\": n.title,\n        \"data-bjh-id\": id || n.id,\n        \"data-bjh-type\": \"topic\",\n        contenteditable: \"false\",\n        \"data-ignore-remove-style\": \"1\",\n        \"data-bjh-create\": id ? \"0\" : \"1\",\n        \"data-bjh-adinspiration\": \"0\",\n        \"data-diagnose-id\": generateUid()\n    };\n\n    const attrStr = Object.entries(topicAttr)\n        .map(([key, val]) => `${key}=\"${val}\"`)\n        .join(\" \");\n\n    return `<p><span data-diagnose-id=${generateUid()}></span><a ${attrStr}>#${n.title}#</a></p>`;\n};","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success, TaskState } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\nimport { AxiosProxyParams, errorResponse, MockPublish } from \"../../types\";\nimport { extractImgTag, replaceImgSrc } from \"../../utils\";\nimport { Http } from \"../../utils/http\";\nimport { reportLogger } from \"../../utils/reportLogger\";\nimport type { PublishAction } from \".\";\nimport { generateTopicHtml } from \"./utils\";\n\ninterface CommonResponse<T = unknown> {\n    data: T;\n    errmsg: string;\n    errno: number;\n}\n\ninterface ImageRetResponse {\n    bos_url: string;\n    https_url: string;\n    no_waterlog_bos_url: string;\n    org_url: string;\n}\n\nconst errnoMap: Record<number, string> = {\n    20040706: \"正文图片和封面图片推荐jpg、png格式。\",\n    20040084: \"正文图片和封面图片推荐jpg、png格式。\",\n    20050004: \"今日百家号发布次数已达上限，请明天再试。\",\n    10000015: \"账号存在异常，需前往百家号平台完成发文验证后可激活使用。\",\n    20050000: \"操作太频繁，请稍后再试\",\n    20040027: \"你的账号状态异常，请到百家号平台检查账号状态。\",\n    10000017: \"账号存在异常，需前往百家号平台完成发文验证后可激活使用。\",\n    20040033: \"封面图片推荐 jpg、png格式，宽高在372×284-5000×5000 范围内。\",\n    2004005714: \"网络环境异常，请检查网络后重试发布。\",\n    401100032: \"异常，请检查图片（如：格式、版权、合规性等）。\",\n    20040034: \"封面图片推荐jpg、png格式，不支持gif格式。\",\n    20040124: \"服务器异常，请稍后重试！\",\n    20040001: \"当前用户未登录，请登陆后重试！\",\n    401100025: \"该应用不支持此媒资类型\",\n    401100033: \"图片宽高不满足要求\",\n    20040105: \"标题中不可使用表情！\",\n    20040051: \"定时时间范围不符合要求!\",\n    \"-6\": \"文章分类信息错误\",\n};\n\nexport const mockAction: PublishAction = async (task, params) => {\n    const { baijiahaoSingleCover, baijiahaoMultCover, baijiahaoCoverType } = params.settingInfo;\n    const tmpCachePath = task.getTmpPath();\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        token: params.token,\n    };\n\n    const args: AxiosProxyParams = [\n        { headers },\n        task.logger,\n        params.proxyLoc,\n        params.accountId,\n        \"baijiahao\", // 业务标识\n    ];\n    const http = new Http({ headers });\n    const proxyHttp = new Http(...args);\n\n    // 添加响应拦截器\n    proxyHttp.addResponseInterceptor<CommonResponse>((response) => {\n        const msgType = params.saveType === \"draft\" ? \"同步\" : \"发布\";\n\n        // 检查响应中的 errno 字段\n        if (response && response.data.errno !== 0) {\n            let errmsg = response.config.defaultErrorMsg || `文章${msgType}异常，请稍后重试。`;\n\n            if (response.data.errno === 20050000) {\n                errmsg = msgType + errnoMap[response.data.errno];\n            }\n            if (response.data.errno === 401100032) {\n                errmsg = `图片${msgType}${errnoMap[response.data.errno]}`;\n            } else if (errnoMap[response.data.errno]) {\n                errmsg = errnoMap[response.data.errno];\n            } else if (response.data.errmsg) {\n                errmsg = response.data.errmsg;\n            }\n\n            return {\n                code: errnoMap[response.data.errno] ? 414 : 500,\n                message: errmsg,\n                data: response.data,\n            };\n        }\n    });\n\n    // 0. 校验登录\n    await http.api({\n        method: \"get\",\n        url: \"https://baijiahao.baidu.com/pcui/home/index\",\n        defaultErrorMsg: `百家号登录状态失效，请重新绑定账号后${params.saveType === \"draft\" ? \"同步\" : \"发布\"}。`,\n    });\n\n    // 1. 获取用户 appId\n    const appIdInfo = await http.api<CommonResponse<{ user?: { app_id: number } }>>({\n        method: \"post\",\n        url: \"https://baijiahao.baidu.com/builder/app/appinfo\",\n        defaultErrorMsg: \"创建草稿失败，请稍后重试。\",\n    });\n\n    const appId = appIdInfo.data?.user?.app_id;\n\n    if (!appId) return { code: 414, message: \"创建草稿失败，请稍后重试。\", data: \"\" };\n\n    const uploadImages = async (_images: string[]) => {\n        // 过滤掉空字符串\n        const images = _images.filter((url) => !!url && url.trim() !== \"\");\n\n        // 下载图片到本地\n        return await Promise.all(\n            images.map(async (url) => {\n                const fileName = getFilenameFromUrl(url);\n                const ext = path.extname(fileName).toLowerCase();\n\n                // 检查图片格式（百家号仅支持 jpg、png）\n                if (![\".jpg\", \".jpeg\", \".png\"].includes(ext)) {\n                    throw {\n                        code: 414,\n                        message: `图片格式不支持：${fileName}。百家号仅支持 jpg、png 格式，请转换后重试。`,\n                        data: \"\",\n                    };\n                }\n\n                const image = await downloadImage(url, path.join(tmpCachePath, fileName));\n                const formData = new FormData();\n                formData.append(\"org_file_name\", fileName);\n                formData.append(\"type\", \"image\");\n                formData.append(\"app_id\", appId);\n                formData.append(\"is_waterlog\", \"1\");\n                formData.append(\"save_material\", \"1\");\n                formData.append(\"no_compress\", \"0\");\n                formData.append(\"article_type\", \"news\");\n                formData.append(\"media\", fs.createReadStream(image));\n\n                try {\n                    const res = await http.api<{ ret: ImageRetResponse }>(\n                        {\n                            method: \"post\",\n                            url: \"https://baijiahao.baidu.com/materialui/picture/uploadProxy\",\n                            data: formData,\n                            defaultErrorMsg:\n                                params.saveType === \"draft\"\n                                    ? \"图片上传异常，请稍后重试同步。\"\n                                    : \"图片上传异常，请稍后重试发布。\",\n                        },\n                        { retries: 3, retryDelay: 20, timeout: 2 * 60 * 1000 }, // 增加到2分钟，适应大图片上传\n                    );\n\n                    return res.ret;\n                } catch (error) {\n                    console.error(\"图片上传失败，详细错误信息：\");\n                    console.error(\"错误对象：\", error);\n                    console.error(\"错误堆栈：\", error instanceof Error ? error.stack : \"无堆栈信息\");\n                    console.error(\"图片URL：\", url);\n                    console.error(\"文件名：\", fileName);\n                    throw error;\n                }\n            }),\n        );\n    };\n\n    // 2. 提取并上传正文中的图片\n    const originContentImages = extractImgTag(params.content);\n    const targetContentImages = await uploadImages(originContentImages);\n\n    if (params.settingInfo.baijiahaoTopic && !params.settingInfo.baijiahaoTopic?.id) {\n        const topicCheck = await http.api<{ errno: number; errmsg: string }>({\n            method: \"get\",\n            url: \"https://baijiahao.baidu.com/pcui/topic/topiccheck\",\n            params: {\n                topicName: params.settingInfo.baijiahaoTopic?.title,\n            },\n        });\n        if (topicCheck.errno !== 0) {\n            return { code: 414, message: topicCheck.errmsg, data: \"\" };\n        }\n    }\n\n    // 替换正文中的图片\n    const content = replaceImgSrc(\n        params.settingInfo?.baijiahaoTopic?.title\n            ? params.content +\n                  generateTopicHtml(\n                      params.settingInfo?.baijiahaoTopic?.title,\n                      params.settingInfo?.baijiahaoTopic?.id || \"\",\n                      params.settingInfo.baijiahaoTopic?.sv_small_images || \"\",\n                  )\n            : params.content,\n        (dom) => {\n            if (dom.attribs.src) {\n                const idx = originContentImages.indexOf(dom.attribs.src.replace(/&amp;/g, \"&\"));\n                dom.attribs.src = targetContentImages[idx].bos_url;\n                dom.attribs[\"data-bjh-origin-src\"] = targetContentImages[idx].org_url;\n                dom.attribs[\"data-bjh-params\"] = targetContentImages[idx].org_url;\n                dom.attribs[\"data-bjh-type\"] = \"IMG\";\n            }\n\n            return dom;\n        },\n    );\n\n    // 3. 上传竖版封面\n    // let vertical_cover = params.settingInfo.baijiahaoVerticalCover;\n    // if (vertical_cover) {\n    // \tvertical_cover = (await uploadImages([vertical_cover]))[0].bos_url;\n    // }\n\n    // 4. 上传横版封面\n    const horizontalCoverUrl = baijiahaoCoverType === \"single\" ? [baijiahaoSingleCover] : baijiahaoMultCover;\n    const horizontalCoverRes = await uploadImages(horizontalCoverUrl);\n    const cover_images = horizontalCoverRes.map((item) => ({\n        src: item.bos_url,\n        machine_chooseimg: 0,\n        isLegal: 0,\n    }));\n    const _cover_images_map = horizontalCoverRes.map((item) => ({\n        src: item?.bos_url,\n        origin_src: item?.org_url,\n    }));\n\n    // 5. 构造发布数据\n    const isAi = params.settingInfo.baijiahaoIsAi.includes(\"isAi\");\n    const activityList = params.settingInfo.baijiahaoSelectActivityCache;\n    const cover_layout = baijiahaoCoverType === \"single\" ? \"one\" : \"three\";\n\n    const activity_list = [\n        ...(activityList.length > 0 ? [{ id: `task_${activityList[0]}`, is_checked: 1 }] : []),\n        ...(params.settingInfo.baijiahaoPublishConf?.map((item) => ({\n            id: item.confName,\n            is_checked: item.isChecked ? 1 : 0,\n        })) || []),\n    ];\n\n    if (isAi && !activity_list.some((item) => \"aigc_bjh_status\" in item)) {\n        activity_list.push({ id: \"aigc_bjh_status\", is_checked: 1 });\n    } // 兼容旧版配置\n\n    const publishData: Record<string, unknown> = {\n        title: params.settingInfo.baijiahaoTitle,\n        content,\n        // vertical_cover,\n        abstract: params.settingInfo.baijiahaoAbstract,\n        cover_layout,\n        cover_images: JSON.stringify(cover_images),\n        _cover_images_map: JSON.stringify(_cover_images_map),\n        type: \"news\",\n        source_reprinted_allow: 0,\n        abstract_from: 1,\n        isBeautify: \"false\",\n        usingImgFilter: \"false\",\n        source: \"upload\",\n        cover_source: \"upload\",\n        event2news: params.settingInfo?.baijiahaoEvent2News ? 2 : 0,\n        activity_list,\n        ...(params.settingInfo.timer ? { timer_time: params.settingInfo.timer } : {}),\n        ...(params.settingInfo.baijiahaoCms\n            ? {\n                  \"cate_user_cms[0]\": params.settingInfo.baijiahaoCms[0],\n                  \"cate_user_cms[1]\": params.settingInfo.baijiahaoCms[1],\n              }\n            : {}),\n        ...(params.settingInfo.baijiahaoEventSpec\n            ? {\n                  \"event_spec[time]\": params.settingInfo.baijiahaoEventSpec.time,\n                  \"event_spec[pos]\": params.settingInfo.baijiahaoEventSpec.pos,\n              }\n            : {}),\n    };\n\n    const isDraft = params.saveType === \"draft\";\n\n    const saveUrl = isDraft\n        ? \"https://baijiahao.baidu.com/pcui/article/save?callback=bjhdraft\"\n        : \"https://baijiahao.baidu.com/pcui/article/publish?callback=bjhpublish\";\n\n    task._timerRecord.PrePublish = Date.now();\n\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    if (MockPublish) {\n        const message = `文章模拟发布成功 ${http.proxyInfo}`;\n        const data = \"123456789\";\n\n        await updateTaskState?.({\n            state: TaskState.SUCCESS,\n            result: {\n                response: data,\n            },\n        });\n        return success(data, message);\n    }\n\n    const res = await proxyHttp.api<{\n        errno: number;\n        ret: { article_id: string };\n        proxyInfo: Record<string, unknown>;\n        errmsg: string;\n    }>(\n        {\n            method: \"post\",\n            url: saveUrl,\n            data: publishData,\n            headers: {\n                \"content-type\": \"application/x-www-form-urlencoded\",\n                origin: \"https://baijiahao.baidu.com\",\n                referer: \"https://baijiahao.baidu.com/builder/rc/edit?type=news\",\n            },\n            defaultErrorMsg: isDraft ? \"文章同步出现异常，请稍后重试。\" : \"文章发布出现异常，请稍后重试。\",\n        },\n        { retries: 3, retryDelay: 500, timeout: 20 * 1000 },\n    );\n\n    if (!isDraft) {\n        reportLogger({\n            token: params.huiwenToken || \"\",\n            enverionment: task.enverionment || \"development\",\n            postId: params.articleId,\n            eip: proxyHttp.proxyInfo,\n            accountId: params.accountId,\n            uid: params.uid,\n            platform: \"baijiahao\",\n            publishParams: publishData,\n        });\n    }\n\n    task.logger.info(`[baijiahaoPublish] publishResult: ${JSON.stringify(res)} `);\n\n    const isSuccess = res.errno === 0;\n    const data = res?.ret?.article_id;\n    const message = isSuccess\n        ? isDraft\n            ? \"文章同步成功！\"\n            : `文章发布成功！${res.proxyInfo || \"\"}`\n        : res.errmsg || (isDraft ? \"文章同步失败，请稍后重试。\" : \"文章发布失败，请稍后重试。\");\n\n    if (!isSuccess) {\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: message,\n        });\n        return { code: 414, data, message };\n    }\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: {\n            response: data,\n        },\n    });\n    // 临时返回结束\n\n    return success(\n        res.errno === 0 ? res?.ret?.article_id || \"\" : \"\",\n        res.errno === 0 ? `文章发布成功！${http.proxyInfo || \"\"}` : (res.errmsg ?? \"文章发布失败，请稍后重试。\"),\n    );\n};\n","import path from \"node:path\";\nimport type { Response } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\n\nimport { copyHtmlToClipboard, TimeFormatter } from \"../../utils\";\nimport type { PublishAction } from \"./index\";\n\nexport const rpaAction: PublishAction = async (task, params) => {\n    const tmpCachePath = task.getTmpPath();\n\n    // 过滤无效 cookie：\n    // 历史上 baijiahaoLogin 的序列化 bug 会产出 name:\"\" value:\"undefined\" 的脏数据，\n    // 这些 cookie 注入时会被 Electron reject，且可能顶替掉真正的鉴权 cookie（如 XFCS）。\n    // 注入失败是静默的，因此在这里先剔除，避免登录态不完整导致误判“登录失效”。\n    const validCookies = (params.cookies || []).filter((it) => it.name && it.value && it.value !== \"undefined\");\n\n    const page = await task.createPage({\n        show: task.debug,\n        url: params.url || \"https://baijiahao.baidu.com/builder/rc/edit?type=news&is_from_cms=1\",\n        cookies: validCookies,\n    });\n\n    // 增加页面默认超时时间，避免网络慢时加载超时\n    page.setDefaultTimeout(60000); // 60秒\n    page.setDefaultNavigationTimeout(60000); // 60秒\n\n    // 0. 校验登录\n    try {\n        await page.waitForSelector(\".bjh-edit-header\", { state: \"visible\" });\n    } catch (_error) {\n        return { code: 414, message: \"登录失效\", data: page.url() };\n    }\n\n    // 1. 等待编辑器加载出来（线上网络慢时可能超时，先等 networkidle 再等编辑器）\n    await page.waitForLoadState(\"domcontentloaded\").catch(() => {});\n    try {\n        await page.waitForSelector(\".edui-editor-toolbarbox\", { state: \"visible\", timeout: 90000 });\n    } catch (_err) {\n        // 编辑器未加载出来，尝试刷新一次\n        await page.reload({ waitUntil: \"domcontentloaded\", timeout: 60000 });\n        // 刷新后重新校验登录\n        const isLoggedIn = await page\n            .locator(\".bjh-edit-header\")\n            .isVisible({ timeout: 15000 })\n            .catch(() => false);\n        if (!isLoggedIn) {\n            return { code: 414, message: \"登录失效\", data: page.url() };\n        }\n        await page.waitForSelector(\".edui-editor-toolbarbox\", { state: \"visible\", timeout: 90000 });\n    }\n\n    // 2. 关闭纯文本粘贴，默认开启纯文本粘贴的提示，先关闭\n    if (await page.locator(\"#_onceTip-news_pasteplain_tip\").isVisible()) {\n        await page.locator(\"#_onceTip-news_pasteplain_tip .confirm\").click();\n    }\n\n    // 2. 新增风险检测提示，先关闭\n    if (await page.locator(\".cheetah-tour .cheetah-tour-inner\").filter({ hasText: \"新增风险检测\" }).isVisible()) {\n        await page\n            .locator(\".cheetah-tour .cheetah-tour-inner\")\n            .filter({ hasText: \"新增风险检测\" })\n            .locator(\".cheetah-btn\")\n            .filter({ hasText: \"我知道了\" })\n            .click();\n    }\n    // 2. 关闭纯文本粘贴\n    // 有个默认开启纯文本粘贴的提示，先关闭\n    if (await page.locator(\".cheetah-tour .cheetah-tour-inner .cheetah-tour-close\").isVisible()) {\n        await page.locator(\".cheetah-tour .cheetah-tour-inner .cheetah-tour-close\").click();\n    }\n\n    // 判断是否开启纯文本粘贴，如果开启，点击关闭\n    if (\n        await page.locator(\".edui-editor-toolbarbox .edui-button.edui-for-pasteplain .edui-state-checked\").isVisible()\n    ) {\n        await page.locator(\".edui-editor-toolbarbox .edui-button.edui-for-pasteplain .edui-state-checked\").click();\n    }\n\n    // 3. 填写标题\n    // 百家号使用 Lexical 编辑器，使用键盘逐字输入更可靠\n    const titleEditor = page.locator(\".input-box[data-testid='news-title-input'] div[contenteditable='true']\");\n\n    // 点击编辑器激活\n    await titleEditor.click();\n\n    // 等待编辑器获得焦点\n    await page.waitForTimeout(200);\n\n    // 先清空可能存在的内容\n    await page.keyboard.press(\"Control+A\");\n    await page.keyboard.press(\"Delete\");\n\n    // 逐字输入标题（添加小延迟模拟真实输入）\n    await page.keyboard.type(params.title, { delay: 50 });\n\n    // 等待一下确保内容已设置\n    await page.waitForTimeout(300);\n\n    // 4. 填写正文\n    await copyHtmlToClipboard(page, params.content);\n    // 定位目标元素并聚焦\n    await page.click(\"#ueditor .edui-editor-iframeholder iframe\");\n    // 模拟Ctrl+A全选\n    await page.keyboard.press(\"Control+A\");\n    // 模拟Ctrl+V粘贴\n    await page.keyboard.press(\"Control+V\");\n\n    // 等待 1 秒钟（让正文中的图片上传上去）\n    await page.waitForTimeout(1000);\n\n    // 5. 设置封面\n    const coverFormItem = page.locator(\".bjh-edit-wrap-set .cheetah-form-item\").nth(0);\n    const isSingleCover = params.settingInfo.baijiahaoCoverType === \"single\";\n    if (isSingleCover) {\n        // 单图\n        await coverFormItem\n            .locator(\".cheetah-form-item-control label.cheetah-radio-wrapper\")\n            .filter({ hasText: \"单图\" })\n            .click();\n    } else {\n        // 多图\n        await coverFormItem\n            .locator(\".cheetah-form-item-control label.cheetah-radio-wrapper\")\n            .filter({ hasText: \"三图\" })\n            .click();\n    }\n\n    // 获取待上传图片的本地路径\n    const images = await Promise.all(\n        (isSingleCover ? [params.settingInfo.baijiahaoSingleCover] : params.settingInfo.baijiahaoMultCover).map(\n            (url) => {\n                const fileName = getFilenameFromUrl(url);\n                return downloadImage(url, path.join(tmpCachePath, fileName));\n            },\n        ),\n    );\n\n    // 点击第一个封面槽打开弹窗（单图/多图都只需打开一次弹窗）\n    const firstSlot = page.locator(\".cheetah-spin-container\").first();\n    await firstSlot.evaluate((node) => node.scrollIntoView());\n    if (await firstSlot.locator(\".actions-wrap\").isVisible()) {\n        await firstSlot.locator(\".actions-wrap .action\").filter({ hasText: \"更换\" }).click();\n    } else {\n        await firstSlot.click();\n    }\n\n    // 等待弹窗出现\n    await page.waitForSelector(\".cheetah-modal-root .cheetah-modal\", { state: \"visible\" });\n\n    // 切换到「正文/本地上传」\n    const modal = page.locator(\".cheetah-modal-root .cheetah-modal\");\n    const localTab = modal.locator(\".cheetah-tabs-tab[data-node-key='local_main']\");\n    if (await localTab.isVisible()) {\n        await localTab.click();\n        await page.waitForTimeout(300);\n    }\n\n    // 上传按钮：含\"本地上传\"文字区域内\n    const uploadBtn = modal\n        .locator(\"div[class*='-upload']\")\n        .filter({ has: page.locator(\"div[class*='-text']\", { hasText: \"本地上传\" }) })\n        .locator(\"span.cheetah-upload\");\n\n    for (let i = 0; i < images.length; i++) {\n        const image = images[i];\n        // 记录上传前列表数量，用于等待新图片出现\n        const beforeCount = await modal.locator(\"div[class*='-imgItem']\").count();\n\n        // waitForEvent 必须在 click 之前声明，两者并发执行\n        const fileChooserPromise = page.waitForEvent(\"filechooser\", { timeout: 15000 });\n        await uploadBtn.click();\n        const fileChooser = await fileChooserPromise;\n        await fileChooser.setFiles([image]);\n\n        // 等待新图片上传完成（列表数量增加）\n        await page\n            .waitForFunction(\n                (before: number) => document.querySelectorAll(\"[class*='-imgItem']\").length > before,\n                beforeCount,\n                { timeout: 15000 },\n            )\n            .catch(() => page.waitForTimeout(2000)); // 降级等待\n\n        await page.waitForTimeout(300);\n\n        // 刚上传的本地图片\n        const allBlobItems = modal.locator(\"div[class*='-imgItem']\").filter({ has: page.locator(\"img[src^='blob:']\") });\n\n        const count = await allBlobItems.count();\n        let clicked = false;\n        for (let idx = 0; idx < count; idx++) {\n            const item = allBlobItems.nth(idx);\n            const isSelected = await item\n                .locator(\"div[class*='-checkbox']\")\n                .evaluate((el) => el.className.includes(\"selected\"))\n                .catch(() => false);\n            if (!isSelected) {\n                await item.locator(\"div[class*='-hotArea']\").click();\n                await page.waitForTimeout(300);\n                clicked = true;\n                break;\n            }\n        }\n        if (!clicked) {\n            // 降级：直接点最后一个 blob item（兜底，不应走到这里）\n            await allBlobItems.last().locator(\"div[class*='-hotArea']\").click();\n            await page.waitForTimeout(300);\n        }\n    }\n\n    // 点击确认按钮\n    await modal.locator(\"button[class*='confirmBtn']\").click();\n    // 等待弹窗关闭\n    await page.waitForSelector(\".cheetah-modal-root .cheetah-modal\", { state: \"hidden\", timeout: 10000 });\n    await page.waitForTimeout(500);\n\n    // 6. 摘要\n    const abstractTextarea = page.locator(\".bjh-edit-wrap-set textarea.cheetah-input\").first();\n    if (await abstractTextarea.isVisible({ timeout: 3000 }).catch(() => false)) {\n        await abstractTextarea.click();\n        await abstractTextarea.fill(params.settingInfo.baijiahaoAbstract);\n    }\n\n    // 7. 设置（页面升级后的新结构）\n\n    // 关闭「公共政策和时事」浮层提示（如有）\n    const policyTip = page.locator(\n        '.cheetah-public .cheetah-popover-content .cheetah-popconfirm-message-icon span[class*=\"-icon\"]',\n    );\n    if (await policyTip.isVisible({ timeout: 3000 }).catch(() => false)) {\n        await policyTip.click();\n        await page.waitForTimeout(200);\n    }\n\n    // ── 7a. 智能创作区域\n\n    // 处理 baijiahaoPublishConf 配置项 自动生成播客\n    if (params.settingInfo.baijiahaoPublishConf && params.settingInfo.baijiahaoPublishConf.length > 0) {\n        const aiSettingSection = page.locator(\"div[class*='aiSetting']\");\n        for (const item of params.settingInfo.baijiahaoPublishConf) {\n            const confCheckbox = aiSettingSection\n                .locator(\"label.cheetah-checkbox-wrapper\")\n                .filter({ has: page.locator(`span.${item.confName}`) });\n\n            if (await confCheckbox.isVisible()) {\n                const isChecked = await confCheckbox.locator(\"input.cheetah-checkbox-input\").isChecked();\n                if (isChecked !== item.isChecked) {\n                    await confCheckbox.click();\n                    await page.waitForTimeout(200);\n                }\n            }\n        }\n    }\n\n    // 处理\"图文转动态\"复选框\n    const event2NewsCheckbox = page.locator(\"label.cheetah-checkbox-wrapper\").filter({ hasText: \"图文转动态\" });\n    if (await event2NewsCheckbox.isVisible()) {\n        const isChecked = await event2NewsCheckbox.locator(\"input#event2news\").isChecked();\n        const shouldCheck = !!params.settingInfo.baijiahaoEvent2News;\n        if (isChecked !== shouldCheck) {\n            await event2NewsCheckbox.click();\n            await page.waitForTimeout(200);\n        }\n    }\n\n    // 7b. 创作声明区域\n    const statementSection = page.locator(\"div[class*='statementSetting']\");\n\n    // 处理\"采用AI生成内容\"复选框\n    const isAi = params.settingInfo.baijiahaoIsAi?.includes(\"isAi\");\n    const aigcCheckbox = statementSection\n        .locator(\"label.cheetah-checkbox-wrapper\")\n        .filter({ has: page.locator(\"span.aigc_bjh_status\") });\n    if (await aigcCheckbox.isVisible()) {\n        const isChecked = await aigcCheckbox.locator(\"input.cheetah-checkbox-input\").isChecked();\n        if (isChecked !== !!isAi) {\n            await aigcCheckbox.click();\n            await page.waitForTimeout(200);\n        }\n    }\n\n    // 处理\"来源说明\"复选框，勾选后展开时间/地点选择器\n    const hasEventSpec = !!(params.settingInfo.baijiahaoEventSpec?.time || params.settingInfo.baijiahaoEventSpec?.pos);\n    const sourceCheckLabel = statementSection.locator(\"div[class*='sourceCheck'] label.cheetah-checkbox-wrapper\");\n    if (await sourceCheckLabel.isVisible()) {\n        const isSourceChecked = await sourceCheckLabel.locator(\"input.cheetah-checkbox-input\").isChecked();\n        if (!isSourceChecked && hasEventSpec) {\n            // 需要填写来源 → 勾选，展开时间/地点区域\n            await sourceCheckLabel.click();\n            await page.waitForTimeout(400);\n        } else if (isSourceChecked && !hasEventSpec) {\n            // 不需要来源 → 取消勾选\n            await sourceCheckLabel.click();\n            await page.waitForTimeout(300);\n        }\n    }\n\n    // 填写事件时间（DatePicker：input[placeholder='请选择时间']，在 .a61da01300f09f44-sourceDatePicker 内）\n    // 填写事件地点（Cascader：div[class*='cascader']，placeholder='请选择地点'，需点开下拉后按文字选择）\n    if (hasEventSpec) {\n        // 等待来源说明展开区域出现\n        const sourceWrap = page.locator(\"div[class*='sourceWrap']\");\n        await sourceWrap.waitFor({ state: \"visible\", timeout: 5000 });\n\n        // 事件时间：cheetah DatePicker\n        // baijiahaoEventSpec.time 格式为 \"YYYY-MM-DD\"，对应日历 td[title='YYYY-MM-DD']\n        if (params.settingInfo.baijiahaoEventSpec?.time) {\n            const targetDate = params.settingInfo.baijiahaoEventSpec.time; // e.g. \"2026-04-07\"\n            const datePickerInput = sourceWrap.locator(\n                \"div[class*='sourceDatePicker'] input[placeholder='请选择时间']\",\n            );\n            if (await datePickerInput.isVisible()) {\n                // 点击 input 打开日历面板\n                await datePickerInput.click();\n                await page.waitForTimeout(300);\n\n                // 等待日历面板出现\n                const pickerPanel = page.locator(\".cheetah-picker-dropdown:not(.cheetah-picker-dropdown-hidden)\");\n                await pickerPanel.waitFor({ state: \"visible\", timeout: 5000 });\n\n                // 解析目标年月，判断是否需要翻页\n                const [targetYear, targetMonth] = targetDate.split(\"-\").map(Number);\n\n                // 最多翻 24 个月\n                for (let attempt = 0; attempt < 24; attempt++) {\n                    // 读取当前面板显示的年月\n                    const yearText = await pickerPanel.locator(\".cheetah-picker-year-btn\").textContent();\n                    const monthText = await pickerPanel.locator(\".cheetah-picker-month-btn\").textContent();\n                    const currentYear = Number(yearText?.replace(\"年\", \"\"));\n                    const currentMonth = Number(monthText?.replace(\"月\", \"\"));\n\n                    if (currentYear === targetYear && currentMonth === targetMonth) break;\n\n                    // 判断目标在当前之前还是之后\n                    const isAfter =\n                        targetYear > currentYear || (targetYear === currentYear && targetMonth > currentMonth);\n                    if (isAfter) {\n                        await pickerPanel.locator(\".cheetah-picker-header-next-btn\").click();\n                    } else {\n                        await pickerPanel.locator(\".cheetah-picker-header-prev-btn\").click();\n                    }\n                    await page.waitForTimeout(200);\n                }\n\n                // 点击目标日期（td[title='YYYY-MM-DD'] 精确匹配）\n                await pickerPanel.locator(`td[title='${targetDate}'] .cheetah-picker-cell-inner`).click();\n                await page.waitForTimeout(300);\n            }\n        }\n\n        // 事件地点：Cascader 级联选择器，点击后从下拉菜单中选择匹配项\n        if (params.settingInfo.baijiahaoEventSpec?.pos) {\n            const cascader = sourceWrap.locator(\"div[class*='cascader']\");\n            if (await cascader.isVisible()) {\n                // 点击打开级联下拉\n                await cascader.click();\n                await page.waitForTimeout(400);\n\n                // pos 格式示例：\"北京市,海淀区\" 或 \"北京市\"，逐级选择\n                const levels = params.settingInfo.baijiahaoEventSpec.pos.split(\",\");\n                for (const level of levels) {\n                    const option = page\n                        .locator(\".cheetah-cascader-menus .cheetah-cascader-menu-item\")\n                        .filter({ hasText: level });\n                    if ((await option.count()) > 0) {\n                        await option.first().click();\n                        await page.waitForTimeout(300);\n                    }\n                }\n\n                // 按 Escape 关闭下拉（若未自动关闭）\n                const cascaderDropdown = page.locator(\".cheetah-cascader-menus\");\n                if (await cascaderDropdown.isVisible()) {\n                    await page.keyboard.press(\"Escape\");\n                    await page.waitForTimeout(200);\n                }\n            }\n        }\n    }\n\n    // 8. 活动投稿（label[for='task'] 定位 form-item，div[class*='taskName'] 定位卡片文字）\n    if (params.settingInfo.baijiahaoActivity.length > 0 && params.settingInfo.baijiahaoSelectActivityCache.length > 0) {\n        const activity = params.settingInfo.baijiahaoActivity.filter((it) =>\n            params.settingInfo.baijiahaoSelectActivityCache.includes(it.id),\n        );\n        if (activity.length > 0) {\n            const activityFormItem = page\n                .locator(\".bjh-edit-wrap-set\")\n                .locator(\".cheetah-form-item\")\n                .filter({ has: page.locator(\"label[for='task']\") });\n            const name = activity[0].task_name;\n            // 用 taskName 子元素匹配卡片文字，再点击所在的 taskCard\n            const findCard = activityFormItem\n                .locator(\"div[class*='taskCard']\")\n                .filter({ has: page.locator(\"div[class*='taskName']\", { hasText: name }) });\n            if ((await findCard.count()) > 0) {\n                await findCard.first().click();\n                await page.waitForTimeout(200);\n            }\n        }\n    }\n\n    // 9. 保存草稿 / 发布\n    // biome-ignore-start lint/suspicious/noAsyncPromiseExecutor: 临时保留async\n    const { articleId, message } = await new Promise<{ articleId: string; message: string }>(async (resolve) => {\n        // 定义响应处理函数\n        const handleResponse = async (response: Response) => {\n            const url = response.url();\n            if (url.includes(\"/pcui/article/save\") || url.includes(\"/pcui/article/publish\")) {\n                const jsonResponse = await response.json();\n                page.off(\"response\", handleResponse);\n                resolve({ articleId: jsonResponse?.ret?.article_id, message: jsonResponse?.errmsg });\n            }\n        };\n\n        // 开始监听响应事件\n        page.on(\"response\", handleResponse);\n        task._timerRecord.PrePublish = Date.now();\n\n        const operatorContainer = page.locator(\".editor-component-operator\");\n        if (params.saveType === \"draft\") {\n            await operatorContainer\n                .locator(\".op-btn-outter-content\")\n                .filter({ hasText: \"存草稿\" })\n                .locator(\"button\")\n                .click();\n        } else {\n            if (params.settingInfo.timer) {\n                // 点击“定时发布”按钮\n                await operatorContainer\n                    .locator(\".op-btn-outter-content\")\n                    .filter({ hasText: \"定时发布\" })\n                    .locator(\"button\")\n                    .click();\n\n                // 选择日期\n                await page.locator(\".timepublish-wrap-select .select-wrap\", { hasText: \"日\" }).click();\n                await page\n                    .locator(\"#select-date_list + * .cheetah-select-item-option\", {\n                        hasText: TimeFormatter.format(params.settingInfo.timer, \"M月dd日\"),\n                    })\n                    .click();\n                await page.waitForTimeout(200);\n\n                // 选择小时\n                await page.locator(\".timepublish-wrap-select .select-wrap\", { hasText: \"点\" }).click();\n                await page.locator(\"#select-hour_list +div.rc-virtual-list\").hover();\n\n                const scrollHourInfo = await page.evaluate(() => {\n                    const hourInner = document.querySelector(\"#select-hour_list + * .rc-virtual-list-holder-inner\");\n                    const hourElementHeight = hourInner?.children[0].clientHeight || 36;\n                    const hourMapsElem = Array.from(\n                        document.querySelectorAll(\n                            \"#select-hour_list + * .cheetah-select-item-option .cheetah-select-item-option-content\",\n                        ),\n                    );\n                    const hourMap = hourMapsElem.map((item) => item.textContent?.trim());\n\n                    return { elementHeight: hourElementHeight, elementItem: hourMap };\n                });\n                const fistHourElem = scrollHourInfo.elementItem[0];\n                const fistHourElemH = Number(fistHourElem?.split(\"点\")[0]); // 列表渲染的第一个时间\n\n                const lastHourElem = scrollHourInfo.elementItem[scrollHourInfo.elementItem.length - 1];\n                const lastHourElemH = Number(lastHourElem?.split(\"点\")[0]); // 列表渲染的最后一个时间\n\n                const targetTimeH = Number(TimeFormatter.format(params.settingInfo.timer, \"h\")); // 目标时间\n                await page.mouse.wheel(\n                    0,\n                    targetTimeH > lastHourElemH\n                        ? (targetTimeH - lastHourElemH) * scrollHourInfo.elementHeight\n                        : targetTimeH < fistHourElemH\n                          ? -(fistHourElemH - targetTimeH) * scrollHourInfo.elementHeight\n                          : 0,\n                );\n                await page\n                    .locator(\"#select-hour_list + * .cheetah-select-item-option \", { hasText: `${targetTimeH}点` })\n                    .click();\n                await page.waitForTimeout(200);\n\n                // 选择分钟\n                await page.locator(\".timepublish-wrap-select .select-wrap\", { hasText: \"分\" }).click();\n                await page.locator(\"#select-minute_list +div.rc-virtual-list\").hover();\n\n                const scrollMinuteInfo = await page.evaluate(() => {\n                    const hourInner = document.querySelector(\"#select-minute_list + * .rc-virtual-list-holder-inner\");\n                    const hourElementHeight = hourInner?.children[0].clientHeight || 36;\n                    const hourMapsElem = Array.from(\n                        document.querySelectorAll(\n                            \"#select-minute_list + * .cheetah-select-item-option .cheetah-select-item-option-content\",\n                        ),\n                    );\n                    const hourMap = hourMapsElem.map((item) => item.textContent?.trim());\n\n                    return { elementHeight: hourElementHeight, elementItem: hourMap };\n                });\n                const fistMinuteElem = scrollMinuteInfo.elementItem[0];\n                const fistMinuteElemH = Number(fistMinuteElem?.split(\"分\")[0]); // 列表渲染的第一个时间\n\n                const lastMinuteElem = scrollMinuteInfo.elementItem[scrollMinuteInfo.elementItem.length - 1];\n                const lastMinuteElemH = Number(lastMinuteElem?.split(\"分\")[0]); // 列表渲染的最后一个时间\n\n                const targetTimeM = Number(TimeFormatter.format(params.settingInfo.timer, \"m\")); // 目标时间\n                await page.mouse.wheel(\n                    0,\n                    targetTimeM > lastMinuteElemH\n                        ? (targetTimeM - lastMinuteElemH) * scrollMinuteInfo.elementHeight\n                        : targetTimeM < fistMinuteElemH\n                          ? -(fistMinuteElemH - targetTimeM) * scrollMinuteInfo.elementHeight\n                          : 0,\n                );\n                await page\n                    .locator(\"#select-minute_list + * .cheetah-select-item-option \", { hasText: `${targetTimeM}分` })\n                    .click();\n                await page.waitForTimeout(200);\n\n                await page.locator(\".cheetah-modal-confirm-btns button\").filter({ hasText: \"定时发布\" }).click();\n            } else {\n                await operatorContainer\n                    .locator(\".op-btn-outter-content\")\n                    .filter({ hasText: /^发布/ })\n                    .locator(\"button\")\n                    .click();\n            }\n        }\n    });\n\n    // 关闭页面\n    await page.close();\n\n    return success(articleId, articleId ? \"发布成功\" : message);\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActiomCommonParams, ActionCommonParamsSchema } from \"../../types\";\nimport { executeAction, formatSectionHtml } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\ninterface ActivityData {\n    id: string;\n    task_name: string;\n    // biome-ignore lint/suspicious/noExplicitAny: false positive\n    [key: string]: any;\n}\n\nexport const BaijiahaoPublishParamsSchema = ActionCommonParamsSchema.extend({\n    saveType: z.enum([\"draft\", \"publish\"]), // 保存成草稿 / 发布\n    token: z.string(),\n    title: z.string(),\n    content: z.string(),\n    proxyLoc: z.string().optional(),\n    localIP: z.string().optional(), // 用户ip\n    huiwenToken: z.string().optional(), // 绘文token\n    settingInfo: z.object({\n        baijiahaoTitle: z.string(), // 标题\n        baijiahaoCoverType: z.enum([\"single\", \"multiple\"]), // 封面设置：单图 | 三图\n        baijiahaoAbstract: z.string(), // 摘要\n        baijiahaoIsAi: z.array(z.string()), // 设置-由配置项取代\n        baijiahaoSingleCover: z.string(), // 单图封面\n        baijiahaoMultCover: z.array(z.string()), // 三图封面\n        baijiahaoVerticalCover: z.string().optional(), // 竖版封面-下版本删除\n        baijiahaoActivity: z.array(\n            z\n                .object({\n                    id: z.string(),\n                    task_name: z.string(),\n                })\n                .catchall(z.any()), // 允许其他任意字段,\n        ), // 活动投稿\n        baijiahaoPublishConf: z\n            .array(\n                z.object({\n                    confName: z.string(),\n                    isChecked: z.boolean(),\n                }),\n            )\n            .optional(), // 发布配置项\n        baijiahaoTopic: z.record(z.string(), z.any()).optional(), // 百家号话题\n        baijiahaoCms: z.array(z.string()).optional(), // 百家号分类\n        baijiahaoEventSpec: z\n            .object({\n                time: z.string(),\n                pos: z.string(),\n            })\n            .partial()\n            .optional(), // 百家号事件来源说明\n        baijiahaoEvent2News: z.boolean(), // 图文转动态\n        baijiahaoSelectActivityCache: z.array(z.string()), // 选中的活动标签\n        timer: z.number().optional(),\n    }),\n});\n\nexport type BaijiahaoPublishParams = ActiomCommonParams & z.infer<typeof BaijiahaoPublishParamsSchema>;\n\nexport type PublishAction = CommonAction<BaijiahaoPublishParams, string>;\n\nexport const baijiahaoPublish: PublishAction = async (task, params) => {\n    task.logger.info(`baijiahaoPublish actionType: ${params.actionType}`);\n    // Format content HTML\n    params.content = formatSectionHtml(params.content);\n\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return mockAction(task, params);\n    }\n\n    return executeAction(mockAction, rpaAction)(task, params);\n};\n","import https from \"node:https\";\nimport { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams, BaiJiaHao, Toutiao, Weixin, Xiaohongshu } from \"../../../types\";\nimport { Http } from \"../../../utils/http\";\n\nexport type ttSearchAction = CommonAction<ActiomCommonParams, Toutiao.FansCount>;\n\nexport type xhsSearchAction = CommonAction<ActiomCommonParams, Xiaohongshu.FansCount>;\n\nexport interface GetWxFansSearchParams extends ActiomCommonParams {\n    token: string | number;\n}\n\nexport type wxSearchAction = CommonAction<GetWxFansSearchParams, Weixin.FansCount>;\n\nexport type bjhSearchAction = CommonAction<ActiomCommonParams, BaiJiaHao.FansCount>;\n\nconst generatorFormData = (data: Record<string, unknown>) => {\n    const formData = new URLSearchParams();\n\n    for (const [key, value] of Object.entries(data)) {\n        formData.append(key, String(value));\n    }\n\n    return formData.toString();\n};\n\nexport const TTFansExport: ttSearchAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n        },\n    });\n\n    const fans: Toutiao.FansCount = { digg_count: null, fans_count: null, following: null, description: \"\" };\n\n    const userInfo = await http.api<{ code: number; total_fans_count: number; user_id_str: string }>({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/mp/agw/creator_center/user_info?app_id=1231\",\n        params: { app_id: 1231 },\n    });\n\n    async function getToutiaoToken(userId: string, cookies: Record<string, unknown>[]) {\n        return new Promise((resolve, reject) => {\n            const cookieStr = cookies.map((it: Record<string, unknown>) => `${it.name}=${it.value}`).join(\"; \");\n\n            https\n                .get(\n                    `https://www.toutiao.com/c/user/${userId}/`,\n                    {\n                        headers: {\n                            Cookie: cookieStr,\n                            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64)\",\n                        },\n                    },\n                    (res) => {\n                        // 尝试从 Location 头中提取 token\n                        const location = res.headers.location || \"\";\n                        const match = location.match(/\\/token\\/([^/]+)/);\n                        const token = match ? match[1] : \"\";\n\n                        resolve(token);\n                    },\n                )\n                .on(\"error\", reject);\n        });\n    }\n\n    const token = await getToutiaoToken(userInfo.user_id_str, params.cookies);\n\n    type ttFansDetail = {\n        digg_count: string;\n        fans: string;\n        following: string;\n    };\n    const fansDetail: { data: ttFansDetail; message: string } = await http.api({\n        method: \"POST\",\n        url: \"https://www.toutiao.com/api/pc/user/fans_stat\",\n        data: generatorFormData({ token }),\n    });\n\n    const descriptionRes: { data: { media: { description: string } }; message: string } = await http.api({\n        method: \"GET\",\n        url: \"https://mp.toutiao.com/mp/agw/media/edit_media_account_info\",\n        params: { app_id: 1231 },\n    });\n\n    fans.fans_count = Number(fansDetail.data.fans);\n    fans.digg_count = Number(fansDetail.data.digg_count);\n    fans.following = Number(fansDetail.data.following);\n    fans.description = descriptionRes.data.media.description;\n\n    return success(fansDetail.message === \"success\" ? fans : fans, \"获取粉丝数成功！\");\n};\n\nexport const XhsFansExport: xhsSearchAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com/new/home?source=official\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const fans: Xiaohongshu.FansCount = { digg_count: null, fans_count: null, following: null, description: \"\" };\n\n    const res = await http.api<{\n        result: number;\n        data: { follow_count: number; fans_count: number; faved_count: number; personal_desc: string };\n    }>(\n        {\n            method: \"get\",\n            url: \"https://creator.xiaohongshu.com/api/galaxy/creator/home/personal_info\",\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    fans.fans_count = Number(res.data.fans_count);\n    fans.digg_count = Number(res.data.faved_count);\n    fans.following = Number(res.data.follow_count);\n    fans.description = res.data.personal_desc;\n\n    return success(fans, `获取粉丝数成功！${_task.debug ? ` ${http.proxyInfo}` : \"\"}`);\n};\n\nexport const WxFansExport: wxSearchAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        },\n    });\n    const fans: Weixin.FansCount = { digg_count: null, fans_count: null, following: null, description: \"\" };\n\n    const htmlStr = await http.api<string>({\n        method: \"get\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/home\",\n        params: {\n            t: \"home/index\",\n            token: params.token,\n            lang: \"zh_CN\",\n        },\n    });\n    const match = htmlStr.match(/总用户数[\\s\\S]*?<mp-thousandth>(\\d+)<\\/mp-thousandth>/);\n    if (match) {\n        fans.fans_count = Number(match[1]);\n    }\n\n    const desc = await http.api<string>({\n        url: \"https://mp.weixin.qq.com/cgi-bin/settingpage\",\n        method: \"get\",\n        params: {\n            t: \"setting/index\",\n            action: \"index\",\n            token: params.token,\n            lang: \"zh_CN\",\n        },\n    });\n    const descMatch = desc.match(\n        /<label[^>]*class=\"weui-desktop-setting__item__label\"[^>]*>介绍<\\/label>[\\s\\S]*?<div[^>]*class=\"weui-desktop-setting__item__info\"[^>]*>(.*?)<\\/div>/,\n    );\n\n    if (descMatch) {\n        fans.description = descMatch[1].trim();\n    }\n\n    return success(fans, \"获取粉丝数成功！\");\n};\n\nexport const BjhFansExport: bjhSearchAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://baijiahao.baidu.com/builder/rc/home\",\n        },\n    });\n    const fans: BaiJiaHao.FansCount = { digg_count: null, fans_count: null, following: null, description: \"\" };\n\n    const res = await http.api<{ errno: number; data: { total_fans: number } }>({\n        method: \"get\",\n        url: \"https://baijiahao.baidu.com/cms-ui/rights/growth/get_info\",\n    });\n    if (res.errno === 0) fans.fans_count = res.data.total_fans;\n\n    const desc = await http.api<{ errno: number; data: { user: { wishes: string } } }>({\n        method: \"get\",\n        url: \"https://baijiahao.baidu.com/builder/app/appinfo\",\n    });\n    if (desc.errno === 0) fans.description = desc.data.user.wishes;\n\n    return success(fans, \"获取粉丝数成功！\");\n};\n","/**\n * 小红书请求签名生成工具 TypeScript 版本\n * 完全对应 Python 版本的功能实现\n * 兼容ES5/ES2015版本\n */\n\nimport * as crypto from 'node:crypto';\n\n// ========== 配置常量类 ==========\nexport class CryptoConfig {\n    // 位操作相关常量\n    static readonly MAX_32BIT = 0xFFFFFFFF;\n    static readonly MAX_SIGNED_32BIT = 0x7FFFFFFF;\n    static readonly MAX_BYTE = 255;\n\n    // Base64编码相关常量\n    static readonly STANDARD_BASE64_ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n    static readonly CUSTOM_BASE64_ALPHABET = \"ZmserbBoHQtNP+wOcza/LpngG8yJq42KWYj0DSfdikx3VT16IlUAFM97hECvuRX5\";\n    static readonly X3_BASE64_ALPHABET = \"MfgqrsbcyzPQRStuvC7mn501HIJBo2DEFTKdeNOwxWXYZap89+/A4UVLhijkl63G\";\n\n    // XOR 密钥 (124字节)\n    static readonly HEX_KEY = \"71a302257793271ddd273bcee3e4b98d9d7935e1da33f5765e2ea8afb6dc77a51a499d23b67c20660025860cbf13d4540d92497f58686c574e508f46e1956344f39139bf4faf22a3eef120b79258145b2feb5193b6478669961298e79bedca646e1a693a926154a5a7a1bd1cf0dedb742f917a747a1e388b234f2277\";\n\n    // 十六进制处理相关常量\n    static readonly EXPECTED_HEX_LENGTH = 32;\n    static readonly OUTPUT_BYTE_COUNT = 8;\n    static readonly HEX_CHUNK_SIZE = 2;\n\n    // 载荷构建相关常量 (固定124字节)\n    static readonly VERSION_BYTES = [119, 104, 96, 41];\n    static readonly SEQUENCE_VALUE_MIN = 15;\n    static readonly SEQUENCE_VALUE_MAX = 50;\n    static readonly WINDOW_PROPS_LENGTH_MIN = 900;\n    static readonly WINDOW_PROPS_LENGTH_MAX = 1200;\n\n    // 校验和常量\n    static readonly CHECKSUM_VERSION = 1;\n    static readonly CHECKSUM_XOR_KEY = 115;\n    static readonly CHECKSUM_FIXED_TAIL = [249, 65, 103, 103, 201, 181, 131, 99, 94, 7, 68, 250, 132, 21];\n\n    // 环境指纹生成参数\n    static readonly ENV_FINGERPRINT_XOR_KEY = 41;\n    static readonly ENV_FINGERPRINT_TIME_OFFSET_MIN = 10;\n    static readonly ENV_FINGERPRINT_TIME_OFFSET_MAX = 50;\n\n    // 签名数据模板\n    static readonly SIGNATURE_DATA_TEMPLATE = {\n        x0: \"4.2.6\",\n        x1: \"xhs-pc-web\",\n        x2: \"Windows\",\n        x3: \"\",\n        x4: \"\"\n    };\n\n    // 前缀常量\n    static readonly X3_PREFIX = \"mns0301_\";\n    static readonly XYS_PREFIX = \"XYS_\";\n\n    // Trace ID 生成常量\n    static readonly HEX_CHARS = \"abcdef0123456789\";\n    static readonly XRAY_TRACE_ID_SEQ_MAX = 8388607; // 2^23-1\n    static readonly XRAY_TRACE_ID_TIMESTAMP_SHIFT = 23;\n    static readonly B3_TRACE_ID_LENGTH = 16;\n\n    // 新增 PUBLIC_USERAGENT\n    static readonly PUBLIC_USERAGENT = \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 Edg/142.0.0.0\";\n\n    // 新增 SIGNATURE_XSCOMMON_TEMPLATE\n    static readonly SIGNATURE_XSCOMMON_TEMPLATE = {\n        s0: 5,\n        s1: \"\",\n        x0: \"1\",\n        x1: \"4.2.6\",\n        x2: \"Windows\",\n        x3: \"xhs-pc-web\",\n        x4: \"4.86.0\",\n        x5: \"\",\n        x6: \"\",\n        x7: \"\",\n        x8: \"\",\n        x9: -596800761,\n        x10: 0,\n        x11: \"normal\"\n    };\n}\n\n// ========== 位操作类 ==========\nexport class BitOperations {\n    private config = CryptoConfig;\n\n    normalizeTo32bit(value: number): number {\n        return value & this.config.MAX_32BIT;\n    }\n\n    xorTransformArray(inputArray: number[]): Uint8Array {\n        const keyBytes = this.hexStringToBytes(this.config.HEX_KEY);\n        const result = new Uint8Array(inputArray.length);\n\n        for (let i = 0; i < inputArray.length; i++) {\n            result[i] = inputArray[i] ^ keyBytes[i % keyBytes.length];\n        }\n\n        return result;\n    }\n\n    private hexStringToBytes(hexString: string): number[] {\n        const bytes: number[] = [];\n        for (let i = 0; i < hexString.length; i += 2) {\n            bytes.push(parseInt(hexString.substr(i, 2), 16));\n        }\n        return bytes;\n    }\n}\n\n// ========== 随机数生成类 ==========\nexport class RandomGenerator {\n    private config = CryptoConfig;\n\n    generateRandomBytes(byteCount: number): number[] {\n        const result: number[] = [];\n        for (let i = 0; i < byteCount; i++) {\n            result.push(Math.floor(Math.random() * (this.config.MAX_BYTE + 1)));\n        }\n        return result;\n    }\n\n    generateRandomByteInRange(minVal: number, maxVal: number): number {\n        return Math.floor(Math.random() * (maxVal - minVal + 1)) + minVal;\n    }\n\n    generateRandomInt(): number {\n        return Math.floor(Math.random() * (this.config.MAX_32BIT + 1));\n    }\n\n    generateB3TraceId(): string {\n        let result = '';\n        for (let i = 0; i < this.config.B3_TRACE_ID_LENGTH; i++) {\n            result += this.config.HEX_CHARS[Math.floor(Math.random() * this.config.HEX_CHARS.length)];\n        }\n        return result;\n    }\n\n    generateXrayTraceId(timestamp?: number, seq?: number): string {\n        if (timestamp === undefined) {\n            timestamp = Date.now();\n        }\n        if (seq === undefined) {\n            seq = Math.floor(Math.random() * (this.config.XRAY_TRACE_ID_SEQ_MAX + 1));\n        }\n\n        const part1 = ((timestamp << this.config.XRAY_TRACE_ID_TIMESTAMP_SHIFT) | seq).toString(16).padStart(16, '0');\n\n        let part2 = '';\n        for (let i = 0; i < 16; i++) {\n            part2 += this.config.HEX_CHARS[Math.floor(Math.random() * this.config.HEX_CHARS.length)];\n        }\n\n        return part1 + part2;\n    }\n}\n\n// ========== Base64编码器 ==========\nexport class Base64Encoder {\n    private config = CryptoConfig;\n\n    encode(dataToEncode: string): string {\n        const dataBytes = Buffer.from(dataToEncode, 'utf-8');\n        const standardEncodedString = dataBytes.toString('base64');\n\n        let result = '';\n        for (const char of standardEncodedString) {\n            const index = this.config.STANDARD_BASE64_ALPHABET.indexOf(char);\n            if (index !== -1) {\n                result += this.config.CUSTOM_BASE64_ALPHABET[index];\n            } else {\n                result += char;\n            }\n        }\n\n        return result;\n    }\n\n    decode(encodedString: string): string {\n        let standardString = '';\n        for (const char of encodedString) {\n            const index = this.config.CUSTOM_BASE64_ALPHABET.indexOf(char);\n            if (index !== -1) {\n                standardString += this.config.STANDARD_BASE64_ALPHABET[index];\n            } else {\n                standardString += char;\n            }\n        }\n\n        return Buffer.from(standardString, 'base64').toString('utf-8');\n    }\n\n    encodeX3(dataBytes: Uint8Array): string {\n        const base64String = Buffer.from(dataBytes).toString('base64');\n\n        let result = '';\n        for (const char of base64String) {\n            const index = this.config.STANDARD_BASE64_ALPHABET.indexOf(char);\n            if (index !== -1) {\n                result += this.config.X3_BASE64_ALPHABET[index];\n            } else {\n                result += char;\n            }\n        }\n\n        return result;\n    }\n\n    decodeX3(encodedString: string): Uint8Array {\n        let standardString = '';\n        for (const char of encodedString) {\n            const index = this.config.X3_BASE64_ALPHABET.indexOf(char);\n            if (index !== -1) {\n                standardString += this.config.STANDARD_BASE64_ALPHABET[index];\n            } else {\n                standardString += char;\n            }\n        }\n\n        return new Uint8Array(Buffer.from(standardString, 'base64'));\n    }\n}\n\n// ========== 请求签名验证器 ==========\nexport type HttpMethod = 'GET' | 'POST';\n\nexport class RequestSignatureValidator {\n    static validateMethod(method: any): HttpMethod {\n        if (typeof method !== 'string') {\n            throw new TypeError(`method must be str, got ${typeof method}`);\n        }\n\n        const normalizedMethod = method.trim().toUpperCase() as HttpMethod;\n        if (!['GET', 'POST'].includes(normalizedMethod)) {\n            throw new Error(`method must be 'GET' or 'POST', got '${method}'`);\n        }\n\n        return normalizedMethod;\n    }\n\n    static validateUri(uri: any): string {\n        if (typeof uri !== 'string') {\n            throw new TypeError(`uri must be str, got ${typeof uri}`);\n        }\n\n        if (!uri.trim()) {\n            throw new Error('uri cannot be empty');\n        }\n\n        return uri.trim();\n    }\n\n    static validateA1Value(a1Value: any): string {\n        if (typeof a1Value !== 'string') {\n            throw new TypeError(`a1_value must be str, got ${typeof a1Value}`);\n        }\n\n        if (!a1Value.trim()) {\n            throw new Error('a1_value cannot be empty');\n        }\n\n        return a1Value.trim();\n    }\n\n    static validateXsecAppid(xsecAppid: any): string {\n        if (typeof xsecAppid !== 'string') {\n            throw new TypeError(`xsec_appid must be str, got ${typeof xsecAppid}`);\n        }\n\n        if (!xsecAppid.trim()) {\n            throw new Error('xsec_appid cannot be empty');\n        }\n\n        return xsecAppid.trim();\n    }\n\n    static validatePayload(payload: any): Record<string, any> | null {\n        if (payload !== null && (typeof payload !== 'object' || Array.isArray(payload))) {\n            throw new TypeError(`payload must be dict or None, got ${typeof payload}`);\n        }\n\n        if (payload !== null) {\n            for (const key in payload) {\n                if (typeof key !== 'string') {\n                    throw new TypeError(`payload keys must be str, got ${typeof key} for key '${key}'`);\n                }\n            }\n        }\n\n        return payload;\n    }\n}\n\n// ========== 加密处理器 ==========\nexport class CryptoProcessor {\n    public config = CryptoConfig;\n    public bitOps = new BitOperations();\n    public b64encoder = new Base64Encoder();\n    public randomGen = new RandomGenerator();\n\n    private intToLeBytes(val: number, length: number = 4): number[] {\n        const arr: number[] = [];\n        for (let i = 0; i < length; i++) {\n            arr.push(val & 0xFF);\n            val >>>= 8;\n        }\n        return arr;\n    }\n\n    private envFingerprintA(ts: number, xorKey: number): number[] {\n        const data: number[] = [];\n\n        // 小端序编码时间戳\n        for (let i = 0; i < 8; i++) {\n            data.push((ts >>> (i * 8)) & 0xFF);\n        }\n\n        // 计算校验和\n        const sum1 = data.slice(1, 5).reduce((a, b) => a + b, 0);\n        const sum2 = data.slice(5, 8).reduce((a, b) => a + b, 0);\n        const mark = ((sum1 & 0xFF) + sum2) & 0xFF;\n        data[0] = mark;\n\n        // XOR变换\n        return data.map(b => b ^ xorKey);\n    }\n\n    private envFingerprintB(ts: number): number[] {\n        const data: number[] = [];\n        for (let i = 0; i < 8; i++) {\n            data.push((ts >>> (i * 8)) & 0xFF);\n        }\n        return data;\n    }\n\n    buildPayloadArray(\n        hexParameter: string,\n        a1Value: string,\n        appIdentifier: string = \"xhs-pc-web\",\n        stringParam: string = \"\",\n        timestamp?: number\n    ): number[] {\n        const payload: number[] = [];\n\n        // 固定头\n        payload.push(...this.config.VERSION_BYTES);\n\n        // 随机种子\n        const seed = this.randomGen.generateRandomInt();\n        const seedBytes = this.intToLeBytes(seed, 4);\n        payload.push(...seedBytes);\n        const seedByte0 = seedBytes[0];\n\n        // 时间戳处理\n        if (timestamp === undefined) {\n            timestamp = Date.now() / 1000;\n        }\n        const tsMs = Math.floor(timestamp * 1000);\n\n        payload.push(...this.envFingerprintA(tsMs, this.config.ENV_FINGERPRINT_XOR_KEY));\n\n        const timeOffset = this.randomGen.generateRandomByteInRange(\n            this.config.ENV_FINGERPRINT_TIME_OFFSET_MIN,\n            this.config.ENV_FINGERPRINT_TIME_OFFSET_MAX\n        );\n        payload.push(...this.envFingerprintB(tsMs - timeOffset * 1000));\n\n        // 序列值和窗口属性\n        const sequenceValue = this.randomGen.generateRandomByteInRange(\n            this.config.SEQUENCE_VALUE_MIN,\n            this.config.SEQUENCE_VALUE_MAX\n        );\n        payload.push(...this.intToLeBytes(sequenceValue, 4));\n\n        const windowPropsLength = this.randomGen.generateRandomByteInRange(\n            this.config.WINDOW_PROPS_LENGTH_MIN,\n            this.config.WINDOW_PROPS_LENGTH_MAX\n        );\n        payload.push(...this.intToLeBytes(windowPropsLength, 4));\n\n        // URI 长度\n        const uriLength = Buffer.from(stringParam, 'utf-8').length;\n        payload.push(...this.intToLeBytes(uriLength, 4));\n\n        // MD5 XOR 段\n        const md5Bytes = Buffer.from(hexParameter, 'hex');\n        for (let i = 0; i < 8; i++) {\n            payload.push(md5Bytes[i] ^ seedByte0);\n        }\n\n        // A1 长度和内容 (固定52字节)\n        payload.push(52);\n        const a1Bytes = Buffer.from(a1Value, 'utf-8');\n        for (let i = 0; i < 52; i++) {\n            payload.push(i < a1Bytes.length ? a1Bytes[i] : 0);\n        }\n\n        // 源长度和内容 (固定10字节)\n        payload.push(10);\n        const sourceBytes = Buffer.from(appIdentifier, 'utf-8');\n        for (let i = 0; i < 10; i++) {\n            payload.push(i < sourceBytes.length ? sourceBytes[i] : 0);\n        }\n\n        // 尾部校验\n        payload.push(1);\n        payload.push(this.config.CHECKSUM_VERSION);\n        payload.push(seedByte0 ^ this.config.CHECKSUM_XOR_KEY);\n        payload.push(...this.config.CHECKSUM_FIXED_TAIL);\n\n        return payload;\n    }\n}\n\n// ========== CRC32 加密类 ==========\nexport class CRC32 {\n    private static readonly CRC32_TABLE: number[] = (() => {\n        const table: number[] = [];\n        for (let i = 0; i < 256; i++) {\n            let crc = i;\n            for (let j = 0; j < 8; j++) {\n                crc = (crc & 1) ? (0xEDB88320 ^ (crc >>> 1)) : (crc >>> 1);\n            }\n            table.push(crc >>> 0);\n        }\n        return table;\n    })();\n\n    static crc32JsInt(input: string | number[] | Uint8Array, signed: boolean = true): number {\n        let crc = 0xFFFFFFFF;\n        const data = typeof input === 'string' ? this.stringToBytes(input) : input;\n\n        for (const byte of data) {\n            const index = (crc ^ byte) & 0xFF;\n            crc = (this.CRC32_TABLE[index] ^ (crc >>> 8)) >>> 0;\n        }\n\n        crc = (crc ^ 0xFFFFFFFF) >>> 0;\n\n        if (signed) {\n            return crc > 0x7FFFFFFF ? crc - 0x100000000 : crc;\n        }\n        return crc;\n    }\n\n    private static stringToBytes(str: string): number[] {\n        const bytes: number[] = [];\n        for (let i = 0; i < str.length; i++) {\n            const code = str.charCodeAt(i);\n            if (code <= 0xFF) {\n                bytes.push(code);\n            } else {\n                // JS 字符串模式：只取低8位\n                bytes.push(code & 0xFF);\n            }\n        }\n        return bytes;\n    }\n}\n\n// ========== 指纹数据常量 ==========\nexport class FingerprintData {\n    // GPU 供应商列表\n    static readonly GPU_VENDORS = [\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 400 (0x00000166) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 4400 (0x00001112) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 4600 (0x00000412) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 520 (0x1912) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 530 (0x00001912) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 550 (0x00001512) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 6000 (0x1606) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(TM) Graphics 540 (0x1912) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(TM) Graphics 550 (0x1913) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(TM) Plus Graphics 640 (0x161C) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 600 (0x3E80) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 620 (0x00003EA0) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 630 (0x00003E9B) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 655 (0x00009BC8) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(R) Xe Graphics (0x000046A8) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(R) Xe Graphics (0x00009A49) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(R) Xe MAX Graphics (0x00009BC0) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel Arc A370M (0x0000AF51) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel Arc A380 (0x0000AF41) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel Arc A380M (0x0000AF5E) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel Arc A550 (0x0000AF42) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel Arc A770 (0x0000AF43) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel Arc A770M (0x0000AF50) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) Graphics (RPL‑P GT1) (0x0000A702) OpenGL 4.6)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) UHD Graphics 770 (0x00004680) OpenGL 4.6)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) HD Graphics 4400 (0x00001122) OpenGL 4.6)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) Graphics (ADL‑S GT1) (0x0000A0A1) OpenGL 4.6)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) Graphics (RKL GT1) (0x0000A9A1) OpenGL 4.6)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) UHD Graphics (CML GT2) (0x00009A14) OpenGL 4.6)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 3000 (0x00001022) Direct3D9Ex vs_3_0 ps_3_0, igdumd64.dll)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics Family (0x00000A16) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris Pro OpenGL Engine, OpenGL 4.1)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(TM) Plus Graphics 645 (0x1616) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(TM) Plus Graphics 655 (0x161E) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 730 (0x0000A100) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 805 (0x0000B0A0) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Vega 3 Graphics (0x000015E0) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Vega 8 Graphics (0x000015D8) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Vega 11 Graphics (0x000015DD) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Graphics (0x00001636) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 5500 XT Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 560 (0x000067EF) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 570 (0x000067DF) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 580 2048SP (0x00006FDF) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 590 (0x000067FF) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6600 (0x000073FF) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6600 XT (0x000073FF) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6650 XT Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6700 XT (0x000073DF) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6800 (0x000073BF) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6900 XT (0x000073C2) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 7700 XT Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Pro 5300M OpenGL Engine, OpenGL 4.1)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Pro 5500 XT OpenGL Engine, OpenGL 4.1)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon R7 370 Series (0x00006811) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, ATI Technologies Inc. AMD Radeon RX Vega 64 OpenGL Engine, OpenGL 4.1)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce GTX 1050 (0x00001C81) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce GTX 1050 Ti (0x00001C8C) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce GTX 1060 6GB (0x000010DE) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce GTX 1070 (0x00001B81) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce GTX 1080 (0x00001B80) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 2060 (0x00001F06) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 2060 SUPER (0x00001F06) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 2070 (0x00001F10) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 2070 SUPER (0x00001F10) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 (0x0000250F) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 Ti (0x00002489) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3070 (0x00002488) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3070 Ti (0x000028A5) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3080 (0x00002206) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3080 Ti (0x00002208) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3090 (0x00002204) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4060 (0x00002882) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4060 Ti (0x00002803) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4070 (0x00002786) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4070 Ti (0x00002857) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4080 (0x00002819) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4090 (0x00002684) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA Quadro RTX 5000 Ada Generation (0x000026B2) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA Quadro P400 (0x00001CB3) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Google)|ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)\",  // noqa: E501\n        \"Google Inc. (Google)|ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero)), SwiftShader driver)\",\n        \"Google Inc. (Google)|ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device), SwiftShader driver)\",\n    ];\n\n    // 屏幕分辨率配置\n    static readonly SCREEN_RESOLUTIONS = {\n        resolutions: [\"1366;768\", \"1600;900\", \"1920;1080\", \"2560;1440\", \"3840;2160\", \"7680;4320\"],\n        weights: [0.25, 0.15, 0.35, 0.15, 0.08, 0.02]\n    };\n\n    // 颜色深度选项\n    static readonly COLOR_DEPTH_OPTIONS = {\n        values: [16, 24, 30, 32],\n        weights: [0.05, 0.6, 0.05, 0.3]\n    };\n\n    // 设备内存选项\n    static readonly DEVICE_MEMORY_OPTIONS = {\n        values: [1, 2, 4, 8, 12, 16],\n        weights: [0.10, 0.25, 0.4, 0.2, 0.03, 0.01]\n    };\n\n    // CPU 核心数选项\n    static readonly CORE_OPTIONS = {\n        values: [2, 4, 6, 8, 12, 16, 24, 32],\n        weights: [0.1, 0.4, 0.2, 0.15, 0.08, 0.04, 0.02, 0.01]\n    };\n\n    // 浏览器插件\n    static readonly BROWSER_PLUGINS = \"PDF Viewer,Chrome PDF Viewer,Chromium PDF Viewer,Microsoft Edge PDF Viewer,WebKit built-in PDF\";\n\n    // Canvas 哈希\n    static readonly CANVAS_HASH = \"742cc32c\";\n\n    // 语音哈希选项\n    static readonly VOICE_HASH_OPTIONS = \"10311144241322244122\";\n\n    // 字体字符串\n    static readonly FONTS = 'system-ui, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\", -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif, BlinkMacSystemFont, \"Helvetica Neue\", Arial, \"PingFang SC\", \"PingFang TC\", \"PingFang HK\", \"Microsoft Yahei\", \"Microsoft JhengHei\"';\n}\n\n// ========== 指纹生成器辅助函数 ==========\nexport class FingerprintHelpers {\n    /**\n     * 加权随机选择\n     */\n    static weightedRandomChoice<T>(options: T[], weights: number[]): T {\n        const totalWeight = weights.reduce((sum, weight) => sum + weight, 0);\n        let random = Math.random() * totalWeight;\n\n        for (let i = 0; i < options.length; i++) {\n            random -= weights[i];\n            if (random <= 0) {\n                return options[i];\n            }\n        }\n        return options[options.length - 1];\n    }\n\n    /**\n     * 获取随机渲染器信息\n     */\n    static getRendererInfo(): { vendor: string; renderer: string } {\n        const rendererStr = FingerprintData.GPU_VENDORS[Math.floor(Math.random() * FingerprintData.GPU_VENDORS.length)];\n        const [vendor, renderer] = rendererStr.split('|');\n        return { vendor, renderer };\n    }\n\n    /**\n     * 获取屏幕配置\n     */\n    static getScreenConfig(): { width: number; height: number; availWidth: number; availHeight: number } {\n        const resolutionStr = this.weightedRandomChoice(\n            FingerprintData.SCREEN_RESOLUTIONS.resolutions,\n            FingerprintData.SCREEN_RESOLUTIONS.weights\n        );\n        const [widthStr, heightStr] = resolutionStr.split(';');\n        const width = parseInt(widthStr);\n        const height = parseInt(heightStr);\n\n        let availWidth: number, availHeight: number;\n\n        if (Math.random() > 0.5) {\n            availWidth = width - parseInt(String(this.weightedRandomChoice([0, 30, 60, 80], [0.1, 0.4, 0.3, 0.2])));\n            availHeight = height;\n        } else {\n            availWidth = width;\n            availHeight = height - parseInt(String(this.weightedRandomChoice([30, 60, 80, 100], [0.2, 0.5, 0.2, 0.1])));\n        }\n\n        return { width, height, availWidth, availHeight };\n    }\n\n    /**\n     * 生成 Canvas 哈希\n     */\n    static generateCanvasHash(): string {\n        return FingerprintData.CANVAS_HASH;\n    }\n\n    /**\n     * 生成 WebGL 哈希\n     */\n    static generateWebglHash(): string {\n        return crypto.createHash('md5').update(crypto.randomBytes(32)).digest('hex');\n    }\n}\n\n// ========== ARC4 加密实现 ==========\nexport class ARC4 {\n    private s: number[] = [];\n\n    constructor(key: Uint8Array) {\n        // 初始化 S 盒\n        for (let i = 0; i < 256; i++) {\n            this.s[i] = i;\n        }\n\n        // 密钥调度算法 (KSA)\n        let j = 0;\n        for (let i = 0; i < 256; i++) {\n            j = (j + this.s[i] + key[i % key.length]) % 256;\n            [this.s[i], this.s[j]] = [this.s[j], this.s[i]];\n        }\n    }\n\n    /**\n     * 加密数据\n     */\n    encrypt(data: Uint8Array): Uint8Array {\n        const result = new Uint8Array(data.length);\n        let i = 0, j = 0;\n\n        for (let k = 0; k < data.length; k++) {\n            i = (i + 1) % 256;\n            j = (j + this.s[i]) % 256;\n            [this.s[i], this.s[j]] = [this.s[j], this.s[i]];\n\n            const keyByte = this.s[(this.s[i] + this.s[j]) % 256];\n            result[k] = data[k] ^ keyByte;\n        }\n\n        return result;\n    }\n}\n\n// ========== 指纹生成器 ==========\nexport class FingerprintGenerator {\n    private config = CryptoConfig;\n    private b1Key: Uint8Array;\n    private encoder: Base64Encoder;\n\n    constructor() {\n        this.b1Key = new TextEncoder().encode(\"xhswebmplfbt\");\n        this.encoder = new Base64Encoder();\n    }\n\n    /**\n     * 生成完整的浏览器指纹\n     * 完全对应 Python 版本的实现\n     */\n    generate(cookies: Record<string, any>, userAgent: string): Record<string, any> {\n        const cookieString = Object.entries(cookies).map(([k, v]) => `${k}=${v}`).join('; ');\n        const screenConfig = FingerprintHelpers.getScreenConfig();\n        const isIncognitoMode = FingerprintHelpers.weightedRandomChoice([\"true\", \"false\"], [0.95, 0.05]);\n        const { vendor, renderer } = FingerprintHelpers.getRendererInfo();\n\n        const x78Y = Math.floor(Math.random() * (2450 - 2350 + 1)) + 2350;\n\n        const fp = {\n            x1: userAgent,\n            x2: \"false\",\n            x3: \"zh-CN\",\n            x4: String(FingerprintHelpers.weightedRandomChoice(\n                FingerprintData.COLOR_DEPTH_OPTIONS.values,\n                FingerprintData.COLOR_DEPTH_OPTIONS.weights\n            )),\n            x5: String(FingerprintHelpers.weightedRandomChoice(\n                FingerprintData.DEVICE_MEMORY_OPTIONS.values,\n                FingerprintData.DEVICE_MEMORY_OPTIONS.weights\n            )),\n            x6: \"24\",\n            x7: `${vendor},${renderer}`,\n            x8: String(FingerprintHelpers.weightedRandomChoice(\n                FingerprintData.CORE_OPTIONS.values,\n                FingerprintData.CORE_OPTIONS.weights\n            )),\n            x9: `${screenConfig.width};${screenConfig.height}`,\n            x10: `${screenConfig.availWidth};${screenConfig.availHeight}`,\n            x11: \"-480\",\n            x12: \"Asia/Shanghai\",\n            x13: isIncognitoMode,\n            x14: isIncognitoMode,\n            x15: isIncognitoMode,\n            x16: \"false\",\n            x17: \"false\",\n            x18: \"un\",\n            x19: \"Win32\",\n            x20: \"\",\n            x21: FingerprintData.BROWSER_PLUGINS,\n            x22: FingerprintHelpers.generateWebglHash(),\n            x23: \"false\",\n            x24: \"false\",\n            x25: \"false\",\n            x26: \"false\",\n            x27: \"false\",\n            x28: \"0,false,false\",\n            x29: \"4,7,8\",\n            x30: \"swf object not loaded\",\n            x33: \"0\",\n            x34: \"0\",\n            x35: \"0\",\n            x36: String(Math.floor(Math.random() * 20) + 1),\n            x37: \"0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|1|0|0|0|0|0\",\n            x38: \"0|0|1|0|1|0|0|0|0|0|1|0|1|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0\",\n            x39: 0,\n            x40: \"0\",\n            x41: \"0\",\n            x42: \"3.4.4\",\n            x43: FingerprintHelpers.generateCanvasHash(),\n            x44: String(Math.floor(Date.now())),\n            x45: \"__SEC_CAV__1-1-1-1-1|__SEC_WSA__|\",\n            x46: \"false\",\n            x47: \"1|0|0|0|0|0\",\n            x48: \"\",\n            x49: \"{list:[],type:}\",\n            x50: \"\",\n            x51: \"\",\n            x52: \"\",\n            x53: crypto.createHash('md5').update(crypto.randomBytes(32)).digest('hex'),\n            x54: FingerprintData.VOICE_HASH_OPTIONS,\n            x55: \"380,380,360,400,380,400,420,380,400,400,360,360,440,420\",\n            x56: `${vendor}|${renderer}|${FingerprintHelpers.generateWebglHash()}|35`,\n            x57: cookieString,\n            x58: \"180\",\n            x59: \"2\",\n            x60: \"63\",\n            x61: \"1291\",\n            x62: \"2047\",\n            x63: \"0\",\n            x64: \"0\",\n            x65: \"0\",\n            x66: {\n                referer: \"\",\n                location: \"https://www.xiaohongshu.com/explore\",\n                frame: 0\n            },\n            x67: \"1|0\",\n            x68: \"0\",\n            x69: \"326|1292|30\",\n            x70: [\"location\"],\n            x71: \"true\",\n            x72: \"complete\",\n            x73: \"1191\",\n            x74: \"0|0|0\",\n            x75: \"Google Inc.\",\n            x76: \"true\",\n            x77: \"1|1|1|1|1|1|1|1|1|1\",\n            x78: {\n                x: 0,\n                y: x78Y,\n                left: 0,\n                right: 290.828125,\n                bottom: x78Y + 18,\n                height: 18,\n                top: x78Y,\n                width: 290.828125,\n                font: FingerprintData.FONTS\n            },\n            x79: \"144|599565058866\",\n            x80: \"1|[object FileSystemDirectoryHandle]\",\n            x31: \"124.04347527516074\",\n            x82: \"_0x17a2|_0x1954\"\n        };\n\n        return fp;\n    }\n\n    /**\n     * 生成 b1 参数\n     * 完全对应 Python 版本的实现\n     */\n    generateB1(fp: Record<string, any>): string {\n        const b1Fp = {\n            x33: fp.x33,\n            x34: fp.x34,\n            x35: fp.x35,\n            x36: fp.x36,\n            x37: fp.x37,\n            x38: fp.x38,\n            x39: fp.x39,\n            x42: fp.x42,\n            x43: fp.x43,\n            x44: fp.x44,\n            x45: fp.x45,\n            x46: fp.x46,\n            x48: fp.x48,\n            x49: fp.x49,\n            x50: fp.x50,\n            x51: fp.x51,\n            x52: fp.x52,\n            x82: fp.x82\n        };\n\n        const b1Json = JSON.stringify(b1Fp, null, 0).replace(/\\s+/g, '');\n\n        // 使用 ARC4 加密\n        const cipher = new ARC4(this.b1Key);\n        const ciphertext = cipher.encrypt(new TextEncoder().encode(b1Json));\n\n        // 转换为 Latin1 字符串并进行 URL 编码\n        let latin1String = '';\n        for (let i = 0; i < ciphertext.length; i++) {\n            latin1String += String.fromCharCode(ciphertext[i]);\n        }\n\n        const encodedUrl = encodeURIComponent(latin1String).replace(/[!'()*~_-]/g, (c) => {\n            return c; // 保持这些字符不编码\n        });\n\n        // 处理编码结果\n        const b: number[] = [];\n        const parts = encodedUrl.split('%').slice(1); // 去掉第一个空元素\n\n        for (const part of parts) {\n            const chars = part.split('');\n            if (chars.length >= 2) {\n                b.push(parseInt(chars.slice(0, 2).join(''), 16));\n                for (let i = 2; i < chars.length; i++) {\n                    b.push(chars[i].charCodeAt(0));\n                }\n            }\n        }\n\n        const b1 = this.encoder.encode(JSON.stringify(b));\n        return b1;\n    }\n\n    /**\n     * 更新指纹\n     * 完全对应 Python 版本的实现\n     */\n    update(fp: Record<string, any>, cookies: Record<string, any>, url: string): void {\n        const cookieString = Object.entries(cookies).map(([k, v]) => `${k}=${v}`).join('; ');\n\n        fp.x39 = 0;\n        fp.x44 = String(Math.floor(Date.now()));\n        fp.x57 = cookieString;\n        fp.x66 = {\n            referer: \"https://www.xiaohongshu.com/explore\",\n            location: url,\n            frame: 0\n        };\n    }\n}\n\n// ========== x-s-common 签名器 ==========\nexport class XsCommonSigner {\n    private config = CryptoConfig;\n    private fpGenerator: FingerprintGenerator;\n    private encoder: Base64Encoder;\n\n    constructor() {\n        this.fpGenerator = new FingerprintGenerator();\n        this.encoder = new Base64Encoder();\n    }\n\n    sign(cookieDict: Record<string, any>): string {\n        if (!cookieDict.a1) {\n            throw new Error(\"Missing 'a1' in cookies\");\n        }\n\n        const a1Value = cookieDict.a1;\n        const fingerprint = this.fpGenerator.generate(cookieDict, this.config.PUBLIC_USERAGENT);\n        const b1 = this.fpGenerator.generateB1(fingerprint);\n        const x9 = CRC32.crc32JsInt(b1, true);\n\n        const signStruct = {\n            s0: 5,\n            s1: \"\",\n            x0: \"1\",\n            x1: \"4.2.6\",\n            x2: \"Windows\",\n            x3: \"xhs-pc-web\",\n            x4: \"4.86.0\",\n            x5: a1Value,\n            x6: \"\",\n            x7: \"\",\n            x8: b1,\n            x9: x9,\n            x10: 0,\n            x11: \"normal\"\n        };\n\n        const signJson = JSON.stringify(signStruct);\n        return this.encoder.encode(signJson);\n    }\n}\n\n// ========== 主客户端类 ==========\nexport class Xhshow {\n    private cryptoProcessor = new CryptoProcessor();\n    private xsCommonSigner = new XsCommonSigner();\n\n    private buildContentString(\n        method: string,\n        uri: string,\n        payload: Record<string, any> | null = null\n    ): string {\n        payload = payload || {};\n\n        if (method.toUpperCase() === 'POST') {\n            // 使用紧凑格式的 JSON，与 Python json.dumps(separators=(\",\", \":\"), ensure_ascii=False) 一致\n            return uri + JSON.stringify(payload);\n        } else {\n            if (Object.keys(payload).length === 0) {\n                return uri;\n            } else {\n                const params = Object.entries(payload).map(([key, value]) => {\n                    let valueStr: string;\n                    if (Array.isArray(value)) {\n                        valueStr = value.map(v => String(v)).join(',');\n                    } else {\n                        valueStr = value !== null ? String(value) : '';\n                    }\n                    // XHS只编码等号为%3D\n                    valueStr = valueStr.replace(/=/g, '%3D');\n                    return `${key}=${valueStr}`;\n                });\n                return `${uri}?${params.join('&')}`;\n            }\n        }\n    }\n\n    private generateDValue(content: string): string {\n        return crypto.createHash('md5').update(content, 'utf-8').digest('hex');\n    }\n\n    private buildSignature(\n        dValue: string,\n        a1Value: string,\n        xsecAppid: string = \"xhs-pc-web\",\n        stringParam: string = \"\",\n        timestamp?: number\n    ): string {\n        const payloadArray = this.cryptoProcessor.buildPayloadArray(\n            dValue, a1Value, xsecAppid, stringParam, timestamp\n        );\n\n        const xorResult = this.cryptoProcessor.bitOps.xorTransformArray(payloadArray);\n\n        return this.cryptoProcessor.b64encoder.encodeX3(xorResult.slice(0, 124));\n    }\n\n    signXs(\n        method: HttpMethod,\n        uri: string,\n        a1Value: string,\n        xsecAppid: string = \"xhs-pc-web\",\n        payload: Record<string, any> | null = null,\n        timestamp?: number\n    ): string {\n        const validatedMethod = RequestSignatureValidator.validateMethod(method);\n        const validatedUri = RequestSignatureValidator.validateUri(uri);\n        const validatedA1Value = RequestSignatureValidator.validateA1Value(a1Value);\n        const validatedXsecAppid = RequestSignatureValidator.validateXsecAppid(xsecAppid);\n        const validatedPayload = RequestSignatureValidator.validatePayload(payload);\n\n        // 深拷贝模板，避免修改原始配置对象\n        const signatureData = JSON.parse(JSON.stringify(this.cryptoProcessor.config.SIGNATURE_DATA_TEMPLATE));\n\n        const content = this.buildContentString(validatedMethod, validatedUri, validatedPayload);\n\n        const dValue = this.generateDValue(content);\n        signatureData.x3 = this.cryptoProcessor.config.X3_PREFIX + this.buildSignature(\n            dValue, validatedA1Value, validatedXsecAppid, content, timestamp\n        );\n\n        // JSON.stringify 默认就是紧凑格式，与 Python 的 separators=(\",\", \":\") 一致\n        const signatureJson = JSON.stringify(signatureData);\n        return this.cryptoProcessor.config.XYS_PREFIX + this.cryptoProcessor.b64encoder.encode(signatureJson);\n    }\n\n    signXsGet(\n        uri: string,\n        a1Value: string,\n        xsecAppid: string = \"xhs-pc-web\",\n        params: Record<string, any> | null = null,\n        timestamp?: number\n    ): string {\n        return this.signXs('GET', uri, a1Value, xsecAppid, params, timestamp);\n    }\n\n    signXsPost(\n        uri: string,\n        a1Value: string,\n        xsecAppid: string = \"xhs-pc-web\",\n        payload: Record<string, any> | null = null,\n        timestamp?: number\n    ): string {\n        return this.signXs('POST', uri, a1Value, xsecAppid, payload, timestamp);\n    }\n\n    signXsCommon(cookieDict: Record<string, any> | string): string {\n        const cookies = this.parseCookies(cookieDict);\n        return this.xsCommonSigner.sign(cookies);\n    }\n\n    signXsc(cookieDict: Record<string, any> | string): string {\n        return this.signXsCommon(cookieDict);\n    }\n\n    private parseCookies(cookies: Record<string, any> | string): Record<string, any> {\n        if (typeof cookies === 'string') {\n            const cookieObj: Record<string, any> = {};\n            cookies.split(';').forEach(item => {\n                const [key, value] = item.trim().split('=');\n                if (key && value) {\n                    cookieObj[key] = value;\n                }\n            });\n            return cookieObj;\n        }\n        return cookies;\n    }\n\n    signHeaders(\n        method: HttpMethod,\n        uri: string,\n        cookies: Record<string, any> | string,\n        xsecAppid: string = \"xhs-pc-web\",\n        params?: Record<string, any> | null,\n        payload?: Record<string, any> | null,\n        timestamp?: number\n    ): Record<string, string> {\n        if (timestamp === undefined) {\n            timestamp = Date.now() / 1000;\n        }\n\n        const methodUpper = method.toUpperCase();\n\n        // 验证方法和参数\n        let requestData: Record<string, any> | null = null;\n        if (methodUpper === 'GET') {\n            if (payload !== undefined && payload !== null) {\n                throw new Error(\"GET requests must use 'params', not 'payload'\");\n            }\n            requestData = params || null;\n        } else if (methodUpper === 'POST') {\n            if (params !== undefined && params !== null) {\n                throw new Error(\"POST requests must use 'payload', not 'params'\");\n            }\n            requestData = payload || null;\n        } else {\n            throw new Error(`Unsupported method: ${method}`);\n        }\n\n        const cookieDict = this.parseCookies(cookies);\n\n        const a1Value = cookieDict.a1;\n        if (!a1Value) {\n            throw new Error(\"Missing 'a1' in cookies\");\n        }\n\n        const xS = this.signXs(methodUpper as HttpMethod, uri, a1Value, xsecAppid, requestData, timestamp);\n        const xSCommon = this.signXsCommon(cookieDict);\n        const xT = this.getXT(timestamp);\n        const xB3Traceid = this.getB3TraceId();\n        const xXrayTraceid = this.getXrayTraceId(Math.floor(timestamp * 1000));\n\n        return {\n            'x-s': xS,\n            'x-s-common': xSCommon,\n            'x-t': xT.toString(),\n            'x-b3-traceid': xB3Traceid,\n            'x-xray-traceid': xXrayTraceid\n        };\n    }\n\n    signHeadersGet(\n        uri: string,\n        cookies: Record<string, any> | string,\n        xsecAppid: string = \"xhs-pc-web\",\n        params?: Record<string, any> | null,\n        timestamp?: number\n    ): Record<string, string> {\n        return this.signHeaders('GET', uri, cookies, xsecAppid, params, undefined, timestamp);\n    }\n\n    signHeadersPost(\n        uri: string,\n        cookies: Record<string, any> | string,\n        xsecAppid: string = \"xhs-pc-web\",\n        payload?: Record<string, any> | null,\n        timestamp?: number\n    ): Record<string, string> {\n        return this.signHeaders('POST', uri, cookies, xsecAppid, undefined, payload, timestamp);\n    }\n\n    decodeX3(x3Signature: string): Uint8Array {\n        if (x3Signature.startsWith(this.cryptoProcessor.config.X3_PREFIX)) {\n            x3Signature = x3Signature.substring(this.cryptoProcessor.config.X3_PREFIX.length);\n        }\n\n        const decodedBytes = this.cryptoProcessor.b64encoder.decodeX3(x3Signature);\n        return this.cryptoProcessor.bitOps.xorTransformArray(Array.from(decodedBytes));\n    }\n\n    decodeXs(xsSignature: string): Record<string, any> {\n        if (xsSignature.startsWith(this.cryptoProcessor.config.XYS_PREFIX)) {\n            xsSignature = xsSignature.substring(this.cryptoProcessor.config.XYS_PREFIX.length);\n        }\n\n        const jsonString = this.cryptoProcessor.b64encoder.decode(xsSignature);\n        try {\n            return JSON.parse(jsonString);\n        } catch (e) {\n            throw new Error(`Invalid signature: JSON decode failed - ${e}`);\n        }\n    }\n\n    getB3TraceId(): string {\n        return this.cryptoProcessor.randomGen.generateB3TraceId();\n    }\n\n    getXrayTraceId(timestamp?: number, seq?: number): string {\n        return this.cryptoProcessor.randomGen.generateXrayTraceId(timestamp, seq);\n    }\n\n    getXT(timestamp?: number): number {\n        if (timestamp === undefined) {\n            timestamp = Date.now() / 1000;\n        }\n        return Math.floor(timestamp * 1000);\n    }\n\n    buildUrl(baseUrl: string, params?: Record<string, any>): string {\n        if (!params || Object.keys(params).length === 0) {\n            return baseUrl;\n        }\n\n        const queryString = Object.entries(params)\n            .map(([key, value]) => {\n                const valueStr = Array.isArray(value) ? value.join(',') : String(value);\n                return `${key}=${encodeURIComponent(valueStr)}`;\n            })\n            .join('&');\n\n        return `${baseUrl}?${queryString}`;\n    }\n\n    buildJsonBody(payload: Record<string, any>): string {\n        // JSON.stringify 默认就是紧凑格式，与 Python json.dumps(separators=(\",\", \":\"), ensure_ascii=False) 一致\n        return JSON.stringify(payload);\n    }\n}\n\n// 导出默认实例\nexport default new Xhshow();\n\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../../types\";\nimport { ActionCommonParamsSchema } from \"../../../types\";\nimport { Http } from \"../../../utils/http\";\nimport { Xhshow } from \"../../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\n// 环境日志采样：基于时间，每5秒最多记录一次\nlet lastEnvLogTime = 0;\nconst ENV_LOG_INTERVAL_MS = 5000; // 5秒\n\nexport const SessionCheckResultSchema = z.object({ isValidSession: z.boolean() });\nexport type sessionCheckResult = z.infer<typeof SessionCheckResultSchema>;\n\nexport const WxBjhSessionParamsSchema = ActionCommonParamsSchema.extend({\n    token: z.union([z.string(), z.number()]),\n});\nexport type WxBjhSessionParams = z.infer<typeof WxBjhSessionParamsSchema>;\n\nexport type ttSessionCheck = CommonAction<ActiomCommonParams, sessionCheckResult>;\nexport type wxSessionCheck = CommonAction<WxBjhSessionParams, sessionCheckResult>;\nexport type xhsSessionCheck = CommonAction<ActiomCommonParams, sessionCheckResult>;\nexport type bjhSessionCheck = CommonAction<WxBjhSessionParams, sessionCheckResult>;\nexport type dySessionCheck = CommonAction<ActiomCommonParams, sessionCheckResult>;\nexport type shipinhaoSessionCheck = CommonAction<ActiomCommonParams, sessionCheckResult>;\n\nexport const TTSessionCheck: ttSessionCheck = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n        },\n    });\n    const res = await http.api({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/mp/agw/creator_center/user_info\",\n        defaultErrorMsg: \"头条号登录状态失效。\",\n    });\n\n    const isSuccess = res.code === 0;\n    const message = \"头条账号有效性检测成功\";\n    const data = isSuccess ? { isValidSession: true } : { isValidSession: false };\n\n    return success(data, message);\n};\n\nexport const WxSessionCheck: wxSessionCheck = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        },\n    });\n    const fingerprint = \"4695500bc93ab4ce8fb2692da6564e04\";\n\n    const res = await http.api<{ base_resp: { ret: number } }>({\n        method: \"get\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/appmsgpublish\",\n        params: {\n            fingerprint,\n            sub: \"list\",\n            begin: 0,\n            count: 10,\n            query: \"\",\n            type: 101_1_102_103,\n            show_type: \"\",\n            free_publish_type: 1_102_103,\n            sub_action: \"list_ex\",\n            search_card: 0,\n            token: params.token,\n            lang: \"zh_CN\",\n            f: \"json\",\n            ajax: 1,\n        },\n    });\n\n    return success(\n        res.base_resp.ret === 0 ? { isValidSession: true } : { isValidSession: false },\n        \"微信账号有效性检测完成！\",\n    );\n};\n\nexport const XhsSessionCheck: xhsSessionCheck = async (_task, params) => {\n    // 🔍 环境诊断日志 - 基于时间采样，每5秒最多记录一次\n    const now = Date.now();\n    const shouldLogEnv = now - lastEnvLogTime >= ENV_LOG_INTERVAL_MS;\n\n    if (shouldLogEnv) {\n        lastEnvLogTime = now;\n        _task.logger?.debug(\"[XhsSessionCheck] 环境信息\", {\n            processType: process.type,\n            pid: process.pid,\n            nodeVersion: process.version,\n            platform: process.platform,\n            memoryUsage: {\n                heapUsed: `${Math.round(process.memoryUsage().heapUsed / 1024 / 1024)} MB`,\n                heapTotal: `${Math.round(process.memoryUsage().heapTotal / 1024 / 1024)} MB`,\n            },\n            accountId: params.accountId,\n            hasProxy: !!params.proxyLoc,\n        });\n    }\n\n    const check = { isValidSession: false, isValidWebSession: false };\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) {\n        return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: check };\n    }\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com/new/home?source=official\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n    http.addResponseInterceptor((response) => {\n        if (response?.status === 401)\n            return {\n                code: response.data.code,\n                message: response.data.msg,\n                data: response.data.data,\n            };\n    });\n\n    const loginBasePath = \"/api/galaxy/v2/creator/datacenter/account/base\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n\n    // 🛡️ 加密操作保护：捕获签名生成过程中的异常\n    let loginBaseXsHeader: Record<string, string>;\n    try {\n        loginBaseXsHeader = xsEncrypt.signHeadersGet(loginBasePath, recordCookie, \"xhs-pc-web\", null);\n    } catch (signError) {\n        // ⚠️ 错误时强制记录环境信息，即使不在采样周期内\n        _task.logger?.error(\"[XhsSessionCheck] 签名生成失败 - 环境快照\", {\n            accountId: params.accountId,\n            error: signError instanceof Error ? signError.message : String(signError),\n            stack: _task.debug ? (signError instanceof Error ? signError.stack : undefined) : undefined,\n            hasA1: !!recordCookie.a1,\n            // 崩溃时的关键环境信息\n            env: {\n                processType: process.type,\n                memoryUsage: {\n                    heapUsed: `${Math.round(process.memoryUsage().heapUsed / 1024 / 1024)} MB`,\n                    heapTotal: `${Math.round(process.memoryUsage().heapTotal / 1024 / 1024)} MB`,\n                },\n                hasProxy: !!params.proxyLoc,\n                timeSinceLastLog: Date.now() - lastEnvLogTime,\n            },\n        });\n        return {\n            code: 500,\n            message: \"账号签名生成失败，请稍后重试。\",\n            data: check,\n        };\n    }\n\n    const baseInfoStart = Date.now();\n    const _baseInfo = http\n        .api<{ code: number; msg: string }>(\n            {\n                method: \"get\",\n                baseURL: \"https://creator.xiaohongshu.com\",\n                url: loginBasePath,\n                headers: loginBaseXsHeader,\n            },\n            { retries: 3, retryDelay: 20, timeout: 5000 },\n        )\n        .catch((e) => {\n            // 时钟漂移检测：对比客户端时间与小红书服务端返回的 Date 头。\n            // x-t 签名时间戳来自本地 Date.now()，若与服务端偏差超过容忍窗口（通常 ±5 分钟），\n            // 小红书会判为「登录已过期」(902)。timeDriftMs 持续大于 300000 即可锁定为时钟漂移。\n            const clientTimestamp = Date.now();\n            const serverDate = (e?.extra as { serverDate?: string })?.serverDate;\n            const serverTimestamp = serverDate ? new Date(serverDate).getTime() : null;\n            const timeDriftMs = serverTimestamp ? clientTimestamp - serverTimestamp : null;\n\n            _task.logger?.warn(\"[XhsSessionCheck] creator base 接口请求失败\", {\n                accountId: params.accountId,\n                duration: Date.now() - baseInfoStart,\n                code: e?.code,\n                message: e?.message,\n                data: e?.data,\n                extra: e?.extra,\n                proxyInfo: http.proxyInfo,\n                clientTimestamp,\n                serverDate,\n                serverTimestamp,\n                timeDriftMs, // 关键指标：持续 > 300000(5分钟) 基本可判定为客户端时钟漂移\n                isLikelyClockDrift: timeDriftMs !== null && Math.abs(timeDriftMs) > 300_000,\n            });\n            return e.data;\n        });\n\n    const webSessionPath = \"/api/sns/web/unread_count\";\n    const webSessionData = {};\n    const webSessionXsHeader = xsEncrypt.signHeadersPost(webSessionPath, recordCookie, \"xhs-pc-web\", webSessionData);\n\n    const _web_session = http.api<{ code: number; msg: string }>(\n        {\n            method: \"GET\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/unread_count\",\n            data: webSessionData,\n            headers: webSessionXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 5000 },\n    );\n\n    const [baseInfo, web_session] = await Promise.all([_baseInfo, _web_session]);\n\n    if (baseInfo?.code === 0) check.isValidSession = true;\n    if (web_session?.code === 0) check.isValidWebSession = true;\n\n    const _isSuccess = baseInfo?.code === web_session?.code;\n    const message = `小红书账号有效性检测成功${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    return success(check, message);\n};\n\nexport const BjhSessionCheck: bjhSessionCheck = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            token: params.token,\n            referer: \"https://baijiahao.baidu.com/builder/rc/home\",\n        },\n    });\n\n    const res = await http.api({\n        method: \"get\",\n        url: \"https://baijiahao.baidu.com/user-ui/cms/settingInfo\",\n        defaultErrorMsg: \"百家号登录状态失效。\",\n    });\n\n    const isSuccess = res.errno === 0;\n    const message = \"百家号账号有效性检测成功\";\n    const data = isSuccess ? { isValidSession: true } : { isValidSession: false };\n\n    return success(data, message);\n};\n\n/**\n * 抖音创作者平台 Session 检查\n * 通过调用创作者平台用户信息接口验证登录状态\n */\nexport const DySessionCheck: dySessionCheck = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://creator.douyin.com/\",\n        },\n    });\n\n    // 抖音创作者平台获取用户信息的接口\n    const res = await http.api<{\n        status_code: number;\n        data?: {\n            user?: {\n                uid?: string;\n                nickname?: string;\n            };\n        };\n        message?: string;\n    }>({\n        method: \"get\",\n        url: \"https://creator.douyin.com/aweme/v1/creator/user/info/\",\n        params: {\n            // 抖音接口通常需要的时间戳参数\n            _ts: Date.now(),\n        },\n        defaultErrorMsg: \"抖音登录状态失效。\",\n    });\n\n    // 抖音接口返回 status_code 为 0 表示成功\n    const isSuccess = res.status_code === 0;\n    const message = \"抖音账号有效性检测成功\";\n    const data = isSuccess ? { isValidSession: true } : { isValidSession: false };\n\n    return success(data, message);\n};\n\n/**\n * 视频号助手平台 Session 检查\n * 通过调用视频号助手的 auth_data 接口验证登录状态\n */\nexport const ShipinhaoSessionCheck: shipinhaoSessionCheck = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://channels.weixin.qq.com\",\n            \"user-agent\":\n                \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\",\n            \"Content-Type\": \"application/json\",\n        },\n    });\n\n    // 获取13位时间戳\n    const getTimeStamp = (length: number): string => {\n        return Date.now().toString().substring(0, length);\n    };\n\n    // 构建请求体，与视频号助手保持一致\n    const requestBody = {\n        timestamp: getTimeStamp(13), // 13位时间戳\n        _log_finder_uin: \"\",\n        _log_finder_id: \"\",\n        rawKeyBuff: null,\n        pluginSessionId: null,\n        scene: 7,\n        reqScene: 7,\n    };\n\n    // 视频号助手获取用户信息的接口\n    const res = await http.api<{\n        errCode: number;\n        errMsg?: string;\n        data?: {\n            finderUser?: {\n                uin?: number;\n                finderUsername?: string;\n                nickname?: string;\n                headImgUrl?: string;\n            };\n        };\n    }>({\n        method: \"post\",\n        url: \"https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/auth/auth_data\",\n        data: requestBody,\n        defaultErrorMsg: \"视频号登录状态失效。\",\n    });\n\n    // 视频号接口返回 errCode 为 0 表示成功\n    // errCode: 300333/300334 表示登录失效\n    const isSuccess = res.errCode === 0 && res.data?.finderUser !== undefined;\n    const message = isSuccess\n        ? \"视频号账号有效性检测成功\"\n        : res.errCode === 300333 || res.errCode === 300334\n          ? \"视频号登录已失效，请重新登录\"\n          : \"视频号账号有效性检测失败\";\n\n    const data = isSuccess ? { isValidSession: true } : { isValidSession: false };\n\n    return success(data, message);\n};\n","export const contentLimitLength = (content: string) => {\n    // biome-ignore lint/suspicious/noControlCharactersInRegex: 需要匹配非ASCII字符计算长度\n    return content.replace(/[^\\x00-\\xff]/g, \"aa\").length > 2 * 1000;\n};\nexport const rid = () => {\n    return `${Math.floor(Date.now() / 1e3).toString(16)}-${[...Array(8)].map(() => Math.floor(16 * Math.random()).toString(16)).join(\"\")}`;\n};\n\n/**\n * UUID v4 生成器\n * 符合 RFC 4122 标准\n */\n\n/**\n * 随机数生成器函数类型\n */\ntype RandomBytesGenerator = () => Uint8Array;\n\n/**\n * UUID 生成选项\n */\ninterface UuidOptions {\n    /** 自定义随机数生成器 */\n    random?: RandomBytesGenerator;\n    /** 自定义 RNG 函数（random 的别名） */\n    rng?: RandomBytesGenerator;\n}\n\n/**\n * 浏览器 Crypto API 类型\n */\ninterface CryptoAPI {\n    getRandomValues<T extends ArrayBufferView>(array: T): T;\n}\n\n// 配置与常量\n\n// 随机数生成函数（延迟初始化）\nlet randomValuesFunc: ((array: Uint8Array) => Uint8Array) | null = null;\n\n// 16字节缓冲区，用于存储随机数\nconst byteBuffer: Uint8Array = new Uint8Array(16);\n\n// UUID 格式验证正则（含空UUID特殊情况）\nconst UUID_REGEX: RegExp =\n    /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\n\n// 十六进制查找表：索引 0-255 对应 \"00\" 到 \"ff\"\nconst hexTable: string[] = [];\nfor (let i: number = 0; i < 256; i++) {\n    hexTable.push((i + 256).toString(16).substr(1));\n}\n\n// 核心函数\n\n/**\n * 初始化随机数生成器\n * 优先使用 crypto.getRandomValues，不支持则报错\n * @returns 随机数生成函数\n * @throws 当浏览器不支持 crypto API 时抛出错误\n */\nfunction initRandomGenerator(): (array: Uint8Array) => Uint8Array {\n    if (randomValuesFunc) {\n        return randomValuesFunc;\n    }\n\n    // 检测浏览器 crypto API\n    const globalCrypto: Crypto | undefined = typeof crypto !== \"undefined\" ? crypto : undefined;\n    const globalMsCrypto: CryptoAPI | undefined = typeof msCrypto !== \"undefined\" ? (msCrypto as CryptoAPI) : undefined;\n\n    const cryptoAPI: ((array: Uint8Array) => Uint8Array) | undefined =\n        globalCrypto?.getRandomValues?.bind(globalCrypto) || globalMsCrypto?.getRandomValues?.bind(globalMsCrypto);\n\n    if (!cryptoAPI) {\n        throw new Error(\n            \"crypto.getRandomValues() not supported. \" +\n                \"See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\",\n        );\n    }\n\n    randomValuesFunc = cryptoAPI;\n    return randomValuesFunc;\n}\n\n/**\n * 生成16个随机字节\n * @returns 包含16个随机字节的 Uint8Array\n */\nfunction generateRandomBytes(): Uint8Array {\n    const rng: (array: Uint8Array) => Uint8Array = initRandomGenerator();\n    return rng(byteBuffer);\n}\n\n/**\n * 将16字节数组转换为标准UUID字符串格式\n * @param bytes - 16字节数组\n * @param offset - 起始偏移量（默认为0）\n * @returns 标准UUID字符串（小写）\n * @throws 当生成的字符串格式无效时抛出 TypeError\n */\nfunction bytesToUuid(bytes: Uint8Array, offset: number = 0): string {\n    const uuidString: string = (\n        hexTable[bytes[offset + 0]] +\n        hexTable[bytes[offset + 1]] +\n        hexTable[bytes[offset + 2]] +\n        hexTable[bytes[offset + 3]] +\n        \"-\" +\n        hexTable[bytes[offset + 4]] +\n        hexTable[bytes[offset + 5]] +\n        \"-\" +\n        hexTable[bytes[offset + 6]] +\n        hexTable[bytes[offset + 7]] +\n        \"-\" +\n        hexTable[bytes[offset + 8]] +\n        hexTable[bytes[offset + 9]] +\n        \"-\" +\n        hexTable[bytes[offset + 10]] +\n        hexTable[bytes[offset + 11]] +\n        hexTable[bytes[offset + 12]] +\n        hexTable[bytes[offset + 13]] +\n        hexTable[bytes[offset + 14]] +\n        hexTable[bytes[offset + 15]]\n    ).toLowerCase();\n\n    // 验证生成的UUID格式\n    if (!UUID_REGEX.test(uuidString)) {\n        throw new TypeError(\"Stringified UUID is invalid\");\n    }\n\n    return uuidString;\n}\n\n/**\n * 生成 UUID v4\n * @param options - 配置选项，可自定义随机数生成器\n * @param buffer - 可选的目标缓冲区（用于避免内存分配，提升性能）\n * @param bufferOffset - 在目标缓冲区中的起始位置（默认为0）\n * @returns UUID字符串（当未提供buffer时）或填充后的Uint8Array（当提供buffer时）\n *\n * @example\n * // 基础用法，返回字符串\n * const id: string = uuidv4();\n *\n * @example\n * // 高性能用法，复用缓冲区\n * const buffer = new Uint8Array(16);\n * uuidv4({}, buffer, 0);\n * // buffer 现在包含原始字节\n */\nfunction uuidv4(\n    options: UuidOptions = {},\n    buffer: Uint8Array | null = null,\n    bufferOffset: number = 0,\n): string | Uint8Array {\n    // 获取随机字节（使用自定义rng或默认的crypto API）\n    const rng: RandomBytesGenerator = options.random || options.rng || generateRandomBytes;\n    const bytes: Uint8Array = rng();\n\n    // 设置UUID版本标识位（RFC 4122）\n\n    // 第7字节（索引6）：版本4（0100xxxx）\n    // 0x0F = 0b00001111, 0x40 = 0b01000000\n    bytes[6] = (bytes[6] & 0x0f) | 0x40;\n\n    // 第9字节（索引8）：变体 RFC 4122（10xxxxxx）\n    // 0x3F = 0b00111111, 0x80 = 0b10000000\n    bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n    // 输出处理\n\n    // 如果提供了目标缓冲区，将结果写入缓冲区\n    if (buffer) {\n        for (let i: number = 0; i < 16; i++) {\n            buffer[bufferOffset + i] = bytes[i];\n        }\n        return buffer;\n    }\n\n    // 否则返回UUID字符串\n    return bytesToUuid(bytes);\n}\n\n// 导出\n\nexport { uuidv4, bytesToUuid, generateRandomBytes };\nexport type { UuidOptions, RandomBytesGenerator };\n\n// 为了兼容 CommonJS 和浏览器全局变量\ndeclare global {\n    /** IE/Edge 旧版 crypto 对象 */\n    var msCrypto: CryptoAPI | undefined;\n}\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\n\nexport interface CreateShipinhaoCommentParams extends ActiomCommonParams {\n    content: string; // 评论内容\n    exportId: string; // 文章/视频的导出ID\n    rootCommentId?: string; // 根评论ID（回复评论时需要）\n    replyCommentId?: string; // 被回复的评论ID（回复评论时需要）\n}\n\nexport interface CreateCommentResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        commentId: string;\n        createTime: number;\n        success: boolean;\n    };\n}\n\nexport type CreateCommentAction = CommonAction<CreateShipinhaoCommentParams, CreateCommentResponse[\"data\"]>;\n\nexport const createShipinhaoComment: CreateCommentAction = async (_task, params) => {\n    // 验证必需参数\n    if (!params.content || params.content.trim() === \"\") {\n        return response(400, \"评论内容不能为空\", undefined);\n    }\n\n    if (!params.exportId) {\n        return response(400, \"exportId 不能为空\", undefined);\n    }\n\n    // 验证 extraParam 是否存在\n    if (!params.extraParam) {\n        return response(400, \"缺少 extraParam 参数\", undefined);\n    }\n\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId || !params.extraParam.uin) {\n        return response(400, \"fingerPrintDeviceId、aId和uin不能为空\", undefined);\n    }\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://channels.weixin.qq.com/micro/interaction/comment\",\n        origin: \"https://channels.weixin.qq.com\",\n        \"content-type\": \"application/json\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    const http = new Http({\n        headers,\n    });\n\n    const urlParams = new URLSearchParams({\n        _aid: params.extraParam.aId,\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/interaction/comment\",\n    }).toString();\n\n    const requestData: Record<string, any> = {\n        replyCommentId: params.replyCommentId || \"\",\n        content: params.content,\n        clientId: `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`,\n        rootCommentId: params.rootCommentId || \"\",\n        comment: {},\n        exportId: params.exportId,\n        timestamp: Date.now().toString(),\n        _log_finder_uin: \"\",\n        _log_finder_id: params.extraParam.finderUserName || \"\",\n        rawKeyBuff: null,\n        pluginSessionId: null,\n        scene: 7,\n        reqScene: 7,\n    };\n\n    // 如果是回复评论，添加相关参数\n    if (params.rootCommentId) {\n        requestData.rootCommentId = params.rootCommentId;\n    }\n\n    if (params.replyCommentId) {\n        requestData.replyCommentId = params.replyCommentId;\n    }\n\n    const res = await http.api<CreateCommentResponse>({\n        method: \"post\",\n        url: `https://channels.weixin.qq.com/micro/interaction/cgi-bin/mmfinderassistant-bin/comment/create_comment?${urlParams}`,\n        data: requestData,\n    });\n\n    console.log(res, \"----create comment res\");\n\n    const isSuccess = res?.errCode === 0;\n\n    return response(isSuccess ? 0 : 414, res?.errMsg || \"添加评论失败\", res.data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateDtrait } = require(\"../../utils/douyin/douyinSafe/dtrait.js\");\n\nexport const DouyinCheckVerifyQrCodeParamsSchema = ActionCommonParamsSchema.extend({\n    token: z.string(), // 二维码 token\n    encrypt_uid: z.string(), // decision.encrypt_uid\n    verify_scene: z.string().optional(), // decision.event_params.verify_scene\n    verify_reason: z.string().optional(), // decision.event_params.verify_reason\n    extraParam: z\n        .object({\n            browserInfo: z.object({\n                screen_width: z.string().optional(),\n                screen_height: z.string().optional(),\n                browser_language: z.string().optional(),\n                browser_platform: z.string().optional(),\n                browser_name: z.string().optional(),\n                \"sec-ch-ua-platform\": z.string().optional(),\n                \"sec-ch-ua\": z.string().optional(),\n                userAgent: z.string().optional(),\n            }),\n        })\n        .optional(),\n});\n\nexport type DouyinCheckVerifyQrCodeParams = z.infer<typeof DouyinCheckVerifyQrCodeParamsSchema>;\n\nexport type QrCodeStatus = \"new\" | \"scanned\" | \"confirmed\" | \"expired\" | string;\n\nexport interface QrCodeStatusNew {\n    status: \"new\";\n}\n\nexport interface QrCodeStatusConfirmed {\n    status: \"confirmed\";\n    redirect_url: string;\n    ticket: string;\n    cookies: Array<{ name: string; value: string; [key: string]: unknown }>;\n}\n\nexport interface QrCodeStatusExpired {\n    status: \"expired\";\n    token: string;\n    qrcode: string;\n    qrcode_index_url: string;\n    expire_time: number;\n    app_name: string;\n    web_name: string;\n    cookies: Array<{ name: string; value: string; [key: string]: unknown }>;\n}\n\nexport type QrCodeCheckResult = QrCodeStatusNew | QrCodeStatusConfirmed | QrCodeStatusExpired;\n\nexport type DouyinCheckVerifyQrCodeAction = CommonAction<DouyinCheckVerifyQrCodeParams, QrCodeCheckResult>;\n\n/**\n * 解析响应头中的 set-cookie，将新 cookie 合并到旧 cookies 数组中\n */\nfunction mergeSetCookies(\n    oldCookies: Array<{ name: string; value: string; [key: string]: unknown }>,\n    setCookieHeader: string | string[] | undefined,\n): Array<{ name: string; value: string; [key: string]: unknown }> {\n    if (!setCookieHeader) return oldCookies;\n\n    const setCookies = Array.isArray(setCookieHeader) ? setCookieHeader : [setCookieHeader];\n    const cookieMap = new Map<string, { name: string; value: string; [key: string]: unknown }>(\n        oldCookies.map((c) => [c.name, c]),\n    );\n\n    for (const raw of setCookies) {\n        const parts = raw.split(\";\");\n        const [nameValue] = parts;\n        if (!nameValue) continue;\n        const eqIdx = nameValue.indexOf(\"=\");\n        if (eqIdx === -1) continue;\n        const name = nameValue.slice(0, eqIdx).trim();\n        const value = nameValue.slice(eqIdx + 1).trim();\n        if (!name) continue;\n\n        // 解析其他属性\n        const attrs: Record<string, string | boolean> = {};\n        for (let i = 1; i < parts.length; i++) {\n            const part = parts[i].trim();\n            const attrEq = part.indexOf(\"=\");\n            if (attrEq === -1) {\n                attrs[part.toLowerCase()] = true;\n            } else {\n                attrs[part.slice(0, attrEq).trim().toLowerCase()] = part.slice(attrEq + 1).trim();\n            }\n        }\n\n        const existing = cookieMap.get(name);\n        cookieMap.set(name, {\n            ...(existing || {}),\n            ...attrs,\n            name,\n            value,\n        });\n    }\n\n    return Array.from(cookieMap.values());\n}\n\nexport const douyinCheckVerifyQrCode: DouyinCheckVerifyQrCodeAction = async (task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const bizTraceId = params.cookies.find((e: any) => e.name === \"biz_trace_id\")?.value || \"00000000\";\n\n    const msToken = params.cookies.find((e: any) => e.name === \"msToken\")?.value || \"\";\n    const passportCsrfToken = params.cookies.find((e: any) => e.name === \"passport_csrf_token\")?.value || \"\";\n\n    try {\n        task.logger.info(`[douyinCheckVerifyQrCode] 开始轮询二维码状态, token=${params.token}`);\n\n        const headers = {\n            cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n            origin: \"https://creator.douyin.com\",\n            referer:\n                \"https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new\",\n            Accept: \"application/json, text/plain, */*\",\n            \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n            \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n            \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n            \"sec-ch-ua-mobile\": \"?0\",\n            \"user-agent\": userAgent,\n            \"sec-fetch-site\": \"same-origin\",\n            \"sec-fetch-mode\": \"cors\",\n            \"sec-fetch-dest\": \"empty\",\n            \"accept-language\": \"zh-CN,zh;q=0.9\",\n            priority: \"u=1, i\",\n        };\n\n        // 构建 POST body\n        const checkBody: Record<string, string> = {\n            encrypt_uid: params.encrypt_uid || \"\",\n            verify_ticket: \"\",\n            copywriting_key: \"creator\",\n            new_verify_flow: \"\",\n            aid: \"2906\",\n            token: params.token,\n            verify_type: \"\",\n            need_record: \"1\",\n            scene: \"secondary_verify\",\n            verify_scene: params.verify_scene || \"creator\",\n            verify_reason: params.verify_reason || \"gateway_web_authlv_check\",\n            std_verify_way: \"qr_code_verify\",\n            new_authn_sdk_version: \"1.0.0.404-web\",\n        };\n        const checkBodyStr = new URLSearchParams(checkBody).toString();\n\n        // 构建 URL 查询参数（先不含 a_bogus）\n        const checkQueryParams: Record<string, string> = {\n            passport_jssdk_version: \"5.1.2\",\n            passport_jssdk_type: \"lite\",\n            is_from_ttaccountsdk: \"1\",\n            aid: \"2906\",\n            language: \"zh\",\n            account_app_language: \"zh-CN\",\n            new_authn_sdk_version: \"1.0.0.404-web\",\n            is_vcd: \"1\",\n            biz_trace_id: bizTraceId,\n            msToken,\n            a_bogus: \"\",\n        };\n\n        // 生成 a_bogus\n        const checkQueryStr = new URLSearchParams(checkQueryParams).toString();\n        const checkUrl = `https://creator.douyin.com/passport/mobile/validate_by_qrcode/?${checkQueryStr}`;\n        const aBogus = getABogus(checkUrl, checkBodyStr, userAgent);\n        checkQueryParams.a_bogus = aBogus;\n        const finalQueryStr = new URLSearchParams(checkQueryParams).toString();\n\n        // 生成 CSRF Token 与 sessionDtrait\n        const csrfToken = generateCsrfTokenAdvanced({\n            cookies: params.cookies,\n            url: \"https://creator.douyin.com/passport/mobile/validate_by_qrcode/\",\n            method: \"POST\",\n            userAgent,\n        });\n        const sessionDtrait = generateDtrait(\"/passport/mobile/validate_by_qrcode/\");\n\n        // 用于捕获响应头中的 set-cookie\n        let rawSetCookie: string | string[] | undefined;\n\n        const checkHttp = new Http({\n            headers: {\n                ...headers,\n                \"Content-Type\": \"application/x-www-form-urlencoded\",\n                \"x-secsdk-csrf-token\": csrfToken,\n                \"x-tt-passport-csrf-token\": passportCsrfToken,\n                \"x-tt-passport-trace-id\": bizTraceId,\n                \"x-tt-passport-verify-portrait\": \"\",\n                \"x-tt-session-dtrait\": sessionDtrait || \"\",\n            },\n        });\n\n        // 通过拦截器捕获原始响应头\n        checkHttp.addResponseInterceptor((res) => {\n            task.logger.info(\n                `[douyinCheckVerifyQrCode] 原始响应 status=${res.status} data=${JSON.stringify(res.data)}`,\n            );\n            console.log(\"[douyinCheckVerifyQrCode] 原始响应:\", JSON.stringify(res.data));\n            rawSetCookie = res.headers[\"set-cookie\"];\n            return undefined;\n        });\n\n        const checkResponse = await checkHttp.api<{\n            data: {\n                status: QrCodeStatus;\n                redirect_url?: string;\n                ticket?: string;\n                token?: string;\n                qrcode?: string;\n                qrcode_index_url?: string;\n                expire_time?: number;\n                app_name?: string;\n                web_name?: string;\n                is_frontier?: boolean;\n                [key: string]: unknown;\n            };\n            message: string;\n        }>(\n            {\n                method: \"post\",\n                url: `https://creator.douyin.com/passport/mobile/validate_by_qrcode/?${finalQueryStr}`,\n                data: checkBodyStr,\n            },\n            { timeout: 10 * 1000 },\n        );\n\n        const data = checkResponse?.data;\n        const status = data?.status;\n\n        task.logger.info(`[douyinCheckVerifyQrCode] status=${status}`);\n\n        // 合并 set-cookie 到 cookies\n        const updatedCookies = mergeSetCookies(params.cookies as any[], rawSetCookie);\n\n        if (status === \"new\") {\n            return response(0, \"二维码等待扫描\", data);\n        }\n\n        if (status === \"scanned\") {\n            return response(0, \"二维码已扫码，待确认扫描\", data);\n        }\n\n        if (status === \"confirmed\") {\n            return response(0, \"扫码验证成功\", {\n                status: \"confirmed\",\n                redirect_url: data.redirect_url || \"\",\n                ticket: data.ticket || \"\",\n                cookies: updatedCookies,\n            });\n        }\n\n        if (status === \"expired\") {\n            return response(0, \"二维码已过期\", {\n                status: \"expired\",\n                token: data.token || \"\",\n                qrcode: data.qrcode || \"\",\n                qrcode_index_url: data.qrcode_index_url || \"\",\n                expire_time: data.expire_time || 0,\n                app_name: data.app_name || \"\",\n                web_name: data.web_name || \"\",\n            });\n        }\n\n        return response(414, `未知二维码状态: ${status}`, \"\" as any);\n    } catch (err) {\n        const msg = err instanceof Error ? err.message : String(err);\n        task.logger.warn(`[douyinCheckVerifyQrCode] 请求失败: ${msg}`);\n        return response(500, `校验二维码失败: ${msg}`, \"\" as any);\n    }\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinCreateCommentReplyParamsSchema = ActionCommonParamsSchema.extend({\n    itemId: z.string(),\n    commentId: z.string(),\n    text: z.string(),\n});\n\nexport type DouyinCreateCommentReplyParams = z.infer<typeof DouyinCreateCommentReplyParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinCreateCommentReplyParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\nexport type DouyinCreateCommentReplyParams = z.infer<typeof DouyinCreateCommentReplyParamsSchema>;\nexport { DouyinCreateCommentReplyParamsSchema } from \"./schema\";\n\nexport interface DouyinCreateCommentReplyResponse {\n    status_code: number;\n    status_msg: string;\n    comment?: {\n        cid: string;\n        text: string;\n        create_time: number;\n    };\n}\n\nexport type DouyinCreateCommentReplyAction = CommonAction<\n    DouyinCreateCommentReplyParams,\n    DouyinCreateCommentReplyResponse\n>;\n\nexport const douyinCreateCommentReply: DouyinCreateCommentReplyAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/aweme/v1/creator/comment/reply/\",\n        method: \"POST\",\n        userAgent,\n    });\n\n    const queryParams: any = {\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n\n    const queryParamsBefore = new URLSearchParams(queryParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/aweme/v1/creator/comment/reply/?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    queryParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(queryParams).toString();\n\n    const body = {\n        comment_Id: params.commentId,\n        text: params.text,\n        item_id: params.itemId,\n    };\n    console.log(\"抖音添加评论回复参数:\", body);\n\n    const res = await http.api<DouyinCreateCommentReplyResponse>(\n        {\n            method: \"post\",\n            url: `https://creator.douyin.com/aweme/v1/creator/comment/reply/?${queryString}`,\n            data: body,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    console.log(\"抖音添加评论回复响应:\", res);\n\n    const isSuccess = res.status_code === 0;\n    const message = `抖音添加评论回复${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    return response(isSuccess ? 0 : 414, message, res);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetCollectionParamsSchema = ActionCommonParamsSchema.extend({\n    keyword: z.string().optional(),\n    count: z.number().optional(),\n});\n\nexport type DouyinGetCollectionParams = z.infer<typeof DouyinGetCollectionParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetCollectionParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\nexport type DouyinGetCollectionParams = z.infer<typeof DouyinGetCollectionParamsSchema>;\nexport { DouyinGetCollectionParamsSchema } from \"./schema\";\n\nexport interface Collection {\n    mix_id: string;\n    mix_name: string;\n    mix_desc: string;\n    cover_url: string;\n    video_count: number;\n}\n\nexport interface DouyinCollectionResponse {\n    status_code: number;\n    status_msg: string;\n    mix_list?: Collection[];\n    total?: number;\n    data?: {\n        mix_list?: Collection[];\n        total?: number;\n    };\n}\n\nexport type DouyinGetCollectionAction = CommonAction<\n    DouyinGetCollectionParams,\n    {\n        collections: Collection[];\n        total: number;\n    }\n>;\n\nexport const douyinGetCollection: DouyinGetCollectionAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/web/api/mix/list/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const collectionParams = {\n        status: \"0,2\",\n        count: \"50\",\n        cursor: \"0\",\n        source: \"collection_create\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n    const queryParamsBefore = new URLSearchParams(collectionParams).toString();\n    const aBogus = getABogus(`https://creator.douyin.com/web/api/mix/list/?${queryParamsBefore}`, {}, userAgent);\n    collectionParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(collectionParams).toString();\n    const res = await http.api<DouyinCollectionResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/web/api/mix/list/?${queryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取合集${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data: { collections: Collection[]; total: number } = isSuccess\n        ? { collections: res?.mix_list || [], total: res?.mix_list?.length || 0 }\n        : { collections: [], total: 0 };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetCommentListParamsSchema = ActionCommonParamsSchema.extend({\n    cursor: z.number().optional(),\n    count: z.number().optional(),\n    itemId: z.string(),\n});\n\nexport type DouyinGetCommentListParams = z.infer<typeof DouyinGetCommentListParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetCommentListParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\nexport type DouyinGetCommentListParams = z.infer<typeof DouyinGetCommentListParamsSchema>;\nexport { DouyinGetCommentListParamsSchema } from \"./schema\";\n\nexport interface CommentUser {\n    uid: string;\n    nickname: string;\n    avatar_thumb?: {\n        url_list: string[];\n    };\n}\n\nexport interface CommentItem {\n    cid: string;\n    text: string;\n    create_time: number;\n    digg_count: number;\n    reply_comment_total: number;\n    user: CommentUser;\n    reply_to_reply_id?: string;\n}\n\nexport interface DouyinCommentListResponse {\n    status_code: number;\n    status_msg: string;\n    comment_info_list?: CommentItem[];\n    has_more?: boolean;\n    cursor?: number;\n    total_count?: number;\n    has_vcd_filter?: number;\n}\n\nexport type DouyinGetCommentListAction = CommonAction<DouyinGetCommentListParams, DouyinCommentListResponse>;\n\nexport const douyinGetCommentList: DouyinGetCommentListAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    // Generate CSRF token\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/aweme/v1/creator/comment/list/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const commentListParams: any = {\n        count: params.count?.toString() || \"10\",\n        cursor: params.cursor?.toString() || \"0\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        sort: \"TIME\",\n        item_id: params.itemId || \"\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n\n    const queryParamsBefore = new URLSearchParams(commentListParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/aweme/v1/creator/comment/list/?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    commentListParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(commentListParams).toString();\n    console.log(\"抖音获取评论列表参数:\", queryString);\n\n    const res = await http.api<DouyinCommentListResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/aweme/v1/creator/comment/list/?${queryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    console.log(\"抖音获取评论列表响应:\", res);\n\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取评论列表${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    return response(isSuccess ? 0 : 414, message, res);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetCommentReplyListParamsSchema = ActionCommonParamsSchema.extend({\n    commentId: z.string(),\n    cursor: z.number().optional(),\n    count: z.number().optional(),\n});\n\nexport type DouyinGetCommentReplyListParams = z.infer<typeof DouyinGetCommentReplyListParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetCommentReplyListParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\nexport type DouyinGetCommentReplyListParams = z.infer<typeof DouyinGetCommentReplyListParamsSchema>;\nexport { DouyinGetCommentReplyListParamsSchema } from \"./schema\";\n\nexport interface ReplyUser {\n    uid: string;\n    nickname: string;\n    avatar_thumb?: {\n        url_list: string[];\n    };\n}\n\nexport interface ReplyItem {\n    cid: string;\n    text: string;\n    create_time: number;\n    digg_count: number;\n    user: ReplyUser;\n    reply_to_userid?: string;\n    reply_to_username?: string;\n}\n\nexport interface DouyinCommentReplyListResponse {\n    status_code: number;\n    status_msg: string;\n    reply_comment_list?: ReplyItem[];\n    has_more?: boolean;\n    cursor?: number;\n    total_count?: number;\n}\n\nexport type DouyinGetCommentReplyListAction = CommonAction<\n    DouyinGetCommentReplyListParams,\n    DouyinCommentReplyListResponse\n>;\n\nexport const douyinGetCommentReplyList: DouyinGetCommentReplyListAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    // Generate CSRF token\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/aweme/v1/creator/comment/reply/list/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const replyListParams: any = {\n        count: params.count?.toString() || \"10\",\n        cursor: params.cursor?.toString() || \"0\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        comment_id: params.commentId,\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n\n    const queryParamsBefore = new URLSearchParams(replyListParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/aweme/v1/creator/comment/reply/list/?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    replyListParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(replyListParams).toString();\n    console.log(\"抖音获取评论回复列表参数:\", queryString);\n\n    const res = await http.api<DouyinCommentReplyListResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/aweme/v1/creator/comment/reply/list/?${queryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    console.log(\"抖音获取评论回复列表响应:\", res);\n\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取评论回复列表${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    return response(isSuccess ? 0 : 414, message, res);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetHotParamsSchema = ActionCommonParamsSchema.extend({\n    query: z.string().optional(),\n    count: z.number().optional(),\n});\n\nexport type DouyinGetHotParams = z.infer<typeof DouyinGetHotParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetHotParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\nexport type DouyinGetHotParams = z.infer<typeof DouyinGetHotParamsSchema>;\nexport { DouyinGetHotParamsSchema } from \"./schema\";\n\nexport interface Hot {\n    sentence_id: string;\n    group_id: string;\n    word: string;\n    hot_value: number;\n    word_cover: {\n        url_list: string[];\n    };\n    video_count: number;\n    word_type: number;\n}\n\nexport interface DouyinHotResponse {\n    status_code: number;\n    status_msg: string;\n    sentences?: Hot[];\n    all_sentences?: Hot[];\n    extra?: {\n        logid: string;\n        now: number;\n    };\n}\n\nexport type DouyinGetHotAction = CommonAction<\n    DouyinGetHotParams,\n    {\n        hot: Hot[];\n        total: number;\n    }\n>;\n\nexport const douyinGetHot: DouyinGetHotAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/aweme/v1/hotspot/recommend/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const hotParams: {\n        query?: string;\n        count?: string;\n        read_aid: string;\n        aid: string;\n        cookie_enabled: string;\n        screen_width: string;\n        screen_height: string;\n        browser_language: string;\n        browser_platform: string;\n        browser_name: string;\n        browser_version: string;\n        browser_online: string;\n        timezone_name: string;\n        support_h265: string;\n        msToken: string;\n        a_bogus: string;\n    } = {\n        query: params.query || \"\",\n        count: params.count?.toString() || \"20\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n    const queryParamsBefore = new URLSearchParams(hotParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/aweme/v1/hotspot/${params.query ? \"search\" : \"recommend\"}/?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    hotParams.a_bogus = aBogus;\n    if (!params.query) {\n        delete hotParams.query;\n        delete hotParams.count;\n    }\n    const queryString = new URLSearchParams(hotParams).toString();\n    console.log(\"抖音获取热点参数:\", queryString);\n    const url = `https://creator.douyin.com/aweme/v1/hotspot/${params.query ? \"search\" : \"recommend\"}/?${queryString}`;\n    console.log(\"抖音获取热点URL:\", url);\n    const res = await http.api<DouyinHotResponse>(\n        {\n            method: \"get\",\n            url,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    // console.log(\"抖音获取热点响应:\", res?.sentences);\n\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取热点${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data: { hot: Hot[]; total: number } = isSuccess\n        ? {\n              hot: res?.sentences || res?.all_sentences || [],\n              total: (res?.sentences || res?.all_sentences)?.length || 0,\n          }\n        : { hot: [], total: 0 };\n    console.log(\"抖音获取热点数据:\", data);\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetLocationParamsSchema = ActionCommonParamsSchema.extend({\n    keyword: z.string().optional(),\n    count: z.number().optional(),\n});\n\nexport type DouyinGetLocationParams = z.infer<typeof DouyinGetLocationParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetLocationParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\nexport type DouyinGetLocationParams = z.infer<typeof DouyinGetLocationParamsSchema>;\nexport { DouyinGetLocationParamsSchema } from \"./schema\";\n\nexport interface Location {\n    poi_id: string;\n    poi_name: string;\n    poi_address: string;\n    longitude: number;\n    latitude: number;\n    distance: number;\n    city_name: string;\n    district_name: string;\n}\n\nexport interface DouyinLocationResponse {\n    status_code: number;\n    status_msg: string;\n    poi_list?: Location[];\n    total?: number;\n    data?: {\n        poi_list?: Location[];\n        total?: number;\n    };\n}\n\nexport type DouyinGetLocationAction = CommonAction<\n    DouyinGetLocationParams,\n    {\n        locations: Location[];\n        total: number;\n    }\n>;\n\nexport const douyinGetLocation: DouyinGetLocationAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it: { name: string; value: string }) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/aweme/v1/life/video_api/search/poi/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const keyword = params.keyword || \"\";\n    const locationParams = {\n        count: \"1\",\n        from_webapp: \"1\",\n        get_current_loc: \"1\",\n        is_image_album_style: \"1\",\n        search_type: \"0\",\n        poi_anchor_tab: \"2\",\n        page: \"1\",\n        keyword: keyword,\n        poi_mode: \"{}\",\n        load_interest_city_type: \"0\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n    const queryParamsBefore = new URLSearchParams(locationParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/aweme/v1/life/video_api/search/poi/?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    locationParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(locationParams).toString();\n    // console.log(\"抖音获取位置参数:\", queryString);\n    const res = await http.api<DouyinLocationResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/aweme/v1/life/video_api/search/poi/?${queryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    console.log(\"抖音获取位置响应:\", res);\n\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取位置${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    let locations: Location[] = [];\n    if (isSuccess && res?.poi_list) {\n        if (Array.isArray(res.poi_list) && res.poi_list.length > 0) {\n            if (Array.isArray(res.poi_list[0])) {\n                locations = res.poi_list[0];\n            } else {\n                locations = res.poi_list;\n            }\n        }\n    }\n\n    const data: { locations: Location[]; total: number } = { locations, total: locations.length };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetMusicParamsSchema = ActionCommonParamsSchema.extend({\n    keyword: z.string().optional(),\n    count: z.number().optional(),\n});\n\nexport type DouyinGetMusicParams = z.infer<typeof DouyinGetMusicParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { decompress } from \"fzstd\";\nimport { z } from \"zod\";\nimport { AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetMusicParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\nexport type DouyinGetMusicParams = z.infer<typeof DouyinGetMusicParamsSchema>;\nexport { DouyinGetMusicParamsSchema } from \"./schema\";\n\nexport interface Music {\n    id: string;\n    title: string;\n    author: string;\n    duration: number;\n    url: string;\n    cover_url: string;\n}\n\nexport interface DouyinMusicResponse {\n    status_code: number;\n    status_msg: string;\n    music?: Music[];\n    total?: number;\n    data?: {\n        music_list?: Music[];\n        total?: number;\n    };\n}\nexport interface DouyinMusicAuthResponse {\n    status_code: number;\n    status_msg: string;\n    signature: string;\n}\nexport type DouyinGetMusicAction = CommonAction<\n    DouyinGetMusicParams,\n    {\n        music: Music[];\n        total: number;\n    }\n>;\n\nexport const douyinGetMusic: DouyinGetMusicAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/web/api/media/aweme/search/post/auth/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const keyword = params.keyword || \"\";\n    const musicParams: any = {\n        keyword: keyword || \"11\",\n        search_source: \"normal_search\",\n        count: params.count?.toString() || \"20\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cursor: \"0\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e: any) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n    const musicQueryBefore = new URLSearchParams(musicParams).toString();\n    const aBogus = getABogus(\n        `https://tsearch.amemv.com/openapi/aweme/v1/music/search/?${musicQueryBefore}`,\n        {},\n        userAgent,\n    );\n    musicParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(musicParams).toString();\n    console.log(\"抖音获取音乐参数:\", queryString);\n    //获取权限\n    const authorizationParams = {\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        a_bogus: \"\",\n    };\n    const authQueryBefore = new URLSearchParams(authorizationParams).toString();\n    authorizationParams.a_bogus = getABogus(\n        `https://creator.douyin.com/web/api/media/aweme/search/post/auth/?${authQueryBefore}`,\n        {},\n        userAgent,\n    );\n    const authorizationQueryString = new URLSearchParams(authorizationParams).toString();\n    const authorization = await http.api<DouyinMusicAuthResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/web/api/media/aweme/search/post/auth/?${authorizationQueryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    if (authorization.status_code !== 0) {\n        return response(414, authorization.status_msg, { music: [], total: 0 });\n    }\n    console.log(\"抖音获取音乐权限:\", authorization);\n\n    const musicRes = await http.api<ArrayBuffer>(\n        {\n            method: \"get\",\n            url: `https://tsearch.amemv.com/openapi/aweme/v1/music/search/?${queryString}`,\n            headers: {\n                Accept: \"application/json, text/plain, */*\",\n                \"Accept-Language\": \"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\",\n                \"cache-control\": \"no-cache\",\n                pragma: \"no-cache\",\n                priority: \"u=1, i\",\n                origin: \"https://creator.douyin.com\",\n                referer: \"https://creator.douyin.com/\",\n                \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n                \"sec-ch-ua-mobile\": \"?0\",\n                \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n                \"sec-fetch-dest\": \"empty\",\n                \"sec-fetch-mode\": \"cors\",\n                \"sec-fetch-site\": \"cross-site\",\n                \"user-agent\": userAgent,\n                \"agw-auth\": authorization?.signature || \"\",\n                \"openapi-omit-shark\": \"1\",\n            },\n            responseType: \"arraybuffer\",\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    // 解压 zstd\n    const decompressed = decompress(new Uint8Array(musicRes));\n    const res: DouyinMusicResponse = JSON.parse(Buffer.from(decompressed).toString(\"utf-8\"));\n    console.log(\"抖音获取音乐响应:\", JSON.stringify(res));\n\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取音乐${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data: { music: Music[]; total: number } = isSuccess\n        ? { music: res?.music || [], total: res?.music?.length || 0 }\n        : { music: [], total: 0 };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetMusicByCategoryParamsSchema = ActionCommonParamsSchema.extend({\n    category_id: z.string(),\n    type: z.string(),\n    count: z.number().optional(),\n});\n\nexport type DouyinGetMusicByCategoryParams = z.infer<typeof DouyinGetMusicByCategoryParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetMusicByCategoryParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\nexport type DouyinGetMusicByCategoryParams = z.infer<typeof DouyinGetMusicByCategoryParamsSchema>;\nexport { DouyinGetMusicByCategoryParamsSchema } from \"./schema\";\n\nexport interface Song {\n    cover_url: string;\n    duration: number;\n    music_author: string;\n    music_id: string;\n    music_name: string;\n    play_url: string;\n    user_count: number;\n}\n\nexport interface DouyinCollectionResponse {\n    status_code: number;\n    status_msg: string;\n    songs?: Song[];\n    data?: {\n        songs?: Song[];\n    };\n}\n\nexport type DouyinGetMusicByCategoryAction = CommonAction<\n    DouyinGetMusicByCategoryParams,\n    {\n        songs: Song[];\n    }\n>;\n\nexport const douyinGetMusicByCategory: DouyinGetMusicByCategoryAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/web/api/media/music/list/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const collectionParams = {\n        status: \"0,2\",\n        count: params.count?.toString() || \"20\",\n        cursor: \"0\",\n        source: \"collection_create\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        type: params.type || \"\",\n        category_id: params.category_id || \"\",\n        msToken: params.cookies.find((e: any) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n    const queryParamsBefore = new URLSearchParams(collectionParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/web/api/media/music/list/?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    collectionParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(collectionParams).toString();\n    const res = await http.api<DouyinCollectionResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/web/api/media/music/list/?${queryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取推荐音乐${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data: { songs: Song[] } = isSuccess ? { songs: res?.songs || [] } : { songs: [] };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\n// 定义参数 Schema（仅包含基础参数，无扩展参数）\nexport const DouyinGetMusicCategoryParamsSchema = ActionCommonParamsSchema.extend({});\n\n// 导出参数类型\nexport type DouyinGetMusicCategoryParams = z.infer<typeof DouyinGetMusicCategoryParamsSchema>;\n\nexport interface Category {\n    category_id: string;\n    category_name: string;\n    type: string;\n}\n\nexport interface DouyinMusicCategoryResponse {\n    status_code: number;\n    status_msg: string;\n    categories?: Category[];\n}\n\nexport type DouyinGetMusicCategoryAction = CommonAction<\n    DouyinGetMusicCategoryParams,\n    {\n        categorys: Category[];\n    }\n>;\n\nexport const douyinGetMusicCategory: DouyinGetMusicCategoryAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"bd-ticket-guard-web-version\": \"2\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/web/api/media/music/category\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const categoryParams = {\n        status: \"0,2\",\n        count: \"50\",\n        cursor: \"0\",\n        source: \"collection_create\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e: any) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n    const queryParamsBefore = new URLSearchParams(categoryParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/web/api/media/music/category?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    categoryParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(categoryParams).toString();\n    const res = await http.api<DouyinMusicCategoryResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/web/api/media/music/category?${queryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取音乐分类${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data: { categorys: Category[] } = isSuccess ? { categorys: res?.categories || [] } : { categorys: [] };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetTopicsParamsSchema = ActionCommonParamsSchema.extend({\n    keyword: z.string().optional(),\n    count: z.number().optional(),\n});\n\nexport type DouyinGetTopicsParams = z.infer<typeof DouyinGetTopicsParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetTopicsParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\nexport type DouyinGetTopicsParams = z.infer<typeof DouyinGetTopicsParamsSchema>;\nexport { DouyinGetTopicsParamsSchema } from \"./schema\";\n\nexport interface Topic {\n    group_id: string;\n    cid: string;\n    cha_name: string;\n    tag: number;\n    view_count: number;\n}\n\nexport interface DouyinTopicsResponse {\n    status_code: number;\n    status_msg: string;\n    sug_list?: Topic[];\n    total?: number;\n    data?: {\n        sug_list?: Topic[];\n        total?: number;\n    };\n}\n\nexport type DouyinGetTopicsAction = CommonAction<\n    DouyinGetTopicsParams,\n    {\n        topics: Topic[];\n        total: number;\n    }\n>;\n\nexport const douyinGetTopics: DouyinGetTopicsAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/aweme/v1/search/challengesug/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const keyword = params.keyword || \"热点\";\n    const topicParams = {\n        keyword: keyword,\n        source: \"challenge_create\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n    const queryParamsBefore = new URLSearchParams(topicParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/aweme/v1/search/challengesug/?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    topicParams.a_bogus = aBogus;\n    //生成query string\n    const queryString = new URLSearchParams(topicParams).toString();\n    console.log(\"抖音获取话题参数:\", queryString);\n    const res = await http.api<DouyinTopicsResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/aweme/v1/search/challengesug/?${queryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    console.log(\"抖音获取话题响应:\", res);\n\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取话题${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data: { topics: Topic[]; total: number } = isSuccess\n        ? { topics: res?.sug_list || [], total: res?.sug_list?.length || 0 }\n        : { topics: [], total: 0 };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\nimport type { ParsedVerifyDecision } from \"../../utils/douyin/verify-parser\";\nimport { Http } from \"../../utils/http\";\n\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateDtrait } = require(\"../../utils/douyin/douyinSafe/dtrait.js\");\n\nexport const DouyinGetVerifyQrCodeParamsSchema = ActionCommonParamsSchema.extend({\n    decision: z.record(z.string(), z.unknown()),\n    extraParam: z\n        .object({\n            browserInfo: z.object({\n                screen_width: z.string().optional(),\n                screen_height: z.string().optional(),\n                browser_language: z.string().optional(),\n                browser_platform: z.string().optional(),\n                browser_name: z.string().optional(),\n                \"sec-ch-ua-platform\": z.string().optional(),\n                \"sec-ch-ua\": z.string().optional(),\n                userAgent: z.string().optional(),\n            }),\n        })\n        .optional(),\n});\n\nexport type DouyinGetVerifyQrCodeParams = Omit<z.infer<typeof DouyinGetVerifyQrCodeParamsSchema>, \"decision\"> & {\n    decision: ParsedVerifyDecision;\n};\n\nexport interface QrCodeResult {\n    qrcode: string; // base64 编码的二维码图片\n    token: string; // 二维码 token，用于后续轮询扫码状态\n    expire_time: number; // 过期时间戳（秒）\n    qrcode_index_url: string; // 二维码跳转地址\n    app_name: string; // 应用名称\n    web_name: string; // 网页名称\n    captcha: string; // 人机验证\n    error_code: number; // 错误码\n    is_frontier: boolean; // 是否为前台验证\n}\n\nexport type DouyinGetVerifyQrCodeAction = CommonAction<DouyinGetVerifyQrCodeParams, QrCodeResult>;\n\nexport const douyinGetVerifyQrCode: DouyinGetVerifyQrCodeAction = async (task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    // 直接使用传入的 decision 对象\n    const decision = params.decision;\n    if (!decision) {\n        return response(414, \"无效的 decision，解析失败\", \"\" as any);\n    }\n\n    if (!decision.verify_ways?.includes(\"qr_code_verify\")) {\n        return response(\n            414,\n            `当前验证方式不支持二维码，支持的方式: ${decision.verify_ways?.join(\", \") || \"无\"}`,\n            \"\" as any,\n        );\n    }\n\n    try {\n        task.logger.info(\"开始获取抖音扫码验证二维码...\");\n\n        // biz_trace_id 优先从 cookie 中获取，取不到则降级用 log_id 末8位\n        const bizTraceIdFromCookie = params.cookies.find((e: any) => e.name === \"biz_trace_id\")?.value || \"\";\n        const logId = decision.event_params?.log_id || \"\";\n        const bizTraceId = bizTraceIdFromCookie || logId.slice(-8).toLowerCase() || \"00000000\";\n\n        const msToken = params.cookies.find((e: any) => e.name === \"msToken\")?.value || \"\";\n        const passportCsrfToken = params.cookies.find((e: any) => e.name === \"passport_csrf_token\")?.value || \"\";\n\n        const headers = {\n            cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n            origin: \"https://creator.douyin.com\",\n            referer:\n                \"https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new\",\n            Accept: \"application/json, text/plain, */*\",\n            \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n            \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n            \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n            \"sec-ch-ua-mobile\": \"?0\",\n            \"user-agent\": userAgent,\n            \"sec-fetch-site\": \"same-origin\",\n            \"sec-fetch-mode\": \"cors\",\n            \"sec-fetch-dest\": \"empty\",\n            \"accept-language\": \"zh-CN,zh;q=0.9\",\n            priority: \"u=1, i\",\n        };\n\n        // 构建 POST body\n        const qrCodeBody: Record<string, string> = {\n            encrypt_uid: decision.encrypt_uid || \"\",\n            verify_ticket: \"\",\n            copywriting_key: decision.common_params?.copywriting_key || \"creator\",\n            new_verify_flow: decision.common_params?.new_verify_flow || \"\",\n            aid: \"2906\",\n            verify_type: \"\",\n            next: \"https://www.douyin.com/\",\n            need_record: \"1\",\n            scene: \"secondary_verify\",\n            verify_scene: decision.event_params?.verify_scene || \"creator\",\n            verify_reason: decision.event_params?.verify_reason || \"gateway_web_authlv_check\",\n            std_verify_way: \"qr_code_verify\",\n            source: \"app\",\n            new_authn_sdk_version: \"1.0.0.404-web\",\n        };\n        const qrCodeBodyStr = new URLSearchParams(qrCodeBody).toString();\n\n        // 构建 URL 查询参数（先不含 a_bogus）\n        const qrCodeQueryParams: Record<string, string> = {\n            passport_jssdk_version: \"5.1.2\",\n            passport_jssdk_type: \"lite\",\n            is_from_ttaccountsdk: \"1\",\n            aid: \"2906\",\n            language: \"zh\",\n            account_app_language: \"zh-CN\",\n            new_authn_sdk_version: \"1.0.0.404-web\",\n            is_vcd: \"1\",\n            biz_trace_id: bizTraceId,\n            msToken,\n            a_bogus: \"\",\n        };\n\n        // 生成 a_bogus\n        const qrCodeQueryStr = new URLSearchParams(qrCodeQueryParams).toString();\n        const qrCodeUrl = `https://creator.douyin.com/passport/web/get_qrcode/?${qrCodeQueryStr}`;\n        const aBogusQr = getABogus(qrCodeUrl, qrCodeBodyStr, userAgent);\n        qrCodeQueryParams.a_bogus = aBogusQr;\n        const finalQueryStr = new URLSearchParams(qrCodeQueryParams).toString();\n\n        // 生成 CSRF Token 与 sessionDtrait\n        const csrfTokenQr = generateCsrfTokenAdvanced({\n            cookies: params.cookies,\n            url: \"https://creator.douyin.com/passport/web/get_qrcode/\",\n            method: \"POST\",\n            userAgent,\n        });\n        const sessionDtraitQr = generateDtrait(\"/passport/web/get_qrcode/\");\n\n        const qrHttp = new Http({\n            headers: {\n                ...headers,\n                \"Content-Type\": \"application/x-www-form-urlencoded\",\n                \"x-secsdk-csrf-token\": csrfTokenQr,\n                \"x-tt-passport-csrf-token\": passportCsrfToken,\n                \"x-tt-passport-trace-id\": bizTraceId,\n                \"x-tt-passport-verify-portrait\": \"\",\n                \"x-tt-session-dtrait\": sessionDtraitQr || \"\",\n            },\n        });\n\n        // 拦截原始响应，记录真实返回内容\n        qrHttp.addResponseInterceptor((res) => {\n            task.logger.info(`[douyinGetVerifyQrCode] 原始响应 status=${res.status} data=${JSON.stringify(res.data)}`);\n            console.log(\"[douyinGetVerifyQrCode] 原始响应:\", JSON.stringify(res.data));\n            return undefined;\n        });\n\n        const qrCodeResponse = await qrHttp.api<{\n            data: {\n                qrcode: string;\n                token: string;\n                expire_time: number;\n                error_code: number;\n                qrcode_index_url: string;\n                app_name: string;\n                web_name: string;\n                captcha: string;\n                is_frontier: boolean;\n                [key: string]: any;\n            };\n            message: string;\n        }>(\n            {\n                method: \"post\",\n                url: `https://creator.douyin.com/passport/web/get_qrcode/?${finalQueryStr}`,\n                data: qrCodeBodyStr,\n            },\n            { timeout: 10 * 1000 },\n        );\n\n        const qrData = qrCodeResponse?.data;\n        task.logger.info(`获取二维码响应: error_code=${qrData?.error_code}, message=${qrCodeResponse?.message}`);\n\n        if (qrData?.error_code !== 0) {\n            return response(414, `获取二维码失败: error_code=${qrData?.error_code}`, \"\" as any);\n        }\n\n        return response(0, \"获取二维码成功\", {\n            qrcode: qrData.qrcode,\n            token: qrData.token,\n            expire_time: qrData.expire_time,\n            qrcode_index_url: qrData.qrcode_index_url,\n            app_name: qrData.app_name,\n            web_name: qrData.web_name,\n            captcha: qrData.captcha,\n            error_code: qrData.error_code,\n            is_frontier: qrData.is_frontier,\n        });\n    } catch (err) {\n        const msg = err instanceof Error ? err.message : String(err);\n        task.logger.warn(`[douyinGetVerifyQrCode] 获取二维码失败: ${msg}`);\n        return response(500, `获取二维码失败: ${msg}`, \"\" as any);\n    }\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetWorkListParamsSchema = ActionCommonParamsSchema.extend({\n    cursor: z.number().optional(),\n    count: z.number().optional(),\n});\n\nexport type DouyinGetWorkListParams = z.infer<typeof DouyinGetWorkListParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetWorkListParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\nexport type DouyinGetWorkListParams = z.infer<typeof DouyinGetWorkListParamsSchema>;\nexport { DouyinGetWorkListParamsSchema } from \"./schema\";\n\nexport interface WorkItem {\n    aweme_id: string;\n    desc: string;\n    create_time: number;\n    statistics: {\n        digg_count: number;\n        comment_count: number;\n        share_count: number;\n        play_count: number;\n    };\n    video?: {\n        cover: {\n            url_list: string[];\n        };\n        play_addr: {\n            url_list: string[];\n        };\n        duration: number;\n    };\n}\n\nexport interface DouyinWorkListResponse {\n    status_code: number;\n    status_msg: string;\n    aweme_list?: WorkItem[];\n    has_more?: boolean;\n    cursor?: number;\n}\n\nexport type DouyinGetWorkListAction = CommonAction<\n    DouyinGetWorkListParams,\n    {\n        works: WorkItem[];\n        has_more: boolean;\n        cursor: number;\n        total: number;\n    }\n>;\n\nexport const douyinGetWorkList: DouyinGetWorkListAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    // Generate CSRF token\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/aweme/v1/creator/item/list/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const workListParams: any = {\n        count: params.count?.toString() || \"10\",\n        cursor: params.cursor?.toString() || \"\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        msToken: params.cookies.find((e) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n\n    const queryParamsBefore = new URLSearchParams(workListParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/aweme/v1/creator/item/list/?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    workListParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(workListParams).toString();\n    console.log(\"抖音获取作品列表参数:\", queryString);\n\n    const res = await http.api<DouyinWorkListResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/aweme/v1/creator/item/list/?${queryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    console.log(\"抖音获取作品列表响应:\", res);\n\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取作品列表${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data: { works: WorkItem[]; has_more: boolean; cursor: number; total: number } = isSuccess\n        ? {\n              works: res?.aweme_list || [],\n              has_more: res?.has_more || false,\n              cursor: res?.cursor || 0,\n              total: res?.aweme_list?.length || 0,\n          }\n        : { works: [], has_more: false, cursor: 0, total: 0 };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type Page, success, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response } from \"playwright-core\";\nimport type { SteelAction } from \"./index\";\n\n/**\n * 抖音创作者平台登录 RPA\n *\n * 流程：\n * 1. 打开抖音创作者平台，注入反屏蔽脚本\n * 2. Bypass 页面事件屏蔽（通过 blank 页跳转清除脚本监听）\n * 3. 点击登录按钮，等待二维码弹窗\n * 4. 监听页面跳转到 /creator-micro/home 判断登录成功\n * 5. 从响应中提取 msToken 和用户信息\n * 6. 轮询获取 Security SDK localStorage 数据\n * 7. 获取浏览器指纹信息（screen、navigator等）\n * 8. 收集 cookie 并返回结果\n */\nexport const rpaAction: SteelAction = async (task, _params) => {\n    const reporter = task.reportService?.reportLoginStatus ?? (() => Promise.resolve());\n\n    let page: Page;\n    let isSelfClosing = false;\n    let handleBrowserDisconnected: (() => void) | undefined;\n    const cleanup = async () => {\n        if (handleBrowserDisconnected) {\n            task._steelBrowser?.off(\"disconnected\", handleBrowserDisconnected);\n        }\n        if (page && !page.isClosed()) {\n            await page.close().catch(() => {});\n        }\n    };\n\n    // ========== 第一步：启动浏览器并打开登录页 ==========\n    try {\n        page = await task.createPage({\n            url: \"https://creator.douyin.com/\",\n        });\n\n        if (!task._session?.id) throw new Error(\"Session ID 不存在\");\n\n        handleBrowserDisconnected = () => {\n            if (task.debug && isSelfClosing) {\n                task.logger.info(\"执行结束，关闭浏览器！\");\n            } else {\n                task.logger.info(\"浏览器被手动释放或意外关闭！\");\n            }\n        };\n        task._steelBrowser?.on(\"disconnected\", handleBrowserDisconnected);\n    } catch (e) {\n        task.logger.error(\"浏览器启动失败\", e);\n        return { code: 414, message: `浏览器启动失败: ${e}`, data: {} };\n    }\n\n    // 拦截不必要的资源，提升加载速度\n    await page.route(\"**/*.mp4\", (route) => route.abort());\n    await page.route(\"**/*.ttf\", (route) => route.abort());\n\n    // 自定义样式：隐藏扫码登录，调整输入框布局\n    const customStyle = `\n        #douyin_login_comp_flat_panel [class*=\"scan_qrcode_login\"] {\n            display: none !important;\n        }\n        [class*=\"douyin_login_landing_page\"] #douyin_login_comp_flat_panel [class*=\"flat_container\"] {\n            align-items: center !important;\n            justify-content: center !important;\n        }\n        [class*=\"douyin_login_landing_page\"] #douyin_login_comp_flat_panel [class*=\"flat_container\"] [class*=\"input_login\"] {\n            margin-left: 0 !important;\n        }\n        [class*=\"douyin_login_landing_page\"] #douyin_login_comp_flat_panel [class*=\"flat_container\"] [class*=\"input_login\"] [class*=\"tab_box\"] [class*=\"line\"] {\n            display: none !important;\n        }\n        [class*=\"douyin_login_landing_page\"] #douyin_login_comp_flat_panel [class*=\"flat_container\"] [class*=\"input_login\"] [class*=\"tab_box\"] span:nth-child(3) {\n            display: none !important;\n        }\n    `;\n    // 注入自定义样式：隐藏扫码登录，调整输入框布局\n    try {\n        await page.addStyleTag({ content: customStyle });\n    } catch (_e) {\n        task.logger.warn(\"样式注入失败\");\n    }\n    // 注入持久化脚本：禁用 requestAnimationFrame + 移除页面事件屏蔽\n    await page.addInitScript(() => {\n        // 抖音特定：移除事件屏蔽\n        if (window.location.hostname === \"creator.douyin.com\") {\n            window.requestAnimationFrame = () => 0;\n        }\n\n        /**\n         * 移除页面事件屏蔽层\n         * 抖音创作者平台会通过 pointer-events: none 阻止用户交互，\n         * 需要持续检测并恢复\n         */\n        const removeEventBlockers = () => {\n            try {\n                // 移除所有 pointer-events: none 的元素屏蔽\n                document.querySelectorAll('[style*=\"pointer-events: none\"]').forEach((el) => {\n                    (el as HTMLElement).style.pointerEvents = \"auto\";\n                });\n                document.body.style.pointerEvents = \"auto\";\n            } catch (_) {\n                // 静默失败\n            }\n        };\n\n        removeEventBlockers();\n\n        // 通过 MutationObserver 监听 DOM 变化，实时移除屏蔽\n        if (typeof MutationObserver !== \"undefined\") {\n            const observer = new MutationObserver(removeEventBlockers);\n            observer.observe(document.documentElement, {\n                childList: true,\n                subtree: true,\n                attributes: true,\n                attributeFilter: [\"style\"],\n            });\n        }\n\n        // 兜底：定时检测（MutationObserver 可能遗漏部分场景）\n        setInterval(removeEventBlockers, 3000);\n    });\n\n    // ========== 第二步：Bypass 页面事件屏蔽 ==========\n    task.logger.info(\"页面创建成功，开始 Bypass 页面事件屏蔽...\");\n    try {\n        // 等待关键 JS 加载完成（该脚本包含事件屏蔽逻辑）\n        await page.waitForResponse(\n            (response) => response.url().includes(\"/272.6591d0af.js\") && response.status() === 200,\n            { timeout: 15 * 1000 },\n        );\n        await page.waitForLoadState(\"networkidle\");\n        // 通过 blank 页跳转再返回，清除页面上已绑定的事件屏蔽监听器\n        await page.goto(\"about:blank\");\n        await page.goBack({ waitUntil: \"domcontentloaded\" });\n        task.logger.info(\"已返回登录页面，页面事件屏蔽 Bypass 完成\");\n    } catch (e) {\n        task.logger.warn(\"Bypass 超时，继续执行...\", { error: e });\n    }\n\n    // 等待页面稳定\n    await page.waitForTimeout(2000);\n\n    // ========== 通过 blank 页跳转再返回，再次注入自定义样式：隐藏扫码登录，调整输入框布局 ==========\n    try {\n        await page.addStyleTag({ content: customStyle });\n    } catch (_e) {\n        task.logger.warn(\"样式注入失败\");\n    }\n\n    // ========== 第三步：点击登录按钮 ==========\n    try {\n        const loginButtonSelector = \".douyin-creator-master-icon-default.douyin-creator-master-icon-user_circle\";\n\n        // 等待登录按钮可见\n        await page.waitForSelector(loginButtonSelector, { state: \"visible\", timeout: 10000 });\n\n        // 优先使用 JS 点击（绕过可能残留的事件屏蔽）\n        const clicked = await page.evaluate((selector) => {\n            const btn = document.querySelector(selector) as HTMLElement;\n            if (btn) {\n                btn.click();\n                return true;\n            }\n            return false;\n        }, loginButtonSelector);\n\n        if (clicked) {\n            task.logger.info(\"登录按钮点击成功（JS 方式）\");\n        } else {\n            // 回退到 Playwright force 点击\n            await page.locator(loginButtonSelector).click({ force: true, timeout: 5000 });\n            task.logger.info(\"登录按钮点击成功（Playwright force 方式）\");\n        }\n    } catch (e) {\n        task.logger.error(\"点击登录按钮失败\", e);\n        isSelfClosing = true;\n        await cleanup();\n        return { code: 500, message: \"无法点击登录按钮，页面可能已被屏蔽\", data: {} };\n    }\n\n    // 等待登录弹窗/二维码出现\n    // await page.waitForTimeout(3000);\n\n    // ========== 第四步：生成远程调试地址 ==========\n    const pageInfo = await task._client?.sessions.liveDetails(task._session.id);\n    const pageId = pageInfo?.pages[0].id ?? \"\";\n\n    const baseHost = task._session.websocketUrl?.replace(/^wss?:\\/\\//, \"\") ?? \"\";\n    const connectAddress = new URLSearchParams({ baseHost, pageId }).toString();\n\n    task.reportService?.settingSessionID?.(task._session?.id || \"\");\n\n    task.logger.info(`远程调试地址已生成，现在可以安全访问远程页面${connectAddress}`);\n    await reporter(0, \"浏览器启动成功，请使用抖音App扫码登录……\", { connectAddress });\n\n    // ========== 第五步：监听登录状态与用户信息 ==========\n    const userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            /** 清理所有监听器 */\n            const cleanup = (error?: Error) => {\n                if (finished) return;\n                finished = true;\n                page.off(\"framenavigated\", handlePageNavigation);\n                page.off(\"response\", handleResponse);\n                if (error) {\n                    reject(error);\n                } else {\n                    resolve();\n                }\n            };\n\n            /**\n             * 监听页面跳转到首页\n             * 所有登录方式（扫码/手机号等）最终都会跳转到 /creator-micro/home\n             */\n            const handlePageNavigation = async (frame: any) => {\n                try {\n                    if (frame === page.mainFrame() && frame.url().includes(\"/creator-micro/home\")) {\n                        task.logger.info(\"页面已跳转到首页，登录成功\");\n                        await reporter(0, \"登录成功，正在获取用户信息...\", { stage: \"scanQrcode\", connectAddress });\n                        cleanup();\n                    }\n                } catch (err) {\n                    task.logger.error(\"handlePageNavigation 异常:\", err);\n                }\n            };\n\n            /**\n             * 监听响应，提取 msToken 和用户信息\n             *\n             * - x-ms-token / x-tt-timestamp 响应头 → 构造 msToken cookie\n             * - /aweme/v1/creator/user/info → 用户昵称、头像\n             * - /aweme/v1/creator/pc/user/info/ → 用户 uniqueId\n             */\n            const handleResponse = async (resp: Response) => {\n                try {\n                    const url = resp.url();\n                    const headers = resp.headers();\n\n                    // 从响应头提取 msToken 并写入 cookie\n                    const xmst = headers[\"x-ms-token\"];\n                    const date = headers[\"x-tt-timestamp\"];\n\n                    if (xmst && date) {\n                        // msToken 有效期 7 天\n                        const mstExpirDate = new Date(Number(date) * 1000 + 7 * 24 * 60 * 60 * 1000);\n                        const msToken = {\n                            name: \"msToken\",\n                            value: xmst,\n                            domain: \".bytedance.com\",\n                            expires: mstExpirDate.getTime() / 1000,\n                            httpOnly: true,\n                            path: \"/\",\n                            sameSite: \"None\" as const,\n                            secure: true,\n                        };\n                        await page.context().addCookies([msToken]);\n                        task.debug &&\n                            task.logger.info(\"msToken 添加成功\", {\n                                token: xmst.substring(0, 20) + \"...\",\n                                timestamp: date,\n                            });\n                    }\n\n                    // 获取用户昵称和头像\n                    if (url.includes(\"aweme/v1/creator/user/info\")) {\n                        try {\n                            const jsonUserInfo: { user_profile: { avatar_url: string; nick_name: string } } =\n                                await resp.json();\n                            userInfo.name = jsonUserInfo.user_profile.nick_name ?? \"\";\n                            userInfo.avatar = jsonUserInfo.user_profile.avatar_url ?? \"\";\n                            task.debug && task.logger.info(\"用户信息获取成功\", userInfo);\n                        } catch (e) {\n                            task.logger.warn(\"无法解析用户信息:\", { url, error: e });\n                        }\n                    }\n                    // 获取用户 uniqueId\n                    else if (url.includes(\"/aweme/v1/creator/pc/user/info/\")) {\n                        try {\n                            const jsonUserInfo: { uid: string } = await resp.json();\n                            userInfo.uniqueId = jsonUserInfo.uid ?? \"\";\n                            task.debug && task.logger.info(\"用户 uniqueId 获取成功\", userInfo);\n                        } catch (e) {\n                            task.logger.warn(\"无法解析用户ID:\", { url, error: e });\n                        }\n                    }\n                } catch (err) {\n                    task.logger.error(\"handleResponse 异常:\", err);\n                }\n            };\n\n            // 注册监听器\n            page.on(\"framenavigated\", handlePageNavigation);\n            page.on(\"response\", handleResponse);\n        });\n    } catch (e) {\n        isSelfClosing = true;\n        const errorMessage = e instanceof Error ? e.message : String(e);\n        await cleanup();\n        return { code: 500, message: errorMessage, data: { stage: \"scanQrcode\", connectAddress } };\n    }\n\n    // ========== 第六步：提取 Security SDK localStorage 数据 ==========\n    let securityData: Record<string, string> = {};\n    const maxRetries = 15;\n\n    for (let retryCount = 0; retryCount < maxRetries; retryCount++) {\n        securityData = await page.evaluate(() => {\n            const data: Record<string, string> = {};\n            for (let i = 0; i < localStorage.length; i++) {\n                const key = localStorage.key(i);\n                if (key) {\n                    data[key] = localStorage.getItem(key) || \"\";\n                }\n            }\n            return data;\n        });\n\n        if (\n            securityData[\"security-sdk/s_sdk_pri_key\"] &&\n            securityData[\"security-sdk/s_sdk_pub_key\"] &&\n            securityData[\"security-sdk/s_sdk_sign_data_key/web_protect\"] &&\n            securityData[\"security-sdk/s_sdk_server_cert_key\"] &&\n            securityData[\"security-sdk/s_sdk_crypt_sdk\"]\n        ) {\n            task.logger.info(\"Security SDK 数据已获取\");\n            break;\n        }\n\n        task.logger.info(`等待 Security SDK 数据... (${retryCount + 1}/${maxRetries})`);\n        await page.waitForTimeout(1500);\n    }\n\n    // ========== 第七步：获取浏览器指纹信息 ==========\n    // 【新增】获取屏幕和导航器信息\n    const browserInfo = await page.evaluate(() => {\n        const userAgentData = (navigator as any).userAgentData;\n\n        return {\n            screen_width: window.screen.width.toString(),\n            screen_height: window.screen.height.toString(),\n            browser_language: navigator.language,\n            browser_platform: navigator.platform,\n            browser_name: navigator.appCodeName,\n            \"sec-ch-ua-platform\": userAgentData.platform,\n            \"sec-ch-ua\": userAgentData?.brands\n                ?.map((item: { brand: string; version: string }) => `\"${item.brand}\";v=\"${item.version}\"`)\n                .join(\", \"),\n            userAgent: navigator.userAgent,\n        };\n    });\n\n    task.logger.info(`浏览器指纹信息已获取: ${JSON.stringify(browserInfo)}`);\n\n    // ========== 第八步：收集 cookie 并返回结果 ==========\n    await page.waitForTimeout(3000);\n    const cookie = JSON.stringify(await task._steelBrowserContext?.cookies());\n    isSelfClosing = true;\n    await cleanup();\n\n    task.logger.info(\n        `登录流程完成，正在返回结果: ${JSON.stringify({ connectAddress, cookie, userInfo, securityData, browserInfo })}`,\n    );\n\n    return success(\n        {\n            connectAddress,\n            cookie,\n            userInfo,\n            extraParam: {\n                ...securityData,\n                browserInfo,\n            },\n        },\n        \"登录成功！\",\n    );\n};\n","import { TaskState, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response } from \"playwright-core\";\nimport { ExecutionState } from \"../../types\";\nimport { ProxyAgent } from \"../../utils/proxy\";\nimport type { SteelAction } from \"./index\";\n\nconst scanRetryMaxCount = 60; // 二维码扫描重试次数\nconst waitQrcodeResultMaxTime = scanRetryMaxCount * 2 * 1000; // 最长等待时间\n\nexport const rpaServer: SteelAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    let executionState: ExecutionState | undefined;\n\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n    const page = await task.createPage({\n        url: \"https://creator.douyin.com/\",\n        proxyUrl,\n        userAgent: params.userAgent,\n        ...(params.viewport ? { viewport: params.viewport } : {}),\n    });\n\n    await page.route(\"**/*.mp4\", (route) => route.abort()); // 拦截部分不必要的请求，提升加载速度\n    await page.route(\"**/*.png\", (route) => route.abort()); // 拦截部分不必要的请求，提升加载速度\n    await page.route(\"**/*.ttf\", (route) => route.abort()); // 拦截部分不必要的请求，提升加载速度\n    await page.addInitScript(() => {\n        window.requestAnimationFrame = () => 0;\n    });\n\n    task.logger.info(\"页面创建成功，开始Bypass页面事件屏蔽...\");\n    await page.waitForResponse((response) => response.url().includes(\"/272.6591d0af.js\") && response.status() === 200, {\n        timeout: 15 * 1000,\n    });\n    await page.waitForLoadState(\"networkidle\");\n    await page.goto(\"about:blank\");\n    await page.goBack({ waitUntil: \"domcontentloaded\" }); // 用于去除页面的无法进行操作的脚本监听，不可删除\n    task.logger.info(\"已返回登录页面，页面事件屏蔽Bypass完成...\");\n\n    await page.locator(\".douyin-creator-master-icon-default.douyin-creator-master-icon-user_circle\").click();\n\n    task.steelBrowser?.on(\"disconnected\", async () => {\n        const browserContext = task.steelBrowserContext;\n        const browser = task.steelBrowser;\n        executionState = ExecutionState.BROWSER_CLOSED;\n        await page.close();\n\n        if (browserContext) {\n            await browserContext.close();\n        }\n        if (browser) {\n            await browser.close();\n        }\n    });\n\n    // 拦截不必要的资源请求\n    // await page.route(/\\/welcome.*\\.(png|mp4)$/i, (route) => route.abort());\n\n    await updateTaskState?.({\n        state: TaskState.WAIT_SCAN,\n        connectAddress: await task.steelConnector?.getLive(task.sessionId || \"\"),\n        sessionId: task.sessionId,\n    });\n\n    const userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            const timer = setTimeout(async () => {\n                cleanup();\n                executionState = ExecutionState.TIMEOUT;\n                await updateTaskState?.({\n                    state: TaskState.TIMEOUT,\n                    error: \"等待扫码登录超时\",\n                });\n                resolve();\n            }, waitQrcodeResultMaxTime);\n\n            const cleanup = () => {\n                if (finished) return; // 防止多次调用\n                finished = true;\n                clearTimeout(timer);\n                page.off(\"response\", handleWebCommon);\n                page.off(\"response\", handleCheckQR);\n                task.steelBrowser?.off(\"disconnected\", handleBrowserClosed);\n            };\n\n            const handleBrowserClosed = () => {\n                cleanup();\n                executionState = ExecutionState.BROWSER_CLOSED;\n                resolve();\n            };\n\n            const handleWebCommon = async (resp: Response) => {\n                try {\n                    const url = resp.url();\n\n                    // 登录成功后的第一个请求\n                    if (url.includes(\"/web/common\")) {\n                        cleanup();\n\n                        const headers = resp.headers();\n                        const xmst = headers[\"x-ms-token\"];\n                        const date = headers[\"x-tt-timestamp\"];\n\n                        if (xmst && date) {\n                            const mstExpirDate = new Date(Number(date) * 1000 + 7 * 24 * 60 * 60 * 1000);\n                            const msToken = {\n                                name: \"msToken\",\n                                value: xmst,\n                                domain: \".bytedance.com\",\n                                expires: mstExpirDate.getTime() / 1000,\n                                httpOnly: true,\n                                path: \"/\",\n                                sameSite: \"None\" as const,\n                                secure: true,\n                            };\n                            await page.context().addCookies([msToken]);\n                            await updateTaskState?.({\n                                state: TaskState.CONFIRMED,\n                            });\n                        }\n\n                        executionState = ExecutionState.SUCCESS;\n                        resolve();\n                    } else if (url.includes(\"aweme/v1/creator/user/info\")) {\n                        // 优先获取用户信息\n                        try {\n                            const jsonUserInfo: { user_profile: { avatar_url: string; nick_name: string } } =\n                                await resp.json();\n\n                            userInfo.name = jsonUserInfo.user_profile.nick_name ?? \"\";\n                            userInfo.avatar = jsonUserInfo.user_profile.avatar_url ?? \"\";\n                        } catch (e) {\n                            task.logger.warn(\"无法解析用户信息:\", { url, error: e });\n                        }\n                    } else if (url.includes(\"/aweme/v1/creator/pc/user/info/\")) {\n                        // 获取用户信息\n                        try {\n                            const jsonUserInfo: { uid: string } = await resp.json();\n                            userInfo.uniqueId = jsonUserInfo.uid ?? \"\";\n                            task.debug && task.logger.info(\"用户uniqueId 获取成功\", userInfo);\n                        } catch (e) {\n                            task.logger.warn(\"无法解析用户信息:\", { url, error: e });\n                        }\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 0=用户未扫码，5=用户扫码已超时，2=用户已扫码未确认，3=扫码成功\n            const handleCheckQR = async (response: Response) => {\n                try {\n                    const url = response.url();\n                    if (!url.includes(\"/check_qrconnect\")) return;\n\n                    let jsonResponse: {\n                        data: {\n                            status?: \"new\" | \"scanned\" | \"expired\" | \"confirmed\";\n                            error_code: number;\n                            user_data?: {\n                                user_id_str: string;\n                            };\n                        };\n                    };\n                    try {\n                        jsonResponse = await response.json();\n                    } catch (e) {\n                        // ⚠️ 这里一定要直接 return，不要再 warn 成 error\n                        task.logger.warn(\"Response body unavailable (likely navigation happened)\", {\n                            url,\n                        });\n                        return;\n                    }\n\n                    const status = jsonResponse?.data?.status;\n\n                    if (status === \"scanned\") {\n                        await updateTaskState?.({\n                            state: TaskState.SCANNED,\n                        });\n                        page.on(\"response\", handleWebCommon);\n                    }\n\n                    if (status === \"confirmed\") {\n                        userInfo.uniqueId = jsonResponse.data?.user_data?.user_id_str || \"\";\n\n                        page.off(\"response\", handleCheckQR);\n                        // page.on(\"response\", handleWebCommon);\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 在页面加载之前就注册监听，防止丢失请求\n            task.steelBrowser?.on(\"disconnected\", handleBrowserClosed);\n            page.on(\"response\", handleCheckQR);\n        });\n    } finally {\n        await page.close();\n    }\n\n    if (executionState === undefined) return { code: 500, message: \"未知错误\", data: {} };\n\n    switch (executionState) {\n        case ExecutionState.BROWSER_CLOSED: {\n            const msg = \"浏览器已关闭，任务中断!\";\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: \"浏览器已关闭\",\n            });\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.TIMEOUT: {\n            const msg = \"等待用户扫码登录超时!\";\n            await updateTaskState?.({\n                state: TaskState.TIMEOUT,\n                error: msg,\n            });\n            task.logger.info(msg);\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.SUCCESS: {\n            // 提取 localStorage 中的 security-sdk 数据\n            // let securityData: Record<string, string> = {};\n            // try {\n            //     securityData = await page.evaluate(() => {\n            //         return {\n            //             \"security-sdk/s_sdk_pri_key\": localStorage.getItem(\"security-sdk/s_sdk_pri_key\") || \"\",\n            //             \"security-sdk/s_sdk_pub_key\": localStorage.getItem(\"security-sdk/s_sdk_pub_key\") || \"\",\n            //             \"security-sdk/s_sdk_sign_data_key\":\n            //                 localStorage.getItem(\"security-sdk/s_sdk_sign_data_key/web_protect\") || \"\",\n            //         };\n            //     });\n\n            //     task.logger.info(\"Security SDK 数据提取成功:\", {\n            //         \"security-sdk/s_sdk_pri_key\": !!securityData[\"security-sdk/s_sdk_pri_key\"],\n            //         \"security-sdk/s_sdk_pub_key\": !!securityData[\"security-sdk/s_sdk_pub_key\"],\n            //         \"security-sdk/s_sdk_sign_data_key\": !!securityData[\"security-sdk/s_sdk_sign_data_key\"],\n            //     });\n            // } catch (error) {\n            //     task.logger.warn(\"提取 Security SDK 数据失败:\", {\n            //         error: error instanceof Error ? error.message : String(error),\n            //     });\n            // }\n            let securityData: Record<string, string> = {};\n            let retryCount = 0;\n            const maxRetries = 10;\n\n            while (retryCount < maxRetries) {\n                securityData = await page.evaluate(() => {\n                    const data: Record<string, string> = {};\n                    for (let i = 0; i < localStorage.length; i++) {\n                        const key = localStorage.key(i);\n                        if (key) {\n                            data[key] = localStorage.getItem(key) || \"\";\n                        }\n                    }\n                    return data;\n                });\n\n                // 检查是否有数据\n                if (\n                    securityData[\"security-sdk/s_sdk_pri_key\"] &&\n                    securityData[\"security-sdk/s_sdk_pub_key\"] &&\n                    securityData[\"security-sdk/s_sdk_sign_data_key/web_protect\"] &&\n                    securityData[\"security-sdk/s_sdk_server_cert_key\"] &&\n                    securityData[\"security-sdk/s_sdk_crypt_sdk\"]\n                ) {\n                    task.logger.info(\"Security SDK 数据已获取\");\n                    break;\n                }\n\n                retryCount++;\n                task.logger.info(`等待 Security SDK 数据... (${retryCount}/${maxRetries})`);\n                await page.waitForTimeout(1000);\n            }\n\n            await updateTaskState?.({\n                state: TaskState.SUCCESS,\n                result: {\n                    cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),\n                    extraParam: securityData,\n                    userInfo: userInfo,\n                },\n            });\n            return {\n                code: 0,\n                message: \"成功\",\n                data: {\n                    cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),\n                    extraParam: securityData,\n                    userInfo,\n                },\n            };\n        }\n        default:\n            // 处理 RUNNING 和其他可能的状态\n            return { code: 500, message: \"任务执行中断\", data: {} };\n    }\n};\n","import { CommonAction, success } from \"@iflyrpa/share\";\nimport { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaServer } from \"./rpa-server\";\n\nexport type DouyinLoginParams = ActiomCommonParams;\n\nexport type SteelAction = CommonAction<ActiomCommonParams, Record<string, unknown>>;\n\nexport const douyinLogin: SteelAction = async (task, params) => {\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return success({}, \"暂不支持mockApi\");\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaServer(task, params);\n    }\n\n    return executeAction(rpaServer)(task, params);\n};\n","import fs from \"node:fs\";\nimport http from \"node:http\";\nimport https from \"node:https\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl } from \"@iflyrpa/share\";\nimport sizeOf from \"image-size\";\nimport { Http } from \"../http\";\n\nconst { getABogus } = require(\"./douyinSafe/a_bogus.js\");\n\nconst { generateAuthorization, randomS, canonicalQueryString, calculateFileCrc32 } = require(\"./douyinSign.js\");\n\n// ==================== 类型定义 ====================\ninterface UploadAuth {\n    status_code: number;\n    auth: string;\n    ak: string;\n    status_msg?: string;\n}\n\ninterface ImageXResponse {\n    ResponseMetadata: {\n        RequestId: string;\n        Action?: string;\n        Version?: string;\n        Service?: string;\n        Region?: string;\n        Error?: {\n            Code: string;\n            Message: string;\n        };\n    };\n    Result?: {\n        RequestId: string;\n        SessionKey: string;\n        UploadAddress: {\n            UploadHosts: string[];\n            StoreInfos: Array<{\n                StoreUri: string;\n                Auth: string;\n                SessionKey?: string;\n            }>;\n            UploadHeader?: Array<{\n                Key: string;\n                Value: string;\n            }>;\n        };\n    };\n}\n\ninterface UploadResult {\n    uri: string;\n    width: number;\n    height: number;\n    size: number;\n    md5: string;\n}\n\ninterface ImageInfo {\n    localPath: string;\n    width: number;\n    height: number;\n    size: number;\n    md5: string;\n}\n\n// ==================== 抖音图片上传管理器 ====================\nexport class DouyinImageUploader {\n    private proxyHttp: Http;\n    private headers: Record<string, string>;\n    private queryParams: Record<string, string>;\n    private tmpCachePath: string;\n\n    private authCache: UploadAuth | null = null;\n    private authExpireTime: number = 0;\n    private readonly AUTH_REFRESH_BUFFER = 5 * 60 * 1000;\n\n    private readonly CONCURRENT_LIMIT = 10;\n    private readonly UPLOAD_DELAY = 1000;\n    private readonly UPLOAD_TIMEOUT = 300000;\n    private readonly TOS_UPLOAD_TIMEOUT = 600000;\n\n    private uploadAgent: https.Agent | http.Agent;\n\n    constructor(\n        proxyHttp: Http,\n        headers: Record<string, string>,\n        queryParams: Record<string, string>,\n        tmpCachePath: string,\n        isHttps: boolean = true,\n    ) {\n        this.proxyHttp = proxyHttp;\n        this.headers = headers;\n        this.queryParams = queryParams;\n        this.tmpCachePath = tmpCachePath;\n\n        const Agent = isHttps ? https.Agent : http.Agent;\n\n        const agentOptions: https.AgentOptions = {\n            keepAlive: true,\n            maxSockets: this.CONCURRENT_LIMIT,\n            maxFreeSockets: 2,\n            timeout: this.TOS_UPLOAD_TIMEOUT,\n        };\n\n        (agentOptions as any).freeSocketTimeout = 30000;\n\n        this.uploadAgent = new Agent(agentOptions);\n    }\n\n    /**\n     * 获取有效的上传凭证（带缓存）\n     */\n    private async getValidAuth(): Promise<UploadAuth> {\n        const now = Date.now();\n\n        if (this.authCache && this.authExpireTime > now + this.AUTH_REFRESH_BUFFER) {\n            console.log(\"使用缓存的STS凭证\");\n            return this.authCache;\n        }\n\n        console.log(\"申请新的STS凭证...\");\n\n        const queryString = new URLSearchParams(this.queryParams).toString();\n        const aBogus = getABogus(\n            `https://creator.douyin.com/web/api/media/upload/auth/v5/?${queryString}`,\n            {},\n            this.headers[\"user-agent\"],\n        );\n        this.queryParams.a_bogus = aBogus;\n        const newQueryString = new URLSearchParams(this.queryParams).toString();\n        const uploadAuth = await this.withRetry(\n            () =>\n                this.proxyHttp.api<UploadAuth>(\n                    {\n                        method: \"get\",\n                        url: `https://creator.douyin.com/web/api/media/upload/auth/v5/?${newQueryString}`,\n                        headers: {\n                            ...this.headers,\n                            \"Content-Type\": \"application/json\",\n                        },\n                    },\n                    { timeout: 5 * 60 * 1000, retries: 0 },\n                ),\n            3,\n            1000,\n            \"获取上传凭证\",\n        );\n\n        if (!uploadAuth.auth) {\n            throw new Error(uploadAuth.status_msg || \"获取上传权限失败\");\n        }\n\n        try {\n            const authData = JSON.parse(uploadAuth.auth);\n            const expireTime = new Date(authData.ExpiredTime).getTime();\n            this.authExpireTime = expireTime;\n            this.authCache = uploadAuth;\n\n            console.log(`凭证有效期至: ${new Date(expireTime).toLocaleString()}`);\n            return uploadAuth;\n        } catch (error) {\n            this.authExpireTime = now + 60 * 60 * 1000;\n            this.authCache = uploadAuth;\n            return uploadAuth;\n        }\n    }\n\n    /**\n     * 获取单张图片的上传地址\n     */\n    private async getUploadAddress(auth: UploadAuth): Promise<{\n        host: string;\n        storeUri: string;\n        auth: string;\n    }> {\n        const authData = JSON.parse(auth.auth);\n        const times = new Date();\n        const amzDate = times\n            .toISOString()\n            .replace(/\\.\\d{3}Z$/, \"Z\")\n            .replace(/[:-]/g, \"\");\n\n        const region = \"cn-north-1\";\n        const service = \"imagex\";\n\n        const addrParamsConfig = {\n            accessKeyId: authData.AccessKeyID,\n            secretAccessKey: authData.SecretAccessKey,\n            sessionToken: authData.SessionToken,\n            region,\n            service,\n            method: \"GET\",\n            pathname: \"/\",\n            params: {\n                Action: \"ApplyImageUpload\",\n                ServiceId: \"jm8ajry58r\",\n                Version: \"2018-08-01\",\n                app_id: \"2906\",\n                s: randomS(),\n                user_id: \"\",\n            },\n        };\n\n        const result = generateAuthorization(addrParamsConfig).authorization;\n        const addrParamsQueryString = canonicalQueryString(addrParamsConfig.params);\n\n        const response = await this.withRetry(\n            () =>\n                this.proxyHttp.api<ImageXResponse>(\n                    {\n                        method: \"get\",\n                        url: `https://imagex.bytedanceapi.com/?${addrParamsQueryString}`,\n                        headers: {\n                            ...this.headers,\n                            Authorization: result,\n                            \"Content-Type\": \"application/json\",\n                            \"X-amz-date\": amzDate,\n                            \"X-amz-security-token\": authData.SessionToken,\n                        },\n                    },\n                    { timeout: this.UPLOAD_TIMEOUT },\n                ),\n            3,\n            1000,\n            \"获取上传地址\",\n        );\n\n        if (!response) {\n            throw new Error(\"获取上传地址失败: 响应为空\");\n        }\n\n        if (response.ResponseMetadata?.Error) {\n            throw new Error(\n                `ImageX错误: ${response.ResponseMetadata.Error.Code} - ${response.ResponseMetadata.Error.Message}`,\n            );\n        }\n\n        if (!response.Result) {\n            console.error(\"ImageX 响应结构:\", JSON.stringify(response, null, 2));\n            throw new Error(\"获取上传地址失败: Result 为空\");\n        }\n\n        if (!response.Result.UploadAddress) {\n            console.error(\"ImageX Result 结构:\", JSON.stringify(response.Result, null, 2));\n            throw new Error(\"获取上传地址失败: UploadAddress 为空\");\n        }\n\n        const uploadAddress = response.Result.UploadAddress;\n\n        if (!uploadAddress.StoreInfos || uploadAddress.StoreInfos.length === 0) {\n            throw new Error(\"获取上传地址失败: StoreInfos 为空\");\n        }\n\n        if (!uploadAddress.UploadHosts || uploadAddress.UploadHosts.length === 0) {\n            throw new Error(\"获取上传地址失败: UploadHosts 为空\");\n        }\n\n        const storeInfo = uploadAddress.StoreInfos[0];\n\n        console.log(\"获取上传地址成功:\", {\n            host: uploadAddress.UploadHosts[0],\n            storeUri: storeInfo.StoreUri,\n        });\n\n        return {\n            host: uploadAddress.UploadHosts[0],\n            storeUri: storeInfo.StoreUri,\n            auth: storeInfo.Auth,\n        };\n    }\n\n    /**\n     * 上传单张图片到TOS\n     */\n    private async uploadToTOS(\n        imageInfo: ImageInfo,\n        uploadAddr: { host: string; storeUri: string; auth: string },\n    ): Promise<UploadResult> {\n        const fileBuffer = fs.readFileSync(imageInfo.localPath);\n\n        const uploadUrl = `https://${uploadAddr.host}/upload/v1/${uploadAddr.storeUri}`.trim();\n\n        console.log(`上传至: ${uploadUrl.substring(0, 80)}...`);\n        console.log(`文件大小: ${imageInfo.size} bytes, CRC32: ${imageInfo.md5}`);\n\n        try {\n            const uploadImgResp = await this.withRetry(\n                () =>\n                    this.proxyHttp.api(\n                        {\n                            method: \"post\",\n                            url: uploadUrl,\n                            headers: {\n                                ...this.headers,\n                                Authorization: uploadAddr.auth,\n                                \"Content-crc32\": imageInfo.md5,\n                                \"Content-Type\": \"application/octet-stream\",\n                                \"Content-Length\": imageInfo.size.toString(),\n                            },\n                            data: fileBuffer,\n                            httpAgent: this.uploadAgent,\n                            httpsAgent: this.uploadAgent,\n                            maxBodyLength: Infinity,\n                            maxContentLength: Infinity,\n                        },\n                        { timeout: this.TOS_UPLOAD_TIMEOUT },\n                    ),\n                5,\n                3000,\n                \"TOS上传\",\n            );\n\n            console.log(\"TOS 上传响应:\", uploadImgResp);\n\n            const isSuccess =\n                uploadImgResp &&\n                (uploadImgResp.code === 2000 ||\n                    uploadImgResp.status === 200 ||\n                    uploadImgResp.statusCode === 200 ||\n                    (uploadImgResp.data && uploadImgResp.data.crc32) ||\n                    uploadImgResp.message === \"Success\");\n            if (!isSuccess) {\n                throw new Error(`上传失败: ${JSON.stringify(uploadImgResp)}`);\n            }\n\n            console.log(`上传成功: ${uploadAddr.storeUri}`);\n\n            return {\n                uri: uploadAddr.storeUri,\n                width: imageInfo.width,\n                height: imageInfo.height,\n                size: imageInfo.size,\n                md5: imageInfo.md5,\n            };\n        } catch (error: any) {\n            console.error(\"TOS 上传错误:\", error.message);\n            if (error.response) {\n                console.error(\"错误响应:\", error.response.data);\n            }\n            throw error;\n        }\n    }\n\n    /**\n     * 处理单张图片（下载+上传）- 失败直接跳过\n     */\n    private async processSingleImage(imageUrl: string, index: number, total: number): Promise<UploadResult | null> {\n        console.log(`\\n[${index + 1}/${total}] 处理图片: ${imageUrl.substring(0, 50)}...`);\n\n        const fileName = getFilenameFromUrl(imageUrl);\n        const localPath = path.resolve(this.tmpCachePath, fileName);\n\n        try {\n            await downloadImage(imageUrl, localPath);\n            console.log(`图片下载完成: ${localPath}`);\n\n            const imageInfo = await this.getImageInfo(localPath);\n            console.log(`图片信息: ${imageInfo.width}x${imageInfo.height}, ${imageInfo.size} bytes`);\n\n            const auth = await this.getValidAuth();\n            const uploadAddr = await this.getUploadAddress(auth);\n            const result = await this.uploadToTOS(imageInfo, uploadAddr);\n\n            this.safeDeleteFile(localPath);\n            return result;\n        } catch (error: any) {\n            console.error(`[${index + 1}/${total}] 图片上传失败，已跳过: ${imageUrl}`, error?.message ?? error);\n            this.safeDeleteFile(localPath);\n            return null;\n        }\n    }\n\n    /**\n     * 获取图片信息\n     */\n    private async getImageInfo(localPath: string): Promise<ImageInfo> {\n        const stats = fs.statSync(localPath);\n\n        let width = 1080;\n        let height = 1920;\n\n        try {\n            const buffer = fs.readFileSync(localPath);\n            const dimensions = sizeOf(buffer);\n            width = dimensions.width;\n            height = dimensions.height;\n        } catch (e) {\n            // 使用默认值\n        }\n\n        return {\n            localPath,\n            width,\n            height,\n            size: stats.size,\n            md5: calculateFileCrc32(localPath),\n        };\n    }\n\n    /**\n     * 批量上传图片（带并发控制）\n     */\n    async uploadImages(imageUrls: string[]): Promise<UploadResult[]> {\n        const results: UploadResult[] = [];\n        const total = imageUrls.length;\n\n        console.log(`\\n========== 开始批量上传 ${total} 张图片 ==========\\n`);\n\n        for (let i = 0; i < total; i += this.CONCURRENT_LIMIT) {\n            const batch = imageUrls.slice(i, i + this.CONCURRENT_LIMIT);\n            const batchIndex = Math.floor(i / this.CONCURRENT_LIMIT) + 1;\n            const totalBatches = Math.ceil(total / this.CONCURRENT_LIMIT);\n\n            console.log(`\\n--- 批次 ${batchIndex}/${totalBatches} (${batch?.length} 张) ---`);\n\n            const batchPromises = batch.map((url, idx) => {\n                const globalIndex = i + idx;\n                return this.processSingleImage(url, globalIndex, total);\n            });\n\n            const batchResults = await Promise.all(batchPromises);\n            // 过滤掉失败的图片（null 值）\n            const successResults = batchResults.filter((r): r is UploadResult => r !== null);\n            results.push(...successResults);\n\n            const failedCount = batchResults.length - successResults.length;\n            if (failedCount > 0) {\n                console.warn(`批次 ${batchIndex} 中有 ${failedCount} 张图片上传失败`);\n            }\n\n            if (i + this.CONCURRENT_LIMIT < total) {\n                console.log(`等待 ${this.UPLOAD_DELAY}ms...`);\n                await this.delay(this.UPLOAD_DELAY);\n            }\n        }\n\n        console.log(`\\n========== 全部 ${total} 张图片上传完成 ==========\\n`);\n        return results;\n    }\n\n    /**\n     * 上传封面图（单张）\n     */\n    async uploadCover(coverUrl: string): Promise<UploadResult | null> {\n        console.log(\"\\n========== 上传封面 ==========\\n\");\n        const result = await this.processSingleImage(coverUrl, 0, 1);\n\n        if (!result) {\n            console.error(`封面图上传失败，已跳过: ${coverUrl}`);\n        }\n\n        return result;\n    }\n\n    /**\n     * 安全删除文件\n     */\n    private safeDeleteFile(filePath: string): void {\n        try {\n            if (fs.existsSync(filePath)) {\n                fs.unlinkSync(filePath);\n                console.log(`清理临时文件: ${path.basename(filePath)}`);\n            }\n        } catch (e) {\n            // 忽略删除错误\n        }\n    }\n\n    private delay(ms: number): Promise<void> {\n        return new Promise((resolve) => setTimeout(resolve, ms));\n    }\n\n    private async withRetry<T>(fn: () => Promise<T>, retries = 3, delayMs = 1000, label = \"\"): Promise<T> {\n        for (let attempt = 1; attempt <= retries; attempt++) {\n            try {\n                return await fn();\n            } catch (err: any) {\n                if (attempt === retries) throw err;\n                const waitTime = delayMs * attempt; // 递增延迟\n                console.warn(`${label} 第 ${attempt} 次失败，${waitTime}ms 后重试:`, err?.message ?? err);\n                await this.delay(waitTime);\n            }\n        }\n        throw new Error(\"unreachable\");\n    }\n\n    /**\n     * 销毁连接池\n     */\n    destroy(): void {\n        this.uploadAgent.destroy();\n    }\n}\n","/**\n * 抖音 x-tt-verify-passport-decision 解析器\n * 修复版 - 正确处理 UTF-8 编码的中文字符\n */\n\nexport interface VerifyPassportDecision {\n    account_flow: \"verify\" | string;\n    biz_params: unknown;\n    common_params: CommonParams;\n    encrypt_uid: string;\n    event_params: EventParams;\n    extra_params: ExtraParams;\n    pack_verify_way: boolean;\n    schema: string;\n    url: string;\n    user_info: UserInfo;\n    verify_way_name_list: string;\n}\n\nexport interface CommonParams {\n    copywriting: string;\n    copywriting_key: string;\n    gateway_abtest_group: string;\n    new_verify_flow: string;\n}\n\nexport interface CopywritingContent {\n    title: string;\n    desc: string;\n}\n\nexport interface EventParams {\n    log_id: string;\n    verify_reason: string;\n    verify_scene: string;\n}\n\nexport interface ExtraParams {\n    log_id: string;\n}\n\nexport interface UserInfo {\n    avatar_url: string;\n    nickname: string;\n    mobile_info: string | null;\n}\n\nexport interface ParsedCommonParams extends CommonParams {\n    parsed_copywriting: CopywritingContent;\n}\n\nexport interface ParsedVerifyDecision {\n    account_flow: \"verify\" | string;\n    biz_params: unknown;\n    common_params: ParsedCommonParams;\n    encrypt_uid: string;\n    event_params: EventParams;\n    extra_params: ExtraParams;\n    pack_verify_way: boolean;\n    schema: string;\n    url: string;\n    user_info: UserInfo;\n    verify_way_name_list: string;\n    verify_ways: VerifyWay[];\n    verify_title: string;\n    verify_desc: string;\n}\n\nexport type VerifyWay =\n    | \"mobile_sms_verify\"\n    | \"mobile_up_sms_verify\"\n    | \"face_verify\"\n    | \"idcard_verify\"\n    | \"password_verify\"\n    | string;\n\n/**\n * 将乱码字符串（如 \"èº«ä»½\"）恢复为正确的中文字符（如 \"身份\"）\n */\nfunction utf8Encoding(str: string): string {\n    try {\n        // 方法1: 使用 TextEncoder/TextDecoder 进行编码转换\n        // 将错误解析的字符重新编码为字节，然后用 UTF-8 解码\n        const bytes = new Uint8Array(str.split(\"\").map((c) => c.charCodeAt(0) & 0xff));\n        const decoder = new TextDecoder(\"utf-8\");\n        const result = decoder.decode(bytes);\n\n        // 检查解码是否成功（如果包含中文常用字范围）\n        if (/[\\u4e00-\\u9fa5]/.test(result)) {\n            return result;\n        }\n        return str;\n    } catch {\n        return str;\n    }\n}\n\n/**\n * 解码 Unicode 转义序列 (\\uXXXX)\n */\nfunction decodeUnicodeEscapes(str: string): string {\n    return str.replace(/\\\\u([0-9a-fA-F]{4})/g, (_, hex) => {\n        return String.fromCharCode(parseInt(hex, 16));\n    });\n}\n\n/**\n * 解析 x-tt-verify-passport-decision 响应头\n * @param headerValue - 响应头的原始值\n * @returns 解析后的结构化数据\n */\nexport function parseVerifyPassportDecision(headerValue: string | null | undefined): ParsedVerifyDecision | null {\n    if (!headerValue) {\n        return null;\n    }\n\n    try {\n        // 1. 去除外层引号包裹\n        let cleanValue = headerValue.trim();\n        if (\n            (cleanValue.startsWith('\"') && cleanValue.endsWith('\"')) ||\n            (cleanValue.startsWith(\"'\") && cleanValue.endsWith(\"'\"))\n        ) {\n            cleanValue = cleanValue.slice(1, -1);\n        }\n\n        // 2. 解码 Unicode 转义字符 (\\u0026 -> &, \\u4e2d -> 中)\n        let decoded = decodeUnicodeEscapes(cleanValue);\n\n        // 3. 尝试修复 UTF-8 编码问题\n        decoded = utf8Encoding(decoded);\n\n        // 4. 解析 JSON\n        const parsed: VerifyPassportDecision = JSON.parse(decoded);\n\n        // 5. 修复各个字段的编码问题\n        const fixedParsed: VerifyPassportDecision = {\n            ...parsed,\n            common_params: {\n                ...parsed.common_params,\n                copywriting: utf8Encoding(parsed.common_params.copywriting),\n            },\n            user_info: {\n                ...parsed.user_info,\n                nickname: utf8Encoding(parsed.user_info.nickname),\n            },\n        };\n\n        // 6. 丰富解析后的数据\n        return enrichParsedData(fixedParsed);\n    } catch (error) {\n        console.error(\"[parseVerifyPassportDecision] 解析失败:\", error);\n        return null;\n    }\n}\n\n/**\n * 丰富解析后的数据\n */\nfunction enrichParsedData(data: VerifyPassportDecision): ParsedVerifyDecision {\n    // 解析 copywriting JSON（处理双重转义）\n    let parsedCopywriting: CopywritingContent = { title: \"\", desc: \"\" };\n    try {\n        const copywritingStr = data.common_params.copywriting;\n\n        // 先解码 JSON 转义，再解析\n        const cleanedCopywriting = copywritingStr\n            .replace(/\\\\\"/g, '\"') // \\\" -> \"\n            .replace(/\\\\n/g, \"\\n\") // \\n -> 换行\n            .replace(/\\\\t/g, \"\\t\") // \\t -> 制表\n            .replace(/\\\\\\\\/g, \"\\\\\"); // \\\\ ->\n        const parsed = JSON.parse(cleanedCopywriting);\n        parsedCopywriting = {\n            title: utf8Encoding(parsed.title || \"\"),\n            desc: utf8Encoding(parsed.desc || \"\"),\n        };\n    } catch (e) {\n        console.warn(\"[parseVerifyPassportDecision] copywriting 解析失败:\", e);\n        // 备用：直接提取\n        try {\n            const titleMatch = data.common_params.copywriting.match(/\"title\":\"([^\"]+)\"/);\n            const descMatch = data.common_params.copywriting.match(/\"desc\":\"([^\"]+)\"/);\n            parsedCopywriting = {\n                title: utf8Encoding(titleMatch?.[1] || \"\"),\n                desc: utf8Encoding(descMatch?.[1] || \"\"),\n            };\n        } catch {\n            // 忽略\n        }\n    }\n\n    // 解析验证方式列表\n    const verifyWays: VerifyWay[] = data.verify_way_name_list\n        ? data.verify_way_name_list.split(\",\").map((s) => s.trim() as VerifyWay)\n        : [];\n\n    return {\n        ...data,\n        common_params: {\n            ...data.common_params,\n            parsed_copywriting: parsedCopywriting,\n        },\n        verify_ways: verifyWays,\n        verify_title: parsedCopywriting.title,\n        verify_desc: parsedCopywriting.desc,\n    };\n}\n\n// ==================== 辅助函数 ====================\n\nexport function needsVerification(decision: ParsedVerifyDecision | null): boolean {\n    return decision?.account_flow === \"verify\";\n}\n\nexport function getVerifyUrl(decision: ParsedVerifyDecision | null): string | null {\n    return decision?.url || null;\n}\n\nexport function getAppSchema(decision: ParsedVerifyDecision | null): string | null {\n    return decision?.schema || null;\n}\n\nexport function getUserNickname(decision: ParsedVerifyDecision | null): string | null {\n    return decision?.user_info?.nickname || null;\n}\n\nexport function getVerifyPrompt(decision: ParsedVerifyDecision | null): CopywritingContent {\n    return {\n        title: decision?.verify_title || \"\",\n        desc: decision?.verify_desc || \"\",\n    };\n}\n\nexport function supportsVerifyWay(decision: ParsedVerifyDecision | null, way: VerifyWay): boolean {\n    return decision?.verify_ways?.includes(way) || false;\n}\n\nexport function getRecommendedVerifyWay(decision: ParsedVerifyDecision | null): VerifyWay | null {\n    if (!decision?.verify_ways?.length) return null;\n\n    const priority: VerifyWay[] = [\n        \"mobile_sms_verify\",\n        \"mobile_up_sms_verify\",\n        \"face_verify\",\n        \"idcard_verify\",\n        \"password_verify\",\n    ];\n\n    for (const way of priority) {\n        if (decision.verify_ways.includes(way)) {\n            return way;\n        }\n    }\n\n    return decision.verify_ways[0];\n}\n","import { response, TaskState } from \"@iflyrpa/share\";\nimport { AxiosProxyParams, MockPublish } from \"../../types\";\nimport { stringifyError } from \"../../utils\";\nimport { DouyinImageUploader } from \"../../utils/douyin/imageUploader\";\nimport type { ParsedVerifyDecision } from \"../../utils/douyin/verify-parser\";\nimport { needsVerification, parseVerifyPassportDecision } from \"../../utils/douyin/verify-parser\";\nimport { Http } from \"../../utils/http\";\nimport { reportLogger } from \"../../utils/reportLogger\";\nimport type { PublishAction } from \"./index\";\n\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateDtrait } = require(\"../../utils/douyin/douyinSafe/dtrait.js\");\nconst { getBdV2 } = require(\"../../utils/douyin/douyinSafe/bd_para.js\");\n\ninterface CommonResponse<T = unknown> {\n    status_code: any;\n    data: any;\n    status_msg: string;\n    item_id: string;\n}\n\n//生成creation_id 8位字母与数字混淆随机数+当前时间戳\nfunction generateRandomString(length: number) {\n    const characters = \"abcdefghijklmnopqrstuvwxyz0123456789\";\n    let randomString = \"\";\n    for (let i = 0; i < length; i++) {\n        const randomIndex = Math.floor(Math.random() * characters.length);\n        randomString += characters.charAt(randomIndex);\n    }\n    return randomString;\n}\n\n/**\n * 安全地序列化对象，移除循环引用\n */\nfunction safeSerialize<T>(obj: T): T {\n    if (!obj || typeof obj !== \"object\") return obj;\n    try {\n        // 使用 JSON.parse(JSON.stringify()) 移除循环引用\n        return JSON.parse(JSON.stringify(obj));\n    } catch (error) {\n        // 如果序列化失败，返回空对象\n        return {} as T;\n    }\n}\n// @ts-expect-error\nexport const mockAction: PublishAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n\n    if (\n        !params.extraParam ||\n        !params.extraParam[\"security-sdk/s_sdk_sign_data_key/web_protect\"] ||\n        !params.extraParam[\"security-sdk/s_sdk_server_cert_key\"] ||\n        !params.extraParam[\"security-sdk/s_sdk_crypt_sdk\"]\n    ) {\n        return response(414, \"extraParam 参数缺失或不完整\", \"\");\n    }\n\n    let currentStep = \"初始化\"; // 追踪当前执行步骤\n\n    try {\n        currentStep = \"验证账号信息\";\n        const userAgent =\n            params.userAgent ||\n            \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n        // return response(500, \"获取上传地址失败\", \"\");\n        const sessionidCookie = params.cookies.find((it: any) => it.name === \"msToken\")?.value;\n        if (!sessionidCookie) {\n            return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: \"\" };\n        }\n\n        currentStep = \"准备请求参数\";\n        const headers = {\n            cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n            origin: \"https://creator.douyin.com\",\n            referer:\n                \"https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new\",\n            Accept: \"application/json, text/plain, */*\",\n            \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n            \"Content-Type\": \"application/json\",\n            pragma: \"no-cache\",\n            \"cache-control\": \"no-cache\",\n            \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n            \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n            \"bd-ticket-guard-web-version\": \"2\",\n            \"sec-ch-ua-mobile\": \"?0\",\n            \"user-agent\": userAgent,\n            \"sec-fetch-site\": \"same-origin\",\n            \"sec-fetch-mode\": \"cors\",\n            \"sec-fetch-dest\": \"empty\",\n            \"accept-language\": \"zh-CN,zh;q=0.9\",\n            priority: \"u=1, i\",\n        };\n        const publishParams = {\n            read_aid: \"2906\",\n            aid: \"1128\",\n            cookie_enabled: \"true\",\n            screen_width: params.extraParam?.browserInfo.screen_width || \"1920\",\n            screen_height: params.extraParam?.browserInfo.screen_height || \"1080\",\n            browser_language: params.extraParam?.browserInfo.browser_language || \"zh-CN\",\n            browser_platform: params.extraParam?.browserInfo.browser_platform || \"Win32\",\n            browser_name: params.extraParam?.browserInfo.browser_name || \"Mozilla\",\n            browser_version: userAgent,\n            browser_online: \"true\",\n            timezone_name: \"Asia/Shanghai\",\n            support_h265: \"1\",\n            msToken: params.cookies.find((e: any) => e.name === \"msToken\")?.value || \"\",\n            a_bogus: \"\",\n        };\n        task.logger.info(`[douyinPublish] publishParams ${JSON.stringify(publishParams)}`);\n\n        const publishData: Record<string, unknown> = {\n            item: {\n                common: {\n                    text: params.content,\n                    text_extra: params.textExtra,\n                    activity: \"[]\",\n                    challenges: params.challengeIds || \"[]\", // 热点的cid\n                    hashtag_source: \"\",\n                    mentions: \"[]\", // @好友的uid列表\n                    music_id: params.musicId || \"\", // 取id_str TODO\n                    music_end_time: (params.musicDuration || 0) * 1000, //duration*1000 TODO\n                    hot_sentence: params.hotSentence || \"\", // 热点\n                    visibility_type: Number(params.visibleRange) || 0, // 谁可以看 0-公开 1-仅自己可见 2-好友可见\n                    download: params.allowSave ? 1 : 0, // 保存权限 1-允许保存 0-不允许\n                    timing: params.isImmediatelyPublish ? -1 : params.scheduledPublish, // 发布时间 -1立即发布 时间戳-定时发布\n                    media_type: Number(params.publishType) || 2,\n                    images: [],\n                    creation_id: \"\",\n                },\n                cover: {\n                    poster: \"\",\n                },\n                mix: params.mix\n                    ? {\n                          mix_id: params.mix.mix_id,\n                          mix_order: params.mix.mix_order || 0,\n                      }\n                    : {}, // 合集TODO\n                anchor: {},\n                declare: {\n                    user_declare_info: \"{}\",\n                },\n            },\n        };\n\n        const args: AxiosProxyParams = [{ headers }, task.logger, params.proxyLoc, params.accountId, \"douyin\"];\n        const http = new Http({ headers });\n        const proxyHttp = new Http(...args);\n\n        // 已上传的图片列表\n        const uploadedImgList = params.uploadedImgList ? JSON.parse(params.uploadedImgList) : [];\n        if (uploadedImgList.length > 0) {\n            (publishData.item as any).common.images = uploadedImgList;\n        } else {\n            // 创建图片上传管理器\n            const tmpCachePath = task.getTmpPath();\n            const uploader = new DouyinImageUploader(proxyHttp, headers, publishParams, tmpCachePath);\n            //上传封面\n            if (params.coverImage) {\n                const cover = await uploader.uploadCover(params.coverImage);\n                if (cover) {\n                    (publishData.item as any).common.images.push({\n                        uri: cover.uri,\n                        width: cover.width,\n                        height: cover.height,\n                    });\n                    (publishData.item as any).cover = {\n                        poster: cover.uri,\n                    };\n                }\n            }\n\n            //上传内容\n            if (params.banners && params.banners.length > 0) {\n                const banners = params.banners.filter((i) => i !== params.coverImage);\n                const uploadResults = await uploader.uploadImages(banners);\n                (publishData.item as any).common.images = (publishData.item as any).common.images.concat(\n                    uploadResults.map((result) => ({\n                        uri: result.uri,\n                        width: result.width,\n                        height: result.height,\n                    })),\n                );\n            }\n        }\n\n        (publishData.item as any).common.creation_id = generateRandomString(8) + Date.now();\n\n        let decision: ParsedVerifyDecision | null = null;\n        // task.logger.info(`[douyinPublish] proxyHttp 代理信息: ${proxyHttp.proxyInfo} `);\n        proxyHttp.addResponseInterceptor<CommonResponse>((response) => {\n            task.logger.info(`[douyinPublish] 拦截器收到响应response.headers: ${JSON.stringify(response.headers)} `);\n            task.logger.info(`[douyinPublish] 拦截器收到响应response.data: ${JSON.stringify(response.data)} `);\n\n            // 解析验证决策头\n            decision = parseVerifyPassportDecision(response.headers[\"x-tt-verify-passport-decision\"]);\n            if (needsVerification(decision)) {\n                task.logger.info(`[douyinPublish] 检测到需要验证: ${JSON.stringify(decision)}`);\n                return;\n            }\n\n            if (!response || !response.data) {\n                return;\n            }\n\n            const responseData = response.data;\n            // 检查响应中的 status_code 字段\n            if (response && responseData?.status_code && responseData.status_code !== 0) {\n                // 将抖音的服务器错误（status_code: 4）映射为 500，触发重试\n                const errorCode = responseData.status_code === 4 ? 500 : responseData.status_code;\n\n                if (responseData.status_code === 4) {\n                    task.logger.warn(\n                        `[douyinPublish] 抖音服务器错误 status_code: 4，映射为 500 触发重试。原始响应: ${JSON.stringify(responseData)}`,\n                    );\n                }\n\n                return {\n                    code: errorCode,\n                    message: responseData.status_msg || \"文章发布异常，请稍后重试。\",\n                    data: responseData,\n                };\n            }\n        });\n        task._timerRecord.PrePublish = Date.now();\n\n        if (MockPublish) {\n            const data = \"123456789\";\n            const message = `图文模拟发布成功 ${http.proxyInfo}`;\n\n            await updateTaskState?.({\n                state: TaskState.SUCCESS,\n                result: {\n                    response: data,\n                },\n            });\n            return response(0, message, data);\n        }\n\n        // 生成 bdTicketGuardClientData\n        let webProtectData: any;\n        try {\n            webProtectData = JSON.parse(\n                JSON.parse(params.extraParam[\"security-sdk/s_sdk_sign_data_key/web_protect\"] || \"{}\").data || \"{}\",\n            );\n\n            if (!webProtectData.ticket || !webProtectData.ts_sign || !webProtectData.client_cert) {\n                task.logger.error(`webProtectData 关键字段缺失: ${JSON.stringify(webProtectData)}`);\n                return response(414, \"安全参数 webProtectData 不完整，请重新获取后重试\", \"\");\n            }\n        } catch (error) {\n            task.logger.error(`解析 webProtectData 失败: ${error}`);\n            return response(414, \"安全参数 webProtectData 解析失败，请重新获取后重试\", \"\");\n        }\n\n        let ticket = webProtectData.ticket;\n        let ts_sign = webProtectData.ts_sign;\n\n        // 优先使用 cookie 中的最新 ticket/ts_sign：服务器在二次验证流程后会轮换它们，\n        // 并写入 bd_ticket_guard_server_data cookie。而 web_protect 里那份是绑定/登录时\n        // 抓取的，验证后会过期，继续用它签名会被服务器拒绝（403，bd-ticket-guard-result: 1002）。\n        const serverDataCookie = params.cookies.find((it: any) => it.name === \"bd_ticket_guard_server_data\")?.value;\n        if (serverDataCookie) {\n            try {\n                const decoded = JSON.parse(\n                    Buffer.from(decodeURIComponent(serverDataCookie), \"base64\").toString(\"utf8\"),\n                );\n                if (decoded.ticket && decoded.ts_sign) {\n                    if (decoded.ticket !== ticket) {\n                        task.logger.info(\"[douyinPublish] 使用 cookie 中的最新 ticket（web_protect 已过期）\");\n                    }\n                    ticket = decoded.ticket;\n                    ts_sign = decoded.ts_sign;\n                }\n            } catch (error) {\n                task.logger.info(`[douyinPublish] 解析 bd_ticket_guard_server_data 失败，回退到 web_protect: ${error}`);\n            }\n        }\n\n        let ec_privateKey: string;\n        try {\n            ec_privateKey = JSON.parse(\n                JSON.parse(params.extraParam[\"security-sdk/s_sdk_crypt_sdk\"] || \"{}\").data || \"{}\",\n            ).ec_privateKey;\n\n            if (!ec_privateKey) {\n                task.logger.error(\"[douyinPublish] ec_privateKey 为空\");\n                return response(414, \"安全参数 ec_privateKey 缺失，请重新获取后重试\", \"\");\n            }\n        } catch (error) {\n            task.logger.error(`[douyinPublish] 解析 ec_privateKey 失败: ${error}`);\n            return response(414, \"安全参数 ec_privateKey 解析失败，请重新获取后重试\", \"\");\n        }\n\n        let certificate: string;\n        try {\n            certificate = JSON.parse(params.extraParam[\"security-sdk/s_sdk_server_cert_key\"] || \"{}\").cert;\n\n            if (!certificate) {\n                task.logger.error(\"[douyinPublish] certificate 为空\");\n                return response(414, \"安全参数 certificate 缺失，请重新获取后重试\", \"\");\n            }\n        } catch (error) {\n            task.logger.error(`[douyinPublish] 解析 certificate 失败: ${error}`);\n            return response(414, \"安全参数 certificate 解析失败，请重新获取后重试\", \"\");\n        }\n\n        const ree_public_key = webProtectData.client_cert.replace(\"pub.\", \"\");\n\n        let bdTicketGuardClientData: any;\n        try {\n            bdTicketGuardClientData = getBdV2({\n                ticket,\n                ts_sign: ts_sign,\n                ec_privateKey: ec_privateKey,\n                certificate: certificate,\n                bd_ticket_guard_ree_public_key: ree_public_key,\n            });\n\n            if (!bdTicketGuardClientData || !bdTicketGuardClientData[\"headers_bd_ticket_guard_client_data\"]) {\n                task.logger.error(\n                    `[douyinPublish] bdTicketGuardClientData 生成失败或不完整: ${JSON.stringify(bdTicketGuardClientData)}`,\n                );\n                return response(414, \"安全参数 bdTicketGuardClientData 生成失败，请重新获取后重试\", \"\");\n            }\n        } catch (error) {\n            task.logger.error(`[douyinPublish] 生成 bdTicketGuardClientData 失败: ${error}`);\n            return response(414, \"安全参数 bdTicketGuardClientData 生成异常，请重新获取后重试\", \"\");\n        }\n\n        task.logger.info(\"[douyinPublish] bdTicketGuardClientData 生成成功\");\n\n        // 生成 aBogus\n        const publishQuery = { ...publishParams, a_bogus: \"\" };\n        const queryString = new URLSearchParams(publishQuery).toString();\n\n        let aBogus: string;\n        try {\n            aBogus = getABogus(\n                `https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`,\n                publishData,\n                userAgent,\n            );\n\n            if (!aBogus || aBogus.length < 10) {\n                task.logger.error(`[douyinPublish] a_bogus 生成异常，长度过短: ${aBogus}`);\n                return response(414, \"安全参数 a_bogus 生成失败，请重试\", \"\");\n            }\n        } catch (error) {\n            task.logger.error(`[douyinPublish] 生成 a_bogus 失败: ${error}`);\n            return response(414, \"安全参数 a_bogus 生成异常，请重试\", \"\");\n        }\n\n        publishQuery.a_bogus = aBogus;\n        const publishQueryParams = new URLSearchParams(publishQuery).toString();\n\n        // 生成 CSRF Token\n        let csrfToken: string;\n        try {\n            csrfToken = generateCsrfTokenAdvanced({\n                cookies: params.cookies,\n                url: \"https://creator.douyin.com/web/api/media/aweme/create_v2/\",\n                method: \"POST\",\n                userAgent,\n            });\n\n            if (!csrfToken || csrfToken.length < 10) {\n                task.logger.error(`[douyinPublish] csrfToken 生成异常，长度过短: ${csrfToken}`);\n                return response(414, \"安全参数 csrfToken 生成失败，请重试\", \"\");\n            }\n\n            task.logger.info(`[douyinPublish] csrfToken 生成成功: ${csrfToken.substring(0, 20)}...`);\n        } catch (error) {\n            task.logger.error(`[douyinPublish] 生成 csrfToken 失败: ${error}`);\n            return response(414, \"安全参数 csrfToken 生成异常，请重试\", \"\");\n        }\n\n        // 生成 sessionDtrait\n        let sessionDtrait: string;\n        try {\n            sessionDtrait = generateDtrait(\"/web/api/media/aweme/create_v2/\");\n            task.logger.info(`[douyinPublish] sessionDtrait 生成成功: ${sessionDtrait || \"(空)\"}`);\n        } catch (error) {\n            task.logger.error(`[douyinPublish] 生成 sessionDtrait 失败: ${error}`);\n            return response(414, \"安全参数 sessionDtrait 生成异常，请重试\", \"\");\n        }\n\n        // task.logger.info(\"[douyinPublish] 发布数据\", { data: JSON.stringify(publishData) });\n        task.logger.info(\n            `[douyinPublish] headers: ${JSON.stringify({\n                ...headers,\n                Referer:\n                    \"https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new\",\n                \"Content-Type\": \"application/json\",\n                Accept: \"application/json, text/plain, */*\",\n                \"bd-ticket-guard-client-data\": bdTicketGuardClientData[\"headers_bd_ticket_guard_client_data\"],\n                \"bd-ticket-guard-ree-public-key\": bdTicketGuardClientData[\"headers_bd_ticket_guard_ree_public_key\"],\n                \"bd-ticket-guard-version\": \"2\",\n                \"bd-ticket-guard-web-sign-type\": \"1\",\n                \"bd-ticket-guard-web-version\": \"2\",\n                \"x-secsdk-csrf-token\": csrfToken,\n                \"x-tt-session-dtrait\": sessionDtrait || \"\",\n            })}`,\n        );\n        task.logger.info(\n            `[douyinPublish] url: ${`https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`}`,\n        );\n\n        let publishResult: CommonResponse<{ aweme_id: string }>;\n        try {\n            publishResult = await proxyHttp.api<CommonResponse<{ aweme_id: string }>>(\n                {\n                    method: \"post\",\n                    url: `https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`,\n                    data: publishData,\n                    defaultErrorMsg: \"发布异常，请稍后重试。\",\n                    headers: {\n                        ...headers,\n                        Referer:\n                            \"https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new\",\n                        \"Content-Type\": \"application/json\",\n                        Accept: \"application/json, text/plain, */*\",\n                        \"bd-ticket-guard-client-data\": bdTicketGuardClientData[\"headers_bd_ticket_guard_client_data\"],\n                        \"bd-ticket-guard-ree-public-key\":\n                            bdTicketGuardClientData[\"headers_bd_ticket_guard_ree_public_key\"],\n                        \"bd-ticket-guard-version\": \"2\",\n                        \"bd-ticket-guard-web-sign-type\": \"1\",\n                        \"bd-ticket-guard-web-version\": \"2\",\n                        \"x-secsdk-csrf-token\": csrfToken,\n                        \"x-tt-session-dtrait\": sessionDtrait || \"\",\n                    },\n                },\n                { timeout: 60 * 1000, retries: 3, retryDelay: 2000 },\n            );\n        } catch (error) {\n            const handledError = Http.handleApiError(error);\n            // 代理连接超时(599) 与网络/服务端错误(500/502/503/504)：重试耗尽后直接返回代理错误信息，\n            // 不再 throw 走 executeAction 的 RPA 兜底。code 归一为 414，使 executeAction 视为终止结果。\n            const isProxyOrNetworkError = [599, 500, 502, 503, 504].includes(handledError.code);\n            if (isProxyOrNetworkError) {\n                // 区分代理错误和普通网络错误\n                const isProxyRequest = handledError.extra?.isProxyRequest === true;\n                const errorType = handledError.code === 599 || isProxyRequest ? \"代理错误\" : \"网络错误\";\n                const message = `图文发布失败，${errorType}：${handledError.message}${task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n                task.logger.error(`[douyinPublish] ${errorType}，直接返回: ${message}`, stringifyError(handledError));\n                await updateTaskState?.({\n                    state: TaskState.FAILED,\n                    error: message,\n                });\n                return { code: 414, data: \"\", message };\n            }\n            // 其它错误码维持原有逻辑，抛出以便上层 executeAction 走 RPA 兜底\n            throw error;\n        }\n\n        task.logger.info(\n            `[douyinPublish] decision值: ${JSON.stringify(decision)}, needsVerification(decision): ${needsVerification(decision)}`,\n        );\n        if (needsVerification(decision)) {\n            const details = [\n                publishResult.status_msg,\n                (decision as ParsedVerifyDecision | null)?.verify_title,\n                (decision as ParsedVerifyDecision | null)?.verify_desc,\n            ]\n                .filter(Boolean)\n                .join(\" \");\n            const message = `图文发布失败，原因：${details}${task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n            // 使用 safeSerialize 移除循环引用，同时保留 result 层解构的兼容字段\n            const safeDecision = safeSerialize(decision) ?? {};\n\n            const mockData = {\n                state: TaskState.FAILED,\n                error: message,\n                result: {\n                    ...safeDecision,\n                    data: decision,\n                    uploadedImgList: JSON.stringify((publishData.item as any).common.images),\n                },\n            };\n            await updateTaskState?.(mockData);\n            return { code: 0, data: mockData, message: \"操作成功\" };\n        }\n\n        reportLogger({\n            token: params.huiwenToken || \"\",\n            enverionment: task.enverionment || \"development\",\n            postId: params.articleId,\n            eip: proxyHttp.proxyInfo,\n            accountId: params.accountId,\n            uid: params.uid,\n            platform: \"douyin\",\n            publishParams: publishData,\n        });\n        task.logger.info(`[douyinPublish] 发布结果 ${JSON.stringify(publishResult)}`);\n        const isSuccess = publishResult.status_code === 0;\n        const message = `图文发布${isSuccess ? \"成功\" : `失败，原因：${publishResult.status_msg} ${(decision as ParsedVerifyDecision | null)?.verify_title} ${(decision as ParsedVerifyDecision | null)?.verify_desc}`}${task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n        const data = isSuccess ? publishResult.item_id || \"\" : \"\";\n        if (!isSuccess) {\n            // 使用 safeSerialize 移除循环引用，同时保留 result 层解构的兼容字段\n            const safeDecision = safeSerialize(decision) ?? {};\n\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: message,\n                result: {\n                    ...safeDecision,\n                    data: safeDecision,\n                    uploadedImgList: JSON.stringify((publishData.item as any).common.images),\n                },\n            });\n            return { code: 414, data: safeDecision, message };\n        }\n\n        await updateTaskState?.({\n            state: TaskState.SUCCESS,\n            result: {\n                response: data,\n            },\n        });\n\n        return response(isSuccess ? 0 : 414, message, data);\n    } catch (error) {\n        // 使用 Http.handleApiError 规范化错误，保留错误码和结构化信息\n        const handledError = Http.handleApiError(error);\n\n        // 构造详细的错误消息\n        const errorMsg = handledError.message || \"发布失败\";\n        const errorCode = handledError.code || 500;\n\n        // 记录完整的错误信息（包括堆栈和额外上下文）\n        task.logger.error(\n            `[douyinPublish] 发布流程异常 (步骤: ${currentStep}): ${errorMsg}`,\n            stringifyError(error),\n            handledError.extra,\n        );\n\n        // 更新任务状态\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: `${currentStep}失败: ${errorMsg}`,\n        });\n\n        return response(errorCode, errorMsg, \"\");\n    }\n};\n","import path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, type Locator, type Response, success } from \"@iflyrpa/share\";\nimport type { PublishAction } from \"./index\";\nexport const rpaAction: PublishAction = async (task, params) => {\n    // const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    const commonCookies = {\n        path: \"/\",\n        secure: true,\n        domain: \"douyin.com\",\n        url: \"https://creator.douyin.com\",\n        httpOnly: true,\n    };\n    const page = await task.createPage({\n        show: task.debug,\n        url: params.url || \"https://creator.douyin.com/creator-micro/content/upload?default-tab=3\",\n        // url:'https://www.browserscan.net/zh/bot-detection',\n        cookies: params.cookies?.map((it) => ({ ...it, ...commonCookies })),\n    });\n    // await updateTaskState?.({\n    //     state: TaskState.ACTION,\n    //     connectAddress: task.steelConnector?.getProxyUrl(task.sessionId || \"\", \"v1/sessions/debug\"),\n    //     sessionId: task.sessionId,\n    // });\n\n    const tmpCachePath = task.getTmpPath();\n\n    // Helper functions for robust interactions\n    const waitForElement = async (selector: string, timeout = 10000): Promise<Locator | null> => {\n        try {\n            const element = page.locator(selector);\n            task.logger.warn(`element: ${element}`);\n            await element.waitFor({ state: \"visible\", timeout });\n            return element;\n        } catch {\n            task.logger.warn(`元素未找到: ${selector}`);\n            return null;\n        }\n    };\n\n    const retryAction = async <T>(action: () => Promise<T>, maxRetries = 3, delay = 1000): Promise<T> => {\n        let lastError: Error | undefined;\n        for (let i = 0; i < maxRetries; i++) {\n            try {\n                return await action();\n            } catch (error) {\n                lastError = error as Error;\n                task.logger.warn(`重试 ${i + 1}/${maxRetries}: ${lastError.message}`);\n                if (i < maxRetries - 1) {\n                    await page.waitForTimeout(delay);\n                }\n            }\n        }\n        throw lastError;\n    };\n\n    const safeClick = async (locator: Locator | null): Promise<boolean> => {\n        if (!locator) return false;\n        try {\n            await locator.click({ timeout: 5000 });\n            return true;\n        } catch (error) {\n            task.logger.warn(`点击失败: ${error}`);\n            return false;\n        }\n    };\n\n    const safeFill = async (locator: Locator | null, text: string): Promise<boolean> => {\n        if (!locator || !text) return false;\n        try {\n            await locator.clear({ timeout: 3000 });\n            await locator.fill(text, { timeout: 5000 });\n            return true;\n        } catch (error) {\n            task.logger.warn(`填充文本失败: ${error}`);\n            return false;\n        }\n    };\n\n    try {\n        task.logger.info(\"检查登录状态...\");\n        await page.waitForSelector(\"#micro\", {\n            state: \"visible\",\n            timeout: 20000,\n        });\n        task.logger.info(\"✓ 登录状态正常\");\n    } catch (_error) {\n        task.logger.error(\"✗ 登录失效或页面加载异常\");\n        return { code: 414, message: \"登录失效\", data: page.url() };\n    }\n    // 上传图片\n    if (params.banners && params.banners.length > 0 && params.coverImage && params.coverImage.length > 0) {\n        const imgs = [params.coverImage].concat(params.banners);\n        task.logger.info(`开始上传 ${imgs.length} 张图片`);\n\n        await retryAction(async () => {\n            // 下载图片到本地\n            const images = await Promise.all(\n                imgs.map((url) => {\n                    const fileName = getFilenameFromUrl(url);\n                    return downloadImage(url, path.join(tmpCachePath, fileName));\n                }),\n            );\n\n            // 等待文件上传输入框\n            const fileChooser = await page.waitForSelector('input[type=\"file\"]', { timeout: 20000 });\n            if (!fileChooser) {\n                throw new Error(\"未找到图片上传输入框\");\n            }\n\n            await fileChooser.setInputFiles(images);\n            task.logger.info(`图片上传成功: ${images.length} 张`);\n\n            // 等待图片处理\n            await page.waitForTimeout(2000);\n        });\n    }\n    // 填写标题\n    if (params.title) {\n        task.logger.info(`填写标题: ${params.title}`);\n        await retryAction(async () => {\n            const titleInstance = await waitForElement(\".semi-input-wrapper input[placeholder='添加作品标题']\", 50000);\n            if (!titleInstance) {\n                throw new Error(\"未找到标题输入框\");\n            }\n            await titleInstance.click();\n            await safeFill(titleInstance, params.title);\n            task.logger.info(\"标题填写完成\");\n        });\n    }\n    // 填写描述\n    if (params.content) {\n        task.logger.info(\"填写描述\");\n        await page.waitForTimeout(1000);\n        await retryAction(async () => {\n            const descInstance = await waitForElement(\"div[data-placeholder='添加作品描述...']\", 10000);\n            if (!descInstance) {\n                throw new Error(\"未找到描述编辑器\");\n            }\n            await descInstance.click();\n            await page.waitForTimeout(500);\n\n            // 清理内容中的话题标记\n            const cleanContent = params.content.replace(/#.*?\\[.*?]#/g, \"\");\n            await descInstance.pressSequentially(cleanContent, { delay: 10 });\n            task.logger.info(\"描述填写完成\");\n        });\n    }\n\n    // 添加话题标签\n    if (params.topic && params.topic.length > 0) {\n        task.logger.info(`添加话题标签: ${params.topic.length} 个`);\n        try {\n            const topics = params.topic; // 保存到局部变量避免 TypeScript 类型问题\n            await retryAction(async () => {\n                const descInstance = page.locator(\".editor-kit-container.editor.editor-comp-publish\");\n\n                // 遍历话题数组\n                for (const topic of topics) {\n                    if (topic.cha_name) {\n                        // 输入话题标签格式: #话题名 (带空格)\n                        const topicTag = `#${topic.cha_name} `;\n                        await descInstance.pressSequentially(topicTag, { delay: 10 });\n                        task.logger.info(`已添加话题: ${topicTag.trim()}`);\n                        await page.waitForTimeout(300);\n                    }\n                }\n\n                task.logger.info(\"✓ 话题标签添加完成\");\n            });\n        } catch (error) {\n            task.logger.warn(`添加话题标签失败: ${error}`);\n        }\n    }\n\n    // 选择合集\n    if (params.mix?.mix_name) {\n        task.logger.info(`选择合集: ${params.mix.mix_name}`);\n        const instanceCollection = page.locator(\"[class^='mix-sel-wrap'] .semi-select\").nth(1);\n        await instanceCollection.click();\n        await page.waitForTimeout(2000);\n        page.locator(\".semi-select-option-list .semi-select-option\")\n            .filter({ hasText: params.mix.mix_name })\n            .first()\n            .click({ force: true });\n    }\n\n    // 选择合集\n    if (params.mix?.mix_order_name) {\n        task.logger.info(`选择合集集数: ${params.mix.mix_order_name}`);\n        const instanceCollection = page.locator(\"[class^='mix-sel-wrap'] .semi-select\").nth(2);\n        await instanceCollection.click();\n        await page.waitForTimeout(2000);\n        page.locator(\".mix-order-dropdown .semi-select-option\")\n            .filter({ hasText: params.mix.mix_order_name })\n            .first()\n            .click({ force: true });\n    }\n\n    // 选择音乐\n    if (params.musicId && params.musicName) {\n        task.logger.info(`选择音乐: ${params.musicName} - ${params.musicAuthor || \"\"}`);\n        try {\n            await retryAction(async () => {\n                // 点击音乐选择触发器\n                const musicTrigger = await waitForElement(\"[class^='container-right-']\", 10000);\n                if (!musicTrigger) {\n                    throw new Error(\"未找到音乐选择触发器\");\n                }\n                await musicTrigger.click();\n                task.logger.info(\"已打开音乐选择面板\");\n                await page.waitForTimeout(1000);\n                const searchBox = await waitForElement(\"[class^='music-search']\", 10000);\n                if (!searchBox) {\n                    throw new Error(\"未找到音乐搜索框\");\n                }\n                await searchBox.click();\n                await page.waitForTimeout(500);\n\n                // 填充搜索内容\n                const searchInput = page.locator(\"[class^='music-search'] input\");\n                const searchText = params.musicAuthor\n                    ? `${params.musicName} - ${params.musicAuthor}`\n                    : params.musicName;\n                await searchInput.fill(searchText || \"\");\n                task.logger.info(`已输入搜索内容: ${searchText}`);\n\n                // 等待输入稳定\n                await page.waitForTimeout(300);\n\n                // 按回车触发搜索\n                await searchInput.press(\"Enter\");\n                task.logger.info(\"已触发搜索\");\n\n                // 等待搜索结果加载\n                await page.waitForTimeout(4000);\n\n                // 等待搜索结果容器出现\n                const resultContainer = page.locator(\"[class^='card-container-']\");\n                task.logger.info(`resultContainer: ${resultContainer}`);\n\n                if (!resultContainer) {\n                    throw new Error(\"未找到音乐搜索结果\");\n                }\n\n                // 查找匹配的音乐项\n                const musicCards = page.locator(\"[class^='card-container-']\");\n                const matchedCard = musicCards.filter({ hasText: params.musicName }).first();\n\n                const cardCount = await matchedCard.count();\n                if (cardCount === 0) {\n                    task.logger.warn(`未找到匹配的音乐: ${params.musicName}`);\n                    throw new Error(`未找到匹配的音乐: ${params.musicName}`);\n                }\n\n                task.logger.info(\"找到匹配的音乐，准备选择\");\n\n                // hover 到音乐卡片上显示按钮\n                await matchedCard.hover();\n                task.logger.info(\"已 hover 到音乐卡片\");\n                await page.waitForTimeout(2000);\n\n                // 点击选择按钮\n                const selectButton = matchedCard.locator(\".semi-button\").first();\n                const buttonClicked = await safeClick(selectButton);\n\n                if (!buttonClicked) {\n                    throw new Error(\"点击音乐选择按钮失败\");\n                }\n\n                task.logger.info(\"✓ 音乐选择完成\");\n                await page.waitForTimeout(500);\n            });\n        } catch (error) {\n            task.logger.warn(`选择音乐失败: ${error}`);\n        }\n    }\n\n    // 选择热点\n    if (params.hotSentence) {\n        task.logger.info(`选择热点: ${params.hotSentence}`);\n        const instance = page.locator(\".semi-select-filterable\").nth(1);\n        await instance.click();\n        await page.waitForTimeout(1000);\n        await page.locator(\".semi-input-wrapper input\").nth(1).fill(params.hotSentence);\n        await page.waitForTimeout(2000);\n        page.locator(\".semi-popover-content .semi-select-option\")\n            .filter({ hasText: params.hotSentence })\n            .first()\n            .click({ force: true });\n    }\n    // if (params.topic && params.topic.length > 0) {\n    //     for (const it of params.topic) {\n    //         await descInstance.pressSequentially(`#${it.word}`);\n    //         await page.locator(\".ql-mention-loading, .topic-loading\").waitFor({ state: \"detached\" });\n    //         await page.waitForTimeout(1000);\n    //         await page.locator(\".topic-item.is-selected, .creator-editor-topic-container .item.is-selected\").click();\n    //     }\n    // }\n\n    // const container = page.locator(\".plugin.editor-container, .content-container\");\n    // await container.focus();\n    // await page.mouse.wheel(0, 500);\n\n    // if (params.address) {\n    //     await selectAddress(\n    //         page.locator(\".media-extension .address-input, .location-input\").filter({ hasText: \"添加地点\" }),\n    //         params.address.name,\n    //     );\n    // }\n    // 设置可见范围\n    if (params.visibleRange) {\n        task.logger.info(`设置可见范围: ${params.visibleRange}`);\n        if (params.visibleRange === \"2\") {\n            // 2 = 好友可见\n            await page.locator(\"label:has-text('好友可见')\").first().click();\n            task.logger.info(\"已设置为好友可见\");\n        } else if (params.visibleRange === \"1\") {\n            // 1 = 仅自己可见\n            await page.locator(\"label:has-text('仅自己可见')\").first().click();\n            task.logger.info(\"已设置为仅自己可见\");\n        }\n        // 0 = 公开（默认，无需操作）\n    }\n\n    // 设置保存权限\n    if (!params.allowSave) {\n        task.logger.info(`设置保存权限: ${params.allowSave ? \"允许\" : \"不允许\"}`);\n        try {\n            // false = 不允许\n            await page.locator(\"label:has-text('不允许')\").first().click();\n            task.logger.info(\"已设置为保存权限不允许\");\n            await page.waitForTimeout(300);\n        } catch (error) {\n            task.logger.warn(`设置保存权限失败: ${error}`);\n        }\n    }\n\n    // 设置定时发布\n    if (!params.isImmediatelyPublish && params.scheduledPublish) {\n        task.logger.info(\"设置定时发布\");\n\n        try {\n            // 点击定时发布单选按钮\n            await page.locator('label:has-text(\"定时发布\")').first().click();\n            task.logger.info(\"已选择定时发布\");\n            await page.waitForTimeout(500);\n\n            // 归一化时间戳（处理秒/毫秒）\n            const timestamp =\n                params.scheduledPublish > 10000000000 ? params.scheduledPublish / 1000 : params.scheduledPublish;\n            const publishDate = new Date(timestamp * 1000);\n\n            // 格式化时间字符串\n            const year = publishDate.getFullYear();\n            const month = String(publishDate.getMonth() + 1).padStart(2, \"0\");\n            const day = String(publishDate.getDate()).padStart(2, \"0\");\n            const hour = String(publishDate.getHours()).padStart(2, \"0\");\n            const minute = String(publishDate.getMinutes()).padStart(2, \"0\");\n            const formattedTime = `${year}-${month}-${day} ${hour}:${minute}`;\n\n            task.logger.info(`目标发布时间: ${formattedTime}`);\n\n            // 填写时间\n            const releaseTimeInstance = await waitForElement(\n                \".semi-datepicker-input input[placeholder='日期和时间']\",\n                10000,\n            );\n            if (!releaseTimeInstance) {\n                throw new Error(\"未找到时间输入框\");\n            }\n\n            await releaseTimeInstance.click();\n            await page.waitForTimeout(500);\n            await releaseTimeInstance.fill(formattedTime);\n            await page.waitForTimeout(500);\n\n            // 验证输入值\n            const inputValue = await releaseTimeInstance.inputValue();\n            if (inputValue !== formattedTime) {\n                task.logger.warn(`时间输入验证失败，期望: ${formattedTime}, 实际: ${inputValue}`);\n            } else {\n                task.logger.info(\"定时发布设置完成\");\n            }\n\n            await releaseTimeInstance.blur();\n            await page.waitForTimeout(500);\n        } catch (error) {\n            task.logger.warn(`定时发布设置失败: ${error}`);\n        }\n    }\n\n    // 点击发布按钮\n    task.logger.info(\"准备发布...\");\n    await page.waitForTimeout(1000);\n\n    const response = await new Promise<string>((resolve) => {\n        const handleResponse = async (response: Response) => {\n            if (response.url().includes(\"/web/api/media/aweme/create_v2\")) {\n                console.log(\"匹配到发布接口响应\");\n                const jsonResponse = await response.json();\n                console.log(\"发布接口响应数据:\", jsonResponse);\n                page.off(\"response\", handleResponse);\n                resolve(jsonResponse?.data?.item_id);\n            }\n        };\n        console.log(\"监听响应事件\");\n        page.on(\"response\", handleResponse);\n        console.log(\"点击发布按钮\");\n        // 在设置监听器后等待，然后点击\n        setTimeout(() => {\n            page.locator(\"#DCPF button:has-text('发布')\").first().click();\n            console.log(\"发布按钮已点击\");\n        }, 1000);\n    });\n\n    // await updateTaskState?.({\n    //     state: TaskState.SUCCESS,\n    //     result: {\n    //         response,\n    //     },\n    // });\n    console.log(\"发布成功了\");\n\n    await page.close();\n\n    return success(response);\n};\n","import path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, type Locator, type Response, success, TaskState } from \"@iflyrpa/share\";\nimport { MockPublish } from \"../../types\";\nimport type { ParsedVerifyDecision } from \"../../utils/douyin/verify-parser\";\nimport { needsVerification, parseVerifyPassportDecision } from \"../../utils/douyin/verify-parser\";\nimport { ProxyAgent } from \"../../utils/proxy\";\nimport type { PublishAction } from \"./index\";\n\nexport const rpaAction_Server: PublishAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n\n    const tmpCachePath = task.getTmpPath();\n    task.logger?.info(\"==>进入RPA操作：任务开始，下载图片开始...\");\n\n    // 预下载图片\n    const imgs = params.coverImage ? [params.coverImage, ...(params.banners || [])] : params.banners || [];\n\n    const imagePromise = Promise.all(\n        imgs.map((url) => {\n            const fileName = getFilenameFromUrl(url);\n            return downloadImage(url, path.join(tmpCachePath, fileName));\n        }),\n    );\n\n    // 获取代理信息\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n\n    const commonCookies = {\n        path: \"/\",\n        secure: true,\n        domain: \"douyin.com\",\n        url: \"https://creator.douyin.com\",\n        httpOnly: true,\n    };\n\n    task.logger?.info(\"==>开始打开抖音创作者页面...\");\n    const page = await task.createPage({\n        show: task.debug,\n        url: params.url || \"https://creator.douyin.com/creator-micro/content/upload?default-tab=3\",\n        cookies: params.cookies?.map((it) => ({ ...it, ...commonCookies })),\n        proxyUrl,\n    });\n    task.logger?.info(\"==>抖音创作者页面打开成功\");\n\n    await updateTaskState?.({\n        state: TaskState.ACTION,\n        connectAddress: task.steelConnector?.getProxyUrl(task.sessionId || \"\", \"v1/sessions/debug\"),\n        sessionId: task.sessionId,\n    });\n\n    // ---- 工具函数 ----\n\n    const waitForElement = async (selector: string, timeout = 10000): Promise<Locator | null> => {\n        try {\n            const element = page.locator(selector);\n            await element.waitFor({ state: \"visible\", timeout });\n            return element;\n        } catch {\n            task.logger?.warn(`元素未找到: ${selector}`);\n            return null;\n        }\n    };\n\n    const retryAction = async <T>(action: () => Promise<T>, maxRetries = 3, delay = 1000): Promise<T> => {\n        let lastError: Error | undefined;\n        for (let i = 0; i < maxRetries; i++) {\n            try {\n                return await action();\n            } catch (error) {\n                lastError = error as Error;\n                task.logger?.warn(`重试 ${i + 1}/${maxRetries}: ${lastError.message}`);\n                if (i < maxRetries - 1) {\n                    await page.waitForTimeout(delay);\n                }\n            }\n        }\n        throw lastError;\n    };\n\n    const safeClick = async (locator: Locator | null): Promise<boolean> => {\n        if (!locator) return false;\n        try {\n            await locator.click({ timeout: 5000 });\n            return true;\n        } catch (error) {\n            task.logger?.warn(`点击失败: ${error}`);\n            return false;\n        }\n    };\n\n    const safeFill = async (locator: Locator | null, text: string): Promise<boolean> => {\n        if (!locator || !text) return false;\n        try {\n            await locator.clear({ timeout: 3000 });\n            await locator.fill(text, { timeout: 5000 });\n            return true;\n        } catch (error) {\n            task.logger?.warn(`填充文本失败: ${error}`);\n            return false;\n        }\n    };\n\n    // ---- 自动化脚本 ----\n\n    // 等待登录成功\n    try {\n        task.logger?.info(\"检查登录状态...\");\n        await page.waitForSelector(\"#micro\", {\n            state: \"visible\",\n            timeout: 20000,\n        });\n        task.logger?.info(\"✓ 登录状态正常\");\n    } catch (_error) {\n        task.logger?.error(\"✗ 登录失效或页面加载异常\");\n        await updateTaskState?.({ state: TaskState.FAILED, error: \"登录失效\" });\n        return { code: 414, message: \"登录失效\", data: page.url() };\n    }\n\n    // 获取已下载图片\n    const images = await imagePromise;\n    task.logger?.info(`==>图片下载完成，共 ${images.length} 张，开始上传图片...`);\n\n    // 上传图片\n    if (images.length > 0) {\n        await retryAction(async () => {\n            const fileChooser = await page.waitForSelector('input[type=\"file\"]', { timeout: 20000 });\n            if (!fileChooser) {\n                throw new Error(\"未找到图片上传输入框\");\n            }\n            await fileChooser.setInputFiles(images);\n            task.logger?.info(`图片上传成功: ${images.length} 张`);\n            await page.waitForTimeout(2000);\n        });\n    }\n\n    // 填写标题\n    if (params.title) {\n        task.logger?.info(`填写标题: ${params.title}`);\n        await retryAction(async () => {\n            const titleInstance = await waitForElement(\".semi-input-wrapper input[placeholder='添加作品标题']\", 50000);\n            if (!titleInstance) {\n                throw new Error(\"未找到标题输入框\");\n            }\n            await titleInstance.click({ timeout: 5000 });\n            await safeFill(titleInstance, params.title);\n            task.logger?.info(\"标题填写完成\");\n        });\n    }\n\n    // 填写描述\n    if (params.content) {\n        task.logger?.info(\"填写描述\");\n        await page.waitForTimeout(1000);\n        await retryAction(async () => {\n            const descInstance = await waitForElement(\"div[data-placeholder='添加作品描述...']\", 10000);\n            if (!descInstance) {\n                throw new Error(\"未找到描述编辑器\");\n            }\n            await descInstance.click({ timeout: 5000 });\n            await page.waitForTimeout(500);\n            const cleanContent = params.content.replace(/#.*?\\[.*?]#/g, \"\");\n            await descInstance.fill(cleanContent);\n            await page.keyboard.press(\"Control+End\");\n            task.logger?.info(\"描述填写完成\");\n        });\n    }\n\n    // 添加话题标签\n    if (params.topic && params.topic.length > 0) {\n        task.logger?.info(`添加话题标签: ${params.topic.length} 个`);\n        try {\n            const topics = params.topic;\n            await retryAction(async () => {\n                // const descInstance = page.locator(\".editor-kit-container.editor.editor-comp-publish\");\n                for (const topic of topics) {\n                    if (topic.cha_name) {\n                        const topicTag = `#${topic.cha_name} `;\n                        await page.keyboard.type(topicTag);\n                        task.logger?.info(`已添加话题: ${topicTag.trim()}`);\n                        await page.waitForTimeout(300);\n                    }\n                }\n                task.logger?.info(\"✓ 话题标签添加完成\");\n            });\n        } catch (error) {\n            task.logger?.warn(`添加话题标签失败: ${error}`);\n        }\n    }\n\n    // 选择合集\n    if (params.mix?.mix_name) {\n        task.logger?.info(`选择合集: ${params.mix.mix_name}`);\n        try {\n            const instanceCollection = page.locator(\"[class^='mix-sel-wrap'] .semi-select\").nth(1);\n            await instanceCollection.click({ timeout: 5000 });\n            await page.waitForTimeout(2000);\n            await page\n                .locator(\".semi-select-option-list .semi-select-option\")\n                .filter({ hasText: params.mix.mix_name })\n                .first()\n                .click({ force: true, timeout: 5000 });\n        } catch (error) {\n            task.logger?.warn(`选择合集失败: ${error}`);\n        }\n    }\n\n    // 选择合集集数\n    if (params.mix?.mix_order_name) {\n        task.logger?.info(`选择合集集数: ${params.mix.mix_order_name}`);\n        try {\n            const instanceCollection = page.locator(\"[class^='mix-sel-wrap'] .semi-select\").nth(2);\n            await instanceCollection.click({ timeout: 5000 });\n            await page.waitForTimeout(2000);\n            await page\n                .locator(\".mix-order-dropdown .semi-select-option\")\n                .filter({ hasText: params.mix.mix_order_name })\n                .first()\n                .click({ force: true, timeout: 5000 });\n        } catch (error) {\n            task.logger?.warn(`选择合集集数失败: ${error}`);\n        }\n    }\n\n    // 选择音乐\n    if (params.musicId && params.musicName) {\n        task.logger?.info(`选择音乐: ${params.musicName} - ${params.musicAuthor || \"\"}`);\n        try {\n            await retryAction(async () => {\n                const musicTrigger = await waitForElement(\"[class^='container-right-']\", 10000);\n                if (!musicTrigger) throw new Error(\"未找到音乐选择触发器\");\n                await musicTrigger.click({ timeout: 5000 });\n                task.logger?.info(\"已打开音乐选择面板\");\n                await page.waitForTimeout(1000);\n\n                const searchBox = await waitForElement(\"[class^='music-search']\", 10000);\n                if (!searchBox) throw new Error(\"未找到音乐搜索框\");\n                await searchBox.click({ timeout: 5000 });\n                await page.waitForTimeout(500);\n\n                const searchInput = page.locator(\"[class^='music-search'] input\");\n                const searchText = params.musicAuthor\n                    ? `${params.musicName} - ${params.musicAuthor}`\n                    : params.musicName;\n                await searchInput.fill(searchText || \"\");\n                task.logger?.info(`已输入搜索内容: ${searchText}`);\n                await page.waitForTimeout(300);\n                await searchInput.press(\"Enter\");\n                task.logger?.info(\"已触发搜索\");\n                await page.waitForTimeout(4000);\n\n                const musicCards = page.locator(\"[class^='card-container-']\");\n                const matchedCard = musicCards.filter({ hasText: params.musicName }).first();\n                const cardCount = await matchedCard.count();\n                if (cardCount === 0) throw new Error(`未找到匹配的音乐: ${params.musicName}`);\n\n                task.logger?.info(\"找到匹配的音乐，准备选择\");\n                await matchedCard.hover();\n                await page.waitForTimeout(2000);\n\n                const selectButton = matchedCard.locator(\".semi-button\").first();\n                const buttonClicked = await safeClick(selectButton);\n                if (!buttonClicked) throw new Error(\"点击音乐选择按钮失败\");\n\n                task.logger?.info(\"✓ 音乐选择完成\");\n                await page.waitForTimeout(500);\n            });\n        } catch (error) {\n            task.logger?.warn(`选择音乐失败: ${error}`);\n        }\n    }\n\n    // 选择热点\n    if (params.hotSentence) {\n        task.logger?.info(`选择热点: ${params.hotSentence}`);\n        try {\n            const instance = page.locator(\".semi-select-filterable\").nth(1);\n            await instance.click({ timeout: 5000 });\n            await page.waitForTimeout(1000);\n            await page.locator(\".semi-input-wrapper input\").nth(1).fill(params.hotSentence);\n            await page.waitForTimeout(2000);\n            await page\n                .locator(\".semi-popover-content .semi-select-option\")\n                .filter({ hasText: params.hotSentence })\n                .first()\n                .click({ force: true, timeout: 5000 });\n        } catch (error) {\n            task.logger?.warn(`选择热点失败: ${error}`);\n        }\n    }\n\n    // 设置可见范围\n    if (params.visibleRange) {\n        task.logger?.info(`设置可见范围: ${params.visibleRange}`);\n        try {\n            if (params.visibleRange === \"2\") {\n                await page.locator(\"label:has-text('好友可见')\").first().click({ timeout: 5000 });\n                task.logger?.info(\"已设置为好友可见\");\n            } else if (params.visibleRange === \"1\") {\n                await page.locator(\"label:has-text('仅自己可见')\").first().click({ timeout: 5000 });\n                task.logger?.info(\"已设置为仅自己可见\");\n            }\n        } catch (error) {\n            task.logger?.warn(`设置可见范围失败: ${error}`);\n        }\n    }\n\n    // 设置保存权限\n    if (!params.allowSave) {\n        task.logger?.info(\"设置保存权限：不允许\");\n        try {\n            await page.locator(\"label:has-text('不允许')\").first().click({ timeout: 5000 });\n            task.logger?.info(\"已设置为不允许保存\");\n            await page.waitForTimeout(300);\n        } catch (error) {\n            task.logger?.warn(`设置保存权限失败: ${error}`);\n        }\n    }\n\n    // 设置定时发布\n    if (!params.isImmediatelyPublish && params.scheduledPublish) {\n        task.logger?.info(\"设置定时发布\");\n        try {\n            await page.locator('label:has-text(\"定时发布\")').first().click({ timeout: 5000 });\n            task.logger?.info(\"已选择定时发布\");\n            await page.waitForTimeout(500);\n\n            const timestamp =\n                params.scheduledPublish > 10000000000 ? params.scheduledPublish / 1000 : params.scheduledPublish;\n            const publishDate = new Date(timestamp * 1000);\n\n            const year = publishDate.getFullYear();\n            const month = String(publishDate.getMonth() + 1).padStart(2, \"0\");\n            const day = String(publishDate.getDate()).padStart(2, \"0\");\n            const hour = String(publishDate.getHours()).padStart(2, \"0\");\n            const minute = String(publishDate.getMinutes()).padStart(2, \"0\");\n            const formattedTime = `${year}-${month}-${day} ${hour}:${minute}`;\n\n            task.logger?.info(`目标发布时间: ${formattedTime}`);\n\n            const releaseTimeInstance = await waitForElement(\n                \".semi-datepicker-input input[placeholder='日期和时间']\",\n                10000,\n            );\n            if (!releaseTimeInstance) throw new Error(\"未找到时间输入框\");\n\n            await releaseTimeInstance.click({ timeout: 5000 });\n            await page.waitForTimeout(500);\n            await releaseTimeInstance.fill(formattedTime);\n            await page.waitForTimeout(500);\n\n            const inputValue = await releaseTimeInstance.inputValue();\n            if (inputValue !== formattedTime) {\n                task.logger?.warn(`时间输入验证失败，期望: ${formattedTime}, 实际: ${inputValue}`);\n            } else {\n                task.logger?.info(\"定时发布设置完成\");\n            }\n            await releaseTimeInstance.blur();\n            await page.waitForTimeout(500);\n        } catch (error) {\n            task.logger?.warn(`定时发布设置失败: ${error}`);\n        }\n    }\n\n    // 模拟发布（测试用）\n    if (MockPublish) {\n        const message = \"文章模拟发布成功\";\n        const data = \"mock_item_id\";\n        await updateTaskState?.({\n            state: TaskState.SUCCESS,\n            result: { response: data },\n        });\n        return success(data, message);\n    }\n\n    // 点击发布按钮并监听接口响应\n    task.logger?.info(\"准备发布...\");\n    await page.waitForTimeout(1000);\n\n    interface PublishResult {\n        itemId: string;\n        decision: ParsedVerifyDecision | null;\n    }\n\n    const result = await new Promise<PublishResult>((resolve, reject) => {\n        const handleResponse = async (res: Response) => {\n            if (res.url().includes(\"/web/api/media/aweme/create_v2\")) {\n                task.logger?.info(\"匹配到发布接口响应\");\n\n                // 解析二次验证决策头：抖音要求二次验证时仍返回 status_code === 0，\n                // 真正的信号在 x-tt-verify-passport-decision 响应头（account_flow === \"verify\"），\n                // 此时文章并未真正发布，必须按失败处理。\n                let decision: ParsedVerifyDecision | null = null;\n                try {\n                    const headers = await res.allHeaders();\n                    decision = parseVerifyPassportDecision(headers[\"x-tt-verify-passport-decision\"]);\n                } catch (error) {\n                    task.logger?.warn(`解析验证决策头失败: ${error}`);\n                }\n\n                const jsonResponse = await res.json();\n                task.logger?.info(`发布接口响应数据: ${JSON.stringify(jsonResponse)}`);\n                page.off(\"response\", handleResponse);\n\n                if (needsVerification(decision)) {\n                    task.logger?.warn(\"检测到需要二次验证，文章未真正发布\");\n                    resolve({ itemId: \"\", decision });\n                    return;\n                }\n\n                if (jsonResponse?.status_code !== 0) {\n                    reject(new Error(jsonResponse?.status_msg || \"发布失败\"));\n                    return;\n                }\n\n                // status_code === 0 但缺少 item_id 视为未真正发布，不能误判为成功\n                const itemId = jsonResponse?.data?.item_id || jsonResponse?.item_id || \"\";\n                if (!itemId) {\n                    reject(new Error(jsonResponse?.status_msg || \"发布异常：未返回作品ID，文章可能未真正发布\"));\n                    return;\n                }\n\n                resolve({ itemId, decision: null });\n            }\n        };\n\n        page.on(\"response\", handleResponse);\n\n        setTimeout(() => {\n            page.locator(\"#DCPF button:has-text('发布')\").first().click();\n            task.logger?.info(\"发布按钮已点击\");\n        }, 1000);\n\n        // 整体超时保护\n        setTimeout(() => {\n            page.off(\"response\", handleResponse);\n            reject(new Error(\"发布超时，未收到接口响应\"));\n        }, 30000);\n    }).catch(async (err) => {\n        const msg = `发布失败：${err?.message || \"未知错误\"}`;\n        task.logger?.error(msg);\n        await updateTaskState?.({ state: TaskState.FAILED, error: msg });\n        await page.close();\n        return null;\n    });\n\n    if (!result) {\n        return { code: 414, message: \"发布失败\", data: \"\" };\n    }\n\n    // 需要二次验证：文章未真正发布，返回验证信息供上层触发扫码验证流程\n    if (needsVerification(result.decision)) {\n        const decision = result.decision;\n        const details = [decision?.verify_title, decision?.verify_desc].filter(Boolean).join(\" \");\n        const message = `[douyinPublish rpa-server]发布失败，需要二次验证${details ? `：${details}` : \"\"}`;\n        task.logger?.warn(message);\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: message,\n            result: { data: decision },\n        });\n        await page.close();\n        return { code: 414, message, data: \"\" };\n    }\n\n    task.logger?.info(`✓ 发布成功，item_id: ${result.itemId}`);\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: { response: result.itemId },\n    });\n\n    await page.close();\n    return success(result.itemId);\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaAction_Server } from \"./rpa-server\";\n\nexport const DouyinPublishParamsSchema = ActionCommonParamsSchema.extend({\n    title: z.string(), // 标题\n    content: z.string(), // 正文(\"标题。正文\")\n    textExtra: z.string(),\n    topic: z\n        .array(\n            z.object({\n                cha_name: z.string(),\n                cid: z.string(),\n                view_count: z.string().optional(),\n                group_id: z.string().optional(),\n                tag: z.number().optional(),\n                state: z.string().optional(),\n            }),\n        )\n        .optional(), // 话题\n    coverImage: z.string().optional(), // 封面图片\n    banners: z.array(z.string()), // 图片URL字符串数组\n    mix: z\n        .object({\n            mix_id: z.string(),\n            mix_order: z.number(),\n            mix_name: z.string().optional(),\n            mix_order_name: z.string().optional(),\n        })\n        .optional(), //合集id 合集的顺序 合集名称 合集集数名称\n    musicId: z.string().optional(), // 音乐Id\n    musicName: z.string().optional(), // 音乐名称\n    musicAuthor: z.string().optional(), // 音乐作者\n    musicDuration: z.number().optional(), // 音乐时长\n    challengeIds: z.string().optional(), // 话题Ids的cid字符串数组\n    // hashtagSource: z.string(),\n    hotSentence: z.string().optional(), // 热点\n    proxyLoc: z.string().optional(), // 代理位置\n    localIP: z.string().optional(), // 用户ip\n    visibleRange: z.enum([\"0\", \"1\", \"2\"]).optional(), // 可见范围 0-公开 1-仅自己可见 2-好友可见\n    isImmediatelyPublish: z.boolean().optional(), // 是否立即发布\n    scheduledPublish: z.number().optional(), // 定时发布时间，时间戳类型\n    allowSave: z.boolean().optional(), // 是否允许保存 保存权限,\n    publishType: z.enum([\"1\", \"2\", \"3\", \"4\"]).optional(), // 发布类型 1：发布视频 2：发布图文 3：发布全景视频 4：发布文章\n    extraParam: z.object({\n        \"security-sdk/s_sdk_pri_key\": z.string(), // 必填\n        \"security-sdk/s_sdk_pub_key\": z.string(), // 必填\n        \"security-sdk/s_sdk_sign_data_key/web_protect\": z.string(), // 必填\n        \"security-sdk/s_sdk_crypt_sdk\": z.string(), // 必填\n        \"security-sdk/s_sdk_server_cert_key\": z.string(), // 必填\n        browserInfo: z.object({\n            screen_width: z.string(),\n            screen_height: z.string(),\n            browser_language: z.string(),\n            browser_platform: z.string(),\n            browser_name: z.string(),\n            \"sec-ch-ua-platform\": z.string(),\n            \"sec-ch-ua\": z.string(),\n            userAgent: z.string().optional(),\n        }),\n    }),\n    uploadedImgList: z.string().optional(), // 已上传图片列表，JSON字符串格式，数组元素为图片URL\n});\n\nexport type DouyinPublishParams = z.infer<typeof DouyinPublishParamsSchema>;\n\nexport type PublishAction = CommonAction<DouyinPublishParams, string>;\n\nexport const douyinPublish: PublishAction = async (task, params) => {\n    task.logger.info(`douyinPublish actionType: ${params.actionType}`);\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return mockAction(task, params);\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaAction_Server(task, params);\n    }\n\n    // 优先执行Mock+RPA方案，失败则进入RPA-Server方案\n    return executeAction(mockAction, rpaAction)(task, params);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetBaijiahaoActivityParams extends ActiomCommonParams {\n    token: string;\n}\n\nexport interface ActivityData {\n    id: string;\n    task_name: string;\n}\n\nexport type PublishAction = CommonAction<GetBaijiahaoActivityParams, ActivityData[]>;\n\nexport const getBaijiahaoActivity: PublishAction = async (_task, params) => {\n    const cookies = params.cookies ?? [];\n\n    const http = new Http({\n        headers: {\n            cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            token: params.token,\n        },\n    });\n\n    const res = await http.api<{ data: { list: ActivityData[] } }>({\n        method: \"get\",\n        url: \"https://baijiahao.baidu.com/author/eco/tasksystem/getSquareMissionList\",\n        params: {\n            page_no: 1,\n            page_size: 18,\n            article_type: 1,\n            task_attend: 1,\n            task_origin: \"market\",\n            task_type: -1,\n            from: \"pc_edit\",\n        },\n    });\n\n    return success(res?.data?.list ?? []);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetBaijiahaoConfigParams extends ActiomCommonParams {\n    token: string;\n}\n\nexport const ConfigDataSchema = z.object({\n    id: z.string(),\n    name: z.string(),\n    detail: z.string(),\n    is_enable: z.number(),\n    publish_num_left: z.number().nullable().optional(),\n});\n\nexport type ConfigData = z.infer<typeof ConfigDataSchema>;\n\nexport type PublishAction = CommonAction<GetBaijiahaoConfigParams, ConfigData[]>;\n\nexport const getBaijiahaoConfig: PublishAction = async (_task, params) => {\n    const cookies = params.cookies ?? [];\n\n    const http = new Http({\n        headers: {\n            cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            token: params.token,\n        },\n    });\n\n    const res = await http.api<{\n        data: { article: { activity_list: ConfigData[] }; ability?: { publish_num_left: number } };\n    }>({\n        method: \"get\",\n        url: \"https://baijiahao.baidu.com/pcui/article/edit\",\n        params: {\n            type: \"news\",\n        },\n    });\n    const data: ConfigData[] =\n        res?.data?.article.activity_list.map((_item) => {\n            return {\n                id: _item.id,\n                name: _item.name,\n                detail: _item.detail,\n                is_enable: _item.is_enable,\n            };\n        }) ?? [];\n    res.data?.ability\n        ? data.push({\n              id: \"bjh_publish_num_left\",\n              name: \"账号剩余发文数\",\n              detail: \"\",\n              is_enable: 1,\n              publish_num_left: res.data.ability.publish_num_left,\n          })\n        : null;\n    return success(data, \"获取百家号配置项成功!\");\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\n\nexport interface GetShipinhaoBgmParams extends ActiomCommonParams {\n    query?: string; // 关键词查询\n    currentPage?: number; // 当前页码\n    pageSize?: number; // 每页数量\n    type?: number; // 音乐类型（103: 推荐，其他值根据实际需求）\n    lastBuffer?: string; // 分页标记\n}\n\nexport interface BgmListResponse {\n    errCode: number;\n    errMsg: string;\n    data: {\n        items: BgmDetail[];\n        lastBuffer: string;\n        totalCount: number;\n    };\n}\n\nexport interface BgmDetail {\n    listenItem: unknown;\n}\n\nexport type GetBgmAction = CommonAction<GetShipinhaoBgmParams, BgmListResponse[\"data\"]>;\n\nexport const getShipinhaoBgm: GetBgmAction = async (_task, params) => {\n    // 验证 extraParam 是否存在\n    if (!params.extraParam) {\n        return response(400, \"缺少 extraParam 参数\", { items: [], lastBuffer: \"\", totalCount: 0 });\n    }\n\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId || !params.extraParam.uin) {\n        return response(400, \"fingerPrintDeviceId、aId和uin不能为空\", { items: [], lastBuffer: \"\", totalCount: 0 });\n    }\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n        origin: \"https://channels.weixin.qq.com\",\n        \"content-type\": \"application/json\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    const http = new Http({\n        headers,\n    });\n\n    const urlParams = new URLSearchParams({\n        _aid: params.extraParam.aId,\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n    }).toString();\n\n    const requestData = {\n        currentPage: params.currentPage ?? 1,\n        lastBuffer: params.lastBuffer || \"\",\n        pageSize: params.pageSize ?? 5,\n        type: params.type ?? 103, // 有query时使用搜索模式104，否则使用推荐模式103\n        recommendThumbUrlList: [],\n        query: params.query || \"\", // 添加关键词查询参数\n        timestamp: Date.now().toString(),\n        _log_finder_uin: \"\",\n        _log_finder_id: params.extraParam.finderUserName || \"\",\n        rawKeyBuff: null,\n        pluginSessionId: null,\n        scene: 7,\n        reqScene: 7,\n    };\n\n    const res = await http.api<BgmListResponse>({\n        method: \"post\",\n        url: `https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/post/get_bgm_list?${urlParams}`,\n        data: requestData,\n    });\n\n    const isSuccess = res?.errCode === 0;\n\n    return response(isSuccess ? 0 : 414, res?.errMsg, res.data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\n\nexport interface GetShipinhaoBgmCategoryParams extends ActiomCommonParams {}\n\nexport interface BgmCategoryListResponse {\n    errCode: number;\n    errMsg: string;\n    data: BgmCategoryDetail[];\n}\n\nexport interface BgmCategoryDetail {\n    items: {\n        categoryId: string;\n        categoryName: string;\n    };\n}\n\nexport type GetBgmCategoryAction = CommonAction<GetShipinhaoBgmCategoryParams, BgmCategoryDetail[]>;\n\nexport const getShipinhaoBgmCategory: GetBgmCategoryAction = async (_task, params) => {\n    // 验证 extraParam 是否存在\n    if (!params.extraParam) {\n        return response(400, \"缺少 extraParam 参数\", []);\n    }\n\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId || !params.extraParam.uin) {\n        return response(400, \"fingerPrintDeviceId、aId和uin不能为空\", []);\n    }\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n        origin: \"https://channels.weixin.qq.com\",\n        \"content-type\": \"application/json\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    const http = new Http({\n        headers,\n    });\n\n    const urlParams = new URLSearchParams({\n        _aid: params.extraParam.aId,\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n    }).toString();\n\n    const requestData = {\n        timestamp: Date.now().toString(),\n        _log_finder_uin: \"\",\n        _log_finder_id: params.extraParam.finderUserName || \"\",\n        rawKeyBuff: null,\n        pluginSessionId: null,\n        scene: 7,\n        reqScene: 7,\n    };\n\n    const res = await http.api<BgmCategoryListResponse>({\n        method: \"post\",\n        url: `https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/post/get_bgm_category_list?${urlParams}`,\n        data: requestData,\n    });\n\n    const isSuccess = res?.errCode === 0;\n\n    return response(isSuccess ? 0 : 414, res?.errMsg, res.data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\n\nexport interface GetShipinhaoCollectionParams extends ActiomCommonParams {\n    pageNum?: number;\n    pageSize?: number;\n}\n\nexport interface CollectionDetailResponse {\n    data: {\n        baseResp: { errcode: number };\n        collectionList: CollectionDetail[];\n        collectionListCount: number;\n        hasHomepageTab: boolean;\n    };\n    errCode: number;\n    errMsg: string;\n}\n\nexport interface CollectionDetail {\n    id: string;\n    name: string;\n    desc: string;\n    coverImgUrl: string;\n    createTime: number;\n    totalReadCount: string;\n    feedCount: number;\n    spamFlag: number;\n    closeTime: number;\n    lastUpdateTime: number;\n    invalidFeedCount: number;\n    updateCoverUrlMaxCount: number;\n    updateCoverUrlRemainCount: number;\n    collectionType: number;\n    auditOperRecommendFlag: number;\n    showStatus: number;\n    categoryInfo: {\n        categoryId: string;\n        categoryName: string;\n    };\n    courseInfo: {\n        price: number;\n        freeRange: number;\n    };\n    updateNameMaxCount: number;\n    updateNameRemainCount: number;\n    stickyOpStatus: number;\n    missEpisodesInfo: {\n        missEpisodeItems: any[];\n        totalMissEpisodes: number;\n    };\n}\n\nexport type PublishAction = CommonAction<GetShipinhaoCollectionParams, CollectionDetailResponse[\"data\"]>;\n\nexport const getShipinhaoCollection: PublishAction = async (_task, params) => {\n    // 验证 extraParam 是否存在\n    if (!params.extraParam) {\n        return response(400, \"缺少 extraParam 参数\", {\n            baseResp: { errcode: -1 },\n            collectionList: [],\n            collectionListCount: 0,\n            hasHomepageTab: false,\n        });\n    }\n\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId || !params.extraParam.uin) {\n        return response(400, \"fingerPrintDeviceId、aId和uin不能为空\", {\n            baseResp: { errcode: -1 },\n            collectionList: [],\n            collectionListCount: 0,\n            hasHomepageTab: false,\n        });\n    }\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://channels.weixin.qq.com/platform/post/finderNewLifeCreate\",\n        origin: \"https://channels.weixin.qq.com\",\n        \"content-type\": \"application/json\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    const http = new Http({\n        headers,\n    });\n\n    const urlParams = new URLSearchParams({\n        _aid: params.extraParam.aId,\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/platform/post/finderNewLifeCreate\",\n    }).toString();\n\n    const requestData = {\n        pageNum: params.pageNum ?? 1,\n        pageSize: params.pageSize ?? 20,\n        timestamp: Date.now().toString(),\n        _log_finder_uin: \"\",\n        _log_finder_id: params.extraParam.finderUserName || \"\",\n        rawKeyBuff: null,\n        pluginSessionId: null,\n        scene: 7,\n        reqScene: 7,\n    };\n\n    const res = await http.api<CollectionDetailResponse>({\n        method: \"post\",\n        url: `https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/collection/get_collection_list?${urlParams}`,\n        data: requestData,\n    });\n\n    const isSuccess = res.errCode === 0;\n\n    return response(isSuccess ? 0 : 414, res.errMsg, res.data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\n\nexport interface GetShipinhaoCommentListParams extends ActiomCommonParams {\n    lastBuff?: string; // 分页标记\n    exportId?: string; // 导出ID\n}\n\nexport interface CommentListResponse {\n    errCode: number;\n    errMsg: string;\n    data: {\n        list: CommentDetail[];\n        totalCount: number;\n        hasMore: boolean;\n    };\n}\n\nexport interface CommentDetail {\n    commentId: string;\n    content: string;\n    createTime: number;\n    likeCount: number;\n    replyCount: number;\n    userName: string;\n    userAvatar: string;\n}\n\nexport type GetCommentListAction = CommonAction<GetShipinhaoCommentListParams, CommentListResponse[\"data\"]>;\n\nexport const getShipinhaoCommentList: GetCommentListAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://channels.weixin.qq.com/micro/interaction/comment\",\n        origin: \"https://channels.weixin.qq.com\",\n        \"content-type\": \"application/json\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    const http = new Http({\n        headers,\n    });\n\n    const urlParams = new URLSearchParams({\n        _aid: params.extraParam.aId,\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/interaction/comment\",\n    }).toString();\n\n    const requestData = {\n        lastBuff: params.lastBuff || \"\",\n        exportId: params.exportId || \"\",\n        commentSelection: false,\n        forMcn: false,\n        timestamp: Date.now().toString(),\n        _log_finder_uin: \"\",\n        _log_finder_id: params.extraParam?.finderUserName || \"\",\n        rawKeyBuff: null,\n        pluginSessionId: null,\n        scene: 7,\n        reqScene: 7,\n    };\n\n    const res = await http.api<CommentListResponse>({\n        method: \"post\",\n        url: `https://channels.weixin.qq.com/micro/interaction/cgi-bin/mmfinderassistant-bin/comment/comment_list?${urlParams}`,\n        data: requestData,\n    });\n\n    console.log(res, \"----res\");\n\n    const isSuccess = res?.errCode === 0;\n\n    return response(isSuccess ? 0 : 414, res?.errMsg, res.data);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetShipinhaoConfigParams extends ActiomCommonParams {}\n\nexport interface ConfigData {\n    accountInfo: {\n        nickname: string;\n        avatar: string;\n        finder_username: string;\n    };\n    publishQuota: {\n        daily_limit: number;\n        used_today: number;\n        remaining: number;\n    };\n}\n\nexport type PublishAction = CommonAction<GetShipinhaoConfigParams, ConfigData>;\n\nexport const getShipinhaoConfig: PublishAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://channels.weixin.qq.com/platform/post/finderNewLifeCreate\",\n            origin: \"https://channels.weixin.qq.com\",\n        },\n    });\n\n    // 生成 UUID 和短 ID\n    const WEIXIN_VIDEO_AID = \"e48c8258-e782-483a-bcb1-be248537988f\";\n    const generateRid = () => {\n        const s = () => Math.random().toString(36).substring(2, 10);\n        return `${s()}-${s()}`;\n    };\n\n    const res = await http.api<any>({\n        method: \"get\",\n        url: \"https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/account/get_account_info\",\n        params: {\n            _aid: WEIXIN_VIDEO_AID,\n            _rid: generateRid(),\n            _pageUrl: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n        },\n    });\n\n    const configData: ConfigData = {\n        accountInfo: res.account_info || {},\n        publishQuota: res.publish_quota || {},\n    };\n\n    return success(\n        configData,\n        res.base_resp?.ret === 0 ? \"微信视频号配置信息获取成功！\" : \"微信视频号配置信息获取失败！\",\n    );\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\n\nexport interface GetShipinhaoPostListParams extends ActiomCommonParams {\n    lastBuff?: string; // 分页标记\n    pageSize?: number; // 每页数量\n    userpageType?: number; // 内容类型 12-图文 默认12\n}\n\nexport interface PostListResponse {\n    errCode: number;\n    errMsg: string;\n    data: {\n        list: PostDetail[];\n        totalCount: number;\n        hasMore: boolean;\n    };\n}\n\nexport interface PostDetail {\n    postId: string;\n    title: string;\n    createTime: number;\n    status: number;\n    coverUrl: string;\n    readCount: number;\n    likeCount: number;\n    commentCount: number;\n}\n\nexport type GetPostListAction = CommonAction<GetShipinhaoPostListParams, PostListResponse[\"data\"]>;\n\nexport const getShipinhaoPostList: GetPostListAction = async (_task, params) => {\n    // 验证 extraParam 是否存在\n    if (!params.extraParam) {\n        return response(400, \"缺少 extraParam 参数\", { list: [], totalCount: 0, hasMore: false });\n    }\n\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId || !params.extraParam.uin) {\n        return response(400, \"fingerPrintDeviceId、aId和uin不能为空\", { list: [], totalCount: 0, hasMore: false });\n    }\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://channels.weixin.qq.com/micro/interaction/post\",\n        origin: \"https://channels.weixin.qq.com\",\n        \"content-type\": \"application/json\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    const http = new Http({\n        headers,\n    });\n\n    const urlParams = new URLSearchParams({\n        _aid: params.extraParam.aId,\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/interaction/comment\",\n    }).toString();\n\n    const requestData = {\n        pageSize: params.pageSize ?? 10,\n        onlyUnread: false,\n        needAllCommentCount: true,\n        userpageType: params.userpageType ?? 12, // 图文\n        forMcn: false,\n        lastBuff: params.lastBuff || \"\",\n        timestamp: Date.now().toString(),\n        _log_finder_uin: \"\",\n        _log_finder_id: params.extraParam?.finderUserName || \"\",\n        rawKeyBuff: null,\n        pluginSessionId: null,\n        scene: 7,\n        reqScene: 7,\n    };\n\n    const res = await http.api<PostListResponse>({\n        method: \"post\",\n        url: `https://channels.weixin.qq.com/micro/interaction/cgi-bin/mmfinderassistant-bin/post/post_list?${urlParams}`,\n        data: requestData,\n    });\n    console.log(res, \"-----res\");\n\n    const isSuccess = res?.errCode === 0;\n\n    return response(isSuccess ? 0 : 414, res?.errMsg, res.data);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetToutiaoCollectionParams extends ActiomCommonParams {}\n\nexport interface GetToutiaoCollectionResult {\n    id: string;\n    collection_attr: {\n        title: string;\n        cover_image: {\n            url: string;\n            uri: string;\n            width: number;\n            height: number;\n            mime_type: string;\n        };\n        item_status: number;\n        visibility_level: number;\n        create_time: string;\n        suppress_reason: string;\n        user_id: string;\n    };\n    collection_stat: {\n        impression_count: string;\n        go_detail_count: string;\n        repin_count: string;\n        forward_count: string;\n    };\n    menu_list: {\n        show_delete: boolean;\n        show_modify: boolean;\n        show_hide: boolean;\n        forbid_delete_reason: string;\n        forbid_modify_reason: string;\n        forbid_hide_reason: string;\n    };\n    sub_item_count: number;\n    item_status_desc: string;\n}\n\nexport type PublishAction = CommonAction<GetToutiaoCollectionParams, GetToutiaoCollectionResult[]>;\n\nexport const getToutiaoCollection: PublishAction = async (_task, params) => {\n    const cookies = params.cookies ?? [];\n\n    const http = new Http({\n        headers: {\n            cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n        },\n    });\n\n    const res = await http.api<{ code: number; data: GetToutiaoCollectionResult[]; total_count: number }>({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/mp/fe_api/collection/list\",\n        params: {\n            page_num: 0,\n            page_size: 100,\n            need_sub_item_count: true,\n        },\n    });\n\n    return success(res.code === 0 ? res.data : [], res.code === 0 ? \"获取头条号合集成功！\" : \"获取头条号合集失败！\");\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, Toutiao } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetToutiaoConfigParams extends ActiomCommonParams {}\n\nexport interface GetToutiaoConfigResult {\n    suggestWords: Toutiao.Topic[];\n    cityDistrict: Toutiao.CityDistrict | null;\n    userRights: Toutiao.UserRight[];\n}\n\nexport type PublishAction = CommonAction<GetToutiaoConfigParams, GetToutiaoConfigResult>;\n\nexport const getToutiaoConfig: PublishAction = async (_task, params) => {\n    const cookies = params.cookies ?? [];\n\n    const http = new Http({\n        headers: {\n            cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n        },\n    });\n\n    const getSuggestWords = async () => {\n        try {\n            const res = await http.api<{ code: number; hots: Toutiao.Topic[] }>({\n                method: \"get\",\n                url: \"https://mp.toutiao.com/mp/agw/creator_helper/suggest_words\",\n                params: { type: 2, words: \"\" },\n            });\n\n            return res.code === 0 ? res.hots : [];\n        } catch (_error) {\n            return [];\n        }\n    };\n\n    const getCityDistrict = async () => {\n        try {\n            const res = await http.api<{ status: number; data: Toutiao.CityDistrict }>({\n                method: \"get\",\n                url: \"https://mp.toutiao.com/toutiao/normandy/mp/city_district/\",\n            });\n            return res.status === 0 ? res.data : null;\n        } catch (_error) {\n            return null;\n        }\n    };\n\n    const getUserRights = async () => {\n        try {\n            const res = await http.api<{ code: number; data: { benefit_level_info_list: Toutiao.UserRight[] } }>({\n                method: \"get\",\n                url: \"https://mp.toutiao.com/mp/agw/creator_project/get_benefit_page_info\",\n            });\n            return res.code === 0 ? res.data.benefit_level_info_list : [];\n        } catch (_error) {\n            return [];\n        }\n    };\n\n    const [suggestWords, cityDistrict, userRights] = await Promise.all([\n        getSuggestWords(),\n        getCityDistrict(),\n        getUserRights(),\n    ]);\n\n    return success({ suggestWords, cityDistrict, userRights });\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetWeixinCollectionParams extends ActiomCommonParams {\n    token: string | number;\n}\n\nexport interface CollectDetailResponse {\n    base_resp: { err_msg: string; ret: number };\n    list_resp: { items: CollectDetail[]; total: number };\n}\n\nexport interface CollectDetail {\n    continous_read_on: number;\n    cover_url: string;\n    create_time: number;\n    id: string;\n    is_ban: number;\n    is_updating: number;\n    need_pay: number;\n    title: string;\n    total: number;\n    type: number;\n    update_time: number;\n    url: string;\n    uv: number;\n}\n\nexport type PublishAction = CommonAction<GetWeixinCollectionParams, CollectDetail[]>;\n\nexport const getWeixinCollection: PublishAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        },\n    });\n    const fingerprint = \"4695500bc93ab4ce8fb2692da6564e04\";\n\n    const res = await http.api<CollectDetailResponse>({\n        method: \"get\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/appmsgalbummgr\",\n        params: {\n            action: \"list\",\n            begin: 0,\n            count: 100,\n            sub_title: \"\",\n            type: 0,\n            latest: 1,\n            need_pay: 0,\n            fingerprint,\n            token: params.token,\n            lang: \"zh_CN\",\n            f: \"json\",\n            ajax: 1,\n        },\n    });\n\n    return success(\n        res.list_resp?.items ?? [],\n        res.base_resp.ret === 0 ? \"微信合计信息获取成功！\" : \"微信合集信息获取失败！\",\n    );\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetWeixinConfigParams extends ActiomCommonParams {\n    token: string | number;\n}\n\ninterface QuotaDetail {\n    original_quota: number;\n    quota: number;\n    str_date: string;\n}\n\ninterface QuotaDetailResponse {\n    base_resp: { err_msg: string; ret: number };\n    quota_detail_list: { quota_item_list: QuotaDetail; quota_type: string }[];\n}\n\nexport interface ConfigData {\n    publishQuota: QuotaDetail[];\n}\n\nexport type PublishAction = CommonAction<GetWeixinConfigParams, ConfigData>;\n\nexport const getWeixinConfig: PublishAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        },\n    });\n    const fingerprint = \"4695500bc93ab4ce8fb2692da6564e04\";\n\n    const res = await http.api<QuotaDetailResponse>({\n        method: \"get\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/masssendpage\",\n        params: {\n            f: \"json\",\n            token: params.token,\n            lang: \"zh_CN\",\n            ajax: 1,\n            fingerprint: fingerprint,\n            random: Math.random().toString(),\n        },\n    });\n    const filtered = {\n        publishQuota:\n            res.base_resp.ret === 0\n                ? res.quota_detail_list\n                      .filter((item) => item.quota_type === \"kQuotaTypeMassSendNormal\")\n                      .map((item) => item.quota_item_list)\n                : [],\n    };\n    return success(filtered, res.base_resp.ret === 0 ? \"微信配置信息获取成功！\" : \"微信配置信息获取失败！\");\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface CollectionResponse {\n    success: boolean;\n    result: number;\n    data: {\n        has_more: boolean;\n        collection_info_list: CollectionDetail[];\n    };\n}\n\nexport const CollectionDetailSchema = z.object({\n    id: z.string(),\n    name: z.string(),\n    icon: z.string(),\n    note_num: z.number(),\n    view_num: z.number(),\n    paid: z.number(),\n    type: z.number(),\n    collected: z.boolean(),\n    desc: z.string(),\n    total_episodes: z.number(),\n    create_time: z.number(),\n});\n\nexport type CollectionDetail = z.infer<typeof CollectionDetailSchema>;\n\nexport type PublishAction = CommonAction<ActiomCommonParams, CollectionDetail[]>;\n\nexport const getXhsCollection: PublishAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com\",\n        origin: \"https://creator.xiaohongshu.com\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: [] };\n    const fatchCollextion = \"/api/sns/v1/note/collection/pc/list_v2\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const colletionData = { cursor: \"\", need_type_list: [0], target_uid: \"\" };\n    const collectionXsHeader = xsEncrypt.signHeadersPost(fatchCollextion, recordCookie, \"xhs-pc-web\", colletionData);\n\n    const res = await http.api<CollectionResponse>(\n        {\n            method: \"POST\",\n            url: \"https://edith.xiaohongshu.com/api/sns/v1/note/collection/pc/list_v2\",\n            data: colletionData,\n            headers: collectionXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.result === 0;\n    const message = `合集信息获取${isSuccess ? \"成功!\" : \"失败!\"}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data.collection_info_list : [];\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface GroupListResponse {\n    success: boolean;\n    msg: string;\n    data: {\n        group_list: GroupDetail[];\n    };\n    code: number;\n}\n\nexport const GroupDetailSchema = z.object({\n    avatar: z.string(),\n    desc: z.string(),\n    group_id: z.string(),\n    group_name: z.string(),\n    linkable: z.boolean(),\n});\nexport type GroupDetail = z.infer<typeof GroupDetailSchema>;\n\nexport type PublishAction = CommonAction<ActiomCommonParams, GroupDetail[]>;\n\nexport const getXhsGroup: PublishAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com\",\n        origin: \"https://creator.xiaohongshu.com\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: [] };\n\n    const groupListParams = { note_id: \"\" };\n    const fatchGroup = \"/api/im/web/nns/group_list\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const searchXsHeader = xsEncrypt.signHeadersGet(fatchGroup, recordCookie, \"xhs-pc-web\", groupListParams);\n\n    const res = await http.api<GroupListResponse>(\n        {\n            method: \"get\",\n            url: \"https://edith.xiaohongshu.com/api/im/web/nns/group_list\",\n            params: groupListParams,\n            headers: searchXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.code === 0;\n    const message = `群聊信息获取${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data.group_list : [];\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface HotTopicResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n    data: {\n        activity_list: HotTopicDetail[];\n    };\n}\n\nexport interface HotTopicDetail {\n    page_id: string;\n    activity_name: string;\n    start_time: number;\n    activity_status: number;\n    capa_deep_link: string;\n    instance_id: number;\n    activity_id: number;\n    end_time: number;\n    picture_link: string;\n    focus_status: number;\n    activity_reward: string;\n    activity_link: string;\n    sort_score: string;\n    pc_post_link: string;\n    topic_infos: [\n        {\n            id: string;\n            name: string;\n            link: string;\n        },\n    ];\n}\n\nexport type PublishAction = CommonAction<ActiomCommonParams, HotTopicDetail[]>;\n\nexport const getXhsHotTopic: PublishAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com\",\n        origin: \"https://creator.xiaohongshu.com\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: [] };\n\n    const hotTopicParams = {\n        sort: 1,\n        type: 1,\n        source: 3,\n        topic_activity: 1,\n    };\n    const fatchTopic = \"/api/galaxy/v2/creator/activity_center/list\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const searchXsHeader = xsEncrypt.signHeadersGet(fatchTopic, recordCookie, \"xhs-pc-web\", hotTopicParams);\n\n    const res = await http.api<HotTopicResponse>(\n        {\n            method: \"get\",\n            url: \"https://creator.xiaohongshu.com/api/galaxy/v2/creator/activity_center/list\",\n            params: hotTopicParams,\n            headers: searchXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.code === 0;\n    const message = `热门信息获取${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data.activity_list : [];\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport const UnreadCountSchema = z.object({\n    connections: z.number().nullable(),\n    mentions: z.number().nullable(),\n    unread_count: z.number().nullable(),\n    likes: z.number().nullable(),\n});\n\nexport type UnreadCount = z.infer<typeof UnreadCountSchema>;\n\nexport type PublishAction = CommonAction<ActiomCommonParams, UnreadCount>;\n\nexport const getXhsUnreadCount: PublishAction = async (_task, params) => {\n    if (DisabledReq) return success({ connections: 0, mentions: 0, unread_count: 0, likes: 0 }, \"获取未读消息数成功\");\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    let unreadCount: UnreadCount = {\n        connections: null,\n        mentions: null,\n        unread_count: null,\n        likes: null,\n    };\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: unreadCount };\n\n    const apiPath = \"/api/sns/web/unread_count\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const requestData = {};\n    const xsHeader = xsEncrypt.signHeadersPost(apiPath, recordCookie, \"xhs-pc-web\", requestData);\n\n    const res = await http.api<{ code: number; msg: string; data: UnreadCount }>(\n        {\n            method: \"GET\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/unread_count\",\n            data: requestData,\n            headers: xsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.code === 0;\n    if (isSuccess) unreadCount = res.data;\n    const message = `获取未读消息数${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    // return response(isSuccess ? 0 : 414, message, unreadCount);\n    return success(unreadCount, message);\n};\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport { errorResponse } from \"../../types\";\nimport { TimeFormatter } from \"../../utils\";\nimport { Http } from \"../../utils/http\";\nimport { type SearchAccountInfoParams } from \".\";\nimport { bjhConfigData, SearchAccountInfoResponse } from \"./types\";\n\nexport async function getBaijiahaoData(\n    _task: AutomateTask,\n    params: SearchAccountInfoParams,\n): Promise<SearchAccountInfoResponse> {\n    const { token } = params;\n    if (!token) return errorResponse(\"缺少token\", 414);\n\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            token: String(token),\n            Referer: \"https://baijiahao.baidu.com/builder/rc/home\",\n        },\n    });\n\n    const yesterday = TimeFormatter.format(new Date().setDate(new Date().getDate() - 1), \"yyyyMMdd\");\n    const [fansData, readData, incomeData, yesterdayData] = await Promise.all([\n        http.api<{ errno: number; data: { coreData: { fansCount: number } } }>({\n            method: \"get\",\n            url: \"https://baijiahao.baidu.com/pcui/home/index\",\n        }),\n        http.api<{ errno: number; data: { total: { view_count: number } } }>({\n            method: \"get\",\n            url: \"https://baijiahao.baidu.com/author/eco/statistic/getauthorhistory\",\n        }),\n        http.api<{ errno: number; data: { all_income: { total_income: number; yesterday_income: number } } }>({\n            method: \"get\",\n            url: \"https://baijiahao.baidu.com/author/eco/income4/homepageincome\",\n        }),\n        http.api<{\n            errno: number;\n            data: {\n                data: {\n                    recommend_count: number;\n                    view_count: number;\n                    likes_count: number;\n                    comment_count: number;\n                    fans_increase: number;\n                };\n            };\n        }>({\n            method: \"get\",\n            url: \"https://baijiahao.baidu.com/author/eco/statistics/appStatistic\",\n            params: {\n                type: \"all\",\n                is_yesterday: false,\n                start_day: yesterday,\n                end_day: yesterday,\n                stat: 0,\n            },\n        }),\n    ]);\n    if (fansData.errno !== 0 || readData.errno !== 0 || incomeData.errno !== 0 || yesterdayData.errno !== 0) {\n        return errorResponse(\"百家号数据获取失败，请检查账号状态\", 414);\n    }\n\n    const bjhData: bjhConfigData = {\n        fansNum: fansData.data.coreData.fansCount,\n        fansNumYesterday: yesterdayData.data.data.fans_increase === -1 ? null : yesterdayData.data.data.fans_increase,\n        readNum: readData.data.total.view_count,\n        incomeNum: incomeData.data.all_income.total_income,\n        incomeNumYesterday:\n            incomeData.data.all_income.yesterday_income === -1 ? null : incomeData.data.all_income.yesterday_income,\n        recommendNumYesterday:\n            yesterdayData.data.data.recommend_count === -1 ? null : yesterdayData.data.data.recommend_count,\n        readNumYesterday: yesterdayData.data.data.view_count === -1 ? null : yesterdayData.data.data.view_count,\n        likeNumYesterday: yesterdayData.data.data.likes_count === -1 ? null : yesterdayData.data.data.likes_count,\n        commentNumYesterday:\n            yesterdayData.data.data.comment_count === -1 ? null : yesterdayData.data.data.comment_count,\n    };\n\n    return success(bjhData, \"百家号平台数据获取成功！\");\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport { AxiosProxyParams, errorResponse } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport type { SearchAccountInfoParams } from \".\";\nimport { type douyinConfigData, type SearchAccountInfoResponse } from \"./types\";\n\n/**\n * 抖音账号数据采集\n *\n * 核心接口：\n * 1. 用户完整信息: GET /aweme/v1/web/user/profile/self/\n *    返回 user.follower_count（粉丝）、user.following_count（关注）、user.total_favorited（获赞）等\n * 2. 近7日数据概览: GET /aweme/janus/creator/data/overview/all/?last_days_type=1\n *\n * 注意: 近7日数据接口需要 msToken / a_bogus 动态参数，\n * 建议通过 Playwright 复用已登录浏览器上下文请求（详见文档 3.2）。\n * 此处直接请求，若被风控拦截会返回对应错误，昨日/近7日数据降级为 0。\n */\nexport async function getDouyinData(\n    _task: AutomateTask,\n    params: SearchAccountInfoParams,\n): Promise<SearchAccountInfoResponse> {\n    try {\n        // 验证关键 cookie（参考文档 3.1）\n        const sessionidCookie = params.cookies.find((it) => it.name === \"sessionid\")?.value;\n        if (!sessionidCookie) {\n            return errorResponse(\"抖音账号数据异常，请重新绑定账号后重试。\", 414);\n        }\n\n        // CSRF token（部分接口需要）\n        const csrfToken = params.cookies.find((it) => it.name === \"passport_csrf_token\")?.value || \"\";\n\n        const headers = {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://creator.douyin.com/creator-micro/home\",\n            origin: \"https://creator.douyin.com\",\n            \"user-agent\":\n                \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36\",\n            ...(csrfToken ? { \"x-secsdk-csrf-token\": csrfToken } : {}),\n        };\n\n        const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n\n        const http = new Http(...args);\n\n        // 数值解析（文档中的计数字段为字符串，如 \"12345\"、\"+10\"）\n        const toNum = (val: string | number | undefined | null): number => {\n            if (val === undefined || val === null) return 0;\n            const n = Number.parseInt(String(val).replace(/[+,]/g, \"\"), 10);\n            return Number.isNaN(n) ? 0 : n;\n        };\n\n        // 1. 获取用户完整信息（粉丝数、关注数、获赞数、作品数等）\n        const userProfileP = http\n            .api<{\n                status_code?: number;\n                status_msg?: string;\n                user?: {\n                    follower_count?: number;\n                    following_count?: number;\n                    total_favorited?: number;\n                    aweme_count?: number;\n                    nickname?: string;\n                    uid?: string;\n                };\n            }>(\n                {\n                    method: \"get\",\n                    url: \"https://www.douyin.com/aweme/v1/web/user/profile/self/\",\n                    params: {\n                        device_platform: \"webapp\",\n                        aid: \"6383\",\n                        channel: \"channel_pc_web\",\n                        pc_client_type: \"1\",\n                        version_code: \"170400\",\n                        version_name: \"17.4.0\",\n                        cookie_enabled: \"true\",\n                        platform: \"PC\",\n                    },\n                },\n                { retries: 3, retryDelay: 100, timeout: 10000 },\n            )\n            .catch((e) => {\n                _task.logger.warn(`抖音用户信息获取失败: ${e instanceof Error ? e.message : String(e)}`);\n                return null;\n            });\n\n        // 2. 近7日数据概览\n        const overviewP = http\n            .api<{\n                status_code?: number;\n                data?: {\n                    new_fans?: { last_period_incr?: string };\n                    play?: { last_period_incr?: string };\n                    digg?: { last_period_incr?: string };\n                    comment?: { last_period_incr?: string };\n                    share?: { last_period_incr?: string };\n                    profile?: { last_period_incr?: string };\n                };\n            }>(\n                {\n                    method: \"get\",\n                    url: \"https://creator.douyin.com/aweme/janus/creator/data/overview/all/\",\n                    params: {\n                        last_days_type: 1, // 近7日\n                        aid: 2906,\n                        app_name: \"aweme_creator_platform\",\n                        device_platform: \"web\",\n                    },\n                },\n                { retries: 3, retryDelay: 100, timeout: 5000 },\n            )\n            .catch((e) => {\n                _task.logger.warn(\n                    `抖音近7日数据获取失败（可能未开通数据中心或被风控）: ${e instanceof Error ? e.message : String(e)}`,\n                );\n                return null;\n            });\n\n        const [userProfile, overview] = await Promise.all([userProfileP, overviewP]);\n        // _task.logger.info(`抖音用户信息响应: ${JSON.stringify(userProfile)}`);\n        // _task.logger.info(`抖音近7日数据响应: ${JSON.stringify(overview)}`);\n\n        // 从 API 响应提取统计数据\n        let fansNum = 0;\n        let favedNum = 0;\n        let followingNum = 0;\n\n        if (userProfile?.status_code === 0 && userProfile.user) {\n            const user = userProfile.user;\n            fansNum = toNum(user.follower_count);\n            followingNum = toNum(user.following_count);\n            favedNum = toNum(user.total_favorited);\n\n            // _task.logger.info(\n            //     `提取用户数据 - 昵称: ${user.nickname}, 粉丝: ${fansNum}, 关注: ${followingNum}, 获赞: ${favedNum}, 作品: ${user.aweme_count}`,\n            // );\n        } else {\n            _task.logger.warn(\n                `用户信息接口返回异常: status_code=${userProfile?.status_code}, msg=${userProfile?.status_msg}`,\n            );\n        }\n\n        const ov = overview?.data;\n        const douyinData: douyinConfigData = {\n            fansNum, // 从 /aweme/v1/web/user/profile/self/ 接口提取\n            favedNum, // 从 /aweme/v1/web/user/profile/self/ 接口提取\n            fansNumLastWeek: toNum(ov?.new_fans?.last_period_incr),\n            watchNumLastWeek: toNum(ov?.play?.last_period_incr),\n            likeNumLastWeek: toNum(ov?.digg?.last_period_incr),\n            commentNumLastWeek: toNum(ov?.comment?.last_period_incr),\n            shareNumLastWeek: toNum(ov?.share?.last_period_incr),\n            visitNumLastWeek: toNum(ov?.profile?.last_period_incr),\n        };\n\n        return success(douyinData, \"抖音平台数据获取成功！\");\n    } catch (error) {\n        // http 层抛出的是 ResponseData（{code, message, data}），\n        // 直接透传以保留代理超时等场景的错误码与友好提示（如 599 / 414）\n        if (error && typeof error === \"object\" && \"code\" in error && \"message\" in error) {\n            const err = error as { code: number; message: string; data: unknown };\n            _task.logger.error(`抖音账号数据获取失败: ${err.message} (${err.code})`);\n            return errorResponse(err.message, err.code);\n        }\n\n        const errMsg = error instanceof Error ? error.message : String(error);\n        _task.logger.error(`抖音账号数据获取失败: ${errMsg}`);\n        return errorResponse(errMsg || \"抖音账号数据获取失败\");\n    }\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport { AxiosProxyParams, errorResponse } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport type { SearchAccountInfoParams } from \".\";\nimport { type SearchAccountInfoResponse, type shipinhaoConfigData } from \"./types\";\n\n/**\n * 视频号账号数据采集\n *\n * 参考《API接口文档-抖音和视频号数据采集》 2.1:\n * POST /cgi-bin/mmfinderassistant-bin/auth/auth_data\n *\n * auth_data 返回账号基础信息（粉丝数、作品数）。\n * 昨日数据（净增关注/新增播放/喜欢/评论）需调用专门的统计接口，\n * auth_data 本身不返回，因此这些字段降级为 null。\n */\nexport async function getShipinhaoData(\n    _task: AutomateTask,\n    params: SearchAccountInfoParams,\n): Promise<SearchAccountInfoResponse> {\n    try {\n        // 验证关键 cookie（参考文档 3.1：视频号只需 sessionid）\n        const sessionidCookie = params.cookies.find((it) => it.name === \"sessionid\")?.value;\n        if (!sessionidCookie) {\n            return errorResponse(\"视频号账号数据异常，请重新绑定账号后重试。\", 414);\n        }\n\n        // 提取必需的请求头信息\n        const uinCookie = params.cookies.find((it) => it.name === \"uin\" || it.name === \"wxuin\")?.value || \"0000000000\";\n        const deviceIdCookie = params.cookies.find(\n            (it) => it.name === \"device_id\" || it.name === \"finger_print_device_id\",\n        )?.value;\n        const aid = params.cookies.find((it) => it.name === \"_aid\")?.value || \"9d3e0e9f-b842-498d-a273-4285d58df264\";\n        const finderId =\n            params.cookies.find((it) => it.name === \"_log_finder_id\" || it.name === \"finder_id\")?.value || \"\";\n\n        const headers = {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://channels.weixin.qq.com/platform\",\n            origin: \"https://channels.weixin.qq.com\",\n            \"content-type\": \"application/json\",\n            \"X-WECHAT-UIN\": uinCookie,\n            ...(deviceIdCookie ? { \"finger-print-device-id\": deviceIdCookie } : {}),\n        };\n\n        const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n\n        const http = new Http(...args);\n\n        // 2.1 账号数据接口 auth_data\n        const authData = await http.api<{\n            errCode?: number;\n            errMsg?: string;\n            data?: {\n                userAttr?: {\n                    nickname?: string;\n                    encryptedUsername?: string;\n                };\n                // finderUser 在 data 顶层，包含粉丝数、作品数等核心数据\n                finderUser?: {\n                    nickname?: string;\n                    fansCount?: number; // 粉丝数\n                    feedsCount?: number; // 作品总数\n                    uniqId?: string; // 视频号ID\n                    acctType?: number;\n                };\n            };\n        }>(\n            {\n                method: \"post\",\n                url: \"https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/auth/auth_data\",\n                params: {\n                    _aid: aid,\n                    _rid: `${Date.now().toString(16)}-${Math.random().toString(36).substring(2, 9)}`,\n                    _pageUrl: encodeURIComponent(\"https://channels.weixin.qq.com/platform\"),\n                },\n                data: {\n                    timestamp: Date.now().toString(),\n                    _log_finder_uin: \"\",\n                    _log_finder_id: finderId,\n                    rawKeyBuff: \"\",\n                    pluginSessionId: null,\n                    scene: 7,\n                    reqScene: 7,\n                },\n            },\n            { retries: 3, retryDelay: 100, timeout: 5000 },\n        );\n\n        // _task.logger.info(`视频号账号数据响应: ${JSON.stringify(authData)}`);\n\n        // 认证相关的错误码（与 handleShipinhaoData 保持一致）\n        const AUTH_ERROR_CODES = [300333, 300334, 300330, 300331, 300332];\n\n        // 检查认证错误：登录失效返回 414，与其他平台一致\n        if (authData.errCode && AUTH_ERROR_CODES.includes(authData.errCode)) {\n            _task.logger.warn(`视频号登录已失效：${authData.errMsg} (${authData.errCode})`);\n            return errorResponse(\"视频号账号信息获取失败，请检查账号状态\", 414);\n        }\n\n        // 其他 API 错误\n        if (authData.errCode) {\n            _task.logger.warn(`视频号账号API错误：${authData.errMsg} (${authData.errCode})`);\n            return errorResponse(`视频号账号信息获取失败：${authData.errMsg || \"未知错误\"}`, 414);\n        }\n\n        // finderUser 在 data 顶层，包含粉丝数、作品数\n        const finderUser = authData.data?.finderUser;\n\n        // 2.2 获取昨日数据（new_post_total_data 接口）\n        const now = new Date();\n        const yesterday = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 2); // 与网页一致\n        const startTs = Math.floor(yesterday.getTime() / 1000); // 昨日 00:00:00\n        const endTs = startTs + 86400;\n\n        _task.logger.info(`视频号昨日数据范围 start: ${startTs} ~ end: ${endTs}`);\n\n        let fansNumYesterday: number = 0;\n        let playNumYesterday: number = 0;\n        let likeNumYesterday: number = 0;\n        let commentNumYesterday: number = 0;\n\n        try {\n            const statsData = await http.api<{\n                errCode?: number;\n                errMsg?: string;\n                data?: {\n                    totalData?: {\n                        browse?: string[];\n                        like?: string[];\n                        comment?: string[];\n                        follow?: string[];\n                    };\n                };\n            }>(\n                {\n                    method: \"post\",\n                    url: \"https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/statistic/new_post_total_data\",\n                    params: {\n                        _aid: aid,\n                        _rid: `${Date.now().toString(16)}-${Math.random().toString(36).substring(2, 9)}`,\n                        _pageUrl: encodeURIComponent(\"https://channels.weixin.qq.com/platform\"),\n                    },\n                    data: {\n                        startTs: startTs.toString(),\n                        endTs: endTs.toString(),\n                        interval: 3,\n                        timestamp: Date.now().toString(),\n                        _log_finder_uin: \"\",\n                        _log_finder_id: finderId,\n                        rawKeyBuff: \"\",\n                        pluginSessionId: null,\n                        scene: 7,\n                        reqScene: 7,\n                    },\n                },\n                { retries: 3, retryDelay: 100, timeout: 5000 },\n            );\n\n            // _task.logger.info(`视频号昨日数据响应: ${JSON.stringify(statsData)}`);\n\n            // 不对昨日数据接口的错误做中断处理，降级为 null\n            if (!statsData.errCode && statsData.data?.totalData) {\n                // 直接从 totalData 提取汇总数据，数组第一个值是昨日数据\n                const data = statsData.data.totalData;\n                fansNumYesterday = Number.parseInt(data.follow?.[1] || \"0\", 10) || 0;\n                playNumYesterday = Number.parseInt(data.browse?.[1] || \"0\", 10) || 0;\n                likeNumYesterday = Number.parseInt(data.like?.[1] || \"0\", 10) || 0;\n                commentNumYesterday = Number.parseInt(data.comment?.[1] || \"0\", 10) || 0;\n\n                // _task.logger.info(\n                //     `视频号昨日数据提取成功 - 净增关注:${fansNumYesterday}, 播放:${playNumYesterday}, 喜欢:${likeNumYesterday}, 评论:${commentNumYesterday}`,\n                // );\n            }\n        } catch (error) {\n            const errMsg = error instanceof Error ? error.message : String(error);\n            _task.logger.warn(`视频号昨日数据获取失败（降级为null）: ${errMsg}`);\n        }\n\n        const shipinhaoData: shipinhaoConfigData = {\n            fansNum: finderUser?.fansCount || 0, // 粉丝数\n            feedsCount: finderUser?.feedsCount || 0, // 作品总数（不区分视频/图文）\n            fansNumYesterday,\n            playNumYesterday,\n            likeNumYesterday,\n            commentNumYesterday,\n        };\n        return success(shipinhaoData, \"视频号平台数据获取成功！\");\n    } catch (error) {\n        // http 层抛出的是 ResponseData（{code, message, data}），\n        // 直接透传以保留代理超时等场景的错误码与友好提示（如 599 / 414）\n        if (error && typeof error === \"object\" && \"code\" in error && \"message\" in error) {\n            const err = error as { code: number; message: string; data: unknown };\n            _task.logger.error(`视频号账号数据获取失败: ${err.message} (${err.code})`);\n            return errorResponse(err.message, err.code);\n        }\n\n        const errMsg = error instanceof Error ? error.message : String(error);\n        _task.logger.error(`视频号账号数据获取失败: ${errMsg}`);\n        return errorResponse(errMsg || \"视频号账号数据获取失败\");\n    }\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport { errorResponse } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { type SearchAccountInfoParams } from \".\";\nimport { SearchAccountInfoResponse, ttConfigData } from \"./types\";\n\nexport async function getToutiaoData(\n    _task: AutomateTask,\n    params: SearchAccountInfoParams,\n): Promise<SearchAccountInfoResponse> {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n            \"user-agent\":\n                \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36\",\n        },\n    });\n\n    const totalData = await http.api<{\n        message: string;\n        data?: {\n            statistic: {\n                data: {\n                    total_subscribe_count: string;\n                    total_read_play_count: string;\n                    total_income: number;\n                    yesterday_income: number;\n                    is_yesterday_income_ready: boolean;\n                    yesterday_fans?: string;\n                    yesterday_play_count: string;\n                    yesterday_read_count: string;\n                };\n            };\n        };\n    }>({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/mp/fe_api/home/merge_v2\",\n        params: { app_id: 1231 },\n    });\n\n    await new Promise((r) => setTimeout(r, 1000));\n\n    const contentDataYesterday = await http.api<{\n        message: string;\n        author_stat?: {\n            consume_data: { impression_count: number; go_detail_count: number };\n            interaction_data: { comment_count: number; digg_count: number };\n        };\n    }>({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/mp/agw/statistic/v2/content_stat\",\n        params: { type: 0, app_id: 1231 },\n    });\n\n    const isSuccess = !!(totalData?.data?.statistic && contentDataYesterday?.author_stat);\n\n    if (!isSuccess || !totalData?.data || !contentDataYesterday?.author_stat) {\n        return errorResponse(\n            totalData?.message || contentDataYesterday?.message || \"头条号数据获取失败，请检查Cookie是否有效\",\n            414,\n        );\n    }\n\n    const ttData: ttConfigData = {\n        fansNum: Number(totalData.data.statistic.data.total_subscribe_count),\n        fansNumYesterday:\n            totalData.data.statistic.data.yesterday_fans !== undefined\n                ? Number(totalData.data.statistic.data.yesterday_fans)\n                : null,\n        readNum: Number(totalData.data?.statistic.data.total_read_play_count),\n        incomeNum: totalData.data?.statistic.data.total_income,\n        incomeNumYesterday: totalData.data?.statistic.data.is_yesterday_income_ready\n            ? totalData.data.statistic.data.yesterday_income\n            : null,\n        showNumYesterday: contentDataYesterday.author_stat.consume_data.impression_count,\n        readNumYesterday: contentDataYesterday.author_stat.consume_data.go_detail_count,\n        likeNumYesterday: contentDataYesterday.author_stat.interaction_data.digg_count,\n        commentNumYesterday: contentDataYesterday.author_stat.interaction_data.comment_count,\n    };\n\n    return success(ttData, \"头条号粉丝数据获取成功！\");\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport { DomUtils, parseDocument } from \"htmlparser2\";\nimport vm from \"vm\";\nimport { errorResponse } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { type SearchAccountInfoParams } from \".\";\nimport { SearchAccountInfoResponse, wxConfigData } from \"./types\";\n\ntype summaryData = { data_range_type: number; data_value: number }[];\nconst exportWxCgiData = (\n    html: string,\n): {\n    total_friend_cnt: number;\n    new_friend_cnt: number;\n    read_summary: summaryData;\n    share_summary: summaryData;\n} => {\n    // 1. 解析 HTML\n    const document = parseDocument(html);\n\n    // 2. 找所有 script 标签\n    const scripts = DomUtils.findAll((el) => el.type === \"script\", document.children);\n\n    // 3. 准备 vm 沙箱\n    const sandbox: any = {\n        window: {},\n    };\n    sandbox.window.wx = {};\n    sandbox.wx = sandbox.window.wx;\n\n    vm.createContext(sandbox);\n\n    // 4. 执行包含 wx.cgiData 的脚本\n    for (const script of scripts) {\n        const code = DomUtils.textContent(script);\n\n        if (!code) continue;\n\n        if (code.includes(\"wx.cgiData\")) {\n            try {\n                vm.runInContext(code, sandbox, {\n                    timeout: 1000,\n                });\n            } catch (e) {\n                // 非关键脚本可忽略\n            }\n        }\n    }\n\n    // 5. 返回结果\n    return sandbox.window.wx.cgiData;\n};\n\nexport async function getWeixinData(\n    _task: AutomateTask,\n    params: SearchAccountInfoParams,\n): Promise<SearchAccountInfoResponse> {\n    const { token } = params;\n\n    if (!token) return { code: 414, message: \"缺少token\", data: null };\n\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        },\n    });\n    const userInfo = {\n        originalCount: 0,\n        totalUsers: 0,\n        userIncrease: 0,\n        yesterday: {\n            read: 0,\n            share: 0,\n            subscribe: 0,\n        },\n    };\n    const userInfoHtmlPromise = http.api<string>({\n        method: \"get\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/home\",\n        params: {\n            t: \"home/index\",\n            token,\n            lang: \"zh_CN\",\n        },\n    });\n    const userSummaryHtmlPromise = http.api<string>({\n        method: \"get\",\n        url: \"https://mp.weixin.qq.com/misc/appmsganalysis\",\n        params: {\n            token,\n            lang: \"zh_CN\",\n            type: \"daily_v2\",\n            action: \"report\",\n            indicatorSelect: \"read\",\n        },\n    });\n\n    const [userInfoHtml, userSummaryHtml] = await Promise.all([userInfoHtmlPromise, userSummaryHtmlPromise]);\n\n    if (userInfoHtml.includes(\"请重新<a id='jumpUrl' href='/'>登录</a>\"))\n        return errorResponse(\"微信公众号数据获取失败，请检查账号状态\", 414);\n\n    const userInfoJson = exportWxCgiData(userInfoHtml);\n    const userSummaryJson = exportWxCgiData(userSummaryHtml);\n\n    const wxData: wxConfigData = {\n        fansNum: userInfoJson.total_friend_cnt,\n        fansNumYesterday: userInfoJson.new_friend_cnt,\n        readNumYesterday: userSummaryJson.read_summary.filter((it) => it.data_range_type === 1)[0]?.data_value || 0,\n        shareNumYesterday: userSummaryJson.share_summary.filter((it) => it.data_range_type === 1)[0]?.data_value || 0,\n    };\n\n    return success(wxData, \"微信平台数据获取成功！\");\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport { AxiosProxyParams, errorResponse } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\nimport type { SearchAccountInfoParams } from \".\";\nimport { type SearchAccountInfoResponse, type xhsConfigData } from \"./types\";\n\nexport async function getXiaohongshuData(\n    _task: AutomateTask,\n    params: SearchAccountInfoParams,\n): Promise<SearchAccountInfoResponse> {\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) {\n        return errorResponse(\"账号数据异常，请重新绑定账号后重试。\", 414);\n    }\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com\",\n        origin: \"https://creator.xiaohongshu.com\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n    const xsEncrypt = new Xhshow();\n\n    const sevenDataUrl = \"/api/galaxy/v2/creator/datacenter/account/base\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const sevenDataXsHeader = xsEncrypt.signHeadersGet(sevenDataUrl, recordCookie, \"xhs-pc-web\", null);\n\n    const [overAllData, sevenData] = await Promise.all([\n        http.api<{ data: { fans_count: number; faved_count: number } }>(\n            {\n                method: \"get\",\n                url: \"https://creator.xiaohongshu.com/api/galaxy/creator/home/personal_info\",\n            },\n            { retries: 3, retryDelay: 20, timeout: 3000 },\n        ),\n        http.api<{\n            data: {\n                seven: {\n                    view_count: number;\n                    like_count: number;\n                    collect_count: number;\n                    comment_count: number;\n                    rise_fans_count: number;\n                    rise_fans_list: { data: number; count: number }[];\n                };\n            };\n        }>(\n            {\n                method: \"get\",\n                baseURL: \"https://creator.xiaohongshu.com\",\n                url: sevenDataUrl,\n                headers: sevenDataXsHeader,\n            },\n            { retries: 3, retryDelay: 20, timeout: 3000 },\n        ),\n    ]);\n\n    const xhsData: xhsConfigData = {\n        fansNum: overAllData.data.fans_count,\n        favedNum: overAllData.data.faved_count,\n        watchNumLastWeek: sevenData.data.seven.view_count,\n        likeNumLastWeek: sevenData.data.seven.like_count,\n        collectNumLastWeek: sevenData.data.seven.collect_count,\n        commentNumLastWeek: sevenData.data.seven.comment_count,\n        fansNumLastWeek: sevenData.data.seven.rise_fans_count,\n        fansNumYesterday: sevenData.data.seven.rise_fans_list[0].count,\n    };\n\n    return success(xhsData, \"小红书平台数据获取成功！\");\n}\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\nimport { getBaijiahaoData } from \"./getBjhInfo\";\nimport { getDouyinData } from \"./getDouyinInfo\";\nimport { getShipinhaoData } from \"./getShipinhaoInfo\";\nimport { getToutiaoData } from \"./getTTInfo\";\nimport { getWeixinData } from \"./getWxInfo\";\nimport { getXiaohongshuData } from \"./getXhsInfo\";\nimport {\n    bjhConfigData,\n    douyinConfigData,\n    shipinhaoConfigData,\n    ttConfigData,\n    wxConfigData,\n    xhsConfigData,\n} from \"./types\";\n\nexport const SearchAccountInfoParamsSchema = ActionCommonParamsSchema.extend({\n    token: z.union([z.string(), z.number()]).optional(),\n    platform: z.enum([\"toutiao\", \"xiaohongshu\", \"weixin\", \"baijiahao\", \"douyin\", \"shipinhao\"]),\n});\n\nexport type SearchAccountInfoParams = z.infer<typeof SearchAccountInfoParamsSchema>;\n\nexport const SearchAccountInfo: CommonAction<\n    SearchAccountInfoParams,\n    ttConfigData | xhsConfigData | wxConfigData | bjhConfigData | douyinConfigData | shipinhaoConfigData | null\n> = async (_task, params) => {\n    const { platform } = params;\n    switch (platform) {\n        case \"toutiao\":\n            return getToutiaoData(_task, params);\n        case \"xiaohongshu\":\n            return getXiaohongshuData(_task, params);\n        case \"weixin\":\n            return getWeixinData(_task, params);\n        case \"baijiahao\":\n            return getBaijiahaoData(_task, params);\n        case \"douyin\":\n            return getDouyinData(_task, params);\n        case \"shipinhao\":\n            return getShipinhaoData(_task, params);\n        default:\n            return success(null, \"暂不支持该平台\");\n    }\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface SearchBjhTopicListParams extends ActiomCommonParams {\n    token: string;\n    topicContent: string;\n}\n\nexport interface TopicData {\n    title: string;\n    id: string;\n}\n\nexport type PublishAction = CommonAction<SearchBjhTopicListParams, TopicData[]>;\n\nexport const searchBjhTopicList: PublishAction = async (_task, params) => {\n    const cookies = params.cookies ?? [];\n\n    const http = new Http({\n        headers: {\n            cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            token: params.token,\n        },\n    });\n\n    const res = await http.api<{ errno: number; data: { hot: TopicData[] } }>({\n        method: \"get\",\n        url: \"https://baijiahao.baidu.com/pcui/pcpublisher/searchtopic\",\n        params: {\n            content: params.topicContent,\n            resource_type: 1,\n        },\n    });\n\n    return success(res?.data?.hot ?? [], `百家号${res.errno === 0 ? \"话题获取成功！\" : \"话题获取失败\"}`);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface searchBjhUserArticleParams extends ActiomCommonParams {\n    searchValue: string;\n}\n\nconst parseBjhDom = (domString: string): string => {\n    const match = domString.match(/\"uk\"\\s*:\\s*\"([^\"]+)\"/);\n    if (!match) throw new Error(\"没有找到 runtime\");\n    return match[1].trim();\n};\n\nexport type PublishAction = CommonAction<searchBjhUserArticleParams, Record<string, unknown>[]>;\n\nexport const searchBjhUserArticle: PublishAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: \"Hmery-Time=948577917; BAIDUID=5A704A91E4CBAFBE1421F0CA634ACA7E:FG=1; BAIDUID_BFESS=5A704A91E4CBAFBE1421F0CA634ACA7E:FG=1\",\n        },\n    });\n\n    // if (!a1Cookie) return {code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: []};\n    if (params.searchValue.indexOf(\"home?from=bjh_article\") === -1)\n        return { code: 414, message: \"请输入正确的百家号用户主页链接地址！\", data: [] };\n\n    const result = await http.api<string>({\n        method: \"get\",\n        url: params.searchValue,\n        defaultErrorMsg: \"用户搜索异常，请稍后重试。\",\n    });\n\n    const runtime = parseBjhDom(result);\n\n    const detailJson = await http.api<{ errno: number; data?: { list: Record<string, unknown>[] } }>({\n        method: \"get\",\n        url: \"https://mbd.baidu.com/webpage/\",\n        params: {\n            tab: \"main\",\n            num: 10,\n            uk: runtime,\n            source: \"pc\",\n            type: \"newhome\",\n            action: \"dynamic\",\n            format: \"json\",\n        },\n    });\n    console.log(detailJson);\n\n    return success(detailJson.data?.list ?? [], `搜索用户相关数据${detailJson.errno === 0 ? \"成功！\" : \"失败！\"}`);\n};\n","// 文章公共属性\nimport { z } from \"zod\";\n\n// 文章公共属性\nconst BaseArticleSchema = z.object({\n    title: z.string(), // 文章标题\n    imageUrl: z.string(), // 图片地址\n    createTime: z.number(), // 发布时间\n    redirectUrl: z.string(), // 文章网页端地址\n    originalData: z.unknown().optional(), // 原始数据，可选\n});\n\n// 平台特定文章属性\nexport const ToutiaoArticleSchema = BaseArticleSchema.extend({\n    showNum: z.number(), // 展现量\n    readNum: z.number(), // 阅读量\n    likeNum: z.number(), // 点赞量\n    commentNum: z.number(), // 评论量\n});\nexport type ToutiaoArticle = z.infer<typeof ToutiaoArticleSchema>;\n\nexport const WeixinArticleSchema = BaseArticleSchema.extend({\n    readNum: z.number(), // 阅读人数\n    likeNum: z.number(), // 点赞人数\n    shareNum: z.number(), // 分享人数\n    recommendNum: z.number(), // 推荐人数\n});\nexport type WeixinArticle = z.infer<typeof WeixinArticleSchema>;\n\nexport const BaijiahaoArticleSchema = BaseArticleSchema.extend({\n    recommendNum: z.number(), // 推荐量\n    collectNum: z.number(), // 收藏量\n    readNum: z.number(), // 阅读量\n    likeNum: z.number(), // 点赞量\n    commentNum: z.number(), // 评论量\n    shareNum: z.number(), // 转发量\n});\nexport type BaijiahaoArticle = z.infer<typeof BaijiahaoArticleSchema>;\n\nexport const XiaohongshuArticleSchema = BaseArticleSchema.extend({\n    readNum: z.number(), // 阅读量\n    likeNum: z.number(), // 点赞量\n    commentNum: z.number(), // 评论量\n    collectNum: z.number(), // 收藏量\n    shareNum: z.number(), // 转发量\n});\nexport type XiaohongshuArticle = z.infer<typeof XiaohongshuArticleSchema>;\n\nexport const DouyinArticleSchema = BaseArticleSchema.extend({\n    playNum: z.number(), // 播放量\n    likeNum: z.number(), // 点赞量\n    commentNum: z.number(), // 评论量\n    shareNum: z.number(), // 分享数\n    collectNum: z.number(), // 收藏数\n    awemeId: z.string(), // 作品ID\n    awemeType: z.number(), // 作品类型：4=视频, 2=图文\n    duration: z.number().optional(), // 视频时长（毫秒）\n    status: z.string(), // 发布状态：public/private/reviewing\n    publicUrl: z.string(), // 作品公开访问URL\n});\nexport type DouyinArticle = z.infer<typeof DouyinArticleSchema>;\n\nexport const ShipinhaoArticleSchema = BaseArticleSchema.extend({\n    readNum: z.number(), // 阅读量\n    likeNum: z.number(), // 喜欢数\n    commentNum: z.number(), // 评论数\n    forwardNum: z.number(), // 转发数\n    favNum: z.number(), // 点赞数\n    objectId: z.string(), // 作品ID\n    postType: z.string(), // 作品类型：video/article\n    postStatus: z.number(), // 发布状态码\n    effectiveTime: z.number().optional(), // 定时发布时间（若存在）\n});\nexport type ShipinhaoArticle = z.infer<typeof ShipinhaoArticleSchema>;\n\n// 响应数据类型\nexport const FetchArticlesDataSchema = z.object({\n    articleCell: z\n        .array(\n            z.union([\n                ToutiaoArticleSchema,\n                WeixinArticleSchema,\n                BaijiahaoArticleSchema,\n                XiaohongshuArticleSchema,\n                DouyinArticleSchema,\n                ShipinhaoArticleSchema,\n            ]),\n        )\n        .optional(),\n    timerPublish: z\n        .array(\n            z.union([\n                ToutiaoArticleSchema,\n                WeixinArticleSchema,\n                BaijiahaoArticleSchema,\n                XiaohongshuArticleSchema,\n                DouyinArticleSchema,\n                ShipinhaoArticleSchema,\n            ]),\n        )\n        .optional(),\n    pagination: z\n        .object({\n            total: z.number().optional(), // 总条数\n            nextPage: z.boolean().optional(), // 是否有下一页\n            lastPage: z.number().optional(), // 用于维系游标所在页，提高查询速度\n            cursor: z.number().optional(), // 返回最终游标\n            pageNum: z.number(), // 当前页\n            pageSize: z.number(), // 每页大小\n        })\n        .optional(),\n});\n\nexport type FetchArticlesData = z.infer<typeof FetchArticlesDataSchema>;\nexport interface FetchArticlesResponse {\n    code: number;\n    message: string;\n    data: FetchArticlesData | Record<string, never>;\n}\n\nexport const errorResponse = (message: string, code = 500): FetchArticlesResponse => ({\n    code,\n    message,\n    data: {},\n});\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport { Http } from \"../../utils/http\";\nimport type { FetchArticlesParams } from \".\";\nimport { type BaijiahaoArticle, errorResponse, type FetchArticlesResponse } from \"./types\";\n\ninterface ArticleInfo {\n    abstract: string;\n    antispam_code: number;\n    app_id: string;\n    article_id: string;\n    article_set_nids: string;\n    audit_msg: string;\n    authentication_type: string;\n    auto_generate_id: string;\n    bad_status: string;\n    bjh_ext_info: string;\n    bjh_video_finger_printing: string;\n    call_slot: number;\n    commit_at: string;\n    content?: string;\n    cover_images: string;\n    cover_layout: string;\n    created_at: string;\n    creative_method: string;\n    deleted_at: string;\n    displaytype_exinfo: string;\n    domain: string;\n    dst_status: string;\n    ext_info: string;\n    feed_cat: string;\n    feed_id: string;\n    feed_id_from: number;\n    feed_push_amount: number;\n    feed_rs: string;\n    feed_source_id: string;\n    feed_sub_cat: string;\n    file_name: string;\n    first_exclusive_publish: number;\n    first_storage_time: number;\n    has_edited_times: number;\n    is_authenticated: number;\n    is_feed_import: number;\n    is_good: number;\n    is_pay: number;\n    is_published: number;\n    is_reported: number;\n    is_transfer?: number;\n    is_tagged: number;\n    is_wx_spread: number;\n    issue_status: number;\n    midway_issue_status: number;\n    mount_goods: number;\n    mthvideo: number;\n    nid: string;\n    open_comment: number;\n    open_front_page: number;\n    origin_app_id: string;\n    origin_id: string;\n    origin_url: string;\n    original_status: number;\n    pay_money: number;\n    platform_source: number;\n    provider: string;\n    publish_at: string;\n    publish_time: string;\n    publish_type: string;\n    quality: number;\n    quality_audit_type: string;\n    quality_not_pass_reason: string;\n    quality_status: string;\n    res_slot: string;\n    secure_not_pass_reason: string;\n    secure_status: string;\n    shoubai_c_articleid: string;\n    smp_url: string;\n    source_name: string;\n    source_reprinted_allow: number;\n    source_reprinted_astrict: string;\n    source_type: string;\n    status: string;\n    sub_status_id: number;\n    subtitle: string;\n    tag: string;\n    tag_detail: string;\n    title: string;\n    top_end: number;\n    top_st: number;\n    tp_id: string;\n    transform_id: string;\n    trigger_odyssey: number;\n    type: string;\n    updated_at: string;\n    url: string;\n    vertical_cover: string;\n    video_sub_type: number;\n    video_tag: string;\n    weixin_import_type: number;\n    id: string;\n    certify_url: string;\n    timer_time: number;\n    similar_article_id: string;\n    article_push_audit_res: number;\n    withdraw_status: {\n        withdraw_msg: string;\n        has_withdraw_times: {\n            news: number;\n        };\n        can_withdraw: number;\n    };\n    modify_status: {\n        edit_msg: string;\n        can_edit: number;\n    };\n    delete_status: {\n        delete_msg: string;\n        can_delete: number;\n    };\n    recover_status: {\n        recover_msg: string;\n        can_recover: number;\n    };\n    can_edit_goods: number;\n    recomm_status: {\n        can_recomm: number;\n    };\n    dxxFinalAuditResult: string;\n    read_amount: number;\n    read_num: number;\n    forward_num: number;\n    praise_num: number;\n    comment_num: number;\n    rec_amount: number;\n    comment_amount: number;\n    share_amount: number;\n    like_amount: number;\n    collection_amount: number;\n    profit: number;\n    is_rec: number;\n    solicit_info: {\n        tag: string | null;\n        point: string | null;\n        inspire: string | null;\n    };\n    group_can_share: number;\n    group_already_shared: number;\n    show_selected_comment_option: number;\n    show_ai_intro: number;\n    flow_invest_status: number;\n    flow_invest_msg: string;\n    package_invest_status: number;\n    can_only_modify_goods: number;\n    audit_msg_color: string;\n    audit_msg_icon: string;\n    playlet_pay2free_switch: number;\n    audit_type_v0: string;\n    is_ridewind: string;\n    is_show_adding: string;\n    is_show_add_view: string;\n    add_view_count: string;\n    coupons_add_view_count: string;\n    platform_add_view_count: string;\n    rec_count: number;\n    share_url: string;\n    v_type: number;\n    v_intro: string;\n    duration: number | null;\n    video_num: number;\n}\n\ntype ArticleApiResponse = {\n    errno: number;\n    data: {\n        list: ArticleInfo[];\n        page: {\n            currentPage: number;\n            pageSize: number;\n            totalCount: number;\n            totalPage: number;\n        };\n    };\n};\n\nexport async function handleBaijiahaoData(\n    _task: AutomateTask,\n    params: FetchArticlesParams,\n): Promise<FetchArticlesResponse> {\n    try {\n        const {\n            cookies,\n            token,\n            pageNum = 1,\n            pageSize = 10,\n            showOriginalData = false,\n            onlySuccess = false,\n            containsArticle = false,\n        } = params;\n\n        if (!token) return { code: 414, message: \"缺少token\", data: {} };\n        const http = new Http({\n            headers: {\n                cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n                token: token,\n            },\n        });\n\n        async function fetchArticles(\n            pageNum: number,\n            pageSize: number,\n            onlySuccess = false,\n        ): Promise<ArticleApiResponse> {\n            return await http.api<ArticleApiResponse>({\n                method: \"get\",\n                url: \"https://baijiahao.baidu.com/pcui/article/lists\",\n                params: {\n                    currentPage: pageNum,\n                    pageSize: pageSize,\n                    search: \"\",\n                    type: \"\",\n                    collection: onlySuccess ? \"publish\" : \"\",\n                    clearBeforeFetch: false,\n                    dynamic: 1,\n                },\n            });\n        }\n\n        const articleInfo = await fetchArticles(pageNum, pageSize, onlySuccess);\n        if (articleInfo.errno !== 0) return errorResponse(\"百家号数据获取失败，请检查账号状态\", 414);\n        const filtered = articleInfo.data.list.filter((item) => item.status !== \"draft\");\n        const totalPage = articleInfo.data.page?.totalPage || 1;\n\n        let currentPage = pageNum + 1;\n        const usedPages = new Set<number>();\n        while (filtered.length < pageSize && currentPage <= totalPage) {\n            if (usedPages.has(currentPage)) {\n                currentPage++;\n                continue;\n            }\n\n            const res = await fetchArticles(currentPage, pageSize, onlySuccess);\n            usedPages.add(currentPage);\n\n            const validItems = res.data.list.filter((item) => item.status !== \"draft\");\n            filtered.push(...validItems);\n\n            currentPage++;\n        }\n\n        // 截取前 pageSize 条返回\n        const final = filtered.slice(0, pageSize);\n\n        const getDetailContent = async (url: string) => {\n            try {\n                const detailInfo = await http.api<string>({ method: \"get\", url });\n                const match = detailInfo.match(/window\\.jsonData\\s*=\\s*(\\{[\\s\\S]*?\\});window\\.firstScreenTime/);\n                if (!match) {\n                    const isCheckPass = detailInfo.indexOf(\"百度安全验证\");\n                    if (isCheckPass > -1) {\n                        return \"⚠️ 需要进行百度安全验证，请手动打开链接完成验证后再尝试获取文章内容\";\n                    }\n                    return null;\n                }\n                const jsonStr = match[1].trim();\n                type DataType = {\n                    bsData: {\n                        superlanding: {\n                            itemData: {\n                                sections: {\n                                    content: string;\n                                }[];\n                            };\n                        }[];\n                    };\n                };\n                const data: DataType = JSON.parse(jsonStr);\n                return data.bsData.superlanding[0].itemData.sections.map((item) => item.content).join(\"\");\n            } catch (err) {\n                console.error(\"❌ JSON 解析失败:\", err);\n                return null;\n            }\n        };\n\n        // 转换结构\n        const articleCell: BaijiahaoArticle[] = await Promise.all(\n            final.map(async (item) => ({\n                title: (item?.is_transfer ?? false) ? item.content || \"\" : item.title,\n                imageUrl: JSON.parse(item.cover_images)[0]?.src || \"\",\n                createTime: Math.floor(new Date(item.publish_at.replace(/-/g, \"/\")).getTime() / 1000),\n                redirectUrl: item.url || item.share_url,\n                recommendNum: item.rec_amount | item.forward_num,\n                collectNum: item.collection_amount,\n                readNum: item.read_amount | item.read_num,\n                likeNum: item.like_amount | item.praise_num,\n                commentNum: item.comment_amount | item.comment_num,\n                shareNum: item.share_amount,\n                ...(showOriginalData ? { originalData: item } : {}),\n                ...(containsArticle ? { article: await getDetailContent(item.url) } : {}),\n            })),\n        );\n\n        return success(\n            {\n                articleCell,\n                ...(onlySuccess\n                    ? {\n                          pagination: {\n                              total: articleInfo.data.page?.totalCount,\n                              pageNum,\n                              pageSize,\n                          },\n                      }\n                    : null),\n            },\n            \"百家号文章数据获取成功\",\n        );\n    } catch (error) {\n        return errorResponse(error instanceof Error ? error.message : \"百家号文章数据获取失败\");\n    }\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport type { AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { type FetchArticlesParams } from \".\";\nimport { DouyinArticle, errorResponse, FetchArticlesResponse } from \"./types\";\n\n// API 响应接口定义\n// API 响应接口定义（参考《API接口文档》1.3 作品列表接口）\ninterface DouyinApiWork {\n    aweme_id: string;\n    desc: string;\n    Cover?: {\n        url_list?: string[];\n    };\n    create_time: number;\n    duration?: number;\n    aweme_type?: number;\n    status?: {\n        is_delete?: boolean;\n        is_private?: boolean;\n        in_reviewing?: boolean;\n    };\n    statistics?: {\n        play_count?: number;\n        digg_count?: number;\n        comment_count?: number;\n        share_count?: number;\n        collect_count?: number;\n    };\n    share_url?: string;\n    author?: {\n        uid?: string;\n    };\n}\n\ninterface DouyinWorkListResponse {\n    aweme_list?: DouyinApiWork[];\n    total?: number;\n    has_more?: boolean | number; // 文档为 1/0，兼容 boolean\n    cursor?: number; // 文档：下一页游标使用响应中的 cursor\n    max_cursor?: number; // 兼容旧字段\n    status_code?: number;\n}\n\n/**\n * 抖音作品数据采集\n *\n * 采集内容：\n * 1. 账号维度数据：粉丝、获赞、近7日数据（需开通数据中心）\n * 2. 作品维度数据：封面图、标题、发布时间、统计数据等\n *\n * 参考小红书实现模式：\n * - 内部封装 fetchWorks 函数\n * - 支持自动分页\n * - 支持代理配置\n * - 支持重试机制\n */\nexport async function handleDouyinData(\n    _task: AutomateTask,\n    params: FetchArticlesParams,\n): Promise<FetchArticlesResponse> {\n    try {\n        const { cookies, pageSize = 12, status = 0, showOriginalData = false, onlySuccess = false } = params;\n        // pageNum 为 0 或未传时按 1 处理\n        const pageNum = params.pageNum || 1;\n\n        // 配置请求头和代理\n        const headers = {\n            cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://creator.douyin.com\",\n        };\n\n        const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n\n        const http = new Http(...args);\n\n        // 内部函数：获取作品列表（参考文档 1.3）\n        // 分页使用游标 max_cursor，首次为 0，后续用响应中的 cursor\n        async function fetchWorks(cursor: number): Promise<DouyinWorkListResponse> {\n            return await http.api<DouyinWorkListResponse>(\n                {\n                    method: \"get\",\n                    url: \"https://creator.douyin.com/janus/douyin/creator/pc/work_list\",\n                    params: {\n                        scene: \"star_atlas\",\n                        device_platform: \"android\",\n                        aid: 1128,\n                        status,\n                        count: pageSize,\n                        max_cursor: cursor,\n                    },\n                },\n                { retries: 3, retryDelay: 100, timeout: 5000 },\n            );\n        }\n\n        // has_more 兼容文档的 1/0 与 boolean\n        const isHasMore = (v: boolean | number | undefined): boolean => v === true || v === 1;\n\n        // 计算需要跳过和获取的数据量\n        const skipCount = (pageNum - 1) * pageSize;\n        const needCount = skipCount + pageSize;\n\n        // 首次请求游标为 0（抖音使用游标分页，非 offset）\n        const workListResponse = await fetchWorks(0);\n\n        if (!workListResponse || !Array.isArray(workListResponse.aweme_list)) {\n            return errorResponse(\"抖音数据获取失败，请检查账号状态\", 414);\n        }\n\n        // 累积作品，通过游标翻页直到攒够需要的数量或没有更多\n        const allWorks: DouyinApiWork[] = [...workListResponse.aweme_list];\n        let hasMore = isHasMore(workListResponse.has_more);\n        // 文档：后续请求使用响应中的 cursor；兼容旧的 max_cursor\n        let currentCursor = workListResponse.cursor ?? workListResponse.max_cursor ?? 0;\n\n        // 防止无限循环的翻页上限\n        let guard = 0;\n        while (allWorks.length < needCount && hasMore && guard < 20) {\n            const nextPageResponse = await fetchWorks(currentCursor);\n            if (!Array.isArray(nextPageResponse.aweme_list) || nextPageResponse.aweme_list.length === 0) {\n                break;\n            }\n            allWorks.push(...nextPageResponse.aweme_list);\n            hasMore = isHasMore(nextPageResponse.has_more);\n            currentCursor = nextPageResponse.cursor ?? nextPageResponse.max_cursor ?? currentCursor;\n            guard++;\n        }\n\n        // 截取当前页的数据：跳过前面的页，取 pageSize 条\n        const finalWorks = allWorks.slice(skipCount, needCount);\n\n        // 转换作品数据（字段映射参考文档 1.3）\n        const articleCell: DouyinArticle[] = finalWorks.map((item) => {\n            // 作品详情页（创作者后台），参考文档\"作品数据页面地址构建\"\n            const workDetailUrl = `https://creator.douyin.com/creator-micro/work-management/work-detail/${item.aweme_id}`;\n            // 公开访问 URL 优先用文档给出的 share_url\n            const workPublicUrl = item.share_url || `https://www.douyin.com/video/${item.aweme_id}`;\n\n            // 发布状态：删除 > 私密 > 审核中 > 公开\n            let statusText: string;\n            if (item.status?.is_delete) {\n                statusText = \"deleted\";\n            } else if (item.status?.is_private) {\n                statusText = \"private\";\n            } else if (item.status?.in_reviewing) {\n                statusText = \"reviewing\";\n            } else {\n                statusText = \"public\";\n            }\n\n            return {\n                title: item.desc || \"无作品描述\",\n                imageUrl: item.Cover?.url_list?.[0] || \"\",\n                createTime: item.create_time,\n                redirectUrl: workDetailUrl,\n\n                // 统计数据\n                playNum: item.statistics?.play_count || 0,\n                likeNum: item.statistics?.digg_count || 0,\n                commentNum: item.statistics?.comment_count || 0,\n                shareNum: item.statistics?.share_count || 0,\n                collectNum: item.statistics?.collect_count || 0,\n\n                // 扩展字段\n                awemeId: item.aweme_id,\n                awemeType: item.aweme_type ?? 0,\n                duration: item.duration,\n                status: statusText,\n                publicUrl: workPublicUrl,\n\n                ...(showOriginalData ? { originalData: item } : {}),\n            };\n        });\n\n        return success(\n            {\n                articleCell,\n                ...(onlySuccess\n                    ? {\n                          pagination: {\n                              total: workListResponse.total || allWorks.length,\n                              nextPage: hasMore,\n                              pageNum,\n                              pageSize,\n                          },\n                      }\n                    : null),\n            },\n            \"抖音数据获取成功\",\n        );\n    } catch (error) {\n        return errorResponse(error instanceof Error ? error.message : \"抖音数据获取失败\");\n    }\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport type { AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { type FetchArticlesParams } from \".\";\nimport { errorResponse, FetchArticlesResponse, ShipinhaoArticle } from \"./types\";\n\n// API 响应接口定义\ninterface ShipinhaoApiPost {\n    objectId?: string;\n    exportId?: string;\n    object_desc?: string;\n    desc?: {\n        description?: string;\n        media?: Array<{\n            thumbUrl?: string;\n            coverUrl?: string;\n            url?: string;\n        }>;\n    };\n    cover?: {\n        url: string;\n    };\n    media_url?: string;\n    createTime?: number;\n    effectiveTime?: number;\n    create_time?: number;\n    post_status?: number;\n    status?: number;\n    post_type?: number;\n    objectType?: number;\n\n    // 统计数据\n    readCount?: number;\n    read_count?: number;\n    likeCount?: number;\n    like_count?: number;\n    commentCount?: number;\n    comment_count?: number;\n    forwardCount?: number;\n    forward_count?: number;\n    favCount?: number;\n    fav_count?: number;\n}\n\ninterface ShipinhaoPostListResponse {\n    errCode?: number;\n    errMsg?: string;\n    data?: {\n        list?: ShipinhaoApiPost[];\n        totalCount?: number;\n        continueFlag?: boolean;\n        lastBuff?: string;\n    };\n    posts?: ShipinhaoApiPost[];\n    post_list?: ShipinhaoApiPost[];\n    has_more?: boolean;\n    total?: number;\n    offset?: number;\n}\n\n/**\n * 视频号作品数据采集\n *\n * 采集内容：\n * 1. 账号维度数据：关注者、昨日净增关注、昨日新增播放、昨日新增喜欢、昨日新增评论\n * 2. 作品维度数据：封面图、标题、发布时间、阅读/喜欢/评论/转发/点赞等\n *\n * 参考小红书实现模式：\n * - 内部封装 fetchPosts 函数\n * - 支持代理配置\n * - 支持重试机制\n * - 视频和图文分别获取后合并\n */\nexport async function handleShipinhaoData(\n    _task: AutomateTask,\n    params: FetchArticlesParams,\n): Promise<FetchArticlesResponse> {\n    try {\n        const { cookies, postType = \"all\", pageSize = 10, showOriginalData = false } = params;\n        // pageNum 为 0 或未传时按 1 处理\n        const pageNum = params.pageNum || 1;\n\n        // 从cookies中提取_aid（如果存在）\n        const aidCookie = cookies.find((it) => it.name === \"_aid\")?.value;\n        const aid = aidCookie || \"9d3e0e9f-b842-498d-a273-4285d58df264\";\n\n        // 提取必需的请求头信息\n        const uinCookie = cookies.find((it) => it.name === \"uin\" || it.name === \"wxuin\")?.value || \"0000000000\";\n        const deviceIdCookie = cookies.find(\n            (it) => it.name === \"device_id\" || it.name === \"finger_print_device_id\",\n        )?.value;\n\n        // 配置请求头和代理\n        const headers = {\n            cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://channels.weixin.qq.com\",\n            origin: \"https://channels.weixin.qq.com\",\n            \"content-type\": \"application/json\",\n            \"X-WECHAT-UIN\": uinCookie,\n            ...(deviceIdCookie ? { \"finger-print-device-id\": deviceIdCookie } : {}),\n        };\n\n        const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n\n        const http = new Http(...args);\n\n        // 从cookies中提取_log_finder_id（如果存在）\n        const finderIdCookie =\n            cookies.find((it) => it.name === \"_log_finder_id\" || it.name === \"finder_id\")?.value || \"\";\n\n        // 内部函数：获取作品列表（支持分页）\n        // 视频: userpageType=11, pageUrl=.../post/list\n        // 图文: userpageType=10, pageUrl=.../post/finderNewLifePostList\n        async function fetchPosts(\n            currentPage: number,\n            userpageType: number,\n            pageUrl: string,\n            rawKeyBuff: string = \"\",\n        ): Promise<ShipinhaoPostListResponse> {\n            return await http.api<ShipinhaoPostListResponse>(\n                {\n                    method: \"post\",\n                    url: \"https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/post/post_list\",\n                    params: {\n                        _aid: aid,\n                        _rid: `${Date.now().toString(16)}-${Math.random().toString(36).substring(2, 9)}`,\n                        _pageUrl: encodeURIComponent(pageUrl),\n                    },\n                    data: {\n                        pageSize,\n                        currentPage,\n                        userpageType,\n                        stickyOrder: true,\n                        timestamp: Date.now().toString(),\n                        _log_finder_uin: \"\",\n                        _log_finder_id: finderIdCookie,\n                        rawKeyBuff,\n                        pluginSessionId: null,\n                        scene: 7,\n                        reqScene: 7,\n                    },\n                },\n                { retries: 3, retryDelay: 100, timeout: 5000 },\n            );\n        }\n\n        // 内部函数：循环获取所有作品（处理分页）\n        // 返回全部作品及该类型的总数（totalCount，用于精确统计与完整性校验）\n        async function fetchAllPosts(\n            userpageType: number,\n            pageUrl: string,\n        ): Promise<{ posts: ShipinhaoApiPost[]; totalCount: number }> {\n            const allPosts: ShipinhaoApiPost[] = [];\n            let currentPage = 1;\n            let rawKeyBuff = \"\";\n            let continueFlag = true;\n            let totalCount = 0;\n\n            while (continueFlag) {\n                const response = await fetchPosts(currentPage, userpageType, pageUrl, rawKeyBuff);\n\n                // 检查认证错误\n                if (response.errCode && AUTH_ERROR_CODES.includes(response.errCode)) {\n                    throw new Error(`AUTH_ERROR:${response.errMsg || \"登录已失效\"}`);\n                }\n\n                // 其他错误\n                if (response.errCode) {\n                    _task.logger.warn(`视频号API错误：${response.errMsg} (${response.errCode})`);\n                    throw new Error(`视频号API错误：${response.errMsg} (${response.errCode})`);\n                }\n\n                // 首页记录该类型的总数\n                if (currentPage === 1) {\n                    totalCount = response.data?.totalCount ?? 0;\n                }\n\n                const posts = response.data?.list || response.posts || response.post_list || [];\n                allPosts.push(...posts);\n\n                // 检查是否还有更多数据\n                continueFlag = response.data?.continueFlag ?? false;\n                rawKeyBuff = response.data?.lastBuff || \"\";\n\n                // _task.logger.info(\n                //     `获取${userpageType === 11 ? \"视频\" : \"图文\"}第${currentPage}页，本页${posts.length}条，累计${allPosts.length}条，continueFlag=${continueFlag}`,\n                // );\n\n                currentPage++;\n\n                // 防止无限循环\n                if (currentPage > 100) {\n                    _task.logger.warn(\"分页超过100页，停止请求\");\n                    break;\n                }\n            }\n\n            // 完整性校验：拉取总数应与接口声明的 totalCount 一致\n            if (totalCount > 0 && allPosts.length !== totalCount) {\n                _task.logger.warn(`视频号分页可能不完整：期望${totalCount}条，实际${allPosts.length}条`);\n            }\n\n            return { posts: allPosts, totalCount };\n        }\n\n        // 将单个作品转换为统一格式\n        const mapPost = (item: ShipinhaoApiPost, forcePostType: \"video\" | \"article\"): ShipinhaoArticle => {\n            // 提取封面图\n            let imageUrl = \"\";\n            if (item.desc?.media?.[0]?.thumbUrl) {\n                imageUrl = item.desc.media[0].thumbUrl;\n            } else if (item.desc?.media?.[0]?.coverUrl) {\n                imageUrl = item.desc.media[0].coverUrl;\n            } else if (item.cover?.url) {\n                imageUrl = item.cover.url;\n            } else if (item.media_url) {\n                imageUrl = item.media_url;\n            }\n\n            // 提取标题\n            const title = item.desc?.description || item.object_desc || \"无标题\";\n\n            return {\n                title,\n                imageUrl,\n                createTime: (item.createTime || item.create_time) as number,\n                redirectUrl: \"https://channels.weixin.qq.com/platform\",\n\n                readNum: item.readCount || item.read_count || 0,\n                likeNum: item.likeCount || item.like_count || 0,\n                commentNum: item.commentCount || item.comment_count || 0,\n                forwardNum: item.forwardCount || item.forward_count || 0,\n                favNum: item.favCount || item.fav_count || 0,\n\n                objectId: item.exportId || item.objectId || \"\",\n                postType: forcePostType,\n                postStatus: item.status || item.post_status || 0,\n\n                ...(item.effectiveTime ? { effectiveTime: item.effectiveTime } : {}),\n                ...(showOriginalData ? { originalData: item } : {}),\n            };\n        };\n\n        const allArticles: ShipinhaoArticle[] = [];\n        const needVideo = postType === \"all\" || postType === \"video\";\n        const needArticle = postType === \"all\" || postType === \"article\";\n\n        // 认证相关的错误码\n        const AUTH_ERROR_CODES = [300333, 300334, 300330, 300331, 300332];\n\n        // 视频 + 图文各自的总数，相加即合并总数\n        let combinedTotal = 0;\n\n        // 获取视频作品（userpageType=11）\n        if (needVideo) {\n            try {\n                const videoPageUrl = \"https://channels.weixin.qq.com/micro/content/post/list\";\n                const { posts, totalCount } = await fetchAllPosts(11, videoPageUrl);\n                // _task.logger.info(`视频号视频获取响应：共${posts.length}条，totalCount=${totalCount}`);\n\n                const videoArticles = posts\n                    .filter((item) => item.createTime || item.create_time)\n                    .map((item) => mapPost(item, \"video\"));\n\n                allArticles.push(...videoArticles);\n                combinedTotal += totalCount || videoArticles.length;\n            } catch (error) {\n                const errMsg = error instanceof Error ? error.message : String(error);\n                // 认证错误直接向上抛出\n                if (errMsg.startsWith(\"AUTH_ERROR:\")) {\n                    throw error;\n                }\n                _task.logger.warn(`获取视频号视频失败：${errMsg}`);\n            }\n        }\n\n        // 获取图文作品（userpageType=10）\n        if (needArticle) {\n            try {\n                const articlePageUrl = \"https://channels.weixin.qq.com/micro/content/post/finderNewLifePostList\";\n                const { posts, totalCount } = await fetchAllPosts(10, articlePageUrl);\n                // _task.logger.info(`视频号图文获取响应：共${posts.length}条，totalCount=${totalCount}`);\n\n                const articleArticles = posts\n                    .filter((item) => item.createTime || item.create_time)\n                    .map((item) => mapPost(item, \"article\"));\n\n                allArticles.push(...articleArticles);\n                combinedTotal += totalCount || articleArticles.length;\n            } catch (error) {\n                const errMsg = error instanceof Error ? error.message : String(error);\n                // 认证错误直接向上抛出\n                if (errMsg.startsWith(\"AUTH_ERROR:\")) {\n                    throw error;\n                }\n                _task.logger.warn(`获取视频号图文失败：${errMsg}`);\n            }\n        }\n\n        // 合并后按发布时间倒序排列（最新的在前）\n        allArticles.sort((a, b) => b.createTime - a.createTime);\n\n        // 全量拉取后再按 pageNum/pageSize 切片\n        const total = allArticles.length;\n        const start = (pageNum - 1) * pageSize;\n        const pageItems = allArticles.slice(start, start + pageSize);\n\n        // _task.logger.info(`视频号数据获取成功，合计${total}条，第${pageNum}页返回${pageItems.length}条`);\n        // _task.logger.info(`视频号数据获取成功: ${JSON.stringify(pageItems)}`)\n\n        return success(\n            {\n                articleCell: pageItems,\n                pagination: {\n                    total,\n                    nextPage: start + pageSize < total,\n                    pageNum,\n                    pageSize,\n                },\n            },\n            \"视频号数据获取成功\",\n        );\n    } catch (error) {\n        const errMsg = error instanceof Error ? error.message : String(error);\n\n        // 认证错误返回 414\n        if (errMsg.startsWith(\"AUTH_ERROR:\")) {\n            return errorResponse(\"视频号数据获取失败，请检查账号状态\", 414);\n        }\n\n        return errorResponse(errMsg || \"视频号数据获取失败\");\n    }\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport { Http } from \"../../utils/http\";\nimport { type FetchArticlesParams } from \".\";\nimport { errorResponse, FetchArticlesResponse, ToutiaoArticle } from \"./types\";\n\ninterface ArticleResponse {\n    itemCell: {\n        actionCtrl: Record<string, unknown>;\n        cellCtrl: {\n            articleImageType: number;\n            dspStyle: null | string;\n        };\n        extra: {\n            answer_count: string;\n            origin_content: string;\n        };\n        logPB: string;\n        articleBase: {\n            createTime: number;\n            itemStatus: number;\n            articleURL: string;\n            displayFlags: string;\n            gidStr: string;\n            subTitle: string | null;\n            title: string;\n            abstractText: string;\n            content: string;\n            displayURL: string;\n            groupID: number;\n            publishTime: number;\n            schema: string;\n            visibilityLevel: number;\n        };\n        articleClassification: {\n            bizTag: number;\n            groupSource: number;\n            isOriginal: boolean;\n            isStick: boolean;\n            isSubject: boolean;\n            articleSubType: number;\n            articleType: number;\n            bizID: number;\n        };\n        containsElements: {\n            hasImage: boolean;\n            hasVideo: boolean;\n        };\n        imageList: {\n            staggerFeedCover: ImageInfo[];\n            thumbImageList: ImageInfo[];\n        };\n        itemCounter: {\n            readCount: number;\n            repinCount: number;\n            showCount: number;\n            videoWatchCount: number;\n            commentCount: number;\n            diggCount: number;\n        };\n        richContentInfo: {\n            richContent: string;\n            titleRichSpan: string;\n        };\n        shareInfo: {\n            shareURL: string;\n        };\n        userInfo: {\n            avatarURL: string;\n            name: string;\n            userID: number;\n        };\n    };\n}\n\ninterface ImageInfo {\n    width: number;\n    height: number;\n    uri: string;\n    url: string;\n}\n\nexport async function handleToutiaoData(\n    _task: AutomateTask,\n    params: FetchArticlesParams,\n): Promise<FetchArticlesResponse> {\n    try {\n        const {\n            cookies,\n            pageNum = 1,\n            pageSize = 10,\n            showOriginalData = false,\n            onlySuccess = false,\n            containsArticle = false,\n        } = params;\n\n        const http = new Http({\n            headers: {\n                cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            },\n        });\n\n        const getDetailContent = async (id: string) => {\n            try {\n                const detailInfo = await http.api<{ content: string }>({\n                    method: \"get\",\n                    url: \"https://mp.toutiao.com/mp/agw/article/edit\",\n                    params: {\n                        pgc_id: id,\n                        wxstyle: 0,\n                        format: \"json\",\n                    },\n                });\n\n                return detailInfo.content;\n            } catch (err) {\n                console.error(\"❌ JSON 解析失败:\", err);\n                return null;\n            }\n        };\n\n        const visitedUid = await http.api<{ code: number; user_id_str: string }>({\n            url: \"https://mp.toutiao.com/mp/agw/creator_center/user_info?\",\n            method: \"get\",\n            params: { app_id: 1231 },\n        });\n\n        if (visitedUid.code !== 0) {\n            return errorResponse(\"头条号数据获取失败，请检查账号状态\", 414);\n        }\n\n        const articleInfo = await http.api<{\n            data: { assembleCell: ArticleResponse }[];\n            total_number: number;\n            api_base_info: { app_extra_params: string };\n        }>({\n            method: \"get\",\n            url: \"https://mp.toutiao.com/api/feed/mp_provider/v1/\",\n            params: {\n                provider_type: \"mp_provider\",\n                aid: \"13\",\n                app_name: \"news_article\",\n                category: \"mp_all\",\n                channel: \"\",\n                stream_api_version: \"88\",\n                genre_type_switch: '{\"repost\":1,\"small_video\":1,\"toutiao_graphic\":1,\"weitoutiao\":1,\"xigua_video\":1}',\n                device_platform: \"pc\",\n                platform_id: \"0\",\n                visited_uid: visitedUid.user_id_str,\n                offset: (pageNum - 1) * pageSize,\n                count: pageSize,\n                keyword: \"\",\n                client_extra_params: `{\"category\":\"mp_all\",\"real_app_id\":\"1231\",\"need_forward\":\"true\",\"offset_mode\":\"1\",\"page_index\":\"1\",\"status\":${onlySuccess ? \"2\" : \"8\"},\"source\":\"0\"}`,\n                app_id: \"1231\",\n            },\n        });\n\n        const articleCell: ToutiaoArticle[] = await Promise.all(\n            articleInfo.data.map(async (item) => ({\n                title: item.assembleCell.itemCell.articleBase.title,\n                imageUrl: item.assembleCell.itemCell.imageList.staggerFeedCover[0].url,\n                createTime: item.assembleCell.itemCell.articleBase.publishTime,\n                redirectUrl: item.assembleCell.itemCell.articleBase.articleURL,\n                showNum: item.assembleCell.itemCell.itemCounter.showCount,\n                readNum: item.assembleCell.itemCell.itemCounter.readCount,\n                likeNum: item.assembleCell.itemCell.itemCounter.diggCount,\n                commentNum: item.assembleCell.itemCell.itemCounter.commentCount,\n                ...(showOriginalData ? { originalData: item } : {}),\n                ...(containsArticle\n                    ? { article: await getDetailContent(item.assembleCell.itemCell.articleBase.gidStr) }\n                    : {}),\n            })),\n        );\n\n        const api_base_info_json: { total_count: number } = JSON.parse(articleInfo.api_base_info.app_extra_params);\n        return success(\n            {\n                articleCell,\n                ...(onlySuccess\n                    ? {\n                          pagination: {\n                              total: api_base_info_json.total_count,\n                              pageNum,\n                              pageSize,\n                          },\n                      }\n                    : null),\n            },\n            \"头条号文章文章获取成功\",\n        );\n    } catch (error) {\n        return errorResponse(error instanceof Error ? error.message : \"头条号文章数据获取失败\");\n    }\n}\n","import vm from \"node:vm\";\nimport { AutomateTask, success } from \"@iflyrpa/share\";\nimport { DomUtils, parseDocument } from \"htmlparser2\";\nimport { Http } from \"../../utils/http\";\nimport type { FetchArticlesParams } from \".\";\nimport { errorResponse, type FetchArticlesResponse, type WeixinArticle } from \"./types\";\n\ninterface PublishInfo {\n    type: number;\n    msgid: number;\n    appmsg_info: Array<{\n        share_type: number;\n        appmsgid: number;\n        content_url: string;\n        title: string;\n        is_deleted: boolean;\n        copyright_status: number;\n        copyright_type: number;\n        read_num: number;\n        like_num: number;\n        comment_id: string;\n        is_comment_enable: boolean;\n        comment_num: number;\n        cover: string;\n        smart_product: number;\n        modify_status: number;\n        appmsg_like_type: number;\n        can_delete_status: number;\n        old_like_num: number;\n        itemidx: number;\n        is_pay_subscribe: number;\n        is_from_transfer: number;\n        public_tag_info: {\n            modify_times: number;\n            init_tag_list_size: number;\n        };\n        digest: string;\n        is_cooling_article: number;\n        pic_cdn_url_235_1: string;\n        pic_cdn_url_16_9: string;\n        pic_cdn_url_3_4: string;\n        pic_cdn_url_1_1: string;\n        disable_recommend: number;\n        line_info: {\n            use_line: number;\n            line_count: number;\n            send_time: number;\n            is_appmsg_flag: number;\n            is_use_flag: number;\n        };\n        claim_source_type: number;\n        share_num: number;\n        is_rumor_refutation: number;\n        segment_comment_id: string;\n        is_segment_comment_enable: boolean;\n        multi_picture_cover: number;\n        moment_like_num: number;\n        item_show_type: number;\n    }>;\n    copy_appmsg_id: number;\n    new_publish: number;\n}\n\ninterface BasePublishItem<T = string> {\n    publish_type: number;\n    publish_info: T;\n}\n\ninterface BaseParsedPublishPage<T = string> {\n    total_count: number;\n    publish_count: number;\n    masssend_count: number;\n    publish_list: BasePublishItem<T>[];\n    featured_count: number;\n}\n\ntype ParsedPublishPage = BaseParsedPublishPage<PublishInfo>;\n\nexport async function handleWeixinData(\n    _task: AutomateTask,\n    params: FetchArticlesParams,\n): Promise<FetchArticlesResponse> {\n    const {\n        cookies,\n        token,\n        pageNum = 1,\n        pageSize = 10,\n        showOriginalData = false,\n        onlySuccess = false,\n        cursor,\n        lastPage,\n        containsArticle = false,\n    } = params;\n    if (!token) return { code: 414, message: \"缺少token\", data: {} };\n    const http = new Http({\n        headers: {\n            cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        },\n    });\n    const ParsePublishPage = (html: string): ParsedPublishPage => {\n        const document = parseDocument(html);\n        // console.log(document);\n\n        const scripts = DomUtils.findAll((el) => el.type === \"script\", document.children);\n        // console.log(scripts);\n\n        // 3. 准备 vm 沙箱\n        const sandbox: any = {\n            window: {},\n        };\n\n        vm.createContext(sandbox);\n\n        // 4. 执行包含 wx.cgiData 的脚本\n        for (const script of scripts) {\n            const code = DomUtils.textContent(script);\n\n            if (!code) continue;\n\n            if (code.includes(\"publish_page\")) {\n                const replaceCode = code.replace(\"publish_page =\", \"window.publish_page =\");\n                try {\n                    vm.runInContext(replaceCode, sandbox, {\n                        timeout: 1000,\n                    });\n                } catch (e) {\n                    // 非关键脚本可忽略\n                }\n            }\n        }\n        const decodeHtmlEntities = (encodedStr: string): string => {\n            return encodedStr\n                .replace(/&quot;/g, '\"')\n                .replace(/&amp;/g, \"&\")\n                .replace(/&lt;/g, \"<\")\n                .replace(/&gt;/g, \">\")\n                .replace(/&#39;/g, \"'\");\n        };\n\n        sandbox.window.publish_page.publish_list.forEach((it: { publish_info: string }) => {\n            it.publish_info = JSON.parse(decodeHtmlEntities(it.publish_info));\n        });\n\n        return sandbox.window.publish_page;\n    };\n    async function fetchArticles(begin: number, pageSize: number, token: string | number): Promise<string> {\n        return http.api<string>({\n            method: \"get\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/appmsgpublish\",\n            params: {\n                sub: \"list\",\n                begin: begin,\n                count: pageSize,\n                token: token,\n                lang: \"zh_CN\",\n            },\n        });\n    }\n\n    const size = onlySuccess ? 10 : pageSize > 20 ? 20 : pageSize;\n    let begin = (lastPage ?? pageNum) - 1; // 转换为 0-based index\n    const rawArticlesInfo = await fetchArticles(begin * size, size, token);\n    if (rawArticlesInfo.includes(\"请重新<a id='jumpUrl' href='/'>登录</a>\"))\n        return errorResponse(\"微信公众号数据获取失败，请检查账号状态\", 414);\n    const articlesInfo = ParsePublishPage(rawArticlesInfo);\n    let articleCell: WeixinArticle[] = [];\n\n    if (!onlySuccess && pageSize > 20) {\n        let totalFetched = articlesInfo.publish_list.length;\n        let nextPage = pageNum + 1;\n\n        while (totalFetched < pageSize) {\n            const remaining = pageSize - totalFetched;\n            const currentPageSize = remaining > 20 ? 20 : remaining;\n\n            const _rawArticlesInfo = await fetchArticles((nextPage - 1) * 20, currentPageSize, token);\n            const parsed = ParsePublishPage(_rawArticlesInfo);\n\n            articlesInfo.publish_list = articlesInfo.publish_list.concat(parsed.publish_list);\n            totalFetched = articlesInfo.publish_list.length;\n\n            if (parsed.publish_list.length < currentPageSize) break;\n            nextPage++;\n        }\n    }\n\n    let nextPage = false;\n    if (onlySuccess) {\n        let filteredList = articlesInfo.publish_list\n            .filter((item) => item.publish_info.appmsg_info[0].content_url.indexOf(\"tempkey\") === -1)\n            .map((item) => item.publish_info);\n\n        if (cursor) {\n            const cursorIndex = filteredList.findIndex((item) => item.msgid === cursor);\n            if (cursorIndex !== -1) filteredList = filteredList.slice(cursorIndex + 1);\n        }\n\n        let totalFetched = filteredList.length;\n\n        while (totalFetched < pageSize && begin * size < articlesInfo.total_count) {\n            begin += 1; // 页数递增\n            const nextRawArticlesInfo = await fetchArticles(begin * size, size, token);\n            const nextArticlesInfo = ParsePublishPage(nextRawArticlesInfo);\n            const newFiltered = nextArticlesInfo.publish_list\n                .filter((item) => item.publish_info.appmsg_info[0].content_url.indexOf(\"tempkey\") === -1)\n                .map((item) => item.publish_info);\n            filteredList = filteredList.concat(newFiltered);\n            totalFetched = filteredList.length;\n        }\n\n        filteredList = filteredList.slice(0, pageSize);\n        totalFetched = filteredList.length;\n\n        if (totalFetched >= pageSize && begin * size < articlesInfo.total_count) {\n            const nextRawArticlesInfo = await fetchArticles((begin + 1) * size, size, token);\n            const nextArticlesInfo = ParsePublishPage(nextRawArticlesInfo);\n            nextPage =\n                nextArticlesInfo.publish_list.length > 0 &&\n                nextArticlesInfo.publish_list.some(\n                    (item) => item.publish_info.appmsg_info[0].content_url.indexOf(\"tempkey\") === -1,\n                );\n        }\n\n        const getDetailContent = async (id: number) => {\n            try {\n                const detailInfo = await http.api<string>({\n                    method: \"get\",\n                    url: \"https://mp.weixin.qq.com/cgi-bin/appmsg\",\n                    params: {\n                        token,\n                        t: \"media/appmsg_edit\",\n                        action: \"edit\",\n                        type: 77,\n                        appmsgid: id,\n                        isMul: 1,\n                        get_delete: 1,\n                        re_edit: 1,\n                        lang: \"zh_CN\",\n                        timestamp: Date.now(),\n                    },\n                });\n\n                const text = detailInfo.match(/var\\s+infos\\s*=\\s*({[\\s\\S]*?})\\s*,\\s*item\\s*=/);\n                if (!text) {\n                    const isCheckPass = detailInfo.indexOf(\"环境异常\");\n                    if (isCheckPass > -1) return \"当前环境异常，无法获取文章内容\";\n                    return null;\n                }\n\n                const deatil: { item: { content: string }[] } = JSON.parse(text[1].trim());\n\n                return deatil.item[0].content;\n            } catch (err) {\n                console.error(\"❌ 解析失败:\", err);\n                return null;\n            }\n        };\n\n        const lastMsgId = filteredList.length > 0 ? filteredList[filteredList.length - 1].msgid : undefined;\n        articleCell = await Promise.all(\n            filteredList.map(async (item) => ({\n                title: item.appmsg_info[0].title,\n                imageUrl: item.appmsg_info[0].cover,\n                createTime: item.appmsg_info[0].line_info.send_time,\n                redirectUrl: item.appmsg_info[0].content_url,\n                readNum: item.appmsg_info[0].read_num,\n                likeNum: item.appmsg_info[0].old_like_num,\n                shareNum: item.appmsg_info[0].share_num,\n                recommendNum: item.appmsg_info[0].like_num,\n                ...(showOriginalData ? { originalData: item } : {}),\n                ...(containsArticle ? { article: await getDetailContent(item.msgid) } : {}),\n            })),\n        );\n\n        return success(\n            {\n                articleCell,\n                pagination: {\n                    nextPage,\n                    pageNum,\n                    pageSize,\n                    lastPage: begin + 1, // 返回当前页数\n                    cursor: lastMsgId, // 返回最后一条的 msgid\n                },\n            },\n            \"微信文章文章获取成功\",\n        );\n    }\n\n    const BasePublishBUilder = (publishInfo: BasePublishItem<PublishInfo>[]): WeixinArticle[] => {\n        return publishInfo.map((item) => ({\n            title: item.publish_info.appmsg_info[0].title,\n            imageUrl: item.publish_info.appmsg_info[0].cover,\n            createTime: item.publish_info.appmsg_info[0].line_info.send_time,\n            redirectUrl: item.publish_info.appmsg_info[0].content_url,\n            readNum: item.publish_info.appmsg_info[0].read_num,\n            likeNum: item.publish_info.appmsg_info[0].old_like_num,\n            shareNum: item.publish_info.appmsg_info[0].share_num,\n            recommendNum: item.publish_info.appmsg_info[0].like_num,\n            ...(showOriginalData ? { originalData: item } : {}),\n        }));\n    };\n\n    articleCell = BasePublishBUilder(articlesInfo.publish_list);\n\n    const timerPublishData = await http.api({\n        url: \"https://mp.weixin.qq.com/cgi-bin/home\",\n        method: \"get\",\n        params: {\n            t: \"home/index\",\n            token,\n            lang: \"zh_CN\",\n        },\n    });\n\n    const decodeTimerPublishData = (html: string): BasePublishItem<PublishInfo>[] | [] => {\n        const document = parseDocument(html);\n        // console.log(document);\n\n        const scripts = DomUtils.findAll((el) => el.type === \"script\", document.children);\n\n        // 3. 准备 vm 沙箱\n        const sandbox: any = {\n            window: {},\n        };\n\n        vm.createContext(sandbox);\n        // 4. 执行包含 wx.cgiData 的脚本\n        for (const script of scripts) {\n            let code = DomUtils.textContent(script);\n\n            if (!code) continue;\n\n            if (code.includes(\"wx.cgiData\")) {\n                code = code.replace(\"wx.cgiData\", \"window.wx.cgiData\");\n                try {\n                    vm.runInContext(code, sandbox, {\n                        timeout: 1000,\n                    });\n                } catch (e) {\n                    // 非关键脚本可忽略\n                }\n            }\n        }\n        if (!sandbox.window.wx || !sandbox.window.wx.cgiData || !sandbox.window.wx.cgiData.timesend_msg) {\n            return [];\n        }\n        const timesend_msg = JSON.parse(sandbox.window.wx.cgiData.timesend_msg);\n        return timesend_msg.sent_list.map((it: PublishInfo) => {\n            return {\n                publish_info: it,\n            };\n        });\n    };\n\n    const timmerPublish = decodeTimerPublishData(timerPublishData);\n    return success(\n        {\n            ...(timmerPublish.length === 0 ? {} : { timmerPublish: BasePublishBUilder(timmerPublish) }),\n            articleCell,\n        },\n        \"微信文章文章获取成功\",\n    );\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport type { AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\nimport type { FetchArticlesParams } from \".\";\nimport { errorResponse, type FetchArticlesResponse, type XiaohongshuArticle } from \"./types\";\n\ninterface Note {\n    id: string;\n    sticky: boolean;\n    schedule_post_time: number;\n    comments_count: number;\n    tab_status: number;\n    display_title: string;\n    time: string;\n    view_count: number;\n    shared_count: number;\n    images_list: {\n        url: string;\n    }[];\n    permission_code: number;\n    permission_msg: string;\n    level: number;\n    xsec_token: string;\n    xsec_source: string;\n    type: string;\n    likes: number;\n    collected_count: number;\n    goods_info: {\n        goods_name: string[];\n    };\n}\ntype ArticleApiResponse = {\n    data: {\n        notes: Note[];\n        page: number;\n        tags: {\n            notes_count: number;\n        }[];\n    };\n};\nexport async function handleXiaohongshuData(\n    _task: AutomateTask,\n    params: FetchArticlesParams,\n): Promise<FetchArticlesResponse> {\n    const {\n        cookies,\n        pageNum = 1,\n        pageSize = 10,\n        showOriginalData = false,\n        onlySuccess = false,\n        containsArticle = false,\n    } = params;\n\n    const xsEncrypt = new Xhshow();\n    const a1Cookie = cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"小红书数据获取失败，请检查账号状态\", data: {} };\n    if (onlySuccess && pageSize !== 10) return { code: 414, message: \"小红书pageSize不可修改\", data: {} };\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com\",\n        origin: \"https://creator.xiaohongshu.com\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n\n    const http = new Http(...args);\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n\n    async function fetchArticles(pageNum: number, onlySuccess = false): Promise<ArticleApiResponse> {\n        const serveUrl = \"/web_api/sns/v5/creator/note/user/posted\";\n        const serveParams = {\n            tab: onlySuccess ? 1 : 0,\n            page: pageNum - 1,\n        };\n        const serveXsHeader = xsEncrypt.signHeadersGet(serveUrl, recordCookie, \"xhs-pc-web\", serveParams);\n\n        return await http.api<ArticleApiResponse>(\n            {\n                method: \"get\",\n                baseURL: \"https://edith.xiaohongshu.com\",\n                url: serveUrl,\n                headers: serveXsHeader,\n                params: serveParams,\n            },\n            { retries: 3, retryDelay: 20, timeout: 3000 },\n        );\n    }\n    const articleInfo = await fetchArticles(pageNum, onlySuccess);\n\n    let hasNextpage = articleInfo.data.page !== -1;\n    const filtered = articleInfo.data.notes;\n    let currentPage = pageNum + 1;\n    const usedPages = new Set<number>();\n    while (filtered.length < pageSize && hasNextpage) {\n        if (usedPages.has(currentPage)) {\n            currentPage++;\n            continue;\n        }\n\n        const res = await fetchArticles(currentPage, onlySuccess);\n        usedPages.add(currentPage);\n\n        const validItems = res.data.notes;\n        filtered.push(...validItems);\n\n        currentPage++;\n        hasNextpage = res.data.page !== -1;\n    }\n\n    const getDetailContent = async (id: string) => {\n        try {\n            const detailUrl = \"/web_api/sns/capa/postgw/note/detail\";\n            const detailParams = {\n                note_id: id,\n                source: \"official\",\n                edit_mode: 1,\n            };\n            const detailxsHeader = xsEncrypt.signHeadersGet(detailUrl, recordCookie, \"xhs-pc-web\", detailParams);\n\n            const detailInfo = await http.api<{ data: { desc: string } }>(\n                {\n                    method: \"get\",\n                    baseURL: \"https://edith.xiaohongshu.com\",\n                    url: detailUrl,\n                    headers: detailxsHeader,\n                    params: detailParams,\n                },\n                { retries: 3, retryDelay: 20, timeout: 3000 },\n            );\n            return detailInfo.data.desc;\n        } catch (err) {\n            console.error(\"❌ JSON 解析失败:\", err);\n            return null;\n        }\n    };\n\n    const final = filtered.slice(0, pageSize);\n    const articleCell: XiaohongshuArticle[] = await Promise.all(\n        final.map(async (item) => ({\n            title: item.display_title,\n            imageUrl: item.images_list[0].url,\n            createTime: Math.floor(new Date(item.time.replace(/-/g, \"/\")).getTime() / 1000),\n            redirectUrl: `https://www.xiaohongshu.com/explore/${item.id}?xsec_token=${item.xsec_token}&xsec_source=pc_creatormng`,\n            readNum: item.view_count,\n            likeNum: item.likes,\n            commentNum: item.comments_count,\n            collectNum: item.collected_count,\n            shareNum: item.shared_count,\n            // articleStates: item.status,\n            ...(showOriginalData ? { originalData: item } : {}),\n            ...(containsArticle ? { article: await getDetailContent(item.id) } : {}),\n        })),\n    );\n\n    return success(\n        {\n            articleCell,\n            ...(onlySuccess\n                ? {\n                      pagination: {\n                          nextPage: hasNextpage,\n                          pageNum,\n                          pageSize,\n                      },\n                  }\n                : null),\n        },\n        \"小红书文章数据获取成功\",\n    );\n}\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\nimport { handleBaijiahaoData } from \"./handleBjhData\";\nimport { handleDouyinData } from \"./handleDouyinData\";\nimport { handleShipinhaoData } from \"./handleShipinhaoData\";\nimport { handleToutiaoData } from \"./handleTTData\";\nimport { handleWeixinData } from \"./handleWXData\";\nimport { handleXiaohongshuData } from \"./handleXhsData\";\nimport type { FetchArticlesData } from \"./types\";\n// 请求参数接口\n\nexport const FetchArticlesParamsSchema = ActionCommonParamsSchema.extend({\n    platform: z.string().describe(\"社交平台：weixin, toutiao, baijiahao, xiaohongshu, douyin, shipinhao\"),\n    token: z.union([z.string(), z.number()]).optional().describe(\"微信和百家号需要\"),\n    pageNum: z.number().optional().describe(\"当前页，默认1\"),\n    pageSize: z.number().optional().describe(\"每页大小，默认10\"),\n    size: z.number().optional().describe(\"获取前多少篇文章（不含草稿），默认获取全部\"),\n    onlySuccess: z.boolean().optional().describe(\"是否仅获取发布成功的文章，默认false\"),\n    showOriginalData: z.boolean().optional().describe(\"是否展示原始数据，默认false\"),\n    cursor: z.number().optional().describe(\"仅用于微信分页游标，默认为空\"),\n    lastPage: z.number().optional(),\n    containsArticle: z.boolean().optional().describe(\"是否包含文章内容，默认false\"),\n    // 抖音特定参数\n    status: z.number().optional().describe(\"抖音作品状态：0=全部\"),\n    includeAccount: z.boolean().optional().describe(\"是否包含账号数据，默认true\"),\n    // 视频号特定参数\n    postType: z\n        .enum([\"video\", \"article\", \"all\"])\n        .optional()\n        .describe(\"视频号作品类型：video=视频, article=图文, all=全部\"),\n});\n\nexport type FetchArticlesParams = z.infer<typeof FetchArticlesParamsSchema>;\n\nexport const FetchArticles: CommonAction<FetchArticlesParams, FetchArticlesData | Record<string, never>> = async (\n    _task,\n    params,\n) => {\n    const { platform } = params;\n    switch (platform) {\n        case \"toutiao\":\n            return handleToutiaoData(_task, params);\n        case \"weixin\":\n            return handleWeixinData(_task, params);\n        case \"baijiahao\":\n            return handleBaijiahaoData(_task, params);\n        case \"xiaohongshu\":\n            return handleXiaohongshuData(_task, params);\n        case \"douyin\":\n            return handleDouyinData(_task, params);\n        case \"shipinhao\":\n            return handleShipinhaoData(_task, params);\n        default:\n            return success({}, \"暂不支持该平台\");\n    }\n};\n","import { type CommonAction, response, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, Toutiao } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface SearchToutiaoLocationParams extends ActiomCommonParams {\n    placeName: string;\n}\n\nexport type PublishAction = CommonAction<SearchToutiaoLocationParams, Toutiao.CityPoi[]>;\n\nexport const searchToutiaoLocation: PublishAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n            biz: 1231,\n        },\n    });\n\n    const res = await http.api<{\n        code: number;\n        message: string;\n        data: {\n            poi: Array<{\n                name: string;\n                city: string;\n                longitude: number;\n                latitude: number;\n                type_code: string;\n                id: string;\n            }>;\n        };\n    }>({\n        method: \"post\",\n        url: \"https://mp.toutiao.com/poi/api/searchplace\",\n        data: {\n            appid: 1231,\n            device: 2,\n            keywords: params.placeName,\n            language: \"zh-CN\",\n            location: \"-1,-1\",\n            offset: 20,\n            page: 1,\n            region: \"CN\",\n            scenario: \"TIPS\",\n            timestamp: Math.floor(Date.now() / 1000),\n        },\n    });\n\n    if (res.code === 414) {\n        return success(\n            res.data.poi.map((item) => ({\n                position: item.name,\n                city: item.city,\n                longitude: item.longitude,\n                latitude: item.latitude,\n                type_code: item.type_code,\n                poi_id: item.id,\n            })),\n        );\n    }\n\n    const isSuccess = res.code === 0;\n    const message = `搜索头条用户ID成功${isSuccess ? \"成功\" : `失败，原因：${res.message}`}`;\n    const data = isSuccess\n        ? res.data.poi.map((item) => ({\n              position: item.name,\n              city: item.city,\n              longitude: item.longitude,\n              latitude: item.latitude,\n              type_code: item.type_code,\n              poi_id: item.id,\n          }))\n        : [];\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, Toutiao } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface SearchToutiaoTopicListParams extends ActiomCommonParams {\n    searchValue: string;\n}\n\nexport type PublishAction = CommonAction<SearchToutiaoTopicListParams, Toutiao.Topic[]>;\n\nexport const searchToutiaoTopicList: PublishAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n        },\n    });\n\n    const res = await http.api<{ code: number; message: string; recents: Toutiao.Topic[]; hots: Toutiao.Topic[] }>({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/mp/agw/creator_helper/suggest_words\",\n        params: { type: 2, words: params.searchValue },\n    });\n\n    const isSuccess = res.code === 0;\n    const message = `获取话题${isSuccess ? \"成功\" : `失败，原因：${res.message}`}`;\n    const data = isSuccess ? (params.searchValue ? res.recents : res.hots) : [];\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, Toutiao } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface SearchToutiaoUserIDParams extends ActiomCommonParams {\n    UserName: string;\n}\n\nexport type PublishAction = CommonAction<SearchToutiaoUserIDParams, Toutiao.SuggestWords[]>;\n\nexport const searchToutiaoUserInfo: PublishAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n        },\n    });\n\n    const res = await http.api<{\n        err_no: number;\n        error_msg: string;\n        data: {\n            suggest: {\n                user: {\n                    info: { user_id: number; name: string; avatar_url: string };\n                    relation_count: { followers_count: number };\n                };\n            }[];\n        };\n    }>({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/ugc/publish/post/v1/suggest/\",\n        params: {\n            words: params.UserName,\n            language: \"zh\",\n            app_name: \"toutiao_mp\",\n        },\n    });\n\n    if (res.err_no === 0) {\n        return success(\n            res.data.suggest.map((item) => ({\n                user_id: item.user.info.user_id,\n                name: item.user.info.name,\n                avatar_url: item.user.info.avatar_url,\n                followers_count: item.user.relation_count.followers_count,\n            })),\n            \"搜索成功\",\n        );\n    }\n\n    const isSuccess = res.err_no === 0;\n    const message = `搜索头条用户ID成功${isSuccess ? \"成功\" : `失败，原因：${res.error_msg}`}`;\n    const data = isSuccess\n        ? res.data.suggest.map((item) => ({\n              user_id: item.user.info.user_id,\n              name: item.user.info.name,\n              avatar_url: item.user.info.avatar_url,\n              followers_count: item.user.relation_count.followers_count,\n          }))\n        : [];\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface searchWeixinAccountCardParams extends ActiomCommonParams {\n    token: string | number;\n    searchValue: string;\n    pageNum: number;\n}\n\nexport interface WxAccountCardInfo {\n    fakeid: string;\n    nickname: string;\n    alias: string;\n    round_head_img: string;\n    service_type: number;\n    signature: string;\n    verify_status: number;\n}\n\nexport type PublishAction = CommonAction<searchWeixinAccountCardParams, WxAccountCardInfo[]>;\n\nexport const searchWeixinAccountCard: PublishAction = async (_task, params) => {\n    const { token } = params;\n    if (!token) return { code: 414, message: \"缺少token\", data: [] };\n    const fingerprint = \"4695500bc93ab4ce8fb2692da6564e04\";\n\n    try {\n        const http = new Http({\n            headers: {\n                cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            },\n        });\n\n        const accountCardList = await http.api<{\n            base_resp: { err_msg: string; ret: number };\n            list: WxAccountCardInfo[];\n        }>({\n            method: \"get\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/searchbiz\",\n            params: {\n                token,\n                lang: \"zh_CN\",\n                action: \"search_biz\",\n                scene: params.pageNum - 1 || 0,\n                begin: \"0\",\n                count: \"10\",\n                query: params.searchValue,\n                fingerprint,\n                f: \"json\",\n                ajax: 1,\n            },\n        });\n\n        return success(accountCardList.list, \"微信搜索账户数据成功！\");\n    } catch (_error) {\n        return success([], \"微信搜索账户数据失败！\");\n    }\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface searchWeixinUserArticleParams extends ActiomCommonParams {\n    fakeId: string;\n    token: string | number;\n}\n\nexport type PublishAction = CommonAction<searchWeixinUserArticleParams, Record<string, unknown>[]>;\n\nexport const searchWeixinUserArticle: PublishAction = async (_task, params) => {\n    const { token } = params;\n    if (!token) return { code: 414, message: \"缺少token\", data: [] };\n    const fingerprint = \"4695500bc93ab4ce8fb2692da6564e04\";\n\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        },\n    });\n\n    const publishInfo = await http.api<{ base_resp: { err_msg: string; ret: number }; publish_page: string }>(\n        {\n            method: \"get\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/appmsgpublish\",\n            params: {\n                token,\n                lang: \"zh_CN\",\n                fingerprint,\n                f: \"json\",\n                ajax: 1,\n                sub: \"list\",\n                search_field: null,\n                begin: \"0\",\n                count: \"10\",\n                query: \"\",\n                fakeid: params.fakeId,\n                type: \"101_1\",\n                free_publish_type: \"1\",\n                sub_action: \"list_ex\",\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const publishPage: { publish_list: Record<string, unknown>[] } = publishInfo.publish_page\n        ? JSON.parse(publishInfo.publish_page)\n        : { publish_list: [] };\n\n    return success(publishPage.publish_list, \"微信搜索账户数据成功！\");\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface searchXhsConnectionsParams extends ActiomCommonParams {\n    num: number;\n    cursor: string | null;\n}\n\nexport interface ConnectionsResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n    data: ConnectionsDetail;\n}\n\nexport interface ConnectionsDetail {\n    message_list: {\n        title: string;\n        tag: string;\n        tag_type: string;\n        id: string;\n        type: string;\n        user: {\n            xsec_token: string;\n            userid: string;\n            nickname: string;\n            images: string;\n            fstatus: string;\n            red_official_verify_type: number;\n        };\n        time: number;\n        score: number;\n        track_type: string;\n    }[];\n    has_more: boolean;\n    strCursor: string;\n}\n\nexport type PublishAction = CommonAction<searchXhsConnectionsParams, ConnectionsDetail | Record<string, unknown>>;\n\nexport const searchXhsWebConnections: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(0, \"获取新增关注成功\", { message_list: [], has_more: false, strCursor: \"\" });\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: {} };\n\n    const connectionsParams = {\n        num: params.num ?? 20,\n        cursor: params.cursor ?? \"\",\n    };\n    const fatchConnections = \"/api/sns/web/v1/you/connections\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const fatchConnectionsXsHeader = xsEncrypt.signHeadersGet(\n        fatchConnections,\n        recordCookie,\n        \"xhs-pc-web\",\n        connectionsParams,\n    );\n\n    const res = await http.api<ConnectionsResponse>(\n        {\n            method: \"get\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/v1/you/connections\",\n            params: connectionsParams,\n            headers: fatchConnectionsXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.code === 0;\n    const message = `获取新增关注${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data : {};\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface searchXhsLikesParams extends ActiomCommonParams {\n    num: number;\n    cursor: string | null;\n}\n\nexport interface LikesResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n    data: LikesDetail;\n}\n\nexport interface LikesDetail {\n    message_list: {\n        time: number;\n        user_info: {\n            fstatus: string;\n            red_official_verify_type: number;\n            xsec_token: string;\n            userid: string;\n            nickname: string;\n            image: string;\n        };\n        item_info: {\n            image: string;\n            status: number;\n            id: string;\n            content: string;\n            image_info: {\n                url: string;\n                width: number;\n                height: number;\n            };\n            illegal_info: {\n                illegal_status: string;\n                status: number;\n                desc: string;\n            };\n            link: string;\n            user_info: {\n                userid: string;\n                nickname: string;\n                image: string;\n                red_official_verify_type: number;\n            };\n            xsec_token: string;\n            type: string;\n        };\n        comment_info: {\n            illegal_info: {\n                status: number;\n                desc: string;\n                illegal_status: string;\n            };\n            status: number;\n            liked: boolean;\n            like_count: number;\n            id: string;\n            content: string;\n        };\n        liked: boolean;\n        time_flag: number;\n        type: string;\n        title: string;\n        score: number;\n        track_type: string;\n        id: string;\n    }[];\n    has_more: boolean;\n    strCursor: string;\n}\n\nexport type PublishAction = CommonAction<searchXhsLikesParams, LikesDetail | Record<string, unknown>>;\n\nexport const searchXhsWebLikes: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(0, \"获取点赞收藏成功\", { message_list: [], has_more: false, strCursor: \"\" });\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: {} };\n\n    const likesParams = {\n        num: params.num ?? 20,\n        cursor: params.cursor ?? \"\",\n    };\n    const fatchLikes = \"/api/sns/web/v1/you/likes\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const fatchLikesXsHeader = xsEncrypt.signHeadersGet(fatchLikes, recordCookie, \"xhs-pc-web\", likesParams);\n\n    const res = await http.api<LikesResponse>(\n        {\n            method: \"get\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/v1/you/likes\",\n            params: likesParams,\n            headers: fatchLikesXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.code === 0;\n    const message = `获取点赞收藏${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data : {};\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// const GenXSCommon = require(\"../../utils/XhsXsCommonEnc.js\") as (a1cookie: string, x_t: string|number, x_s:string) => string;\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface searchXhsMentionsParams extends ActiomCommonParams {\n    num: number;\n    cursor: string | null;\n}\n\nexport interface MentionsResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n    data: MentionsDetail;\n}\n\nexport interface MentionsDetail {\n    message_list: {\n        title: string;\n        time: number;\n        comment_info: {\n            illegal_info: {\n                status: number;\n                desc: string;\n                illegal_status: string;\n            };\n            status: number;\n            liked: boolean;\n            like_count: number;\n            id: string;\n            content: string;\n        };\n        type: string;\n        score: number;\n        user_info: {\n            userid: string;\n            nickname: string;\n            image: string;\n            red_official_verify_type: number;\n            xsec_token: string;\n        };\n        item_info: {\n            type: string;\n            content: string;\n            image_info: {\n                width: number;\n                height: number;\n                url: string;\n            };\n            status: number;\n            id: string;\n            image: string;\n            illegal_info: {\n                status: number;\n                desc: string;\n                illegal_status: string;\n            };\n            link: string;\n            user_info: {\n                userid: string;\n                nickname: string;\n                image: string;\n                red_official_verify_type: number;\n            };\n            xsec_token: string;\n        };\n        track_type: string;\n        liked: boolean;\n        time_flag: number;\n        id: string;\n    }[];\n    has_more: boolean;\n    strCursor: string;\n}\n\nexport type PublishAction = CommonAction<searchXhsMentionsParams, MentionsDetail | Record<string, unknown>>;\n\nexport const searchXhsWebMentions: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(0, \"获取评论成功\", { message_list: [], has_more: false, strCursor: \"\" });\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: {} };\n\n    const mentionsParams = {\n        num: params.num ?? 20,\n        cursor: params.cursor ?? \"\",\n    };\n    const fatchMentions = \"/api/sns/web/v1/you/mentions\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const fatchMentionsXsHeader = xsEncrypt.signHeadersGet(fatchMentions, recordCookie, \"xhs-pc-web\", mentionsParams);\n\n    // const xscommon = GenXSCommon(a1Cookie, xt, xs)\n    const res = await http.api<MentionsResponse>(\n        {\n            method: \"get\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/v1/you/mentions\",\n            params: mentionsParams,\n            headers: fatchMentionsXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    const isSuccess = res.code === 0;\n    const message = `获取评论${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data : {};\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams, Xiaohongshu } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface searchXiaohongshuLocationParams extends ActiomCommonParams {\n    searchValue: string;\n    latitude?: number;\n    longitude?: number;\n    size?: number;\n    page?: number;\n}\n\nexport type PublishAction = CommonAction<searchXiaohongshuLocationParams, Xiaohongshu.Location[]>;\n\nexport const searchXiaohongshuLocation: PublishAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com\",\n        origin: \"https://creator.xiaohongshu.com\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const result = await http.api<{ code: number; msg: string; data: { poi_list: Xiaohongshu.Location[] } }>(\n        {\n            method: \"post\",\n            url: \"https://edith.xiaohongshu.com/web_api/sns/v1/local/poi/creator/search\",\n            data: {\n                keyword: params.searchValue,\n                latitude: params.latitude ?? 0,\n                longitude: params.longitude ?? 0,\n                page: params.page ?? 1,\n                size: params.size ?? 10,\n                source: \"WEB\",\n                type: 3,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = result.code === 0;\n    const message = `获取地点信息${isSuccess ? \"成功\" : `失败，原因：${result.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? result.data.poi_list : [];\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams, Xiaohongshu } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface SearchXiaohongshuTopicListParams extends ActiomCommonParams {\n    searchValue: string;\n}\n\nexport type PublishAction = CommonAction<SearchXiaohongshuTopicListParams, Xiaohongshu.Topic[]>;\n\nexport const searchXiaohongshuTopicList: PublishAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com\",\n        origin: \"https://creator.xiaohongshu.com\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: [] };\n\n    const topicData = {\n        keyword: params.searchValue,\n        suggest_topic_request: {\n            title: \"\",\n            desc: `#${params.searchValue}`,\n        },\n        page: {\n            page_size: 20,\n            page: 1,\n        },\n    };\n\n    const fatchTopic = \"/web_api/sns/v1/search/topic\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n\n    const fatchTopicXsHeader = xsEncrypt.signHeadersPost(fatchTopic, recordCookie, \"xhs-pc-web\", topicData);\n\n    const result = await http.api<{ code: number; msg: string; data: { topic_info_dtos: Xiaohongshu.Topic[] } }>(\n        {\n            method: \"post\",\n            url: \"https://edith.xiaohongshu.com/web_api/sns/v1/search/topic\",\n            data: topicData,\n            headers: fatchTopicXsHeader,\n            defaultErrorMsg: \"话题搜索异常，请稍后重试。\",\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = result.code === 0;\n    const message = `获取话题${isSuccess ? \"成功\" : `失败，原因：${result.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? result.data.topic_info_dtos : [];\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface searchXiaohongshuUserArticleParams extends ActiomCommonParams {\n    searchValue: string;\n}\n\nconst parseXhsDom = (\n    domString: string,\n): { user: { userPageData: Record<string, unknown>; notes: Record<string, unknown> } } => {\n    const match = domString.match(/window\\.__INITIAL_STATE__\\s*=\\s*(\\{[\\s\\S]*\\})/);\n    if (!match) {\n        if (domString.indexOf(\"website-login/captcha\") !== -1) {\n            throw new Error(\"当前信息需要登录后方可查看！\");\n        }\n        throw new Error(\"小红书页面数据检索失败！\");\n    }\n    const jsObjectStr = match[1];\n    return new Function(`return ${jsObjectStr}`)();\n};\n\nexport type PublishAction = CommonAction<searchXiaohongshuUserArticleParams, Record<string, unknown>>;\n\nexport const searchXiaohongshuUserArticle: PublishAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    // const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    // if (!a1Cookie) return {code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: []};\n    if (params.searchValue.indexOf(\"user/profile\") === -1)\n        return { code: 414, message: \"请输入正确的小红书用户主页链接地址！\", data: {} };\n\n    const result = await http.api<string>(\n        {\n            method: \"get\",\n            url: params.searchValue,\n            defaultErrorMsg: \"用户搜索异常，请稍后重试。\",\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    let INITIAL_STATE = {\n        user: { userPageData: {}, notes: {} },\n    };\n    try {\n        INITIAL_STATE = parseXhsDom(result);\n    } catch (error) {\n        return response(414, (error as Error).message, {});\n    }\n\n    const isSuccess = INITIAL_STATE !== null;\n    const message = `用户文章信息获取${isSuccess ? \"成功！\" : \"失败，请检查！\"}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    return response(isSuccess ? 0 : 414, message, INITIAL_STATE);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const ShipinhaoCheckLinkValidateParamsSchema = ActionCommonParamsSchema.extend({\n    link: z.string(), // 需要验证的链接\n});\n\nexport type ShipinhaoCheckLinkValidateParams = z.infer<typeof ShipinhaoCheckLinkValidateParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\nimport { ShipinhaoCheckLinkValidateParamsSchema } from \"./schema\";\n\nexport type ShipinhaoCheckLinkValidateParams = z.infer<typeof ShipinhaoCheckLinkValidateParamsSchema>;\nexport { ShipinhaoCheckLinkValidateParamsSchema } from \"./schema\";\n\nexport interface ShipinhaoCheckLinkValidateResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        baseResp: {\n            errcode: number;\n            errmsg: string;\n        };\n        title?: string;\n    };\n}\n\nexport type ShipinhaoCheckLinkValidateAction = CommonAction<\n    ShipinhaoCheckLinkValidateParams,\n    {\n        title?: string;\n        errMsg?: string;\n        errCode?: number;\n    }\n>;\n\nexport const shipinhaoCheckLinkValidate: ShipinhaoCheckLinkValidateAction = async (_task, params) => {\n    console.log(\"视频号验证链接参数\", JSON.stringify(params));\n\n    // 验证 cookies\n    if (!params.cookies || params.cookies.length === 0) {\n        return response(414, \"视频号验证链接失败：缺少必需的 cookies 参数\", {});\n    }\n\n    // 验证 extraParam 是否存在\n    if (!params.extraParam) {\n        return response(400, \"缺少 extraParam 参数\", {});\n    }\n\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId || !params.extraParam.uin) {\n        return response(400, \"fingerPrintDeviceId、aId和uin不能为空\", {});\n    }\n\n    // 验证链接参数\n    if (!params.link) {\n        return response(400, \"link 参数不能为空\", {});\n    }\n\n    const headers = {\n        cookie: params.cookies.map((it: { name: string; value: string }) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://channels.weixin.qq.com/\",\n        origin: \"https://channels.weixin.qq.com/\",\n        \"user-agent\":\n            \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    console.log(\"视频号验证链接 headers\", JSON.stringify(headers));\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const GetTimeStamp = ($: number) => ($ ? Date.now().toString().substring(0, $) : Date.now().toString());\n\n    // 视频号助手验证链接参数\n    const linkParams: Record<string, string | number | null> = {\n        timestamp: GetTimeStamp(13),\n        pluginSessionId: null,\n        rawKeyBuff: null,\n        reqScene: 7,\n        scene: 7,\n        url: params.link,\n        _log_finder_id: params.extraParam.finderUserName || \"\",\n        _log_finder_uin: \"\",\n    };\n\n    _task.logger.info(`视频号验证链接参数: ${params.link}`);\n\n    const queryData = {\n        _aid: params.extraParam?.aId || \"\",\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n    };\n    const queryString = new URLSearchParams(queryData).toString();\n\n    console.log(\n        \"视频号验证链接请求\",\n        `https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/helper/helper_parse_mp_link?${queryString}`,\n    );\n\n    // 调用视频号助手验证链接API\n    const res = await http.api<ShipinhaoCheckLinkValidateResponse>(\n        {\n            method: \"post\",\n            url: `https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/helper/helper_parse_mp_link?${queryString}`,\n            data: linkParams,\n            headers: {\n                ...headers,\n                \"Content-Type\": \"application/json\",\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 5000 },\n    );\n\n    console.log(\"视频号验证链接响应\", JSON.stringify(res));\n    _task.logger.info(\"视频号验证链接响应:\", { ...res });\n\n    const isSuccess = res.errCode === 0;\n    const baseResp = res.data?.baseResp;\n    const message = `视频号验证链接${res.data?.title ? \"成功\" : `失败，原因：${baseResp?.errmsg || \"无法添加此链接\"}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    const data: {\n        title?: string;\n        errMsg?: string;\n        errCode?: number;\n    } = {\n        title: res?.data?.title || \"\", // 校验成功会返回title\n        errMsg: baseResp?.errmsg || \"\",\n        errCode: baseResp?.errcode,\n    };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const ShipinhaoGetLocationParamsSchema = ActionCommonParamsSchema.extend({\n    keyword: z.string().optional(),\n    latitude: z.number().optional(),\n    longitude: z.number().optional(),\n    city: z.string().optional(),\n    count: z.number().optional(),\n});\n\nexport type ShipinhaoGetLocationParams = z.infer<typeof ShipinhaoGetLocationParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\nimport { ShipinhaoGetLocationParamsSchema } from \"./schema\";\n\nexport type ShipinhaoGetLocationParams = z.infer<typeof ShipinhaoGetLocationParamsSchema>;\nexport { ShipinhaoGetLocationParamsSchema } from \"./schema\";\n\nexport interface Location {\n    uid: string;\n    name: string;\n    longitude: number;\n    latitude: number;\n    address: string;\n    province: string;\n    city: string;\n    region: string;\n    fullAddress: string;\n    source: number;\n    poiCheckSum: string;\n}\nexport interface Address {\n    city: string;\n    country: string;\n    countryCode: string;\n    latitude: number;\n    longitude: number;\n    poiCheckSum: string;\n    province: string;\n    region: string;\n}\n\nexport interface ShipinhaoLocationResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        list?: Location[];\n        address?: Address;\n        total?: number;\n    };\n}\n\nexport type ShipinhaoGetLocationAction = CommonAction<\n    ShipinhaoGetLocationParams,\n    {\n        locations: Location[];\n        total: number;\n        address?: Address | undefined;\n    }\n>;\n\nexport const shipinhaoGetLocation: ShipinhaoGetLocationAction = async (_task, params) => {\n    console.log(\"视频号获取位置参数\", JSON.stringify(params));\n    // 验证 cookies\n    if (!params.cookies || params.cookies.length === 0) {\n        return response(414, \"视频号获取位置失败：缺少必需的 cookies 参数\", { locations: [], total: 0 });\n    }\n\n    // 验证 extraParam 是否存在\n    if (!params.extraParam) {\n        return response(400, \"缺少 extraParam 参数\", { locations: [], total: 0 });\n    }\n\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId || !params.extraParam.uin) {\n        return response(400, \"fingerPrintDeviceId、aId和uin不能为空\", { locations: [], total: 0 });\n    }\n\n    const headers = {\n        cookie: params.cookies.map((it: { name: string; value: string }) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://channels.weixin.qq.com/\",\n        origin: \"https://channels.weixin.qq.com/\",\n        \"user-agent\":\n            \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    console.log(\"视频号获取位置 headers\", JSON.stringify(headers));\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const keyword = params.keyword || \"\";\n    const GetTimeStamp = ($: number) => ($ ? Date.now().toString().substring(0, $) : Date.now().toString());\n    // 视频号助手位置搜索参数\n    const locationParams: Record<string, string | number> = {\n        query: keyword,\n        cookies: \"\",\n        longitude: 0,\n        latitude: 0,\n        timestamp: GetTimeStamp(13),\n        scene: 7,\n        reqScene: 7,\n        _log_finder_id: \"\",\n    };\n\n    // 如果有经纬度，添加到参数中\n    if (params.latitude && params.longitude) {\n        locationParams.latitude = params.latitude;\n        locationParams.longitude = params.longitude;\n    }\n\n    // 如果有城市，添加到参数中\n    if (params.city) {\n        locationParams.city = params.city;\n    }\n\n    _task.logger.info(\n        `视频号获取位置参数: ${locationParams.query}, ${locationParams.latitude}, ${locationParams.longitude}, ${locationParams.city}`,\n    );\n\n    const queryData = {\n        _aid: params.extraParam?.aId || \"\",\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n    };\n    const queryString = new URLSearchParams(queryData).toString();\n    console.log(\n        \"视频号获取位置请求\",\n        `https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/helper/helper_search_location?${queryString}`,\n    );\n    // 调用视频号助手位置搜索API\n    const res = await http.api<ShipinhaoLocationResponse>(\n        {\n            method: \"post\",\n            url: `https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/helper/helper_search_location?${queryString}`,\n            data: locationParams,\n            headers: {\n                ...headers,\n                \"Content-Type\": \"application/json\",\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 5000 },\n    );\n    console.log(\"视频号获取位置响应\", JSON.stringify(res));\n    _task.logger.info(\"视频号获取位置响应:\", { ...res });\n\n    const isSuccess = res.errCode === 0;\n    const message = `视频号获取位置${isSuccess ? \"成功\" : `失败，原因：${res.errMsg || res.errCode || \"未知错误\"}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    let locations: Location[] = [];\n    let address: Address | undefined;\n    if (isSuccess && res?.data?.list) {\n        locations = res.data.list;\n        address = res.data?.address;\n    }\n\n    const data: { locations: Location[]; total: number; address: Address | undefined } = {\n        locations,\n        total: res?.data?.total || locations.length,\n        address,\n    };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { ActionCommonParamsSchema } from \"../../types\";\n\nexport const ShipinhaoGetMsgParamsSchema = ActionCommonParamsSchema.extend({});\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\nimport { ShipinhaoGetMsgParamsSchema } from \"./schema\";\n\nexport type ShipinhaoGetMsgParams = z.infer<typeof ShipinhaoGetMsgParamsSchema>;\nexport { ShipinhaoGetMsgParamsSchema } from \"./schema\";\n\n// 原始消息数据结构\nexport interface RawMessage {\n    svrMsgId: string;\n    fromUsername: string;\n    toUsername: string;\n    sessionId: string;\n    ts: number;\n    textMsg?: {\n        content: string;\n    };\n    imgMsg?: any;\n}\n\n// 会话信息数据结构\nexport interface SessionInfo {\n    username: string; // 用户名\n    nickname: string; // 昵称\n    headImgUrl: string; // 头像URL\n    sessionId: string; // 会话ID\n    sessionType?: number; // 会话类型 1-用户私信 2-系统消息\n    rejectMsg?: number;\n    extInfo?: any; // sex: 1-男 2-女\n    fromUserType?: number;\n    msgList?: RawMessage[]; // 添加消息列表字段\n}\n\n// 消息列表响应\nexport interface MessageListResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        msg?: RawMessage[];\n    };\n}\n\n// 会话详情响应\nexport interface SessionDetailResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        sessionInfo?: SessionInfo[];\n    };\n}\n\n// 处理后的消息数据\nexport interface ProcessedMessage {\n    platform: string;\n    accountId: string;\n    messageId: string;\n    content: string;\n    timestamp: number;\n    messageUserId: string;\n    messageOwnerUserId: string;\n    raw: RawMessage;\n}\n\n// 处理后的用户数据\nexport interface ProcessedMessageUser {\n    platform: string;\n    accountId: string;\n    messageUserId: string;\n    messageUserName: string;\n    messageUserAvatar: string;\n    messageOwnerId: string;\n    sessionId: string;\n    raw: SessionInfo;\n}\n\nexport type ShipinhaoGetMsgAction = CommonAction<\n    ShipinhaoGetMsgParams,\n    {\n        sessionInfo: SessionInfo[];\n    }\n>;\n\nexport const shipinhaoGetMsg: ShipinhaoGetMsgAction = async (_task, params) => {\n    console.log(\"视频号获取私信参数\", JSON.stringify(params));\n\n    try {\n        // 验证 cookies\n        if (!params.cookies?.length) {\n            return response(414, \"视频号获取私信失败：缺少必需的 cookies 参数\", {\n                sessionInfo: [],\n            });\n        }\n\n        const { extraParam } = params;\n        if (!extraParam?.fingerPrintDeviceId || !extraParam?.aId || !extraParam?.uin) {\n            return response(414, \"fingerPrintDeviceId、aId和uin不能为空\", {\n                sessionInfo: [],\n            });\n        }\n\n        // 获取用户名（finderUsername）\n        const finderUserName = extraParam.finderUserName;\n        if (!finderUserName) {\n            return response(414, \"缺少 finderUserName 参数\", {\n                sessionInfo: [],\n            });\n        }\n\n        const cookieStr = params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\");\n\n        const headers = {\n            referer: \"https://channels.weixin.qq.com/micro/interaction/private_msg\",\n            cookie: cookieStr,\n            Origin: \"https://channels.weixin.qq.com\",\n        };\n\n        const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n        const http = new Http(...args);\n\n        // 第一步：获取消息历史列表\n        const messageListParams = {\n            timestamp: Date.now().toString(),\n            _log_finder_uin: \"\",\n            _log_finder_id: finderUserName,\n            rawKeyBuff: null,\n            pluginSessionId: null,\n            scene: 7,\n            reqScene: 7,\n        };\n\n        const messageListUrl = `https://channels.weixin.qq.com/micro/interaction/cgi-bin/mmfinderassistant-bin/private-msg/get-history-msg?_rid=${rid()}`;\n\n        _task.logger.info(\"请求消息列表:\", { url: messageListUrl });\n\n        const messageListRes = await http.api<MessageListResponse>(\n            {\n                method: \"post\",\n                url: messageListUrl,\n                data: messageListParams,\n                headers,\n            },\n            { retries: 3, retryDelay: 20, timeout: 5000 },\n        );\n\n        // console.log(\"消息列表响应\", JSON.stringify(messageListRes));\n\n        if (!messageListRes?.data?.msg || messageListRes.data.msg.length === 0) {\n            console.log(\"没有消息数据\");\n            return response(0, \"视频号获取私信成功（无数据）\", {\n                sessionInfo: [],\n            });\n        }\n\n        // 收集 sessionId 和消息\n        const sessionIds = new Set<string>();\n        const allMessages = messageListRes.data.msg;\n\n        for (const msg of allMessages) {\n            sessionIds.add(msg.sessionId);\n        }\n\n        // 第二步：获取会话详细信息\n        const sessionDetailParams = {\n            sessionId: Array.from(sessionIds),\n            timestamp: Date.now().toString(),\n            _log_finder_uin: \"\",\n            _log_finder_id: finderUserName,\n            rawKeyBuff: null,\n            pluginSessionId: null,\n            scene: 7,\n            reqScene: 7,\n        };\n\n        const sessionDetailUrl = `https://channels.weixin.qq.com/micro/interaction/cgi-bin/mmfinderassistant-bin/private-msg/get-session-info?_rid=${rid()}`;\n\n        _task.logger.info(\"请求会话详情:\", { sessionDetailUrl });\n\n        const sessionDetailRes = await http.api<SessionDetailResponse>(\n            {\n                method: \"post\",\n                url: sessionDetailUrl,\n                data: sessionDetailParams,\n                headers,\n            },\n            { retries: 3, retryDelay: 20, timeout: 5000 },\n        );\n\n        // console.log(\"会话详情响应\", JSON.stringify(sessionDetailRes));\n\n        if (sessionDetailRes?.data?.sessionInfo && sessionDetailRes.data.sessionInfo.length > 0) {\n            // 遍历每个会话信息，将对应的消息按时间排序后添加到 msgList 字段\n            for (const session of sessionDetailRes.data.sessionInfo) {\n                // 筛选出该会话的所有消息\n                const sessionMessages = allMessages.filter((msg) => msg.sessionId === session.sessionId);\n\n                // 按时间戳降序排序（最新的消息在前）\n                sessionMessages.sort((a, b) => b.ts - a.ts);\n\n                // 将排序后的消息列表添加到会话信息中\n                session.msgList = sessionMessages;\n            }\n        }\n\n        const data = {\n            sessionInfo: sessionDetailRes.data?.sessionInfo || [],\n        };\n\n        console.log(\"消息列表响应111\", JSON.stringify(data));\n\n        return response(0, `视频号获取私信成功${_task.debug ? ` ${http.proxyInfo}` : \"\"}`, data);\n    } catch (error) {\n        console.error(\"获取私信数据异常\", error);\n        return response(414, `获取私信数据异常: ${error}`, {\n            sessionInfo: [],\n        });\n    }\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\n\nexport interface ShipinhaoGetMsgImageParams extends ActiomCommonParams {\n    imgMsg: {\n        aeskey: string;\n        url: string;\n    };\n    rawContent: string;\n}\n\n// 图片信息响应数据结构\nexport interface MediaInfoResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        baseResp?: {\n            errcode: number;\n        };\n        imgContent?: string; // base64 编码的图片内容（无头）\n        length?: string;\n        ext?: string; // 图片扩展名，如 png、jpeg 等\n    };\n}\n\nexport type ShipinhaoGetMediaInfoAction = CommonAction<\n    ShipinhaoGetMsgImageParams,\n    {\n        base64Img: string;\n    }\n>;\n\nexport const shipinhaoGetMsgImage: ShipinhaoGetMediaInfoAction = async (_task, params) => {\n    try {\n        // 验证 cookies\n        if (!params.cookies?.length) {\n            return response(414, \"视频号获取媒体信息失败：缺少必需的 cookies 参数\", {\n                base64Img: \"\",\n            });\n        }\n\n        const { extraParam, imgMsg, rawContent } = params;\n        if (!extraParam?.fingerPrintDeviceId || !extraParam?.aId || !extraParam?.uin) {\n            return response(414, \"fingerPrintDeviceId、aId和uin不能为空\", {\n                base64Img: \"\",\n            });\n        }\n\n        const finderUserName = extraParam.finderUserName;\n        if (!finderUserName) {\n            return response(414, \"缺少 finderUserName 参数\", {\n                base64Img: \"\",\n            });\n        }\n\n        const cookieStr = params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\");\n\n        const headers = {\n            referer: \"https://channels.weixin.qq.com/micro/interaction/private_msg\",\n            cookie: cookieStr,\n            Origin: \"https://channels.weixin.qq.com\",\n            Accept: \"*/*\",\n            \"Accept-Language\": \"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\",\n            \"Content-Type\": \"application/json\",\n            \"X-WECHAT-UIN\": extraParam.uin,\n            \"finger-print-device-id\": extraParam.fingerPrintDeviceId,\n            \"Sec-Fetch-Dest\": \"empty\",\n            \"Sec-Fetch-Mode\": \"cors\",\n            \"Sec-Fetch-Site\": \"same-origin\",\n        };\n\n        const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n        const http = new Http(...args);\n\n        const mediaInfoRes = await http.api<MediaInfoResponse>(\n            {\n                method: \"post\",\n                url: `https://channels.weixin.qq.com/micro/interaction/cgi-bin/mmfinderassistant-bin/private-msg/get-media-info?_aid=${extraParam.aId}&_rid=${rid()}&_pageUrl=https:%2F%2Fchannels.weixin.qq.com%2Fmicro%2Finteraction%2Fprivate_msg`,\n                data: {\n                    mediaType: 3, // 图片类型固定为3\n                    imgMsg: imgMsg,\n                    rawContent: rawContent,\n                    timestamp: Date.now().toString(),\n                    _log_finder_uin: null,\n                    _log_finder_id: finderUserName,\n                    rawKeyBuff: null,\n                    pluginSessionId: null,\n                    scene: 7,\n                    reqScene: 7,\n                },\n                headers,\n            },\n            { retries: 3, retryDelay: 20, timeout: 5000 },\n        );\n\n        console.log(\"媒体信息响应\", JSON.stringify(mediaInfoRes));\n\n        if (mediaInfoRes?.errCode !== 0 || !mediaInfoRes.data?.imgContent) {\n            return response(414, `视频号获取媒体信息失败: ${mediaInfoRes?.errMsg || \"未知错误\"}`, {\n                base64Img: \"\",\n            });\n        }\n\n        const extMap: Record<string, string> = {\n            png: \"image/png\",\n            jpg: \"image/jpeg\",\n            jpeg: \"image/jpeg\",\n            gif: \"image/gif\",\n            webp: \"image/webp\",\n            bmp: \"image/bmp\",\n            svg: \"image/svg+xml\",\n        };\n\n        const normalizedExt = mediaInfoRes.data?.ext?.toLowerCase().replace(/^\\./, \"\");\n        const mimeType = extMap[normalizedExt || \"\"] || \"image/png\"; // 默认使用 png\n        const base64Img = `data:${mimeType};base64,${mediaInfoRes.data?.imgContent}`;\n\n        const data = {\n            base64Img,\n        };\n\n        console.log(\"媒体信息处理结果\", JSON.stringify(data));\n\n        return response(0, `视频号获取媒体信息成功${_task.debug ? ` ${http.proxyInfo}` : \"\"}`, data);\n    } catch (error) {\n        console.error(\"获取媒体信息异常\", error);\n        return response(414, `获取媒体信息异常: ${error}`, {\n            base64Img: \"\",\n        });\n    }\n};\n","import { type Page, success, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response } from \"playwright-core\";\nimport type { SteelAction } from \"./index\";\n\n/** 视频号助手 finder 账号信息 */\ninterface FinderInfo {\n    finderUsername: string;\n    nickname: string;\n    headImgUrl: string;\n    uniqId: string;\n    isMasterFinder: boolean;\n}\n\n/**\n * 视频号登录 RPA\n *\n * 流程：\n * 1. 打开视频号助手登录页，生成远程调试地址\n * 2. 拦截不必要资源（mp4/ttf），提升加载速度\n * 3. 监听 auth_login_status 接口判断扫码状态\n * 4. 扫码确认后切换监听 auth_data 获取用户信息和 finder 列表\n * 5. 提取 localStorage 中的 fingerPrintDeviceId 和 aId\n * 6. 收集 cookie 并返回结果\n */\nexport const rpaAction: SteelAction = async (task, _params) => {\n    const reporter = task.reportService?.reportLoginStatus ?? (() => Promise.resolve());\n\n    let page: Page;\n    /** 标记扫码状态：new → scanned → confirmed */\n    let statusMachine: \"new\" | \"scanned\" | \"confirmed\" = \"new\";\n    let isSelfClosing = false;\n    let handleBrowserDisconnected: (() => void) | undefined;\n    const cleanup = async () => {\n        if (handleBrowserDisconnected) {\n            task._steelBrowser?.off(\"disconnected\", handleBrowserDisconnected);\n        }\n        if (page && !page.isClosed()) {\n            await page.close().catch(() => {});\n        }\n    };\n\n    // ========== 第一步：启动浏览器并打开登录页 ==========\n    try {\n        page = await task.createPage({\n            url: \"https://channels.weixin.qq.com/login.html\",\n        });\n\n        if (!task._session?.id) throw new Error(\"Session ID 不存在\");\n\n        handleBrowserDisconnected = () => {\n            if (task.debug && isSelfClosing) {\n                task.logger.info(\"执行结束，关闭浏览器！\");\n            } else {\n                task.logger.info(\"浏览器被手动释放或意外关闭！\");\n            }\n        };\n        task._steelBrowser?.on(\"disconnected\", handleBrowserDisconnected);\n    } catch (e) {\n        task.logger.error(\"浏览器启动失败\", e);\n        return { code: 414, message: `浏览器启动失败: ${e}`, data: {} };\n    }\n\n    // 拦截不必要的资源，提升加载速度\n    await page.route(\"**/*.mp4\", (route) => route.abort());\n    await page.route(\"**/*.ttf\", (route) => route.abort());\n    await page.addInitScript(() => {\n        window.requestAnimationFrame = () => 0;\n    });\n\n    task.logger.info(\"页面创建成功，等待二维码加载...\");\n\n    // 等待页面稳定\n    await page.waitForTimeout(2000);\n\n    // ========== 第二步：生成远程调试地址 ==========\n    const pageInfo = await task._client?.sessions.liveDetails(task._session.id);\n    const pageId = pageInfo?.pages[0].id ?? \"\";\n\n    const baseHost = task._session.websocketUrl?.replace(/^wss?:\\/\\//, \"\") ?? \"\";\n    const connectAddress = new URLSearchParams({ baseHost, pageId }).toString();\n\n    task.reportService?.settingSessionID?.(task._session?.id || \"\");\n\n    task.logger.info(\"远程调试地址已生成，现在可以安全访问远程页面\");\n    await reporter(0, \"浏览器启动成功，请使用微信App扫码登录……\", { connectAddress });\n\n    // ========== 第三步：监听扫码状态与登录结果 ==========\n    const userInfo: UserInfo = { finderUsername: \"\", uniqueId: \"\", avatar: \"\", name: \"\" };\n    let finderList: FinderInfo[] = [];\n\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            /** 清理所有监听器，防止重复触发 */\n            const cleanup = (status?: unknown) => {\n                if (finished) return;\n                finished = true;\n                page.off(\"response\", handleAuthData);\n                page.off(\"response\", handleAuthLoginStatus);\n                if (status !== undefined) reject(status);\n            };\n\n            /**\n             * 登录成功后获取用户数据\n             *\n             * 监听两个接口：\n             * - auth_data：获取 finder 用户信息和多账号列表\n             * - helper_upload_params：获取用户 uin（微信号标识）\n             */\n            const handleAuthData = async (resp: Response) => {\n                try {\n                    const url = resp.url();\n\n                    if (\n                        url.includes(\"/cgi-bin/mmfinderassistant-bin/auth/auth_data\") ||\n                        url.includes(\"/mmfinderassistant-bin/auth/auth_data\")\n                    ) {\n                        await reporter(0, \"扫码成功!\", { stage: \"scanQrcode\", connectAddress });\n                        try {\n                            const jsonResponse = await resp.json();\n\n                            if (jsonResponse.errCode === 0 && jsonResponse.data) {\n                                const data = jsonResponse.data;\n\n                                // 获取主视频号信息\n                                if (data.finderUser) {\n                                    userInfo.name = data.finderUser.nickname || \"\";\n                                    userInfo.uniqueId = data.finderUser.uniqId || \"\";\n                                    userInfo.avatar = data.finderUser.headImgUrl || \"\";\n                                    userInfo.finderUsername = data.finderUser.finderUsername || \"\";\n                                }\n\n                                // 视频号助手支持多账号管理，获取完整列表\n                                if (data.finderList && Array.isArray(data.finderList)) {\n                                    finderList = data.finderList.map((f: any) => ({\n                                        finderUsername: f.finderUsername,\n                                        nickname: f.nickname,\n                                        headImgUrl: f.headImgUrl,\n                                        uniqId: f.uniqId,\n                                        isMasterFinder: f.isMasterFinder,\n                                    }));\n                                }\n\n                                task.logger.info(\"auth_data 解析成功\", {\n                                    nickname: userInfo.name,\n                                    finderCount: finderList.length,\n                                });\n                            }\n                        } catch (e) {\n                            task.logger.warn(\"解析 auth_data 失败:\", {\n                                error: e instanceof Error ? e.message : String(e),\n                                url,\n                            });\n                        }\n                    } else if (url.includes(\"/mmfinderassistant-bin/helper/helper_upload_params\")) {\n                        // 通过 upload_params 接口获取用户 uin\n                        task.logger.info(\"检测到 helper_upload_params 接口\");\n                        cleanup();\n                        try {\n                            const jsonUserInfo: { data: { uin: string } } = await resp.json();\n                            userInfo.uin = jsonUserInfo.data.uin ?? \"\";\n                            task.logger.info(\"用户uin获取成功\", { uin: userInfo.uin });\n                        } catch (e) {\n                            task.logger.warn(\"无法解析用户信息:\", {\n                                url,\n                                error: e instanceof Error ? e.message : String(e),\n                            });\n                        }\n                        resolve();\n                    }\n                } catch (err) {\n                    task.logger.error(\"监听登录结果出现异常\", err);\n                    cleanup(err);\n                }\n            };\n\n            /**\n             * 监听视频号助手扫码状态接口 auth_login_status\n             *\n             * 状态码说明：\n             *   status=0, acctStatus=0 → 未扫码\n             *   status=5, acctStatus=1 → 已扫码，等待手机确认\n             *   status=1, acctStatus=1 → 已确认登录\n             *   status=3               → 登录成功（另一种状态）\n             */\n            const handleAuthLoginStatus = async (response: Response) => {\n                try {\n                    const url = response.url();\n\n                    if (\n                        !url.includes(\"/cgi-bin/mmfinderassistant-bin/auth/auth_login_status\") &&\n                        !url.includes(\"/mmfinderassistant-bin/auth/auth_login_status\")\n                    ) {\n                        return;\n                    }\n\n                    let jsonResponse: {\n                        errCode: number;\n                        errMsg?: string;\n                        data?: { status: number; acctStatus: number };\n                    };\n\n                    try {\n                        jsonResponse = await response.json();\n                    } catch (e) {\n                        task.logger.warn(\"Response body unavailable\", { url, error: e });\n                        return;\n                    }\n\n                    if (jsonResponse.errCode !== 0) {\n                        task.logger.warn(\"auth_login_status 返回错误:\", {\n                            errCode: jsonResponse.errCode,\n                            errMsg: jsonResponse.errMsg,\n                        });\n                        return;\n                    }\n\n                    const data = jsonResponse.data;\n                    if (!data) return;\n\n                    const { status, acctStatus } = data;\n                    task.logger.info(\"auth_login_status 状态:\", { status, acctStatus });\n\n                    // 未扫码，继续等待\n                    if (status === 0 && acctStatus === 0) return;\n\n                    // 已扫码，等待确认（仅首次上报）\n                    if (status === 5 && acctStatus === 1) {\n                        if (statusMachine !== \"scanned\") {\n                            statusMachine = \"scanned\";\n                            task.logger.info(\"用户已扫码，等待确认...\");\n                        }\n                        return;\n                    }\n\n                    // 登录成功：切换监听 → auth_data\n                    if ((status === 1 && acctStatus === 1) || status === 3) {\n                        statusMachine = \"confirmed\";\n                        task.logger.info(\"扫码确认，开始监听登录完成...\");\n                        page.off(\"response\", handleAuthLoginStatus);\n                        page.on(\"response\", handleAuthData);\n                    }\n                } catch (err) {\n                    task.logger.error(\"handleAuthLoginStatus 异常:\", err);\n                    cleanup(err);\n                }\n            };\n\n            // 提前注册监听，防止丢失请求\n            page.on(\"response\", handleAuthLoginStatus);\n        });\n    } catch (e) {\n        isSelfClosing = true;\n        const errorMessage = e instanceof Error ? e.message : String(e);\n        await cleanup();\n        return { code: 500, message: errorMessage, data: { stage: \"scanQrcode\", connectAddress } };\n    }\n\n    // ========== 第四步：提取 localStorage 数据 ==========\n    let localStorageData: Record<string, string> = {};\n    const maxRetries = 10;\n\n    task.logger.info(\"开始提取 localStorage 数据...\");\n\n    for (let retryCount = 0; retryCount < maxRetries; retryCount++) {\n        try {\n            localStorageData = await page.evaluate(() => ({\n                fingerPrintDeviceId: localStorage.getItem(\"_finger_print_device_id\") || \"\",\n                aId: localStorage.getItem(\"__rx::aid\") || \"\",\n            }));\n\n            if (localStorageData[\"fingerPrintDeviceId\"] && localStorageData[\"aId\"]) {\n                task.logger.info(\"视频号 fingerPrintDeviceId & aId 数据已获取\");\n                break;\n            }\n\n            task.logger.info(`等待 localStorage 数据... (${retryCount + 1}/${maxRetries})`);\n            await page.waitForTimeout(1000);\n        } catch (error) {\n            task.logger.warn(`提取 localStorage 数据失败 (尝试 ${retryCount + 1}/${maxRetries}):`, {\n                error: error instanceof Error ? error.message : String(error),\n            });\n            await page.waitForTimeout(1000);\n        }\n    }\n\n    // ========== 第五步：收集 cookie 并返回结果 ==========\n    const cookie = JSON.stringify(await task._steelBrowserContext?.cookies());\n    isSelfClosing = true;\n    await cleanup();\n\n    return success(\n        {\n            connectAddress,\n            cookie,\n            userInfo,\n            finderList,\n            extraParam: { ...localStorageData, uin: userInfo.uin, finderUserName: userInfo.finderUsername },\n        },\n        \"登录成功！\",\n    );\n};\n","import { TaskState, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response } from \"playwright-core\";\nimport { ExecutionState } from \"../../types\";\nimport { ProxyAgent } from \"../../utils/proxy\";\nimport type { SteelAction } from \"./index\";\n\nconst scanRetryMaxCount = 60; // 二维码扫描重试次数\nconst waitQrcodeResultMaxTime = scanRetryMaxCount * 2 * 1000; // 最长等待时间\n\n// 视频号助手登录\nexport const rpaServer: SteelAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    let executionState: ExecutionState | undefined;\n\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n\n    const page = await task.createPage({\n        url: \"https://channels.weixin.qq.com/login.html\",\n        proxyUrl,\n        userAgent: params.userAgent,\n        ...(params.viewport ? { viewport: params.viewport } : {}),\n    });\n\n    task.steelBrowser?.on(\"disconnected\", async () => {\n        const browserContext = task.steelBrowserContext;\n        const browser = task.steelBrowser;\n        executionState = ExecutionState.BROWSER_CLOSED;\n        await page.close();\n\n        if (browserContext) {\n            await browserContext.close();\n        }\n        if (browser) {\n            await browser.close();\n        }\n    });\n\n    await updateTaskState?.({\n        state: TaskState.WAIT_SCAN,\n        connectAddress: await task.steelConnector?.getLive(task.sessionId || \"\"),\n        sessionId: task.sessionId,\n    });\n\n    let token: string | undefined;\n    let userInfo: UserInfo = { finderUsername: \"\", uniqueId: \"\", avatar: \"\", name: \"\" };\n    let finderList: Array<{\n        finderUsername: string;\n        nickname: string;\n        headImgUrl: string;\n        uniqId: string;\n        isMasterFinder: boolean;\n    }> = [];\n\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            const timer = setTimeout(async () => {\n                cleanup();\n                executionState = ExecutionState.TIMEOUT;\n                await updateTaskState?.({\n                    state: TaskState.TIMEOUT,\n                    error: \"等待扫码登录超时\",\n                });\n                resolve();\n            }, waitQrcodeResultMaxTime);\n\n            const cleanup = () => {\n                if (finished) return;\n                finished = true;\n                clearTimeout(timer);\n                page.off(\"response\", handleAfterLogin);\n                page.off(\"response\", handleScanStatus);\n                task.steelBrowser?.off(\"disconnected\", handleBrowserClosed);\n            };\n\n            const handleBrowserClosed = () => {\n                cleanup();\n                executionState = ExecutionState.BROWSER_CLOSED;\n                resolve();\n            };\n\n            const handleAfterLogin = async (resp: Response) => {\n                try {\n                    const url = resp.url();\n\n                    // 视频号助手登录成功后获取认证数据\n                    if (\n                        url.includes(\"/cgi-bin/mmfinderassistant-bin/auth/auth_data\") ||\n                        url.includes(\"/mmfinderassistant-bin/auth/auth_data\")\n                    ) {\n                        try {\n                            const jsonResponse = await resp.json();\n\n                            if (jsonResponse.errCode === 0 && jsonResponse.data) {\n                                await updateTaskState?.({\n                                    state: TaskState.CONFIRMED,\n                                });\n\n                                const data = jsonResponse.data;\n\n                                // 获取视频号列表\n                                if (data.finderUser) {\n                                    userInfo.name = data.finderUser.nickname || \"\";\n                                    userInfo.uniqueId = data.finderUser.uniqId || \"\";\n                                    userInfo.avatar = data.finderUser.headImgUrl || \"\";\n                                    userInfo.finderUsername = data.finderUser.finderUsername || \"\";\n                                }\n\n                                // 如果有多个视频号，获取列表\n                                if (data.finderList && Array.isArray(data.finderList)) {\n                                    finderList = data.finderList.map((f: any) => ({\n                                        finderUsername: f.finderUsername,\n                                        nickname: f.nickname,\n                                        headImgUrl: f.headImgUrl,\n                                        uniqId: f.uniqId,\n                                        isMasterFinder: f.isMasterFinder,\n                                    }));\n                                }\n\n                                task.logger.info(\"auth_data 解析成功\", {\n                                    nickname: userInfo.name,\n                                    finderCount: finderList.length,\n                                });\n                            }\n                        } catch (e) {\n                            task.logger.warn(\"解析 auth_data 失败:\", {\n                                error: e instanceof Error ? e.message : String(e),\n                                url,\n                            });\n                        }\n                    } else if (url.includes(\"/mmfinderassistant-bin/helper/helper_upload_params\")) {\n                        // 获取用户微信号\n                        task.logger.info(\"检测到 helper_upload_params 接口\");\n                        cleanup();\n                        try {\n                            const jsonUserInfo: { data: { uin: string } } = await resp.json();\n                            userInfo.uin = jsonUserInfo.data.uin ?? \"\";\n                            task.logger.info(\"用户uin获取成功\", { uin: userInfo.uin });\n                        } catch (e) {\n                            task.logger.warn(\"无法解析用户信息:\", {\n                                url,\n                                error: e instanceof Error ? e.message : String(e),\n                            });\n                        }\n\n                        await updateTaskState?.({\n                            state: TaskState.CONFIRMED,\n                        });\n\n                        executionState = ExecutionState.SUCCESS;\n                        resolve();\n                    }\n\n                    // 备选：检测登录成功后的页面跳转\n                    if (url.includes(\"/platform\") || url.includes(\"/live\")) {\n                        // 如果还没处理过，尝试从页面获取数据\n                        if (executionState !== ExecutionState.SUCCESS) {\n                            try {\n                                await page.waitForFunction(() => !!(window as any).finder?.helperData, {\n                                    timeout: 5000,\n                                });\n\n                                const helperData = await page.evaluate(() => {\n                                    const win = window as unknown as {\n                                        finder: {\n                                            helperData: {\n                                                finderList: Array<any>;\n                                            };\n                                        };\n                                    };\n                                    return win.finder.helperData;\n                                });\n\n                                if (helperData) {\n                                    cleanup();\n                                    finderList = helperData.finderList || [];\n\n                                    const masterFinder = finderList.find((f) => f.isMasterFinder) || finderList[0];\n                                    if (masterFinder) {\n                                        userInfo = {\n                                            name: masterFinder.nickname,\n                                            uniqueId: masterFinder.finderUsername,\n                                            avatar: masterFinder.headImgUrl,\n                                            finderUsername: masterFinder.finderUsername,\n                                        };\n                                    }\n\n                                    await updateTaskState?.({\n                                        state: TaskState.CONFIRMED,\n                                    });\n\n                                    executionState = ExecutionState.SUCCESS;\n                                    resolve();\n                                }\n                            } catch (e) {\n                                task.logger.warn(\"从页面获取 helperData 失败:\", { error: e });\n                            }\n                        }\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 视频号助手扫码状态检测接口：auth_login_status\n            // 状态码说明：\n            // status: 0 = 未扫码\n            // status: 5 = 已扫码未确认 (手机上点击确认登录)\n            // status: 1 = 已确认登录成功\n            // status: 3 = 登录成功（另一种状态）\n            // acctStatus: 0 = 未登录, 1 = 已登录\n            const handleScanStatus = async (response: Response) => {\n                try {\n                    const url = response.url();\n\n                    // 检测视频号助手扫码状态接口\n                    if (!url.includes(\"/mmfinderassistant-bin/auth/auth_login_status\")) {\n                        return;\n                    }\n\n                    let jsonResponse: Record<string, unknown>;\n                    try {\n                        const text = await response.text();\n                        if (!text) {\n                            task.logger.warn(\"Empty response body:\", { url });\n                            return;\n                        }\n                        jsonResponse = JSON.parse(text);\n                    } catch (e) {\n                        task.logger.warn(\"Failed to parse json:\", { url, error: e });\n                        return;\n                    }\n\n                    // 检查错误码\n                    if (jsonResponse.errCode !== 0) {\n                        task.logger.warn(\"auth_login_status 返回错误:\", {\n                            errCode: jsonResponse.errCode,\n                            errMsg: jsonResponse.errMsg,\n                        });\n                        return;\n                    }\n\n                    const data = jsonResponse.data as Record<string, number> | undefined;\n                    if (!data) return;\n\n                    const status = data.status;\n                    const acctStatus = data.acctStatus;\n\n                    task.logger?.info(`扫码状态: status=${status}, acctStatus=${acctStatus}`);\n\n                    // 状态判断\n                    if (status === 0 && acctStatus === 0) {\n                        // 未扫码，继续等待\n                        return;\n                    }\n\n                    if (status === 5 && acctStatus === 1) {\n                        // 已扫码，等待确认\n                        await updateTaskState?.({\n                            state: TaskState.SCANNED,\n                        });\n                        return;\n                    }\n\n                    // 登录成功状态：status=1 或 status=3\n                    if ((status === 1 && acctStatus === 1) || (status === 3 && acctStatus === 0)) {\n                        // 扫码完成，开始监听登录后的数据获取\n                        page.off(\"response\", handleScanStatus);\n                        page.on(\"response\", handleAfterLogin);\n\n                        // 触发获取 auth_data\n                        try {\n                            await page.evaluate(() => {\n                                // 触发视频号助手获取用户数据\n                                const event = new CustomEvent(\"getAuthData\");\n                                window.dispatchEvent(event);\n                            });\n                        } catch (e) {\n                            // 忽略错误，继续监听响应\n                        }\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 在页面加载之前就注册监听，防止丢失请求\n            task.steelBrowser?.on(\"disconnected\", handleBrowserClosed);\n            page.on(\"response\", handleScanStatus);\n        });\n    } finally {\n        await page.close();\n    }\n\n    if (executionState === undefined) return { code: 500, message: \"未知错误\", data: {} };\n\n    switch (executionState) {\n        case ExecutionState.BROWSER_CLOSED: {\n            const msg = \"浏览器已关闭，任务中断!\";\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: \"浏览器已关闭\",\n            });\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.TIMEOUT: {\n            const msg = \"等待用户扫码登录超时!\";\n            await updateTaskState?.({\n                state: TaskState.TIMEOUT,\n                error: msg,\n            });\n            task.logger.info(msg);\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.SUCCESS: {\n            let localStorageData: Record<string, string> = {};\n            let retryCount = 0;\n            const maxRetries = 10;\n\n            task.logger.info(\"开始提取 localStorage 数据...\");\n\n            while (retryCount < maxRetries) {\n                try {\n                    localStorageData = await page.evaluate(() => ({\n                        fingerPrintDeviceId: localStorage.getItem(\"_finger_print_device_id\") || \"\",\n                        aId: localStorage.getItem(\"__rx::aid\") || \"\",\n                    }));\n\n                    // 检查是否有数据\n                    if (localStorageData[\"fingerPrintDeviceId\"] && localStorageData[\"aId\"]) {\n                        task.logger.info(\"视频号fingerPrintDeviceId&aId数据已获取\");\n                        break;\n                    }\n\n                    retryCount++;\n                    task.logger.info(`等待 localStorage 数据... (${retryCount}/${maxRetries})`);\n                    await page.waitForTimeout(1000);\n                } catch (error) {\n                    task.logger.warn(`提取 localStorage 数据失败 (尝试 ${retryCount + 1}/${maxRetries}):`, {\n                        error: error instanceof Error ? error.message : String(error),\n                    });\n                    retryCount++;\n                    await page.waitForTimeout(1000);\n                }\n            }\n\n            await updateTaskState?.({\n                state: TaskState.SUCCESS,\n                result: {\n                    cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),\n                    token, // 视频号助手使用 sessionId 作为主要凭证\n                    userInfo: userInfo,\n                    finderList, // 返回所有可管理的视频号列表\n                    extraParam: { ...localStorageData, uin: userInfo.uin, finderUserName: userInfo.finderUsername }, // 添加 localStorage 数据和 uin\n                },\n            });\n            return {\n                code: 0,\n                message: \"成功\",\n                data: {\n                    cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),\n                    token,\n                    userInfo,\n                    finderList, // 包含所有视频号信息，支持多账号管理\n                    extraParam: { ...localStorageData, uin: userInfo.uin, finderUserName: userInfo.finderUsername }, // 添加 localStorage 数据和 uin\n                },\n            };\n        }\n        default:\n            return { code: 500, message: \"任务执行中断\", data: {} };\n    }\n};\n","import { CommonAction, success } from \"@iflyrpa/share\";\nimport { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaServer } from \"./rpa-server\";\n\nexport type ShipinhaoLoginParams = ActiomCommonParams;\n\nexport type SteelAction = CommonAction<ActiomCommonParams, Record<string, unknown>>;\n\nexport const shipinhaoLogin: SteelAction = async (task, params) => {\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return success({}, \"暂不支持mockApi\");\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaServer(task, params);\n    }\n\n    return executeAction(rpaServer)(task, params);\n};\n","import crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Http } from \"../../utils/http\";\n\n/**\n * 视频号分片上传配置\n */\ninterface UploadConfig {\n    chunkSize?: number; // 分片大小，默认 8MB\n    concurrentLimit?: number; // 并发数，默认 4\n    singleFileSize?: number; // 大文件阈值，默认 10MB\n    http?: Http; // Http 实例\n    timeout?: number; // 单次网络请求超时(ms)，默认 60s\n    retries?: number; // 网络请求重试次数，默认 3\n    retryDelay?: number; // 重试间隔(ms)，默认 2000\n}\n\n/**\n * 分片信息\n */\ninterface PartInfo {\n    PartNumber: number;\n    ETag: string;\n}\n\n/**\n * 上传进度回调\n */\ntype ProgressCallback = (progress: {\n    uploadedChunks: number;\n    totalChunks: number;\n    percent: number;\n    speed?: number; // KB/s\n}) => void;\n\n/**\n * 视频号分片上传器\n * 参考前端代码逻辑实现\n */\nexport class VideoChannelUploader {\n    private chunkSize: number;\n    private concurrentLimit: number;\n    private singleFileSize: number;\n    private http: Http;\n    private reqOptions: { timeout: number; retries: number; retryDelay: number };\n\n    // 上传状态\n    private uploadTaskId: string = \"\";\n    private partInfo: PartInfo[] = [];\n    private md5: string = \"\";\n    private chunkCount: number = 0;\n    private uploadedChunks: number = 0;\n    private startTime: number = 0;\n    private uploadSpeed: number = 0;\n    private speedRecords: number[] = [];\n    private speedInterval?: NodeJS.Timeout;\n\n    constructor(config: UploadConfig = {}) {\n        this.chunkSize = config.chunkSize || 8 * 1024 * 1024; // 8MB\n        this.concurrentLimit = config.concurrentLimit || 4;\n        this.singleFileSize = config.singleFileSize || 10 * 1024 * 1024; // 10MB\n        this.http = config.http || new Http();\n        this.reqOptions = {\n            timeout: config.timeout ?? 60 * 1000, // 60s，上传/下载对网络更敏感\n            retries: config.retries ?? 3,\n            retryDelay: config.retryDelay ?? 2000,\n        };\n    }\n\n    /**\n     * 计算 Buffer MD5（前 5MB）\n     */\n    private calculateMd5(buffer: Buffer): string {\n        const MAX_SIZE = 5 * 1024 * 1024; // 5MB\n        const slice = buffer.length > MAX_SIZE ? buffer.slice(0, MAX_SIZE) : buffer;\n        return crypto.createHash(\"md5\").update(slice).digest(\"hex\");\n    }\n\n    /**\n     * 计算分片 MD5（完整分片）\n     */\n    private calculateChunkMd5(buffer: Buffer): string {\n        return crypto\n            .createHash(\"md5\")\n            .update(buffer as Uint8Array)\n            .digest(\"hex\");\n    }\n\n    /**\n     * 生成 UUID\n     */\n    private generateUUID(): string {\n        return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n            const r = (Math.random() * 16) | 0;\n            const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n            return v.toString(16);\n        });\n    }\n\n    /**\n     * 获取图片尺寸\n     */\n    private getImageSize(buffer: Buffer): { width: number; height: number } {\n        try {\n            // PNG\n            if (buffer[0] === 0x89 && buffer[1] === 0x50) {\n                return { width: buffer.readUInt32BE(16), height: buffer.readUInt32BE(20) };\n            }\n            // JPEG\n            if (buffer[0] === 0xff && buffer[1] === 0xd8) {\n                let offset = 2;\n                while (offset < buffer.length) {\n                    if (buffer[offset] !== 0xff) break;\n                    const marker = buffer[offset + 1];\n                    const size = buffer.readUInt16BE(offset + 2);\n                    if (marker === 0xc0 || marker === 0xc1 || marker === 0xc2) {\n                        return {\n                            height: buffer.readUInt16BE(offset + 5),\n                            width: buffer.readUInt16BE(offset + 7),\n                        };\n                    }\n                    offset += size + 2;\n                }\n            }\n            // GIF\n            if (buffer[0] === 0x47 && buffer[1] === 0x49) {\n                return { width: buffer.readUInt16LE(6), height: buffer.readUInt16LE(8) };\n            }\n            return { width: 0, height: 0 };\n        } catch {\n            return { width: 0, height: 0 };\n        }\n    }\n\n    /**\n     * 读取文件为 Buffer\n     */\n    private async readFile(filePath: string): Promise<Buffer> {\n        if (filePath.startsWith(\"http://\") || filePath.startsWith(\"https://\")) {\n            const resp = await this.http.api<Buffer>(\n                {\n                    url: filePath,\n                    method: \"get\",\n                    responseType: \"arraybuffer\",\n                },\n                this.reqOptions,\n            );\n            return Buffer.from(resp as any);\n        }\n        return fs.promises.readFile(filePath);\n    }\n\n    /**\n     * 获取上传认证参数（UploadID）\n     */\n    private async getUploadId(\n        fileSize: number,\n        fileName: string,\n        uin: number,\n        authKey: string,\n        taskId: string,\n    ): Promise<string> {\n        const blockSum = Math.ceil(fileSize / this.chunkSize);\n        const blockPartLength: number[] = [];\n\n        // 计算每个分片的结束位置（前端逻辑）\n        for (let i = 1; i <= blockSum; i++) {\n            const end = Math.min(i * this.chunkSize, fileSize);\n            blockPartLength.push(end);\n        }\n\n        const requestBody = {\n            BlockSum: blockSum,\n            BlockPartLength: blockPartLength,\n        };\n\n        const headers = {\n            \"X-Arguments\": `apptype=251&filetype=20304&weixinnum=${uin}&filekey=${encodeURIComponent(fileName)}&filesize=${fileSize}&taskid=${taskId}&scene=2`,\n            Authorization: authKey,\n            Accept: \"application/json, text/plain, */*\",\n            \"Content-MD5\": \"null\",\n            Referer: \"https://channels.weixin.qq.com/\",\n            Origin: \"https://channels.weixin.qq.com/\",\n        };\n\n        const resp = await this.http.api<{ UploadID?: string; errMsg?: string }>(\n            {\n                url: \"https://finderassistancea.video.qq.com/applyuploaddfs\",\n                method: \"put\",\n                headers,\n                data: requestBody,\n                defaultErrorMsg: \"获取UploadID失败\",\n            },\n            this.reqOptions,\n        );\n\n        if (!resp?.UploadID) {\n            throw new Error(`获取 UploadID 失败: ${resp?.errMsg || \"未知错误\"}`);\n        }\n\n        return resp.UploadID;\n    } /**\n     * 上传单个分片\n     */\n    private async uploadChunk(\n        chunk: Buffer,\n        fileName: string,\n        fileSize: number,\n        uin: number,\n        authKey: string,\n        uploadId: string,\n        partNumber: number,\n        taskId: string,\n        onProgress?: (delta: number) => void,\n    ): Promise<string> {\n        const md5Hash = this.calculateChunkMd5(chunk);\n\n        const headers = {\n            \"Content-MD5\": md5Hash,\n            \"X-Arguments\": `apptype=251&filetype=20304&weixinnum=${uin}&filekey=${encodeURIComponent(fileName)}&filesize=${fileSize}&taskid=${taskId}&scene=0`,\n            Authorization: authKey,\n            \"Content-Type\": \"application/octet-stream\",\n            Referer: \"https://channels.weixin.qq.com/platform/post/create\",\n            Origin: \"https://channels.weixin.qq.com\",\n        };\n\n        const url = `https://finderassistancea.video.qq.com/uploadpartdfs?PartNumber=${partNumber}&UploadID=${encodeURIComponent(uploadId)}`;\n\n        const resp = await this.http.api<{ ETag?: string; errCode?: number; errMsg?: string }>(\n            {\n                url,\n                method: \"put\",\n                headers,\n                data: chunk,\n                defaultErrorMsg: `分片 ${partNumber} 上传失败`,\n            },\n            this.reqOptions,\n        );\n\n        if (resp?.errCode !== undefined && resp.errCode !== 0) {\n            throw new Error(`分片 ${partNumber} 上传失败: ${resp.errMsg}`);\n        }\n\n        // 简单的进度更新\n        if (onProgress) {\n            onProgress(chunk.length);\n        }\n\n        return resp.ETag || \"\";\n    } /**\n     * 确认分片上传（用于断点续传检查）\n     */\n    private async confirmChunks(\n        uploadId: string,\n        fileName: string,\n        uin: number,\n        authKey: string,\n        transFlag: string,\n        taskId: string,\n    ): Promise<PartInfo[]> {\n        const headers = {\n            \"Content-MD5\": \"null\",\n            \"X-Arguments\": `apptype=251&filetype=20304&weixinnum=${uin}&filekey=${encodeURIComponent(fileName)}&filesize=0&taskid=${taskId}&scene=0`,\n            Authorization: authKey,\n            Referer: \"https://channels.weixin.qq.com/platform/post/create\",\n            Origin: \"https://channels.weixin.qq.com\",\n        };\n\n        const requestBody = {\n            TransFlag: transFlag || \"0_0\",\n            PartNumberMarker: \"1\",\n        };\n\n        const url = `https://finderassistancea.video.qq.com/listparts?UploadID=${encodeURIComponent(uploadId)}`;\n\n        const resp = await this.http.api<{ ListPartsResult?: { Part: any[] } }>(\n            {\n                url,\n                method: \"post\",\n                headers,\n                data: requestBody,\n                defaultErrorMsg: \"确认分片上传失败\",\n            },\n            this.reqOptions,\n        );\n\n        if (resp?.ListPartsResult?.Part) {\n            return resp.ListPartsResult.Part.map((p: any) => ({\n                PartNumber: parseInt(p.PartNumber),\n                ETag: p.ETag,\n            }));\n        }\n\n        return [];\n    }\n\n    /**\n     * 完成上传\n     */\n    private async completeUpload(\n        uploadId: string,\n        fileName: string,\n        fileSize: number,\n        uin: number,\n        authKey: string,\n        transFlag: string,\n        partInfo: PartInfo[],\n        taskId: string,\n    ): Promise<string> {\n        const headers = {\n            \"Content-MD5\": \"null\",\n            \"X-Arguments\": `apptype=251&filetype=20304&weixinnum=${uin}&filekey=${encodeURIComponent(fileName)}&filesize=${fileSize}&taskid=${taskId}&scene=0`,\n            Authorization: authKey,\n            Referer: \"https://channels.weixin.qq.com/platform/post/create\",\n            Origin: \"https://channels.weixin.qq.com\",\n        };\n\n        const requestBody = {\n            TransFlag: transFlag || \"0_0\",\n            PartInfo: partInfo,\n        };\n\n        const url = `https://finderassistancea.video.qq.com/completepartuploaddfs?UploadID=${encodeURIComponent(uploadId)}`;\n\n        const resp = await this.http.api<{ DownloadURL?: string; errMsg?: string }>(\n            {\n                url,\n                method: \"post\",\n                headers,\n                data: requestBody,\n                defaultErrorMsg: \"完成上传失败\",\n            },\n            this.reqOptions,\n        );\n\n        if (!resp?.DownloadURL) {\n            throw new Error(`完成上传失败: ${resp?.errMsg || \"未知错误\"}`);\n        }\n\n        return resp.DownloadURL;\n    }\n\n    /**\n     * 并发控制执行器\n     */\n    private async asyncPool<T>(concurrency: number, items: T[], fn: (item: T) => Promise<void>): Promise<void> {\n        const executing: Promise<void>[] = [];\n\n        for (const item of items) {\n            const p = Promise.resolve().then(() => fn(item));\n            executing.push(p);\n\n            if (executing.length >= concurrency) {\n                await Promise.race(executing);\n            }\n        }\n\n        await Promise.all(executing);\n    }\n\n    /**\n     * 开始上传（核心方法）\n     */\n    public async upload(\n        imagePath: string,\n        uin: number,\n        authKey: string,\n        options: {\n            onProgress?: ProgressCallback;\n            transFlag?: string;\n        } = {},\n    ): Promise<{\n        downloadUrl: string;\n        width: number;\n        height: number;\n        fileSize: number;\n        md5: string;\n    }> {\n        const { onProgress, transFlag } = options;\n\n        // 1. 读取文件\n        const fileBuffer = await this.readFile(imagePath);\n        const fileSize = fileBuffer.length;\n        const fileName = path.basename(imagePath);\n\n        // 检查大小限制（20MB）\n        if (fileSize > 20 * 1024 * 1024) {\n            throw new Error(\"图片大小超过 20MB 限制\");\n        }\n\n        // 2. 计算 MD5 和获取尺寸\n        this.md5 = this.calculateMd5(fileBuffer);\n        const { width, height } = this.getImageSize(fileBuffer);\n\n        // 3. 初始化任务\n        this.startTime = Date.now();\n        this.chunkCount = Math.ceil(fileSize / this.chunkSize);\n        this.uploadedChunks = 0;\n        this.partInfo = new Array(this.chunkCount).fill(null);\n\n        const taskId = this.generateUUID();\n        const uuid = this.generateUUID();\n\n        console.log(`[上传开始] 文件: ${fileName}, 大小: ${fileSize}, 分片: ${this.chunkCount}`);\n\n        // 4. 获取 UploadID\n        this.uploadTaskId = await this.getUploadId(fileSize, fileName, uin, authKey, taskId);\n        console.log(`[获取 UploadID] ${this.uploadTaskId}`);\n\n        // 5. 启动速度监控\n        this.startSpeedWatch();\n\n        // 6. 分片上传\n        if (fileSize <= this.chunkSize) {\n            // 小文件直接上传\n            console.log(\"[直接上传] 单文件模式\");\n            const etag = await this.uploadChunk(\n                fileBuffer,\n                fileName,\n                fileSize,\n                uin,\n                authKey,\n                this.uploadTaskId,\n                1,\n                taskId,\n                (delta) => this.updateProgress(delta, onProgress),\n            );\n            this.partInfo[0] = { PartNumber: 1, ETag: etag };\n            this.uploadedChunks = 1;\n        } else {\n            // 大文件并发分片上传\n            console.log(`[分片上传] 并发数: ${this.concurrentLimit}`);\n\n            const chunks = Array.from({ length: this.chunkCount }, (_, i) => i);\n\n            await this.asyncPool(this.concurrentLimit, chunks, async (index) => {\n                const start = index * this.chunkSize;\n                const end = Math.min((index + 1) * this.chunkSize, fileSize);\n                const chunk = fileBuffer.slice(start, end);\n\n                console.log(`[上传分片 ${index + 1}/${this.chunkCount}] 大小: ${chunk.length}`);\n\n                const etag = await this.uploadChunk(\n                    chunk,\n                    fileName,\n                    fileSize,\n                    uin,\n                    authKey,\n                    this.uploadTaskId,\n                    index + 1,\n                    taskId,\n                    (delta) => this.updateProgress(delta, onProgress),\n                );\n\n                this.partInfo[index] = { PartNumber: index + 1, ETag: etag };\n                this.uploadedChunks++;\n\n                onProgress?.({\n                    uploadedChunks: this.uploadedChunks,\n                    totalChunks: this.chunkCount,\n                    percent: Math.floor((this.uploadedChunks / this.chunkCount) * 100),\n                    speed: this.uploadSpeed,\n                });\n            });\n        }\n\n        // 7. 确认分片（可选，用于断点续传场景）\n        // const confirmedParts = await this.confirmChunks(...);\n\n        // 8. 完成上传\n        console.log(\"[完成上传] 合并分片...\");\n        const downloadUrl = await this.completeUpload(\n            this.uploadTaskId,\n            fileName,\n            fileSize,\n            uin,\n            authKey,\n            transFlag || \"0_0\",\n            this.partInfo.filter(Boolean),\n            taskId,\n        );\n\n        this.stopSpeedWatch();\n\n        return {\n            downloadUrl,\n            width,\n            height,\n            fileSize,\n            md5: crypto.createHash(\"md5\").update(fileBuffer).digest(\"hex\"),\n        };\n    }\n\n    /**\n     * 更新进度\n     */\n    private updateProgress(delta: number, onProgress?: ProgressCallback): void {\n        // 计算速度的逻辑\n    }\n\n    /**\n     * 启动速度监控\n     */\n    private startSpeedWatch(): void {\n        let lastUploaded = 0;\n        this.speedInterval = setInterval(() => {\n            const current = this.uploadedChunks * this.chunkSize;\n            this.uploadSpeed = Math.floor((current - lastUploaded) / 1024); // KB/s\n            this.speedRecords.push(this.uploadSpeed);\n            lastUploaded = current;\n        }, 1000);\n    }\n\n    /**\n     * 停止速度监控\n     */\n    private stopSpeedWatch(): void {\n        if (this.speedInterval) {\n            clearInterval(this.speedInterval);\n        }\n    }\n}\n\n// ==================== 使用示例 ====================\n\nasync function example() {\n    const uploader = new VideoChannelUploader({\n        chunkSize: 8 * 1024 * 1024, // 8MB 分片\n        concurrentLimit: 4, // 4 并发\n    });\n\n    try {\n        const result = await uploader.upload(\n            \"/path/to/large-image.jpg\", // 支持 5MB-20MB 的图片\n            123456789, // uin\n            \"your-auth-key\", // authKey\n            {\n                onProgress: (progress) => {\n                    console.log(`进度: ${progress.percent}%, 速度: ${progress.speed}KB/s`);\n                },\n            },\n        );\n\n        console.log(\"上传成功:\", result.downloadUrl);\n    } catch (error) {\n        console.error(\"上传失败:\", error);\n    }\n}\n","import { response, TaskState } from \"@iflyrpa/share\";\nimport { AxiosProxyParams } from \"../../types\";\nimport { stringifyError } from \"../../utils\";\nimport { Http } from \"../../utils/http\";\nimport { reportLogger } from \"../../utils/reportLogger\";\nimport { rid } from \"../../utils/shipinhao/utils\";\nimport type { PublishAction } from \"./index\";\nimport { VideoChannelUploader } from \"./uploader\";\n\n/**\n * 视频号发布 - Mock API 方式\n * 通过调用视频号助手平台的内部API实现发布\n *\n * 核心流程:\n * 1. 获取用户信息 (getUserInfo) - 获取 uin 和 finderUsername\n * 2. 获取上传认证密钥 (getUploadAuthKey) - 获取 authKey\n * 3. 申请上传ID (getUploadId) - 获取 UploadID\n * 4. 上传图片 (uploadImage) - 上传图片内容\n * 5. 确认上传完成 (getUploadedImageInfo) - 获取 DownloadURL\n * 6. 发布图文 (publishDynamic) - 发布到视频号\n */\n\ninterface MusicInfo {\n    id: string; // 音乐ID (docId)\n    name: string; // 音乐名称\n    image: string; // 音乐封面图 (albumThumbUrl)\n    authorName: string; // 艺术家名称 (artist)\n    url: string; // 音乐流媒体URL (mediaStreamingUrl)\n    raw: {\n        playableInfo: {\n            type: number; // 音频类型 (docType)\n        };\n        bgmSource: number; // BGM来源\n        query?: string; // 查询字符串 (bgmQuery)\n    };\n}\n\ninterface UploadAuthKeyResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        authKey: string;\n        uin?: number;\n    };\n}\n\ninterface UserInfoResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        finderUser?: {\n            uin: number;\n            finderUsername: string;\n            nickname?: string;\n        };\n    };\n}\n\ninterface ImageUploadResult {\n    url: string;\n    md5sum: string;\n    fileSize: number;\n    thumbUrl: string;\n    fullThumbUrl: string;\n    width: number;\n    height: number;\n    mediaType: number;\n    videoPlayLen: number;\n    urlCdnTaskId: string;\n}\n\ninterface PublishResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        baseResp?: {\n            errcode: number;\n            errmsg: string;\n        };\n    };\n}\n\nfunction generateUUID(): string {\n    return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n        const r = (Math.random() * 16) | 0;\n        const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n        return v.toString(16);\n    });\n}\n\n/**\n * 获取13位时间戳\n */\nfunction getTimeStamp(length: number): string {\n    return Date.now().toString().substring(0, length);\n}\n\n/**\n * 获取用户信息\n * 根据 index_minify.js Line 44701 实现\n */\nasync function getUserInfo(cookies: string, http: Http): Promise<UserInfoResponse> {\n    // 构建请求体，与源码保持一致\n    const requestBody = {\n        timestamp: getTimeStamp(13), // 13位时间戳\n        _log_finder_uin: \"\",\n        _log_finder_id: \"\",\n        rawKeyBuff: null,\n        pluginSessionId: null,\n        scene: 7,\n        reqScene: 7,\n    };\n\n    // 使用 POST 请求，不是 GET\n    const response = await http.api<UserInfoResponse>({\n        method: \"post\",\n        url: \"https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/auth/auth_data\",\n        data: requestBody,\n        headers: {\n            cookie: cookies,\n            referer: \"https://channels.weixin.qq.com\",\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\",\n        },\n        defaultErrorMsg: \"获取用户信息失败\",\n    });\n\n    // 如果获取到用户信息，调用 getUploadAuthKey 获取 uin\n    if (response?.data?.finderUser) {\n        const finderUsername = response.data.finderUser.finderUsername || \"\";\n        const authKeyData = await getUploadAuthKey(cookies, finderUsername, http);\n\n        // 将 uin 设置到 finderUser 上\n        if (authKeyData?.data?.uin) {\n            response.data.finderUser.uin = authKeyData.data.uin;\n        } else {\n            // 如果没有获取到 uin，设置错误信息\n            response.errCode = authKeyData?.errCode || -1;\n            response.errMsg = authKeyData?.errMsg || \"获取 uin 失败\";\n        }\n    }\n\n    return response;\n}\n\n/**\n * 获取上传认证密钥\n * 根据 index_minify.js Line 44740 实现\n */\nasync function getUploadAuthKey(cookies: string, finderUsername: string, http: Http): Promise<UploadAuthKeyResponse> {\n    // 构建请求体，与源码保持一致\n    const requestBody = {\n        timestamp: getTimeStamp(13), // 13位时间戳\n        _log_finder_id: finderUsername, // 使用 finderUsername\n        rawKeyBuff: null,\n    };\n\n    const response = await http.api<UploadAuthKeyResponse>({\n        method: \"post\",\n        url: \"https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/helper/helper_upload_params\",\n        data: requestBody,\n        headers: {\n            cookie: cookies,\n            referer: \"https://channels.weixin.qq.com\",\n            Accept: \"application/json, text/plain, */*\",\n            \"Content-Type\": \"application/json\",\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\",\n        },\n        defaultErrorMsg: \"获取上传认证密钥失败\",\n    });\n\n    return response;\n}\n\nasync function uploadImageComplete(\n    imagePath: string,\n    taskId: string,\n    finderUsername: string,\n    uin: number,\n    authKey: string,\n    http: Http,\n): Promise<{\n    DownloadURL?: string;\n    errMsg?: string;\n    md5?: string;\n    width?: number;\n    height?: number;\n    fileSize?: number;\n}> {\n    const uploader = new VideoChannelUploader({\n        chunkSize: 8 * 1024 * 1024,\n        concurrentLimit: 4,\n        http,\n    });\n\n    const result = await uploader.upload(imagePath, uin, authKey, {\n        onProgress: (p) => console.log(`上传进度: ${p.percent}%`),\n    });\n\n    return {\n        DownloadURL: result.downloadUrl,\n        md5: result.md5,\n        fileSize: result.fileSize,\n        width: result.width,\n        height: result.height,\n    };\n}\n\n/**\n * 构建位置信息\n */\nfunction buildLocation(address?: {\n    name?: string;\n    latitude?: number;\n    longitude?: number;\n    city?: string;\n    address?: string;\n    uid?: string;\n}): Record<string, unknown> {\n    if (!address || !address.city) {\n        return {\n            latitude: 0,\n            longitude: 0,\n            city: \"\",\n            poiClassifyId: \"\",\n        };\n    }\n\n    if (address.uid) {\n        // 有完整POI信息\n        return {\n            latitude: address.latitude || 0,\n            longitude: address.longitude || 0,\n            city: address.city,\n            poiName: address.name || \"\",\n            address: address.address || \"\",\n            poiClassifyId: address.uid,\n        };\n    }\n\n    // 只有坐标\n    return {\n        latitude: address.latitude || 0,\n        longitude: address.longitude || 0,\n        city: address.city,\n        poiClassifyId: \"\",\n    };\n}\n\n/**\n * 构建话题 XML\n */\nfunction buildTopicXml(content: string, topics?: string[]): string {\n    const topicList = topics || [];\n    const valueCount = 1 + topicList.length * 2; // 内容(1) + 话题数×2\n\n    let xml = \"<finder>\";\n    xml += \"<version>1</version>\";\n    xml += `<valuecount>${valueCount}</valuecount>`;\n    xml += \"<style>\";\n    xml += `<at>${valueCount + 1}</at>`; // at 位置\n    xml += \"</style>\";\n    xml += `<value0><![CDATA[${content}]]></value0>`;\n\n    let valueIndex = 1;\n    for (const topic of topicList) {\n        // 话题节点\n        xml += `<value${valueIndex}>`;\n        xml += `<topic><![CDATA[#${topic}#]]></topic>`;\n        xml += `</value${valueIndex}>`;\n        valueIndex++;\n\n        // 空格节点\n        xml += `<value${valueIndex}><![CDATA[ ]]></value${valueIndex}>`;\n        valueIndex++;\n    }\n\n    xml += \"</finder>\";\n    return xml;\n}\n\n/**\n * 构建富文本 JSON\n */\nfunction buildRichTextJson(title: string, content: string): string {\n    const richText: Array<Record<string, unknown>> = [{ insert: title }, { attributes: { header: 1 }, insert: \"\\n\" }];\n\n    if (content) {\n        richText.push({ insert: content });\n    }\n\n    return JSON.stringify(richText);\n}\n\n/**\n * 构建描述文本\n */\nfunction buildDescription(content: string, topics?: string[]): string {\n    let description = content; // 添加话题\n    if (topics && topics.length > 0) {\n        description += `#${topics.join(\"#\")}`;\n    }\n\n    return description;\n}\n\n/**\n * 发布图文\n */\nasync function publishDynamic(\n    cookies: string,\n    uin: number | undefined,\n    fingerPrintDeviceId: string,\n    aId: string,\n    proxyHttp: Http,\n    confParams: {\n        token: string;\n        enverionment: \"development\" | \"production\";\n        articleId: string | undefined;\n        accountId: number | undefined;\n        uid: string | undefined;\n        postId: string | undefined;\n        eip: string | undefined;\n    },\n    params: {\n        title: string;\n        content: string;\n        images: ImageUploadResult[];\n        finderUsername: string;\n        publishType: string;\n        topic?: string[];\n        collection?: {\n            collectionId: string;\n            collectionName: string;\n        };\n        link?: {\n            urlType: number;\n            link: string;\n            title: string;\n        };\n        address?: {\n            name?: string;\n            latitude?: number;\n            longitude?: number;\n            city?: string;\n            address?: string;\n            uid?: string;\n        };\n        scheduledPublish?: number;\n        music?: MusicInfo; // 添加音乐参数\n    },\n): Promise<PublishResponse> {\n    const topicList = params.topic || [];\n    const location = params.address ? buildLocation(params.address) : {};\n\n    // 构建完整的发布参数\n    const publishData: Record<string, unknown> = {\n        // 系统参数\n        clientid: generateUUID(),\n        timestamp: getTimeStamp(13), // 13位时间戳\n        _log_finder_id: params.finderUsername,\n        _log_finder_uin: \"\",\n        videoClipTaskId: \"\",\n        mode: 1,\n        sence: 7,\n        reqScene: 7,\n        scene: 1,\n        rawKeyBuff: null,\n\n        // 基础定位信息\n        latitude: 0,\n        longitude: 0,\n        feedLongitude: 0,\n        feedLatitude: 0,\n\n        // 发布标记\n        originalFlag: 0,\n        objectType: 7, // 7=图文\n        postFlag: 0,\n        isFullPost: 1,\n        handleFlag: 2,\n\n        // 话题列表\n        topics: topicList,\n\n        // 核心内容对象\n        objectDesc: {\n            description: buildDescription(params.content, topicList),\n            event: {},\n            extReading: {\n                ...params.link,\n                link: params.link?.link?.replace(/[\\s\\u200b]/g, \"\"),\n            },\n            mediaType: 2, // 2=图片\n\n            // 位置信息\n            location: location,\n\n            // 话题信息\n            topic: {},\n\n            // @提及的用户\n            member: {},\n            mentionedUser: [],\n\n            mpTitle: \"\",\n\n            // 媒体列表-图片\n            media: params.images,\n            // 音乐\n            shortTitle: \"\",\n\n            // 富文本描述\n            finderNewlifeDesc: {\n                richTextTitle: params.title,\n                richTextJson: buildRichTextJson(params.title, params.content),\n                fromRichPublisher: 1,\n            },\n        },\n        // traceInfo: { // TODO\n        //     traceKey: \"FPT_1772941976_740477911\",\n        //     uploadCdnEnd: 1772941976,\n        //     uploadCdnStart: 1772941976\n        // }\n    };\n\n    // 定时发布（转为10位时间戳）\n    if (params.scheduledPublish) {\n        publishData.effectiveTime = params.scheduledPublish;\n    }\n\n    const objectDesc = publishData.objectDesc as Record<string, unknown>;\n    if (topicList.length) {\n        objectDesc.topic = {\n            finderTopicInfo: buildTopicXml(params.content, topicList),\n        };\n    }\n    if (params.collection) {\n        objectDesc.topic = {\n            ...(typeof objectDesc.topic === \"object\" && objectDesc.topic !== null ? objectDesc.topic : {}),\n            ...params.collection,\n        };\n    }\n\n    // 添加音乐信息（根据源码 Line 51809-51823）\n    if (params.music?.id) {\n        objectDesc.followPostInfo = {\n            musicInfo: {\n                docId: params.music.id,\n                albumThumbUrl: params.music.image,\n                name: params.music.name,\n                artist: params.music.authorName,\n                mediaStreamingUrl: params.music.url,\n                docType: params.music.raw.playableInfo.type,\n            },\n            groupId: params.music.id,\n            hasBgm: 1,\n            bgmSource: params.music.raw.bgmSource,\n            bgmQuery: params.music.raw.query || \"\",\n        };\n    }\n\n    // 选择正确的URL\n    const publishUrl =\n        params.publishType === \"1\"\n            ? \"https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/post/post_create\"\n            : \"https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/post/post_draft\";\n\n    // 草稿模式需要包装参数\n    let requestBody: Record<string, unknown>;\n    if (params.publishType === \"2\") {\n        requestBody = {\n            _log_finder_id: params.finderUsername,\n            objectId: null,\n            pluginSessionId: null,\n            postReq: publishData,\n            rawKeyBuff: \"\",\n            scene: 1,\n            timestamp: getTimeStamp(13),\n        };\n    } else {\n        requestBody = publishData;\n    }\n\n    const queryData = {\n        _aid: aId,\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n    };\n    const queryString = new URLSearchParams(queryData).toString();\n\n    console.log(\"1111111111111111\", JSON.stringify(requestBody));\n\n    const apiResponse = await proxyHttp.api<PublishResponse>({\n        method: \"post\",\n        url: `${publishUrl}?${queryString}`,\n        data: requestBody,\n        headers: {\n            cookie: cookies,\n            referer: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n            \"Content-type\": \"application/json\",\n            \"finger-print-device-id\": fingerPrintDeviceId,\n            \"x-wechat-uin\": uin,\n        },\n        defaultErrorMsg: \"发布图文失败\",\n    });\n\n    reportLogger({\n        token: confParams.token || \"\",\n        enverionment: confParams.enverionment || \"development\",\n        postId: confParams.articleId,\n        eip: proxyHttp.proxyInfo,\n        accountId: confParams.accountId,\n        uid: confParams.uid,\n        publishParams: publishData,\n        platform: \"shipinhao\",\n    });\n\n    return apiResponse;\n}\n\nexport const mockAction: PublishAction = async (task, params) => {\n    task.logger.info(\"[shipinhaoPublish] 开始执行视频号发布 - Mock API 方式\");\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId) {\n        return response(400, \"fingerPrintDeviceId和aId 不能为空\", \"\");\n    }\n\n    let currentStep = \"初始化\"; // 追踪当前执行步骤\n\n    try {\n        // 1. 转换 cookies 为字符串\n        currentStep = \"解析认证信息\";\n        const cookieString = params.cookies.map((c) => `${c.name}=${c.value}`).join(\"; \");\n        const fingerPrintDeviceId = params.extraParam.fingerPrintDeviceId;\n        const aId = params.extraParam.aId;\n\n        // 创建 Http 实例\n        const headers = {\n            cookie: cookieString,\n        };\n\n        const args: AxiosProxyParams = [{ headers }, task.logger, params.proxyLoc, params.accountId, \"shipinhao\"];\n\n        const http = new Http({ headers });\n        const proxyHttp = new Http(...args);\n\n        // 2. 验证参数\n        currentStep = \"验证发布参数\";\n        if (!params.banners || params.banners.length === 0) {\n            return response(400, \"至少需要一张图片\", \"\");\n        }\n\n        // 限制图片数量，并确保只包含字符串路径\n        const images = params.banners.slice(0, 18).filter((img: unknown) => typeof img === \"string\") as string[];\n\n        // 3. 获取用户信息\n        currentStep = \"获取用户信息\";\n        task.logger.info(\"[shipinhaoPublish] 获取用户信息...\");\n        console.log(\"cookieString\", cookieString);\n        const userInfo = await getUserInfo(cookieString, http);\n\n        console.log(JSON.stringify(userInfo));\n        if (userInfo.errCode !== 0 || !userInfo.data?.finderUser) {\n            const errorMsg =\n                userInfo.errCode === 300334 || userInfo.errCode === 300333\n                    ? \"登录失效\"\n                    : userInfo.errMsg || \"获取用户信息失败\";\n            return response(userInfo.errCode || 500, errorMsg, \"\");\n        }\n\n        const finderUsername = userInfo.data.finderUser.finderUsername;\n        console.log(finderUsername);\n        // 4. 获取上传认证密钥\n        currentStep = \"获取上传认证密钥\";\n        task.logger.info(\"[shipinhaoPublish] 获取上传认证密钥...\");\n        const authKeyResponse = await getUploadAuthKey(cookieString, finderUsername, http);\n\n        if (authKeyResponse.errCode !== 0 || !authKeyResponse.data?.authKey) {\n            return response(authKeyResponse.errCode || 500, `获取上传认证参数失败: ${authKeyResponse.errMsg}`, \"\");\n        }\n\n        const authKey = authKeyResponse.data.authKey;\n        const uin = authKeyResponse.data.uin;\n\n        if (!uin) {\n            return response(500, \"获取用户 uin 失败\", \"\");\n        }\n\n        const taskId = String(generateUUID());\n\n        // 5. 上传图片\n        currentStep = \"上传图片\";\n        task.logger.info(`[shipinhaoPublish] 开始上传 ${images.length} 张图片...`);\n        const uploadedImages: ImageUploadResult[] = [];\n\n        for (let i = 0; i < images.length; i++) {\n            currentStep = `上传图片 ${i + 1}/${images.length}`;\n            task.logger.info(`[shipinhaoPublish] ${currentStep}...`);\n\n            const uploadResult = await uploadImageComplete(images[i], taskId, finderUsername, uin, authKey, http);\n            console.log(JSON.stringify(uploadResult));\n            if (!uploadResult.DownloadURL) {\n                return response(500, `图片上传失败: ${uploadResult.errMsg}`, \"\");\n            }\n\n            uploadedImages.push({\n                url: `https://finder.video.qq.com${uploadResult.DownloadURL.split(\"qq.com\")[1] || \"\"}`,\n                md5sum: uploadResult.md5 || \"\",\n                fileSize: uploadResult.fileSize || 0,\n                thumbUrl: uploadResult.DownloadURL,\n                fullThumbUrl: uploadResult.DownloadURL,\n                width: uploadResult.width || 0,\n                height: uploadResult.height || 0,\n                mediaType: 2,\n                videoPlayLen: 0,\n                urlCdnTaskId: \"\",\n            });\n        }\n\n        // 6. 发布图文\n        currentStep = \"发布图文内容\";\n        task.logger.info(\"[shipinhaoPublish] 正在发布...\");\n\n        // 转换话题格式：从对象数组提取 name 字段\n        const topicNames = params.topic || undefined;\n\n        // 转换位置格式\n        const addressInfo = params.address\n            ? {\n                  name: params.address.name,\n                  latitude: params.address.latitude,\n                  longitude: params.address.longitude,\n                  city: params.address.city_name,\n                  address: params.address.address,\n                  uid: params.address.poi_id,\n              }\n            : undefined;\n\n        let publishResult: PublishResponse;\n        try {\n            publishResult = await publishDynamic(\n                cookieString,\n                uin,\n                fingerPrintDeviceId,\n                aId,\n                proxyHttp,\n                {\n                    token: params.huiwenToken || \"\",\n                    enverionment: task.enverionment || \"development\",\n                    articleId: params.articleId,\n                    postId: params.articleId,\n                    eip: proxyHttp.proxyInfo,\n                    accountId: params.accountId,\n                    uid: params.uid,\n                },\n                {\n                    title: params.title,\n                    content: params.content,\n                    images: uploadedImages,\n                    finderUsername,\n                    publishType: params.publishType || \"1\",\n                    topic: topicNames,\n                    link: params.link,\n                    address: addressInfo,\n                    collection: params.collection,\n                    scheduledPublish: params.scheduledPublish,\n                    music: params.music, // 传递音乐参数\n                },\n            );\n        } catch (error) {\n            const handledError = Http.handleApiError(error);\n            // 代理连接超时(599) 与网络/服务端错误(500/502/503/504)：重试耗尽后直接返回代理错误信息，\n            // 不再 throw 走 executeAction 的 RPA 兜底。code 归一为 414，使 executeAction 视为终止结果。\n            const isProxyOrNetworkError = [599, 500, 502, 503, 504].includes(handledError.code);\n            if (isProxyOrNetworkError) {\n                // 区分代理错误和普通网络错误\n                const isProxyRequest = handledError.extra?.isProxyRequest === true;\n                const errorType = handledError.code === 599 || isProxyRequest ? \"代理错误\" : \"网络错误\";\n                const message = `图文发布失败，${errorType}：${handledError.message}${task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n                task.logger.error(\n                    `[shipinhaoPublish] ${errorType}，直接返回: ${message}`,\n                    stringifyError(handledError),\n                );\n                await updateTaskState?.({\n                    state: TaskState.FAILED,\n                    error: message,\n                });\n                return { code: 414, data: \"\", message };\n            }\n            // 其它错误码维持原有逻辑，抛出以便上层 executeAction 走 RPA 兜底\n            throw error;\n        }\n\n        task.logger.info(`[shipinhaoPublish] publishResult: ${JSON.stringify(publishResult)} `);\n\n        // 7. 处理发布结果\n        const resultCode = publishResult.data?.baseResp?.errcode ?? publishResult.errCode;\n        const resultMsg = publishResult.data?.baseResp?.errmsg ?? publishResult.errMsg;\n\n        if (resultCode === 0) {\n            task.logger.info(\"[shipinhaoPublish] 发布成功\");\n            const publishId = uploadedImages[0]?.thumbUrl?.split(\"encfilekey=\")[1]?.split(\"&\")[0] || \"\";\n            await updateTaskState?.({\n                state: TaskState.SUCCESS,\n                result: {\n                    response: resultMsg,\n                },\n            });\n            return response(0, \"发布成功\", publishId);\n        }\n\n        // 处理特殊错误码\n        let errorMessage = resultMsg;\n        if (resultCode === -11224) {\n            errorMessage = \"视频号管理员完成实名且绑定手机号后才可以发表\";\n        } else if (resultCode === 300333 || resultCode === 300334) {\n            errorMessage = \"登录失效\";\n        } else if (resultCode === 300330) {\n            errorMessage = \"未登录\";\n        } else if (resultCode === 300002) {\n            errorMessage = \"官方平台在校验音乐/位置/定时信息时失败了，请重新编辑后发布\";\n        }\n\n        task.logger.error(`[shipinhaoPublish] 发布失败: ${errorMessage}`);\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: errorMessage,\n        });\n        return response(resultCode || 500, errorMessage, \"\");\n    } catch (error) {\n        // 使用 Http.handleApiError 规范化错误，保留错误码和结构化信息\n        const handledError = Http.handleApiError(error);\n\n        // 构造详细的错误消息\n        const errorMsg = handledError.message || \"发布失败，请稍后重试\";\n        const errorCode = handledError.code || 500;\n\n        // 记录完整的错误信息（包括堆栈和额外上下文）\n        task.logger.error(`[shipinhaoPublish] 发布流程异常: ${errorMsg}`, stringifyError(error), handledError.extra);\n\n        // 更新任务状态\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: errorMsg,\n        });\n\n        return response(errorCode, errorMsg, \"\");\n    }\n};\n","import path from \"node:path\";\nimport type { Locator, Response } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, response, success } from \"@iflyrpa/share\";\nimport { TimeFormatter } from \"../../utils\";\nimport type { PublishAction } from \"./index\";\n\n/**\n * 视频号发布 - RPA 方式\n * 通过浏览器自动化实现视频号内容发布\n */\nexport const rpaAction: PublishAction = async (task, params) => {\n    task.logger.info(\"开始微信视频号发布（RPA 模式）\");\n\n    const tmpCachePath = task.getTmpPath();\n\n    const page = await task.createPage({\n        url: \"https://channels.weixin.qq.com/platform/post/finderNewLifeCreate\",\n        show: task.debug,\n        cookies: params.cookies,\n    });\n\n    try {\n        const waitForElement = async (selector: string, timeout = 10000): Promise<Locator | null> => {\n            try {\n                const element = page.locator(selector);\n                await element.waitFor({ state: \"visible\", timeout });\n                return element;\n            } catch {\n                task.logger.warn(`元素未找到: ${selector}`);\n                return null;\n            }\n        };\n\n        // 重试执行\n        const retryAction = async <T>(action: () => Promise<T>, maxRetries = 3, delay = 1000): Promise<T> => {\n            let lastError: Error | undefined;\n            for (let i = 0; i < maxRetries; i++) {\n                try {\n                    return await action();\n                } catch (error) {\n                    lastError = error as Error;\n                    task.logger.warn(`重试 ${i + 1}/${maxRetries}: ${lastError.message}`);\n                    if (i < maxRetries - 1) {\n                        await page.waitForTimeout(delay);\n                    }\n                }\n            }\n            throw lastError;\n        };\n\n        // 页面初始化\n\n        task.logger.info(\"等待页面加载...\");\n\n        // 检查登录状态\n        task.logger.info(\"检查登录状态...\");\n\n        // 打印当前 URL 和页面标题\n        if (task.debug) {\n            task.logger.info(`当前页面 URL: ${page.url()}`);\n            const title = await page.title();\n            task.logger.info(`页面标题: ${title}`);\n        }\n\n        try {\n            await page.waitForSelector(\".post-edit-wrap\", { state: \"visible\", timeout: 10000 });\n            task.logger.info(\"✓ 登录状态正常，找到编辑器容器\");\n        } catch {\n            task.logger.error(\"✗ 未找到编辑器，可能登录失效\");\n            return { code: 414, message: \"登录失效或页面加载异常\", data: page.url() };\n        }\n\n        task.logger.info(\"页面加载完成，开始填充内容\");\n\n        // 上传图片\n        if (params.banners && params.banners.length > 0) {\n            task.logger.info(`开始上传 ${params.banners.length} 张图片`);\n\n            await retryAction(async () => {\n                // 下载图片到本地\n                const images = await Promise.all(\n                    params.banners.map((url) => {\n                        const fileName = getFilenameFromUrl(url);\n                        return downloadImage(url, path.join(tmpCachePath, fileName));\n                    }),\n                );\n\n                // 根据实际 HTML 结构，文件上传输入框在 .ant-upload-btn 内\n                // 使用 page.locator 直接定位隐藏的 input，不需要等待可见性\n                const uploadSelectors = [\n                    '.ant-upload-btn input[type=\"file\"]',\n                    '.upload input[type=\"file\"][accept*=\"image\"]',\n                    '.upload-wrap input[type=\"file\"]',\n                    'input[type=\"file\"][accept*=\"image\"]',\n                ];\n\n                let uploadInput: Locator | null = null;\n\n                // 调试：打印当前页面所有的 file input\n                if (task.debug) {\n                    const allFileInputs = await page.locator('input[type=\"file\"]').count();\n                    task.logger.info(`页面中共找到 ${allFileInputs} 个文件上传输入框`);\n\n                    // 打印页面 URL 确认是否在正确页面\n                    task.logger.info(`当前页面 URL: ${page.url()}`);\n                }\n\n                for (const selector of uploadSelectors) {\n                    const input = page.locator(selector);\n                    const count = await input.count();\n                    if (count > 0) {\n                        uploadInput = input.first();\n                        task.logger.info(`找到上传输入框: ${selector}`);\n                        break;\n                    }\n                }\n\n                if (!uploadInput) {\n                    // 如果还是找不到，尝试等待更长时间后再找一次\n                    task.logger.warn(\"未找到上传输入框，等待 3 秒后重试...\");\n                    await page.waitForTimeout(3000);\n\n                    // 直接查找任意 file input（不检查可见性）\n                    const anyFileInput = page.locator('input[type=\"file\"]');\n                    const inputCount = await anyFileInput.count();\n\n                    if (inputCount > 0) {\n                        uploadInput = anyFileInput.first();\n                        task.logger.info(`找到文件输入框（共 ${inputCount} 个）`);\n                    } else {\n                        // 截图以便调试\n                        if (task.debug) {\n                            const screenshotPath = path.join(tmpCachePath, `upload-error-${Date.now()}.png`);\n                            await page.screenshot({ path: screenshotPath, fullPage: true });\n                            task.logger.error(`未找到上传输入框，已截图保存至: ${screenshotPath}`);\n                        }\n                        throw new Error(\"未找到图片上传输入框\");\n                    }\n                }\n\n                // 上传文件\n                await uploadInput.setInputFiles(images);\n                task.logger.info(`图片上传成功: ${images.length} 张`);\n\n                // 等待图片处理\n                await page.waitForTimeout(3000);\n            });\n        }\n\n        // 填写标题\n        if (params.title) {\n            task.logger.info(`填写标题: ${params.title}`);\n            await retryAction(async () => {\n                const titleInput = await waitForElement('input[placeholder*=\"填写标题\"]', 10000);\n\n                if (!titleInput) {\n                    throw new Error(\"未找到标题输入框\");\n                }\n\n                await titleInput.click();\n                // 先清空（重试时避免重复）\n                await titleInput.clear({ timeout: 3000 });\n                await titleInput.fill(params.title, { timeout: 5000 });\n                task.logger.info(\"标题填写完成\");\n            });\n        }\n\n        // 填写描述和话题\n        if (params.content) {\n            task.logger.info(\"填写描述和话题\");\n            await retryAction(async () => {\n                const descEditor = await waitForElement(\".input-editor\", 10000);\n                if (!descEditor) {\n                    throw new Error(\"未找到描述编辑器\");\n                }\n                await descEditor.click();\n                await page.waitForTimeout(500);\n\n                // 清空编辑器内容（重试时避免重复输入）\n                await descEditor.evaluate((el) => {\n                    el.textContent = \"\";\n                });\n                await page.waitForTimeout(300);\n                task.logger.info(\"已清空编辑器内容\");\n\n                // 模拟用户逐字输入，触发富文本编辑器的话题识别\n                await descEditor.pressSequentially(params.content, { delay: 10 }); // delay 设置输入延迟，模拟真实输入\n                await page.waitForTimeout(500);\n\n                task.logger.info(\"内容填写完成\");\n            });\n        }\n\n        //  选择地点\n        if (params.address?.poi_id) {\n            task.logger.info(`选择地点: ${params.address.name}`);\n            const instance = page.locator(\".position-display-wrap\");\n            await instance.click();\n            await page.waitForTimeout(1000);\n            await page\n                .locator(\".location-filter-wrap input\")\n                .fill(params.address?.name || params.address?.address || params.address?.city_name);\n            await page.waitForTimeout(2000);\n            const poperInstance = page.locator(\".location-filter-wrap .common-option-list-wrap .option-item\");\n            await poperInstance.nth(1).waitFor(); // 等待第二个元素出现\n            await poperInstance.nth(1).click(); // 点击第二个元素（索引从0开始，1是第二个）\n            task.logger.info(\"地点选择完成\");\n        }\n\n        // 选择合集\n        if (params.collection) {\n            task.logger.info(`选择合集: ${params.collection.collectionName}`);\n            const instanceCollection = page.locator(\".post-album-display-wrap\");\n            await instanceCollection.click();\n            await page.waitForTimeout(1000);\n            page.locator(\".post-album-wrap .option-item\")\n                .filter({ hasText: params.collection.collectionName })\n                .first()\n                .click({ force: true });\n        }\n\n        // 填写链接\n        if (params.link) {\n            const instanceLink = page.locator(\".link-display-wrap\");\n            await instanceLink.first().click();\n            task.logger.info(`添加链接: ${params.link.link}`);\n            await page.waitForTimeout(500);\n            const linkTypeName = params.link.urlType === 1 ? \"公众号文章\" : \"红包封面\";\n            page.locator(\".post-link-wrap .link-list-options .link-option-item\")\n                .filter({ hasText: linkTypeName })\n                .first()\n                .click({ force: true });\n            await waitForElement(\".link-input-wrap\", 3000);\n            const linkInput = page.locator('.link-input-wrap input[type=\"text\"]');\n            await linkInput.first().fill(params.link.link);\n        }\n\n        // 选择音乐\n        if (params.music) {\n            task.logger.info(`添加背景音乐: ${params.music.name}`);\n            const musicFormItem = page.locator(\".post-with-link\").filter({ hasText: \"音乐\" });\n            const musicDisplayWrap = musicFormItem.locator(\".link-display-wrap\").first();\n            await musicDisplayWrap.click();\n            const searchInput = musicFormItem.locator('.weui-desktop-search input[type=\"text\"]').first();\n            const searchTxt = `${params.music.name} - ${params.music.authorName}`;\n            await searchInput.fill(searchTxt); // 等待填充完成\n            await page.waitForTimeout(300); // 等待输入稳定\n            await searchInput.press(\"Enter\");\n            await page.waitForTimeout(2000);\n            const bgmItemWrap = musicFormItem\n                .locator(\".bgm-item-wrap\") // .song-info .title\n                .filter({ hasText: searchTxt })\n                .first();\n            await bgmItemWrap.hover();\n            await page.waitForTimeout(500);\n            await bgmItemWrap.locator(\".selected-icon\").first().click({ force: true });\n        }\n\n        //  定时发布\n        if (!params.isImmediatelyPublish && params.scheduledPublish) {\n            task.logger.info(\"设置定时发布\");\n            const timingRadio = page\n                .locator(\".weui-desktop-form__check-content\")\n                .filter({ hasNotText: \"不定时\" })\n                .first();\n            await timingRadio.click();\n            await page.waitForTimeout(500);\n            const instance = page.locator('.weui-desktop-picker__date input[placeholder*=\"请选择发表时间\"]');\n            await instance.click();\n            const dateD = TimeFormatter.format(params.scheduledPublish, \"d\");\n            const nowMonth = TimeFormatter.format(Date.now(), \"MM月\");\n            const nowMonthText = TimeFormatter.format(Date.now(), \"M月\");\n            const month = TimeFormatter.format(params.scheduledPublish, \"MM月\");\n            const monthLocator = await page\n                .locator(\"weui-desktop-picker__panel__label\")\n                .filter({ hasText: month })\n                .first();\n            if (!monthLocator) {\n                await page.locator(\".weui-desktop-picker__panel__label\").filter({ hasText: nowMonth }).first().click();\n                await page.waitForTimeout(500);\n                await page\n                    .locator(\".weui-desktop-picker__table-row td a\")\n                    .filter({ hasText: nowMonthText })\n                    .first()\n                    .click();\n            }\n            await page.waitForTimeout(500);\n            await page.locator(\".weui-desktop-picker__table-row td a\").filter({ hasText: dateD }).first().click();\n\n            await page\n                .locator(\".weui-desktop-form__input-wrp input[placeholder*='请选择时间']\")\n                .fill(TimeFormatter.format(params.scheduledPublish, \"hh:mm\"));\n            await page.locator(\"i.weui-desktop-icon__time\").click();\n            // 关闭弹出框\n            await page.locator(\".post-time-wrap .form-item .label\").filter({ hasText: \"发表时间\" }).click();\n        }\n\n        task.logger.info(\"准备发布...\");\n        await page.waitForTimeout(300);\n\n        let articleId = \"\";\n        let message = \"\";\n        // 定义响应处理函数\n        const handleResponse = async (response: Response) => {\n            const url = response.url();\n            if (url.includes(\"/post/post_create\") || url.includes(\"/post/post_draft\")) {\n                const jsonResponse = await response.json();\n                page.off(\"response\", handleResponse);\n                articleId = jsonResponse.object?.id || jsonResponse.data?.objectId || \"\";\n                message = jsonResponse?.errMsg || \"\";\n            }\n        };\n\n        // 开始监听响应事件\n        page.on(\"response\", handleResponse);\n        task._timerRecord.PrePublish = Date.now();\n\n        // 点击发布按钮\n        const publishText = params.publishType === \"1\" ? \"发表\" : \"保存草稿\";\n        await page.locator(\".form-btns .weui-desktop-btn\").filter({ hasText: publishText }).first().click();\n        task.logger.info(\"已点击发布按钮，等待响应...\");\n\n        // 关闭页面\n        await page.close();\n        return success(articleId, message || \"发布成功\");\n    } catch (error) {\n        const errorMsg = error instanceof Error ? error.message : String(error);\n        task.logger.error(`微信视频号发布失败: ${errorMsg}`);\n        return response(500, `微信视频号发布失败: ${errorMsg}`, \"\");\n    }\n};\n","import path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, Locator, Response, success, TaskState } from \"@iflyrpa/share\";\nimport { Page } from \"playwright-core\";\nimport { MockPublish } from \"../../types\";\nimport { TimeFormatter } from \"../../utils\";\nimport { ProxyAgent } from \"../../utils/proxy\";\nimport type { PublishAction } from \"./index\";\n\nexport const rpaAction_Server: PublishAction = async (task, params) => {\n    task.logger.info(\"开始微信视频号发布（Server 模式）\");\n    const defaultPage = task.steelBrowserContext?.pages()[0];\n    if (defaultPage) {\n        // 如果 route 已经注册过，就不重复注册\n        if (!(defaultPage as any)._routeRegistered) {\n            (defaultPage as any)._routeRegistered = true;\n\n            const blockedPatterns = [\"**/apm-fe.weixin.com*\", \"**/t2.weixin.com*\"].map(\n                (pattern) => new RegExp(pattern.replace(/\\*\\*/g, \".*\").replace(/\\*/g, \"[^/]*\")),\n            );\n\n            await defaultPage.route(\"**/*\", async (route) => {\n                const req = route.request();\n                const url = req.url();\n\n                // 是否命中屏蔽规则\n                const blocked = blockedPatterns.some((regex) => regex.test(url));\n                if (!blocked) {\n                    return route.continue();\n                }\n\n                if (req.method() === \"OPTIONS\") {\n                    console.log(\"处理 OPTIONS 预检：\", url);\n                    await route.fulfill({\n                        status: 204,\n                        headers: {\n                            \"access-control-allow-origin\": \"*\",\n                            \"access-control-allow-methods\": \"GET,POST,OPTIONS,PUT,DELETE\",\n                            \"access-control-allow-headers\": \"*\",\n                        },\n                        body: \"\",\n                    });\n                    return;\n                }\n\n                await route.fulfill({\n                    status: 204,\n                    body: \"\",\n                });\n            });\n        }\n    }\n\n    const tmpCachePath = task.getTmpPath();\n    task.logger?.info(\"==>进入RPA操作：任务开始,下载图片开始...\");\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    const imagePromise = Promise.all(\n        params.banners.map((url) => {\n            const fileName = getFilenameFromUrl(url);\n            return downloadImage(url, path.join(tmpCachePath, fileName));\n        }),\n    );\n\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n\n    task.logger?.info(\"==>开始打开视频号页面...\");\n    const page = await task.createPage({\n        show: task.debug,\n        cookies: params.cookies,\n        proxyUrl,\n        url: params.url || \"https://channels.weixin.qq.com/platform/post/finderNewLifeCreate\",\n        ...(params.viewport ? { viewport: params.viewport } : {}),\n    });\n    task.logger?.info(\"==>视频号页面打开成功\");\n    console.log(task.steelConnector?.getLive(task.sessionId || \"\"));\n    await updateTaskState?.({\n        state: TaskState.ACTION,\n        connectAddress: task.steelConnector?.getProxyUrl(task.sessionId || \"\", \"v1/sessions/debug\"),\n        sessionId: task.sessionId,\n    });\n\n    const clickTimeout = 1000 * 10;\n\n    // 自动化脚本\n    // ----------------------------------------------------------------------------------\n\n    // 等待登录成功\n    try {\n        await page.waitForSelector(\".post-edit-wrap\", { state: \"visible\", timeout: 10000 });\n        task.logger?.info(\"✓ 登录状态正常，找到编辑器容器\");\n    } catch (error) {\n        task.logger?.error(\"✗ 未找到编辑器，可能登录失效\");\n        return { code: 414, message: \"登录失效或页面加载异常\", data: page.url() };\n    }\n\n    // 获取待上传图片的本地路径\n    const images = await imagePromise;\n\n    task.logger?.info(`==>图片下载完成，共 ${images.length} 张，开始上传图片...`);\n\n    // 上传图片\n    const uploadSelectors = [\n        '.ant-upload-btn input[type=\"file\"]',\n        '.upload input[type=\"file\"][accept*=\"image\"]',\n        '.upload-wrap input[type=\"file\"]',\n        'input[type=\"file\"][accept*=\"image\"]',\n    ];\n\n    let uploadInput: Locator | null = null;\n\n    for (const selector of uploadSelectors) {\n        const input = page.locator(selector);\n        const count = await input.count();\n        if (count > 0) {\n            uploadInput = input.first();\n            task.logger?.info(`找到上传输入框: ${selector}`);\n            break;\n        }\n    }\n\n    if (!uploadInput) {\n        task.logger?.warn(\"未找到上传输入框，等待 3 秒后重试...\");\n        await page.waitForTimeout(3000);\n\n        const anyFileInput = page.locator('input[type=\"file\"]');\n        const inputCount = await anyFileInput.count();\n\n        if (inputCount > 0) {\n            uploadInput = anyFileInput.first();\n            task.logger?.info(`找到文件输入框（共 ${inputCount} 个）`);\n        } else {\n            if (task.debug) {\n                const screenshotPath = path.join(tmpCachePath, `upload-error-${Date.now()}.png`);\n                await page.screenshot({ path: screenshotPath, fullPage: true });\n                task.logger?.error(`未找到上传输入框，已截图保存至: ${screenshotPath}`);\n            }\n            throw new Error(\"未找到图片上传输入框\");\n        }\n    }\n\n    await uploadInput.setInputFiles(images, { timeout: 60 * 1000 });\n    task.logger?.info(`==>图片上传完成: ${images.length} 张`);\n\n    // 等待图片处理\n    await page.waitForTimeout(3000);\n\n    // 填写标题\n    if (params.title) {\n        task.logger?.info(`填写标题: ${params.title}`);\n        const titleInput = page.locator('input[placeholder*=\"填写标题\"]');\n        await titleInput.waitFor({ state: \"visible\", timeout: clickTimeout });\n        await titleInput.click({ timeout: clickTimeout });\n        await titleInput.clear({ timeout: 3000 });\n        await titleInput.fill(params.title, { timeout: 5000 });\n        task.logger?.info(\"==>标题填写完成\");\n    }\n\n    // 填写描述和话题\n    if (params.content) {\n        task.logger?.info(\"填写描述和话题\");\n        const descEditor = page.locator(\".input-editor\");\n        await descEditor.waitFor({ state: \"visible\", timeout: clickTimeout });\n        await descEditor.click({ timeout: clickTimeout });\n        await page.waitForTimeout(500);\n\n        // 清空编辑器内容\n        await descEditor.evaluate((el) => {\n            el.textContent = \"\";\n        });\n        await page.waitForTimeout(300);\n        task.logger?.info(\"已清空编辑器内容\");\n\n        // 模拟用户逐字输入，触发富文本编辑器的话题识别\n        await descEditor.pressSequentially(params.content, { delay: 10 });\n        await page.waitForTimeout(500);\n\n        task.logger?.info(\"==>内容填写完成\");\n    }\n\n    // 选择地点\n    if (params.address?.poi_id) {\n        task.logger?.info(`选择地点: ${params.address.name}`);\n        const positionDisplayWrap = page.locator(\".position-display-wrap\");\n        await positionDisplayWrap.click({ timeout: clickTimeout });\n        await page.waitForTimeout(1000);\n        await page\n            .locator(\".location-filter-wrap input\")\n            .fill(params.address?.name || params.address?.address || params.address?.city_name);\n        await page.waitForTimeout(2000);\n        const poperInstance = page.locator(\".location-filter-wrap .common-option-list-wrap .option-item\");\n        await poperInstance.nth(1).waitFor();\n        await poperInstance.nth(1).click({ timeout: clickTimeout });\n        task.logger?.info(\"==>地点选择完成\");\n    }\n\n    // 选择合集\n    if (params.collection) {\n        task.logger?.info(`选择合集: ${params.collection.collectionName}`);\n        const instanceCollection = page.locator(\".post-album-display-wrap\");\n        await instanceCollection.click({ timeout: clickTimeout });\n        await page.waitForTimeout(1000);\n        await page\n            .locator(\".post-album-wrap .option-item\")\n            .filter({ hasText: params.collection.collectionName })\n            .first()\n            .click({ force: true });\n        task.logger?.info(\"==>合集选择完成\");\n    }\n\n    // 填写链接\n    if (params.link) {\n        task.logger?.info(`添加链接: ${params.link.link}`);\n        const instanceLink = page.locator(\".link-display-wrap\");\n        await instanceLink.first().click({ timeout: clickTimeout });\n        await page.waitForTimeout(500);\n        const linkTypeName = params.link.urlType === 1 ? \"公众号文章\" : \"红包封面\";\n        await page\n            .locator(\".post-link-wrap .link-list-options .link-option-item\")\n            .filter({ hasText: linkTypeName })\n            .first()\n            .click({ force: true });\n        await page.waitForSelector(\".link-input-wrap\", { state: \"visible\", timeout: 3000 });\n        const linkInput = page.locator('.link-input-wrap input[type=\"text\"]');\n        await linkInput.first().fill(params.link.link);\n        task.logger?.info(\"==>链接添加完成\");\n    }\n\n    // 选择音乐\n    if (params.music) {\n        task.logger?.info(`添加背景音乐: ${params.music.name}`);\n        const musicFormItem = page.locator(\".post-with-link\").filter({ hasText: \"音乐\" });\n        const musicDisplayWrap = musicFormItem.locator(\".link-display-wrap\").first();\n        await musicDisplayWrap.click({ timeout: clickTimeout });\n        const searchInput = musicFormItem.locator('.weui-desktop-search input[type=\"text\"]').first();\n        const searchTxt = `${params.music.name} - ${params.music.authorName}`;\n        await searchInput.fill(searchTxt);\n        await page.waitForTimeout(300);\n        await searchInput.press(\"Enter\");\n        await page.waitForTimeout(2000);\n        const bgmItemWrap = musicFormItem.locator(\".bgm-item-wrap\").filter({ hasText: searchTxt }).first();\n        await bgmItemWrap.hover();\n        await page.waitForTimeout(500);\n        await bgmItemWrap.locator(\".selected-icon\").first().click({ force: true });\n        task.logger?.info(\"==>背景音乐添加完成\");\n    }\n\n    // 定时发布\n    if (!params.isImmediatelyPublish && params.scheduledPublish) {\n        task.logger?.info(\"设置定时发布\");\n        const timingRadio = page.locator(\".weui-desktop-form__check-content\").filter({ hasNotText: \"不定时\" }).first();\n        await timingRadio.click({ timeout: clickTimeout });\n        await page.waitForTimeout(500);\n        const dateInput = page.locator('.weui-desktop-picker__date input[placeholder*=\"请选择发表时间\"]');\n        await dateInput.click({ timeout: clickTimeout });\n\n        const dateD = TimeFormatter.format(params.scheduledPublish, \"d\");\n        const nowMonth = TimeFormatter.format(Date.now(), \"MM月\");\n        const nowMonthText = TimeFormatter.format(Date.now(), \"M月\");\n        const month = TimeFormatter.format(params.scheduledPublish, \"MM月\");\n\n        const monthLocator = page.locator(\"weui-desktop-picker__panel__label\").filter({ hasText: month }).first();\n        const monthCount = await monthLocator.count();\n\n        if (monthCount === 0) {\n            await page\n                .locator(\".weui-desktop-picker__panel__label\")\n                .filter({ hasText: nowMonth })\n                .first()\n                .click({ timeout: clickTimeout });\n            await page.waitForTimeout(500);\n            await page\n                .locator(\".weui-desktop-picker__table-row td a\")\n                .filter({ hasText: nowMonthText })\n                .first()\n                .click({ timeout: clickTimeout });\n        }\n        await page.waitForTimeout(500);\n        await page\n            .locator(\".weui-desktop-picker__table-row td a\")\n            .filter({ hasText: dateD })\n            .first()\n            .click({ timeout: clickTimeout });\n\n        await page\n            .locator(\".weui-desktop-form__input-wrp input[placeholder*='请选择时间']\")\n            .fill(TimeFormatter.format(params.scheduledPublish, \"hh:mm\"));\n        await page.locator(\"i.weui-desktop-icon__time\").click({ timeout: clickTimeout });\n\n        // 关闭弹出框\n        await page\n            .locator(\".post-time-wrap .form-item .label\")\n            .filter({ hasText: \"发表时间\" })\n            .click({ timeout: clickTimeout });\n        task.logger?.info(\"==>定时发布设置完成\");\n    }\n\n    task.logger?.info(\"准备发布...\");\n    await page.waitForTimeout(300);\n\n    if (MockPublish) {\n        const message = \"视频号模拟发布成功\";\n        const data = \"123456789\";\n\n        await updateTaskState?.({\n            state: TaskState.SUCCESS,\n            result: {\n                response: data,\n            },\n        });\n        return success(data, message);\n    }\n\n    const publishResponse = await new Promise<{\n        success: boolean;\n        msg: string;\n        data?: { id: string; objectId: string };\n    }>((resolve) => {\n        // 定义响应处理函数\n        const handleResponse = async (response: Response) => {\n            const url = response.url();\n            if (url.includes(\"/post/post_create\") || url.includes(\"/post/post_draft\")) {\n                const jsonResponse = await response.json();\n                page.off(\"response\", handleResponse);\n\n                const articleId = jsonResponse.object?.id || jsonResponse.data?.objectId || \"\";\n                const message = jsonResponse?.errMsg || \"\";\n                const errCode = jsonResponse.data?.baseResp?.errcode ?? jsonResponse.errCode;\n\n                if (errCode === 0) {\n                    resolve({\n                        success: true,\n                        msg: message || \"发布成功\",\n                        data: { id: articleId, objectId: articleId },\n                    });\n                } else {\n                    let errorMessage = message;\n                    if (errCode === -11224) {\n                        errorMessage = \"视频号管理员完成实名且绑定手机号后才可以发表\";\n                    } else if (errCode === 300333 || errCode === 300334) {\n                        errorMessage = \"登录失效\";\n                    } else if (errCode === 300330) {\n                        errorMessage = \"未登录\";\n                    } else if (errCode === 300002) {\n                        errorMessage = \"官方平台在校验音乐/位置/定时信息时失败了，请重新编辑后发布\";\n                    }\n                    resolve({ success: false, msg: errorMessage });\n                }\n            }\n        };\n\n        // 开始监听响应事件\n        page.on(\"response\", handleResponse);\n\n        // task._timerRecord.PrePublish = Date.now();\n\n        // 点击发布按钮\n        const publishText = params.publishType === \"1\" ? \"发表\" : \"保存草稿\";\n        page.locator(\".form-btns .weui-desktop-btn\")\n            .filter({ hasText: publishText })\n            .first()\n            .click({ timeout: clickTimeout });\n\n        // 添加整体超时保护\n        setTimeout(() => {\n            page.off(\"response\", handleResponse);\n            resolve({ success: false, msg: \"发布超时\" });\n        }, 10000);\n    });\n\n    if (!publishResponse?.success) {\n        const msg = `发布失败：${publishResponse?.msg || \"未知错误\"}`;\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: msg,\n        });\n        await page.close();\n        return { code: 414, message: msg, data: \"\" };\n    }\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: {\n            response: publishResponse?.data?.id || \"\",\n        },\n    });\n\n    // 关闭页面\n    await page.close();\n    return success(publishResponse?.data?.id || \"\", publishResponse?.msg || \"发布成功\");\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaAction_Server } from \"./rpa-server\";\n\nexport const ShipinhaoPublishParamsSchema = ActionCommonParamsSchema.extend({\n    title: z.string(), // 标题\n    content: z.string(), // 正文\n    banners: z.array(z.string()), // 图片URL字符串数组\n    topic: z.array(z.string()).optional(), // 话题\n    address: z\n        .object({\n            poi_id: z.string(), // uid\n            name: z.string().optional(), // name\n            address: z.string().optional(), // fullAddress\n            latitude: z.number(),\n            longitude: z.number(),\n            city_name: z.string(), // city\n        })\n        .optional(), // 位置，不显示位置则不传此参数\n    link: z\n        .object({\n            // 链接\n            urlType: z.number(), // 公众号文章 1 红包封面 2\n            link: z.string(),\n            title: z.string(), // 链接校验成功时data中的返回值title\n        })\n        .optional(),\n    collection: z\n        .object({\n            // 合集\n            collectionId: z.string(), // 合集id\n            collectionName: z.string(), //合集名称\n        })\n        .optional(),\n    music: z\n        .object({\n            id: z.string(), // musicSid 或 playableInfo.listenId\n            name: z.string(), // playableInfo.title\n            image: z.string(), // playableInfo.cover\n            authorName: z.string(), // playableInfo.author\n            url: z.string(), // url\n            raw: z.object({\n                playableInfo: z.object({\n                    type: z.number(), // playableInfo.type\n                }),\n                bgmSource: z.number(), // BGM来源 搜索-4 推荐-2 其他-1\n                query: z.string().optional(), // 搜索查询的字符串\n            }),\n        })\n        .optional(), // 音乐信息\n    proxyLoc: z.string().optional(), // 代理位置\n    localIP: z.string().optional(), // 用户ip\n    isImmediatelyPublish: z.boolean().optional(), // 是否立即发布\n    scheduledPublish: z.number().optional(), // 定时发布时间，时间戳类型 10位数字\n    publishType: z.enum([\"1\", \"2\"]).optional(), // 发布类型 1：发布 2：同步\n});\n\nexport type ShipinhaoPublishParams = z.infer<typeof ShipinhaoPublishParamsSchema>;\n\nexport type PublishAction = CommonAction<ShipinhaoPublishParams, string>;\n\nexport const shipinhaoPublish: PublishAction = async (task, params) => {\n    task.logger.info(`shipinhaoPublish actionType: ${params.actionType}`);\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return mockAction(task, params);\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaAction_Server(task, params);\n    }\n\n    return executeAction(mockAction, rpaAction_Server)(task, params);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const ShipinhaoSendMsgParamsSchema = ActionCommonParamsSchema.extend({\n    toUsername: z.string().min(1, \"接收者用户名不能为空\"), // 接收者用户名\n    sessionId: z.string().min(1, \"会话ID不能为空\"), // 会话ID\n    msgType: z.enum([\"TEXT\", \"IMAGE\"], {\n        message: \"消息类型必须是 TEXT 或 IMAGE\",\n    }), // 消息类型：TEXT-文本消息，IMAGE-图片消息\n    content: z.string().optional(), // 文本消息内容（msgType=TEXT时必填）\n    imageInfo: z\n        .object({\n            pathOrUrl: z.string().min(1, \"图片路径或URL不能为空\"), // 图片路径或URL\n        })\n        .optional(), // 图片信息（msgType=IMAGE时必填）\n});\n","import { createHash } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport { type CommonAction, response } from \"@iflyrpa/share\";\nimport axios from \"axios\";\nimport { z } from \"zod\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\nimport { ShipinhaoSendMsgParamsSchema } from \"./schema\";\n\nexport type ShipinhaoSendMsgParams = z.infer<typeof ShipinhaoSendMsgParamsSchema>;\nexport { ShipinhaoSendMsgParamsSchema } from \"./schema\";\n\nconst CHUNK_SIZE = 512 * 1024; // 分片大小：512KB\n// const COMPRESS_CONFIG = {\n//     maxWidth: 828, // 最大宽度限制\n//     quality: 95, // JPEG 质量（jimp 只支持 JPEG）\n//     pngCompressionLevel: 6, // PNG 压缩级别（jimp 使用 filterType 或 deflateLevel）\n// };\n\nexport interface UploadMsgImageResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        imgMsg: {\n            aesKey: string;\n            cdnUrl: string;\n            encryptKey: string;\n            height: number;\n            md5: string;\n            size: number;\n            width: number;\n        };\n    };\n}\n\n// 用户信息响应\ninterface UserInfoResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        finderUser?: {\n            finderUsername: string;\n        };\n    };\n}\n\n// async function compressImage(buffer: Buffer): Promise<{ data: Buffer; width: number; height: number }> {\n//     // 使用 jimp 读取图片\n//     const image = await Jimp.read(buffer);\n//     const originalWidth = image.bitmap.width;\n//     const originalHeight = image.bitmap.height;\n\n//     // 计算压缩后的尺寸\n//     let newWidth = originalWidth;\n//     let newHeight = originalHeight;\n\n//     if (originalWidth > COMPRESS_CONFIG.maxWidth) {\n//         newWidth = COMPRESS_CONFIG.maxWidth;\n//         newHeight = Math.round((originalHeight / originalWidth) * COMPRESS_CONFIG.maxWidth);\n//     }\n\n//     // 压缩处理\n//     image.resize(newWidth, newHeight);\n\n//     // 判断输出格式并设置质量\n//     const mime = image.getMIME();\n//     let outputBuffer: Buffer;\n\n//     if (mime === Jimp.MIME_JPEG) {\n//         // JPEG 设置质量\n//         image.quality(COMPRESS_CONFIG.quality);\n//         outputBuffer = await image.getBufferAsync(Jimp.MIME_JPEG);\n//     } else if (mime === Jimp.MIME_PNG) {\n//         // PNG 设置压缩级别（jimp 使用 deflateLevel，范围 0-9）\n//         // 注意：jimp 的 PNG 压缩选项有限，filterType 控制扫描算法\n//         outputBuffer = await image.getBufferAsync(Jimp.MIME_PNG);\n//     } else {\n//         // 其他格式默认处理为 PNG\n//         outputBuffer = await image.getBufferAsync(Jimp.MIME_PNG);\n//     }\n\n//     // 输出压缩信息\n//     const originalSize = buffer.length;\n//     const compressedSize = outputBuffer.length;\n//     console.log(\n//         `file compress before ${(originalSize / 1024 / 1024).toFixed(2)}M, ` +\n//             `compress after ${(compressedSize / 1024 / 1024).toFixed(2)}M, ` +\n//             `dimensions: ${newWidth}x${newHeight}`,\n//     );\n\n//     return {\n//         data: outputBuffer,\n//         width: newWidth,\n//         height: newHeight,\n//     };\n// }\n\n/**\n * 获取用户信息\n */\nasync function getUserInfo(cookieStr: string, http: Http): Promise<UserInfoResponse> {\n    const url = `https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/auth/auth_data?_rid=${rid()}`;\n\n    const headers = {\n        referer: \"https://channels.weixin.qq.com/micro/interaction/private_msg\",\n        cookie: cookieStr,\n        Origin: \"https://channels.weixin.qq.com\",\n    };\n\n    return await http.api<UserInfoResponse>(\n        {\n            method: \"get\",\n            url,\n            headers,\n        },\n        { retries: 3, retryDelay: 1000, timeout: 10000 },\n    );\n}\n\nexport type SendShipinhaoMsgAction = CommonAction<ShipinhaoSendMsgParams, any>;\n\nexport const shipinhaoSendMsg: SendShipinhaoMsgAction = async (_task, params) => {\n    if (!params.sessionId) {\n        return response(414, \"sessionId 不能为空\", undefined);\n    }\n\n    if (!params.toUsername) {\n        return response(414, \"接收者用户名不能为空\", undefined);\n    }\n\n    if (!params.msgType) {\n        return response(414, \"消息类型不能为空\", undefined);\n    }\n\n    if (![\"TEXT\", \"IMAGE\"].includes(params.msgType)) {\n        return response(414, \"消息类型必须是 TEXT 或 IMAGE\", undefined);\n    }\n\n    if (params.msgType === \"TEXT\") {\n        if (!params.content || params.content.trim() === \"\") {\n            return response(414, \"消息内容不能为空\", undefined);\n        }\n    }\n\n    if (params.msgType === \"IMAGE\") {\n        if (!params.imageInfo?.pathOrUrl) {\n            return response(414, \"图片路径或URL不能为空\", undefined);\n        }\n    }\n\n    if (!params.extraParam) {\n        return response(414, \"缺少 extraParam 参数\", undefined);\n    }\n\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId || !params.extraParam.uin) {\n        return response(414, \"fingerPrintDeviceId、aId 和 uin 不能为空\", undefined);\n    }\n\n    const cookieStr = params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\");\n    const headers = {\n        cookie: cookieStr,\n        referer: \"https://channels.weixin.qq.com/micro/interaction/private_msg\",\n        origin: \"https://channels.weixin.qq.com\",\n        \"content-type\": \"application/json\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    const http = new Http({ headers });\n\n    const urlParams = new URLSearchParams({\n        _aid: params.extraParam.aId,\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/interaction/private_msg\",\n    }).toString();\n\n    const generateCliMsgId = () => {\n        return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (s) => {\n            const t = (Math.random() * 16) | 0;\n            return (s === \"x\" ? t : (t & 3) | 8).toString(16);\n        });\n    };\n\n    let fromUsername = params.extraParam.finderUserName;\n    if (!fromUsername) {\n        _task.logger.info(\"未提供 finderUserName，尝试获取用户信息\");\n        const userInfoRes = await getUserInfo(cookieStr, http);\n\n        if (!userInfoRes.data?.finderUser?.finderUsername) {\n            return response(userInfoRes.errCode || -1, userInfoRes.errMsg || \"获取用户信息失败\", {});\n        }\n\n        fromUsername = userInfoRes.data.finderUser.finderUsername;\n        _task.logger.info(`获取到用户名: ${fromUsername}`);\n    }\n\n    let imgMsg: any;\n    if (params.msgType === \"IMAGE\") {\n        let imageBuffer: Buffer;\n        const imagePath = params.imageInfo!.pathOrUrl;\n\n        try {\n            if (imagePath.startsWith(\"http://\") || imagePath.startsWith(\"https://\")) {\n                const resp = await axios.get(imagePath, { responseType: \"arraybuffer\" });\n                imageBuffer = Buffer.from(resp.data);\n            } else {\n                const filePath = imagePath.startsWith(\"file://\") ? imagePath.slice(7) : imagePath;\n                imageBuffer = Buffer.from(await fs.promises.readFile(filePath));\n            }\n        } catch (err) {\n            return response(414, `读取图片失败: ${err instanceof Error ? err.message : String(err)}`, undefined);\n        }\n\n        // const compressedBuffer = await compressImage(imageBuffer);\n        // imageBuffer = compressedBuffer.data;\n        const md5 = createHash(\"md5\").update(imageBuffer).digest(\"hex\");\n        const timestamp = Date.now().toString();\n        const totalChunks = Math.ceil(imageBuffer.length / CHUNK_SIZE);\n\n        console.log(`分片上传md5${md5}`);\n        let lastRes: UploadMsgImageResponse | undefined;\n\n        // 分片上传图片\n        for (let i = 0; i < totalChunks; i++) {\n            const chunkBuffer = imageBuffer.slice(i * CHUNK_SIZE, (i + 1) * CHUNK_SIZE);\n\n            const requestData = {\n                content: `data:application/octet-stream;base64,${chunkBuffer.toString(\"base64\")}`,\n                chunk: i,\n                chunks: totalChunks,\n                fromUsername,\n                toUsername: params.toUsername,\n                aesKey: \"U2FsdGVkX18cwrWR73LMGhBcmAX8xoNTgbmgkZBYkEs=\",\n                mediaSize: imageBuffer.length,\n                mediaType: 3,\n                md5,\n                timestamp,\n                _log_finder_uin: \"\",\n                _log_finder_id: params.extraParam.finderUserName || \"\",\n                rawKeyBuff: null,\n                pluginSessionId: null,\n                scene: 7,\n                reqScene: 7,\n            };\n\n            lastRes = await http.api<UploadMsgImageResponse>({\n                method: \"post\",\n                url: `https://channels.weixin.qq.com/micro/interaction/cgi-bin/mmfinderassistant-bin/private-msg/upload-media-info?${urlParams}`,\n                data: requestData,\n            });\n\n            console.log(`分片上传 ${i + 1}/${totalChunks} 响应:`, lastRes);\n            if (lastRes?.errCode !== 0 && i < totalChunks - 1) {\n                return response(414, lastRes?.errMsg || `第 ${i + 1}/${totalChunks} 分片上传失败`, undefined);\n            }\n        }\n\n        if (lastRes?.errCode !== 0) {\n            return response(414, lastRes?.errMsg || \"上传图片失败\", undefined);\n        }\n\n        const uploadedImgMsg = lastRes.data?.imgMsg as any;\n        imgMsg = {\n            aeskey: uploadedImgMsg.aesKey ?? uploadedImgMsg.aeskey,\n            url: uploadedImgMsg.cdnUrl ?? uploadedImgMsg.url,\n            hdSize: uploadedImgMsg.hdSize ?? uploadedImgMsg.size,\n            midSize: uploadedImgMsg.midSize ?? uploadedImgMsg.size,\n            thumbSize: uploadedImgMsg.thumbSize ?? uploadedImgMsg.size,\n            thumbHeight: uploadedImgMsg.thumbHeight ?? uploadedImgMsg.height,\n            thumbWidth: uploadedImgMsg.thumbWidth ?? uploadedImgMsg.width,\n            md5: uploadedImgMsg.md5,\n        };\n    }\n\n    console.log(\"发送私信请求参数1111\", {\n        sessionId: params.sessionId,\n        fromUsername,\n    });\n\n    const sendRes = await http.api<{ errCode: number; errMsg: string; data?: any }>({\n        method: \"post\",\n        url: `https://channels.weixin.qq.com/micro/interaction/cgi-bin/mmfinderassistant-bin/private-msg/send-private-msg?${urlParams}`,\n        data: {\n            timestamp: Date.now().toString(),\n            _log_finder_uin: \"\",\n            _log_finder_id: params.extraParam.finderUserName || \"\",\n            rawKeyBuff: null,\n            pluginSessionId: null,\n            scene: 7,\n            reqScene: 7,\n            msgPack: {\n                sessionId: params.sessionId,\n                fromUsername,\n                toUsername: params.toUsername,\n                cliMsgId: generateCliMsgId(),\n                msgType: params.msgType === \"TEXT\" ? 1 : 3,\n                imgMsg: params.msgType === \"IMAGE\" ? imgMsg : undefined,\n                textMsg: params.msgType === \"TEXT\" ? { content: params.content } : undefined,\n            },\n        },\n    });\n\n    console.log(\"发送私信响应:\", sendRes);\n    const isSuccess = sendRes?.errCode === 0;\n    return response(isSuccess ? 0 : 414, sendRes?.errMsg || \"发送图片私信失败\", sendRes.data);\n};\n","import { type Page, type Response, success, type UserInfo } from \"@iflyrpa/share\";\nimport type { SteelAction } from \"./index\";\n\n/**\n * 头条号登录 RPA\n *\n * 流程：\n * 1. 打开头条号登录页\n * 2. 生成远程调试地址，等待用户扫码\n * 3. 监听 user_info 接口获取用户信息\n * 4. 等待页面跳转到 /profile_v4/index 判断登录成功\n * 5. 收集 cookie 并返回结果\n */\nexport const rpaAction: SteelAction = async (task, _params) => {\n    const reporter = task.reportService?.reportLoginStatus ?? (() => Promise.resolve());\n\n    let page: Page;\n    let isSelfClosing = false;\n    let handleBrowserDisconnected: (() => void) | undefined;\n    const cleanup = async () => {\n        if (handleBrowserDisconnected) {\n            task._steelBrowser?.off(\"disconnected\", handleBrowserDisconnected);\n        }\n        if (page && !page.isClosed()) {\n            await page.close().catch(() => {});\n        }\n    };\n\n    // ========== 第一步：启动浏览器并打开登录页 ==========\n    try {\n        page = await task.createPage({\n            url: \"https://mp.toutiao.com/auth/page/login\",\n        });\n        if (!task._session?.id) throw new Error(\"Session ID 不存在\");\n        handleBrowserDisconnected = () => {\n            if (task.debug && isSelfClosing) {\n                task.logger.info(\"执行结束，关闭浏览器！\");\n            } else {\n                task.logger.info(\"浏览器被手动释放或意外关闭！\");\n            }\n        };\n        task._steelBrowser?.on(\"disconnected\", handleBrowserDisconnected);\n    } catch (e) {\n        return { code: 414, message: `浏览器启动失败: ${e}`, data: {} };\n    }\n\n    // ========== 第二步：生成远程调试地址 ==========\n    const pageInfo = await task._client?.sessions.liveDetails(task._session.id);\n    const pageId = pageInfo?.pages[0].id ?? \"\";\n\n    const baseHost = task._session.websocketUrl?.replace(/^wss?:\\/\\//, \"\") ?? \"\";\n    const connectAddress = new URLSearchParams({ baseHost, pageId }).toString();\n\n    task.reportService?.settingSessionID?.(task._session?.id || \"\");\n\n    // 拦截欢迎页的图片和视频资源，提升加载速度\n    await page.route(/\\/welcome.*\\.(png|mp4)$/i, (route) => route.abort());\n\n    await reporter(0, \"浏览器启动成功，请使用头条号App扫码登录……\", { connectAddress });\n\n    // ========== 第三步：监听登录状态与用户信息 ==========\n    let userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n    try {\n        /**\n         * 监听用户信息接口 /mp/agw/creator_center/user_info\n         * 登录成功后该接口会被自动调用，从中提取用户信息\n         */\n        const handleUserInfo = async (resp: Response) => {\n            if (resp.url().includes(\"/mp/agw/creator_center/user_info\")) {\n                try {\n                    const jsonUserInfo = await resp.json();\n                    userInfo = {\n                        name: jsonUserInfo.name,\n                        avatar: jsonUserInfo.avatar_url,\n                        uniqueId: jsonUserInfo.user_id_str,\n                    };\n                } catch (e) {\n                    task.logger.warn(\"无法解析用户信息:\", { error: e });\n                }\n            }\n        };\n        page.on(\"response\", handleUserInfo);\n\n        // 等待页面跳转到登录成功页面（不设超时，允许用户慢慢扫码）\n        await page.waitForURL(\"**/profile_v4/index**\", {\n            timeout: 0,\n            waitUntil: \"domcontentloaded\",\n        });\n\n        task.logger.info(\"页面已跳转到登录成功页面\");\n        await reporter(0, \"登录成功，正在获取用户信息...\", { stage: \"scanQrcode\", connectAddress });\n\n        // 等待用户信息接口响应\n        await page.waitForTimeout(2000);\n\n        page.off(\"response\", handleUserInfo);\n    } catch (e) {\n        task.logger.error(\"等待登录跳转失败\", { error: String(e) });\n        isSelfClosing = true;\n        await cleanup();\n        return { code: 500, message: \"登录失败，请重试！\", data: { stage: \"waitForLogin\", connectAddress } };\n    }\n\n    // ========== 第四步：收集 cookie 并返回结果 ==========\n    const cookie = JSON.stringify(await task._steelBrowserContext?.cookies());\n    isSelfClosing = true;\n    await cleanup();\n\n    return success({ connectAddress, cookie, userInfo }, \"登录成功！\");\n};\n","import { TaskState, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response } from \"playwright-core\";\nimport { ExecutionState } from \"../../types\";\nimport { ProxyAgent } from \"../../utils/proxy\";\nimport type { SteelAction } from \"./index\";\n\nconst scanRetryMaxCount = 60; // 二维码扫描重试次数\nconst waitQrcodeResultMaxTime = scanRetryMaxCount * 2 * 1000; // 最长等待时间\n\nexport const rpaServer: SteelAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    let executionState: ExecutionState | undefined;\n\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n    const page = await task.createPage({\n        url: \"https://mp.toutiao.com/auth/page/login\",\n        proxyUrl,\n        userAgent: params.userAgent,\n        ...(params.viewport ? { viewport: params.viewport } : {}),\n    });\n\n    task.steelBrowser?.on(\"disconnected\", async () => {\n        const browserContext = task.steelBrowserContext;\n        const browser = task.steelBrowser;\n        executionState = ExecutionState.BROWSER_CLOSED;\n        await page.close();\n\n        if (browserContext) {\n            await browserContext.close();\n        }\n        if (browser) {\n            await browser.close();\n        }\n    });\n\n    // 拦截不必要的资源请求\n    // await page.route(/\\/welcome.*\\.(png|mp4)$/i, (route) => route.abort());\n\n    await updateTaskState?.({\n        state: TaskState.WAIT_SCAN,\n        connectAddress: await task.steelConnector?.getLive(task.sessionId || \"\"),\n        sessionId: task.sessionId,\n    });\n\n    let userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            const timer = setTimeout(async () => {\n                cleanup();\n                executionState = ExecutionState.TIMEOUT;\n                await updateTaskState?.({\n                    state: TaskState.TIMEOUT,\n                    error: \"等待扫码登录超时\",\n                });\n                resolve();\n            }, waitQrcodeResultMaxTime);\n\n            const cleanup = () => {\n                if (finished) return; // 防止多次调用\n                finished = true;\n                clearTimeout(timer);\n                page.off(\"response\", handleWebCommon);\n                page.off(\"response\", handleCheckQR);\n                task.steelBrowser?.off(\"disconnected\", handleBrowserClosed);\n            };\n\n            const handleBrowserClosed = () => {\n                cleanup();\n                executionState = ExecutionState.BROWSER_CLOSED;\n                resolve();\n            };\n\n            const handleWebCommon = async (resp: Response) => {\n                try {\n                    const url = resp.url();\n\n                    // 登录成功后的第一个请求\n                    if (url.includes(\"/web/common\")) {\n                        cleanup();\n\n                        const headers = resp.headers();\n                        const xmst = headers[\"x-ms-token\"];\n                        const date = headers[\"x-tt-timestamp\"];\n\n                        if (xmst && date) {\n                            const mstExpirDate = new Date(Number(date) * 1000 + 7 * 24 * 60 * 60 * 1000);\n                            const msToken = {\n                                name: \"msToken\",\n                                value: xmst,\n                                domain: \".bytedance.com\",\n                                expires: mstExpirDate.getTime() / 1000,\n                                httpOnly: true,\n                                path: \"/\",\n                                sameSite: \"None\" as const,\n                                secure: true,\n                            };\n                            await page.context().addCookies([msToken]);\n                            await updateTaskState?.({\n                                state: TaskState.CONFIRMED,\n                            });\n                        }\n\n                        executionState = ExecutionState.SUCCESS;\n                        resolve();\n                    } else if (url.includes(\"/mp/agw/creator_center/user_info\")) {\n                        // 优先获取用户信息\n                        try {\n                            const jsonUserInfo = await resp.json();\n                            userInfo = {\n                                name: jsonUserInfo.name ?? \"\",\n                                avatar: jsonUserInfo.avatar_url ?? \"\",\n                                uniqueId: jsonUserInfo.user_id_str ?? \"\",\n                            };\n                        } catch (e) {\n                            task.logger.warn(\"无法解析用户信息:\", { url, error: e });\n                        }\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 0=用户未扫码，5=用户扫码已超时，2=用户已扫码未确认，3=扫码成功\n            const handleCheckQR = async (response: Response) => {\n                try {\n                    const url = response.url();\n                    if (!url.includes(\"/check_qrconnect/\")) return;\n\n                    let jsonResponse: { error_code: number; data?: { status: string } };\n                    try {\n                        const text = await response.text();\n                        if (!text) {\n                            task.logger.warn(\"Empty response body:\", { url });\n                            return;\n                        }\n\n                        jsonResponse = JSON.parse(text);\n                    } catch (e) {\n                        task.logger.warn(\"Failed to parse json:\", { url, error: e });\n                        return;\n                    }\n\n                    if (jsonResponse.error_code === 0 && jsonResponse.data?.status === \"2\") {\n                        // 扫码成功\n                        await updateTaskState?.({\n                            state: TaskState.SCANNED,\n                        });\n                    }\n                    if (jsonResponse.error_code === 0 && jsonResponse.data?.status === \"3\") {\n                        page.off(\"response\", handleCheckQR);\n                        page.on(\"response\", handleWebCommon);\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 在页面加载之前就注册监听，防止丢失请求\n            task.steelBrowser?.on(\"disconnected\", handleBrowserClosed);\n            page.on(\"response\", handleCheckQR);\n        });\n    } finally {\n        await page.close();\n    }\n\n    if (executionState === undefined) return { code: 500, message: \"未知错误\", data: {} };\n\n    switch (executionState) {\n        case ExecutionState.BROWSER_CLOSED: {\n            const msg = \"浏览器已关闭，任务中断!\";\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: \"浏览器已关闭\",\n            });\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.TIMEOUT: {\n            const msg = \"等待用户扫码登录超时!\";\n            await updateTaskState?.({\n                state: TaskState.TIMEOUT,\n                error: msg,\n            });\n            task.logger.info(msg);\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.SUCCESS:\n            await updateTaskState?.({\n                state: TaskState.SUCCESS,\n                result: {\n                    cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),\n                    userInfo: userInfo,\n                },\n            });\n            return {\n                code: 0,\n                message: \"成功\",\n                data: {\n                    cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),\n                    userInfo,\n                },\n            };\n        default:\n            // 处理 RUNNING 和其他可能的状态\n            return { code: 500, message: \"任务执行中断\", data: {} };\n    }\n};\n","import { CommonAction, success } from \"@iflyrpa/share\";\nimport { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaServer } from \"./rpa-server\";\n\nexport type ToutiaoLoginParams = ActiomCommonParams;\n\nexport type SteelAction = CommonAction<ActiomCommonParams, Record<string, unknown>>;\n\nexport const toutiaoLogin: SteelAction = async (task, params) => {\n    // params.actionType = \"rpa\";\n\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return success({}, \"暂不支持mockApi\");\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaServer(task, params);\n    }\n\n    return executeAction(rpaAction)(task, params);\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success, TaskState } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\n\nimport { AxiosProxyParams, MockPublish, Toutiao } from \"../../types\";\nimport { extractImgTag, replaceImgSrc, TimeFormatter } from \"../../utils\";\nimport { Http } from \"../../utils/http\";\nimport { reportLogger } from \"../../utils/reportLogger\";\nimport { COVER_TYPE, getAddTypeValue, type PublishAction } from \"./index\";\n\nconst GenAB = require(\"../../utils/ttABEncrypt\") as (headers: string, data: string) => string;\n\ninterface CommonResponse<T = unknown> {\n    data: T;\n    proxyInfo?: Record<string, unknown>;\n    code: number;\n    message: string;\n}\n\nconst errnoMap: Record<number, string | string[]> = {\n    20004020: \"图片上传异常，请重新绑定账号后同步。\",\n    7115: \"正文图片和封面图片推荐jpg、png格式。\",\n    7112: \"文章内图片上传失败，请检查文章中的图片后重试。\",\n    100006: \"文章同步异常，请重新绑定账号后重试。\",\n    3101: [\n        \"今日头条号发布次数已达上限，请明天再试。\",\n        \"头条账号状态异常，需前往头条号完成实名认证。\",\n        \"头条账号状态异常，资料审核未通过，请前往头条号查看。\",\n    ],\n    2007: \"文章发布失败，声明原创要求正文字数不少于 300 字，请修改后重试。\",\n    2010: \"无头条广告权限,请修改后重试。\",\n    3103: \"今日头条号发布次数已达上限，请明天再试。\",\n    1053: \"正文图片和封面图片推荐jpg、png格式。\",\n    1050: \"图片上传失败,请重试上传。\",\n    2005: \"账号无【申明原创】权限，请关闭申明后重试。\",\n    100004: \"用户未登录或登陆已过期，请重新登陆后重试。\",\n    4029: \"标题长度应该在2-30字之间，请修改后重试。\",\n    3102: \"账号已被禁言无法发布文章，请先保存草稿！\",\n};\nconst generatorFormData = (data: Record<string, unknown>) => {\n    return Object.entries(data)\n        .map(([key, value]) => {\n            const encodedKey = encodeURIComponent(key);\n            const encodedValue = encodeURIComponent(String(value));\n            return `${encodedKey}=${encodedValue}`;\n        })\n        .join(\"&\");\n};\nconst get3101DetailError = (errorList: string[], message: string, saveType: string) => {\n    let error = \"\";\n    if (message?.includes(\"当日发文\")) {\n        error = errorList[0];\n    } else if (message?.includes(\"实名认证\")) {\n        error = errorList[1];\n    } else if (message?.includes(\"资料审核\")) {\n        error = errorList[2];\n    }\n    return error || (saveType === \"draft\" ? \"文章同步异常，请稍后重试。\" : \"文章发布异常，请稍后重试。\");\n};\n\nexport const mockAction: PublishAction = async (task, params) => {\n    const { toutiaoSingleCover, toutiaoMultCover, toutiaoCoverType, toutiaoOriginal, toutiaoExclusive, toutiaoClaim } =\n        params.settingInfo;\n    const tmpCachePath = task.getTmpPath();\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://mp.toutiao.com\",\n        referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n    };\n    const args: AxiosProxyParams = [\n        { headers },\n        task.logger,\n        params.proxyLoc,\n        params.accountId,\n        \"toutiao\", // 业务标识\n    ];\n    const http = new Http({ headers });\n    const proxyHttp = new Http(...args);\n\n    // 添加响应拦截器\n    proxyHttp.addResponseInterceptor<CommonResponse>((response) => {\n        // 检查响应中的 errno 字段\n        if (response && response.data?.code !== 0) {\n            let errmsg = \"\";\n\n            if (Array.isArray(errnoMap[response.data.code])) {\n                errmsg = get3101DetailError(\n                    errnoMap[response.data.code] as string[],\n                    response.data.message,\n                    params.saveType,\n                );\n            } else {\n                errmsg =\n                    (errnoMap[response.data.code] as string) ||\n                    response.config.defaultErrorMsg ||\n                    (params.saveType === \"draft\" ? \"文章同步异常，请稍后重试。\" : \"文章发布异常，请稍后重试。\");\n            }\n\n            return {\n                code: errnoMap[response.data.code] ? 414 : 500,\n                message: errmsg,\n                data: response.data,\n            };\n        }\n    });\n\n    // 0. 校验登录\n    await http.api({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/mp/agw/creator_center/user_info\",\n        defaultErrorMsg: `头条号登录状态失效，请重新绑定账号后${params.saveType === \"draft\" ? \"同步\" : \"发布\"}。`,\n    });\n\n    const uploadImages = async (images: string[]) => {\n        // 下载图片到本地\n        return await Promise.all(\n            images.map(async (url) => {\n                const fileName = getFilenameFromUrl(url);\n                const image = await downloadImage(url, path.join(tmpCachePath, fileName));\n                const formData = new FormData();\n                formData.append(\"image\", fs.createReadStream(image));\n\n                const response = await http.api<CommonResponse<Toutiao.ImageData>>({\n                    method: \"post\",\n                    url: \"https://mp.toutiao.com/spice/image?upload_source=20020002&aid=1231&device_platform=web\",\n                    data: formData,\n                    defaultErrorMsg:\n                        params.saveType === \"draft\"\n                            ? \"图片上传异常，请稍后重试同步。\"\n                            : \"图片上传异常，请稍后重试发布。\",\n                });\n\n                return response.data;\n            }),\n        );\n    };\n\n    // 1. 提取并上传正文中的图片\n    const originContentImages = extractImgTag(params.content);\n    const targetContentImages = await uploadImages(originContentImages);\n    // 2. 替换正文中的图片\n    const content = replaceImgSrc(params.content, (dom) => {\n        if (dom.attribs.src) {\n            const idx = originContentImages.indexOf(dom.attribs.src.replace(/&amp;/g, \"&\"));\n            dom.attribs.src = targetContentImages[idx].image_url;\n            dom.attribs.web_uri = targetContentImages[idx].image_uri;\n            dom.attribs.img_width = targetContentImages[idx].image_width.toString();\n            dom.attribs.image_height = targetContentImages[idx].image_height.toString();\n            dom.attribs.image_type = targetContentImages[idx].image_type.toString();\n            dom.attribs.mime_type = targetContentImages[idx].image_mime_type;\n        }\n        return dom;\n    });\n\n    // 3. 上传横版封面\n    const coverUrl =\n        toutiaoCoverType === \"single\" ? [toutiaoSingleCover] : toutiaoCoverType === \"multiple\" ? toutiaoMultCover : [];\n    const coverRes = await uploadImages(coverUrl);\n\n    // 4. 构造发布数据\n    // const isSingleTitle = params.settingInfo.toutiaoTitleType === \"single\";\n    const location = params.settingInfo.toutiaoLocation;\n    const topics = params.settingInfo.toutiaoTopic || [];\n\n    // const multiTitleData = params.settingInfo.subTitles.map((title) => ({\n    // \tid: \"0\",\n    // \tvisibility_level: 0,\n    // \tsource: \"author\",\n    // \told_source: \"author\",\n    // \ttext: title,\n    // \tversion: \"author\",\n    // \tai_title: \"\",\n    // }));\n\n    const topicContent = topics\n        .map(\n            (topic) =>\n                `<p><a class=\"tteditor-forum\" data-name=\"${topic.word}\" data-id=\"${topic.id}\" data-concern-id=\"${topic.id}\">#${topic.word}#</a ></p >`,\n        )\n        .join(\"\");\n\n    let sourceData: Record<string, unknown> = {\n        source_type: toutiaoClaim ? toutiaoClaim.type : 5, // 老用户默认为：个人观点，仅供参考\n    };\n    if (toutiaoClaim && toutiaoClaim.type === 1) {\n        if (!toutiaoClaim?.source_author_uid) return { code: 500, message: \"请填写作者ID\", data: \"\" };\n        sourceData = {\n            ...sourceData,\n            source_author_uid: toutiaoClaim.source_author_uid,\n            time_format: toutiaoClaim.time_format,\n            position: toutiaoClaim.position,\n        };\n    }\n    const extraData = {\n        content_word_cnt: params.settingInfo.cntWord,\n        // is_multi_title: isSingleTitle ? 0 : 1,\n        // sub_titles: isSingleTitle ? [] : multiTitleData,\n        gd_ext: {\n            entrance: \"\",\n            from_page: \"publisher_mp\",\n            enter_from: \"PC\",\n            device_platform: \"mp\",\n            is_message: 0,\n        },\n        tuwen_wtt_trans_flag: params.settingInfo?.toutiaoTransWtt ? \"2\" : \"0\",\n        info_source: sourceData,\n        ...(location\n            ? {\n                  manual_selected_city: JSON.stringify({\n                      city: location.label,\n                      city_code: location.value,\n                  }),\n              }\n            : null),\n        ...(params.settingInfo?.toutiaoCollectionId\n            ? { want_join_collection_id: params.settingInfo.toutiaoCollectionId }\n            : null),\n    };\n\n    const publishData = {\n        article_type: 0,\n        source: 0,\n        search_creation_info: '{\"searchTopOne\": 0, \"abstract\": \"\", \"clue_id\": \"\"}',\n        title_id: \"\",\n        educluecard: \"\",\n        origin_debut_check_pgc_normal: 1,\n        is_fans_article: 0,\n        govern_forward: 0,\n        praise: 0,\n        disable_praise: 0,\n        tree_plan_article: 0,\n        star_order_id: \"\",\n        star_order_name: \"\",\n        customer_nick_name: \"\",\n        activity_tag: 0,\n        trends_writing_tag: 0,\n        is_refute_rumor: 0,\n        save: params.saveType === \"publish\" ? 1 : 0,\n        timer_status: params.settingInfo.timer ? 1 : 0,\n        timer_time: params.settingInfo.timer ? TimeFormatter.format(params.settingInfo.timer) : \"\",\n        title: params.title,\n        content: content + topicContent,\n        extra: JSON.stringify(extraData),\n        mp_editor_stat: toutiaoCoverType === \"no\" ? \"{}\" : '{\"image\": %d}',\n        draft_form_data: JSON.stringify({\n            coverType: COVER_TYPE[toutiaoCoverType],\n        }),\n        pgc_feed_covers: JSON.stringify(\n            coverRes.map((item) => ({\n                id: \"\",\n                url: item.image_url,\n                uri: item.image_uri,\n                ic_uri: \"\",\n                thumb_widt: item.image_width,\n                thumb_heigh: item.image_height,\n                extra: {\n                    from_content_uri: \"\",\n                    from_content: \"0\",\n                },\n            })),\n        ),\n        article_ad_type: getAddTypeValue(params.settingInfo.toutiaoAd),\n        // claim_origin: toutiaoOriginal.includes(\"original\") ? 1 : 0,\n        claim_exclusive: toutiaoExclusive ? toutiaoExclusive : toutiaoOriginal?.includes(\"exclusive\") ? 1 : 0, // 首发声明兼容老用户字段\n    };\n\n    task._timerRecord.PrePublish = Date.now();\n\n    task.logger.info(`[toutiaoPublish] ${params.saveType === \"draft\" ? \"同步草稿\" : \"发布文章\"}参数`, {\n        saveType: params.saveType,\n        title: params.title,\n        extra: extraData,\n        publishData,\n    });\n\n    const msToken = params.cookies.find((it) => it.name === \"msToken\")?.value;\n    let publishOption = {};\n    if (!msToken) {\n        publishOption = {\n            method: \"post\",\n            url: \"https://mp.toutiao.com/mp/agw/article/publish?source=mp&type=article&aid=1\",\n            data: publishData,\n            headers: {\n                \"content-type\": \"application/x-www-form-urlencoded\",\n            },\n            defaultErrorMsg: params.saveType === \"draft\" ? \"文章同步异常，请稍后重试。\" : \"文章发布异常，请稍后重试。\",\n        };\n    } else {\n        const postHeaders = generatorFormData({\n            source: \"mp\",\n            type: \"article\",\n            aid: 1231,\n            mp_publish_ab_val: 0,\n            msToken: msToken,\n        });\n        const postData = generatorFormData(publishData);\n        const a_bogus = GenAB(postHeaders, postData);\n\n        publishOption = {\n            method: \"post\",\n            url: `https://mp.toutiao.com/mp/agw/article/publish?${postHeaders}&a_bogus=${a_bogus}`,\n            data: postData,\n            headers: {\n                \"content-type\": \"application/x-www-form-urlencoded\",\n                \"user-agent\":\n                    \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36\",\n            },\n            defaultErrorMsg: params.saveType === \"draft\" ? \"文章同步异常，请稍后重试。\" : \"文章发布异常，请稍后重试。\",\n        };\n    }\n\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n\n    if (MockPublish) {\n        const message = `文章模拟发布成功 ${http.proxyInfo}`;\n        const data = \"123456789\";\n\n        await updateTaskState?.({\n            state: TaskState.SUCCESS,\n            result: {\n                response: data,\n            },\n        });\n        return success(data, message);\n    }\n\n    const publishResult = await proxyHttp.api<CommonResponse<{ pgc_id: string }>>(publishOption, {\n        retries: 3,\n        retryDelay: 500,\n        timeout: 12 * 1000,\n    });\n\n    if (params.saveType !== \"draft\") {\n        reportLogger({\n            token: params.huiwenToken || \"\",\n            enverionment: task.enverionment || \"development\",\n            postId: params.articleId,\n            eip: proxyHttp.proxyInfo,\n            accountId: params.accountId,\n            uid: params.uid,\n            platform: \"toutiao\",\n            publishParams: publishOption,\n        });\n    }\n\n    const isSuccess = publishResult.code === 0;\n    const data = publishResult.data?.pgc_id;\n    const message = publishResult.message || (isSuccess ? \"文章发布成功！\" : \"文章发布失败，未知错误。\");\n\n    if (!isSuccess) {\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: message,\n        });\n        return { code: 414, data, message };\n    }\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: {\n            response: data,\n        },\n    });\n    // 临时返回结束\n    return success(publishResult.data.pgc_id, `文章发布成功！${task.debug ? ` ${http.proxyInfo}` : \"\"}`);\n};\n","import path from \"node:path\";\nimport type { Response } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\n\nimport { copyHtmlToClipboard, getRandomInRange, PopupListener, TimeFormatter } from \"../../utils\";\nimport { COVER_TYPE, getAddTypeValue, type PublishAction } from \"./index\";\n\nconst GenAB = require(\"../../utils/ttABEncrypt\") as (headers: string, data: string) => string;\n\nexport const rpaAction: PublishAction = async (task, params) => {\n    const tmpCachePath = task.getTmpPath();\n\n    const commonCookies = {\n        path: \"/\",\n        secure: true,\n        domain: \"toutiao.com\",\n        url: \"https://mp.toutiao.com\",\n        httpOnly: true,\n    };\n\n    const page = await task.createPage({\n        show: task.debug,\n        url: params.url || \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n        cookies: params.cookies?.map((it) => ({ ...it, ...commonCookies })) || [],\n    });\n\n    // 0. 校验登录\n    try {\n        await page.waitForSelector(\".publish-editor\", { state: \"visible\" });\n    } catch (_error) {\n        return {\n            code: 414,\n            message: `头条号登录状态失效，请重新绑定账号后${params.saveType === \"draft\" ? \"同步\" : \"发布\"}。`,\n            data: page.url(),\n        };\n    }\n\n    const interceptUrls = [\"/mp/agw/article/publish\"];\n\n    await page.route(\"**\", async (route, request) => {\n        const url = new URL(request.url());\n        if (interceptUrls.some((pattern) => url.pathname.includes(pattern))) {\n            const headers = {\n                ...request.headers(),\n                \"user-agent\":\n                    \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36\", //ua参数固定，不可修改\n            };\n\n            const generatorFormData = (data: Record<string, unknown>) => {\n                return Object.entries(data)\n                    .map(([key, value]) => {\n                        const encodedKey = encodeURIComponent(key);\n                        const encodedValue = encodeURIComponent(String(value));\n                        return `${encodedKey}=${encodedValue}`;\n                    })\n                    .join(\"&\");\n            };\n\n            const postHeaders = generatorFormData({\n                source: \"mp\",\n                type: \"article\",\n                aid: 1231,\n                mp_publish_ab_val: 0,\n                msToken: url.searchParams.get(\"msToken\"),\n            });\n            const postData = request.postData() || \"\";\n            const a_bogus = GenAB(postHeaders, postData);\n\n            url.searchParams.set(\"aid\", \"1231\");\n            url.searchParams.set(\"mp_publish_ab_val\", \"0\");\n            url.searchParams.set(\"a_bogus\", a_bogus);\n\n            await route.continue({ url: url.toString(), headers: headers });\n        } else {\n            await route.continue();\n        }\n    });\n\n    //弹窗监听检测\n    PopupListener(page, \".byte-modal.publish-exclusive-modal .title\", \"激励\", \".byte-modal-close-icon\", {\n        checkInterval: 1000,\n        stopAfterClick: false,\n    });\n\n    // 1. 填写标题\n    const titleInstance = page.locator(\".publish-editor-title-wrapper .publish-editor-title textarea\");\n    await titleInstance.click();\n    await titleInstance.fill(params.title);\n\n    // 2. 填写正文\n    await copyHtmlToClipboard(page, params.content);\n    // 定位目标元素并聚焦\n    await page.click(\".publish-editor .syl-editor-wrap .ProseMirror\");\n    // 模拟Ctrl+V粘贴\n    await page.keyboard.press(\"Control+V\");\n\n    // 3. 封面\n    const coverTypeValue = COVER_TYPE[params.settingInfo.toutiaoCoverType];\n    const coverContainer = page.locator(\".form-container .edit-cell\").filter({ hasText: \"展示封面\" });\n    // 滚动到可视区域\n    await coverContainer.evaluate((node) => node.scrollIntoView());\n    await coverContainer.locator(`.article-cover label.byte-radio:has(input[value=\"${coverTypeValue}\"])`).click();\n\n    let coverUrls: string[] = [];\n    if (params.settingInfo.toutiaoCoverType === \"single\") {\n        coverUrls = [params.settingInfo.toutiaoSingleCover];\n    } else if (params.settingInfo.toutiaoCoverType === \"multiple\") {\n        coverUrls = params.settingInfo.toutiaoMultCover;\n    }\n    // 获取待上传图片的本地路径\n    const images = await Promise.all(\n        coverUrls.map((url) => {\n            const fileName = getFilenameFromUrl(url);\n            return downloadImage(url, path.join(tmpCachePath, fileName));\n        }),\n    );\n\n    const coverUploadEle = coverContainer\n        .locator(\".article-cover .article-cover-images\")\n        .locator(\".article-cover-img-wrap, .article-cover-add\");\n    const coverUploadCount = await coverUploadEle.count();\n\n    for (let i = 0; i < coverUploadCount; i++) {\n        if (!images[i]) {\n            continue;\n        }\n\n        const ele = coverUploadEle.nth(i);\n        // 如果存在图片则替换\n        if ((await ele.locator(\"img\").count()) > 0) {\n            await ele.locator(\".article-cover-img-menu a\").filter({ hasText: \"替换\" }).click();\n        } else {\n            // 如果不存在图片则点击上传\n            await ele.click();\n        }\n\n        // 上传图片\n        const drawerContainer = page.locator(\".byte-drawer-wrapper:not(.byte-drawer-wrapper-hide)\");\n        await drawerContainer\n            .locator(\".byte-tabs-header .byte-tabs-header-title\")\n            .filter({ hasText: \"上传图片\" })\n            .click();\n        const fileChooserPromise = page.waitForEvent(\"filechooser\");\n        await page.waitForTimeout(200);\n        await drawerContainer.locator(\".upload-image-panel button.byte-btn\").filter({ hasText: \"本地上传\" }).click();\n        const fileChooser = await fileChooserPromise;\n        await fileChooser.setFiles([images[i]]);\n\n        // 等待上传完成（图片上传到服务端需要时间，disabled 状态解除后才可点击）\n        const confirmBtn = drawerContainer\n            .locator(\".footer .confirm-btns button:not(.byte-btn-disabled)\")\n            .filter({ hasText: \"确定\" });\n        await confirmBtn.waitFor({ state: \"visible\", timeout: 90000 });\n        await confirmBtn.click();\n\n        await page.waitForTimeout(getRandomInRange(500, 1000));\n    }\n\n    // 4. 添加位置\n    if (params.settingInfo.toutiaoLocation) {\n        const locationContainer = page.locator(\".form-container .edit-cell\").filter({ hasText: \"添加位置\" });\n        await locationContainer.locator(\".position-select\").click();\n        await locationContainer\n            .locator(\".position-select .byte-select-view-search input\")\n            .fill(params.settingInfo.toutiaoLocation.label);\n        const poperInstance = page.locator(\".byte-trigger .byte-select-popup .byte-select-option\");\n        await poperInstance.first().waitFor();\n        await poperInstance.first().click();\n    }\n\n    // 5. 投放广告\n    const adContainer = page\n        .locator(\".form-container .edit-cell .edit-label\")\n        .filter({ hasText: \"投放广告\" })\n        .locator(\"xpath=..\");\n\n    // 判断是否存在投放广告的选项\n    const isAdOptionVisible = await adContainer.isVisible();\n\n    if (isAdOptionVisible) {\n        const adRadio = adContainer.locator(\n            `label.byte-radio:has(input[value=\"${getAddTypeValue(params.settingInfo.toutiaoAd)}\"])`,\n        );\n        // 滚动到元素位置，避免被底部工具栏遮挡\n        await adRadio.scrollIntoViewIfNeeded();\n        await page.waitForTimeout(300);\n        // 使用 force 点击，避免被遮挡元素拦截\n        await adRadio.click({ force: true });\n    }\n\n    // 6. 声明首发\n    const exclusiveContainer = page\n        .locator(\".form-container .edit-cell .edit-label\")\n        .filter({ hasText: \"声明首发\" })\n        .locator(\"xpath=..\");\n    if (params.settingInfo.toutiaoOriginal?.includes(\"exclusive\") || params.settingInfo.toutiaoExclusive) {\n        exclusiveContainer.locator(\".exclusive .exclusive-checkbox-wraper .byte-checkbox\").check();\n    } else {\n        exclusiveContainer.locator(\".exclusive .exclusive-checkbox-wraper .byte-checkbox\").uncheck();\n    }\n\n    // 作品声明\n    const claim = params.settingInfo.toutiaoClaim ? params.settingInfo.toutiaoClaim.type : 5;\n    switch (claim) {\n        // case 1:\n        // \tawait page.locator(\".source-wrap .byte-checkbox\",{hasText: \"引用站内\"}).locator(\".byte-checkbox-mask\").check();\n        // \tif(!params.settingInfo.toutiaoClaim?.source_author_name) return{ code: 500, message: \"请填写作者账户名\", data: \"\" };\n        // \tawait page.locator(\".source-form-item\",{hasText: \"账号\"}).locator(\".byte-select-view-search input\").fill(params.settingInfo.toutiaoClaim.source_author_name)\n        // \tbreak;\n        case 3:\n            await page\n                .locator(\".source-wrap .byte-checkbox\", { hasText: \"引用AI\" })\n                .locator(\".byte-checkbox-mask\")\n                .check();\n\n            break;\n        case 4:\n            await page\n                .locator(\".source-wrap .byte-checkbox\", { hasText: \"取材网络\" })\n                .locator(\".byte-checkbox-mask\")\n                .check();\n\n            break;\n        case 5:\n            await page\n                .locator(\".source-wrap .byte-checkbox\", { hasText: \"个人观点，仅供参考\" })\n                .locator(\".byte-checkbox-mask\")\n                .check();\n\n            break;\n        case 6:\n            await page\n                .locator(\".source-wrap .byte-checkbox\", { hasText: \"虚构演绎，故事经历\" })\n                .locator(\".byte-checkbox-mask\")\n                .check();\n\n            break;\n        default:\n            await page\n                .locator(\".source-wrap .byte-checkbox\", { hasText: \"个人观点，仅供参考\" })\n                .locator(\".byte-checkbox-mask\")\n                .check();\n\n            break;\n    }\n\n    // 7. 保存草稿 / 发布\n    // biome-ignore-start lint/suspicious/noAsyncPromiseExecutor: 临时保留async\n    const articleId = await new Promise<string>(async (resolve) => {\n        const handleResponse = async (response: Response) => {\n            const url = response.url();\n            if (url.includes(\"/mp/agw/article/publish\")) {\n                const jsonResponse = await response.json();\n                page.off(\"response\", handleResponse);\n                resolve(jsonResponse.data.pgc_id);\n            }\n        };\n\n        page.on(\"response\", handleResponse);\n\n        if (params.settingInfo.timer && params.saveType === \"publish\") {\n            // 点击“定时发布”按钮\n            await page.locator(\".publish-footer button\").filter({ hasText: \"定时发布\" }).click();\n            await page.waitForSelector(\"button.publish-btn:not(.byte-btn-loading) >> nth=1\", { state: \"attached\" });\n\n            // 选择日期\n            await page.locator(\".byte-modal-content .day-select .byte-select-view-value\").click();\n            await page\n                .locator(\"li.byte-select-option\", {\n                    hasText: TimeFormatter.format(params.settingInfo.timer, \"MM月dd日\"),\n                })\n                .click();\n            await page.waitForTimeout(200);\n\n            // 选择小时\n            await page.locator(\".byte-modal-content .hour-select .byte-select-view-value\").click();\n            await page\n                .locator(\"li.byte-select-option\", { hasText: TimeFormatter.format(params.settingInfo.timer, \"h\") })\n                .click();\n            await page.waitForTimeout(200);\n\n            // 选择分钟\n            await page.locator(\".byte-modal-content .minute-select .byte-select-view-value\").click();\n            await page\n                .locator(\"li.byte-select-option\", { hasText: TimeFormatter.format(params.settingInfo.timer, \"m\") })\n                .click();\n            await page.waitForTimeout(200);\n\n            await page.locator(\".byte-modal-footer button\").filter({ hasText: \"预览并定时发布\" }).click();\n        } else {\n            await page.locator(\".publish-footer button\").filter({ hasText: \"预览并发布\" }).click();\n        }\n    });\n\n    if (params.settingInfo.toutiaoAd === \"no\") {\n        await page.waitForTimeout(200);\n        const confirmBtn = page.locator('div.byte-modal-footer button.byte-btn-primary:has-text(\"确定\")');\n        if (await confirmBtn.isVisible()) {\n            await confirmBtn.click();\n        }\n    }\n\n    task._timerRecord.PrePublish = Date.now();\n\n    if (params.saveType === \"publish\") {\n        await page\n            .locator(\".publish-footer button\")\n            .filter({ hasText: params.settingInfo.timer ? \"定时发布\" : \"确认发布\" })\n            .waitFor({ state: \"visible\", timeout: 90000 });\n        await page.waitForTimeout(200);\n        await page\n            .locator(\".publish-footer button\")\n            .filter({ hasText: params.settingInfo.timer ? \"定时发布\" : \"确认发布\" })\n            .click();\n    }\n\n    // 关闭页面\n    await page.close();\n\n    return success(articleId, params.saveType === \"publish\" ? \"发布成功\" : \"保存草稿成功\");\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\nimport { ActiomCommonParams, ActionCommonParamsSchema } from \"../../types\";\nimport { executeAction, formatSectionHtml } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\ntype CoverType = \"single\" | \"multiple\" | \"no\";\n\nimport { z } from \"zod\";\n\nexport const ToutiaoPublishParamsSchema = ActionCommonParamsSchema.extend({\n    saveType: z.union([z.literal(\"draft\"), z.literal(\"publish\")]), // 保存成草稿 / 发布\n    title: z.string(),\n    content: z.string(),\n    proxyLoc: z.string().optional(), // 代理位置\n    localIP: z.string().optional(), // 用户ip\n    huiwenToken: z.string().optional(), // 绘文token\n    settingInfo: z.object({\n        toutiaoCoverType: z.union([z.literal(\"single\"), z.literal(\"multiple\"), z.literal(\"no\")]),\n        toutiaoTitleType: z.union([z.literal(\"single\"), z.literal(\"multiple\")]), // 已关闭对应功能，保留参数，兼容老版本\n        toutiaoSingleCover: z.string(),\n        toutiaoMultCover: z.array(z.string()),\n        toutiaoAd: z.string(), // 广告配置 - 投放广告/不投放广告\n        toutiaoOriginal: z.string().optional(), // 原创声明-已修改为首发声明，兼容老用户\n        toutiaoExclusive: z.number().optional(), // 头条首发  0 - 声明非首发 1- 声明首发\n        toutiaoCollectionId: z.string().optional(), // 头条合集id\n        toutiaoTransWtt: z.boolean().optional(), // 是否同步微头条\n        toutiaoClaim: z\n            .object({\n                type: z.number(), // 作品声明\n                source_author_uid: z.string().optional(),\n                source_author_name: z.string().optional(),\n                time_format: z.string().optional(),\n                position: z\n                    .object({\n                        position: z.string(),\n                        city: z.string(),\n                        longitude: z.number(),\n                        latitude: z.number(),\n                        type_code: z.string(),\n                        poi_id: z.string(),\n                    })\n                    .optional(),\n            })\n            .optional(),\n        toutiaoLocation: z\n            .object({\n                label: z.string(),\n                value: z.string(),\n            })\n            .passthrough()\n            .optional(), // 位置\n        toutiaoTopic: z.array(z.object({ id: z.string(), word: z.string() })), // 话题\n        cntWord: z.number(),\n        subTitles: z.array(z.string()), // 多标题\n        timer: z.number().optional(),\n    }),\n});\n\nexport type ToutiaoPublishParams = z.infer<typeof ToutiaoPublishParamsSchema>;\n\nexport const COVER_TYPE: Record<CoverType, number> = {\n    no: 1,\n    single: 2,\n    multiple: 3,\n};\n\nexport const getAddTypeValue = (toutiaoAd: ToutiaoPublishParams[\"settingInfo\"][\"toutiaoAd\"]) =>\n    toutiaoAd === \"yes\" ? 3 : 2;\n\nexport type PublishAction = CommonAction<ToutiaoPublishParams, string>;\n\nexport const toutiaoPublish: PublishAction = async (task, params) => {\n    task.logger.info(`toutiaoPublish actionType: ${params.actionType}`);\n    // Format content HTML\n    params.content = formatSectionHtml(params.content);\n\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return mockAction(task, params);\n    }\n\n    return executeAction(mockAction, rpaAction)(task, params);\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\nimport type { Toutiao } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport type { PublishAction } from \".\";\n\nexport const mockAction: PublishAction = async (task, params) => {\n    const tmpCachePath = task.getTmpPath();\n\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            origin: \"https://mp.toutiao.com\",\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n        },\n    });\n\n    // 0. 校验登录\n    const userInfoRes = await http.api<{ code: number }>({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/mp/agw/creator_center/user_info\",\n    });\n\n    if (userInfoRes.code !== 0) {\n        return { code: 0, message: \"登录失效\", data: userInfoRes };\n    }\n\n    // 1. 上传图片\n    const imageList: string[] = [];\n    if (params.banners && params.banners.length > 0) {\n        const images = await Promise.all(\n            params.banners.map((url) => {\n                const fileName = getFilenameFromUrl(url);\n                return downloadImage(url, path.join(tmpCachePath, fileName));\n            }),\n        );\n\n        const res = await Promise.all(\n            images.map(async (it) => {\n                const formData = new FormData();\n                formData.append(\"image\", fs.createReadStream(it));\n\n                const response = await http.api<{ data: Toutiao.ImageData }>({\n                    method: \"post\",\n                    url: \"https://mp.toutiao.com/spice/image?upload_source=20020003&aid=1231&device_platform=web\",\n                    data: formData,\n                });\n\n                return response.data;\n            }),\n        );\n\n        imageList.push(...res.map((it) => it.image_uri));\n    }\n\n    // 2. 构造发布数据\n    const extra = {\n        add_music_to_article_flag: \"0\", // 开启配乐\n        claim_exclusive: \"0\", // 原创&首发声明\n        tuwen_wtt_trans_flag: \"0\",\n        info_source: JSON.stringify({\n            source_type: 5,\n            source_author_uid: \"\",\n            time_format: \"\",\n            position: {},\n        }),\n        ugc_position: JSON.stringify({\n            address: \"\",\n            position: \"合肥市\",\n            city: \"合肥市\",\n            longitude: 117.227289,\n            latitude: 31.82057,\n            poi_type_code: \"190104\",\n            poi_id: \"22535659123306003\",\n        }),\n    };\n\n    const syncData = {\n        content: params.content, // 正文,\n        image_list: imageList, // 图片列表\n        is_fans_article: 2,\n        pre_upload: 1,\n        welfare_card: \"\",\n        extra: JSON.stringify(extra),\n    };\n\n    // biome-ignore lint/suspicious/noExplicitAny: false positive\n    const res = await http.api<any>({\n        method: \"post\",\n        url: \"https://mp.toutiao.com/mp/agw/article/wtt\",\n        data: syncData,\n    });\n\n    return success(res.data);\n};\n","import path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\n\nimport type { PublishAction } from \"./index\";\n\nexport const rpaAction: PublishAction = async (task, params) => {\n    const commonCookies = {\n        path: \"/\",\n        secure: true,\n        domain: \"mp.toutiao.com\",\n        url: \"https://mp.toutiao.com\",\n        httpOnly: true,\n    };\n\n    const page = await task.createPage({\n        show: task.debug,\n        url: params.url || \"https://mp.toutiao.com/profile_v4/weitoutiao/publish\",\n        cookies: params.cookies?.map((it) => ({ ...it, ...commonCookies })) || [],\n    });\n\n    const tmpCachePath = task.getTmpPath();\n\n    // 0. 判断是否登录\n    try {\n        await page.waitForSelector(\".publish-box\");\n    } catch (error) {\n        return { code: 0, message: \"登录失效\", data: page.url() };\n    }\n\n    // 1. 添加正文\n    const descInstance = page.locator(\".syl-editor .ProseMirror\");\n    await descInstance.click();\n    await descInstance.fill(params.content);\n\n    // 2. 添加图片\n    if (params.banners && params.banners?.length > 0) {\n        const images = await Promise.all(\n            params.banners.map((url) => {\n                const fileName = getFilenameFromUrl(url);\n                return downloadImage(url, path.join(tmpCachePath, fileName));\n            }),\n        );\n\n        const fileChooserPromise = page.waitForEvent(\"filechooser\");\n        await page.locator(\".toolbar .syl-toolbar-tool.weitoutiao-image-plugin\").click();\n        await page.locator(\".byte-drawer.mp-ic-img-drawer button.byte-btn\").filter({ hasText: \"本地上传\" }).click();\n        const fileChooser = await fileChooserPromise;\n        await fileChooser.setFiles(images);\n\n        await page.locator(\".byte-drawer.mp-ic-img-drawer .footer button.byte-btn\").filter({ hasText: \"确定\" }).click();\n    }\n\n    // 滚动到底部\n    await page.mouse.wheel(0, 500); // 向下滚动 500 像素\n\n    // 3. 添加位置\n    if (params.address) {\n        const addressFormItem = page\n            .locator(\".img-form-wrap .form-item-wrap .form-item\")\n            .filter({ hasText: \"添加位置\" });\n        await addressFormItem.locator(\".byte-select\").click();\n        await addressFormItem.locator(\".byte-select-view-search input\").fill(params.address);\n        const poperInstance = page.locator(\".byte-trigger .byte-select-popup .byte-select-option\");\n        await poperInstance.first().waitFor();\n        await poperInstance.first().click();\n    }\n\n    // 4. 作品声明\n    if (params.declaration) {\n        const declarationFormItem = page\n            .locator(\".img-form-wrap .form-item-wrap .form-item\")\n            .filter({ hasText: \"作品声明\" })\n            .locator(\".source-info-wrap\");\n        await declarationFormItem.locator(`.byte-checkbox:has(input[value=\"${params.declaration}\"])`).click();\n    }\n\n    // 5. 发布\n    await page.locator(\".footer-wrap button.publish-content\").click();\n\n    return success(\"\");\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActiomCommonParams, ActionCommonParamsSchema } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\n/**\n * 作品声明\n * 1：引用站内\n * 3：引用AI\n * 4：取材网络\n * 5：个人观点，仅供参考\n * 6：虚构演绎，故事经历\n * 7：投资观点，仅供参考\n * 8：健康医疗分享，仅供参考\n */\ntype DeclarationType = 1 | 3 | 4 | 5 | 6 | 7 | 8;\n\nexport interface WeitoutiaoPublishParams extends ActiomCommonParams {\n    content: string;\n    banners?: string[];\n    address?: string;\n    declaration?: DeclarationType;\n}\n\nexport type PublishAction = CommonAction<WeitoutiaoPublishParams>;\n\nexport const weitoutiaoPublish: PublishAction = async (task, params) => {\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return mockAction(task, params);\n    }\n\n    return executeAction(mockAction, rpaAction)(task, params);\n};\n","import { type Page, type Response, success, type UserInfo } from \"@iflyrpa/share\";\nimport type { SteelAction } from \"./index\";\n\n/**\n * 微信公众号登录 RPA\n *\n * 流程：\n * 1. 打开微信公众号登录页\n * 2. 生成远程调试地址，等待用户扫码\n * 3. 监听 scanloginqrcode 接口判断扫码状态（0=未扫码, 4=已扫码未确认, 1=已确认）\n * 4. 扫码确认后监听页面跳转到 /wxamp/home，提取 token\n * 5. 从 __INITIAL_STATE__ 获取用户信息\n * 6. 收集 cookie 并返回结果\n */\nexport const rpaAction: SteelAction = async (task, _params) => {\n    const reporter = task.reportService?.reportLoginStatus ?? (() => Promise.resolve());\n    let page: Page;\n    let isSelfClosing = false;\n    let handleBrowserDisconnected: (() => void) | undefined;\n    const cleanup = async () => {\n        if (handleBrowserDisconnected) {\n            task._steelBrowser?.off(\"disconnected\", handleBrowserDisconnected);\n        }\n        if (page && !page.isClosed()) {\n            await page.close().catch(() => {});\n        }\n    };\n\n    // ========== 第一步：启动浏览器并打开登录页 ==========\n    try {\n        page = await task.createPage({\n            url: \"https://mp.weixin.qq.com/cgi-bin/loginpage\",\n        });\n        if (!task._session?.id) throw new Error(\"Session ID 不存在\");\n        handleBrowserDisconnected = () => {\n            if (task.debug && isSelfClosing) {\n                task.logger.info(\"执行结束，关闭浏览器！\");\n            } else {\n                task.logger.info(\"浏览器被手动释放或意外关闭！\");\n            }\n        };\n        task._steelBrowser?.on(\"disconnected\", handleBrowserDisconnected);\n    } catch (e) {\n        return { code: 414, message: `浏览器启动失败: ${e}`, data: {} };\n    }\n\n    // ========== 第二步：生成远程调试地址 ==========\n    const pageInfo = await task._client?.sessions.liveDetails(task._session.id);\n    const pageId = pageInfo?.pages?.[0]?.id ?? \"\";\n\n    const baseHost = task._session.websocketUrl?.replace(/^wss?:\\/\\//, \"\") ?? \"\";\n    const connectAddress = new URLSearchParams({ baseHost, pageId }).toString();\n    task.reportService?.settingSessionID?.(task._session?.id || \"\");\n\n    await reporter(0, \"浏览器启动成功，请使用微信扫码登录……\", {\n        stage: \"connectAddress\",\n        connectAddress,\n    });\n\n    // ========== 第三步：监听扫码状态与登录结果 ==========\n    let token: string | undefined;\n    let userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            /** 清理所有监听器，防止重复触发 */\n            const cleanup = (status?: unknown) => {\n                if (finished) return;\n                finished = true;\n                page.off(\"response\", handleAfterLogin);\n                page.off(\"response\", handleScanStatus);\n                if (status !== undefined) reject(status);\n            };\n\n            /**\n             * 登录确认后的处理：\n             * 监听页面跳转到 /wxamp/ || /cgi-bin/home，从 URL 提取 token，\n             * 从 __INITIAL_STATE__ 获取用户信息\n             */\n            const handleAfterLogin = async (resp: Response) => {\n                try {\n                    const url = resp.url();\n\n                    if (url.includes(\"/wxamp/\") || url.includes(\"/cgi-bin/home\")) {\n                        cleanup();\n                        // 从 URL 中提取 token 参数\n                        const tokenMatch = url.match(/token=(\\d+)/);\n                        if (tokenMatch) token = tokenMatch[1];\n\n                        if (url.includes(\"/cgi-bin/home\")) {\n                            // 公众号后台首页使用 wx.commonData\n                            try {\n                                await page.waitForFunction(() => !!(window as any).wx?.commonData, { timeout: 5000 });\n                                const commonData = await page.evaluate(() => (window as any).wx.commonData);\n                                userInfo = {\n                                    name: commonData?.data?.nick_name ?? \"\",\n                                    uniqueId: commonData?.data?.user_name ?? \"\",\n                                    avatar: commonData?.data?.head_img ?? \"\",\n                                };\n                            } catch (e) {\n                                task.logger.warn(\"无法获取 commonData 用户信息:\", {\n                                    error: e instanceof Error ? e.message : String(e),\n                                });\n                            }\n                        } else {\n                            // 小程序主页使用 __INITIAL_STATE__\n                            try {\n                                await page.waitForFunction(() => !!(window as any).__INITIAL_STATE__?.userInfo, {\n                                    timeout: 5000,\n                                });\n                                const initialState = await page.evaluate(() => (window as any).__INITIAL_STATE__);\n\n                                userInfo = {\n                                    name: initialState?.userInfo?.nickName ?? \"\",\n                                    uniqueId: initialState?.userInfo?.userName ?? \"\",\n                                    avatar: initialState?.userInfo?.iconUrl ?? \"\",\n                                };\n                            } catch (e) {\n                                task.logger.warn(\"无法获取用户信息:\", {\n                                    error: e instanceof Error ? e.message : String(e),\n                                });\n                            }\n                        }\n\n                        resolve();\n                    }\n                } catch (e) {\n                    cleanup(e);\n                }\n            };\n\n            /**\n             * 监听扫码状态接口 /cgi-bin/scanloginqrcode\n             *\n             * 状态码说明：\n             *   0 = 用户未扫码\n             *   4 = 用户已扫码未确认\n             *   1 = 用户已确认登录\n             */\n            const handleScanStatus = async (response: Response) => {\n                try {\n                    const url = response.url();\n                    if (\n                        !url.includes(\"/cgi-bin/scanloginqrcode?action=ask\") &&\n                        !url.includes(\"/cgi-bin/loginqrcode?action=ask\")\n                    )\n                        return;\n\n                    let json: Record<string, unknown>;\n                    try {\n                        const text = await response.text();\n                        if (!text) {\n                            task.logger.warn(\"扫码状态接口返回空响应\", { url });\n                            return;\n                        }\n                        json = JSON.parse(text);\n                    } catch (e) {\n                        task.logger.warn(\"扫码状态接口响应解析失败\", { url, error: e });\n                        return;\n                    }\n\n                    // 已确认登录，切换监听：从扫码状态 → 登录结果\n                    if (json.status === 1) {\n                        page.off(\"response\", handleScanStatus);\n                        page.on(\"response\", handleAfterLogin);\n                        await reporter(0, \"扫码成功!\", { stage: \"scanQrcode\", connectAddress });\n                    }\n                } catch (e) {\n                    cleanup(e);\n                }\n            };\n\n            // 提前注册监听，防止漏掉响应\n            page.on(\"response\", handleScanStatus);\n        });\n    } catch (e) {\n        // 扫码状态码 → 用户友好提示的映射\n        const errMap: Record<string, string> = {\n            \"0\": \"扫码超时，请重试！\",\n            \"4\": \"已扫码但未确认，请重试！\",\n        };\n        isSelfClosing = true;\n\n        const errorMessage =\n            typeof e === \"string\" && errMap[e] ? errMap[e] : e instanceof Error ? e.message : String(e);\n\n        await cleanup();\n        return { code: 500, message: errorMessage, data: { stage: \"scanQrcode\", connectAddress } };\n    }\n\n    // ========== 第四步：收集 cookie 并返回结果 ==========\n    const cookie = JSON.stringify(await task._steelBrowserContext?.cookies());\n    isSelfClosing = true;\n    await cleanup();\n\n    return success({ connectAddress, token, cookie, userInfo }, \"登录成功！\");\n};\n","import { TaskState, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response } from \"playwright-core\";\nimport { ExecutionState } from \"../../types\";\nimport { ProxyAgent } from \"../../utils/proxy\";\nimport type { SteelAction } from \"./index\";\n\nconst scanRetryMaxCount = 60; // 二维码扫描重试次数\nconst waitQrcodeResultMaxTime = scanRetryMaxCount * 2 * 1000; // 最长等待时间\n\nexport const rpaServer: SteelAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    let executionState: ExecutionState | undefined;\n\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n\n    const page = await task.createPage({\n        url: \"https://mp.weixin.qq.com/cgi-bin/loginpage\",\n        proxyUrl,\n        userAgent: params.userAgent,\n        ...(params.viewport ? { viewport: params.viewport } : {}),\n    });\n\n    task.steelBrowser?.on(\"disconnected\", async () => {\n        const browserContext = task.steelBrowserContext;\n        const browser = task.steelBrowser;\n        executionState = ExecutionState.BROWSER_CLOSED;\n        await page.close();\n\n        if (browserContext) {\n            await browserContext.close();\n        }\n        if (browser) {\n            await browser.close();\n        }\n    });\n\n    await updateTaskState?.({\n        state: TaskState.WAIT_SCAN,\n        connectAddress: await task.steelConnector?.getLive(task.sessionId || \"\"),\n        sessionId: task.sessionId,\n    });\n\n    let token: string | undefined;\n    let userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            const timer = setTimeout(async () => {\n                cleanup();\n                executionState = ExecutionState.TIMEOUT;\n                await updateTaskState?.({\n                    state: TaskState.TIMEOUT,\n                    error: \"等待扫码登录超时\",\n                });\n                resolve();\n            }, waitQrcodeResultMaxTime);\n\n            const cleanup = () => {\n                if (finished) return; // 防止多次调用\n                finished = true;\n                clearTimeout(timer);\n                page.off(\"response\", handleAfterLogin);\n                page.off(\"response\", handleScanStatus);\n                task.steelBrowser?.off(\"disconnected\", handleBrowserClosed);\n            };\n\n            const handleBrowserClosed = () => {\n                cleanup();\n                executionState = ExecutionState.BROWSER_CLOSED;\n                resolve();\n            };\n\n            const handleAfterLogin = async (resp: Response) => {\n                try {\n                    const url = resp.url();\n\n                    // 登录成功跳转到公众号主页\n                    if (url.includes(\"/wxamp/home\")) {\n                        cleanup();\n                        await updateTaskState?.({\n                            state: TaskState.CONFIRMED,\n                        });\n\n                        const tokenMatch = url.match(/token=(\\d+)/);\n                        if (tokenMatch) token = tokenMatch[1];\n\n                        try {\n                            await page.waitForFunction(() => !!(window as any).__INITIAL_STATE__?.userInfo, {\n                                timeout: 10000,\n                            });\n                            const initialState = await page.evaluate(() => (window as any).__INITIAL_STATE__);\n\n                            userInfo = {\n                                name: initialState?.userInfo?.nickName ?? \"\",\n                                uniqueId: initialState?.userInfo?.userName ?? \"\",\n                                avatar: initialState?.userInfo?.iconUrl ?? \"\",\n                            };\n                        } catch (e) {\n                            task.logger.warn(\"无法获取用户信息:\", { error: e });\n                        }\n\n                        executionState = ExecutionState.SUCCESS;\n                        resolve();\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 0=用户未扫码， 4=用户已扫码未确认， 1=用户已确认登录\n            const handleScanStatus = async (response: Response) => {\n                try {\n                    const url = response.url();\n                    if (!url.includes(\"/cgi-bin/scanloginqrcode?action=ask\")) return;\n\n                    let jsonResponse: Record<string, unknown>;\n                    try {\n                        const text = await response.text(); // 总是安全的\n                        if (!text) {\n                            task.logger.warn(\"Empty response body:\", { url });\n                            return;\n                        }\n\n                        jsonResponse = JSON.parse(text); // 手动解析\n                    } catch (e) {\n                        task.logger.warn(\"Failed to parse json:\", { url, error: e });\n                        return;\n                    }\n                    const status = jsonResponse.status;\n\n                    // 状态码说明：\n                    // 0=未扫码, 1=已确认登录, 4=已扫码未确认\n                    if (status === 1 || status === 4) {\n                        if (status === 4) {\n                            await updateTaskState?.({\n                                state: TaskState.SCANNED,\n                            });\n                        }\n\n                        page.off(\"response\", handleScanStatus);\n                        page.on(\"response\", handleAfterLogin);\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 在页面加载之前就注册监听，防止丢失请求\n            task.steelBrowser?.on(\"disconnected\", handleBrowserClosed);\n            page.on(\"response\", handleScanStatus);\n        });\n    } finally {\n        await page.close();\n    }\n\n    if (executionState === undefined) return { code: 500, message: \"未知错误\", data: {} };\n\n    switch (executionState) {\n        case ExecutionState.BROWSER_CLOSED: {\n            const msg = \"浏览器已关闭，任务中断!\";\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: \"浏览器已关闭\",\n            });\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.TIMEOUT: {\n            const msg = \"等待用户扫码登录超时!\";\n            await updateTaskState?.({\n                state: TaskState.TIMEOUT,\n                error: msg,\n            });\n            task.logger.info(msg);\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.SUCCESS:\n            await updateTaskState?.({\n                state: TaskState.SUCCESS,\n                result: {\n                    cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),\n                    token,\n                    userInfo: userInfo,\n                },\n            });\n            return {\n                code: 0,\n                message: \"成功\",\n                data: {\n                    cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),\n                    token,\n                    userInfo,\n                },\n            };\n        default:\n            // 处理 RUNNING 和其他可能的状态\n            return { code: 500, message: \"任务执行中断\", data: {} };\n    }\n};\n","import { CommonAction, success } from \"@iflyrpa/share\";\nimport { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaServer } from \"./rpa-server\";\n\nexport type WeixinLoginParams = ActiomCommonParams;\n\nexport type SteelAction = CommonAction<ActiomCommonParams, Record<string, unknown>>;\n\nexport const weixinLogin: SteelAction = async (task, params) => {\n    // params.actionType = \"rpa\";\n\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return success({}, \"暂不支持mockApi\");\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaServer(task, params);\n    }\n\n    return executeAction(rpaAction)(task, params);\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\nimport type { Weixin } from \"../../types\";\nimport type { AspectRatio } from \"../../utils\";\nimport { calculateCropCoordinates, getFileState } from \"../../utils\";\nimport { Http } from \"../../utils/http\";\nimport type { PublishAction, WeixinmpPublishParams } from \".\";\n\ntype ColorResponse = {\n    width: number;\n    height: number;\n    theme_color: { r: number; g: number; b: number };\n};\ntype ShareInamgeInfo = {\n    cdn_url: string;\n    disable_live: 0;\n    disable_theme: 1;\n    file_id: number;\n    width: number;\n    height: number;\n    theme_color: string;\n    url: string;\n};\n\nconst saveDraft = (http: Http, params: WeixinmpPublishParams, data: Record<string, unknown>) => {\n    const formData = new FormData();\n\n    for (const [key, value] of Object.entries(data)) {\n        formData.append(key, value);\n    }\n\n    return http.api({\n        method: \"post\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/operate_appmsg\",\n        params: {\n            token: params.token,\n            t: \"ajax-response\",\n            sub: \"update\",\n            type: 77,\n            lang: \"zh_CN\",\n        },\n        data: formData,\n    });\n};\n\nexport const mockAction: PublishAction = async (task, params) => {\n    const tmpCachePath = task.getTmpPath();\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            origin: \"https://mp.weixin.qq.com\",\n            referer: `https://mp.weixin.qq.com/cgi-bin/appmsg?token=${params.token}&lang=zh_CN`,\n        },\n    });\n\n    // 1. 上传图片\n    const shareImageInfos: ShareInamgeInfo[] = [];\n    const cropResult: Record<string, string> = {};\n\n    if (params.banners && params.banners.length > 0) {\n        // 下载图片到本地\n        const images = await Promise.all(\n            params.banners.map((url) => {\n                const fileName = getFilenameFromUrl(url);\n                return downloadImage(url, path.join(tmpCachePath, fileName));\n            }),\n        );\n\n        for (let index = 0; index < images.length; index++) {\n            const image = images[index];\n            const fileState = getFileState(image);\n\n            const formData = new FormData();\n            formData.append(\"id\", `WU_FILE_${index + 1}`);\n            formData.append(\"name\", fileState.name);\n            formData.append(\"type\", fileState.type);\n            formData.append(\"lastModifiedDate\", fileState.lastModifiedDate);\n            formData.append(\"size\", fileState.size);\n            formData.append(\"file\", fs.createReadStream(image));\n\n            const response = await http.api<{ cdn_url: string; content: string }>({\n                method: \"post\",\n                url: `https://mp.weixin.qq.com/cgi-bin/filetransfer?action=upload_material&f=json&writetype=doublewrite&token=${params.token}&lang=zh_CN`,\n                data: formData,\n            });\n\n            // 获取图片的主题色\n            const colorResponseData = await http.api<ColorResponse>({\n                method: \"get\",\n                url: \"https://mp.weixin.qq.com/cgi-bin/filepage\",\n                params: {\n                    action: \"getimgext\",\n                    fileid: response.content,\n                    token: params.token,\n                    lang: \"zh_CN\",\n                    f: \"json\",\n                    ajax: 1,\n                },\n            });\n\n            const themeColor = colorResponseData.theme_color;\n\n            shareImageInfos.push({\n                cdn_url: response.cdn_url,\n                disable_live: 0,\n                disable_theme: 1,\n                file_id: Number(response.content),\n                width: colorResponseData.width,\n                height: colorResponseData.height,\n                theme_color: `rgb(${themeColor.r},${themeColor.g},${themeColor.b})`,\n                url: response.cdn_url,\n            });\n\n            // 第一张图片还需要添加头图裁切\n            if (index === 0) {\n                const cropFormData = new FormData();\n                cropFormData.append(\"imgurl\", response.cdn_url);\n\n                // 需要裁切 16:9，3:4，1:1 三种尺寸的图片\n                const cropRatios: AspectRatio[] = [\n                    [16, 9],\n                    [1, 1],\n                    [3, 4],\n                ];\n                cropFormData.append(\"size_count\", cropRatios.length);\n                const cropCoordinates = cropRatios.map((r, idx) => {\n                    const cropCoordinate = calculateCropCoordinates(\n                        colorResponseData.width,\n                        colorResponseData.height,\n                        r,\n                    );\n                    cropFormData.append(`size${idx}_x1`, cropCoordinate.x1);\n                    cropFormData.append(`size${idx}_y1`, cropCoordinate.y1);\n                    cropFormData.append(`size${idx}_x2`, cropCoordinate.x2);\n                    cropFormData.append(`size${idx}_y2`, cropCoordinate.y2);\n\n                    return { ratio: `${r[0]}_${r[1]}`, ...cropCoordinate };\n                });\n\n                cropFormData.append(\"token\", params.token);\n                cropFormData.append(\"lang\", \"zh_CN\");\n                cropFormData.append(\"f\", \"json\");\n                cropFormData.append(\"ajax\", 1);\n\n                const cropResponse = await http.api<{ result: Weixin.WeiXinCropResult[] }>({\n                    method: \"post\",\n                    url: \"https://mp.weixin.qq.com/cgi-bin/cropimage?action=crop_multi\",\n                    data: cropFormData,\n                });\n\n                cropResult.cdn_url_back0 = response.cdn_url; // 原图\n                cropResult.cdn_url0 = cropResponse.result[0].cdnurl; // 16:9\n                cropResult.cdn_235_1_url0 = cropResponse.result[0].cdnurl; // 16:9\n                cropResult.cdn_16_9_url0 = cropResponse.result[0].cdnurl; // 16:9\n                cropResult.cdn_1_1_url0 = cropResponse.result[1].cdnurl; // 1:1\n                cropResult.cdn_3_4_url0 = cropResponse.result[2].cdnurl; // 3:4\n                cropResult.crop_list0 = JSON.stringify({\n                    crop_list: cropCoordinates.map((it, idx) => ({\n                        file_id: cropResponse.result[idx].file_id,\n                        ratio: it.ratio,\n                        x1: 0,\n                        x2: 0,\n                        y1: 0,\n                        y2: 0,\n                    })),\n                    crop_list_percent: cropCoordinates.map((it, idx) => ({\n                        ...it,\n                        file_id: cropResponse.result[idx].file_id,\n                    })),\n                });\n            }\n        }\n    }\n\n    // 保存\n    const res = await saveDraft(http, params, {\n        ...cropResult,\n        token: params.token,\n        lang: \"zh_CN\",\n        f: \"json\",\n        ajax: 1,\n        operate_from: \"Chrome\",\n        title0: params.title,\n        content0: params.content,\n        share_imageinfo0: JSON.stringify(shareImageInfos),\n    });\n\n    return success(res);\n};\n","import path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\n\nimport type { PublishAction, Source } from \"./index\";\n\nconst sourceText: Record<Source, string> = {\n    ai: \"内容由AI生成\",\n    official: \"素材来源官方媒体/网络新闻\",\n    fictional: \"内容剧情演绎，仅供娱乐\",\n    personal: \"个人观点，仅供参考\",\n};\n\nexport const rpaAction: PublishAction = async (task, params) => {\n    const commonCookies = {\n        path: \"/\",\n        secure: true,\n        domain: \"mp.weixin.qq.com\",\n        url: \"https://mp.weixin.qq.com\",\n        httpOnly: true,\n    };\n\n    const page = await task.createPage({\n        show: task.debug,\n        url:\n            params.url ||\n            `https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=77&createType=8&token=${params.token}&lang=zh_CN`,\n        cookies: params.cookies?.map((it) => ({ ...it, ...commonCookies })) || [],\n    });\n\n    const tmpCachePath = task.getTmpPath();\n\n    // 0. 判断是否登录\n    try {\n        await page.waitForSelector(\"#editor_pannel\");\n    } catch (_error) {\n        return { code: 500, message: \"登录失效\", data: page.url() };\n    }\n\n    const container = page.locator(\"#editor_pannel\");\n\n    // 1. 添加图片\n    if (params.banners && params.banners.length > 0) {\n        const images = await Promise.all(\n            params.banners.map((url) => {\n                const fileName = getFilenameFromUrl(url);\n                return downloadImage(url, path.join(tmpCachePath, fileName));\n            }),\n        );\n\n        // 选择文件\n        const fileChooserPromise = page.waitForEvent(\"filechooser\");\n        await container.locator(\".image-selector__add\").hover();\n        await container\n            .locator(\".image-selector__add .pop-opr__list .pop-opr__item\")\n            .filter({ hasText: \"本地上传\" })\n            .click();\n        const fileChooser = await fileChooserPromise;\n        await fileChooser.setFiles(images);\n    }\n\n    // 2. 标题\n    const titleInstance = page.locator(\"#js_title_main textarea#title\");\n    await titleInstance.click();\n    await titleInstance.fill(params.title);\n\n    // 3. 正文\n    const descInstance = page.locator(\"#guide_words_main .ProseMirror\");\n    await descInstance.click();\n    await descInstance.fill(params.content);\n\n    // 4. 来源\n    if (params.source) {\n        await container.locator(\"#js_claim_source_area .js_claim_source_desc\").click();\n        await page\n            .locator(\".popover_article_claim_source .frm_radio_item label\")\n            .filter({ hasText: sourceText[params.source] })\n            .click();\n    }\n\n    // 5. 等待所有图片上传完成\n    if (params.banners && params.banners.length > 0) {\n        await page.waitForSelector(\"#editor_pannel .image-selector .image-selector__preview\");\n    }\n\n    // 6. 保存\n    if (params.draft) {\n        await container.locator(\"#bottom_main #js_submit button\").click();\n    } else {\n        await container.locator(\"#bottom_main #js_send button\").click();\n    }\n\n    return success(\"\");\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\n\nimport type { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\nexport type Source = \"ai\" | \"official\" | \"fictional\" | \"personal\";\n\nexport interface WeixinmpPublishParams extends ActiomCommonParams {\n    token: string | number;\n    banners?: string[];\n    title: string; // 标题\n    content: string; // 正文\n    /**\n     * 内容由AI生成 - ai\n     * 素材来源官方媒体/网络新闻 - official\n     * 内容剧情演绎，仅供娱乐 - fictional\n     * 个人观点，仅供参考  - personal\n     */\n    source?: Source; // 来源\n    draft?: boolean; // 是否为草稿\n}\n\nexport type PublishAction = CommonAction<WeixinmpPublishParams>;\n\nexport const weixinmpPublish: PublishAction = async (task, params) => {\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return mockAction(task, params);\n    }\n\n    return executeAction(mockAction, rpaAction)(task, params);\n};\n","export const scanRetryMaxCount = 30;\n\nexport const QuotaType = {\n    Normal: \"kQuotaTypeMassSendNormal\",\n    ProductActivity: \"kQuotaTypeMassSendProductActivity\",\n};\n\nexport interface QuotaItem {\n    original_quota: number;\n    quota: number;\n    str_date: string;\n}\n\nexport interface QuotaDetail {\n    quota_item_list: QuotaItem[];\n    quota_type: string;\n}\n\n/**\n * 生成微信话题 HTML 代码\n * @param topics - 话题数组\n * @returns 生成的 HTML 字符串\n */\nexport function genTopicHTML(topics: string[]): string {\n    if (!topics || topics.length === 0) return \"\";\n    const rn = (): string => {\n        const O = Date.now().toString(36);\n        const B = Math.random().toString(36).substring(2, 8);\n        return `${O}-${B}`;\n    };\n    const aTags = topics\n        .map((topic) => {\n            return `<a class=\"wx_topic_link\" topic-id=\"${rn()}\" style=\"color: #576B95 !important;\" data-topic=\"1\">#${topic}</a>`;\n        })\n        .join(\"&nbsp;\");\n\n    return `<p style=\"line-height: 1.75;margin: 0px 0px 24px;padding: 0px;\" data-bothblock=\"0px\"><span leaf=\"\">${aTags}</span></p>`;\n}\n","import fs, { write } from \"node:fs\";\n// import https from \"node:https\";\nimport path from \"node:path\";\nimport {\n    downloadImage,\n    getFilenameFromUrl,\n    type ResponseData,\n    randomString,\n    sleep,\n    success,\n    TaskState,\n} from \"@iflyrpa/share\";\nimport type { AxiosResponse } from \"axios\";\nimport FormData from \"form-data\";\nimport type { AxiosProxyParams } from \"../../types\";\nimport { extractImgTag, getFileState, replaceImgSrc, stringifyError } from \"../../utils\";\nimport { Http } from \"../../utils/http\";\nimport { reportLogger } from \"../../utils/reportLogger\";\nimport type { PublishAction, WeixinPublishParams, WxInteraction, WxWhitelistUserInfo } from \"./index\";\nimport { genTopicHTML, type QuotaDetail, QuotaType, scanRetryMaxCount } from \"./utils\";\n\ntype CommonResponse<T = unknown> = T & {\n    base_resp?: { err_msg: string; ret: number };\n};\n\nconst GET_QRCODE_DEFAULT_ERROR = \"二维码获取异常，请稍后重试。\";\n\nconst errnoMap: Record<number | string, string> = {\n    200003: \"微信公众号号登录状态失效，请重新绑定账号后重试。\",\n    420001: \"封面图不支持GIF，请更换后重试。\",\n    200002: \"上传图片参数错误，请检查后重试。\",\n    200039: \"上传图片高度（像素）与宽度（像素）的乘积不能超过600万，请更换后重试。\",\n    153201: \"不支持发布审核中或转码中的视频\",\n    200007: \"登陆失败，请重新登陆账户后重试。\",\n    64703: \"摘要超出120字长度限制，请修改摘要后重试。\",\n    \"-4\": \"不支持发布审核中或转码中的视频\",\n    \"-2\": \"不支持发布审核中或转码中的视频\",\n    \"-1\": \"系统错误，请注意备份内容后重试\",\n    770001: \"不支持发布审核中或转码中的视频\",\n    200074: \"系统繁忙，请稍后重试！\",\n    64702: \"标题超出64字长度限制，请修改标题后重试。\",\n    64552: \"请检查阅读原文中的链接后重试。\",\n};\n\n// 不需要直接抛出的异常码，如 154019\nconst ignoreErrno = [\n    154019,\n    154011, // 原创校验中\n    154008, // 原创校验不通过\n    154009, // 原创校验通过\n];\n\n// 用户互动类型表（兼容传参文本与页面文本两种写法）\nconst userTypeMap: Record<string, 1 | 2 | 3> = {\n    所有用户: 1,\n    所有人: 1,\n    已关注的用户: 2,\n    已关注的人: 2,\n    已关注7天及以上的用户: 3,\n    已关注7天及以上的人: 3,\n};\n\nconst generatorFormData = (data: Record<string, unknown>) => {\n    const formData = new URLSearchParams();\n\n    for (const [key, value] of Object.entries(data)) {\n        formData.append(key, String(value));\n    }\n\n    return formData.toString();\n};\n\nexport const checkCopyrightStat = async <T>(http: Http, params: WeixinPublishParams, data: Record<string, unknown>) => {\n    let resData: T;\n\n    try {\n        resData = await http.api({\n            method: \"post\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n            params: {\n                action: \"get_appmsg_copyright_stat\",\n                token: params.token,\n                lang: \"zh_CN\",\n            },\n            data: generatorFormData(data),\n        });\n    } catch (error) {\n        resData = (error as ResponseData)?.data;\n    }\n\n    return resData;\n};\n\nexport const mockAction: PublishAction = async (task, params) => {\n    const fingerprint = \"4695500bc93ab4ce8fb2692da6564e04\";\n    const client_time_diff = Number(\"1743488763\") * 1 - Math.floor(new Date().getTime() / 1000);\n    const reporter = task.reportService?.repportTaskStatus ?? (() => Promise.resolve());\n\n    const tmpCachePath = task.getTmpPath();\n    const headers = {\n        \"User-Agent\":\n            \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0\",\n        Cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://mp.weixin.qq.com\",\n        referer: `https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit&action=edit&isNew=1&type=77&createType=0&token=${params.token}&lang=zh_CN&timestamp=${Date.now()}`,\n    };\n    const args: AxiosProxyParams = [\n        { headers },\n        task.logger,\n        params.proxyLoc,\n        params.accountId,\n        \"weixin\", // 业务标识\n    ];\n    const http = new Http({ headers });\n    const proxyHttp = new Http(...args);\n\n    // 添加响应拦截器\n    const baseRespFinder = (response: AxiosResponse<CommonResponse> | undefined) => {\n        const responseData = response?.data;\n        const msgType = params.saveType === \"draft\" ? \"同步\" : \"发布\";\n\n        // 检查响应中的 errno 字段\n        if (\n            response &&\n            responseData?.base_resp &&\n            responseData.base_resp.ret !== 0 &&\n            !ignoreErrno.includes(responseData.base_resp.ret)\n        ) {\n            const errmsg =\n                errnoMap[responseData.base_resp.ret] ||\n                response.config.defaultErrorMsg ||\n                responseData.base_resp.err_msg ||\n                `文章${msgType}异常，请稍后重试。`;\n\n            return {\n                code: errnoMap[responseData.base_resp.ret] ? 414 : 500,\n                message: errmsg,\n                data: responseData,\n            };\n        }\n    };\n    http.addResponseInterceptor<CommonResponse>(baseRespFinder);\n    proxyHttp.addResponseInterceptor<CommonResponse>(baseRespFinder);\n\n    // 0. 校验登录\n    await http.api({\n        method: \"get\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/appmsgpublish\",\n        params: {\n            fingerprint,\n            sub: \"list\",\n            begin: 0,\n            count: 10,\n            query: \"\",\n            type: 101_1_102_103,\n            show_type: \"\",\n            free_publish_type: 1_102_103,\n            sub_action: \"list_ex\",\n            search_card: 0,\n            token: params.token,\n            lang: \"zh_CN\",\n            f: \"json\",\n            ajax: 1,\n        },\n    });\n\n    // 1. 提取并上传正文中的图片\n    const uploadImages = async (images: string[]) => {\n        const cloudImages: Array<{ cdn_url: string; content: string }> = [];\n\n        // 下载图片到本地\n        const localImages = await Promise.all(\n            images.map((url) => {\n                let fileName = getFilenameFromUrl(url);\n                const ext = path.extname(fileName);\n                fileName = ext ? fileName : `${fileName}.png`;\n                return downloadImage(url, path.join(tmpCachePath, fileName));\n            }),\n        );\n\n        for (let index = 0; index < images.length; index++) {\n            const image = localImages[index];\n            const fileState = getFileState(image);\n\n            const formData = new FormData();\n            formData.append(\"id\", `WU_FILE_${index + 1}`);\n            formData.append(\"name\", fileState.name);\n            formData.append(\"type\", fileState.type);\n            formData.append(\"lastModifiedDate\", fileState.lastModifiedDate);\n            formData.append(\"size\", fileState.size);\n            formData.append(\"file\", fs.createReadStream(image));\n\n            const response = await http.api<(typeof cloudImages)[0]>(\n                {\n                    method: \"post\",\n                    url: `https://mp.weixin.qq.com/cgi-bin/filetransfer?action=upload_material&f=json&writetype=doublewrite&token=${params.token}&lang=zh_CN`,\n                    data: formData,\n                    defaultErrorMsg: \"图片上传异常，请稍后重试发布。\",\n                },\n                { retries: 3, retryDelay: 20, timeout: 2 * 60 * 1000 },\n            ); // 增加到2分钟，适应大图片上传\n\n            cloudImages.push(response);\n        }\n\n        return cloudImages;\n    };\n\n    const originContentImages = extractImgTag(params.content);\n    const targetContentImages = await uploadImages(originContentImages);\n    // 2. 替换正文中的图片\n    const content = replaceImgSrc(\n        params.settingInfo.wxTopic && params.settingInfo.wxTopic.length > 0\n            ? params.content + genTopicHTML(params.settingInfo.wxTopic)\n            : params.content,\n        (dom) => {\n            if (dom.attribs.src) {\n                const idx = originContentImages.findIndex((it) => it === dom.attribs.src.replace(/&amp;/g, \"&\"));\n                dom.attribs.src = targetContentImages[idx].cdn_url;\n                dom.attribs.class = \"rich_pass wxw-img js_insertlocalimg\";\n                dom.attribs.style = \"\";\n            }\n            return dom;\n        },\n    );\n\n    // 3. 上传封面图片\n    const coverRes = await uploadImages(params.settingInfo.wxCover ? [params.settingInfo.wxCover] : []);\n\n    // 4. 原创声明白名单有效性判断与生成转载白名单\n    let oriWhitelist = null;\n\n    if (params.settingInfo?.wxCopyright && params.settingInfo?.wxWhitelist) {\n        const _oriWhitelist = params.settingInfo.wxWhitelist;\n\n        if (_oriWhitelist && _oriWhitelist.length > 0) {\n            const white_list = [];\n\n            const white_list_user = {\n                nickname: \"\",\n                title: \"可修改文章\",\n                openid: \"\",\n                wx_name: \"\",\n                username: \"\",\n                avatar: \"\",\n                can_modify: \"1\",\n                can_hide_source: \"0\",\n                can_reward: \"0\",\n            };\n\n            for (const _user of _oriWhitelist) {\n                const userInfo_res = await http.api<{ search_list: WxWhitelistUserInfo[] }>({\n                    method: \"post\",\n                    url: \"https://mp.weixin.qq.com/cgi-bin/appmsgcopyright?action=searchacct\",\n                    params: {\n                        action: \"searchacct\",\n                    },\n                    data: generatorFormData({\n                        lang: \"zh_CN\",\n                        f: \"json\",\n                        ajax: 1,\n                        token: params.token,\n                        random: Math.random().toString(),\n                        username: _user,\n                    }),\n                    defaultErrorMsg: \"搜索用户信息失败\",\n                });\n\n                if (userInfo_res.search_list.length > 0) {\n                    const userInfo_resJson = userInfo_res.search_list[0];\n                    white_list_user.nickname = userInfo_resJson.nickname;\n                    white_list_user.openid = userInfo_resJson.openid;\n                    white_list_user.avatar = userInfo_resJson.pic_url;\n                    white_list_user.username = userInfo_resJson.username;\n                    white_list_user.wx_name = userInfo_resJson.wx_name;\n                    white_list.push({ ...white_list_user });\n                } else {\n                    return { code: 414, message: `白名单用户：${_user} 未搜索到，请确定输入是否正确！`, data: \"\" };\n                }\n            }\n            oriWhitelist = white_list.length > 0 ? JSON.stringify({ white_list: white_list }) : \"\";\n        }\n    }\n\n    // 5. 赞赏设置\n    let writerid = null;\n    let reply_id = null;\n    if (params.settingInfo.wxCopyright && params.settingInfo.wxRewardTarget) {\n        async function getWriterList() {\n            const res = await http.api({\n                method: \"get\",\n                url: \"https://mp.weixin.qq.com/acct/writermgr\",\n                params: {\n                    action: \"get_writer_list\",\n                    fingerprint,\n                    token: params.token,\n                    lang: \"zh_CN\",\n                    f: \"json\",\n                    ajax: 1,\n                },\n            });\n\n            return res.pageinfo.writerlist || [];\n        }\n\n        async function getRewardText(): Promise<{ text: string; reply_id: string }[]> {\n            const res = await http.api({\n                method: \"get\",\n                url: \"https://mp.weixin.qq.com/merchant/reward\",\n                params: {\n                    action: \"getautoreply\",\n                    fingerprint,\n                    token: params.token,\n                    lang: \"zh_CN\",\n                    f: \"json\",\n                    ajax: 1,\n                },\n            });\n\n            return res.reply_infos;\n        }\n\n        //遍历绑定信息\n        for (const _type in params.settingInfo.wxRewardTarget) {\n            if (_type === \"author\") {\n                if ((await getWriterList()).length === 0) {\n                    // 获取二维码等待用户绑定\n                    const rewardbind = await http.api({\n                        method: \"get\",\n                        url: \"https://mp.weixin.qq.com/acct/writermgr\",\n                        params: {\n                            action: \"get_rewardbind_qrcode\",\n                            random: Math.random().toString(),\n                            fingerprint,\n                            token: params.token,\n                            lang: \"zh_CN\",\n                            f: \"json\",\n                            ajax: 1,\n                        },\n                        defaultErrorMsg: GET_QRCODE_DEFAULT_ERROR,\n                    });\n\n                    const rewardBuffer = Buffer.from(rewardbind.qrcode_base64, \"base64\");\n                    const rewardFilePath = path.join(tmpCachePath, \"weixin_reward.jpg\");\n                    fs.writeFileSync(rewardFilePath, new Uint8Array(rewardBuffer));\n\n                    params.safeQrcodeCallback?.(rewardFilePath);\n\n                    const task_id = rewardbind.task_id;\n\n                    let code = null;\n\n                    for (let i = 0; i < scanRetryMaxCount; i++) {\n                        await sleep(2000);\n\n                        const checkScanResult = await http.api<{ qrcode_status: number }>({\n                            method: \"get\",\n                            url: \"https://mp.weixin.qq.com/acct/writermgr\",\n                            params: {\n                                action: \"query_rewardbind_qrcode_status\",\n                                task_id: task_id,\n                                fingerprint,\n                                lang: \"zh_CN\",\n                                f: \"json\",\n                                ajax: 1,\n                                token: params.token,\n                                timespam: Date.now(),\n                            },\n                        });\n\n                        code = checkScanResult.qrcode_status;\n\n                        if (code === 2 && (await getWriterList()).length > 0) {\n                            break;\n                        }\n\n                        if (i === scanRetryMaxCount - 1) {\n                            return { code: 414, message: \"二维码已过期，请重试绑定。\", data: \"\" };\n                        }\n                    }\n                }\n\n                // 判断为赞赏作者\n                const _writer = await getWriterList();\n                for (const _writer_item of _writer) {\n                    if (_writer_item.nickname === params.settingInfo.wxRewardTarget[_type]) {\n                        writerid = _writer_item.writerid;\n                    }\n                }\n                if (!writerid) {\n                    // 没找到作者id\n                    return { code: 414, message: \"未匹配到赞赏绑定用户，请确认用户名与绑定是否正常！\", data: \"\" };\n                }\n\n                if (params.settingInfo?.wxRewardText) {\n                    // 判断文案是否已添加\n                    const rewardList = await getRewardText();\n\n                    const matchdID =\n                        rewardList.find((reward) => reward.text === params.settingInfo.wxRewardText)?.reply_id ?? null;\n\n                    if (rewardList.length === 0 || !matchdID) {\n                        await http.api({\n                            method: \"post\",\n                            url: \"https://mp.weixin.qq.com/merchant/reward\",\n                            params: {\n                                action: \"addautoreply\",\n                            },\n                            data: generatorFormData({\n                                type: 1,\n                                fingerprint,\n                                token: params.token,\n                                lang: \"zh_CN\",\n                                f: \"json\",\n                                ajax: 1,\n                                text: params.settingInfo.wxRewardText,\n                            }),\n                        });\n                    } else {\n                        reply_id = matchdID;\n                    }\n\n                    if (!matchdID) {\n                        for (const _reply_item of await getRewardText()) {\n                            reply_id = (await getRewardText()).find(\n                                (reward) => reward.text === params.settingInfo.wxRewardText,\n                            )?.reply_id;\n                        }\n                        if (!reply_id) {\n                            return { code: 414, message: \"赞赏文案添加失败，请重新检查\", data: \"\" };\n                        }\n                    }\n                }\n            } else if (_type === \"project\") {\n                // 判断为公益捐赠\n            }\n        }\n    }\n    // 留言设置\n    const wxInteractionInfo = (() => {\n        const _wxInteraction = {\n            need_open_comment0: 0,\n            only_fans_can_comment0: 0,\n            only_fans_days_can_comment0: 0,\n            reply_flag0: 2,\n            auto_elect_comment0: 0,\n            auto_elect_reply0: 1,\n            open_fansmsg0: 0,\n        };\n\n        const type = params?.settingInfo?.wxInteraction?.Type ?? \"\";\n        if (type === \"public\") {\n            const _opt = params?.settingInfo?.wxInteraction?.Option;\n            if (!_opt || !_opt.Comment || !_opt.reply || _opt.elect_comment == null || _opt.elect_reply == null)\n                return null;\n\n            const commentType = userTypeMap[_opt.Comment];\n            const replyType = userTypeMap[_opt.reply] + 1;\n\n            // 设置评论权限\n            _wxInteraction.need_open_comment0 = 1;\n            switch (commentType) {\n                case 1:\n                    _wxInteraction.only_fans_can_comment0 = 0;\n                    _wxInteraction.only_fans_days_can_comment0 = 0;\n                    break;\n                case 2:\n                    _wxInteraction.only_fans_can_comment0 = 1;\n                    _wxInteraction.only_fans_days_can_comment0 = 0;\n                    break;\n                case 3:\n                    _wxInteraction.only_fans_can_comment0 = 0;\n                    _wxInteraction.only_fans_days_can_comment0 = 1;\n                    break;\n            }\n\n            // 设置回复权限等级\n            _wxInteraction.reply_flag0 = replyType;\n\n            // 精选功能\n            _wxInteraction.auto_elect_comment0 = _opt.elect_comment ? userTypeMap[_opt.Comment] : 0;\n            _wxInteraction.auto_elect_reply0 = _opt.elect_reply ? userTypeMap[_opt.reply] : 1;\n\n            return _wxInteraction;\n        }\n\n        if (type === \"private\") {\n            _wxInteraction.open_fansmsg0 = 1;\n            return _wxInteraction;\n        }\n\n        // 其他未启用评论功能的情形\n        return _wxInteraction;\n    })();\n\n    if (!wxInteractionInfo) return { code: 414, message: \"互动参数设置错误，请检查参数设置！\", data: \"\" };\n\n    // 4. 保存为草稿\n    const draftData = {\n        lang: \"zh_CN\",\n        f: \"json\",\n        ajax: 1,\n        count: 1,\n        operate_from: \"Chrome\",\n        isnew: 0,\n        articlenum: 1,\n        pre_timesend_set: 0,\n        is_finder_video0: 0,\n        finder_draft_id0: 0,\n        applyori0: 0,\n        can_reward0: writerid ? 1 : 0,\n        pay_gifts_count0: 0,\n        is_video_recommend0: -1,\n        writerid0: writerid ? writerid : 0,\n        auto_gen_digest0: 0,\n        last_choose_cover_from0: 0,\n        need_open_comment0: wxInteractionInfo.need_open_comment0,\n        only_fans_can_comment0: wxInteractionInfo.only_fans_can_comment0,\n        only_fans_days_can_comment0: wxInteractionInfo.only_fans_days_can_comment0,\n        reply_flag0: wxInteractionInfo.reply_flag0,\n        auto_elect_comment0: wxInteractionInfo.auto_elect_comment0,\n        auto_elect_reply0: wxInteractionInfo.auto_elect_reply0,\n        reward_reply_id0: params.settingInfo?.wxRewardText ? (reply_id ? reply_id : 0) : 0,\n        not_pay_can_comment0: 0,\n        data_seq: 0,\n        msg_index_id0: \"\",\n\n        token: params.token,\n        AppMsgId: params.appMsgId || \"\",\n        title0: params.title,\n        author0: params?.settingInfo?.wxAuthor || \"\",\n        digest0: params?.settingInfo?.wxAbstract || \"\",\n        content0: content || \"\",\n        sourceurl0: params?.settingInfo?.wxOriginalText || \"\",\n        cdn_url0: coverRes[0]?.cdn_url || \"\",\n        copyright_type0: params?.settingInfo?.wxCopyright ? 1 : 0,\n        allow_reprint0: params?.settingInfo?.wxCopyright ? 0 : \"\",\n        allow_reprint_modify0: params?.settingInfo?.wxCopyright ? 0 : \"\",\n        ori_white_list0: params?.settingInfo?.wxCopyright ? oriWhitelist : \"\",\n        open_fansmsg0: wxInteractionInfo.open_fansmsg0,\n        allow_fast_reprint0: params?.settingInfo?.wxQuickReprint ? 1 : 0,\n        disable_recommend0: params?.settingInfo?.wxNotAllowRecommend ? 1 : 0,\n        claim_source_type0: params?.settingInfo?.wxCreationSource?.[0] || \"\",\n        appmsg_album_info0: JSON.stringify({\n            appmsg_album_infos: params.settingInfo?.wxCollectionInfo ? [params.settingInfo.wxCollectionInfo] : [],\n        }),\n\n        masssend_check: 1,\n        is_masssend: 1,\n    };\n\n    task._timerRecord.PrePublish = Date.now();\n\n    const { appMsgId } = await http.api<{ appMsgId: string }>(\n        {\n            method: \"post\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/operate_appmsg\",\n            params: {\n                token: params.token,\n                t: \"ajax-response\",\n                sub: \"create\",\n                type: 77,\n                lang: \"zh_CN\",\n            },\n            data: generatorFormData(draftData),\n            defaultErrorMsg: \"创建草稿失败，请稍后重试发布。\",\n        },\n        { timeout: 60 * 1000 },\n    );\n\n    // 如果只需要保存为草稿，直接返回 appMsgId\n    if (params.saveType === \"draft\") {\n        return { code: 0, data: appMsgId, message: \"微信公众号保存草稿成功。\" };\n    }\n\n    let checkTimes = 0;\n    let copyrightStatRes: { base_resp: { ret: number }; list?: string } = { base_resp: { ret: -1 }, list: \"\" };\n    do {\n        checkTimes++;\n        const copyrightStat = http.api<{ base_resp: { ret: number }; list?: string }>({\n            method: \"post\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n            params: {\n                action: \"get_appmsg_copyright_stat\",\n                token: params.token,\n                lang: \"zh_CN\",\n            },\n            data: generatorFormData({\n                token: params.token,\n                lang: \"zh_CN\",\n                f: \"json\",\n                ajax: 1,\n                fingerprint,\n                random: Math.random().toString(),\n                first_check: checkTimes === 1 ? 1 : 0,\n                type: 10,\n                appMsgId,\n            }),\n        });\n\n        copyrightStatRes = await copyrightStat;\n        if (copyrightStatRes.base_resp.ret === 154008 && copyrightStatRes?.list)\n            return {\n                code: 414,\n                message: \"文章内容未通过原创校验，请修改后重试！\",\n                data: JSON.parse(copyrightStatRes.list).list,\n            };\n    } while (copyrightStatRes.base_resp.ret === 154011 && checkTimes < 10);\n\n    const masssendpage = () => {\n        return http.api<CommonResponse<{ operation_seq: string; quota_detail_list: QuotaDetail[] }>>({\n            method: \"get\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/masssendpage\",\n            params: {\n                token: params.token,\n                lang: \"zh_CN\",\n                f: \"json\",\n                ajax: 1,\n                preview_appmsgid: appMsgId,\n                fingerprint,\n                random: Math.random().toString(),\n            },\n            defaultErrorMsg: \"创建草稿失败，请稍后重试发布。\",\n        });\n    };\n\n    // 4. 预览\n    let massSendRes = await masssendpage();\n    // 判断是否需要同意群发声明\n    if (massSendRes.base_resp?.ret === 154019) {\n        await http.api({\n            method: \"post\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/setprotocolsign\",\n            params: {\n                cgi: \"setprotocolsign\",\n                lang: \"zh_CN\",\n                token: params.token,\n            },\n            data: generatorFormData({\n                token: params.token,\n                lang: \"zh_CN\",\n                f: \"json\",\n                ajax: 1,\n                fingerprint,\n                random: Math.random().toString(),\n                issigned: 1,\n            }),\n        });\n        massSendRes = await masssendpage();\n    }\n\n    // 判断是否还有群发次数\n    const { operation_seq, quota_detail_list = [] } = massSendRes;\n\n    // 群发时需要判断是否还有群发次数\n    if (params.masssend) {\n        const quotaDetail = quota_detail_list.find((it) => it.quota_type === QuotaType.Normal);\n        if (!quotaDetail?.quota_item_list[0]?.quota) {\n            return { code: 414, message: \"今日群发次数用尽，请明天再试。\", data: \"\" };\n        }\n    }\n\n    // 非群发时会多一个接口\n    if (!params.masssend) {\n        await http.api({\n            method: \"post\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n            params: {\n                t: \"ajax-response\",\n                for_check: 1,\n                is_release_publish_page: 1,\n                token: params.token,\n                lang: \"zh_CN\",\n            },\n            data: generatorFormData({\n                appmsgid: appMsgId,\n                fingerprint,\n                token: params.token,\n                lang: \"zh_CN\",\n                f: \"json\",\n                ajax: 1,\n            }),\n        });\n    }\n\n    // check\n    await http.api({\n        method: \"post\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/masssend?action=check_same_material\",\n        data: generatorFormData({\n            msgid: appMsgId,\n            fingerprint,\n            token: params.token,\n            lang: \"zh_CN\",\n            f: \"json\",\n            ajax: 1,\n            random: Math.random().toString(),\n        }),\n    });\n\n    const copyrightStatData = {\n        token: params.token,\n        lang: \"zh_CN\",\n        f: \"json\",\n        ajax: 1,\n        random: Math.random().toString(),\n        fingerprint,\n        first_check: 1,\n        type: 10,\n        appmsgid: appMsgId,\n    };\n    for (let i = 0; i < 10; i++) {\n        await sleep(1000);\n        const lastData = { ...copyrightStatData, first_check: i === 0 ? 1 : 0 };\n        const checkCopyrightStatRes = await checkCopyrightStat<{ open_ad_reprint_status?: string }>(\n            http,\n            params,\n            lastData,\n        );\n        if (checkCopyrightStatRes.open_ad_reprint_status) {\n            break;\n        }\n    }\n\n    await sleep(300);\n\n    await http.api({\n        method: \"post\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n        params: {\n            action: \"check_ad\",\n            token: params.token,\n            lang: \"zh_CN\",\n        },\n        data: generatorFormData({\n            appmsg_id: appMsgId,\n            fingerprint,\n            token: params.token,\n            lang: \"zh_CN\",\n            f: \"json\",\n            ajax: 1,\n            is_release_publish_page: params.masssend ? 0 : 1, // 群发时为 0，否则为 1\n            send_time: params.settingInfo.timer ? params.settingInfo.timer : 0,\n            random: Math.random().toString(),\n        }),\n    });\n\n    await sleep(300);\n\n    await http.api({\n        method: \"post\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n        params: {\n            action: \"check_music\",\n        },\n        data: generatorFormData({\n            appmsgid: appMsgId,\n            masssend_check: 1,\n            fingerprint,\n            token: params.token,\n            lang: \"zh_CN\",\n            f: \"json\",\n            ajax: 1,\n            random: Math.random().toString(),\n        }),\n    });\n\n    await sleep(300);\n\n    // 5. 获取群发文章ticket接口\n    const getTicketResult = await http.api<{ ticket: string; operation_seq: string }>({\n        method: \"post\",\n        url: \"https://mp.weixin.qq.com/misc/safeassistant\",\n        params: {\n            token: params.token,\n            lang: \"zh_CN\",\n            1: 1,\n        },\n        data: generatorFormData({\n            token: params.token,\n            lang: \"zh_CN\",\n            f: \"json\",\n            ajax: 1,\n            action: \"get_ticket\",\n            fingerprint,\n            random: Math.random().toString(),\n        }),\n        defaultErrorMsg: GET_QRCODE_DEFAULT_ERROR,\n    });\n\n    await sleep(300);\n\n    // 6. 获取群发文章 uuid\n    const getUuidResult = await http.api<{ uuid: string; genuuid_res: number }>({\n        method: \"post\",\n        url: \"https://mp.weixin.qq.com/safe/safeqrconnect\",\n        params: {\n            token: params.token,\n            lang: \"zh_CN\",\n            1: 1,\n        },\n        data: generatorFormData({\n            token: params.token,\n            lang: \"zh_CN\",\n            f: \"json\",\n            ajax: 1,\n            state: 0,\n            login_type: \"safe_center\",\n            type: \"json\",\n            ticket: getTicketResult.ticket,\n            fingerprint,\n            random: Math.random().toString(),\n        }),\n        defaultErrorMsg: GET_QRCODE_DEFAULT_ERROR,\n    });\n    await sleep(1000);\n\n    if (getUuidResult.genuuid_res !== 0) {\n        return { code: 414, message: GET_QRCODE_DEFAULT_ERROR, data: \"\" };\n    }\n    const uuid = getUuidResult.uuid;\n    await sleep(1000);\n\n    // 7. 获取验证二维码\n    const qrcodeResult = await http.api({\n        method: \"get\",\n        url: \"https://mp.weixin.qq.com/safe/safeqrcode\",\n        params: {\n            action: \"check\",\n            type: \"msgs\",\n            service_type: 1,\n            ticket: getTicketResult.ticket,\n            uuid,\n            msgid: operation_seq,\n            open_email: !!params.settingInfo.timer,\n            ...(params.masssend ? {} : { publish_type: 1 }),\n        },\n        defaultErrorMsg: GET_QRCODE_DEFAULT_ERROR,\n        responseType: \"arraybuffer\",\n    });\n\n    const qrcodeBuffer = Buffer.from(qrcodeResult);\n    const qrcodeFilePath = path.join(tmpCachePath, `weixin_qrcode_${Date.now()}.jpg`);\n    fs.writeFileSync(qrcodeFilePath, new Uint8Array(qrcodeBuffer));\n\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n\n    if (params.safeQrcodeCallback) {\n        params.safeQrcodeCallback?.(qrcodeFilePath);\n    } else {\n        const data = `data:image/jpeg;base64,${Buffer.from(qrcodeResult).toString(\"base64\")}`;\n        await reporter(10041, \"请扫码确认发布!\", data);\n\n        await updateTaskState?.({\n            state: TaskState.WAIT_SCAN,\n            result: {\n                qrImg: data,\n            },\n        });\n    }\n\n    // 8. 验证二维码结果\n    let code = \"\";\n    for (let i = 0; i < scanRetryMaxCount; i++) {\n        await sleep(2000);\n\n        const checkScanResult = await http.api<{ code: string; errcode: number }>({\n            method: \"post\",\n            url: \"https://mp.weixin.qq.com/safe/safeuuid\",\n            params: {\n                token: params.token,\n                lang: \"zh_CN\",\n                timespam: Date.now(),\n            },\n            data: generatorFormData({\n                token: params.token,\n                lang: \"zh_CN\",\n                f: \"json\",\n                ajax: 1,\n                uuid,\n                action: \"json\",\n                type: \"json\",\n                fingerprint,\n                random: Math.random().toString(),\n            }),\n        });\n\n        if (checkScanResult.errcode === 405 && checkScanResult.code) {\n            code = checkScanResult.code;\n            break;\n        }\n\n        if (i === scanRetryMaxCount - 1) {\n            const message = \"二维码已过期，请重试发布。\";\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: message,\n            });\n\n            return { code: 414, message, data: \"\" };\n        }\n    }\n\n    // 非群发时会多一个接口\n    if (!params.masssend) {\n        await http.api({\n            method: \"post\",\n            url: \"https://mp.weixin.qq.com/misc/safeassistant\",\n            params: {\n                token: params.token,\n                lang: \"zh_CN\",\n                1: 1,\n            },\n            data: generatorFormData({\n                token: params.token,\n                lang: \"zh_CN\",\n                f: \"json\",\n                ajax: 1,\n                fingerprint,\n                random: Math.random().toString(),\n                action: \"get_uuid\",\n                uuid,\n            }),\n        });\n    }\n\n    const publishData = generatorFormData({\n        token: params.token,\n        lang: \"zh_CN\",\n        f: \"json\",\n        ajax: \"1\",\n        fingerprint,\n        random: Math.random().toString(),\n        ack: \"\",\n        code,\n        reprint_info: \"\",\n        reprint_confirm: \"0\",\n        list: \"\",\n        groupid: \"\",\n        sex: \"0\",\n        country: \"\",\n        province: \"\",\n        city: \"\",\n        send_time: params.settingInfo.timer ? params.settingInfo.timer : \"0\",\n        type: \"10\",\n        share_page: \"1\",\n        synctxweibo: \"0\",\n        operation_seq,\n        req_id: randomString(32),\n        req_time: new Date().getTime() + client_time_diff * 1e3,\n        sync_version: \"1\",\n        isFreePublish: params.masssend ? \"false\" : \"true\",\n        appmsgid: appMsgId,\n        isMulti: \"0\",\n        direct_send: \"1\",\n        isNeedCode: \"true\",\n        userType: \"1\",\n    });\n\n    // 9. 发送群发通知\n    try {\n        await proxyHttp.api<{ code: string; errcode: number; proxyInfo: Record<string, unknown> }>(\n            {\n                method: \"post\",\n                url: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n                params: {\n                    t: \"ajax-response\",\n                    token: params.token,\n                    lang: \"zh_CN\",\n                    ...(params.masssend\n                        ? {\n                              ...(params.settingInfo.timer\n                                  ? {\n                                        action: \"time_send\",\n                                    }\n                                  : {}),\n                          }\n                        : { is_release_publish_page: 1 }),\n                },\n                data: publishData,\n                defaultErrorMsg: params.masssend\n                    ? \"文章群发异常，请尝试关闭群发或稍后重试。\"\n                    : \"文章发布异常，请稍后重试。\",\n            },\n            { retries: 3, retryDelay: 500, timeout: 12 * 1000 },\n        );\n    } catch (error) {\n        const handledError = Http.handleApiError(error);\n        // 代理连接超时(599) 与网络/服务端错误(500/502/503/504)：重试耗尽后直接返回代理错误信息，\n        // 不再 throw 走 executeAction 的 RPA 兜底。code 归一为 414，使 executeAction 视为终止结果。\n        const isProxyOrNetworkError = [599, 500, 502, 503, 504].includes(handledError.code);\n        if (isProxyOrNetworkError) {\n            // 区分代理错误和普通网络错误\n            const isProxyRequest = handledError.extra?.isProxyRequest === true;\n            const errorType = handledError.code === 599 || isProxyRequest ? \"代理错误\" : \"网络错误\";\n            const message = `文章发布失败，${errorType}：${handledError.message}${task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n            task.logger.error(`[weixinPublish] ${errorType}，直接返回: ${message}`, stringifyError(handledError));\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: message,\n            });\n            return { code: 414, data: \"\", message };\n        }\n        // 其它错误码维持原有逻辑，抛出以便上层 executeAction 走 RPA 兜底\n        throw error;\n    }\n\n    if (params.saveType === \"publish\") {\n        reportLogger({\n            token: params.huiwenToken || \"\",\n            enverionment: task.enverionment || \"development\",\n            postId: params.articleId,\n            eip: proxyHttp.proxyInfo,\n            accountId: params.accountId,\n            uid: params.uid,\n            platform: \"weixin\",\n            publishParams: publishData,\n        });\n    }\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: {\n            response: appMsgId,\n        },\n    });\n\n    return success(appMsgId, `微信公众号发布完成！${task.debug ? ` ${http.proxyInfo}` : \"\"}`);\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { CookieMap, Response } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport axios from \"axios\";\n\nimport { copyHtmlToClipboard, PopupListener, parseUrlQueryString, TimeFormatter } from \"../../utils\";\nimport type { PublishAction } from \"./index\";\nimport { scanRetryMaxCount } from \"./utils\";\n\n// 等待二维码验证结果最长时间\nconst waitQrcodeResultMaxTime = scanRetryMaxCount * 2 * 1000;\n\nexport const rpaAction: PublishAction = async (task, params) => {\n    const tmpCachePath = task.getTmpPath();\n\n    const commonCookies = {\n        path: \"/\",\n        secure: true,\n        domain: \"mp.weixin.qq.com\",\n        url: \"https://mp.weixin.qq.com\",\n        httpOnly: true,\n    };\n\n    const urlParams = {\n        action: \"edit\",\n        type: 77,\n        token: params.token,\n        lang: \"zh_CN\",\n        timestamp: Date.now(),\n        appmsgid: params.appMsgId,\n    };\n\n    if (params.settingInfo?.wxRewardTarget) {\n        const urlRewardParams = {\n            action: \"inviteauthor\",\n            token: params.token,\n            lang: \"zh_CN\",\n        };\n        const wxRewardPage = await task.createPage({\n            show: task.debug,\n            url:\n                params.url ||\n                `https://mp.weixin.qq.com/cgi-bin/safecenterstatus?${Object.entries(urlRewardParams)\n                    .map((it) => it.join(\"=\"))\n                    .join(\"&\")}`,\n            cookies: params.cookies?.map((it) => ({ ...it, ...commonCookies })) || [],\n        });\n\n        const reward_page = wxRewardPage.locator(\"#app\");\n        const isAddRewarder = reward_page\n            .locator(\".author_card_bd.weui-desktop-vm_primary\")\n            .filter({ hasText: params.settingInfo.wxRewardTarget.author })\n            .count();\n        if ((await isAddRewarder) === 0) {\n            await reward_page.locator(\".weui-desktop-panel__hd-right\").click();\n            try {\n                try {\n                    await wxRewardPage.waitForSelector(\".invite-qrcode\", { state: \"visible\", timeout: 20000 });\n                    const qrcodeSrc = await reward_page.locator(\".invite-qrcode\").getAttribute(\"src\");\n\n                    if (qrcodeSrc) {\n                        const rewardBuffer = Buffer.from(qrcodeSrc.replace(/^data:image\\/\\w+;base64,/, \"\"), \"base64\");\n                        const rewardFilePath = path.join(tmpCachePath, \"weixin_reward.jpg\");\n                        fs.writeFileSync(rewardFilePath, new Uint8Array(rewardBuffer));\n\n                        params.safeQrcodeCallback?.(rewardFilePath);\n                    }\n\n                    // await wxRewardPage.waitForSelector('[data-transfer=\"true\"]:not([weui=\"true\"])', { state: 'detached', timeout: 30000 });\n                } catch (error) {\n                    throw new Error(\"二维码已过期，请重试绑定。\");\n                }\n\n                for (let i = 0; i < scanRetryMaxCount; i++) {\n                    await Promise.all([wxRewardPage.reload(), wxRewardPage.waitForLoadState(\"domcontentloaded\")]);\n\n                    try {\n                        await wxRewardPage.waitForSelector(\n                            `.author_card_bd.weui-desktop-vm_primary:has-text(\"${params.settingInfo.wxRewardTarget?.author}\")`,\n                            { timeout: 1000 },\n                        );\n                        break;\n                    } catch (error) {}\n\n                    if (i === scanRetryMaxCount - 1) throw new Error(\"未确认绑定账户，请在手机端确认绑定并重试\");\n                }\n            } catch (error) {\n                let errorMessage = \"发生未知错误\";\n                if (error instanceof Error) {\n                    errorMessage = error.message;\n                } else if (typeof error === \"string\") {\n                    errorMessage = error;\n                }\n                await wxRewardPage.close();\n                return { code: 414, message: errorMessage, data: \"\" };\n            }\n        }\n\n        if (params.settingInfo.wxRewardText) {\n            await wxRewardPage.locator('[href=\"/merchant/reward?action=getautoreply\"]').click();\n            await wxRewardPage.waitForLoadState(\"networkidle\");\n\n            const isAddWord = reward_page\n                .locator(\".auto-reply__list.edit .auto-reply__hd .auto-reply__text\")\n                .filter({ hasText: new RegExp(`^${params.settingInfo.wxRewardText}$`) })\n                .count();\n\n            if ((await isAddWord) === 0) {\n                await reward_page.locator(\".emotion_editor .edit_area\").fill(params.settingInfo.wxRewardText);\n                await reward_page.locator(\".emotion_editor .edit_area\").click();\n                await reward_page.locator(\".editor_toolbar .weui-desktop-btn.weui-desktop-btn_primary\").click();\n            }\n        }\n        await wxRewardPage.close();\n    }\n\n    const page = await task.createPage({\n        show: task.debug,\n        url:\n            params.url ||\n            `https://mp.weixin.qq.com/cgi-bin/appmsg?${Object.entries(urlParams)\n                .map((it) => it.join(\"=\"))\n                .join(\"&\")}`,\n        cookies: params.cookies?.map((it) => ({ ...it, ...commonCookies })) || [],\n    });\n\n    // 0. 校验登录\n    try {\n        await page.waitForSelector(\".weui-desktop-head\", { state: \"visible\" });\n    } catch (error) {\n        return { code: 414, message: \"登录失效\", data: page.url() };\n    }\n\n    // 1. 等待编辑器加载出来\n    try {\n        await page.waitForSelector(\"#editor_pannel\", { state: \"visible\", timeout: 60000 });\n    } catch (error) {\n        return { code: 414, message: \"编辑器加载超时，请稍后重试\", data: page.url() };\n    }\n\n    //新功能更新监听\n    PopupListener(\n        page,\n        '[v-transfer-dom=\"#vue_app\"] .weui-desktop-dialog',\n        \"更新\",\n        '[v-transfer-dom=\"#vue_app\"] .weui-desktop-icon-btn.weui-desktop-dialog__close-btn',\n        {\n            checkInterval: 1000,\n            stopAfterClick: false,\n        },\n    );\n    //小店功能开通监听\n    PopupListener(\n        page,\n        '[extclass=\"weui-desktop-dialog_simple\"] .weui-desktop-dialog',\n        \"小店\",\n        '[extclass=\"weui-desktop-dialog_simple\"] .weui-desktop-icon-btn.weui-desktop-dialog__close-btn',\n        {\n            checkInterval: 1000,\n            stopAfterClick: true,\n        },\n    );\n\n    // 2. 填写标题\n    const titleInstance = page.locator(\"#js_title_main textarea#title\");\n    await titleInstance.click();\n    await titleInstance.fill(params.title);\n\n    // 3. 填写作者\n    if (params.settingInfo.wxAuthor) {\n        const titleInstance = page.locator(\"#js_author_area input#author\");\n        await titleInstance.click();\n        await titleInstance.fill(params.settingInfo.wxAuthor);\n    }\n\n    // 4. 填写正文\n    await copyHtmlToClipboard(page, params.content);\n    // 定位目标元素并聚焦\n    await page.click(\".js_editor_area .ProseMirror\");\n    // 模拟Ctrl+V粘贴\n    await page.keyboard.press(\"Control+V\");\n\n    // 将设置区域滚动到可见区域\n    await page.locator(\"#article_setting_area\").evaluate((node) => node.scrollIntoView());\n\n    // 5. 填写摘要\n    if (params.settingInfo.wxAbstract) {\n        const titleInstance = page.locator(\"#article_setting_area #js_description_area textarea\");\n        await titleInstance.click();\n        await titleInstance.fill(params.settingInfo.wxAbstract);\n    }\n\n    // 6. 设置封面\n    if (params.settingInfo.wxCover) {\n        let fileName = getFilenameFromUrl(params.settingInfo.wxCover);\n        const ext = path.extname(fileName);\n        fileName = ext ? fileName : `${fileName}.png`;\n        const cover = await downloadImage(params.settingInfo.wxCover, path.join(tmpCachePath, fileName));\n\n        // 从图片库选择\n        await page.locator(\"#article_setting_area #js_cover_area .select-cover__btn\").hover();\n        await page\n            .locator(\"#article_setting_area #js_cover_area .pop-opr__group-select-cover .pop-opr__list .pop-opr__item\")\n            .filter({ hasText: \"从图片库选择\" })\n            .click();\n\n        // 在弹窗内选择「我的图片」- 「上传文件」\n        // 等待弹窗出现\n        await page.waitForSelector(\"#vue_app .weui-desktop-dialog\", { state: \"visible\" });\n        const dialog = page.locator(\"#vue_app .weui-desktop-dialog\");\n        // 点击「我的图片」\n        await dialog.locator(\".weui-desktop-menu .weui-desktop-menu__item\").filter({ hasText: \"我的图片\" }).click();\n        await page.waitForTimeout(300);\n        // 点击「上传文件」\n        const fileChooserPromise = page.waitForEvent(\"filechooser\");\n        await dialog.locator(\".weui-desktop-img-picker__list__area .js_upload_btn_container\").click();\n        const fileChooser = await fileChooserPromise;\n        await fileChooser.setFiles([cover]);\n\n        // 等待图片上传完成\n        try {\n            await page.waitForSelector(\".weui-desktop-img-picker__list .weui-desktop-img-picker__item.selected\", {\n                state: \"visible\",\n                timeout: 60000,\n            });\n        } catch (error) {\n            return { code: 414, message: \"封面图片上传超时，请检查网络后重试\", data: \"\" };\n        }\n        await page.waitForSelector(\".weui-desktop-upload__file__progress\", { state: \"detached\", timeout: 60000 });\n\n        const pic_msg = page.locator(\n            \".weui-desktop-img-picker__list .weui-desktop-img-picker__item.selected .weui-desktop-upload__file__msg\",\n        );\n        if ((await pic_msg.count()) > 0)\n            return {\n                code: 414,\n                message: `图片上传错误：${(await pic_msg.textContent()) || \"未知错误，请重试！\"}`,\n                data: \"\",\n            };\n\n        // 选择下一步\n        await dialog\n            .locator(\".weui-desktop-dialog__ft .weui-desktop-btn:not(.weui-desktop-btn_disabled)\")\n            .filter({ hasText: \"下一步\" })\n            .click();\n        // 等待第二步的确认按钮出来\n        await dialog\n            .locator(\".weui-desktop-dialog__ft .weui-desktop-btn\")\n            .filter({ hasText: \"确认\" })\n            .waitFor({ state: \"visible\" });\n        await dialog.locator(\".weui-desktop-dialog__ft .weui-desktop-btn\").filter({ hasText: \"确认\" }).click();\n    }\n\n    // 7. 原创与赞赏设置\n    if (params.settingInfo.wxCopyright) {\n        await page.locator(\"#js_original\").click();\n\n        const ori_dialog = page.locator(\".claim__original-dialog.original_dialog\");\n        const ori_dialog_bd = ori_dialog.locator(\".weui-desktop-dialog__bd\");\n        const ori_dialog_ft = ori_dialog.locator(\".weui-desktop-dialog__ft\");\n\n        await ori_dialog_bd.locator(\".weui-desktop-form__check-content\").filter({ hasText: \"文字原创\" }).click();\n\n        if (params.settingInfo?.wxWhitelist) {\n            for (const _target of params.settingInfo.wxWhitelist) {\n                await ori_dialog_bd.locator(\"#js_article_whitelist_search\").fill(_target);\n                await ori_dialog_bd.locator(\".js_search\").click();\n                const search_res = ori_dialog_bd.locator(\"#js_article_whitelist_search_result > div\");\n\n                await page.waitForTimeout(1000);\n\n                if ((await search_res.getAttribute(\"class\")) !== \"search-result-title search-result-empty\") {\n                    const search_res_name =\n                        (await search_res.locator(\".search-result-name-left\").textContent()) || undefined;\n                    await search_res.click();\n                    const whrite_list = ori_dialog_bd.locator(\"#js_article_whitelist_added tbody\");\n                    const white_td_isadd = await whrite_list\n                        .locator(\".table-td-name\")\n                        .filter({ hasText: search_res_name })\n                        .count();\n\n                    if (!white_td_isadd) {\n                        return { code: 414, message: \"白名单添加失败，请重试！\", data: \"\" };\n                    }\n                } else {\n                    return { code: 414, message: `白名单用户：${_target} 未搜索到，请确定输入是否正确！`, data: \"\" };\n                }\n            }\n        }\n\n        if (params.settingInfo?.wxQuickReprint) {\n            const btn_isChecked =\n                (await ori_dialog_bd.locator('//span[@class=\"frm_tips\"]').filter({ hasText: \"已开启\" }).count()) === 1;\n            if (!btn_isChecked)\n                await ori_dialog_bd.locator(\".weui-desktop-switch_loading .weui-desktop-switch__box\").click();\n        }\n\n        const checkbox = ori_dialog_ft.locator(\".weui-desktop-icon-checkbox\");\n        if (!(await checkbox.isChecked())) await checkbox.check();\n        await ori_dialog_ft.locator(\".weui-desktop-btn.weui-desktop-btn_primary\").click();\n\n        if (params.settingInfo?.wxRewardTarget) {\n            await page.locator(\"#js_reward_setting_area\").click();\n\n            const reward_setting = page.locator(\".reward-setting-dialog\");\n            const reward_setting_bd = reward_setting.locator(\".weui-desktop-dialog__bd\");\n            const reward_setting_ft = reward_setting.locator(\".weui-desktop-dialog__ft\");\n\n            //遍历绑定信息\n            for (const _type in params.settingInfo.wxRewardTarget) {\n                if (_type === \"author\") {\n                    const userName = params.settingInfo.wxRewardTarget[_type];\n\n                    await reward_setting_bd.locator(\".weui-desktop-form__check-label\", { hasText: \"赞赏作者\" }).click();\n                    await reward_setting_bd.locator(\".weui-desktop-form__input\").fill(userName);\n\n                    if (params.settingInfo.wxRewardText) {\n                        const reward_setting_replay = page.locator(\".reward-reply-setting\");\n                        const switchAuto = reward_setting_replay.locator(\".weui-desktop-switch__box\");\n\n                        const maxAttempts = 5;\n                        const delayMs = 500;\n                        let nowCheckTime = 0;\n\n                        for (let attempt = 0; attempt < maxAttempts; attempt++) {\n                            const isDisabled = await switchAuto.isDisabled();\n                            if (!isDisabled) {\n                                (await switchAuto.isChecked()) ? nowCheckTime++ : null;\n                                if (nowCheckTime === 2) break;\n                            }\n\n                            if (attempt === maxAttempts - 1)\n                                throw new Error(\"Checkbox did not become enabled within the timeout.\");\n                            await new Promise((resolve) => setTimeout(resolve, delayMs));\n                        }\n\n                        const isOneReplay =\n                            (await reward_setting_replay\n                                .locator(\".reward-reply-select__wrp >.reward-reply-select__tips\")\n                                .textContent()) === \"添加新的回复\";\n                        const isCurrentReplay =\n                            (await reward_setting_replay\n                                .locator(\".reward-reply-select__wrp >.reward-reply-select__display .wording\")\n                                .filter({ hasText: new RegExp(`^${[params.settingInfo.wxRewardText]}$`) })\n                                .count()) === 1;\n\n                        if (!isOneReplay && !isCurrentReplay) {\n                            await reward_setting_replay\n                                .locator(\".reward-reply-select__wrp >.reward-reply-select__tips\")\n                                .click();\n                            await reward_setting_replay\n                                .locator(\".reward-reply-select__display.can-select .wording\")\n                                .filter({ hasText: new RegExp(`^${[params.settingInfo.wxRewardText]}$`) })\n                                .click();\n                        }\n                    } else {\n                        (await reward_setting_bd\n                            .locator(\".reward-reply-setting .weui-desktop-switch__input\")\n                            .isChecked())\n                            ? await reward_setting_bd\n                                  .locator(\".reward-reply-setting .weui-desktop-switch__box\")\n                                  .uncheck()\n                            : 0;\n                    }\n                } else if (_type === \"project\") {\n                }\n            }\n\n            const checkbox = reward_setting_ft.locator(\".weui-desktop-icon-checkbox\");\n            if (!(await checkbox.isChecked())) await checkbox.check();\n            await reward_setting_ft.locator(\".weui-desktop-btn.weui-desktop-btn_primary\").click();\n        }\n    }\n\n    // 8. 互动设置\n    if (params.settingInfo?.wxInteraction) {\n        const openInteractionDialog = async () => {\n            await page.locator(\".appmsg-editor__setting-group.js_interaction_cell\").click();\n        };\n\n        const setupPublicInteraction = async () => {\n            const wxInteraction_bd = page.locator(\".interaction-dialog .weui-desktop-dialog__bd\");\n\n            // 开启留言开关\n            const commentSwitch = wxInteraction_bd.locator(\n                \".comment-switcher.version5-same-set .weui-desktop-switch__box\",\n            );\n            const isSwitchChecked = await wxInteraction_bd\n                .locator(\".comment-switcher.version5-same-set .weui-desktop-switch__input\")\n                .isChecked();\n            if (!isSwitchChecked) {\n                await commentSwitch.check();\n            }\n\n            // 谁可以留言（兼容传参文本与页面文本的差异）\n            const commentTextMap: Record<string, string> = {\n                所有用户: \"所有人\",\n                已关注的用户: \"已关注的人\",\n                已关注7天及以上的用户: \"已关注7天及以上的人\",\n            };\n            const commentOption = params.settingInfo.wxInteraction?.Option;\n            const commentKey = commentOption?.Comment ?? \"\";\n            const commentText = commentTextMap[commentKey] ?? commentKey;\n            const comment_area = wxInteraction_bd.locator(\".comment-options-same-set\");\n            await comment_area\n                .locator(\".comment-options__radio .weui-desktop-form__check-label\")\n                .filter({ hasText: commentText })\n                .click();\n            await page.waitForTimeout(500);\n\n            // 自动精选留言\n            if (\n                params.settingInfo.wxInteraction &&\n                params.settingInfo.wxInteraction.Option?.elect_comment !== undefined\n            ) {\n                const electSwitchInput = wxInteraction_bd.locator(\n                    \".comment-options-inner .comment-switcher .weui-desktop-switch__input\",\n                );\n                const electSwitchBox = wxInteraction_bd.locator(\n                    \".comment-options-inner .comment-switcher .weui-desktop-switch__box\",\n                );\n                const electCount = await electSwitchInput.count();\n                if (electCount > 0) {\n                    const isElectChecked = await electSwitchInput\n                        .first()\n                        .isChecked({ timeout: 3000 })\n                        .catch(() => false);\n                    if (params.settingInfo.wxInteraction.Option.elect_comment && !isElectChecked) {\n                        await electSwitchBox.first().check();\n                    } else if (!params.settingInfo.wxInteraction.Option.elect_comment && isElectChecked) {\n                        await electSwitchBox.first().uncheck();\n                    }\n                }\n            }\n        };\n\n        await openInteractionDialog();\n\n        if (params.settingInfo.wxInteraction.Type === \"public\") {\n            await setupPublicInteraction();\n\n            const wxInteraction_ft = page.locator(\".interaction-dialog .weui-desktop-dialog__ft\");\n            const confirmBtn = wxInteraction_ft.locator(\".weui-desktop-btn.weui-desktop-btn_primary\");\n            const isDisabled = await confirmBtn.evaluate((el) => el.classList.contains(\"weui-desktop-btn_disabled\"));\n\n            if (isDisabled) {\n                // 确定按钮不可用：关闭留言开关 -> 点确定关闭弹窗 -> 重新打开弹窗 -> 开启留言开关\n                const wxInteraction_bd = page.locator(\".interaction-dialog .weui-desktop-dialog__bd\");\n                const commentSwitch = wxInteraction_bd.locator(\n                    \".comment-switcher.version5-same-set .weui-desktop-switch__box\",\n                );\n                await commentSwitch.uncheck();\n                await confirmBtn.click();\n                await page.waitForTimeout(300);\n                await openInteractionDialog();\n                await setupPublicInteraction();\n            }\n\n            await page\n                .locator(\".interaction-dialog .weui-desktop-dialog__ft .weui-desktop-btn.weui-desktop-btn_primary\")\n                .click();\n        }\n    }\n\n    // 9. 原文链接\n    if (params.settingInfo.wxOriginalText) {\n        await page.locator(\"#js_article_url_area .allow_click_opr\").click();\n        await page.waitForTimeout(200);\n        const poperInstance = page.locator('.popover:not([style*=\"display: none\"])');\n        const poperInput = poperInstance.locator(\"input.weui-desktop-form__input.js_url\");\n        await poperInput.fill(params.settingInfo.wxOriginalText);\n        await poperInstance.locator(\".popover_bar .btn_primary\").click();\n    }\n\n    // 10. 创作来源\n    if (params.settingInfo.wxCreationSource && params.settingInfo.wxCreationSource.length > 0) {\n        const source = params.settingInfo.wxCreationSource[0];\n        await page.locator(\"#js_claim_source_area .allow_click_opr\").click();\n        await page.waitForTimeout(200);\n        const poperInstance = page.locator('.claim-source-dialog:not([style*=\"display: none\"])');\n        await poperInstance.locator(`.weui-desktop-form__check-label:has(input[value=\"${source}\"])`).click();\n        const confirmBtn = poperInstance.locator(\".weui-desktop-dialog__ft .weui-desktop-btn_primary\");\n        await confirmBtn.waitFor({ state: \"visible\" });\n        await confirmBtn.click();\n    }\n\n    // 11. 关闭平台推荐\n    if (params.settingInfo.wxNotAllowRecommend === true) {\n        await page.locator(\"#js_not_recommend_area .allow_click_opr\").click();\n        await page.waitForTimeout(200);\n        const poperInstance = page.locator('.popover:not([style*=\"display: none\"])');\n        await poperInstance.locator('.frm_radio_item label[for=\"not_recomment_0\"]').click();\n    }\n\n    await page.waitForTimeout(1000);\n    task._timerRecord.PrePublish = Date.now();\n\n    // 12. 发布\n    const articleId = await new Promise<string>((resolve) => {\n        // 定义响应处理函数\n        const handleResponse = async (response: Response) => {\n            const url = response.url();\n            const query = parseUrlQueryString(url);\n            if (url.includes(\"/cgi-bin/operate_appmsg\") && query?.t === \"ajax-response\") {\n                const jsonResponse = await response.json();\n                page.off(\"response\", handleResponse);\n                resolve(jsonResponse?.appMsgId);\n            }\n        };\n\n        // 开始监听响应事件\n        page.on(\"response\", handleResponse);\n\n        // 点击发表\n        (async () => {\n            await page.locator(\"#editor_pannel #bottom_main #js_button_area  #js_send button\").click();\n            await page.waitForTimeout(200);\n\n            if (params.settingInfo.timer) {\n                await page\n                    .locator(\".mass-send .mass-send__td-setting\", { hasText: \"定时发表\" })\n                    .locator(\".weui-desktop-switch__box\")\n                    .check();\n                const dateD = Number(TimeFormatter.format(params.settingInfo.timer, \"d\"));\n                const nowD = Number(TimeFormatter.format(Date.now(), \"d\"));\n\n                await page.locator(\".mass-send__timer .weui-desktop-form__dropdown__dt\").click();\n                const dropMenu = page\n                    .locator(\".mass-send__timer .weui-desktop-dropdown-menu\")\n                    .locator(\".weui-desktop-dropdown__list-ele\");\n                await dropMenu\n                    .filter({\n                        hasText:\n                            dateD === nowD\n                                ? \"今天\"\n                                : dateD === nowD + 1\n                                  ? \"明天\"\n                                  : TimeFormatter.format(params.settingInfo.timer, \"M月d日\"),\n                    })\n                    .click();\n\n                const timeDropMenu = page.locator(\".mass-send__timer .weui-desktop-picker__time:visible\");\n                await timeDropMenu\n                    .locator(\".weui-desktop-form__input\")\n                    .fill(TimeFormatter.format(params.settingInfo.timer, \"hh:mm\"));\n                await timeDropMenu.locator(\"i.weui-desktop-icon__time\").click();\n            }\n        })();\n    });\n    await page.waitForTimeout(200);\n\n    if (params.masssend) {\n        const times = Number(\n            await page\n                .locator(\".mass-send .multi-sent__notice_time\")\n                .locator('div[style=\"display: none;\"] div:not([style*=\"display: none\"]) span')\n                .textContent(),\n        );\n        if (times === 0) return { code: 414, message: \"今日群发次数用尽，请明天再试。\", data: \"\" };\n        await page.locator(\".mass-send .mass_send__notify\").locator(\".weui-desktop-switch__box\").check();\n    } else {\n        await page.locator(\".mass-send .mass_send__notify\").locator(\".weui-desktop-switch__box\").uncheck();\n    }\n\n    await page.waitForTimeout(200);\n\n    // 再次点击发表\n    await page.waitForSelector('.new_mass_send_dialog .weui-desktop-dialog__wrp:not([style*=\"display: none\"])', {\n        state: \"visible\",\n    });\n    await page\n        .locator(\".new_mass_send_dialog .weui-desktop-dialog .weui-desktop-dialog__ft button.weui-desktop-btn_primary\")\n        .click();\n\n    // 点击继续发表\n    await page.waitForSelector('.double_check_dialog .weui-desktop-dialog__wrp:not([style*=\"display: none\"])', {\n        state: \"visible\",\n    });\n    await page\n        .locator(\".double_check_dialog .weui-desktop-dialog .weui-desktop-dialog__ft button.weui-desktop-btn_primary\")\n        .click();\n\n    await page.waitForTimeout(2000);\n\n    // 原创校验弹窗\n    const originalCheckDialog = page.locator(\n        'div[data-transfer=\"true\"][width\\\\.number=\"800\"][height\\\\.number=\"800\"] .weui-desktop-dialog__title',\n    );\n    if ((await originalCheckDialog.count()) > 0) {\n        if ((await originalCheckDialog.textContent()) === \"原创校验\") {\n            const popMassend = page.locator('div[data-transfer=\"true\"][width\\\\.number=\"800\"][height\\\\.number=\"800\"]');\n            await popMassend.locator(\".weui-desktop-btn_primary\", { hasText: \"下一步\" }).click();\n            await popMassend.locator(\".weui-desktop-btn_primary\", { hasText: \"继续\" }).click();\n        }\n    }\n\n    try {\n        const startTime = Date.now();\n\n        // biome-ignore lint/suspicious/noAsyncPromiseExecutor: <explanation>\n        await new Promise<void>(async (resolve, reject) => {\n            // 定义响应处理函数\n            const handleResponse = async (response: Response) => {\n                if (response.url().includes(\"/safe/safeuuid\")) {\n                    const jsonResponse = await response.json();\n                    if (jsonResponse.errcode === 405) {\n                        resolve();\n                        page.off(\"response\", handleResponse);\n                    } else if (Date.now() - startTime > waitQrcodeResultMaxTime) {\n                        reject();\n                        page.off(\"response\", handleResponse);\n                    }\n                }\n            };\n\n            // 开始监听响应事件\n            page.on(\"response\", handleResponse);\n\n            // 获取微信验证二维码\n            await page.waitForSelector(\".dialog .js_wxchecks.safe_check img.qrcode.js_qrcode\", {\n                state: \"visible\",\n            });\n            const qrcodeSrc = await page\n                .locator(\".dialog .js_wxchecks.safe_check img.qrcode.js_qrcode\")\n                .first()\n                .getAttribute(\"src\");\n            if (qrcodeSrc) {\n                const imgUrl = new URL(qrcodeSrc, page.url()).href; // 处理相对路径\n                const response = await axios({\n                    method: \"get\",\n                    url: imgUrl,\n                    responseType: \"arraybuffer\", // 确保接收二进制数据\n                });\n                // 保存文件\n                const qrcodeFilePath = path.join(tmpCachePath, \"weixin_qrcode.jpg\");\n                fs.writeFileSync(qrcodeFilePath, response.data);\n                params.safeQrcodeCallback?.(qrcodeFilePath);\n            } else {\n                throw new Error(\"qrcodeSrc is empty\");\n            }\n        });\n    } catch (error) {\n        await page.close();\n        return { code: 500, message: \"群发二维码已过期，请重试发布。\", data: \"\" };\n    }\n\n    await page.waitForTimeout(3000);\n    await page.close();\n\n    return success(articleId);\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\n\nimport { ActiomCommonParams, ActionCommonParamsSchema } from \"../../types\";\nimport { defaultParams, executeAction, formatSectionHtml } from \"../../utils\";\nimport type { CollectDetail } from \"../getWeixinCollection\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\nexport interface WxInteraction {\n    Type: \"public\" | \"private\" | \"off\"; // public:评论留言, priviate: 快捷私信, off: 不开启\n    Option?: {\n        // public下相关设置\n        Comment: \"已关注7天及以上的用户\" | \"已关注的用户\" | \"所有用户\"; // 评论设置\n        reply: \"已关注7天及以上的用户\" | \"已关注的用户\" | \"所有用户\"; // 回复设置\n        elect_comment: boolean; // 是否开启精选评论\n        elect_reply: boolean; // 是否开启精选回复\n    };\n}\n\nimport { z } from \"zod\";\n\nexport const WxInteractionSchema = z.object({\n    Type: z.enum([\"public\", \"private\", \"off\"]),\n    Option: z\n        .object({\n            Comment: z.enum([\"已关注7天及以上的用户\", \"已关注的用户\", \"所有用户\"]),\n            reply: z.enum([\"已关注7天及以上的用户\", \"已关注的用户\", \"所有用户\"]),\n            elect_comment: z.boolean(),\n            elect_reply: z.boolean(),\n        })\n        .optional(),\n});\n\nexport const WeixinPublishParamsSchema = ActionCommonParamsSchema.extend({\n    saveType: z.enum([\"draft\", \"publish\"]),\n    masssend: z.boolean().optional(),\n    token: z.union([z.string(), z.number()]),\n    title: z.string(),\n    content: z.string(),\n    uuid: z.string().optional(),\n    appMsgId: z.string().optional(),\n    operation_seq: z.string().optional(),\n    proxyLoc: z.string().optional(),\n    localIP: z.string().optional(),\n    huiwenToken: z.string().optional(),\n    settingInfo: z.object({\n        wxCover: z.string(),\n        wxAuthor: z.string().optional(),\n        wxAbstract: z.string().optional(),\n        wxOriginalText: z.string().optional(),\n        wxCopyright: z.boolean().optional(),\n        wxWhitelist: z.array(z.string()).optional(),\n        wxRewardTarget: z.record(z.string(), z.string()).optional(),\n        wxRewardText: z.string().optional(),\n        wxQuickReprint: z.boolean().optional(),\n        wxNotAllowRecommend: z.boolean().optional(),\n        wxCreationSource: z.array(z.string()).optional(),\n        wxInteraction: WxInteractionSchema.optional(),\n        timer: z.number().optional(),\n        wxTopic: z.array(z.string()).optional(),\n        wxCollectionInfo: z.any().optional(), // Replace `z.any()` with a specific schema if available\n    }),\n});\n\nexport interface WeixinPublishRuntimeOptions {\n    safeQrcodeCallback?: (qrcodePath: string) => void;\n}\n\nexport type WeixinPublishParams = z.infer<typeof WeixinPublishParamsSchema> & WeixinPublishRuntimeOptions;\n\nexport interface WxWhitelistUserInfo {\n    nickname: string;\n    openid: string; // 微信常用字段命名可能是 open_id\n    username: string;\n    wx_name: string;\n    pic_url: string;\n}\n\nexport type PublishAction = CommonAction<WeixinPublishParams, string>;\n\nexport const weixinPublish: PublishAction = async (task, _params) => {\n    const params = defaultParams(_params, { masssend: false });\n\n    // Format content HTML\n    params.content = formatSectionHtml(params.content);\n\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return mockAction(task, params);\n    }\n\n    return executeAction(mockAction, rpaAction)(task, params);\n};\n","import { type Page, success, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response } from \"playwright-core\";\nimport type { SteelAction } from \"./index\";\n\nconst CREATOR_PUBLISH_URL = \"https://creator.xiaohongshu.com/publish/publish?source=official\";\n\n/** 小红书页面全局状态结构 */\ninterface InitialState {\n    user?: {\n        userInfo?: {\n            _rawValue?: {\n                id: number;\n                nickname: string;\n                images?: string;\n                userId?: string;\n            };\n        };\n    };\n}\n\ninterface CookieLike {\n    domain?: string;\n}\n\ninterface CreatorUserInfoPayload {\n    data?: {\n        userId?: string;\n        userName?: string;\n        userAvatar?: string;\n        [key: string]: unknown;\n    };\n    [key: string]: unknown;\n}\n\ninterface StageError extends Error {\n    stage: string;\n}\n\nconst createStageError = (message: string, stage: string): StageError => Object.assign(new Error(message), { stage });\n\nexport const isCreatorPublishUrl = (url: string): boolean => {\n    try {\n        const parsedUrl = new URL(url);\n        return parsedUrl.origin === \"https://creator.xiaohongshu.com\" && parsedUrl.pathname === \"/publish/publish\";\n    } catch {\n        return false;\n    }\n};\n\nexport const isExploreUrl = (url: string): boolean => {\n    try {\n        const parsedUrl = new URL(url);\n        return parsedUrl.origin === \"https://www.xiaohongshu.com\" && parsedUrl.pathname === \"/explore\";\n    } catch {\n        return false;\n    }\n};\n\nexport const filterCreatorCookies = <T extends CookieLike>(cookies: T[]): T[] =>\n    cookies.filter((cookie) => {\n        const normalizedDomain = (cookie.domain ?? \"\").replace(/^\\./, \"\");\n        return normalizedDomain === \"creator.xiaohongshu.com\" || normalizedDomain === \"xiaohongshu.com\";\n    });\n\nexport const mergeUserInfo = (current: UserInfo, next: UserInfo): UserInfo => ({\n    name: next.name || current.name,\n    avatar: next.avatar || current.avatar,\n    uniqueId: next.uniqueId || current.uniqueId,\n});\n\nexport const extractCreatorUserInfo = (payload: CreatorUserInfoPayload): UserInfo => ({\n    name: payload.data?.userName ?? \"\",\n    avatar: payload.data?.userAvatar ?? \"\",\n    uniqueId: payload.data?.userId ?? \"\",\n});\n\nconst readUserInfo = async (page: Page): Promise<UserInfo> =>\n    page.evaluate(() => {\n        const raw = (\n            window as unknown as {\n                __INITIAL_STATE__?: InitialState;\n            }\n        ).__INITIAL_STATE__?.user?.userInfo?._rawValue;\n\n        return {\n            name: raw?.nickname ?? \"\",\n            avatar: raw?.images ?? \"\",\n            uniqueId: raw?.userId ?? \"\",\n        };\n    });\n\n/**\n * 小红书登录 RPA\n *\n * 流程：\n * 1. 打开小红书登录页，生成远程调试地址\n * 2. 监听二维码扫码状态接口 /login/qrcode/status\n * 3. 扫码成功后，等待页面跳转到 /explore\n * 4. 主动跳转到创作者发布页，确认创作者平台登录态\n * 5. 返回创作者相关 cookie\n */\nexport const rpaAction: SteelAction = async (task, _params) => {\n    const reporter = task.reportService?.reportLoginStatus ?? (() => Promise.resolve());\n\n    let page: Page;\n    let isSelfClosing = false;\n\n    // ========== 第一步：启动浏览器并打开登录页 ==========\n    try {\n        page = await task.createPage({\n            url: \"https://www.xiaohongshu.com/login\",\n        });\n        if (!task._session?.id) throw new Error(\"Session ID 不存在\");\n        task._steelBrowser?.on(\"disconnected\", () => {\n            if (task.debug && isSelfClosing) {\n                task.logger.info(\"执行结束，关闭浏览器！\");\n            } else {\n                task.logger.info(\"浏览器被手动释放或意外关闭！\");\n            }\n        });\n    } catch (e) {\n        task.logger.error(\"浏览器启动失败\", e);\n        return { code: 414, message: `浏览器启动失败: ${e}`, data: {} };\n    }\n\n    // ========== 第二步：生成远程调试地址 ==========\n    const pageInfo = await task._client?.sessions.liveDetails(task._session.id);\n    const pageId = pageInfo?.pages[0].id ?? \"\";\n\n    const baseHost = task._session.websocketUrl?.replace(/^wss?:\\/\\//, \"\") ?? \"\";\n    const connectAddress = new URLSearchParams({ baseHost, pageId }).toString();\n\n    task.reportService?.settingSessionID?.(task._session?.id || \"\");\n\n    await reporter(0, \"浏览器启动成功，请使用小红书App扫码登录……\", { connectAddress });\n\n    // ========== 第三步：监听扫码状态与登录结果 ==========\n    let userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            /** 清理所有监听器，防止重复触发 */\n            const stopListening = () => {\n                page.off(\"response\", handleCheckQR);\n            };\n\n            const rejectOnce = (status: unknown) => {\n                if (finished) return;\n                finished = true;\n                stopListening();\n                reject(status);\n            };\n\n            const resolveOnce = () => {\n                if (finished) return;\n                finished = true;\n                stopListening();\n                resolve();\n            };\n\n            const continueAfterExplore = async () => {\n                try {\n                    if (!isExploreUrl(page.url())) {\n                        await page.waitForURL((currentUrl) => isExploreUrl(currentUrl.toString()), {\n                            timeout: 60000,\n                        });\n                    }\n\n                    userInfo = mergeUserInfo(\n                        userInfo,\n                        await readUserInfo(page).catch(() => ({ name: \"\", avatar: \"\", uniqueId: \"\" })),\n                    );\n                    await reporter(0, \"主站登录成功，正在跳转创作者发布页……\", {\n                        stage: \"scanQrcode\",\n                        phase: \"creatorPublishRedirect\",\n                        connectAddress,\n                    });\n\n                    const creatorUserInfoResponse = page.waitForResponse(\n                        (response) =>\n                            response.url().includes(\"/api/galaxy/user/info\") &&\n                            response.request().method() === \"GET\" &&\n                            response.status() === 200,\n                        { timeout: 20000 },\n                    );\n\n                    await page.goto(CREATOR_PUBLISH_URL, { waitUntil: \"domcontentloaded\", timeout: 20000 });\n\n                    await page.waitForURL((currentUrl) => isCreatorPublishUrl(currentUrl.toString()), {\n                        timeout: 20000,\n                    });\n                    await page.waitForSelector(\"#CreatorPlatform\", { state: \"visible\", timeout: 20000 });\n\n                    const creatorUserInfo = await creatorUserInfoResponse\n                        .then(async (response) =>\n                            extractCreatorUserInfo((await response.json()) as CreatorUserInfoPayload),\n                        )\n                        .catch(() => ({ name: \"\", avatar: \"\", uniqueId: \"\" }));\n                    userInfo = mergeUserInfo(userInfo, creatorUserInfo);\n\n                    await reporter(0, \"扫码成功!\", {\n                        stage: \"scanQrcode\",\n                        phase: \"creatorPublishRedirect\",\n                        connectAddress,\n                        userInfo,\n                    });\n\n                    if (!isCreatorPublishUrl(page.url())) {\n                        throw createStageError(\"创作者发布页跳转失败\", \"creatorPublishRedirect\");\n                    }\n                    resolveOnce();\n                } catch (err) {\n                    task.logger.error(\"登录结果处理异常\", err);\n                    rejectOnce(err);\n                }\n            };\n\n            /**\n             * 监听二维码扫码状态接口 /login/qrcode/status\n             *\n             * code_status 说明：\n             *   1 = 小红书扫码成功\n             *   2 = 微信扫码成功（同时返回登录信息）\n             */\n            const handleCheckQR = async (response: Response) => {\n                try {\n                    const url = response.url();\n                    if (!url.includes(\"/login/qrcode/status\") || response.request().method() !== \"GET\") return;\n\n                    let jsonResponse: { code: number; data: { code_status: number; login_info: { user_id: string } } };\n                    try {\n                        const text = await response.text();\n                        if (!text) {\n                            task.logger.warn(\"扫码状态接口返回空响应\", { url });\n                            return;\n                        }\n                        jsonResponse = JSON.parse(text);\n                    } catch (e) {\n                        task.logger.warn(\"扫码状态接口响应解析失败\", { url, error: e });\n                        return;\n                    }\n\n                    const codeStatus = jsonResponse.data?.code_status;\n\n                    if (jsonResponse.code === 0 && (codeStatus === 1 || codeStatus === 2)) {\n                        // 微信扫码时直接从响应中获取 userId\n                        if (codeStatus === 2) userInfo.uniqueId = jsonResponse.data.login_info.user_id;\n                        task.debug && task.logger.info(\"扫码成功，等待页面跳转到 explore...\");\n\n                        page.off(\"response\", handleCheckQR);\n                        void continueAfterExplore();\n                    }\n                } catch (err) {\n                    task.logger.error(\"用户信息获取错误\", err);\n                    rejectOnce(err);\n                }\n            };\n\n            // 提前注册监听，防止丢失请求\n            page.on(\"response\", handleCheckQR);\n        });\n    } catch (e) {\n        // 扫码状态码 → 用户友好提示的映射\n        const errMap: Record<string, string> = {\n            \"0\": \"用户扫码已超时，请重试！\",\n            \"1\": \"用户扫码后未点击确认，请重试！\",\n            \"3\": \"二维码已过期，请重试！\",\n        };\n        isSelfClosing = true;\n\n        const errorMessage =\n            typeof e === \"string\" && errMap[e] ? errMap[e] : e instanceof Error ? e.message : String(e);\n        const stage =\n            typeof e === \"object\" && e && \"stage\" in e\n                ? String((e as { stage?: unknown }).stage ?? \"scanQrcode\")\n                : \"scanQrcode\";\n\n        return { code: 500, message: errorMessage, data: { stage, connectAddress } };\n    }\n\n    // ========== 第四步：收集 cookie 并返回结果 ==========\n    const cookies = filterCreatorCookies((await task._steelBrowserContext?.cookies()) ?? []);\n    const cookie = JSON.stringify(cookies);\n    isSelfClosing = true;\n    await page.close();\n\n    return success({ connectAddress, cookie, userInfo }, \"登录成功！\");\n};\n","import { TaskState, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response } from \"playwright-core\";\nimport type { SteelAction } from \"./index\";\n\nconst encode_mnsv2 = require(\"../../utils/xhs_ob/x_s.encoder.js\") as (\n    mnsv2: string,\n    platform: string,\n    req_type: string,\n) => string;\n\nimport { ExecutionState } from \"../../types\";\nimport { ProxyAgent } from \"../../utils/proxy\";\n\nconst scanRetryMaxCount = 60; // 二维码扫描重试\n// 等待二维码验证结果最长时间\nconst waitQrcodeResultMaxTime = scanRetryMaxCount * 2 * 1000;\n\ninterface CookieLike {\n    name: string;\n    value: string;\n}\n\n/**\n * 收集浏览器上下文 cookie，并确保关键的 a1 设备指纹 cookie 存在。\n *\n * a1 由小红书主站在首次访问 www.xiaohongshu.com 时通过 Set-Cookie 种下，整个请求\n * 签名体系都依赖它。少数情况下登录成功瞬间抓取时 a1 尚未落地，会导致后续 session\n * 检测因「缺失关键 cookie a1」直接失败且无法补救。这里在抓取阶段做一次补救：\n * 若首次抓取缺 a1，则显式访问主站等待 a1 落地后重新抓取。\n *\n * @returns 抓取到的 cookies；调用方需自行判断其中是否含 a1。\n */\nasync function collectCookiesWithA1(task: any): Promise<CookieLike[]> {\n    const hasA1 = (cookies: CookieLike[]) => cookies.some((c) => c.name === \"a1\" && !!c.value);\n\n    let cookies: CookieLike[] = (await task.steelBrowserContext?.cookies()) ?? [];\n    if (hasA1(cookies)) return cookies;\n\n    task.logger?.warn(\"[XhsLogin] 首次抓取缺失 a1，尝试补救……\");\n\n    try {\n        const page = task.steelBrowserContext?.pages?.()[0];\n        if (page) {\n            await page.goto(\"https://www.xiaohongshu.com\", { waitUntil: \"domcontentloaded\", timeout: 15000 });\n            // a1 通过 Set-Cookie 异步写入 context，给予短暂等待窗口轮询。\n            for (let i = 0; i < 10; i++) {\n                cookies = (await task.steelBrowserContext?.cookies()) ?? [];\n                if (hasA1(cookies)) {\n                    task.logger?.info(`[XhsLogin] a1 补救成功，第 ${i + 1} 次轮询命中`);\n                    return cookies;\n                }\n                await new Promise((resolve) => setTimeout(resolve, 500));\n            }\n        }\n    } catch (err) {\n        task.logger?.warn(\"[XhsLogin] a1 补救访问主站失败\", err);\n    }\n\n    // 返回最后一次抓取结果（可能仍缺 a1，由调用方判定）\n    cookies = (await task.steelBrowserContext?.cookies()) ?? [];\n    return cookies;\n}\n\ninterface InitialState {\n    user?: {\n        userInfo?: {\n            _rawValue?: {\n                id: number;\n                nickname: string;\n                images?: string;\n                userId?: string;\n            };\n        };\n    };\n}\n\nexport const rpaServer: SteelAction = async (task: any, params: any) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    const reporter = task.reportService?.reportLoginStatus ?? (() => Promise.resolve());\n    let executionState: ExecutionState | undefined;\n\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n\n    const page = await task.createPage({\n        url: \"https://www.xiaohongshu.com/login\",\n        proxyUrl,\n        userAgent: params.userAgent,\n    });\n\n    task.steelBrowser?.on(\"disconnected\", () => {\n        executionState = ExecutionState.BROWSER_CLOSED;\n    });\n\n    await updateTaskState?.({\n        state: TaskState.WAIT_SCAN,\n        connectAddress: task.steelConnector?.getProxyUrl(task.sessionId || \"\", \"v1/sessions/debug\"),\n        sessionId: task.sessionId,\n    });\n\n    let userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n    await new Promise<void>((resolve, reject) => {\n        let finished = false;\n\n        const timer = setTimeout(async () => {\n            if (finished) return; // 检查是否已经完成\n            cleanup();\n            executionState = ExecutionState.TIMEOUT;\n            await updateTaskState?.({\n                state: TaskState.TIMEOUT,\n                error: \"等待扫码登录超时\",\n            });\n            resolve();\n        }, waitQrcodeResultMaxTime);\n\n        const cleanup = () => {\n            if (finished) return; // 防止多次调用\n            finished = true;\n            clearTimeout(timer);\n            page.off(\"response\", handleWebCommon);\n            page.off(\"response\", handleCheckQR);\n            task.steelBrowser?.off(\"disconnected\", handleBrowserClosed);\n        };\n\n        const handleBrowserClosed = () => {\n            cleanup();\n            executionState = ExecutionState.BROWSER_CLOSED;\n            resolve();\n        };\n\n        const handleWebCommon = async (resp: Response) => {\n            try {\n                const url = resp.url();\n\n                // 登录成功后会触发 homefeed 请求\n                if (url.includes(\"/explore\") && resp.request().method() === \"GET\" && resp.status() === 200) {\n                    cleanup();\n                    await updateTaskState?.({\n                        state: TaskState.CONFIRMED,\n                    });\n\n                    await page.waitForFunction(\n                        () => typeof (window as unknown as { mnsv2: unknown }).mnsv2 === \"function\",\n                        {\n                            timeout: 10000,\n                        },\n                    );\n                    const ticket_mnsv2 = await page.evaluate(\n                        // 调用浏览器环境获取加密参数\n                        ({ c, d }: { c: string; d: string }) => {\n                            if (typeof (window as unknown as { mnsv2: unknown }).mnsv2 === \"function\") {\n                                return (window as unknown as { mnsv2: (...args: unknown[]) => string }).mnsv2(c, d);\n                            }\n                            return \"mnsv2 未定义\";\n                        },\n                        {\n                            c: '/api/cas/customer/web/service-ticket{\"service\":\"https://creator.xiaohongshu.com\",\"source\":\"official\",\"type\":\"tgt\"}',\n                            d: \"71bcd9dc89f6c256ead6cbe2b0a9793c\", // md5\n                        },\n                    );\n\n                    const XS = encode_mnsv2(ticket_mnsv2, \"Windows\", \"object\");\n\n                    const createrLogin = await page.request.post(\n                        \"https://customer.xiaohongshu.com/api/cas/customer/web/service-ticket\",\n                        {\n                            headers: {\n                                \"x-s\": XS,\n                                \"x-t\": Date.now().toString(),\n                                referer: \"https://creator.xiaohongshu.com/\",\n                                origin: \"https://creator.xiaohongshu.com\",\n                                cookie:\n                                    (await task._steelBrowserContext?.cookies())\n                                        ?.map((c: any) => `${c.name}=${c.value}`)\n                                        .join(\";\") || \"\",\n                            },\n                            data: {\n                                service: \"https://creator.xiaohongshu.com\",\n                                source: \"official\",\n                                type: \"tgt\",\n                            },\n                        },\n                    );\n                    task.logger.info(`createrLogin------- ${createrLogin.ok()}`);\n                    if (createrLogin.ok()) {\n                        let num = 30;\n                        //轮询获取用户信息，直到获取到用户信息\n                        async function getUserInfo() {\n                            userInfo = await page.evaluate(() => {\n                                const raw = (\n                                    window as unknown as {\n                                        __INITIAL_STATE__?: InitialState;\n                                    }\n                                ).__INITIAL_STATE__?.user?.userInfo?._rawValue;\n\n                                return {\n                                    name: raw?.nickname ?? raw?.nickname ?? \"\",\n                                    avatar: raw?.images ?? raw?.images ?? \"\",\n                                    uniqueId: raw?.userId ?? raw?.userId ?? \"\",\n                                };\n                            });\n                            await reporter(0, `第${30 - num + 1}次抓取用户信息!`, { userInfo });\n                            // 轮询获取用户信息，直到获取到用户信息\n                            if (userInfo.uniqueId || num <= 0) return;\n                            num--;\n                            await new Promise((resolve) => setTimeout(resolve, 1000));\n                            await getUserInfo();\n                        }\n                        await getUserInfo();\n                        task.logger.info(`userInfo------- ${JSON.stringify(userInfo)}`);\n                    }\n                    executionState = ExecutionState.SUCCESS;\n                    resolve();\n                }\n            } catch (err) {\n                cleanup();\n                reject(err);\n            }\n        };\n\n        // 0=用户未扫码，1=用户已扫码未确认,3=二维码过期\n        const handleCheckQR = async (response: Response) => {\n            try {\n                const url = response.url();\n                if (!url.includes(\"/login/qrcode/status\") || response.request().method() !== \"GET\") return;\n\n                let jsonResponse: { code: number; data: { code_status: number; login_info: { user_id: string } } };\n                try {\n                    const text = await response.text(); // 总是安全的\n                    if (!text) {\n                        task.logger.warn(\"Empty response body:\", { url });\n                        return;\n                    }\n\n                    jsonResponse = JSON.parse(text); // 手动解析\n                } catch (e) {\n                    task.logger.warn(\"Failed to parse json:\", { url, erroe: e });\n                    return;\n                }\n                const codeStatus = jsonResponse.data?.code_status;\n\n                // codeStatus ： 1为小红书扫码成功，2为微信扫码成功，并且同时返回登陆信息\n                if (jsonResponse.code === 0 && (codeStatus === 1 || codeStatus === 2)) {\n                    if (codeStatus === 2) userInfo.uniqueId = jsonResponse.data.login_info.user_id;\n\n                    await updateTaskState?.({\n                        state: TaskState.SCANNED,\n                        result: {\n                            userInfo,\n                        },\n                    });\n\n                    page.off(\"response\", handleCheckQR);\n                    page.on(\"response\", handleWebCommon);\n                }\n            } catch (err) {\n                cleanup();\n                reject(err);\n            }\n        };\n\n        // 在页面加载之前就注册监听，防止丢失请求\n        task.steelBrowser?.on(\"disconnected\", handleBrowserClosed);\n        page.on(\"response\", handleCheckQR);\n    });\n\n    if (executionState === undefined) return { code: 500, message: \"未知错误\", data: {} };\n\n    switch (executionState) {\n        case ExecutionState.BROWSER_CLOSED: {\n            const msg = \"浏览器已关闭，任务中断!\";\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: \"浏览器已关闭\",\n            });\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.TIMEOUT: {\n            const msg = \"等待用户扫码登录超时!\";\n            await updateTaskState?.({\n                state: TaskState.TIMEOUT,\n                error: msg,\n            });\n            task.logger.info(msg);\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.SUCCESS: {\n            // 抓取 cookie，并尝试确保关键的 a1 设备指纹 cookie 已落地。\n            // 若补救后仍缺 a1，记录日志但不阻断登录，留待后续 session 检测时拦截。\n            const cookies = await collectCookiesWithA1(task);\n            const hasA1 = cookies.some((c) => c.name === \"a1\" && !!c.value);\n\n            if (!hasA1) {\n                task.logger?.warn(\"[XhsLogin] 登录成功但缺失关键 cookie a1，后续检测可能失败\", {\n                    cookieNames: cookies.map((c) => c.name),\n                });\n            }\n\n            const cookieStr = JSON.stringify(cookies);\n            await updateTaskState?.({\n                state: TaskState.SUCCESS,\n                result: {\n                    cookie: cookieStr,\n                    userInfo: userInfo,\n                },\n            });\n            return {\n                code: 0,\n                message: \"成功\",\n                data: {\n                    cookie: cookieStr,\n                    userInfo,\n                },\n            };\n        }\n        default:\n            // 处理 RUNNING 和其他可能的状态\n            return { code: 500, message: \"任务执行中断\", data: {} };\n    }\n};\n","import { CommonAction, success } from \"@iflyrpa/share\";\nimport { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaServer } from \"./rpa-server\";\n\nexport type XiaohongshuLoginParams = ActiomCommonParams;\n\nexport type SteelAction = CommonAction<ActiomCommonParams, Record<string, unknown>>;\n\nexport const xiaohongshuLogin: SteelAction = async (task, params) => {\n    // params.actionType = \"rpa\";\n\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return success({}, \"暂不支持mockApi\");\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaServer(task, params);\n    }\n\n    return executeAction(rpaAction)(task, params);\n};\n","declare global {\n    interface Window {\n        mnsv2: (arg1: string, arg2: string) => string;\n        ck?: string;\n    }\n}\n\n// Node / Bun / Browser 兼容的 window 对象\nlet _windowCache: (Window & Record<string, unknown>) | null = null;\n\nconst getWindow = (): Window & Record<string, unknown> => {\n    if (_windowCache) return _windowCache;\n\n    if (typeof window !== \"undefined\") {\n        // 浏览器环境\n        _windowCache = window as unknown as Window & Record<string, unknown>;\n    } else if (typeof global !== \"undefined\") {\n        // Node.js 环境\n        _windowCache = globalThis as unknown as Window & Record<string, unknown>;\n    } else {\n        // 其他环境\n        _windowCache = globalThis as unknown as Window & Record<string, unknown>;\n    }\n\n    return _windowCache;\n};\n\n// ⭐ 必须最先注册（关键）\nif (typeof process !== \"undefined\") {\n    process.on(\"uncaughtException\", () => {});\n    process.on(\"unhandledRejection\", () => {});\n}\n\nconst mnsv2_enc = (arg1: string, arg2: string, cookieString: string): string => {\n    const win = getWindow();\n    win.ck = cookieString;\n\n    require(\"./ob.env\");\n    try {\n        require(\"./ob.enc\");\n    } catch {}\n\n    let result = \"\";\n\n    try {\n        result = win.mnsv2(arg1, arg2);\n    } catch {\n        // 同步异常（极少数）\n    }\n\n    return result;\n};\n\nexport default mnsv2_enc;\n","import crypto from \"node:crypto\";\nimport mnsvc2 from \"./mnsvc2\";\n\nconst encode_mnsv2 = require(\"./x_s.encoder.js\") as (\n    mnsv2: string,\n    type: string,\n    platform: string,\n    req_type: string,\n) => string;\n\nexport class Xhshow {\n    private stringifyCookies(cookies: Record<string, any>): string {\n        return Object.entries(cookies)\n            .map(([key, value]) => `${key}=${value}`)\n            .join(\"; \");\n    }\n    // constructor() {\n\n    // console.log(\"Xhshow xs encoder initialized\");\n    // }\n\n    signHeadersGet(\n        uri: string,\n        cookieString: Record<string, any>,\n        xsecAppid = \"ugc\",\n        params?: Record<string, unknown> | null,\n    ): Record<string, string> {\n        let para1 = \"\";\n        if (!params || Object.keys(params).length === 0) {\n            para1 = uri;\n        } else {\n            const _queryPara = Object.entries(params).map(([key, value]) => {\n                let valueStr = \"\";\n                if (Array.isArray(value)) {\n                    valueStr = value.map((v) => String(v)).join(\",\");\n                } else if (value !== null && value !== undefined) {\n                    valueStr = String(value);\n                }\n                return `${key}=${valueStr}`;\n            });\n            para1 = `${uri}?${_queryPara.join(\"&\")}`;\n        }\n\n        const md5Para1 = crypto.createHash(\"md5\").update(para1).digest(\"hex\"); // md5 enc\n        const mnsvc2_data = mnsvc2(para1, md5Para1, this.stringifyCookies(cookieString));\n\n        return { \"X-S\": encode_mnsv2(mnsvc2_data, xsecAppid, \"Windows\", \"object\") };\n    }\n\n    signHeadersPost(\n        uri: string,\n        cookieString: Record<string, any>,\n        xsecAppid = \"ugc\",\n        payload?: Record<string, unknown> | null,\n    ): Record<string, string> {\n        const para1 = uri + JSON.stringify(payload || {});\n        const md5Para1 = crypto.createHash(\"md5\").update(para1).digest(\"hex\"); // md5 enc\n        const mnsvc2_data = mnsvc2(para1, md5Para1, this.stringifyCookies(cookieString));\n\n        return { \"X-S\": encode_mnsv2(mnsvc2_data, xsecAppid, \"Windows\", \"object\") };\n    }\n}\n\nexport default Xhshow;\n//\n// const xhshow = new Xhshow();\n//\n// // For test\n// console.log(\n//     xhshow.signXsPost(\n//         \"/api/sns/web/v1/feed\",\n//         \"19aa5490309ue3bza2poh9lwqsqw2og6azztnku2050000809471\",\n//         \"xhs-pc-web\",\n//         {\"source_note_id\":\"6909f57e0000000007015f28\",\"image_formats\":[\"jpg\",\"webp\",\"avif\"],\"extra\":{\"need_body_topic\":\"1\"},\"xsec_source\":\"pc_search\",\"xsec_token\":\"ABEFyvlKvV2nK8QceNjsokHdjsoo7gonz4YIlxkzRbb5w=\"}\n//     )\n// );\n\n// console.log(xhshow.signXsGet(\"/api/sns/web/v1/search/filter\", \"19aa5490309ue3bza2poh9lwqsqw2og6azztnku2050000809471\", \"xhs-pc-web\", {keyword:\"ios26.1正式版\", search_id:\"2fn6umax1wg3kk0igh956\"}));\n","import fs from \"node:fs\";\n\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, response, success, TaskState } from \"@iflyrpa/share\";\nimport sizeOf from \"image-size\";\nimport { AxiosProxyParams, errorResponse, MockPublish, Xiaohongshu } from \"../../types\";\nimport { stringifyError } from \"../../utils\";\nimport { Http } from \"../../utils/http\";\nimport { reportLogger } from \"../../utils/reportLogger\";\nimport { Xhshow } from \"../../utils/xhs_ob_feed\";\nimport type { PublishAction } from \".\";\n\nimport Topic = Xiaohongshu.Topic;\n\ninterface CommonResponse<T = unknown> {\n    msg: string;\n    data: T;\n    proxyInfo?: Record<string, unknown>;\n    code: number;\n    success: boolean;\n    result?: number;\n}\n\ninterface UploadTempPermit<T = string[]> {\n    bucket: string;\n    uploadAddr: string;\n    fileIds: T;\n    token: string;\n}\n\nconst errnoMap: Record<number, string> = {\n    \"-1\": \"未知拦截器错误，请稍后重试。\",\n    915: \"所属C端账号手机号被修改，请重新登录\",\n    914: \"所属C端账号密码被修改，请重新登录\",\n    903: \"账户已登出，需重新登陆重试！\",\n    902: \"登录已过期，请重新登录！\",\n    906: \"账号存在风险，请重新登录！\",\n    \"-9136\": \"因违反社区规范禁止发笔记，请检查账号状态！\",\n};\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport const mockAction: PublishAction = async (task, params) => {\n    const tmpCachePath = task.getTmpPath();\n    if (\n        params?.selfDeclaration?.type === \"source-statement\" &&\n        params.selfDeclaration.childType === \"transshipment\" &&\n        params.originalBind\n    ) {\n        return { code: 414, message: \"原创声明与转载声明互斥，请重新选择后发布！\", data: \"\" };\n    }\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) {\n        return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: \"\" };\n    }\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.xiaohongshu.com\",\n        referer: \"https://creator.xiaohongshu.com/\",\n        \"user-agent\":\n            \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36\",\n    };\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n\n    const args: AxiosProxyParams = [\n        { headers },\n        task.logger,\n        params.proxyLoc,\n        params.accountId,\n        \"xiaohongshu\", // 业务标识\n    ];\n\n    const http = new Http({ headers });\n    const proxyHttp = new Http(...args);\n\n    // 添加响应拦截器\n    proxyHttp.addResponseInterceptor<CommonResponse>((response) => {\n        const responseData = response?.data;\n\n        // 检查响应中的 errno 字段\n        if (\n            (response && responseData?.code && responseData.code !== 0) ||\n            (responseData?.code && !responseData.success)\n        ) {\n            const errmsg =\n                errnoMap[responseData.code] || response.config.defaultErrorMsg || \"文章发布异常，请稍后重试。\";\n\n            return {\n                code: errnoMap[responseData.code] ? 414 : 500,\n                message: errmsg,\n                data: responseData,\n            };\n        }\n    });\n\n    // 0. 获取上传 token\n    const fetchCoverUrl = \"/api/media/v1/upload/creator/permit\";\n    const fetchCoverParams = {\n        biz_name: \"spectrum\",\n        scene: \"image\",\n        file_count: params.banners.length,\n        version: 1,\n        source: \"web\",\n    };\n    const fetchCoverXsHeader = xsEncrypt.signHeadersGet(fetchCoverUrl, recordCookie, \"ugc\", fetchCoverParams);\n\n    const uploadInfos: UploadTempPermit<string>[] = [];\n    if (params.banners.length > 18) {\n        // 分批次获取 coverId\n        const num = Math.ceil(params.banners.length / 14);\n        for (let i = 0; i < num; i++) {\n            // const start = i * 14;\n            // const end = Math.min(start + 14, params.banners.length);\n            // const batchParams = {\n            //     ...fetchCoverParams,\n            //     file_count: end - start,\n            // };\n            const batchCoverIdInfo = await proxyHttp.api<CommonResponse<{ uploadTempPermits: UploadTempPermit[] }>>(\n                {\n                    method: \"get\",\n                    baseURL: \"https://creator.xiaohongshu.com\",\n                    url: fetchCoverUrl,\n                    defaultErrorMsg: \"获取小红书用户信息失败，请稍后重试发布。\",\n                    headers: fetchCoverXsHeader,\n                    params: fetchCoverParams,\n                },\n                { retries: 3, retryDelay: 500, timeout: 30000 },\n            );\n            for (const item of batchCoverIdInfo?.data?.uploadTempPermits ?? []) {\n                for (const fileId of item.fileIds) {\n                    uploadInfos.push({\n                        bucket: item.bucket || \"\",\n                        uploadAddr: item.uploadAddr || \"\",\n                        fileIds: fileId,\n                        token: item.token || \"\",\n                    });\n                }\n            }\n        }\n    } else {\n        const coverIdInfo = await proxyHttp.api<CommonResponse<{ uploadTempPermits: UploadTempPermit[] }>>(\n            {\n                method: \"get\",\n                baseURL: \"https://creator.xiaohongshu.com\",\n                url: fetchCoverUrl,\n                defaultErrorMsg: \"获取小红书用户信息失败，请稍后重试发布。\",\n                headers: fetchCoverXsHeader,\n                params: fetchCoverParams,\n            },\n            { retries: 3, retryDelay: 500, timeout: 30000 },\n        );\n        for (const item of coverIdInfo?.data?.uploadTempPermits ?? []) {\n            for (const fileId of item.fileIds) {\n                uploadInfos.push({\n                    bucket: item.bucket || \"\",\n                    uploadAddr: item.uploadAddr || \"\",\n                    fileIds: fileId,\n                    token: item.token || \"\",\n                });\n            }\n        }\n    }\n\n    if (uploadInfos.length < params.banners.length)\n        return { code: 414, message: \"可用 OSS bucket 数量不足，无法上传所有图片！\", data: \"\" };\n\n    if (uploadInfos.length === 0) return { code: 414, message: \"图片上传失败，请稍后重试！\", data: \"\" };\n\n    const availableBuckets = Array.from({ length: uploadInfos.length }, (_, i) => i);\n\n    const uploadFile = async (\n        url: string,\n        index: number,\n    ): Promise<{\n        ossFileId: string;\n        ossToken: string;\n        width: number;\n        height: number;\n        originSize: number;\n    }> => {\n        const fileName = getFilenameFromUrl(url);\n        const localUrl = await downloadImage(url, path.join(tmpCachePath, fileName));\n        const fileBuffer = fs.readFileSync(localUrl);\n\n        // 解析图片宽高与原始大小（origin_size 单位为 KB，与小红书 web 端保持一致）\n        let width = 0;\n        let height = 0;\n        try {\n            const dimensions = sizeOf(fileBuffer);\n            width = dimensions.width ?? 0;\n            height = dimensions.height ?? 0;\n\n            // 根据 EXIF orientation 调整宽高（小红书使用的是旋转后的显示尺寸）\n            // orientation 值说明：https://exiftool.sourceforge.net/TagNames/EXIF.html\n            // 1 = Horizontal (normal)\n            // 2 = Mirror horizontal\n            // 3 = Rotate 180\n            // 4 = Mirror vertical\n            // 5 = Mirror horizontal and rotate 270 CW\n            // 6 = Rotate 90 CW\n            // 7 = Mirror horizontal and rotate 90 CW\n            // 8 = Rotate 270 CW\n            const orientation = dimensions.orientation ?? 1;\n            if ([5, 6, 7, 8].includes(orientation)) {\n                [width, height] = [height, width];\n            }\n        } catch {\n            // 解析失败时保持 0，不阻断上传\n        }\n        const originSize = fileBuffer.byteLength / 1024;\n\n        const MAX_RETRIES = uploadInfos.length;\n        let attempt = 0;\n\n        while (attempt < MAX_RETRIES) {\n            // 分配 bucket\n            const ossBucketIndex = availableBuckets.shift(); // 移除并获取第一个可用 bucket\n\n            if (ossBucketIndex === undefined) {\n                return { ossFileId: \"\", ossToken: \"\", width, height, originSize }; // 没有可用 bucket\n            }\n\n            const currentInfo = uploadInfos[ossBucketIndex];\n            const ossFileId = currentInfo.fileIds;\n            const ossToken = currentInfo.token;\n            const ossDomain = currentInfo.uploadAddr;\n\n            try {\n                await http.api(\n                    {\n                        method: \"put\",\n                        url: `https://${ossDomain}/${ossFileId}`,\n                        data: fileBuffer,\n                        headers: {\n                            \"x-cos-security-token\": ossToken,\n                        },\n                        defaultErrorMsg: \"图片上传异常，请稍后重试。\",\n                    },\n                    { timeout: 60000 },\n                );\n                return { ossFileId, ossToken, width, height, originSize };\n            } catch (error) {\n                const e = Http.handleApiError(error);\n                task.logger.warn(\n                    `[xhs upload] 第${attempt + 1}次失败 index=${index} bucket=${ossBucketIndex} ` +\n                        `domain=${ossDomain} fileId=${ossFileId} code=${e.code} msg=${e.message} ` +\n                        `data=${stringifyError(e.data)}`,\n                );\n                attempt++;\n            }\n        }\n        return { ossFileId: \"\", ossToken: \"\", width, height, originSize }; // 所有尝试失败\n    };\n\n    const coverInfos = await Promise.all(params.banners.map((it, idx) => uploadFile(it, idx)));\n    const invalidUpload = coverInfos.find((it) => it.ossToken === \"\" || it.ossFileId === \"\");\n    if (invalidUpload) return { code: 414, message: \"图片上传异常，请稍后重试发布。\", data: \"\" };\n\n    if (params.topic && params.topic.length > 0) {\n        await Promise.all(\n            params.topic.map(async (topic) => {\n                if (!topic.id) {\n                    const topicData = { topic_names: topic.name };\n                    const topicXsHeader = xsEncrypt.signHeadersPost(\n                        \"/web_api/sns/capa/postgw/topic/batch_customized\",\n                        recordCookie,\n                        \"ugc\",\n                        topicData,\n                    );\n\n                    const createTopic = await proxyHttp.api<{ data?: { topic_infos: Topic[] } }>(\n                        {\n                            method: \"POST\",\n                            url: \"https://edith.xiaohongshu.com/web_api/sns/capa/postgw/topic/batch_customized\",\n                            headers: topicXsHeader,\n                            data: topicData,\n                            defaultErrorMsg: \"话题创建异常，请稍后重试。\",\n                        },\n                        { retries: 3, retryDelay: 20, timeout: 3000 },\n                    );\n                    if (!createTopic?.data) throw errorResponse(\"话题创建失败，请检查话题字段！\", 414);\n                    Object.assign(topic, createTopic?.data?.topic_infos[0]);\n                }\n            }),\n        );\n    }\n\n    const visibleRangeMap = {\n        public: 0,\n        private: 1,\n        friends: 4,\n    };\n\n    const publishData = {\n        common: {\n            ats: [],\n            biz_relations: [],\n            desc: params?.content,\n            goods_info: {},\n            hash_tag: params.topic || [],\n            note_id: \"\",\n            source: JSON.stringify({\n                type: \"web\",\n                ids: \"\",\n                extraInfo: '{\"systemId\":\"web\"}',\n            }),\n            title: params?.title,\n            type: \"normal\",\n            privacy_info: {\n                op_type: 1,\n                type: visibleRangeMap[params.visibleRange],\n            },\n            post_loc: params.address\n                ? {\n                      name: params.address?.name,\n                      poi_id: params.address?.poi_id,\n                      poi_type: params.address?.poi_type,\n                      subname: params.address?.full_address,\n                  }\n                : null,\n            business_binds: \"\",\n        },\n        image_info: {\n            images: coverInfos.map((it) => ({\n                extra_info_json: JSON.stringify({\n                    mimeType: \"image/png\",\n                    image_metadata: {\n                        bg_color: \"\",\n                        origin_size: it.originSize,\n                    },\n                }),\n                file_id: it.ossFileId,\n                width: it.width,\n                height: it.height,\n                metadata: { source: -1 },\n                stickers: { floating: [], version: 2 },\n            })),\n        },\n        video_info: null,\n    };\n\n    // 自主声明\n    const userDeclarationBind = {\n        origin: 2,\n        photoInfo: {},\n        repostInfo: {},\n    };\n\n    if (params.selfDeclaration?.type === \"fictional-rendition\") {\n        // 虚拟演绎，仅供娱乐\n        userDeclarationBind.origin = 1;\n    } else if (params.selfDeclaration?.type === \"ai-generated\") {\n        // 笔记含AI合成内容\n        userDeclarationBind.origin = 2;\n    } else if (params.selfDeclaration?.type === \"source-statement\") {\n        // 内容来源声明\n        if (params.selfDeclaration.childType === \"self-labeling\") {\n            // 已自主标注\n            userDeclarationBind.origin = 3;\n        } else if (params.selfDeclaration.childType === \"self-shooting\") {\n            // 自主拍摄\n            userDeclarationBind.origin = 4;\n            const photoInfo: { photoPlace?: unknown; photoTime?: string } = {};\n\n            if (params.selfDeclaration.shootingLocation) {\n                // 拍摄地点\n                photoInfo.photoPlace = {\n                    name: params.selfDeclaration.shootingLocation.name,\n                    poiId: params.selfDeclaration.shootingLocation.poi_id,\n                    poiType: params.selfDeclaration.shootingLocation.poi_type,\n                    subname: params.selfDeclaration.shootingLocation.full_address,\n                };\n            }\n\n            if (params.selfDeclaration.shootingDate) {\n                // 拍摄日期\n                photoInfo.photoTime = params.selfDeclaration.shootingDate;\n            }\n\n            userDeclarationBind.photoInfo = photoInfo;\n        } else if (params.selfDeclaration.childType === \"transshipment\") {\n            // 来源转载\n            userDeclarationBind.origin = 5;\n\n            if (params.selfDeclaration.sourceMedia) {\n                // 来源媒体\n                userDeclarationBind.repostInfo = {\n                    source: params.selfDeclaration.sourceMedia,\n                };\n            }\n        }\n    }\n\n    const bizId =\n        params?.originalBind &&\n        (params.cookies.find((it) => it.name === \"x-user-id-creator.xiaohongshu.com\")?.value ||\n            (await proxyHttp\n                .api<{ data: { userDetail: { id: string } } }>(\n                    {\n                        method: \"get\",\n                        url: \"https://creator.xiaohongshu.com/api/galaxy/user/my-info\",\n                    },\n                    { retries: 3, retryDelay: 20, timeout: 3000 },\n                )\n                .then((userData) => userData?.data?.userDetail?.id)));\n\n    const business_binds = {\n        version: 1,\n        bizType: \"\",\n        noteId: \"\",\n        noteOrderBind: {},\n        // 发布时间 - 立即发布/定时发布\n        notePostTiming: params.isImmediatelyPublish ? {} : { postTime: params.scheduledPublish },\n        coProduceBind: { enable: !!params?.coProduceBind }, // 是否允许合拍\n        noteCopyBind: { copyable: !!params?.noteCopyBind }, // 关闭允许复制\n        optionRelationList: params.originalBind\n            ? [\n                  {\n                      // 原创声明\n                      type: \"ORIGINAL_STATEMENT\",\n                      relationList: [\n                          {\n                              bizId,\n                              bizType: \"ORIGINAL_STATEMENT\",\n                              extraInfo: \"{}\",\n                          },\n                      ],\n                  },\n              ]\n            : [],\n        ...(params?.groupBind\n            ? {\n                  groupBind: {\n                      groupId: params?.groupBind?.group_id,\n                      groupName: params.groupBind?.group_name,\n                      desc: params.groupBind?.desc,\n                      avatar: params.groupBind?.avatar,\n                  },\n              }\n            : { groupBind: {} }),\n        ...(params.selfDeclaration ? { userDeclarationBind } : {}),\n        ...(params?.collectionBind?.id ? { noteCollectionBind: { id: params.collectionBind.id } } : {}),\n    };\n\n    publishData.common.business_binds = JSON.stringify(business_binds);\n\n    const publishXsHeader = xsEncrypt.signHeadersPost(\"/web_api/sns/v2/note\", recordCookie, \"ugc\", publishData);\n\n    task._timerRecord.PrePublish = Date.now();\n\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n\n    if (MockPublish) {\n        const message = `文章模拟发布成功 ${http.proxyInfo}`;\n        const data = \"123456789\";\n\n        await updateTaskState?.({\n            state: TaskState.SUCCESS,\n            result: {\n                response: data,\n            },\n        });\n        return success(data, message);\n    }\n\n    // task.logger.info(`[xiaohongshuPublish] publishData: ${JSON.stringify(publishData)} `);\n\n    // 发布\n    let publishResult: CommonResponse<{ id: string }>;\n    try {\n        publishResult = await proxyHttp.api<CommonResponse<{ id: string }>>(\n            {\n                method: \"post\",\n                url: \"https://edith.xiaohongshu.com/web_api/sns/v2/note\",\n                data: publishData,\n                headers: publishXsHeader,\n                defaultErrorMsg: \"文章发布异常，请稍后重试。\",\n            },\n            { retries: 2, retryDelay: 500, timeout: 12 * 1000 },\n        );\n    } catch (error) {\n        const handledError = Http.handleApiError(error);\n        // 代理连接超时(599) 与网络/服务端错误(500/502/503/504)：重试耗尽后直接返回代理错误信息，\n        // 不再 throw 走 executeAction 的 RPA 兜底。code 归一为 414，使 executeAction 视为终止结果。\n        const isProxyOrNetworkError = [599, 500, 502, 503, 504].includes(handledError.code);\n        if (isProxyOrNetworkError) {\n            // 区分代理错误和普通网络错误\n            const isProxyRequest = handledError.extra?.isProxyRequest === true;\n            const errorType = handledError.code === 599 || isProxyRequest ? \"代理错误\" : \"网络错误\";\n            const message = `文章发布失败，${errorType}：${handledError.message}${task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n            task.logger.error(`[xiaohongshuPublish] ${errorType}，直接返回: ${message}`, stringifyError(handledError));\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: message,\n            });\n            return { code: 414, data: \"\", message };\n        }\n        // 其它错误码维持原有逻辑，抛出以便上层 executeAction 走 RPA 兜底\n        throw error;\n    }\n\n    reportLogger({\n        token: params.huiwenToken || \"\",\n        enverionment: task.enverionment || \"development\",\n        postId: params.articleId,\n        eip: proxyHttp.proxyInfo,\n        accountId: params.accountId,\n        uid: params.uid,\n        platform: \"xiaohongshu\",\n        publishParams: publishData,\n    });\n\n    task.logger.info(`[xiaohongshuPublish] publishResult: ${JSON.stringify(publishResult)} `);\n\n    const isSuccess = publishResult.success;\n    const message = `文章发布${isSuccess ? \"成功\" : `失败，原因：${publishResult.msg}`}${task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? publishResult?.data?.id || \"\" : \"\";\n\n    if (!isSuccess) {\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: message,\n        });\n        return { code: 414, data, message };\n    }\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: {\n            response: data,\n        },\n    });\n    // 临时返回结束\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import path from \"node:path\";\nimport { CookieMap, downloadImage, getFilenameFromUrl, Locator, Response, success, TaskState } from \"@iflyrpa/share\";\n// import { Xhshow } from \"../../utils/xhsXsEncrypt\";\nimport type { PublishAction } from \"./index\";\n// const GenXSCommon = require(\"../../utils/XhsXsCommonEnc.js\") as (a1cookie: string, x_t: string|number, x_s:string) => string;\n\n// 小红书参数加密器\n// const xsEncrypt = new Xhshow();\n\nexport const rpaAction: PublishAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n\n    const commonCookies = {\n        path: \"/\",\n        sameSite: \"lax\",\n        secure: false,\n        domain: \".xiaohongshu.com\",\n        url: \"https://creator.xiaohongshu.com\",\n        httpOnly: true,\n    };\n\n    const page = await task.createPage({\n        show: task.debug,\n        url: params.url || \"https://creator.xiaohongshu.com/publish/publish\",\n        cookies: params.cookies?.map((it) => ({ ...it, ...commonCookies })),\n    });\n\n    await updateTaskState?.({\n        state: TaskState.ACTION,\n        connectAddress: task.steelConnector?.getProxyUrl(task.sessionId || \"\", \"v1/sessions/debug\"),\n        sessionId: task.sessionId,\n    });\n    const tmpCachePath = task.getTmpPath();\n\n    // const interceptUrls = [\n    // \t'/api/media/v1/upload/creator/permit',\n    // \t'/api/galaxy/v2/creator/activity_center/list',\n    // \t'/web_api/sns/v5/creator/topic/template/list',\n    // \t'/web_api/sns/v5/creator/file/encryption',\n    // \t'/web_api/sns/capa/postgw/topic/batch_customized',\n    // \t'/web_api/sns/v2/note'\n    // ];\n\n    // await page.route('**', async (route, request) => {\n    // \tconst url = request.url();\n    // \tif (interceptUrls.some(pattern => url.includes(pattern))) {\n    // \t\tconst urlObj = new URL(url);\n    // \t\tconst fetchCoverUrl = urlObj.pathname + urlObj.search;\n    //         const fetchCoverParams = Object.fromEntries(new URLSearchParams(urlObj.search));\n    // \t\tconst xt = Date.now().toString();\n    //\n    // \t\tconst a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    // \t\tif (!a1Cookie) {\n    // \t\t\tawait route.fulfill({\n    // \t\t\t\tstatus: 200,\n    // \t\t\t\tcontentType: 'application/json',\n    // \t\t\t\tbody: JSON.stringify({ code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: \"\" })\n    // \t\t\t});\n    // \t\t\treturn;\n    // \t\t}\n    //\n    // \t\tconst isNoteRequest = urlObj.pathname.includes(interceptUrls[5]);\n    //\n    // \t\tconst xs = await (isNoteRequest\n    // \t\t\t? (async () => {\n    // \t\t\t\tconst publishData = JSON.parse(request.postData() || \"\")\n    // \t\t\t\treturn xsEncrypt.signXsPost(interceptUrls[5], a1Cookie,\"xhs-pc-web\" ,publishData);\n    // \t\t\t  })(): xsEncrypt.signXsGet(urlObj.pathname, a1Cookie, \"xhs-pc-web\" , fetchCoverParams))\n    //\n    //         const xscommon = GenXSCommon(a1Cookie, xt, xs)\n    //\n    // \t\tconst newHeaders = {\n    // \t\t\t...request.headers(),\n    // \t\t\t'x-s': xs,\n    //             'x-s-common':xscommon\n    // \t\t};\n    //\n    // \t\tawait route.continue({ headers: newHeaders });\n    // \t}else {\n    // \t\tawait route.continue();\n    // \t}\n    // });\n\n    // 通用的选择地点\n    const selectAddress = async (selector: Locator, address: string) => {\n        const instance = typeof selector === \"string\" ? page.locator(selector) : selector;\n        await instance.click();\n        await instance.locator(\"input\").fill(address);\n        const poperInstance = page.locator('.d-popover:not([style*=\"display: none\"]) .d-options .d-grid-item');\n        await poperInstance.first().waitFor();\n        await poperInstance.first().click();\n    };\n\n    // 通用的选择日期\n    const selectDate = async (selector: string | Locator, date: string) => {\n        const instance = typeof selector === \"string\" ? page.locator(selector) : selector;\n        await instance.click();\n        await instance.fill(date);\n        await instance.blur();\n    };\n\n    // 查找显示的 popover 弹窗\n    const getPoperInstance = async (): Promise<Locator> => {\n        await page.waitForTimeout(500);\n        const elements = page.locator(\".d-popover\");\n        const count = await elements.count();\n        const visibleElements: (typeof elements)[] = [];\n\n        for (let i = 0; i < count; i++) {\n            const element = elements.nth(i);\n            const style = await element.getAttribute(\"style\");\n            if (style && !style.includes(\"display: none\")) {\n                visibleElements.push(element);\n            }\n        }\n\n        if (visibleElements.length > 0) {\n            return visibleElements[visibleElements.length - 1];\n        }\n\n        throw new Error(\"未找到 popover 弹窗\");\n    };\n\n    // 查找显示的 dialog 弹窗\n    const getDialogInstance = async (): Promise<Locator> => {\n        await page.waitForTimeout(1000);\n        const elements = page.locator(\".el-dialog\");\n        return elements.last();\n    };\n\n    // 自动化脚本\n    // ----------------------------------------------------------------------------------\n\n    // 等待登录成功\n    try {\n        await page.waitForSelector(\"#CreatorPlatform\", { state: \"visible\" });\n    } catch (error) {\n        return { code: 414, message: \"登录失效\", data: page.url() };\n    }\n\n    // 跳转到发布页面\n    await page.locator(\"#content-area .menu-container .publish-video .btn-wrapper .btn-inner\").click();\n\n    // 点击上传图文\n    await page\n        .locator('.header-tabs .creator-tab:not([style*=\"-9999px\"])')\n        .filter({ hasText: /^上传图文$/ })\n        .click();\n\n    // 获取待上传图片的本地路径\n    const images = await Promise.all(\n        params.banners.map((url) => {\n            const fileName = getFilenameFromUrl(url);\n            return downloadImage(url, path.join(tmpCachePath, fileName));\n        }),\n    );\n\n    // 选择文件\n    const fileChooser = await page.$(\"input.upload-input\");\n    if (fileChooser) await fileChooser.setInputFiles(images);\n\n    // 填写标题\n    const titleInstance = page.locator(\".input input\");\n    await titleInstance.waitFor({ state: \"visible\", timeout: 1000 * 50 });\n    await titleInstance.click();\n    await titleInstance.fill(params.title);\n\n    // 填写正文\n    const descInstance = page.locator(\".editor-container .tiptap.ProseMirror\");\n    await descInstance.click();\n    await descInstance.pressSequentially(params.content.replace(/#.*?\\[.*?]#/g, \"\"));\n\n    // 填写话题\n    if (params.topic && params.topic.length > 0) {\n        for (const it of params.topic) {\n            await descInstance.pressSequentially(`#${it.name}`);\n            await page.locator(\"#creator-editor-topic-container\").waitFor({ state: \"visible\" });\n            await page.waitForTimeout(500);\n            await page.locator(\"#creator-editor-topic-container .item\").first().click();\n        }\n    }\n\n    if (params.address) {\n        // 填写地点\n        await selectAddress(page.locator(\".address-card-wrapper .d-select-wrapper\"), params.address.name);\n    }\n\n    if (params.selfDeclaration) {\n        // 自主声明\n        await page.locator(\".declaration-wrapper .d-select-wrapper\").click();\n        const poperInstance = await getPoperInstance();\n        const selfDeclarationInstance = poperInstance.locator(\".d-options .d-option\");\n        if (params.selfDeclaration.type === \"fictional-rendition\") {\n            await selfDeclarationInstance.filter({ hasText: \"虚构演绎，仅供娱乐\" }).click();\n        } else if (params.selfDeclaration.type === \"ai-generated\") {\n            await selfDeclarationInstance.filter({ hasText: \"笔记含AI合成内容\" }).click();\n        } else if (params.selfDeclaration.type === \"source-statement\") {\n            await selfDeclarationInstance.filter({ hasText: /内容来源声明/ }).click();\n            // 内容来源声明二级菜单\n            const selfDeclarationSecondaryMenuInstance = (await getPoperInstance()).locator(\".d-options .d-option\");\n            // 等待元素出现\n            await selfDeclarationSecondaryMenuInstance.first().waitFor();\n            if (params.selfDeclaration.childType === \"self-labeling\") {\n                await selfDeclarationSecondaryMenuInstance.filter({ hasText: \"已在正文中自主标注\" }).click();\n            } else if (params.selfDeclaration.childType === \"self-shooting\") {\n                const { shootingDate, shootingLocation } = params.selfDeclaration;\n                await selfDeclarationSecondaryMenuInstance.filter({ hasText: \"自主拍摄\" }).click();\n                // 自主拍摄弹窗\n                const selfShootingPopup = await getDialogInstance();\n                const hasCustomContent = shootingDate || shootingLocation;\n\n                // 选择拍摄地点\n                if (shootingLocation) {\n                    await selectAddress(selfShootingPopup.locator(\".address-input\"), shootingLocation.name);\n                }\n                // 选择拍摄日期\n                if (shootingDate) {\n                    await selectDate(selfShootingPopup.locator(\".date-picker input\"), shootingDate);\n                }\n\n                await selfShootingPopup\n                    .locator(\"footer button\")\n                    .filter({ hasText: hasCustomContent ? \"确认\" : \"取消\" })\n                    .click();\n            } else if (params.selfDeclaration.childType === \"transshipment\") {\n                await selfDeclarationSecondaryMenuInstance.filter({ hasText: \"来源转载\" }).click();\n                // 来源媒体弹窗\n                const selfShootingPopup = await getDialogInstance();\n\n                const sourceMedia = params.selfDeclaration.sourceMedia;\n                if (sourceMedia) {\n                    await selfShootingPopup.locator(\".el-input input\").fill(sourceMedia);\n                }\n\n                await selfShootingPopup\n                    .locator(\"footer button\")\n                    .filter({ hasText: sourceMedia ? \"确认\" : \"取消\" })\n                    .click();\n            }\n        }\n    }\n\n    // 可见范围 - 仅自己可见\n    if (params.visibleRange === \"private\") {\n        await page.locator(\".publish-page-content-setting-content .d-select-wrapper\").last().click();\n        const poperInstance = await getPoperInstance();\n        await poperInstance.locator(\".d-options .d-option\").filter({ hasText: \"仅自己可见\" }).click();\n    }\n\n    task._timerRecord.PrePublish = Date.now();\n\n    // 发布时间选择：立即发布 / 定时发布\n    const releaseTimeInstance = page\n        .locator(\"label\")\n        .filter({ hasText: params.isImmediatelyPublish ? \"立即发布\" : \"定时发布\" });\n    await releaseTimeInstance.click();\n\n    if (params.scheduledPublish) {\n        // 自定义发布时间\n        await selectDate(\".date-picker input\", params.scheduledPublish);\n    }\n\n    // 等待图片上传完成：检测 .progress-container 消失且发布按钮存在\n    await page.waitForFunction(\n        () => {\n            const publishBtn = Array.from(document.querySelectorAll(\"button\")).find(\n                (b) => b.textContent?.trim() === \"发布\",\n            );\n            const uploading = document.querySelector(\".progress-container\");\n            return !!publishBtn && !uploading;\n        },\n        { timeout: 180000, polling: 2000 },\n    );\n\n    const response = await new Promise<string>((resolve, reject) => {\n        // 定义响应处理函数\n        const handleResponse = async (response: Response) => {\n            if (response.url().includes(\"/web_api/sns/v2/note\")) {\n                const jsonResponse = await response.json();\n                page.off(\"response\", handleResponse);\n                if (jsonResponse?.success) {\n                    resolve(jsonResponse?.data?.id);\n                } else {\n                    reject(new Error(jsonResponse?.msg || \"发布失败\"));\n                }\n            }\n        };\n\n        // 开始监听响应事件\n        page.on(\"response\", handleResponse);\n\n        page.locator(\".publish-page-publish-btn button\").filter({ hasText: \"发布\" }).click();\n    });\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: {\n            response,\n        },\n    });\n\n    // 关闭页面\n    await page.close();\n\n    return success(response);\n};\n","import path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, Locator, Response, success, TaskState } from \"@iflyrpa/share\";\nimport { Page } from \"playwright-core\";\nimport { MockPublish } from \"../../types\";\nimport { ProxyAgent } from \"../../utils/proxy\";\nimport type { PublishAction } from \"./index\";\n\nexport const rpaAction_Server: PublishAction = async (task, params) => {\n    if (params.originalBind && params?.selfDeclaration?.type === \"source-statement\") {\n        return { code: 414, message: \"已声明原创不可选择“来源转载”\", data: \"\" };\n    }\n\n    const defaultPage = task.steelBrowserContext?.pages()[0];\n    if (defaultPage) {\n        // 如果 route 已经注册过，就不重复注册\n        if (!(defaultPage as any)._routeRegistered) {\n            (defaultPage as any)._routeRegistered = true;\n\n            const blockedPatterns = [\n                \"**/ffmpeg-core.wasm*\",\n                \"**/apm-fe.xiaohongshu.com*\",\n                \"**/t2.xiaohongshu.com*\",\n                \"**/fe-video-qc.xhscdn.com*\",\n            ].map((pattern) => new RegExp(pattern.replace(/\\*\\*/g, \".*\").replace(/\\*/g, \"[^/]*\")));\n\n            await defaultPage.route(\"**/*\", async (route) => {\n                const req = route.request();\n                const url = req.url();\n\n                // 是否命中屏蔽规则\n                const blocked = blockedPatterns.some((regex) => regex.test(url));\n                if (!blocked) {\n                    return route.continue();\n                }\n\n                if (req.method() === \"OPTIONS\") {\n                    console.log(\"处理 OPTIONS 预检：\", url);\n                    await route.fulfill({\n                        status: 204,\n                        headers: {\n                            \"access-control-allow-origin\": \"*\",\n                            \"access-control-allow-methods\": \"GET,POST,OPTIONS,PUT,DELETE\",\n                            \"access-control-allow-headers\": \"*\",\n                        },\n                        body: \"\",\n                    });\n                    return;\n                }\n\n                await route.fulfill({\n                    status: 204,\n                    body: \"\",\n                });\n            });\n        }\n    }\n\n    const tmpCachePath = task.getTmpPath();\n    task.logger?.info(\"==>进入RPA操作：任务开始,下载图片开始...\");\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    const imagePromise = Promise.all(\n        params.banners.map((url) => {\n            const fileName = getFilenameFromUrl(url);\n            return downloadImage(url, path.join(tmpCachePath, fileName));\n        }),\n    );\n\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n\n    task.logger?.info(\"==>开始打开小红书页面...\");\n    const page = await task.createPage({\n        show: task.debug,\n        cookies: params.cookies,\n        proxyUrl,\n        url: params.url || \"https://creator.xiaohongshu.com/publish/publish?source=official&from=menu&target=image\",\n        ...(params.viewport ? { viewport: params.viewport } : {}),\n    });\n    task.logger?.info(\"==>小红书页面打开成功\");\n\n    await updateTaskState?.({\n        state: TaskState.ACTION,\n        connectAddress: task.steelConnector?.getProxyUrl(task.sessionId || \"\", \"v1/sessions/debug\"),\n        sessionId: task.sessionId,\n    });\n\n    const clickTimeout = 1000 * 10;\n\n    // 通用的选择地点\n    const selectAddress = async (selector: Locator, address: string) => {\n        const instance = typeof selector === \"string\" ? page.locator(selector) : selector;\n        await instance.click({ timeout: clickTimeout });\n        await instance.locator(\"input\").fill(address);\n        const poperInstance = page.locator('.d-popover:not([style*=\"display: none\"]) .d-options .d-grid-item');\n        await poperInstance.first().waitFor();\n        await poperInstance.first().click({ timeout: clickTimeout });\n    };\n\n    // 通用的选择日期\n    const selectDate = async (selector: string | Locator, date: string) => {\n        const instance = typeof selector === \"string\" ? page.locator(selector) : selector;\n        await instance.click({ timeout: clickTimeout });\n        await instance.fill(date);\n        await instance.blur();\n    };\n\n    // 查找显示的 popover 弹窗\n    const getPoperInstance = async (): Promise<Locator> => {\n        await page.waitForTimeout(500);\n        const elements = page.locator(\".d-popover\");\n        const count = await elements.count();\n        const visibleElements: (typeof elements)[] = [];\n\n        for (let i = 0; i < count; i++) {\n            const element = elements.nth(i);\n            const style = await element.getAttribute(\"style\");\n            if (style && !style.includes(\"display: none\")) {\n                visibleElements.push(element);\n            }\n        }\n\n        if (visibleElements.length > 0) {\n            return visibleElements[visibleElements.length - 1];\n        }\n\n        throw new Error(\"未找到 popover 弹窗\");\n    };\n\n    // 查找显示的 dialog 弹窗\n    const getDialogInstance = async (): Promise<Locator> => {\n        await page.waitForTimeout(1000);\n        const elements = page.locator(\".el-dialog\");\n        return elements.last();\n    };\n\n    // 自动化脚本\n    // ----------------------------------------------------------------------------------\n\n    // 等待登录成功\n    try {\n        await page.waitForSelector(\"#CreatorPlatform\", { state: \"attached\" });\n    } catch (error) {\n        return { code: 414, message: \"登录失效\", data: page.url() };\n    }\n    // 获取待上传图片的本地路径\n    const images = await imagePromise;\n\n    task.logger?.info(`==>图片下载完成，共 ${images.length} 张，开始上传图片...`);\n\n    const fileChooser = await page.waitForSelector(\"input.upload-input\", { timeout: 1000 * 10 });\n\n    if (fileChooser) {\n        await fileChooser.setInputFiles(images, { timeout: 60 * 1000 }).catch((err) => {\n            task.logger?.error(`设置上传文件失败：${err.message}`);\n        });\n    } else {\n        task.logger?.error(\"文件上传输入框未找到\");\n    }\n\n    task.logger?.info(\"==>图片上传完成，开始渲染预览图...\");\n\n    // 填写标题\n    const titleInstance = page.locator(\".input input\");\n    await titleInstance.waitFor({ state: \"attached\", timeout: 1000 * 60 });\n    await titleInstance.click({ timeout: clickTimeout * 24 });\n    task.logger?.info(\"==> 预览图渲染成功，开始RPA操作！\");\n    await titleInstance.fill(params.title);\n\n    // 填写正文\n    const descInstance = page.locator(\".editor-container .tiptap.ProseMirror\");\n    await descInstance.click({ timeout: clickTimeout });\n    await descInstance.fill(`${params.content.replace(/#.*?\\[.*?]#/g, \"\")}\\n`);\n    await page.keyboard.press(\"Control+End\");\n\n    // 填写话题\n    if (params.topic && params.topic.length > 0) {\n        for (const it of params.topic) {\n            await page.keyboard.insertText(`#${it.name}`);\n            await page.locator(\".ql-mention-loading\").waitFor({ state: \"detached\" });\n            await page.waitForTimeout(1000);\n            await page.locator(\"#creator-editor-topic-container .item.is-selected\").click({ timeout: clickTimeout });\n            await page.keyboard.press(\"Control+End\");\n        }\n    }\n\n    // 滚动到底部\n    const container = page.locator(\".plugin.editor-container\");\n    await container.focus();\n    await page.mouse.wheel(0, 500); // 向下滚动 500 像素\n\n    if (params.address) {\n        // 填写地点\n        await selectAddress(\n            page.locator(\".media-extension .address-input\").filter({ hasText: \"添加地点\" }),\n            params.address.name,\n        );\n    }\n\n    // 添加合集\n    if (params.collectionBind) {\n        await page\n            .locator(\".media-extension .collection-container\")\n            .filter({ hasText: \"添加合集\" })\n            .click({ timeout: clickTimeout });\n        const collectionName = params.collectionBind.name;\n        const collectionBindInstance = await getPoperInstance(); // 获取弹窗实例\n        const collectionItemInstance = collectionBindInstance.locator(\".d-grid-item .item-label\", {\n            hasText: collectionName,\n        });\n        await collectionBindInstance.locator(\".loading\").waitFor({ state: \"detached\" });\n        await collectionItemInstance.click({ timeout: clickTimeout });\n    }\n\n    // 选择群聊\n    if (params.groupBind) {\n        await page\n            .locator(\".media-extension .address-input\")\n            .filter({ hasText: \"选择群聊\" })\n            .click({ timeout: clickTimeout });\n        const groupBindName = params.groupBind.group_name;\n        const groupBindInstance = await getPoperInstance(); // 获取弹窗实例\n        const groupItemInstance = groupBindInstance.locator(\".d-grid-item .name\", { hasText: groupBindName });\n        await groupBindInstance.locator(\".loading\").waitFor({ state: \"detached\" });\n        await groupItemInstance.click({ timeout: clickTimeout });\n    }\n\n    // 原创声明\n    const OriginalBindBtn = page.locator(\".btn-text.red\", { hasText: \"去声明\" });\n    const isOriginalBindBtnVisible = await OriginalBindBtn.isVisible();\n    if (isOriginalBindBtnVisible && params.originalBind) {\n        await OriginalBindBtn.click({ timeout: clickTimeout });\n        const poperInstance = await getPoperInstance();\n        await poperInstance.locator(\".d-checkbox-simulator\").click({ timeout: clickTimeout }); // 勾选同意协议的复选框\n        await poperInstance.locator(\".footer .custom-button.bg-red\").click({ timeout: clickTimeout }); // 点击声明原创按钮\n    }\n\n    // 内容类型声明\n    if (params.selfDeclaration) {\n        // 自主声明\n        await page\n            .locator(\".media-settings .flexbox\")\n            .filter({ hasText: \"内容类型声明\" })\n            .locator(\".d-select-placeholder\")\n            .click({ timeout: clickTimeout });\n        const poperInstance = await getPoperInstance();\n        const selfDeclarationInstance = poperInstance.locator(\".d-options .d-option\");\n        if (params.selfDeclaration.type === \"fictional-rendition\") {\n            await selfDeclarationInstance.filter({ hasText: \"虚构演绎，仅供娱乐\" }).click({ timeout: clickTimeout });\n        } else if (params.selfDeclaration.type === \"ai-generated\") {\n            await selfDeclarationInstance.filter({ hasText: \"笔记含AI合成内容\" }).click({ timeout: clickTimeout });\n        } else if (params.selfDeclaration.type === \"source-statement\") {\n            await selfDeclarationInstance.filter({ hasText: /内容来源声明/ }).click({ timeout: clickTimeout });\n            // 内容来源声明二级菜单\n            const selfDeclarationSecondaryMenuInstance = (await getPoperInstance()).locator(\".d-options .d-option\");\n            // 等待元素出现\n            await selfDeclarationSecondaryMenuInstance.first().waitFor();\n            if (params.selfDeclaration.childType === \"self-labeling\") {\n                await selfDeclarationSecondaryMenuInstance\n                    .filter({ hasText: \"已在正文中自主标注\" })\n                    .click({ timeout: clickTimeout });\n            } else if (params.selfDeclaration.childType === \"self-shooting\") {\n                const { shootingDate, shootingLocation } = params.selfDeclaration;\n                await selfDeclarationSecondaryMenuInstance\n                    .filter({ hasText: \"自主拍摄\" })\n                    .click({ timeout: clickTimeout });\n                // 自主拍摄弹窗\n                const selfShootingPopup = await getDialogInstance();\n                const hasCustomContent = shootingDate || shootingLocation;\n\n                // 选择拍摄地点\n                if (shootingLocation) {\n                    await selectAddress(selfShootingPopup.locator(\".address-input\"), shootingLocation.name);\n                }\n                // 选择拍摄日期\n                if (shootingDate) {\n                    await selectDate(selfShootingPopup.locator(\".date-picker input\"), shootingDate);\n                }\n\n                await selfShootingPopup\n                    .locator(\"footer button\")\n                    .filter({ hasText: hasCustomContent ? \"确认\" : \"取消\" })\n                    .click({ timeout: clickTimeout });\n            } else if (params.selfDeclaration.childType === \"transshipment\") {\n                await selfDeclarationSecondaryMenuInstance\n                    .filter({ hasText: \"来源转载\" })\n                    .click({ timeout: clickTimeout });\n                // 来源媒体弹窗\n                const selfShootingPopup = await getDialogInstance();\n\n                const sourceMedia = params.selfDeclaration.sourceMedia;\n                if (sourceMedia) {\n                    await selfShootingPopup.locator(\".el-input input\").fill(sourceMedia);\n                }\n\n                await selfShootingPopup\n                    .locator(\"footer button\")\n                    .filter({ hasText: sourceMedia ? \"确认\" : \"取消\" })\n                    .click({ timeout: clickTimeout });\n            }\n        }\n    }\n\n    // 可见范围 - 仅自己可见\n    if (params.visibleRange !== \"public\") {\n        await page\n            .locator(\".media-settings .flexbox\")\n            .filter({ hasText: \"可见范围\" })\n            .locator(\".d-select-wrapper\")\n            .click({ timeout: clickTimeout });\n        const poperInstance = await getPoperInstance();\n        const visibleText = params.visibleRange === \"friends\" ? \"好友可见\" : \"仅自己可见\";\n        await poperInstance\n            .locator(\".d-options .custom-option\")\n            .filter({ hasText: visibleText })\n            .click({ timeout: clickTimeout });\n    }\n\n    async function setSwitch(page: Page, label: string, target: boolean) {\n        const item = page.locator(\".d-new-form-item\", {\n            has: page.locator(\".d-form-item__label\", { hasText: label }),\n        });\n\n        const switchUI = item.locator(\".d-switch-simulator\");\n        const cls = await switchUI.getAttribute(\"class\");\n        const isChecked = cls?.includes(\"checked\") || true;\n\n        if (isChecked !== target) {\n            await switchUI.click({ timeout: clickTimeout });\n        }\n    }\n    if (!params.coProduceBind) {\n        await setSwitch(page, \"允许合拍\", false);\n    }\n    if (!params.noteCopyBind) {\n        await setSwitch(page, \"允许正文复制\", false);\n    }\n\n    // task._timerRecord.PrePublish = Date.now();\n\n    const releaseTimeInstance = page\n        .locator(\"label\")\n        .filter({ hasText: params.isImmediatelyPublish ? \"立即发布\" : \"定时发布\" });\n    await releaseTimeInstance.click({ timeout: clickTimeout });\n\n    if (params.scheduledPublish) {\n        // 自定义发布时间\n        await selectDate(\".date-picker input\", params.scheduledPublish);\n    }\n\n    // 等待图片上传完成\n    const imgPreviewArea = page.locator(\".img-preview-area\");\n    try {\n        await imgPreviewArea.locator(\".mask.uploading\").waitFor({\n            state: \"hidden\",\n            timeout: 50000,\n        });\n    } catch (error) {\n        throw new Error(\"上传图片超时，请重试！\");\n    }\n\n    if (MockPublish) {\n        const message = \"文章模拟发布成功\";\n        const data = \"123456789\";\n\n        await updateTaskState?.({\n            state: TaskState.SUCCESS,\n            result: {\n                response: data,\n            },\n        });\n        return success(data, message);\n    }\n\n    const response = await new Promise<{ success: boolean; msg: string; data?: { id: string } }>((resolve) => {\n        // 定义响应处理函数\n        const handleResponse = async (response: Response) => {\n            if (response.url().includes(\"/web_api/sns/v2/note\")) {\n                const jsonResponse = await response.json();\n                page.off(\"response\", handleResponse);\n                resolve(jsonResponse);\n            }\n        };\n\n        // 开始监听响应事件\n        page.on(\"response\", handleResponse);\n\n        page.locator(\".submit .publishBtn\").click({ timeout: clickTimeout });\n\n        // 检查错误toast\n        page.waitForSelector(\".d-toast-icon-danger\", { state: \"visible\", timeout: 2000 })\n            .then(async () => {\n                // 等待toast内容完全渲染\n                await page.waitForTimeout(300);\n                const toastDesc = await page.locator(\".d-toast-description\").textContent();\n                const desc = toastDesc?.trim();\n                page.off(\"response\", handleResponse);\n                resolve({ success: false, msg: desc || \"未知错误\" });\n            })\n            .catch(() => {\n                // toast 未出现,继续等待接口响应\n            });\n\n        // 添加整体超时保护\n        setTimeout(() => {\n            page.off(\"response\", handleResponse);\n            resolve({ success: false, msg: \"发布超时\" });\n        }, 7000);\n    });\n\n    if (!response?.success) {\n        const msg = `发布失败：${response?.msg || \"未知错误\"}`;\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: msg,\n        });\n        await page.close();\n        return { code: 414, message: msg, data: \"\" };\n    }\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: {\n            response: response?.data?.id || \"\",\n        },\n    });\n\n    // 关闭页面\n    await page.close();\n    return success(response?.data?.id || \"\");\n};\n","import crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success, TaskState } from \"@iflyrpa/share\";\nimport { AxiosProxyParams, MockPublish } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n// import type { CollectionResponse } from \"../getXhsCollection\";\nimport type { PublishAction } from \".\";\n\nconst encode_mnsv2 = require(\"../../utils/xhs_ob/x_s.encoder.js\") as (\n    mnsv2: string,\n    platform: string,\n    req_type: string,\n) => string;\n\n// 生成 MD5\nfunction Md5(input: string): string {\n    return crypto.createHash(\"md5\").update(input).digest(\"hex\");\n}\n\ninterface CommonResponse<T = unknown> {\n    msg: string;\n    data: T;\n    proxyInfo?: Record<string, unknown>;\n    code: number;\n    success: boolean;\n    result?: number;\n}\n\ninterface UploadTempPermit<T = string[]> {\n    bucket: string;\n    uploadAddr: string;\n    fileIds: T;\n    token: string;\n}\n\nconst errnoMap: Record<number, string> = {\n    \"-1\": \"未知拦截器错误，请稍后重试。\",\n    915: \"所属C端账号手机号被修改，请重新登录\",\n    914: \"所属C端账号密码被修改，请重新登录\",\n    903: \"账户已登出，需重新登陆重试！\",\n    902: \"登录已过期，请重新登录！\",\n    906: \"账号存在风险，请重新登录！\",\n    \"-9136\": \"因违反社区规范禁止发笔记，请检查账号状态！\",\n};\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport const rpaAction_Server_Mock: PublishAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n\n    const tmpCachePath = task.getTmpPath();\n    if (\n        params?.selfDeclaration?.type === \"source-statement\" &&\n        params.selfDeclaration.childType === \"transshipment\" &&\n        params.originalBind\n    ) {\n        return { code: 414, message: \"原创声明与转载声明互斥，请重新选择后发布！\", data: \"\" };\n    }\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) {\n        return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: \"\" };\n    }\n\n    const defaultPage = task.steelBrowserContext?.pages()[0];\n    if (defaultPage) {\n        // 如果 route 已经注册过，就不重复注册\n        if (!(defaultPage as any)._routeRegistered) {\n            (defaultPage as any)._routeRegistered = true;\n\n            const blockedPatterns = [\n                \"**/ffmpeg-core.wasm*\",\n                \"**/apm-fe.xiaohongshu.com*\",\n                \"**/t2.xiaohongshu.com*\",\n                \"**/fe-video-qc.xhscdn.com*\",\n            ].map((pattern) => new RegExp(pattern.replace(/\\*\\*/g, \".*\").replace(/\\*/g, \"[^/]*\")));\n\n            await defaultPage.route(\"**/*\", async (route) => {\n                const req = route.request();\n                const url = req.url();\n\n                // 是否命中屏蔽规则\n                const blocked = blockedPatterns.some((regex) => regex.test(url));\n                if (!blocked) {\n                    return route.continue();\n                }\n\n                if (req.method() === \"OPTIONS\") {\n                    console.log(\"处理 OPTIONS 预检：\", url);\n                    await route.fulfill({\n                        status: 204,\n                        headers: {\n                            \"access-control-allow-origin\": \"*\",\n                            \"access-control-allow-methods\": \"GET,POST,OPTIONS,PUT,DELETE\",\n                            \"access-control-allow-headers\": \"*\",\n                        },\n                        body: \"\",\n                    });\n                    return;\n                }\n\n                await route.fulfill({\n                    status: 204,\n                    body: \"\",\n                });\n            });\n        }\n    }\n\n    const pagePromise = task.createPage({\n        // 异步创建页面\n        show: task.debug,\n        cookies: params.cookies,\n        url: params.url || \"https://creator.xiaohongshu.com/statistics/account/v2?source=official\",\n    });\n    await updateTaskState?.({ state: TaskState.ACTION });\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.xiaohongshu.com\",\n        referer: \"https://creator.xiaohongshu.com/\",\n        \"user-agent\":\n            \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36\",\n    };\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n\n    const args: AxiosProxyParams = [\n        { headers },\n        task.logger,\n        params.proxyLoc,\n        params.accountId,\n        \"xiaohongshu-rpa\", // 业务标识\n    ];\n\n    const http = new Http({ headers });\n    const proxyHttp = new Http(...args);\n\n    // 添加响应拦截器\n    proxyHttp.addResponseInterceptor<CommonResponse>((response) => {\n        const responseData = response?.data;\n\n        // 检查响应中的 errno 字段\n        if (\n            (response && responseData?.code && responseData.code !== 0) ||\n            (responseData?.code && !responseData.success)\n        ) {\n            const errmsg =\n                errnoMap[responseData.code] || response.config.defaultErrorMsg || \"文章发布异常，请稍后重试。\";\n\n            return {\n                code: errnoMap[responseData.code] ? 414 : 500,\n                message: errmsg,\n                data: responseData,\n            };\n        }\n    });\n\n    // 0. 获取上传 token\n    const fetchCoverUrl = \"/api/media/v1/upload/creator/permit\";\n    const fetchCoverParams = {\n        biz_name: \"spectrum\",\n        scene: \"image\",\n        file_count: params.banners.length,\n        version: 1,\n        source: \"web\",\n    };\n    const fetchCoverXsHeader = xsEncrypt.signHeadersGet(fetchCoverUrl, recordCookie, \"ugc\", fetchCoverParams);\n    const uploadInfos: UploadTempPermit<string>[] = [];\n    if (params.banners.length > 18) {\n        // 分批次获取 coverId\n        const num = Math.ceil(params.banners.length / 14);\n        for (let i = 0; i < num; i++) {\n            const start = i * 14;\n            const end = Math.min(start + 14, params.banners.length);\n            const batchParams = {\n                ...fetchCoverParams,\n                file_count: end - start,\n            };\n            const batchCoverIdInfo = await proxyHttp.api<CommonResponse<{ uploadTempPermits: UploadTempPermit[] }>>(\n                {\n                    method: \"get\",\n                    baseURL: \"https://creator.xiaohongshu.com\",\n                    url: fetchCoverUrl,\n                    defaultErrorMsg: \"获取小红书用户信息失败，请稍后重试发布。\",\n                    headers: fetchCoverXsHeader,\n                    params: fetchCoverParams,\n                },\n                { retries: 3, retryDelay: 500, timeout: 8000 },\n            );\n            for (const item of batchCoverIdInfo?.data?.uploadTempPermits ?? []) {\n                for (const fileId of item?.fileIds ?? []) {\n                    uploadInfos.push({\n                        bucket: item.bucket || \"\",\n                        uploadAddr: item.uploadAddr || \"\",\n                        fileIds: fileId,\n                        token: item.token || \"\",\n                    });\n                }\n            }\n        }\n    } else {\n        const coverIdInfo = await proxyHttp.api<CommonResponse<{ uploadTempPermits: UploadTempPermit[] }>>(\n            {\n                method: \"get\",\n                baseURL: \"https://creator.xiaohongshu.com\",\n                url: fetchCoverUrl,\n                defaultErrorMsg: \"获取小红书用户信息失败，请稍后重试发布。\",\n                headers: fetchCoverXsHeader,\n                params: fetchCoverParams,\n            },\n            { retries: 3, retryDelay: 500, timeout: 8000 },\n        );\n        for (const item of coverIdInfo?.data?.uploadTempPermits ?? []) {\n            for (const fileId of item?.fileIds ?? []) {\n                uploadInfos.push({\n                    bucket: item.bucket || \"\",\n                    uploadAddr: item.uploadAddr || \"\",\n                    fileIds: fileId,\n                    token: item.token || \"\",\n                });\n            }\n        }\n    }\n    if (uploadInfos.length < params.banners.length)\n        return { code: 414, message: \"可用 OSS bucket 数量不足，无法上传所有图片！\", data: \"\" };\n\n    if (uploadInfos.length === 0) return { code: 414, message: \"图片上传失败，请稍后重试！\", data: \"\" };\n\n    const availableBuckets = Array.from({ length: uploadInfos.length }, (_, i) => i);\n\n    const uploadFile = async (\n        url: string,\n        index: number,\n    ): Promise<{\n        ossFileId: string;\n        ossToken: string;\n    }> => {\n        const fileName = getFilenameFromUrl(url);\n        const localUrl = await downloadImage(url, path.join(tmpCachePath, fileName));\n        const fileBuffer = fs.readFileSync(localUrl);\n\n        const MAX_RETRIES = uploadInfos.length;\n        task.logger.debug(`上传图片 ${index + 1}：尝试使用最多 ${MAX_RETRIES} 个 bucket`);\n        let attempt = 0;\n\n        while (attempt < MAX_RETRIES) {\n            // 分配 bucket\n            const ossBucketIndex = availableBuckets.shift(); // 移除并获取第一个可用 bucket\n\n            if (ossBucketIndex === undefined) {\n                return { ossFileId: \"\", ossToken: \"\" }; // 没有可用 bucket\n            }\n\n            const currentInfo = uploadInfos[ossBucketIndex];\n            const ossFileId = currentInfo.fileIds;\n            const ossToken = currentInfo.token;\n            const ossDomain = currentInfo.uploadAddr;\n\n            try {\n                await http.api(\n                    {\n                        method: \"put\",\n                        url: `https://${ossDomain}/${ossFileId}`,\n                        data: fileBuffer,\n                        headers: {\n                            \"x-cos-security-token\": ossToken,\n                        },\n                        defaultErrorMsg: \"图片上传异常，请稍后重试发布。\",\n                    },\n                    { timeout: 60000 },\n                );\n                return { ossFileId, ossToken };\n            } catch (error) {\n                task.logger.warn(\n                    `上传图片 ${index + 1}：使用 bucket ${ossDomain} 失败，尝试下一个可用 bucket。错误信息：${(error as Error).message}`,\n                );\n                attempt++;\n            }\n        }\n        return { ossFileId: \"\", ossToken: \"\" }; // 所有尝试失败\n    };\n\n    const coverInfos = await Promise.all(params.banners.map((it, idx) => uploadFile(it, idx)));\n    const invalidUpload = coverInfos.find((it) => it.ossToken === \"\" || it.ossFileId === \"\");\n    if (invalidUpload) return { code: 414, message: \"图片上传异常，请稍后重试发布。\", data: \"\" };\n\n    if (params.topic && params.topic.length > 0) {\n        await Promise.all(\n            params.topic.map(async (topic) => {\n                if (!topic.id) {\n                    const topicData = { topic_names: topic.name };\n                    const topicXsHeader = xsEncrypt.signHeadersPost(\n                        \"/web_api/sns/capa/postgw/topic/batch_customized\",\n                        recordCookie,\n                        \"ugc\",\n                        topicData,\n                    );\n\n                    const createTopic = await proxyHttp.api(\n                        {\n                            method: \"POST\",\n                            url: \"https://edith.xiaohongshu.com/web_api/sns/capa/postgw/topic/batch_customized\",\n                            headers: topicXsHeader,\n                            data: topicData,\n                            defaultErrorMsg: \"话题创建异常，请稍后重试。\",\n                        },\n                        { retries: 3, retryDelay: 20, timeout: 3000 },\n                    );\n                    Object.assign(topic, createTopic?.data?.topic_infos[0]);\n                }\n            }),\n        );\n    }\n\n    const visibleRangeMap = {\n        public: 0,\n        private: 1,\n        friends: 4,\n    };\n\n    const publishData = {\n        common: {\n            ats: [],\n            biz_relations: [],\n            desc: params?.content,\n            goods_info: {},\n            hash_tag: params.topic || [],\n            note_id: \"\",\n            source: JSON.stringify({\n                type: \"web\",\n                ids: \"\",\n                extraInfo: '{\"systemId\":\"web\"}',\n            }),\n            title: params?.title,\n            type: \"normal\",\n            privacy_info: {\n                op_type: 1,\n                type: visibleRangeMap[params.visibleRange],\n            },\n            post_loc: params.address\n                ? {\n                      name: params.address?.name,\n                      poi_id: params.address?.poi_id,\n                      poi_type: params.address?.poi_type,\n                      subname: params.address?.full_address,\n                  }\n                : null,\n            business_binds: \"\",\n        },\n        image_info: {\n            images: coverInfos.map((it) => ({\n                extra_info_json: '{\"mimeType\":\"image/png\"}',\n                file_id: it.ossFileId,\n                metadata: { source: -1 },\n                stickers: { floating: [], version: 2 },\n            })),\n        },\n        video_info: null,\n    };\n\n    // 自主声明\n    const userDeclarationBind = {\n        origin: 2,\n        photoInfo: {},\n        repostInfo: {},\n    };\n\n    if (params.selfDeclaration?.type === \"fictional-rendition\") {\n        // 虚拟演绎，仅供娱乐\n        userDeclarationBind.origin = 1;\n    } else if (params.selfDeclaration?.type === \"ai-generated\") {\n        // 笔记含AI合成内容\n        userDeclarationBind.origin = 2;\n    } else if (params.selfDeclaration?.type === \"source-statement\") {\n        // 内容来源声明\n        if (params.selfDeclaration.childType === \"self-labeling\") {\n            // 已自主标注\n            userDeclarationBind.origin = 3;\n        } else if (params.selfDeclaration.childType === \"self-shooting\") {\n            // 自主拍摄\n            userDeclarationBind.origin = 4;\n            const photoInfo: { photoPlace?: unknown; photoTime?: string } = {};\n\n            if (params.selfDeclaration.shootingLocation) {\n                // 拍摄地点\n                photoInfo.photoPlace = {\n                    name: params.selfDeclaration.shootingLocation.name,\n                    poiId: params.selfDeclaration.shootingLocation.poi_id,\n                    poiType: params.selfDeclaration.shootingLocation.poi_type,\n                    subname: params.selfDeclaration.shootingLocation.full_address,\n                };\n            }\n\n            if (params.selfDeclaration.shootingDate) {\n                // 拍摄日期\n                photoInfo.photoTime = params.selfDeclaration.shootingDate;\n            }\n\n            userDeclarationBind.photoInfo = photoInfo;\n        } else if (params.selfDeclaration.childType === \"transshipment\") {\n            // 来源转载\n            userDeclarationBind.origin = 5;\n\n            if (params.selfDeclaration.sourceMedia) {\n                // 来源媒体\n                userDeclarationBind.repostInfo = {\n                    source: params.selfDeclaration.sourceMedia,\n                };\n            }\n        }\n    }\n\n    const bizId =\n        params?.originalBind &&\n        (params.cookies.find((it) => it.name === \"x-user-id-creator.xiaohongshu.com\")?.value ||\n            (await proxyHttp\n                .api<{ data: { userDetail: { id: string } } }>(\n                    {\n                        method: \"get\",\n                        url: \"https://creator.xiaohongshu.com/api/galaxy/user/my-info\",\n                    },\n                    { retries: 3, retryDelay: 20, timeout: 3000 },\n                )\n                .then((userData) => userData?.data?.userDetail?.id)));\n\n    const business_binds = {\n        version: 1,\n        bizType: \"\",\n        noteId: \"\",\n        noteOrderBind: {},\n        // 发布时间 - 立即发布/定时发布\n        notePostTiming: params.isImmediatelyPublish ? {} : { postTime: params.scheduledPublish },\n        coProduceBind: { enable: !!params?.coProduceBind }, // 是否允许合拍\n        noteCopyBind: { copyable: !!params?.noteCopyBind }, // 关闭允许复制\n        optionRelationList: params.originalBind\n            ? [\n                  {\n                      // 原创声明\n                      type: \"ORIGINAL_STATEMENT\",\n                      relationList: [\n                          {\n                              bizId,\n                              bizType: \"ORIGINAL_STATEMENT\",\n                              extraInfo: \"{}\",\n                          },\n                      ],\n                  },\n              ]\n            : [],\n        ...(params?.groupBind\n            ? {\n                  groupBind: {\n                      groupId: params?.groupBind?.group_id,\n                      groupName: params.groupBind?.group_name,\n                      desc: params.groupBind?.desc,\n                      avatar: params.groupBind?.avatar,\n                  },\n              }\n            : { groupBind: {} }),\n        ...(params.selfDeclaration ? { userDeclarationBind } : {}),\n        ...(params?.collectionBind?.id ? { noteCollectionBind: { id: params.collectionBind.id } } : {}),\n    };\n\n    publishData.common.business_binds = JSON.stringify(business_binds);\n\n    task._timerRecord.PrePublish = Date.now();\n    const page = await pagePromise;\n    await updateTaskState?.({ sessionId: task.sessionId });\n    const publishXsHeader = {\n        \"x-s\": \"\",\n        \"x-t\": Date.now().toString(),\n    };\n    await page.waitForFunction(() => typeof (window as unknown as { mnsv2: unknown }).mnsv2 === \"function\", {\n        timeout: 10000,\n    });\n    const encodeData = `/web_api/sns/v2/note${JSON.stringify(publishData)}`;\n    const ticket_mnsv2 = await page.evaluate(\n        // 调用浏览器环境获取加密参数\n        ({ c, d }: { c: string; d: string }) => {\n            if (typeof (window as unknown as { mnsv2: unknown }).mnsv2 === \"function\") {\n                return (window as unknown as { mnsv2: (...args: unknown[]) => string }).mnsv2(c, d);\n            }\n            return \"mnsv2 未定义\";\n        },\n        {\n            c: encodeData,\n            d: Md5(encodeData), // md5\n        },\n    );\n    publishXsHeader[\"x-s\"] = encode_mnsv2(ticket_mnsv2, \"Windows\", \"object\");\n    publishXsHeader[\"x-t\"] = Date.now().toString();\n\n    if (MockPublish) {\n        const message = `文章模拟发布成功 ${http.proxyInfo}`;\n        const data = \"123456789\";\n\n        await updateTaskState?.({\n            state: TaskState.SUCCESS,\n            result: {\n                response: data,\n            },\n        });\n        return success(data, message);\n    }\n\n    // 发布\n    const publishResult = await proxyHttp.api<CommonResponse<{ id: string }>>(\n        {\n            method: \"post\",\n            url: \"https://edith.xiaohongshu.com/web_api/sns/v2/note\",\n            data: publishData,\n            headers: publishXsHeader,\n            defaultErrorMsg: \"文章发布异常，请稍后重试。\",\n        },\n        { retries: 2, retryDelay: 500, timeout: 12 * 1000 },\n    );\n\n    task.logger.info(`[xiaohongshuPublish server mock] publishResult: ${JSON.stringify(publishResult)} `);\n\n    const isSuccess = publishResult.success;\n    const message = `文章发布${isSuccess ? \"成功\" : `失败，原因：${publishResult.msg}`}${task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? publishResult?.data?.id || \"\" : \"\";\n    if (!isSuccess) {\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: message,\n        });\n        return { code: 414, data, message };\n    }\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: {\n            response: data,\n        },\n    });\n    return success(data, message);\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, DisabledReq, type Xiaohongshu } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { CollectionDetail } from \"../getXhsCollection\";\nimport type { GroupDetail } from \"../getXhsGroup\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaAction_Server } from \"./rpa-server\";\nimport { rpaAction_Server_Mock } from \"./rpa-server-mock\";\n\nconst FictionalRendition = z.object({\n    type: z.literal(\"fictional-rendition\"), // 虚拟演绎，仅供娱乐\n});\nconst AIGenerated = z.object({\n    type: z.literal(\"ai-generated\"), // 笔记含AI合成内容\n});\nconst SourceStatement = z.object({\n    type: z.literal(\"source-statement\"), // 内容来源声明\n    childType: z.enum([\"self-labeling\", \"self-shooting\", \"transshipment\"]), // 已自主标注 / 自助拍摄 / 转载\n    shootingLocation: z.custom<Xiaohongshu.Location>().optional(), // 拍摄地点\n    shootingDate: z.string().optional(), // 拍摄日期\n    sourceMedia: z.string().optional(), // 来源媒体\n});\nconst SelfDeclarationSchema = z.union([FictionalRendition, AIGenerated, SourceStatement]);\n\ntype SelfDeclaration = z.infer<typeof SelfDeclarationSchema>;\n\nexport const XiaohongshuPublishParamsSchema = ActionCommonParamsSchema.extend({\n    banners: z.array(z.string()), // 图片\n    title: z.string(), // 标题\n    content: z.string(), // 正文\n    address: z.custom<Xiaohongshu.Location>().optional(), // 地点\n    selfDeclaration: z.custom<SelfDeclaration>().optional(), // 自主声明\n    topic: z.array(z.custom<Xiaohongshu.Topic>()).optional(), //话题\n    proxyLoc: z.string().optional(), // 代理位置\n    localIP: z.string().optional(), // 用户ip\n    huiwenToken: z.string().optional(), // 绘文token\n    visibleRange: z.enum([\"public\", \"private\", \"friends\"]), // 可见范围\n    isImmediatelyPublish: z.boolean().optional(), // 是否立即发布\n    scheduledPublish: z.string().optional(), // 定时发布时间\n    collectionId: z.string().optional(), // 合集ID TODO：迁移完成后该字段移除\n    collectionBind: z.custom<CollectionDetail>().optional(), // 合集绑定\n    groupBind: z.custom<GroupDetail>().optional(), // 群聊绑定\n    noteCopyBind: z.boolean().optional(), // 是否允许复制\n    coProduceBind: z.boolean().optional(), // 是否允许合拍\n    originalBind: z.boolean().optional(), // 是否开启原创声明, 声明检测app端展示，web端发布后，最终是否原创成功以小红书APP结果为准\n});\n\nexport type XiaohongshuPublishParams = z.infer<typeof XiaohongshuPublishParamsSchema>;\n\nexport type PublishAction = CommonAction<XiaohongshuPublishParams, string>;\n\nexport const xiaohongshuPublish: PublishAction = async (task, params) => {\n    task.logger.info(`xiaohongshuPublish actionType: ${params.actionType}`);\n    if (DisabledReq) {\n        return {\n            code: 414,\n            data: \"\",\n            message:\n                \"临时维护：小红书发布政策调整，本平台小红书发布功能临时暂停服务并进行维护调整，暂时无法正常发布，敬请理解知悉。\",\n        };\n    }\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return mockAction(task, params);\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaAction_Server(task, params);\n    }\n\n    // 优先执行Mock+RPA方案，失败则进入RPA-Server方案\n    return executeAction(mockAction, rpaAction_Server_Mock, rpaAction_Server)(task, params);\n};\n","import { type CommonAction, response, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface xiaohongshuWebCommentActionParams extends ActiomCommonParams {\n    note_id: string;\n    comment_id: string;\n    action: \"like\" | \"dislike\";\n}\nexport interface ActionResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n}\n\nexport type PublishAction = CommonAction<xiaohongshuWebCommentActionParams, ActionResponse | Record<string, never>>;\n\nexport const xiaohongshuWebCommentAction: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(414, \"点赞相关操作失败\", {});\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: [] };\n    if (!params.note_id && !params.comment_id && !params.action) {\n        return { code: 414, message: \"参数缺失，请检查后重试！\", data: {} };\n    }\n\n    const actionParams = {\n        note_id: params.note_id,\n        comment_id: params.comment_id,\n    };\n\n    let likeActionRes: ActionResponse = { code: 500, success: false, msg: \"\" };\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n\n    switch (params.action) {\n        case \"like\": {\n            const likeAction = \"/api/sns/web/v1/comment/like\";\n            const likeActionXsHeader = xsEncrypt.signHeadersPost(likeAction, recordCookie, \"xhs-pc-web\", actionParams);\n\n            likeActionRes = await http.api<ActionResponse>(\n                {\n                    method: \"post\",\n                    url: \"https://edith.xiaohongshu.com/api/sns/web/v1/comment/like\",\n                    data: actionParams,\n                    headers: likeActionXsHeader,\n                },\n                { retries: 3, retryDelay: 20, timeout: 3000 },\n            );\n            break;\n        }\n\n        case \"dislike\": {\n            const dislikeMentions = \"/api/sns/web/v1/comment/dislike\";\n            const dislikeXsHeader = xsEncrypt.signHeadersPost(\n                dislikeMentions,\n                recordCookie,\n                \"xhs-pc-web\",\n                actionParams,\n            );\n\n            likeActionRes = await http.api<ActionResponse>(\n                {\n                    method: \"post\",\n                    url: \"https://edith.xiaohongshu.com/api/sns/web/v1/comment/dislike\",\n                    data: actionParams,\n                    headers: dislikeXsHeader,\n                },\n                { retries: 3, retryDelay: 20, timeout: 3000 },\n            );\n            break;\n        }\n\n        default:\n            return { code: 414, message: \"参数action错误，请重试！\", data: {} };\n    }\n\n    const isSuccess = likeActionRes.code === 0;\n    const message = `点赞相关操作${isSuccess ? \"成功\" : `失败，原因：${likeActionRes.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? likeActionRes.success : {};\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface searchXhsWebIntimacyListParams extends ActiomCommonParams {\n    searchValue?: string;\n}\n\nexport interface Intimacy {\n    images: string;\n    rid: string;\n    userid: string;\n    nickname: string;\n}\n\nexport type PublishAction = CommonAction<searchXhsWebIntimacyListParams, Intimacy[] | []>;\n\nexport const xiaohongshuWebIntimacySearch: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(0, \"搜索@列表数据成功\", []);\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    let intimacyDetail: Intimacy[] | [] = [];\n\n    const res = await http.api<{ code: number; msg: string; data: { items: Intimacy[] } }>(\n        {\n            method: \"get\",\n            url: `https://edith.xiaohongshu.com/api/sns/web/v1/intimacy/intimacy_list${params.searchValue ? \"/search\" : \"\"}`,\n            ...(params.searchValue\n                ? {\n                      params: {\n                          keyword: params.searchValue,\n                          page: 1,\n                          rows: 30,\n                      },\n                  }\n                : {}),\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.code === 0;\n    if (isSuccess) intimacyDetail = res.data?.items;\n    const message = `搜索@列表数据${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    return response(isSuccess ? 0 : 414, message, intimacyDetail);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface xiaohongshuWebMsgReadParams extends ActiomCommonParams {\n    type: \"mentions\" | \"likes\" | \"connections\"; // 消息类型\n}\nexport interface ReadResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n}\n\nexport type PublishAction = CommonAction<xiaohongshuWebMsgReadParams, ReadResponse | Record<string, never>>;\n\nexport const xiaohongshuWebMsgRead: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(414, \"Read指定Tab失败\", {});\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: [] };\n    if (!params.type) {\n        return { code: 414, message: \"参数缺失，请检查后重试！\", data: {} };\n    }\n\n    const replyParams = {\n        type: params.type,\n    };\n\n    const fatchMentions = \"/api/sns/web/v1/message/read\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const fatchMentionsXsHeader = xsEncrypt.signHeadersPost(fatchMentions, recordCookie, \"xhs-pc-web\", replyParams);\n\n    const res = await http.api<ReadResponse>(\n        {\n            method: \"post\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/v1/message/read\",\n            data: replyParams,\n            headers: fatchMentionsXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.code === 0;\n    const message = `Read指定Tab${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.success : {};\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface xiaohongshuWebMsgReplyParams extends ActiomCommonParams {\n    at_users?: { user_id: string; nickname: string }[]; // 被@用户ID列表\n    note_id: string; // 笔记ID\n    target_comment_id: string; // 目标评论ID\n    content: string; // 回复内容\n}\n\nexport interface ReplyResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n    data: ReplyDataDetail;\n}\n\nexport interface ReplyDataDetail {\n    time: number;\n    toast: string;\n    comment: {\n        id: string;\n        note_id: string;\n        status: number;\n        content: string;\n        liked: boolean;\n        like_count: string;\n        show_tags: string[];\n        ip_location: string;\n        target_comment: {\n            id: string;\n            user_info: {\n                user_id: string;\n                nickname: string;\n                image: string;\n            };\n        };\n        user_info: {\n            nickname: string;\n            image: string;\n            user_id: string;\n        };\n        create_time: number;\n    };\n}\n\nexport type PublishAction = CommonAction<xiaohongshuWebMsgReplyParams, ReplyDataDetail | Record<string, never>>;\n\nexport const xiaohongshuWebMsgReply: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(414, \"评论回复失败\", {});\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: [] };\n    if (!params.note_id || !params.target_comment_id || !params.content) {\n        return { code: 414, message: \"参数缺失，请检查后重试！\", data: {} };\n    }\n\n    const replyParams = {\n        at_users: params.at_users ?? [],\n        content: params.content,\n        note_id: params.note_id,\n        target_comment_id: params.target_comment_id,\n    };\n\n    const replyPath = \"/api/sns/web/v1/comment/post\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const replyXsHeader = xsEncrypt.signHeadersPost(replyPath, recordCookie, \"xhs-pc-web\", replyParams);\n\n    const res = await http.api<ReplyResponse>(\n        {\n            method: \"post\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/v1/comment/post\",\n            data: replyParams,\n            headers: replyXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.code === 0;\n    const message = `评论回复${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data : {};\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhs_ob_feed\"; // 使用旧的工作版本\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\nconst GenXSCommon = require(\"../../utils/XhsXsCommonEnc.js\") as (\n    a1cookie: string,\n    x_t: string | number,\n    x_s: string,\n) => string;\n\nexport interface xiaohongshuWebNoteFeedParams extends ActiomCommonParams {\n    source_note_id: string;\n    xsec_token: string;\n}\nexport interface FeedResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n    data: {\n        items: FeedRespomseDetail[];\n    } | null;\n}\n\nexport interface FeedRespomseDetail {\n    note_card: Record<string, unknown>;\n}\n\nexport type PublishAction = CommonAction<xiaohongshuWebNoteFeedParams, FeedRespomseDetail[] | Record<string, unknown>>;\n\nexport const xiaohongshuWebNoteFeed: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(414, \"获取指定文章详情失败\", {});\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: {} };\n    if (!params.source_note_id && !params.xsec_token) {\n        return { code: 414, message: \"参数缺失，请检查后重试！\", data: {} };\n    }\n\n    const feedParams = {\n        source_note_id: params.source_note_id,\n        image_formats: [\"jpg\", \"webp\", \"avif\"],\n        extra: { need_body_topic: \"1\" },\n        xsec_source: \"pc_feed\",\n        xsec_token: params.xsec_token,\n    };\n\n    const fatchFeed = \"/api/sns/web/v1/feed\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n\n    // 使用旧的签名算法（只返回 X-S）\n    const xsHeader = xsEncrypt.signHeadersPost(fatchFeed, recordCookie, \"xhs-pc-web\", feedParams);\n\n    // 生成时间戳\n    const xT = Date.now().toString();\n\n    // 使用 GenXSCommon 生成 x-s-common\n    const xsCommon = GenXSCommon(a1Cookie, xT, xsHeader[\"X-S\"]);\n\n    _task.logger.info(`请求参数: ${JSON.stringify(feedParams)}`);\n    _task.logger.info(`X-S: ${xsHeader[\"X-S\"]}`);\n    _task.logger.info(`x-s-common: ${xsCommon}`);\n\n    const res = await http.api<FeedResponse>(\n        {\n            method: \"post\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/v1/feed\",\n            data: feedParams,\n            headers: {\n                \"X-S\": xsHeader[\"X-S\"],\n                \"X-S-Common\": xsCommon,\n                \"X-T\": xT,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    // 添加详细日志\n    _task.logger.info(`API 响应: ${JSON.stringify(res)}`);\n\n    const isSuccess = res.code === 0 && res.data && res.data?.items && res.data?.items.length > 0;\n    const message = `获取指定文章详情${isSuccess ? \"成功\" : `失败，原因：${res.msg || \"返回数据为空，可能笔记不存在或参数错误\"}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data?.items[0].note_card || {} : {};\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface xiaohongshuWebRelationParams extends ActiomCommonParams {\n    action: \"follow\" | \"unfollow\"; // 关系操作类型\n    target_user_id: string; // 目标用户ID\n}\n\nexport interface RelationResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n    data: RelationDetail;\n}\n\nexport interface RelationDetail {\n    fstatus: string | null;\n}\n\nexport type PublishAction = CommonAction<xiaohongshuWebRelationParams, RelationDetail | Record<string, never>>;\n\nexport const xiaohongshuWebRelationAction: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(414, \"用户关系操作失败\", {});\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: {} };\n    if (!params.action || !params.target_user_id) {\n        return { code: 414, message: \"参数缺失，请检查后重试！\", data: {} };\n    }\n\n    const relationParams = {\n        target_user_id: params.target_user_id,\n    };\n\n    let relationActionRes: RelationResponse;\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    switch (params.action) {\n        case \"follow\": {\n            const followMentions = \"/api/sns/web/v1/user/follow\";\n            const followXsHeader = xsEncrypt.signHeadersPost(\n                followMentions,\n                recordCookie,\n                \"xhs-pc-web\",\n                relationParams,\n            );\n\n            relationActionRes = await http.api<RelationResponse>(\n                {\n                    method: \"post\",\n                    url: \"https://edith.xiaohongshu.com/api/sns/web/v1/user/follow\",\n                    data: relationParams,\n                    headers: followXsHeader,\n                },\n                { retries: 3, retryDelay: 500, timeout: 3000 },\n            );\n            break;\n        }\n\n        case \"unfollow\": {\n            const unfllowMentions = \"/api/sns/web/v1/user/unfollow\";\n            const unfllowXsHeader = xsEncrypt.signHeadersPost(\n                unfllowMentions,\n                recordCookie,\n                \"xhs-pc-web\",\n                relationParams,\n            );\n\n            relationActionRes = await http.api<RelationResponse>(\n                {\n                    method: \"post\",\n                    url: \"https://edith.xiaohongshu.com/api/sns/web/v1/user/unfollow\",\n                    data: relationParams,\n                    headers: unfllowXsHeader,\n                },\n                { retries: 3, retryDelay: 20, timeout: 3000 },\n            );\n            break;\n        }\n\n        default:\n            return { code: 414, message: \"参数action错误，请重试！\", data: {} };\n    }\n\n    const isSuccess = relationActionRes.code === 0;\n    const message = `用户关系操作${isSuccess ? \"成功\" : `失败，原因：${relationActionRes.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? relationActionRes.data : { fstatus: null };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport const XhsWebSearchParamsSchema = ActionCommonParamsSchema.extend({\n    keyword: z.string(),\n    page: z.number(),\n    page_size: z.number(),\n    sort_type: z.enum([\"general\", \"time_descending\", \"popular_descending\"]), // 综合、时间降序、热门降序\n    time_filter: z.enum([\"不限\", \"一周内\"]),\n});\n\nexport type XhsWebSearchParams = z.infer<typeof XhsWebSearchParamsSchema>;\n\nexport interface SearchResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n    data: {\n        has_more: boolean;\n        item: NoteDetail[];\n    };\n}\n\nexport interface NoteDetail {\n    xsec_token: string;\n    id: string;\n    model_type: string;\n    note_card: {\n        type: string;\n        display_title: string;\n        user: {\n            nick_name: string;\n            avatar: string;\n            user_id: string;\n            nickname: string;\n            xsec_token: string;\n        };\n        interact_info: {\n            shared_count: string;\n            liked: boolean;\n            liked_count: string;\n            collected: boolean;\n            collected_count: string;\n            comment_count: string;\n        };\n        cover: {\n            height: number;\n            width: number;\n            url_default: string;\n            url_pre: string;\n        };\n        image_list: Array<{\n            height: number;\n            width: number;\n            info_list: Array<{\n                image_scene: string;\n                url: string;\n            }>;\n        }>;\n        corner_tag_info: Array<{\n            type: string;\n            text: string;\n        }>;\n    };\n}\n\nexport type PublishAction = CommonAction<XhsWebSearchParams, Record<string, unknown>>;\n\nconst createSearchId = () => {\n    let r: bigint = BigInt(Date.now());\n    const o: bigint = BigInt(Math.ceil(0x7ffffffe * Math.random()));\n    r <<= BigInt(64);\n    r += o;\n    return r.toString(36);\n};\n\nexport const xiaohongshuWebSearch: PublishAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: {} };\n    if (!params.keyword || !params.page || !params.page_size || !params.sort_type || !params.time_filter) {\n        if (\n            params.sort_type !== \"general\" &&\n            params.sort_type !== \"time_descending\" &&\n            params.sort_type !== \"popular_descending\"\n        ) {\n            return { code: 414, message: \"排序类型参数错误，请检查后重试！\", data: {} };\n        }\n        if (params.time_filter !== \"不限\" && params.time_filter !== \"一周内\") {\n            return { code: 414, message: \"时间过滤参数错误，请检查后重试！\", data: {} };\n        }\n        return { code: 414, message: \"参数缺失，请检查后重试！\", data: {} };\n    }\n\n    const filterPath = \"/api/sns/web/v1/search/notes\";\n    const filterParams = {\n        ext_flags: [],\n        geo: \"\",\n        image_formats: [\"jpg\", \"webp\", \"avif\"],\n        filters: [\n            { tags: [params.sort_type], type: \"sort_type\" },\n            { tags: [\"不限\"], type: \"filter_note_type\" },\n            { tags: [params.time_filter], type: \"filter_note_time\" },\n            { tags: [\"不限\"], type: \"filter_note_range\" },\n            { tags: [\"不限\"], type: \"filter_pos_distance\" },\n        ],\n        keyword: params.keyword,\n        note_type: 0,\n        page: params.page,\n        page_size: params.page_size,\n        search_id: createSearchId() + (params.sort_type || params.time_filter ? `@${createSearchId()}` : \"\"),\n        sort: \"general\",\n    };\n\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const searchXsHeader = xsEncrypt.signHeadersPost(filterPath, recordCookie, \"xhs-pc-web\", filterParams);\n\n    const res = await http.api<SearchResponse>(\n        {\n            method: \"post\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/v1/search/notes\",\n            data: filterParams,\n            headers: searchXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.code === 0;\n    const message = `Web笔记搜索${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data : {};\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { z } from \"zod\";\n\nexport const ttConfigDataSchema = z.object({\n    fansNum: z.number(),\n    fansNumYesterday: z.number().nullable(),\n    readNum: z.number(),\n    incomeNum: z.number(),\n    incomeNumYesterday: z.number().nullable(),\n    showNumYesterday: z.number().nullable(),\n    readNumYesterday: z.number().nullable(),\n    likeNumYesterday: z.number().nullable(),\n    commentNumYesterday: z.number().nullable(),\n});\n\nexport type ttConfigData = z.infer<typeof ttConfigDataSchema>;\n\nexport const xhsConfigDataSchema = z.object({\n    fansNum: z.number(),\n    favedNum: z.number(),\n    watchNumLastWeek: z.number(),\n    likeNumLastWeek: z.number(),\n    collectNumLastWeek: z.number(),\n    commentNumLastWeek: z.number(),\n    fansNumLastWeek: z.number(),\n    fansNumYesterday: z.number(),\n});\n\nexport type xhsConfigData = z.infer<typeof xhsConfigDataSchema>;\n\nexport const wxConfigDataSchema = z.object({\n    fansNum: z.number(),\n    fansNumYesterday: z.number(),\n    readNumYesterday: z.number(),\n    shareNumYesterday: z.number(),\n});\n\nexport type wxConfigData = z.infer<typeof wxConfigDataSchema>;\n\nexport const bjhConfigDataSchema = z.object({\n    fansNum: z.number(),\n    fansNumYesterday: z.number().nullable(),\n    readNum: z.number(),\n    incomeNum: z.number(),\n    incomeNumYesterday: z.number().nullable(),\n    recommendNumYesterday: z.number().nullable(),\n    readNumYesterday: z.number().nullable(),\n    likeNumYesterday: z.number().nullable(),\n    commentNumYesterday: z.number().nullable(),\n});\n\nexport type bjhConfigData = z.infer<typeof bjhConfigDataSchema>;\n\n// 抖音账号数据（参考文档 1.1 近7日数据 + 1.2 账号基础信息）\nexport const douyinConfigDataSchema = z.object({\n    fansNum: z.number(), // 粉丝总数（account_info.follower_count）\n    favedNum: z.number(), // 总获赞数（account_info.total_favorited）\n    fansNumLastWeek: z.number(), // 近7日净增粉丝（data.fans_incr）\n    watchNumLastWeek: z.number(), // 近7日播放量（data.play_count）\n    likeNumLastWeek: z.number(), // 近7日作品点赞（data.like_count）\n    commentNumLastWeek: z.number(), // 近7日作品评论（data.comment_count）\n    shareNumLastWeek: z.number(), // 近7日作品分享（data.share_count）\n    visitNumLastWeek: z.number(), // 近7日主页访问量（data.profile_visit）\n});\n\nexport type douyinConfigData = z.infer<typeof douyinConfigDataSchema>;\n\n// 视频号账号数据（auth_data 接口，实测响应结构）\nexport const shipinhaoConfigDataSchema = z.object({\n    fansNum: z.number(), // 粉丝数（data.finderUser.fansCount）\n    feedsCount: z.number(), // 作品总数（data.finderUser.feedsCount，不区分视频/图文）\n    // 昨日数据需调用专门的统计接口，若不可用则为 null\n    fansNumYesterday: z.number().nullable(), // 昨日净增关注\n    playNumYesterday: z.number().nullable(), // 昨日新增播放\n    likeNumYesterday: z.number().nullable(), // 昨日新增喜欢\n    commentNumYesterday: z.number().nullable(), // 昨日新增评论\n});\n\nexport type shipinhaoConfigData = z.infer<typeof shipinhaoConfigDataSchema>;\n\nexport interface SearchAccountInfoResponse {\n    code: number;\n    message: string;\n    data: ttConfigData | xhsConfigData | wxConfigData | bjhConfigData | douyinConfigData | shipinhaoConfigData | null;\n}\n","import type { AutomateTask, CommonAction, ResponseData } from \"@iflyrpa/share\";\nimport shareVersion from \"@iflyrpa/share/package.json\";\nimport actionVersion from \"../package.json\";\nimport { type BaijiahaoLoginParams, baijiahaoLogin } from \"./actions/baijiahaoLogin\";\nimport { type BaijiahaoPublishParams, baijiahaoPublish } from \"./actions/baijiahaoPublish\";\nimport {\n    BjhFansExport,\n    type GetWxFansSearchParams,\n    TTFansExport,\n    WxFansExport,\n    XhsFansExport,\n} from \"./actions/common/FansTool\";\nimport {\n    BjhSessionCheck,\n    DySessionCheck,\n    ShipinhaoSessionCheck,\n    TTSessionCheck,\n    type WxBjhSessionParams,\n    WxSessionCheck,\n    XhsSessionCheck,\n} from \"./actions/common/sessionCheck\";\nimport { type CreateShipinhaoCommentParams, createShipinhaoComment } from \"./actions/createShipinhaoComment\";\nimport {\n    type DouyinCheckVerifyQrCodeParams,\n    DouyinCheckVerifyQrCodeParamsSchema,\n    douyinCheckVerifyQrCode,\n} from \"./actions/douyinCheckVerifyQrCode\";\nimport { type DouyinCreateCommentReplyParams, douyinCreateCommentReply } from \"./actions/douyinCreateCommentReply\";\nimport { type DouyinGetCollectionParams, douyinGetCollection } from \"./actions/douyinGetCollection\";\nimport { type DouyinGetCommentListParams, douyinGetCommentList } from \"./actions/douyinGetCommentList\";\nimport { type DouyinGetCommentReplyListParams, douyinGetCommentReplyList } from \"./actions/douyinGetCommentReplyList\";\nimport { type DouyinGetHotParams, douyinGetHot } from \"./actions/douyinGetHot\";\nimport { type DouyinGetLocationParams, douyinGetLocation } from \"./actions/douyinGetLocation\";\nimport { type DouyinGetMusicParams, douyinGetMusic } from \"./actions/douyinGetMusic\";\nimport { type DouyinGetMusicByCategoryParams, douyinGetMusicByCategory } from \"./actions/douyinGetMusicByCategory\";\nimport { type DouyinGetMusicCategoryParams, douyinGetMusicCategory } from \"./actions/douyinGetMusicCategory\";\nimport { type DouyinGetTopicsParams, douyinGetTopics } from \"./actions/douyinGetTopics\";\nimport {\n    type DouyinGetVerifyQrCodeParams,\n    DouyinGetVerifyQrCodeParamsSchema,\n    douyinGetVerifyQrCode,\n} from \"./actions/douyinGetVerifyQrCode\";\nimport { type DouyinGetWorkListParams, douyinGetWorkList } from \"./actions/douyinGetWorkList\";\nimport { DouyinLoginParams, douyinLogin } from \"./actions/douyinLogin\";\nimport { type DouyinPublishParams, douyinPublish } from \"./actions/douyinPublish\";\nimport { type GetBaijiahaoActivityParams, getBaijiahaoActivity } from \"./actions/getBaijiahaoActivity\";\nimport { type GetBaijiahaoConfigParams, getBaijiahaoConfig } from \"./actions/getBaijiaohaoConfig\";\nimport { type GetShipinhaoBgmParams, getShipinhaoBgm } from \"./actions/getShipinhaoBgm\";\nimport { type GetShipinhaoBgmCategoryParams, getShipinhaoBgmCategory } from \"./actions/getShipinhaoBgmCategory\";\nimport { type GetShipinhaoCollectionParams, getShipinhaoCollection } from \"./actions/getShipinhaoCollection\";\nimport { type GetShipinhaoCommentListParams, getShipinhaoCommentList } from \"./actions/getShipinhaoCommentList\";\nimport { type GetShipinhaoConfigParams, getShipinhaoConfig } from \"./actions/getShipinhaoConfig\";\nimport { type GetShipinhaoPostListParams, getShipinhaoPostList } from \"./actions/getShipinhaoPostList\";\nimport { type GetToutiaoCollectionParams, getToutiaoCollection } from \"./actions/getToutiaoCollection\";\nimport { type GetToutiaoConfigParams, getToutiaoConfig } from \"./actions/getToutiaoConfig\";\nimport { type GetWeixinCollectionParams, getWeixinCollection } from \"./actions/getWeixinCollection\";\nimport { type GetWeixinConfigParams, getWeixinConfig } from \"./actions/getWeixinConfig\";\nimport { getXhsCollection } from \"./actions/getXhsCollection\";\nimport { getXhsGroup } from \"./actions/getXhsGroup\";\nimport { getXhsHotTopic } from \"./actions/getXhsHotTopic\";\nimport { getXhsUnreadCount } from \"./actions/getXhsWebUnreadCount\";\nimport { SearchAccountInfo, type SearchAccountInfoParams } from \"./actions/searchAccountInfo\";\nimport { type SearchBjhTopicListParams, searchBjhTopicList } from \"./actions/searchBjhTopicList\";\nimport { searchBjhUserArticle, type searchBjhUserArticleParams } from \"./actions/searchBjhUserArticle\";\nimport { FetchArticles, type FetchArticlesParams } from \"./actions/searchPublishInfo\";\nimport { type SearchToutiaoLocationParams, searchToutiaoLocation } from \"./actions/searchToutiaoLocation\";\nimport { type SearchToutiaoTopicListParams, searchToutiaoTopicList } from \"./actions/searchToutiaoTopicList\";\nimport { type SearchToutiaoUserIDParams, searchToutiaoUserInfo } from \"./actions/searchToutiaoUserID\";\nimport { searchWeixinAccountCard, type searchWeixinAccountCardParams } from \"./actions/searchWeixinAccountCard\";\nimport { searchWeixinUserArticle, type searchWeixinUserArticleParams } from \"./actions/searchWeixinUserArticle\";\nimport { type searchXhsConnectionsParams, searchXhsWebConnections } from \"./actions/searchXhsWebConnections\";\nimport { type searchXhsLikesParams, searchXhsWebLikes } from \"./actions/searchXhsWebLike\";\nimport { type searchXhsMentionsParams, searchXhsWebMentions } from \"./actions/searchXhsWebMentions\";\nimport { searchXiaohongshuLocation, type searchXiaohongshuLocationParams } from \"./actions/searchXiaohongshuLocation\";\nimport {\n    type SearchXiaohongshuTopicListParams,\n    searchXiaohongshuTopicList,\n} from \"./actions/searchXiaohongshuTopicList\";\nimport {\n    searchXiaohongshuUserArticle,\n    type searchXiaohongshuUserArticleParams,\n} from \"./actions/searchXiaohongshuUserArticle\";\nimport { ShipinhaoCheckLinkValidateParams, shipinhaoCheckLinkValidate } from \"./actions/shipinhaoCheckLinkValidate\";\nimport { ShipinhaoGetLocationParams, shipinhaoGetLocation } from \"./actions/shipinhaoGetLocation\";\nimport { ShipinhaoGetMsgParams, shipinhaoGetMsg } from \"./actions/shipinhaoGetMsg\";\nimport { ShipinhaoGetMsgImageParams, shipinhaoGetMsgImage } from \"./actions/shipinhaoGetMsgImage\";\nimport { ShipinhaoLoginParams, shipinhaoLogin } from \"./actions/shipinhaoLogin\";\nimport { type ShipinhaoPublishParams, shipinhaoPublish } from \"./actions/shipinhaoPublish\";\nimport { ShipinhaoSendMsgParams, shipinhaoSendMsg } from \"./actions/shipinhaoSendMsg\";\nimport { type ToutiaoLoginParams, toutiaoLogin } from \"./actions/toutiaoLogin\";\nimport { type ToutiaoPublishParams, toutiaoPublish } from \"./actions/toutiaoPublish\";\nimport { type WeitoutiaoPublishParams, weitoutiaoPublish } from \"./actions/weitoutiaoPublish\";\nimport { type WeixinLoginParams, weixinLogin } from \"./actions/weixinLogin\";\nimport { type WeixinmpPublishParams, weixinmpPublish } from \"./actions/weixinmpPublish\";\nimport { type WeixinPublishParams, weixinPublish } from \"./actions/weixinPublish\";\nimport { type XiaohongshuLoginParams, xiaohongshuLogin } from \"./actions/xiaohongshuLogin\";\nimport { type XiaohongshuPublishParams, xiaohongshuPublish } from \"./actions/xiaohongshuPublish\";\nimport {\n    xiaohongshuWebCommentAction,\n    type xiaohongshuWebCommentActionParams,\n} from \"./actions/xiaohongshuWebCommentAction\";\nimport {\n    type searchXhsWebIntimacyListParams,\n    xiaohongshuWebIntimacySearch,\n} from \"./actions/xiaohongshuWebIntimacySearch\";\nimport { xiaohongshuWebMsgRead, type xiaohongshuWebMsgReadParams } from \"./actions/xiaohongshuWebMsgRead\";\nimport { xiaohongshuWebMsgReply, type xiaohongshuWebMsgReplyParams } from \"./actions/xiaohongshuWebMsgReply\";\nimport { xiaohongshuWebNoteFeed, type xiaohongshuWebNoteFeedParams } from \"./actions/xiaohongshuWebNoteFeed\";\nimport {\n    xiaohongshuWebRelationAction,\n    type xiaohongshuWebRelationParams,\n} from \"./actions/xiaohongshuWebRelationAction\";\nimport { type XhsWebSearchParams, xiaohongshuWebSearch } from \"./actions/xiaohongshuWebSearch\";\nimport type { ActiomCommonParams } from \"./types\";\nimport { stringifyError } from \"./utils\";\nimport { Http } from \"./utils/http\";\nexport const BetaFlag = \"HuiwenCanary\"; // 用于标记是否为测试版本\n\nexport class Action {\n    constructor(private task: AutomateTask) {\n        this.task.logger.info(`当前包版本：Share=>${shareVersion.version} Action=>${actionVersion.version}`);\n    }\n\n    // 绑定 task, 并处理异常\n    private async bindTask<T extends ActiomCommonParams, R>(func: CommonAction<T, R>, params: T) {\n        let responseData: ResponseData<R>;\n\n        // 检查是否为测试版本\n        this.task.isBeta = this.task?.isFeatOn ? this.task?.isFeatOn(BetaFlag) : false;\n\n        // 记录时间消耗\n        this.task._timerRecord.ActionStart = Date.now();\n\n        if (this.task?.setArticleId) {\n            // 给所有的日志添加 articleId 标签\n            this.task.setArticleId(params.articleId ?? \"\");\n        }\n\n        if (this.task?.setSaveType ?? false) {\n            // 给所有的日志添加 saveType 标签\n            this.task.setSaveType(params.saveType ?? \"\");\n        }\n\n        if (this.task?.isInitializedGB !== undefined) {\n            this.task.setGbInitType(this.task.isInitializedGB);\n        }\n\n        if (typeof params === \"object\") {\n            // 默认设置 cookies\n            params.cookies = params?.cookies ?? [];\n        }\n\n        try {\n            responseData = await func(this.task, params);\n        } catch (error) {\n            responseData = Http.handleApiError(error);\n        } finally {\n            this.task._timerRecord.ActionEnd = Date.now();\n        }\n\n        if (this.task.setTimeConsuming) {\n            // 收集各时间节点\n            this.task.setTimeConsuming(this.task._timerRecord);\n        }\n\n        if (responseData.code === 414) {\n            // 表示是由于脚本输入信息错误导致的失败，不是脚本问题\n            this.task.logger.info(`${func.name} action params error`, responseData);\n        } else if (responseData.code !== 0) {\n            this.task.logger.error(\n                responseData.message || `${func.name} 执行失败`,\n                stringifyError(responseData.data),\n                responseData.extra,\n            );\n            this.task.logger.info(`${func.name} action failed`);\n        } else {\n            this.task.logger.info(`${func.name} action success`);\n        }\n\n        if (this.task.debug && this.task._timerRecord.PrePublish) {\n            console.log(\n                \"预处理图片耗时：\",\n                (this.task._timerRecord.PrePublish - this.task._timerRecord.ActionStart) / 1000,\n                \"s\",\n            );\n            console.log(\n                \"发文接口耗时：\",\n                (this.task._timerRecord.ActionEnd - this.task._timerRecord.PrePublish) / 1000,\n                \"s\",\n            );\n        }\n        this.task.debug &&\n            console.log(\n                \"Action整体耗时：\",\n                (this.task._timerRecord.ActionEnd - this.task._timerRecord.ActionStart) / 1000,\n                \"s\",\n            );\n\n        return responseData;\n    }\n\n    // 小红书操作web笔记搜索\n    xiaohongshuWebSearch(params: XhsWebSearchParams) {\n        return this.bindTask(xiaohongshuWebSearch, params);\n    }\n\n    // 小红书操作指定web评论点赞/取消点赞\n    xiaohongshuWebCommentAction(params: xiaohongshuWebCommentActionParams) {\n        return this.bindTask(xiaohongshuWebCommentAction, params);\n    }\n\n    // 小红书获取指定文章详情\n    xiaohongshuWebNoteFeed(params: xiaohongshuWebNoteFeedParams) {\n        return this.bindTask(xiaohongshuWebNoteFeed, params);\n    }\n\n    // 小红书操作指定id用户关系（关注/取关）\n    xiaohongshuWebRelationAction(params: xiaohongshuWebRelationParams) {\n        return this.bindTask(xiaohongshuWebRelationAction, params);\n    }\n\n    // 小红书回复指定笔记评论\n    xiaohongshuWebMsgRead(params: xiaohongshuWebMsgReadParams) {\n        return this.bindTask(xiaohongshuWebMsgRead, params);\n    }\n\n    // 小红书获取@提及列表\n    xiaohongshuWebIntimacySearch(params: searchXhsWebIntimacyListParams) {\n        return this.bindTask(xiaohongshuWebIntimacySearch, params);\n    }\n\n    // 小红书回复指定笔记评论\n    xiaohongshuWebMsgReply(params: xiaohongshuWebMsgReplyParams) {\n        return this.bindTask(xiaohongshuWebMsgReply, params);\n    }\n\n    // 小红书获取新增关注列表\n    searchXhsWebConnections(params: searchXhsConnectionsParams) {\n        return this.bindTask(searchXhsWebConnections, params);\n    }\n\n    // 小红书获取赞和收藏列表\n    searchXhsWebLikes(params: searchXhsLikesParams) {\n        return this.bindTask(searchXhsWebLikes, params);\n    }\n\n    // 小红书获取评论与@提及列表\n    searchXhsWebMentions(params: searchXhsMentionsParams) {\n        return this.bindTask(searchXhsWebMentions, params);\n    }\n\n    // 小红书获取未读消息数\n    getXhsUnreadCount(params: ActiomCommonParams) {\n        return this.bindTask(getXhsUnreadCount, params);\n    }\n\n    // 百家号搜索用户文章\n    searchBjhUserArticle(params: searchBjhUserArticleParams) {\n        return this.bindTask(searchBjhUserArticle, params);\n    }\n\n    // 小红书搜索用户文章\n    searchXiaohongshuUserArticle(params: searchXiaohongshuUserArticleParams) {\n        return this.bindTask(searchXiaohongshuUserArticle, params);\n    }\n\n    // 微信搜索用户文章\n    searchWeixinUserArticle(params: searchWeixinUserArticleParams) {\n        return this.bindTask(searchWeixinUserArticle, params);\n    }\n\n    // 微信号搜索账号卡片\n    searchWeixinAccountCard(params: searchWeixinAccountCardParams) {\n        return this.bindTask(searchWeixinAccountCard, params);\n    }\n\n    // 微信登陆操作 仅用于Cli框架\n    WxLogin(params: WeixinLoginParams) {\n        return this.bindTask(weixinLogin, params);\n    }\n\n    // 百家号登陆操作 仅用于Cli框架\n    BaijiahaoLogin(params: BaijiahaoLoginParams) {\n        return this.bindTask(baijiahaoLogin, params);\n    }\n\n    // 头条号登陆操作 仅用于Cli框架\n    ToutiaoLogin(params: ToutiaoLoginParams) {\n        return this.bindTask(toutiaoLogin, params);\n    }\n\n    // 抖音创作者中心登陆\n    DouyinLogin(params: DouyinLoginParams) {\n        return this.bindTask(douyinLogin, params);\n    }\n\n    // 视频号登陆\n    ShipinhaoLogin(params: ShipinhaoLoginParams) {\n        return this.bindTask(shipinhaoLogin, params);\n    }\n\n    // 小红书登陆操作 仅用于Cli框架\n    XhsLogin(params: XiaohongshuLoginParams) {\n        return this.bindTask(xiaohongshuLogin, params);\n    }\n\n    // 获取指定平台的文章数据\n    FetchArticles(params: FetchArticlesParams) {\n        return this.bindTask(FetchArticles, params);\n    }\n\n    // 获取指定平台的分析数据\n    SearchAccountInfo(params: SearchAccountInfoParams) {\n        return this.bindTask(SearchAccountInfo, params);\n    }\n\n    // 头条Session有效性检测\n    TTSessionCheck(params: ActiomCommonParams) {\n        return this.bindTask(TTSessionCheck, params);\n    }\n\n    // 微信Session有效性检测\n    WxSessionCheck(params: WxBjhSessionParams) {\n        return this.bindTask(WxSessionCheck, params);\n    }\n\n    // 小红书Session有效性检测\n    XhsSessionCheck(params: ActiomCommonParams) {\n        return this.bindTask(XhsSessionCheck, params);\n    }\n\n    // 百家号Session有效性检测\n    BjhSessionCheck(params: WxBjhSessionParams) {\n        return this.bindTask(BjhSessionCheck, params);\n    }\n\n    // 抖音Session有效性检测\n    DySessionCheck(params: ActiomCommonParams) {\n        return this.bindTask(DySessionCheck, params);\n    }\n\n    // 视频号Session有效性检测\n    ShipinhaoSessionCheck(params: ActiomCommonParams) {\n        return this.bindTask(ShipinhaoSessionCheck, params);\n    }\n\n    // 搜索头条话题列表\n    searchToutiaoTopicList(params: SearchToutiaoTopicListParams) {\n        return this.bindTask(searchToutiaoTopicList, params);\n    }\n\n    // 搜索头条粉丝\n    TTFansExport(params: ActiomCommonParams) {\n        return this.bindTask(TTFansExport, params);\n    }\n\n    // 搜索小红书粉丝\n    XhsFansExport(params: ActiomCommonParams) {\n        return this.bindTask(XhsFansExport, params);\n    }\n\n    // 搜索微信粉丝\n    WxFansExport(params: GetWxFansSearchParams) {\n        return this.bindTask(WxFansExport, params);\n    }\n\n    // 搜索百家号粉丝\n    BjhFansExport(params: ActiomCommonParams) {\n        return this.bindTask(BjhFansExport, params);\n    }\n\n    SearchBjhTopicList(params: SearchBjhTopicListParams) {\n        return this.bindTask(searchBjhTopicList, params);\n    }\n\n    // 搜索头条用户ID\n    searchToutiaoUserID(params: SearchToutiaoUserIDParams) {\n        return this.bindTask(searchToutiaoUserInfo, params);\n    }\n\n    // 搜索头条Location\n    searchToutiaoLocation(params: SearchToutiaoLocationParams) {\n        return this.bindTask(searchToutiaoLocation, params);\n    }\n\n    // 获取头条配置\n    getToutiaoConfig(params: GetToutiaoConfigParams) {\n        return this.bindTask(getToutiaoConfig, params);\n    }\n\n    // 获取头条合集\n    getToutiaoCollection(params: GetToutiaoCollectionParams) {\n        return this.bindTask(getToutiaoCollection, params);\n    }\n\n    // 获取微信配额\n    getWeixinConfig(params: GetWeixinConfigParams) {\n        return this.bindTask(getWeixinConfig, params);\n    }\n\n    // 获取微信合集\n    getWeixinCollection(params: GetWeixinCollectionParams) {\n        return this.bindTask(getWeixinCollection, params);\n    }\n\n    // 获取视频号配置\n    getShipinhaoConfig(params: GetShipinhaoConfigParams) {\n        return this.bindTask(getShipinhaoConfig, params);\n    }\n\n    // 获取视频号合集\n    getShipinhaoCollection(params: GetShipinhaoCollectionParams) {\n        return this.bindTask(getShipinhaoCollection, params);\n    }\n\n    // 获取视频号背景音乐\n    getShipinhaoBgm(params: GetShipinhaoBgmParams) {\n        return this.bindTask(getShipinhaoBgm, params);\n    }\n\n    // 获取视频号背景音乐类型\n    getShipinhaoBgmCategory(params: GetShipinhaoBgmCategoryParams) {\n        return this.bindTask(getShipinhaoBgmCategory, params);\n    }\n\n    // 获取视频号已发布文章列表\n    getShipinhaoPostList(params: GetShipinhaoPostListParams) {\n        return this.bindTask(getShipinhaoPostList, params);\n    }\n\n    // 获取视频号评论列表\n    getShipinhaoCommentList(params: GetShipinhaoCommentListParams) {\n        return this.bindTask(getShipinhaoCommentList, params);\n    }\n\n    // 创建视频号评论\n    createShipinhaoComment(params: CreateShipinhaoCommentParams) {\n        return this.bindTask(createShipinhaoComment, params);\n    }\n\n    getXhsCollection(params: ActiomCommonParams) {\n        return this.bindTask(getXhsCollection, params);\n    }\n\n    getXhsGroup(params: ActiomCommonParams) {\n        return this.bindTask(getXhsGroup, params);\n    }\n\n    getXhsHotTopic(params: ActiomCommonParams) {\n        return this.bindTask(getXhsHotTopic, params);\n    }\n\n    // 获取百家号配置\n    getBaijiahaoConfig(params: GetBaijiahaoConfigParams) {\n        return this.bindTask(getBaijiahaoConfig, params);\n    }\n\n    // 百家号发布\n    baijiahaoPublish(params: BaijiahaoPublishParams) {\n        return this.bindTask(baijiahaoPublish, params);\n    }\n\n    // 查询百家号活动投稿\n    getBaijiahaoActivity(params: GetBaijiahaoActivityParams) {\n        return this.bindTask(getBaijiahaoActivity, params);\n    }\n\n    // 小红书发布\n    xiaohongshuPublish(params: XiaohongshuPublishParams) {\n        return this.bindTask(xiaohongshuPublish, params);\n    }\n\n    // 搜索小红书话题\n    searchXiaohongshuTopicList(params: SearchXiaohongshuTopicListParams) {\n        return this.bindTask(searchXiaohongshuTopicList, params);\n    }\n    // 搜索小红书地址\n    searchXiaohongshuLocation(params: searchXiaohongshuLocationParams) {\n        return this.bindTask(searchXiaohongshuLocation, params);\n    }\n\n    // 小绿书发布\n    weixinmpPublish(params: WeixinmpPublishParams) {\n        return this.bindTask(weixinmpPublish, params);\n    }\n\n    // 微头条发布\n    weitoutiaoPublish(params: WeitoutiaoPublishParams) {\n        return this.bindTask(weitoutiaoPublish, params);\n    }\n\n    // 头条发布\n    toutiaoPublish(params: ToutiaoPublishParams) {\n        return this.bindTask(toutiaoPublish, params);\n    }\n\n    // 微信发布\n    weixinPublish(params: WeixinPublishParams) {\n        return this.bindTask(weixinPublish, params);\n    }\n    //抖音发布\n    douyinPublish(params: DouyinPublishParams) {\n        return this.bindTask(douyinPublish, params);\n    }\n\n    // 抖音校验二维码扫码状态\n    douyinCheckVerifyQrCode(params: DouyinCheckVerifyQrCodeParams) {\n        return this.bindTask(douyinCheckVerifyQrCode, params);\n    }\n\n    // 抖音获取二维码扫码状态\n    douyinGetVerifyQrCode(params: DouyinGetVerifyQrCodeParams) {\n        return this.bindTask(douyinGetVerifyQrCode, params);\n    }\n\n    // 视频号发布\n    shipinhaoPublish(params: ShipinhaoPublishParams) {\n        return this.bindTask(shipinhaoPublish, params);\n    }\n\n    douyinGetTopics(params: DouyinGetTopicsParams) {\n        return this.bindTask(douyinGetTopics, params);\n    }\n    douyinGetMusicCategory(params: DouyinGetMusicCategoryParams) {\n        return this.bindTask(douyinGetMusicCategory, params);\n    }\n    douyinGetMusicByCategory(params: DouyinGetMusicByCategoryParams) {\n        return this.bindTask(douyinGetMusicByCategory, params);\n    }\n    douyinGetMusic(params: DouyinGetMusicParams) {\n        return this.bindTask(douyinGetMusic, params);\n    }\n    douyinGetLocation(params: DouyinGetLocationParams) {\n        return this.bindTask(douyinGetLocation, params);\n    }\n    douyinGetHot(params: DouyinGetHotParams) {\n        return this.bindTask(douyinGetHot, params);\n    }\n    douyinGetCollection(params: DouyinGetCollectionParams) {\n        return this.bindTask(douyinGetCollection, params);\n    }\n    douyinGetCommentList(params: DouyinGetCommentListParams) {\n        return this.bindTask(douyinGetCommentList, params);\n    }\n    douyinGetCommentReplyList(params: DouyinGetCommentReplyListParams) {\n        return this.bindTask(douyinGetCommentReplyList, params);\n    }\n    douyinCreateCommentReply(params: DouyinCreateCommentReplyParams) {\n        return this.bindTask(douyinCreateCommentReply, params);\n    }\n    douyinGetWorkList(params: DouyinGetWorkListParams) {\n        return this.bindTask(douyinGetWorkList, params);\n    }\n    douyinLogin(params: DouyinLoginParams) {\n        return this.bindTask(douyinLogin, params);\n    }\n    shipinhaoCheckLinkValidate(params: ShipinhaoCheckLinkValidateParams) {\n        return this.bindTask(shipinhaoCheckLinkValidate, params);\n    }\n    shipinhaoGetLocation(params: ShipinhaoGetLocationParams) {\n        return this.bindTask(shipinhaoGetLocation, params);\n    }\n    shipinhaoGetMsg(params: ShipinhaoGetMsgParams) {\n        return this.bindTask(shipinhaoGetMsg, params);\n    }\n    shipinhaoGetMsgImage(params: ShipinhaoGetMsgImageParams) {\n        return this.bindTask(shipinhaoGetMsgImage, params);\n    }\n    shipinhaoSendMsg(params: ShipinhaoSendMsgParams) {\n        return this.bindTask(shipinhaoSendMsg, params);\n    }\n}\n\ntype ActionInstance = InstanceType<typeof Action>;\n\n// 提取方法的参数类型\ntype MethodParams<T> = {\n    // biome-ignore lint/suspicious/noExplicitAny: 有使用 any\n    [K in keyof T]: T[K] extends (...args: any[]) => unknown ? Parameters<T[K]>[0] : never;\n};\n\n// 应用于 Action 类的实例\nexport type ActionMethodParams = MethodParams<ActionInstance>;\n\nexport { version } from \"../package.json\";\nexport { type BaijiahaoPublishParams, BaijiahaoPublishParamsSchema } from \"./actions/baijiahaoPublish\";\nexport type { sessionCheckResult } from \"./actions/common/sessionCheck\";\nexport {\n    SessionCheckResultSchema,\n    type WxBjhSessionParams,\n    WxBjhSessionParamsSchema,\n} from \"./actions/common/sessionCheck\";\nexport type {\n    CreateCommentResponse,\n    CreateShipinhaoCommentParams,\n} from \"./actions/createShipinhaoComment\";\nexport {\n    type DouyinCheckVerifyQrCodeParams,\n    DouyinCheckVerifyQrCodeParamsSchema,\n    type QrCodeCheckResult,\n    type QrCodeStatusConfirmed,\n    type QrCodeStatusExpired,\n    type QrCodeStatusNew,\n} from \"./actions/douyinCheckVerifyQrCode\";\nexport {\n    type DouyinCreateCommentReplyParams,\n    DouyinCreateCommentReplyParamsSchema,\n} from \"./actions/douyinCreateCommentReply\";\nexport { type DouyinGetCollectionParams, DouyinGetCollectionParamsSchema } from \"./actions/douyinGetCollection\";\nexport { type DouyinGetCommentListParams, DouyinGetCommentListParamsSchema } from \"./actions/douyinGetCommentList\";\nexport {\n    type DouyinGetCommentReplyListParams,\n    DouyinGetCommentReplyListParamsSchema,\n} from \"./actions/douyinGetCommentReplyList\";\nexport { type DouyinGetHotParams, DouyinGetHotParamsSchema } from \"./actions/douyinGetHot\";\nexport { type DouyinGetLocationParams, DouyinGetLocationParamsSchema } from \"./actions/douyinGetLocation\";\nexport { type DouyinGetMusicParams, DouyinGetMusicParamsSchema } from \"./actions/douyinGetMusic\";\nexport {\n    type DouyinGetMusicByCategoryParams,\n    DouyinGetMusicByCategoryParamsSchema,\n} from \"./actions/douyinGetMusicByCategory\";\nexport {\n    type DouyinGetMusicCategoryParams,\n    DouyinGetMusicCategoryParamsSchema,\n} from \"./actions/douyinGetMusicCategory\";\nexport { type DouyinGetTopicsParams, DouyinGetTopicsParamsSchema } from \"./actions/douyinGetTopics\";\nexport {\n    type DouyinGetVerifyQrCodeParams,\n    DouyinGetVerifyQrCodeParamsSchema,\n} from \"./actions/douyinGetVerifyQrCode\";\nexport { type DouyinGetWorkListParams, DouyinGetWorkListParamsSchema } from \"./actions/douyinGetWorkList\";\nexport type { DouyinLoginParams } from \"./actions/douyinLogin\";\nexport { type DouyinPublishParams, DouyinPublishParamsSchema } from \"./actions/douyinPublish\";\nexport { ConfigDataSchema } from \"./actions/getBaijiaohaoConfig\";\nexport type { BgmDetail, BgmListResponse, GetShipinhaoBgmParams } from \"./actions/getShipinhaoBgm\";\nexport type {\n    BgmCategoryDetail,\n    BgmCategoryListResponse,\n    GetShipinhaoBgmCategoryParams,\n} from \"./actions/getShipinhaoBgmCategory\";\nexport type {\n    CollectionDetail as ShipinhaoCollectionDetail,\n    CollectionDetailResponse,\n    GetShipinhaoCollectionParams,\n} from \"./actions/getShipinhaoCollection\";\nexport type {\n    CommentDetail,\n    CommentListResponse,\n    GetShipinhaoCommentListParams,\n} from \"./actions/getShipinhaoCommentList\";\nexport type {\n    GetShipinhaoPostListParams,\n    PostDetail,\n    PostListResponse,\n} from \"./actions/getShipinhaoPostList\";\nexport { type CollectionDetail, CollectionDetailSchema } from \"./actions/getXhsCollection\";\nexport { type UnreadCount, UnreadCountSchema } from \"./actions/getXhsWebUnreadCount\";\nexport { type SearchAccountInfoParams, SearchAccountInfoParamsSchema } from \"./actions/searchAccountInfo\";\nexport {\n    type bjhConfigData,\n    bjhConfigDataSchema,\n    type douyinConfigData,\n    douyinConfigDataSchema,\n    type shipinhaoConfigData,\n    shipinhaoConfigDataSchema,\n    type ttConfigData,\n    ttConfigDataSchema,\n    type wxConfigData,\n    wxConfigDataSchema,\n    type xhsConfigData,\n    xhsConfigDataSchema,\n} from \"./actions/searchAccountInfo/types\";\nexport { type FetchArticlesParams, FetchArticlesParamsSchema } from \"./actions/searchPublishInfo\";\nexport { type FetchArticlesData, FetchArticlesDataSchema } from \"./actions/searchPublishInfo/types\";\nexport {\n    type ShipinhaoCheckLinkValidateParams,\n    ShipinhaoCheckLinkValidateParamsSchema,\n} from \"./actions/shipinhaoCheckLinkValidate\";\nexport { type ShipinhaoGetLocationParams, ShipinhaoGetLocationParamsSchema } from \"./actions/shipinhaoGetLocation\";\nexport { type ShipinhaoGetMsgParams, ShipinhaoGetMsgParamsSchema } from \"./actions/shipinhaoGetMsg\";\nexport type { ShipinhaoLoginParams } from \"./actions/shipinhaoLogin\";\nexport { type ShipinhaoPublishParams, ShipinhaoPublishParamsSchema } from \"./actions/shipinhaoPublish\";\nexport { type ShipinhaoSendMsgParams, ShipinhaoSendMsgParamsSchema } from \"./actions/shipinhaoSendMsg\";\nexport { type ToutiaoPublishParams, ToutiaoPublishParamsSchema } from \"./actions/toutiaoPublish\";\nexport { type WeixinPublishParams, WeixinPublishParamsSchema } from \"./actions/weixinPublish\";\nexport { type XiaohongshuPublishParams, XiaohongshuPublishParamsSchema } from \"./actions/xiaohongshuPublish\";\nexport { type XhsWebSearchParams, XhsWebSearchParamsSchema } from \"./actions/xiaohongshuWebSearch\";\nexport { type ActiomCommonParams, ActionCommonParamsSchema } from \"./types\";\nexport { getFileState } from \"./utils\";\nexport { Http } from \"./utils/http\";\nexport { ProxyAgent } from \"./utils/proxy\";\nexport { reportLogger } from \"./utils/reportLogger\";\n// 内部测试方法\n\nexport { rpaAction_Server_Mock } from \"./actions/xiaohongshuPublish/rpa-server-mock\";\n"],"names":["encrypt_lookup","esm_typeof","t","encrypt_b64Encode","e","r","n","o","i","a","u","s","c","l","f","p","h","d","v","g","m","y","w","b","_","E","x","k","T","S","A","L","I","R","O","C","N","P","B","M","j","F","D","q","U","G","H","V","W","a0_0x10f4ac","X","z","Y","K","J","$","Q","Z","tt","encrypt_encodeChunk","encrypt_encodeUtf8","encodeURIComponent","parseInt","sign_common","JSON","encrypt_tripletToBase64","a0_0x3693","encrypt_mcr","GenXSCommon","a1cookie","x_t","x_s","b1","module","encoder","TextEncoder","leftRotate","shift","gt","value","length","_padChar","String","normalizeRuntime","runtime","Date","Math","getArr","input","format","reg","compress","block","temp","Array","state","tValue","ff","gg","ss1","ss2","tt1","tt2","write","bytes","index","fill","bitLength","BigInt","high","Number","low","result","encodeCustomBase64","alphabet","charCode0","charCode1","charCode2","baseNum","remaining","abArr256","nums","previousValue","lm","num1","abGarbledCharacters","arr256","n4","n2","n3","oldArrN2","n5","n6","n7","n8","uaArr256","userAgent","uaSalt","uaGarbledCharacters","encryptionUa","chars","getArr2","data","char","getLast3Num","dateTime1","timestamp","getLastNum2","arr1","arr","arrIndexes","xorResult","getNumList","arr0","arrAr","numList","randomValue","num2","num3","num4","topHeaderRandomGarbledCharacters","randomGarbledCharactersArrayList","randomGarbledCharactersArray1","randomGarbledCharactersArray2","getArr29","dateTime2","params","parArr","dataArr","browserArr","arr2","num","dateTime3","arr32","arr36","lastNumOne","lastNum","newArr","newArr2","getGarbledString","runtimeOptions","timestamp1","timestamp2","arr29","prefix","mixed","getABogus","url","safeUrl","safeData","safeUserAgent","mixedData","garbledString","crypto","require","hexToBuffer","hexString","Buffer","normalized","concatByteArrays","arrays","parts","Uint8Array","sliceArray","array","values","hmacSha256Sign","key","keyBuffer","dataBuffer","base64UrlToBuffer","getXCoordinateHexFromCertificate","certificatePem","certificate","jwk","getPrivateScalarHex","privateKeyPem","privateKey","getF","privateKeyHex","publicKeyHex","ecdh","ne","compressedPublicKeyHex","sharedKey","zeroKey","emptyBytes","outputLength","kdfFunction","seedHex","extraBytes","requiredLength","output","previousHex","counter","previousBytes","combined","initialKey","customHexBase64","getHeadersBdTicketGuardClientData","ticket","path","tsSign","secretKey","dataToSign","signature","reqSign","clientData","getBdV2","responseObj","options","headersBdTicketGuardClientData","generateCsrfToken","cookies","method","sessionid","getCookieValue","uid_tt","msToken","ttwid","version","timestampHex","random","generateRandomHex","signData","hash","csrfToken","name","cookie","generateCsrfTokenAdvanced","sid_guard","odin_tt","timestampSec","pathname","urlObj","URL","signParts","Boolean","firstHash","secondHash","generateCsrfTokenSimple","parseCsrfToken","token","date","RSA_PUBLIC_KEY_PEM","size","plaintext","publicKeyPem","rsaEncryptBase64","hexToBytes","hexStr","importAesCbcKey","raw","Error","bytesToB64","aesCbcEncrypt","plainText","keyHex","ivBytes","iv","cipher","ctBytes","ivPlusCt","bytesToHex","encrypted","aesCbcEncryptWithRandomIv","encryptWithRsaPublicKeyBase64","dtraitToken","payload","jsonText","randKeyBytes","enc","rsaB64","generateDtrait","UNSIGNABLE_HEADERS","sha256","hmac","getSigningKey","secretAccessKey","dateStamp","region","service","kDate","kRegion","kService","kSigning","isSignableHeader","header","lowerHeader","canonicalHeaderValues","canonicalHeaders","headers","headerPairs","Object","lowerKey","signedHeaders","headerNames","canonicalQueryString","iso8601","randomS","pool","generateAuthorization","config","accessKeyId","sessionToken","body","now","amzDate","requestHeaders","canonicalQueryStr","canonicalHeadersStr","signedHeadersStr","payloadHash","canonicalRequest","algorithm","credentialScope","canonicalRequestHash","stringToSign","signingKey","authorization","fs","calculateFileCrc32","filePath","crc32Value","crc32","crc32Hex","CRC_TABLE","crc","byte","a0_0x45db08","a0_0x4b0d","_0x2bd218","_0x316d6","_0x165410","a0_0x1654","_0x4b0d73","_0x5794db","_0x1859e3","_0x1b2596","_0x16c0e0","_0x1227f1","_0x46fb59","_0x383dd4","_0x4fc071","Random","Ts","Sm3DoneTs","xhrParaDoneTs","xhrReqDoneTs","_0x46e031","SM3Hasher","_0x468533","_0x11e792","_0x22d1ef","_0x182388","_0x2ded18","_0x5e491d","_0x12d911","_0x5795ab","_0x22d98b","_0x5659da","_0x357908","_0x5c0d1c","_0x2e8583","_0x28f42f","_0x4b2a85","_0xffe4ea","_0x34ff8d","_0xecf9f6","_0x3ddb20","_0x28ac8a","_0x117621","_0x335539","_0x450e58","_0x5b1ad8","_0x46ad66","_0xa844a0","_0x15bc36","_0x4a32f3","_0x36cc0b","_0xd7dcfe","_0x1e530c","_0x3c50af","_0x3da582","_0x14b06e","_0x4ec82e","_0x489962","_0x5dd43e","_0x744660","console","_0x197f71","_0x5e22dd","_0xfc800b","_0x1300f1","_0xed8891","_0x3414cb","_0x2f42fb","_0x326645","_0x2c63af","_0x558c0d","_0x4a902b","_0x493bba","_0x23a9bd","_0x7114f5","_0x49cf1f","_0x698c70","_0xe5328","_0x2b58f2","_0x17c086","_0x3621a2","_0x5959b9","_0x3b42ff","_0x50d411","_0x910e21","_0x459622","EnvData2CharCode","_0x58cd97","_0x23e1e0","_0x3ca6b2","_0x56cb93","_0x2d49d4","_0x3f2013","_0x4b8ded","_0x5bb315","_0x42b4c4","_0x1cdc95","_0x58aa5d","_0x26ee7a","_0xe2d586","_0x571095","_0x4dabdb","_0x4139e6","_0x339170","_0x56e1cd","_0x24b6d5","_0x196cf7","_0x2eb1f3","_0x2171ba","_0x925e58","_0x540dbd","_0x2fbb10","_0x41ebdd","_0x42a240","_0x49ec53","_0x3d9ba0","_0xeaa831","_0x477e24","_0x3bd924","_0xa7bf19","_0x23c273","_0x4d13ab","Base2Data","_0x348aa6","_0x2bc7c7","_0x874207","_0x224d00","_0x31697c","_0x235e4f","_0x29dde1","_0x4a74f1","_0xef36c2","_0x4120e4","_0x39cb62","_0x5cbaf6","_0x29a672","_0x96c5ae","_0x46c34b","_0x5d4cb4","_0x506f4f","Data2A_B","_0x19ca6d","_0x5d8d72","_0x225e7d","_0x4f0a28","_0x251d62","_0x2b8eea","_0x3fca04","_0xb85a46","_0x4e702d","_0x4382e1","_0x225aa0","_0x5607b9","_0x3fb7b7","_0x425784","GenAB","_0x315138","_0x1c32b3","_0x206982","_0x56536b","encodeUtf8","r2","tripletToBase64","encodeChunk","c2","b64Encode","encode_mnsv2","mnsv2","type","platform","req_type","_0x5e26","_0x4a41","_0x1218b5","_0x5e2612","_0x4a419f","_0xe72767","_0xe7f5e","_0x3fd162","_0x257514","_0x5c8197","glb","globalThis","_0x24c604","_0x6a35ed","_0x22f624","_0x7083c4","_0x12b83a","_0x1ff265","_0x19dd10","_0x2bfbca","_0x5cafee","_0x2f08d7","_0x37fbe9","_0x33582f","_0x641642","_0x2fdb95","_0x1258bd","_0x5bf9ad","_0xf255ce","_0xee3311","_0x318ddf","_0x4385f3","_0x584e4a","_0x5c149f","_0x17b7fe","_0x174344","_0x18d99e","_0x5cbc7d","_0x56bf71","_0x3dc1b2","_0x16e5da","_0xa53bfb","_0x485b39","_0x387bd5","_0x3dcf70","_0x48eb89","_0x5d0e43","_0xe05ad5","_0x2463d8","_0x1a5a8f","_0x49936e","_0x45d1a1","_0x2a01a0","_0x3ff15b","_0x4f901b","_0x1dfe70","_0x51b176","_0x3d45e0","_0xf84a5d","_0x39dfca","_0x3e5179","_0x3f8716","_0x3aa298","_0x4d3f6b","_0x4446eb","_0x4c8666","_0x1397bd","_0x3b53d5","_0x25f6f4","_0x29b4e2","_0x3f4419","_0x5170ae","_0x1359a6","_0x50e590","_0x338aeb","_0x3a9605","_0x290bc9","_0x1ff6c7","_0xcd43a3","_0x3b25e9","_0x5e42f8","_0x1ba8e5","_0x26aef5","_0x65c1f7","_0x373aa4","_0x50d703","_0x928a91","_0xb408a6","_0x20a02d","_0x29f74b","_0x545253","_0x358a47","_0x3f46e4","_0x18ec78","_0x4a7966","_0x31653d","_0x3e50ef","_0x4d3a96","_0x1a13b2","_0x3bacd8","_0x5887b3","_0x436eef","_0x5222c2","_0x2c8c91","_0x7980dd","_0xd59293","_0x2b8404","_0x24f33b","_0xd06423","_0x472411","_0x583510","_0x560524","_0x189796","_0x28584e","_0x4faf64","_0x4b2e99","_0x3623da","_0xce7c94","_0x9032ec","_0x14736a","_0x6288b8","_0x4f7385","_0x49c856","_0x176f10","_0x5253ed","_0x261198","_0x176d4f","_0x5cb9a5","_0x319795","_0x380a2e","_0x42b18d","_0x38ffc5","_0x5cfc49","_0x2f4e06","_0x1f4ce1","_0x579306","_0x125668","_0x1a570e","_0x15b5be","_0x55b590","_0x5a2f99","_0x2b20aa","_0x25efe9","_0x5a70e7","_0x301cd3","_0x1701b4","_0x42f110","_0x5aa648","_0x105428","_0x47dd10","_0x410a4e","_0x97fa53","_0x8beaee","_0x584b00","_0x4e8343","_0x434d83","_0x3e4974","_0x1f5b2f","_0xfeec47","_0x9fb647","_0x8c3df2","_0x17fbce","_0x246e23","_0x2163fd","_0x4557a3","_0x5ce007","_0x189e3c","_0x39d9b2","_0x4d5e62","_0x3c4e2e","_0x1275b5","_0x111acb","_0x45d234","_0x5c740a","_0x330c1e","_0x496b23","_0x3b8ef1","_0x231263","_0x25eebc","_0x1b69fa","_0x1da372","_0x2272aa","_0x11af26","_0x4404cf","_0x35dada","_0x334cfd","_0x43e4f0","_0x3cf229","_0x1b53c3","_0x5d9a2a","_0x2e2a54","_0x1d5c8b","_0x275a32","_0x4b36cf","_0x974374","_0x11b253","_0x3510ae","_0x2c1c19","_0x237c62","_0x2ed7be","_0x27caf3","_0x59cf43","_0x161ca7","_0x351dad","_0x59f40f","_0x56db54","_0x2731c5","_0x215661","_0x20571c","_0x2f81a1","_0x325743","_0x315b84","_0x29299d","_0x26e36b","_0x3ccd9d","_0x1bb79d","_0xc8fbc5","_0x1a7921","_0x10f7a4","_0x1e948f","_0x5ec926","_0x2a9505","_0x3a3eed","_0x55fbaf","_0x266fac","_0x3c78a3","_0x35474d","_0xa44cbd","_0xb82f14","_0x22aa37","_0x17d4ea","_0x2636de","_0x45fc23","_0x56bd98","_0x17a8e3","_0x1bb49c","_0x406702","_0x5cfd36","_0x38316d","_0x172a9d","_0x5382c2","_0x2ad38b","_0x367bd3","_0x39fe15","_0xf72fd1","Reflect","Proxy","_0x1acf38","_0x5419d5","_0xc4e151","_0x1cdc6a","_0x385b68","_0x3cb9ef","_0xaf1f2b","_0x2035d4","_0xa530a2","_0x5349ad","_0x31f90b","_0x355d4c","_0x28afe6","_0x17e79c","_0x12fb2d","_0x2fcaa9","Function","_0x2e7a26","arguments","_0x50aa3b","_0x5b028a","_0x120a3e","_0x5179ac","_0x5685b9","_0x1373ba","_0xa8799b","_0x11608f","_0x4605ce","_0x458cba","_0x40af62","_0x47239e","_0xd94b9a","Symbol","TypeError","_0x22f5c2","_0xc15748","_0x498cf3","_0x2ab336","_0x49c968","_0x2435ac","_0x4de9cc","_0x43ddd5","_0xb96fbb","_0x3ad1bc","_0x2a37cd","_0x486235","_0x105c68","_0x4f381c","_0xfa87b5","_0x5c9ccf","_0x2fc50f","_0x5ac37a","_0x5d468d","_0xd412d2","_0x2b32ac","_0x26614f","_0x1b0b08","_0x89bc72","_0x10e5cb","_0x2a1ef9","_0x4112a4","_0x14cec8","_0x586fa1","_0x4746fc","_0x50db27","_0x3a05d0","_0x4987a0","_0x29944e","_0x8bea75","_0x4da4b2","_0x2ce82e","_0x24f400","_0x51cce9","_0x1414c9","_0x48f581","_0x53ce65","_0x428514","_0x5c4110","_0x5e0b6d","_0x168ac1","_0xdeab25","_0x323a2b","_0x28c6bf","_0x8096f5","_0x2d0b41","_0x1d2320","_0x3121f2","_0x23b9e8","_0x42ee3d","_0x440e84","_0x36c245","_0x377410","_0x36ee46","_0x50dc14","_0x2d295a","_0x4fed5f","_0x1fdc1b","_0x3714b9","_0x484194","_0x7e7569","_0x1b87f3","_0x4e3c2b","_0x33e19f","_0xa3097b","_0xa9d1be","_0x4ab42b","_0x564652","_0xe4f438","_0x58c899","_0x3c7e4c","_0x36c27e","_0x102483","_0xa0b332","_0x4b430a","_0x524bf4","_0x2f0111","_0x4a995d","_0x31793d","_0x568eef","_0x1d4fa7","_0x1c5004","_0x30595f","_0x4e19c9","_0xf3aac1","_0xcd74f4","_0x4857c3","_0x6ea9fa","_0x1338c6","_0x1cc642","_0xf70f4c","_0x391e0e","_0x25d459","_0x42fb78","_0x28fdfd","_0x20fe2e","_0x1bafbb","_0x24e420","_0xbd2f50","_0x3c286b","_0x407daf","_0x2b4fe1","_0x1bf090","_0x502aec","_0x2086de","_0x13679c","_0x357cd1","_0x3b8cb1","_0x44fdd7","_0x3a98c2","_0x43c136","_0x121dbc","_0x210cf9","_0x5479","_0x55e4","_0x5a83dc","_0x547951","_0x55e409","_0x4d6a1b","_0xf55a6c","_0x4256ee","_0x17d3cf","_0xa70d40","_0x50a5e0","_d1b4df64eb152aa1d24e82f9bd0bfe7b","_0x1acabb","_0x456f43","_0x106df0","_0x1e2b8c","_0x3e16ea","_7140998d8f99c8324e0fcd817edff9b2","_0x139611","_0x131c86","_0x434b65","_0x2fdad2","_0x11de5b","_0x54f135","_0x47d7a2","_0x1cdab2","_0x3621ec","_0x1b667f","_0x7a6865","_6e8d40c844a972a6429074a59f678907","_0x496cdc","_0x5dd132","_0x4a0480","_0x2eac01","_0x56ce93","_575364e3fbdd1929a75a10a5118cc687","_0x362fcb","_0x3d21ce","_0x1e626c","_0x58bacc","_972e441617b5152eab406b3c2c8e25ff","_0x17d27e","_0x3f568d","_0x17f238","_0x5ce91f","_0x32e788","_0x38e84a","_0x914ea2","_0x259971","_2b3beb7962f7014c81b260f8aa1890be","_0x2d2326","_0x43e7ad","_0x5c56da","_0x2055b1","eval","_2d6b4518857b5d2355e5bd9809691b44","_0x543826","_0x3993fb","_0x3f7c9e","_0x1bf349","_0x298685","_0x585396","_0x30fb04","_0x21db63","_0x382aae","_0x546bf","_0x434164","_0x204d91","_0x19f010","_0x160df0","_0x528411","_0x4d6e02","_0x7e49ef","_0x543b8f","_0x16b1fb","_0x3d4192","_0xfd6cc0","_0x3fbacd","_0x45d0a5","_0x5c2c91","_0x922e84","_0x4a3e21","_0x4f3d04","_f523010cd8cf5fb75250d1fc2f671c73","_0xe64b03","_0x1e8b75","_0x1447ab","_0x2c06b2","_0x202073","_0x429066","_0x56585f","_0xffa0f2","_0x29f84f","_e0c26a2a191851217a8ed324fc1d568d","__$c","undefined","setTimeout","Promise","clearTimeout","performance","requestAnimationFrame","requestIdleCallback","RegExp","document","unescape","navigator","InstallTrigger","Set","XMLHttpRequest","chrome","Event","top","$toString","symbol","myToString","safeFunction1","func","funcname","makeFunction","safeFunction","Window","global","tagName","async","EventTarget","Node","Element","HTMLElement","HTMLHtmlElement","HTMLAllCollection","HTMLBodyElement","Document","HTMLDocument","PermissionStatus","Permissions","Storage","Location","PROXY_CREDENTIALS","findProxyCredential","ip","port","portNum","buildProxyUrl","credential","user","pass","ProxyAgent","task","addr","accountId","refresh","http","Http","ProxyInfo","err","loggerInfo","proxyAgent","SocksProxyAgent","error","logger","axios","interceptors","findError","response","foundError","errorResponse","verifyDecision","serverError","_message","createHash","stringifyError","message","retries","retryDelay","reqTimeout","agent","sessionRt","Rtimes","controller","AbortController","timeoutId","handledError","isRetry","resolve","requestUrl","platformTag","getRandomInRange","min","max","getFileState","filename","fileType","mime","stats","fileSize","lastModifiedDate","calculateCropCoordinates","width","height","aspectRatio","targetRatio","cropWidth","cropHeight","x1","y1","x2","y2","extractImgTag","html","srcList","parser","Parser","attributes","src","currentSrc","formatSectionHtml","handler","DomHandler","dom","sections","DomUtils","node","section","imgs","hasValidImg","img","domSerializer","TimeFormatter","formatStr","map","replaceImgSrc","callback","lastedHtml","isImageTag","traverseDom","child","executeAction","actions","action","copyHtmlToClipboard","page","htmlContent","blob","Blob","ClipboardItem","div","range","selection","window","PopupListener","popupSelector","popKey","buttonSelector","checkInterval","stopAfterClick","popup","button","intervalId","setInterval","clearInterval","parseUrlQueryString","queryStringObject","queryString","queryWithoutHash","queryStringArray","item","equalIndex","decodeURIComponent","defaultParams","defaults","rpaAction","_params","reporter","isSelfClosing","handleBrowserDisconnected","cleanup","pageInfo","pageId","baseHost","connectAddress","URLSearchParams","route","res","buffer","mimeType","dataUrl","request","hasInjectedQrcode","_request","base64","userInfo","cookieHeader","fetch","jsonUser","success","$constructor","initializer","init","inst","def","_a","Parent","Definition","fn","$ZodAsyncError","$ZodEncodeError","globalConfig","newConfig","entries","numericValues","joinValues","separator","val","stringifyPrimitive","jsonStringifyReplacer","cached","getter","set","nullish","cleanRegex","source","start","end","floatSafeRemainder","step","valDecCount","stepString","stepDecCount","match","decCount","valInt","stepInt","EVALUATING","defineLazy","object","assignProp","target","prop","mergeDefs","defs","mergedDescriptors","descriptors","esc","str","captureStackTrace","_args","isPlainObject","ctor","prot","shallowClone","propertyKeyTypes","escapeRegex","clone","cl","normalizeParams","optionalKeys","shape","NUMBER_FORMAT_RANGES","pick","schema","mask","currDef","newShape","omit","extend","checks","hasChecks","_shape","safeExtend","merge","partial","Class","oldShape","required","aborted","startIndex","prefixIssues","issues","iss","unwrapMessage","finalizeIssue","ctx","full","getLengthableOrigin","args","$ZodError","$ZodRealError","flattenError","mapper","issue","fieldErrors","formErrors","sub","formatError","processError","curr","el","terminal","_parse","_Err","_ctx","_parseAsync","_safeParse","safeParse","_safeParseAsync","safeParseAsync","_encode","_decode","_encodeAsync","_decodeAsync","_safeEncode","_safeDecode","_safeEncodeAsync","_safeDecodeAsync","cuid","cuid2","ulid","xid","ksuid","nanoid","duration","guid","email","_emoji","emoji","ipv4","ipv6","cidrv4","cidrv6","hostname","e164","dateSource","timeSource","hhmm","regex","datetime","time","opts","timeRegex","string","integer","lowercase","uppercase","$ZodCheck","numericOriginMap","$ZodCheckLessThan","origin","bag","$ZodCheckGreaterThan","$ZodCheckMultipleOf","isMultiple","$ZodCheckNumberFormat","isInt","minimum","maximum","$ZodCheckMaxLength","$ZodCheckMinLength","$ZodCheckLengthEquals","tooBig","$ZodCheckStringFormat","_b","$ZodCheckRegex","$ZodCheckLowerCase","$ZodCheckUpperCase","$ZodCheckIncludes","escapedRegex","pattern","$ZodCheckStartsWith","$ZodCheckEndsWith","$ZodCheckOverwrite","Doc","arg","content","lines","minIndent","dedented","line","$ZodType","ch","runChecks","isAborted","asyncResult","shouldRun","currLen","nextLen","handleCanaryResult","canary","checkResult","$ZodString","$ZodStringFormat","$ZodGUID","$ZodUUID","versionMap","$ZodEmail","$ZodURL","trimmed","$ZodEmoji","$ZodNanoID","$ZodCUID","$ZodCUID2","$ZodULID","$ZodXID","$ZodKSUID","$ZodISODateTime","$ZodISODate","$ZodISOTime","$ZodISODuration","$ZodIPv4","$ZodIPv6","$ZodCIDRv4","$ZodCIDRv6","address","prefixNum","isValidBase64","atob","$ZodBase64","isValidBase64URL","padded","$ZodBase64URL","$ZodE164","isValidJWT","tokensParts","parsedHeader","$ZodJWT","$ZodNumber","received","$ZodNumberFormat","$ZodBoolean","$ZodAny","$ZodUnknown","$ZodNever","handleArrayResult","final","$ZodArray","proms","handlePropertyResult","normalizeDef","keys","okeys","handleCatchall","unrecognized","keySet","_catchall","$ZodObject","desc","sh","newSh","_normalized","propValues","field","isObject","catchall","$ZodObjectJIT","superParse","generateFastpass","doc","parseStr","ids","id","fastpass","jit","allowsEval","fastEnabled","handleUnionResults","results","nonaborted","$ZodUnion","option","patterns","single","first","$ZodIntersection","left","right","handleIntersectionResults","mergeValues","bKeys","sharedKeys","newObj","sharedValue","newArray","itemA","itemB","merged","$ZodRecord","keyResult","$ZodEnum","valuesSet","$ZodLiteral","$ZodTransform","_out","handleOptionalResult","$ZodOptional","$ZodNullable","$ZodDefault","handleDefaultResult","$ZodPrefault","$ZodNonOptional","handleNonOptionalResult","$ZodCatch","$ZodPipe","handlePipeResult","next","$ZodReadonly","handleReadonlyResult","$ZodCustom","handleRefineResult","_iss","Sizable","getSizing","Nouns","adj","sizing","_issue","WeakMap","Map","_meta","meta","pm","registry","globalRegistry","_string","_email","_guid","_uuid","_uuidv4","_uuidv6","_uuidv7","_url","_nanoid","_cuid","_cuid2","_ulid","_xid","_ksuid","_ipv4","_ipv6","_cidrv4","_cidrv6","_base64","_base64url","_e164","_jwt","_isoDateTime","_isoDate","_isoTime","_isoDuration","_number","_int","_boolean","_any","_unknown","_never","_lt","_lte","_gt","_gte","_multipleOf","_maxLength","_minLength","_length","_regex","_lowercase","_uppercase","_includes","includes","_startsWith","_endsWith","suffix","_overwrite","tx","_normalize","form","_trim","_toLowerCase","_toUpperCase","_array","element","_custom","norm","_refine","_superRefine","_check","ZodISODateTime","ZodISODate","ZodISOTime","ZodISODuration","ZodRealError","ZodType","check","refine","refinement","superRefine","optional","nullable","nonoptional","union","intersection","pipe","transform","prefault","readonly","description","_ZodString","ZodString","ZodEmail","ZodURL","ZodJWT","ZodEmoji","ZodGUID","ZodUUID","ZodNanoID","ZodCUID","ZodCUID2","ZodULID","ZodBase64","ZodBase64URL","ZodXID","ZodKSUID","ZodIPv4","ZodIPv6","ZodCIDRv4","ZodCIDRv6","ZodE164","ZodStringFormat","ZodNumber","ZodNumberFormat","ZodBoolean","ZodAny","any","ZodUnknown","unknown","ZodNever","never","ZodArray","minLength","maxLength","len","ZodObject","incoming","other","ZodOptional","ZodNonOptional","ZodUnion","ZodIntersection","ZodRecord","record","keyType","valueType","ZodEnum","newEntries","ZodLiteral","literal","ZodTransform","innerType","ZodNullable","ZodDefault","defaultValue","ZodPrefault","ZodCatch","catchValue","ZodPipe","in_","out","ZodReadonly","ZodCustom","custom","en","ActionParamsSchema","ActionCommonParamsSchema","CookieBaseSchema","LocalStorageBaseSchema","ExecutionState","code","MockPublish","DisabledReq","scanRetryMaxCount","waitQrcodeResultMaxTime","rpaServer","updateTaskState","executionState","proxyUrl","ProxyAgentResult","browserContext","browser","style","newStyle","TaskState","reject","finished","timer","handleWebCommon","handleCheckQR","handleBrowserClosed","resp","jsonResponse","jsonPStr","jsonStr","channel_v","msg","baijiahaoLogin","reportLogger","baseUrl","generateTopicHtml","topic","sv_small_images","generateUid","topicBase","topicAttr","attrStr","errnoMap","mockAction","baijiahaoSingleCover","baijiahaoMultCover","baijiahaoCoverType","tmpCachePath","it","proxyHttp","msgType","errmsg","appIdInfo","appId","uploadImages","_images","images","fileName","getFilenameFromUrl","ext","image","downloadImage","formData","FormData","originContentImages","targetContentImages","topicCheck","idx","horizontalCoverUrl","horizontalCoverRes","cover_images","_cover_images_map","isAi","activityList","cover_layout","activity_list","publishData","isDraft","saveUrl","isSuccess","validCookies","_error","_err","isLoggedIn","titleEditor","coverFormItem","isSingleCover","firstSlot","modal","localTab","uploadBtn","beforeCount","fileChooserPromise","fileChooser","before","allBlobItems","count","clicked","isSelected","abstractTextarea","policyTip","aiSettingSection","confCheckbox","isChecked","event2NewsCheckbox","shouldCheck","statementSection","aigcCheckbox","hasEventSpec","sourceCheckLabel","isSourceChecked","sourceWrap","targetDate","datePickerInput","pickerPanel","targetYear","targetMonth","attempt","yearText","monthText","currentYear","currentMonth","isAfter","cascader","levels","level","cascaderDropdown","activity","activityFormItem","findCard","articleId","handleResponse","operatorContainer","scrollHourInfo","hourInner","hourElementHeight","hourMapsElem","hourMap","fistHourElem","fistHourElemH","lastHourElem","lastHourElemH","targetTimeH","scrollMinuteInfo","fistMinuteElem","fistMinuteElemH","lastMinuteElem","lastMinuteElemH","targetTimeM","BaijiahaoPublishParamsSchema","baijiahaoPublish","generatorFormData","TTFansExport","_task","fans","getToutiaoToken","userId","cookieStr","https","location","fansDetail","descriptionRes","XhsFansExport","WxFansExport","htmlStr","descMatch","BjhFansExport","CryptoConfig","BitOperations","inputArray","keyBytes","RandomGenerator","byteCount","minVal","maxVal","seq","part1","part2","Base64Encoder","dataToEncode","dataBytes","standardEncodedString","encodedString","standardString","base64String","RequestSignatureValidator","normalizedMethod","uri","a1Value","xsecAppid","CryptoProcessor","ts","xorKey","sum1","sum2","mark","hexParameter","appIdentifier","stringParam","seed","seedBytes","seedByte0","tsMs","timeOffset","sequenceValue","windowPropsLength","uriLength","md5Bytes","a1Bytes","sourceBytes","CRC32","table","signed","FingerprintData","FingerprintHelpers","weights","totalWeight","sum","weight","rendererStr","vendor","renderer","resolutionStr","widthStr","heightStr","availWidth","availHeight","ARC4","keyByte","FingerprintGenerator","cookieString","screenConfig","isIncognitoMode","x78Y","fp","b1Fp","b1Json","ciphertext","latin1String","encodedUrl","part","XsCommonSigner","cookieDict","fingerprint","x9","signStruct","signJson","Xhshow","valueStr","dValue","payloadArray","validatedMethod","validatedUri","validatedA1Value","validatedXsecAppid","validatedPayload","signatureData","signatureJson","cookieObj","methodUpper","requestData","xS","xSCommon","xT","xB3Traceid","xXrayTraceid","x3Signature","decodedBytes","xsSignature","jsonString","xsEncrypt","lastEnvLogTime","ENV_LOG_INTERVAL_MS","SessionCheckResultSchema","WxBjhSessionParamsSchema","TTSessionCheck","WxSessionCheck","XhsSessionCheck","shouldLogEnv","process","a1Cookie","loginBasePath","recordCookie","acc","loginBaseXsHeader","signError","baseInfoStart","_baseInfo","clientTimestamp","serverDate","serverTimestamp","timeDriftMs","webSessionPath","webSessionData","webSessionXsHeader","_web_session","baseInfo","web_session","BjhSessionCheck","DySessionCheck","ShipinhaoSessionCheck","getTimeStamp","requestBody","rid","hexTable","createShipinhaoComment","urlParams","DouyinCheckVerifyQrCodeParamsSchema","mergeSetCookies","oldCookies","setCookieHeader","setCookies","cookieMap","nameValue","eqIdx","attrs","attrEq","existing","douyinCheckVerifyQrCode","bizTraceId","passportCsrfToken","checkBody","checkBodyStr","checkQueryParams","checkQueryStr","checkUrl","aBogus","finalQueryStr","sessionDtrait","rawSetCookie","checkHttp","checkResponse","status","updatedCookies","DouyinCreateCommentReplyParamsSchema","douyinCreateCommentReply","queryParams","queryParamsBefore","DouyinGetCollectionParamsSchema","douyinGetCollection","collectionParams","DouyinGetCommentListParamsSchema","douyinGetCommentList","commentListParams","DouyinGetCommentReplyListParamsSchema","douyinGetCommentReplyList","replyListParams","DouyinGetHotParamsSchema","douyinGetHot","hotParams","DouyinGetLocationParamsSchema","douyinGetLocation","keyword","locationParams","locations","DouyinGetMusicParamsSchema","douyinGetMusic","musicParams","musicQueryBefore","authorizationParams","authQueryBefore","authorizationQueryString","musicRes","decompressed","decompress","DouyinGetMusicByCategoryParamsSchema","douyinGetMusicByCategory","DouyinGetMusicCategoryParamsSchema","douyinGetMusicCategory","categoryParams","DouyinGetTopicsParamsSchema","douyinGetTopics","topicParams","DouyinGetVerifyQrCodeParamsSchema","douyinGetVerifyQrCode","decision","bizTraceIdFromCookie","logId","qrCodeBody","qrCodeBodyStr","qrCodeQueryParams","qrCodeQueryStr","qrCodeUrl","aBogusQr","csrfTokenQr","sessionDtraitQr","qrHttp","qrCodeResponse","qrData","DouyinGetWorkListParamsSchema","douyinGetWorkList","workListParams","customStyle","_e","removeEventBlockers","MutationObserver","observer","loginButtonSelector","selector","btn","handlePageNavigation","frame","xmst","mstExpirDate","jsonUserInfo","errorMessage","securityData","maxRetries","retryCount","localStorage","browserInfo","userAgentData","douyinLogin","DouyinImageUploader","isHttps","Agent","agentOptions","newQueryString","uploadAuth","authData","expireTime","auth","times","addrParamsConfig","addrParamsQueryString","uploadAddress","storeInfo","imageInfo","uploadAddr","fileBuffer","uploadUrl","uploadImgResp","Infinity","imageUrl","total","localPath","dimensions","sizeOf","imageUrls","batch","batchIndex","totalBatches","batchPromises","globalIndex","batchResults","successResults","failedCount","coverUrl","ms","delayMs","label","waitTime","utf8Encoding","decoder","TextDecoder","decodeUnicodeEscapes","hex","parseVerifyPassportDecision","headerValue","cleanValue","decoded","parsed","fixedParsed","enrichParsedData","parsedCopywriting","copywritingStr","cleanedCopywriting","titleMatch","verifyWays","needsVerification","generateRandomString","characters","randomString","randomIndex","safeSerialize","obj","currentStep","sessionidCookie","publishParams","uploadedImgList","uploader","cover","banners","uploadResults","responseData","errorCode","webProtectData","ts_sign","serverDataCookie","ec_privateKey","ree_public_key","bdTicketGuardClientData","publishQuery","publishQueryParams","publishResult","isProxyOrNetworkError","isProxyRequest","errorType","details","safeDecision","mockData","errorMsg","commonCookies","waitForElement","timeout","retryAction","delay","lastError","safeClick","locator","safeFill","text","titleInstance","descInstance","cleanContent","topics","topicTag","instanceCollection","musicTrigger","searchBox","searchInput","searchText","resultContainer","musicCards","matchedCard","cardCount","selectButton","buttonClicked","instance","publishDate","year","month","day","hour","minute","formattedTime","releaseTimeInstance","inputValue","rpaAction_Server","imagePromise","itemId","DouyinPublishParamsSchema","douyinPublish","getBaijiahaoActivity","ConfigDataSchema","getBaijiahaoConfig","_item","getShipinhaoBgm","getShipinhaoBgmCategory","getShipinhaoCollection","getShipinhaoCommentList","getShipinhaoConfig","WEIXIN_VIDEO_AID","generateRid","configData","getShipinhaoPostList","getToutiaoCollection","getToutiaoConfig","getSuggestWords","getCityDistrict","getUserRights","suggestWords","cityDistrict","userRights","getWeixinCollection","getWeixinConfig","filtered","CollectionDetailSchema","getXhsCollection","fatchCollextion","colletionData","collectionXsHeader","getXhsGroup","groupListParams","fatchGroup","searchXsHeader","getXhsHotTopic","hotTopicParams","fatchTopic","UnreadCountSchema","getXhsUnreadCount","unreadCount","apiPath","xsHeader","getBaijiahaoData","yesterday","fansData","readData","incomeData","yesterdayData","bjhData","getDouyinData","toNum","userProfileP","overviewP","userProfile","overview","fansNum","favedNum","followingNum","ov","douyinData","errMsg","getShipinhaoData","uinCookie","deviceIdCookie","aid","finderId","AUTH_ERROR_CODES","finderUser","startTs","endTs","fansNumYesterday","playNumYesterday","likeNumYesterday","commentNumYesterday","statsData","shipinhaoData","getToutiaoData","totalData","contentDataYesterday","ttData","exportWxCgiData","parseDocument","scripts","sandbox","vm","script","getWeixinData","userInfoHtmlPromise","userSummaryHtmlPromise","userInfoHtml","userSummaryHtml","userInfoJson","userSummaryJson","wxData","getXiaohongshuData","sevenDataUrl","sevenDataXsHeader","overAllData","sevenData","xhsData","SearchAccountInfoParamsSchema","SearchAccountInfo","searchBjhTopicList","parseBjhDom","domString","searchBjhUserArticle","detailJson","BaseArticleSchema","ToutiaoArticleSchema","WeixinArticleSchema","BaijiahaoArticleSchema","XiaohongshuArticleSchema","DouyinArticleSchema","ShipinhaoArticleSchema","FetchArticlesDataSchema","handleBaijiahaoData","pageNum","pageSize","showOriginalData","onlySuccess","containsArticle","fetchArticles","articleInfo","totalPage","currentPage","usedPages","validItems","getDetailContent","detailInfo","isCheckPass","articleCell","handleDouyinData","fetchWorks","cursor","isHasMore","skipCount","needCount","workListResponse","allWorks","hasMore","currentCursor","guard","nextPageResponse","finalWorks","workDetailUrl","workPublicUrl","statusText","handleShipinhaoData","postType","aidCookie","finderIdCookie","fetchPosts","userpageType","pageUrl","rawKeyBuff","fetchAllPosts","allPosts","continueFlag","totalCount","posts","mapPost","forcePostType","title","allArticles","needVideo","needArticle","combinedTotal","videoPageUrl","videoArticles","articlePageUrl","articleArticles","pageItems","handleToutiaoData","visitedUid","api_base_info_json","handleWeixinData","lastPage","ParsePublishPage","replaceCode","decodeHtmlEntities","encodedStr","begin","rawArticlesInfo","articlesInfo","totalFetched","nextPage","currentPageSize","_rawArticlesInfo","filteredList","cursorIndex","nextRawArticlesInfo","nextArticlesInfo","newFiltered","deatil","lastMsgId","BasePublishBUilder","publishInfo","timerPublishData","decodeTimerPublishData","timesend_msg","timmerPublish","handleXiaohongshuData","serveUrl","serveParams","serveXsHeader","hasNextpage","detailUrl","detailParams","detailxsHeader","FetchArticlesParamsSchema","FetchArticles","searchToutiaoLocation","searchToutiaoTopicList","searchToutiaoUserInfo","searchWeixinAccountCard","accountCardList","searchWeixinUserArticle","publishPage","searchXhsWebConnections","connectionsParams","fatchConnections","fatchConnectionsXsHeader","searchXhsWebLikes","likesParams","fatchLikes","fatchLikesXsHeader","searchXhsWebMentions","mentionsParams","fatchMentions","fatchMentionsXsHeader","searchXiaohongshuLocation","searchXiaohongshuTopicList","topicData","fatchTopicXsHeader","parseXhsDom","jsObjectStr","searchXiaohongshuUserArticle","INITIAL_STATE","ShipinhaoCheckLinkValidateParamsSchema","shipinhaoCheckLinkValidate","GetTimeStamp","linkParams","queryData","baseResp","ShipinhaoGetLocationParamsSchema","shipinhaoGetLocation","ShipinhaoGetMsgParamsSchema","shipinhaoGetMsg","extraParam","finderUserName","messageListParams","messageListUrl","messageListRes","sessionIds","allMessages","sessionDetailParams","sessionDetailUrl","sessionDetailRes","session","sessionMessages","shipinhaoGetMsgImage","imgMsg","rawContent","mediaInfoRes","extMap","normalizedExt","base64Img","statusMachine","finderList","handleAuthData","handleAuthLoginStatus","acctStatus","localStorageData","handleAfterLogin","handleScanStatus","helperData","win","masterFinder","event","CustomEvent","shipinhaoLogin","VideoChannelUploader","MAX_SIZE","slice","offset","marker","uin","authKey","taskId","blockSum","blockPartLength","chunk","uploadId","partNumber","onProgress","md5Hash","transFlag","partInfo","concurrency","items","executing","imagePath","etag","delta","chunks","downloadUrl","lastUploaded","current","generateUUID","getUserInfo","finderUsername","authKeyData","getUploadAuthKey","uploadImageComplete","buildLocation","buildTopicXml","topicList","valueCount","xml","valueIndex","buildRichTextJson","richText","buildDescription","publishDynamic","fingerPrintDeviceId","aId","confParams","objectDesc","publishUrl","apiResponse","authKeyResponse","uploadedImages","uploadResult","topicNames","addressInfo","resultCode","resultMsg","publishId","uploadSelectors","uploadInput","allFileInputs","anyFileInput","inputCount","screenshotPath","titleInput","descEditor","poperInstance","instanceLink","linkTypeName","linkInput","musicFormItem","musicDisplayWrap","searchTxt","bgmItemWrap","timingRadio","dateD","nowMonth","nowMonthText","monthLocator","publishText","defaultPage","blockedPatterns","req","blocked","clickTimeout","positionDisplayWrap","dateInput","monthCount","publishResponse","errCode","ShipinhaoPublishParamsSchema","shipinhaoPublish","ShipinhaoSendMsgParamsSchema","CHUNK_SIZE","shipinhaoSendMsg","generateCliMsgId","fromUsername","userInfoRes","imageBuffer","md5","totalChunks","lastRes","chunkBuffer","uploadedImgMsg","sendRes","handleUserInfo","toutiaoLogin","encodedKey","encodedValue","get3101DetailError","errorList","saveType","toutiaoSingleCover","toutiaoMultCover","toutiaoCoverType","toutiaoOriginal","toutiaoExclusive","toutiaoClaim","coverRes","topicContent","sourceData","extraData","COVER_TYPE","getAddTypeValue","publishOption","postHeaders","postData","a_bogus","interceptUrls","coverTypeValue","coverContainer","coverUrls","coverUploadEle","coverUploadCount","ele","drawerContainer","confirmBtn","locationContainer","adContainer","isAdOptionVisible","adRadio","exclusiveContainer","claim","ToutiaoPublishParamsSchema","toutiaoAd","toutiaoPublish","imageList","extra","syncData","addressFormItem","declarationFormItem","weitoutiaoPublish","tokenMatch","commonData","initialState","json","errMap","weixinLogin","saveDraft","shareImageInfos","cropResult","fileState","colorResponseData","themeColor","cropFormData","cropRatios","cropCoordinates","cropCoordinate","cropResponse","sourceText","container","weixinmpPublish","QuotaType","genTopicHTML","rn","aTags","GET_QRCODE_DEFAULT_ERROR","ignoreErrno","userTypeMap","checkCopyrightStat","resData","client_time_diff","baseRespFinder","cloudImages","localImages","oriWhitelist","_oriWhitelist","white_list","white_list_user","_user","userInfo_res","userInfo_resJson","writerid","reply_id","getWriterList","getRewardText","_type","rewardbind","rewardBuffer","rewardFilePath","task_id","sleep","checkScanResult","_writer","_writer_item","rewardList","matchdID","reward","_reply_item","wxInteractionInfo","_wxInteraction","_opt","commentType","replyType","draftData","appMsgId","checkTimes","copyrightStatRes","copyrightStat","masssendpage","massSendRes","operation_seq","quota_detail_list","quotaDetail","copyrightStatData","lastData","checkCopyrightStatRes","getTicketResult","getUuidResult","uuid","qrcodeResult","qrcodeBuffer","qrcodeFilePath","urlRewardParams","wxRewardPage","reward_page","isAddRewarder","qrcodeSrc","isAddWord","dialog","pic_msg","ori_dialog","ori_dialog_bd","ori_dialog_ft","_target","search_res","search_res_name","whrite_list","white_td_isadd","btn_isChecked","checkbox","reward_setting","reward_setting_bd","reward_setting_ft","userName","reward_setting_replay","switchAuto","maxAttempts","nowCheckTime","isDisabled","isOneReplay","isCurrentReplay","openInteractionDialog","setupPublicInteraction","wxInteraction_bd","commentSwitch","isSwitchChecked","commentTextMap","commentOption","commentKey","commentText","comment_area","electSwitchInput","electSwitchBox","electCount","isElectChecked","wxInteraction_ft","poperInput","query","nowD","dropMenu","timeDropMenu","originalCheckDialog","popMassend","startTime","imgUrl","WxInteractionSchema","WeixinPublishParamsSchema","weixinPublish","CREATOR_PUBLISH_URL","createStageError","stage","isCreatorPublishUrl","parsedUrl","isExploreUrl","filterCreatorCookies","normalizedDomain","mergeUserInfo","extractCreatorUserInfo","readUserInfo","stopListening","rejectOnce","resolveOnce","continueAfterExplore","currentUrl","creatorUserInfoResponse","creatorUserInfo","codeStatus","collectCookiesWithA1","hasA1","ticket_mnsv2","XS","createrLogin","xiaohongshuLogin","_windowCache","getWindow","mnsv2_enc","arg1","arg2","para1","_queryPara","md5Para1","mnsvc2_data","mnsvc2","fetchCoverUrl","fetchCoverParams","fetchCoverXsHeader","uploadInfos","batchCoverIdInfo","fileId","coverIdInfo","availableBuckets","uploadFile","localUrl","orientation","originSize","MAX_RETRIES","ossBucketIndex","currentInfo","ossFileId","ossToken","ossDomain","coverInfos","invalidUpload","topicXsHeader","createTopic","visibleRangeMap","userDeclarationBind","photoInfo","bizId","userData","business_binds","publishXsHeader","selectAddress","selectDate","getPoperInstance","elements","visibleElements","getDialogInstance","selfDeclarationInstance","selfDeclarationSecondaryMenuInstance","shootingDate","shootingLocation","selfShootingPopup","hasCustomContent","sourceMedia","publishBtn","uploading","collectionName","collectionBindInstance","collectionItemInstance","groupBindName","groupBindInstance","groupItemInstance","OriginalBindBtn","isOriginalBindBtnVisible","visibleText","setSwitch","switchUI","cls","imgPreviewArea","toastDesc","Md5","rpaAction_Server_Mock","pagePromise","encodeData","FictionalRendition","AIGenerated","SourceStatement","XiaohongshuPublishParamsSchema","xiaohongshuPublish","xiaohongshuWebCommentAction","actionParams","likeActionRes","likeAction","likeActionXsHeader","dislikeMentions","dislikeXsHeader","xiaohongshuWebIntimacySearch","intimacyDetail","xiaohongshuWebMsgRead","replyParams","xiaohongshuWebMsgReply","replyPath","replyXsHeader","xiaohongshuWebNoteFeed","feedParams","fatchFeed","xsCommon","xiaohongshuWebRelationAction","relationParams","relationActionRes","followMentions","followXsHeader","unfllowMentions","unfllowXsHeader","XhsWebSearchParamsSchema","createSearchId","xiaohongshuWebSearch","filterPath","filterParams","ttConfigDataSchema","xhsConfigDataSchema","wxConfigDataSchema","bjhConfigDataSchema","douyinConfigDataSchema","shipinhaoConfigDataSchema","BetaFlag","Action","shareVersion","actionVersion"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;QACA,IAAIA,iBAAiB;YACnB;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QAED,IAAIC,aAAa,CAAC;QAClBA,WAAW,CAAC,GAAG,SAAUC,CAAC;YACxB,OAAO,OAAOA;QAChB;QAEA,SAASC,kBAAkBD,CAAC;YAC1B,IAAIE,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI;gBACJ,OAAO,SAAU7C,CAAC,EAAEE,CAAC;oBACnB,OAAOF,IAAIE;gBACb;gBACA,OAAO,SAAUF,CAAC,EAAEE,CAAC;oBACnB,OAAOF,MAAME;gBACf;gBACA,OAAO,SAAUF,CAAC,EAAEE,CAAC;oBACnB,OAAOF,IAAIE;gBACb;gBACA,OAAO,SAAUF,CAAC,EAAEE,CAAC;oBACnB,OAAOF,IAAIE;gBACb;gBACA,O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CAAC,CAACE,EAAE,CAACb,GAAG,MAAM,CAACW,CAAC,CAACE,EAAEZ,GAAG,CAACC,GAAG,CAACV,CAAC,CAACsB,IAAI,EAAE,EAAE,IAAI,SAASH,CAAC,CAACE,EAAE,CAACV,GAAG,MAAM,CAACX,CAAC,CAACmB,CAAC,CAACE,EAAE,MAAM,CAACT,GAAG,CAACU,GAAG,GAAG,EAAE,MACjJF,CAAC,CAACC,EAAER,GAAG,IAAI,CAACM,CAAC,CAACE,EAAEP,GAAGC,GAAG,CAACgD,yBAAyB3D;YACpD,OAAOgB,CAAC,CAACC,EAAE,CAACL,GAAG,CAACC,GAAG,CAAC;QACtB;QAEA,SAAS+C,UAAUhE,CAAC,EAAEE,CAAC;YACrB,IAAIC,IAAI;gBACN;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBAC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C,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,EAAE;YACjBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,EAAE;YACjBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,EAAE;YACjBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,EAAE;YACjBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,EAAE;YACjBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,EAAE;YACjBqB,IAAI,CAAC,GAAG,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K;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;aAAI;YAAC,MAAMC,YAAU,GAAG,CAACL,UAAU,MAAM,CAAC;YAAK,IAAIM,YAAU;YAAI,IAAI,IAAIC,YAAU,KAAIA,YAAUH,SAAS,CAACJ,UAAU,MAAM,EAACO,YAAY;gBAAC,IAAIC,YAAUJ,SAAS,CAACG,UAAU;gBAACD,YAAWA,CAAAA,YAAUE,YAAUF,YAAUD,SAAQ,IAAG,OAAM,CAACD,SAAS,CAACG,UAAU,EAACH,SAAS,CAACE,UAAU,CAAC,GAAC;oBAACF,SAAS,CAACE,UAAU;oBAACF,SAAS,CAACG,UAAU;iBAAC;YAAC;YAAC,IAAIE,YAAU,KAAIC,YAAU;YAAG,IAAI,IAAIC,YAAU,KAAIA,YAAUZ,SAAS,CAACC,UAAU,MAAM,EAACW,YAAY;gBAAC,IAAIC,YAAUb,SAAS,CAACC,UAAU,MAAM,CAACW,YAAWE,YAAUF,YAAU,KAAIG,YAAUV,SAAS,CAACS,UAAU;gBAAC,CAACT,SAAS,CAACS,UAAU,EAACT,SAAS,CAAEK,CAAAA,YAAUK,SAAQ,IAAG,MAAM,CAAC,GAAC;oBAACV,SAAS,CAAEK,CAAAA,YAAUK,SAAQ,IAAG,MAAM;oBAACV,SAAS,CAACS,UAAU;iBAAC;gBAAC,IAAIE,YAAUX,SAAS,CAAEA,CAAAA,SAAS,CAACS,UAAU,GAACC,SAAQ,IAAG,MAAM;gBAACL,YAAWA,CAAAA,YAAUK,SAAQ,IAAG,OAAMJ,aAAWra,MAAM,CAAC,eAAe,CAACua,YAAUG;YAAW;YAAC,OAAOd,YAAUS;QAAU;QAAC,SAASM,SAASC,SAAS;YAAE,MAAMC,YAAU9I;YAAY,IAAI+I,YAAUD,UAAU,OAAME,YAAU,IAAGC,YAAU;gBAAC;gBAAK;gBAAM;gBAAK;gBAAI;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAM;gBAAK;gBAAM;gBAAK;gBAAI;gBAAI;gBAAK;gBAAM;gBAAK;gBAAM;gBAAK;gBAAI;gBAAI;gBAAK;gBAAM;gBAAK;gBAAM;gBAAK;gBAAI;gBAAI;gBAAK;gBAAM;gBAAK;gBAAM;gBAAK;gBAAI;gBAAI;gBAAK;gBAAM;gBAAK;gBAAM;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAK;gBAAI;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAS;gBAAK;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAQ;gBAAK;gBAAK;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAM;gBAAK;gBAAK;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAM;gBAAK;gBAAI;gBAAI;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK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","debug_id":"c8d107bb-33ed-570f-91cf-6902618660d6"}