From 03802b01759ca1a3058453d9d913ba65b00d1a84 Mon Sep 17 00:00:00 2001 From: liudongqi Date: Thu, 26 Sep 2024 19:06:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=8A=A0=E5=AF=86=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routes/service/static/fp/fp-crypt.js | 130 ++++++++++----------------- test/fp/chunk-npjg4qgmmrfrjl3r.js | 29 +++--- test/fp/chunk-vendors.5dea4a66.js | 3 +- test/fp/invoice-business.html | 64 ++++++------- test/fp/test_ueryFpjcxx.js | 30 +++---- 5 files changed, 109 insertions(+), 147 deletions(-) diff --git a/routes/service/static/fp/fp-crypt.js b/routes/service/static/fp/fp-crypt.js index 19d977b..faf5816 100644 --- a/routes/service/static/fp/fp-crypt.js +++ b/routes/service/static/fp/fp-crypt.js @@ -8,11 +8,11 @@ class FpCrypt { publicKey: "", tokenKey: "" }; - constructor(cookies) { + constructor(cookies, publicKey) { this.cookie = cookies - // if (publicKey) { - // this.publicKey = publicKey - // } + if (publicKey) { + this.publicKey = publicKey + } } /** @@ -30,7 +30,7 @@ class FpCrypt { s = t; l = this.Re(); // f = l['publicKey']; - // d = l['tokenKey']; + d = l['tokenKey']; // h = l['urlType']; p = l['urlYzm']; s = this.He(s, d, 0, e) @@ -40,52 +40,6 @@ class FpCrypt { } logger(`处理url后缀${t} 完成返回${s}`) return s; - // while (1) { - // switch (a[c++]) { - // case "0": - // // if (h && ("" !== h) && "1" !== h && (1 !== h)) - // // ("2" === h) && (s = function (t, e, r) { - // // var a = t; - // // if (t['indexOf']('urlyzm=') > -1) return t; - // // if (t = this.He(t), r) { - // // var c = t["indexOf"]("?"), u = t['substring']((c + 1)), s = u['indexOf']('ruuid='), - // // l = u['substring'](s + 6); - // // l = l['substring'](0, l['indexOf']("&")); - // // var f = t['substring'](0, c), - // // d = t["indexOf"]("?") > -1 ? t['substring'](0, t['indexOf']("?")) : t; - // // t = Ye(u, d); - // // t = ""["concat"](f, '?urlyzm=')['concat'](encodeURIComponent(t), '&ruuid=')['concat'](l) - // // } - // // return t - // // }(s, 0, f)); - // // else - // s = this.He(s, d, 0, e) - // if (p) { - // var u = (new Date)['valueOf'](); - // s += '&urls='['concat'](u) - // } - // logger(`处理url后缀${t} 完成返回${s}`) - // return s; - // case "1": - // if (!t) return t; - // continue; - // case "2": - // s = t; - // l = this.Re(); - // f = l['publicKey']; - // d = l['tokenKey']; - // h = l['urlType']; - // p = l['urlYzm']; - // continue; - // case "3": - // logger(`处理url后缀${t} 完成返回${s}`) - // return s; - // case "4": - // if (t['indexOf']('cssSecurity/v1/getPublicKey') > -1) return t; - // continue - // } - // break - // } } /** @@ -111,41 +65,31 @@ class FpCrypt { s = this.Ke(s); var l, f = (new Date)['valueOf'](), d = (this.qe()["num"] % 2) === 0 ? (50 * Math['random'](1)) : (49 * Math['random']()) + 51; + d = ((this.qe()['num'] % 2) === 0) ? (50 * Math['random'](1)) : (49 * Math['random']()) + 51; if ((d >= 0) && (d <= 50)) { l = this.Qs(f) + } else if ((d >= 51) && d <= 100) { + l = this.Qt(f, e) } - // (d >= 0) && (d <= 50) ? l = this.Qs(f) : (d >= 51) && d <= 100 && (l = function (t, e) { - // // TODO: 偷懒 - // return null; - // // var n = c; - // // if ('PwUOp' === 'PwUOp') { - // // for (var r = this.qe(), o = r[n(3123)], s = r[n(2049)], l = i[n(5528)](i[n(2694)](a, ""["concat"](t)[n(619)](""))["join"](""), a(""["concat"](s)[n(619)](""))[n(739)]("")), f = "", d = 0; i[n(3114)](d, l[n(6147)]); d += o) { - // // var h = l[n(6370)](d, d + o); - // // f += i[n(2694)](a, h[n(619)](""))[n(739)]("") - // // } - // // var p = "", v = e; - // // if (e) for (var b = 0; i[n(3114)](b, v[n(6147)]); b += o) { - // // var g = v["substring"](b, i[n(5528)](b, o)); - // // p += a(g["split"](""))["join"]("") - // // } else p = i[n(5434)]; - // // return p = i[n(2694)](a, ""['concat'](p)[n(619)](""))[n(739)](""), i[n(5528)](i[n(5528)](i[n(5528)](f[n(6370)](0, 5), p[n(6370)](5, 10)), f[n(6370)](15, 20)), p["substring"](20, 25)) - // // } - // // for (var m = _0x34c263[_0x383cd9], y = u[n(5694)](_0x30e1f9, 1); y < _0x181e94["length"] && u[n(4847)](m, _0x4913da);) m *= _0x12c36b[y++]; - // // for (m = _0x469f9b[n(1024)](m); u["tKkZS"](_0x4bdcfe, y);) if (u[n(5152)](u["wSsxC"](m, _0x4de108[_0x8b459++]), 0)) return !1 - // }(f, e)); var h = s['indexOf']("?") === (s["length"] - 1) ? "" : s['indexOf']("?") > -1 ? "&" : "?", p = s += ""['concat'](h, "ruuid=")['concat'](f); - // if (o) { - // var v = p['split']("?")['splice'](1); - // for (var b in v['map']((function (t) { - // return t["split"]("=")[0] - // })), o) if (!v["includes"](""["concat"](b))) if (i[c(2228)](i[c(315)], c(6715))) _0x2cc2bd("crypto"); else { - // var g = b["charAt"](0)['toUpperCase'](); - // b['length'] > 1 && (g += b['slice'](1)); - // var m = o[b]; - // i[c(2228)](void 0, m) && (p += "&"["concat"](g, "=")["concat"](m)) - // } - // } + if (o) { + var v = p['split']("?")['splice'](1); + for (var b in v['map'](function (t) { + return t["split"]("=")[0] + }), o) { + if (!v["includes"](""["concat"](b))) { + if (('NenAk' !== 'NenAk')) { + // _0x2cc2bd("crypto"); + } else { + var g = b["charAt"](0)['toUpperCase'](); + b['length'] > 1 && (g += b['slice'](1)); + var m = o[b]; + (void 0 !== m) && (p += "&"["concat"](g, "=")["concat"](m)) + } + } + } + } var y = ""["concat"](l, "+")["concat"](p), x = this.he(y); return s + ""["concat"](s["indexOf"]("?") ? "&" : "?", "urlyzm=")["concat"](encodeURIComponent(x)) } @@ -165,6 +109,30 @@ class FpCrypt { return (((l["substring"](0, 5) + l['substring'](15, 20)) + l['substring'](5, 10)) + l['substring'](20, 25)) }; + Qt(t, e) { + var r = this.qe(), + o = r['num'], + s = r['tokenVal'], + l = (this.a(""["concat"](t)['split'](""))["join"]("") + this.a(""["concat"](s)['split'](""))["join"]("")), + f = ""; + for (var d = 0; d < l['length']; d += o) { + var h = l['substring'](d, d + o); + f += this.a(h['split'](""))['join']("") + } + var p = "", + v = e; + if (e) { + for (var b = 0; (b < v['length']); b += o) { + var g = v["substring"](b, b + o); + p += this.a(g["split"](""))["join"]("") + } + } else { + p = 'wk123med876dfesd57m72hnb3yfm98fs'; + } + p = this.a(""['concat'](p)['split'](""))['join'](""); + return (((f['substring'](0, 5) + p['substring'](5, 10)) + f['substring'](15, 20)) + p["substring"](20, 25)) + } + Ye(t, e) { var o = this.ke(32), a = "".concat(o).concat(t), c = this.Ue("", e); return this.de(a, c) diff --git a/test/fp/chunk-npjg4qgmmrfrjl3r.js b/test/fp/chunk-npjg4qgmmrfrjl3r.js index a244386..7c3ff07 100644 --- a/test/fp/chunk-npjg4qgmmrfrjl3r.js +++ b/test/fp/chunk-npjg4qgmmrfrjl3r.js @@ -1,5 +1,5 @@ // fp底层js -logger = console.info; +logger = console.log; //去除解密函数 // function _0xf207() { @@ -5160,19 +5160,12 @@ logger = console.info; }) return _0x534587; } - this["$_y_ds"] = ""; this["$byno"] = () => { - let _y_ds = ""; - let _0x475ce7 = document["querySelector"]("head meta[name='_y_ds']"); - if(window.$_y_ds != null && window.$_y_ds !== ""){ - _y_ds = window.$_y_ds; - logger('1.获取传入数据 _y_ds', _y_ds) - } else if (_0x475ce7) { - _y_ds = _0x475ce7["content"]; - logger('1.获取meta标签 _y_ds', _y_ds) - } - if (_y_ds){ - var _0x4a87cf = _0x2c29b1(_y_ds, window); + const _0x475ce7 = document["querySelector"]("head meta[name='_y_ds']"); + if (_0x475ce7) { + var _0x13f88b = _0x475ce7["content"]; + // logger('1.获取meta标签 _y_ds', _0x13f88b) + var _0x4a87cf = _0x2c29b1(_0x13f88b, window); // logger('2.获取密钥', _0x4a87cf) if (_0x4a87cf == null) { return; @@ -5180,14 +5173,14 @@ logger = console.info; _0x4a87cf["run"](); _0x475ce7["content"] = ''; _0x475ce7["parentNode"]["removeChild"](_0x475ce7); - // const _0x1031c9 = document["querySelector"]("head script[id='_y_ds_s']"); - // _0x1031c9 && _0x1031c9["parentNode"]["removeChild"](_0x1031c9); + const _0x1031c9 = document["querySelector"]("head script[id='_y_ds_s']"); + _0x1031c9 && _0x1031c9["parentNode"]["removeChild"](_0x1031c9); } const _0x1c8f5a = document["querySelector"]("head meta[name='_x_ds']"); if (_0x1c8f5a) { - var _x_ds = _0x1c8f5a["content"]; - logger('4.获取meta标签 _x_ds', _x_ds) - var _0x4252bc = _0x15817b["decode"](_x_ds); + var _0x4252bc = _0x1c8f5a["content"]; + logger('4.获取meta标签 _x_ds', _0x4252bc) + var _0x4252bc = _0x15817b["decode"](_0x4252bc); logger('5.解密_x_ds', _0x4252bc) _0x4252bc["length"] > 0 && (window["zextdata"] = _0x4252bc["split"](",")); } diff --git a/test/fp/chunk-vendors.5dea4a66.js b/test/fp/chunk-vendors.5dea4a66.js index fa69bf9..c8d247a 100644 --- a/test/fp/chunk-vendors.5dea4a66.js +++ b/test/fp/chunk-vendors.5dea4a66.js @@ -84323,7 +84323,8 @@ logger = console.info; var xe = [_0x27c221[r(1772)]], _e = r(3236), we = _0x27c221["AJhNq"], Oe = "4889e050", je = _0x27c221[r(6919)], Ce = "efdcb0cc", Se = _0x27c221["eeJzi"], Pe = _0x27c221["qxWSp"], - De = "", Ee = 12, ke = function (t, e) { + De = "", Ee = 12, + ke = function (t, e) { var n, i, o = r, a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"["split"](""), c = []; if (e = e || a["length"], t) for (n = 0; n < t; n++) c[n] = a[0 | (Math["random"]() * e)]; else for (c[8] = c[13] = c[18] = c[23] = "-", c[14] = "4", n = 0; (n < 36); n++) c[n] || (i = 0 | (16 * Math["random"]()), c[n] = a[19 === n ? 8 | (3 & i) : i]); diff --git a/test/fp/invoice-business.html b/test/fp/invoice-business.html index 143ac17..7657c30 100644 --- a/test/fp/invoice-business.html +++ b/test/fp/invoice-business.html @@ -1,45 +1,45 @@ -纳税人端WEB应用
纳税人端WEB应用
\ No newline at end of file + } +})(); \ No newline at end of file diff --git a/test/fp/test_ueryFpjcxx.js b/test/fp/test_ueryFpjcxx.js index c174033..274c542 100644 --- a/test/fp/test_ueryFpjcxx.js +++ b/test/fp/test_ueryFpjcxx.js @@ -4,28 +4,34 @@ const fs = require("node:fs"); const FpCrypt = require("../../routes/service/static/fp/fp-crypt"); -var baseUrl = 'https://dppt.hubei.chinatax.gov.cn:8443' +var baseUrl = 'https://dppt.guangdong.chinatax.gov.cn:8443' // TODO 需要文件内的 meta name="_y_ds" content 标签内容 var html = fs.readFileSync('./invoice-business.html', 'utf8').toString(); let js = fs.readFileSync('./chunk-npjg4qgmmrfrjl3r.js', 'utf8').toString(); // TODO:用户登陆token 测试时需要替换 -var loginCookieStr = "tpass_p3d8j63p8b6p4bbab8dca4832a7fj9cc=eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImJjNzUxNmI4NWI0NjRiZjlhMDJlNzg2NWIxZmViMGE3In0.xMmdn82GoF9NH8ldYx5mCrHFZhP13041_34uZ51kF9INM7MB33rARWCqhCZiqNZUKwB1WkTH5jDIZLwh_bRYyw; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%221920330690e83a-0f487f8b21c83b8-26001151-3153384-1920330690f1823%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTkyMDMzMDY5MGU4M2EtMGY0ODdmOGIyMWM4M2I4LTI2MDAxMTUxLTMxNTMzODQtMTkyMDMzMDY5MGYxODIzIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%221920330690e83a-0f487f8b21c83b8-26001151-3153384-1920330690f1823%22%7D; tpass_mcsc7e2ssscb4sfmbsmas35sass2753b=eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6Ijk3ZjQ1NjU5MzA4ODRhNmFiOWIxMjNhZDY5MDdkYTU5In0.NABIuYcca0UKpWOwvjiut7f3yn-tIIGZyBBni7S1jFAoaRR_kaH8CTZLxSxfc6-Q6n5hcG1l94prwDFGgzZWYw; tpass_k238ck9eedkb48a9a5d7k5c2c5kkka58=eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImZkZTE4NTFkZGJhNDQ0MWE5ZWJlMWFjODU5NTNiNjM0In0.qHK5SMznOicFnrhi-1MnF16y2QypCSNLtbi3KE2pD1kyz4yRpLE8Fm4aHQMJ5hMa5aO1ibB-iQ-npD7QkoP3qA; tpass_te95ftefe59243cbafta4fb82bbtfcte=eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImViYTMzNDVhYTU0NjQ0NWZhOTdlYmViY2Q3MWNiNWQ4In0.Rk1-kzwo4fneL4FapgQzhzxC-vBVu2zpLHQVfnylQ88x6Ik5QNt3PuyfmqLdoenoR7y69BgAOM3GvLi_KFcsoA; tpass_q4q6b8aa469v4369ae7483c4vb45cvca=eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6Ijg3MWNhNzIyMmRmZjQ1YzQ4YmFjYzViMDExYTY1MjU2In0.rUzqjvnFTAwRxRa49yeiPWqHWNF8WRmsKPayVfGRLuMja5huBOmlpHc-kEXBiGh43ei3t-ZbT7EcvGRga0aZkQ; tpass_mb29dc78543X4X769Hd7d8a35Hdd5236=eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjgxYTYwZjIxZmMwZTRlMDY5NTFkNDI1YWUwOWM3MjFjIn0.V1-LfcMe6VM9W4q_F15gqOxNbA2jRLRVpCml0WFvKTYAGdFqsi3JEgGBvMCL0SEkAOSVhGIn1A9ILjCAuiJ_hg; tpass_c5djdncfa7nj4n2cajna2j68cndbj2fc=eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImI1NzM2MjUwMDE5MDQyMTNiYzViNmQ0NGI1MGRlMTZlIn0.Es7Q_0jUPcvGddK90anCqeEIBjtl52YZ3669quo27iVjnObAt580ZEHJPjCSLw9vu3HAtPY2SkjYuquc0tItqA; tpass_ue7c9954acea492784ac6g78939gc2e9=eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImM4Y2Y1ZGZkYjJkMTQ0NGJiYjM0NGM1ZGJjZDlhY2UwIn0.dfWdZX2tAHcB5Xgb36Y5WQJabicYJYoURhAhWzKu4cSklCYc1lK6-fjbTbiRUNmW3hAQ0lUDUkH3DHVVTuvOjA; tpass_x774e745d5k24ex5a7kkk375x933f654=eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjM0NjljNWY5MThkZTQ4M2JiY2QwNDcyMjgwMzgwZWFkIn0.NKypnkLFaewOcawUAg_fZQdbFAbgFU1Nqj3ibv3FumIKIW6AZXiD7c0ASR16aTa4B4XUBjrysQiXrHksxRX-OQ; oauth2_referer=etax.hubei.chinatax.gov.cn; tpass_tct8zta97w6c46zdt9zc2648227df5z2=eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjVkNTg4ZjBmN2QxNjQ0NDdhZTczYjBlMzM2ZWIzMGYzIn0.Lmt8PQ7SLdivPrcoa6hxEIW2osZBMFc34ate7WKZ31AtSaOYDDMy1lzVmlBmqaIRNIJUhS18N_jJulWz4XAcJA; tpass_sa67ddd29sc94cga9f96s7da2772s6d7=eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjVlZjcyMTNmYWYwZTRkYmRiNDMyODU5MmY2NDBjM2EyIn0.jSXIt0ul0pp0Qnb7s7VSdJxVmyfY7fPqzQQg4s2ATS1dluuM49H9Q93oveAxy7URB0s4nMTtWwyTq3mqB_5mpA; tpass_b6edq5qqc5cb4c3288q6aq6fab5qc3b4=eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjFlYzI1Zjc4ZGQyMDRmNTQ5MTAxZGEyNDM2MjFmOGU1In0.0VH-6AoQlwsdXMCV6u9nAWCDBWw_sknQQbZy_IzhlrxXkanffsVByh63GYra3awUBma2w-c6WfCwQBdcJGukMg; znhd-ssotoken=a8a7bf26beac4fd4929980b20971b228; ZNHD_SECURITY_CHECK_TOKEN=e4dd8ea2c69440169aede2fdce9a3180; lzkqow39189=2bb488d931034436b6248e9f304424ec; DTSwUOYx7MiWN=ab2bb065ae0ed58c8a84593bb5a3028cb6197c4c212230fce7fbf44bb130b09; dzfp-ssotoken=684d411b247b45c3bcc27ab2e6f8fe68; SSO_SECURITY_CHECK_TOKEN=1100ce6e65af4dd7bb5cf78f795e16a5; lzkqow38189=1727141642601; c_time=12; MKls83gqduGS=0fce79cac178fb6e9a66ca06fa3610191e8668277ba8c269ff723d98e73fd12d893bf51bac776eed80b13155ab4b96ea" +// var DTSwUOYx7MiWN = "bd232e748674a385df6c5e99901a43b4dc24fb3112038672608a42924006a46a" +// var dzfpSsotoken = "9a0759a97f3742449ea38701a5c19717" +// var lzkqow38189 = "1727331696505"; + +var loginCookieStr = `oauth2_referer=dppt.guangdong.chinatax.gov.cn; dzfp-ssotoken=fa284f7756fd4d94b850d233a3545a38; SSO_SECURITY_CHECK_TOKEN=66ed9c58a548466f86f0f01462104519; c_time=12; lzkqow39189=6ebec9d6f48b4739a20bdf6664af0954; DTSwUOYx7MiWN=e19a43e42435051de9e20836c2f7b13bfaaeffb2a0f94b649b61d584cba7d7e; lzkqow38189=1727348343254; MKls83gqduGS=023d54cd5928041edd03ea399186756763ca1cb446a65a26cb50ec6b56fc2c2f2ee43ca9eb0fa6c2c5888aea7763550c` + var urlPath = `/szzhzz/qlfpcx/v1/queryFpjcxx?t=${new Date().getTime()}` // var urlPath = `/szzhzz/qlfpcx/v1/queryFpjcxx` // TODO:如果有 param 加密后得到 enParam var param = '{"gjbq":"1","fpztDm":["01","02","03","04"],"fplyDm":"0","fplxDm":[],"kprqq":"2024-09-09","kprqz":"2024-09-25","tfrqq":"2024-09-09","tfrqz":"2024-09-25","sflzfp":"","dtBz":"N","pageNumber":1,"pageSize":20}'; -let fpCrypt = new FpCrypt(loginCookieStr); +let fpCrypt = new FpCrypt(loginCookieStr, { + publicKey: "MIGf1MA0GCSqGSI2b03DQEBAQUAA4GNADCBiQKBgQCf1rfXNEN4DhiBwUArI95aomsBQUb/zmCrohl3Sye2jkySQ4dZi21oIqTjwkOGp31NmoScCA+dtZpER1N1sbkZjIO9etgdFtGMjRNvGw2stuAOUPa0RUQ0wXHlhzJktoDd3R0EV9ztpaACq2KhpYheh1sZnrf5NHqszR9vC9nvoQIDAQAB", + tokenKey: "0706aeab77e14192853af569233c0e0a" +}); let handleParam = fpCrypt.handleParam(param, urlPath); var enParam = JSON.stringify({'Jmbw': handleParam["enVal"]}); // headers['security-mes-key'] = $e["enMesKey"] let handleSuffix = fpCrypt.handleSuffix(urlPath); -get_los(handleSuffix, enParam, - // "049321f152561c47bcf6d9f7dc6ae07f6785245ce823f41bf949488d9eb12266b089a7ad22c86efd8a65d0b4b81fe6e84e149ce03517dcaf8309b5eb60083df482d29e9df5c08105d68bc6deebd5f8ffeac7809ed38227563e5f12e685effd69fcaf6af27e1611be32c3bb3ed6673f610fd082b79645ac4715b3d64e94f87dbf96f268d17713bcf3746dd09968291ee2951ac7967d30db691239938fa5ea935abe335f9116c66a6844349fa75cf0b727a2b1f7863d3b297cccf76a67c6189187739fd244e0f6281b2c082dea71f40de76f857a3198a07f5627765ca2506c7c63dc7deaf2427332f7625d6d05a24ebb3fb12c3b7624c1bc741449c6739b6e2e9d22ae94ee601c92aee0caaeb3f78f2695ebe9c30304c2e6d2faa63985ca77dfcc939bfcd7b55997216f00c961adbef5783d52c92767bf7e8cef2e8bb6240b16177451e02429ef4a1274a4217826b77357df602baa0dd72190ae77500ee316d98663fa540cb64b61c7e944ef13ee877eae6a4da06c908860c7bf53cd0675755131b30e5bfd30cae49a33304f0ce0369d21640d4f8d026c51734321f60d3f8ff5f6c41263497b671d487d5a0d1f25f69f14c26cf1edde2a2c4834260730d3ec911148c1d93f1af4ba06d2ed00f5d76168b6169bca08d9a543ddd0861e6b14275ddb06d097f3944311bf3fe0005c3991cbd1883335c40cf5b08fc7b8bd09a4419357e5af7383cd695373f5b147887614fb826933aa9fe94c1b01d0657ab35f07ee9d90fb80d8853913d62d87132c32c5bd729585384cab9257dd122e7c2943e97757ddd0f66fdb0cb9b4958a7c69d753551d984e03dd1ea839dd65ec8db03c4534f2de8f9ed7c305a0c0d68d6a06bbc43fbd00bb20a42d44767f3447c2af59615d9f495e24629074eac51694294ec9099bab14194279179424958f25e8a7d287c391f71da7ff776b27474cbf4590a61d5ae541f9bf3494b97d1c8d2657ff03b58c5d885807a86a87baa8be5af611ddc95a33909c90d37ba55c7edce194a98c1213346602cdd2937ac0e1cd0336683088e4461e24a220769cc8e31c7fb8c8eb86c31711b98f21b5c50958205350635927c31d49ea549ddfae9a059a1d3943a030b26033d9d02bc1d719c07ab8c58843c9ea6befcd3632b0cc76215deb2791289b583c15982350d29cada52a810efa583fb560bb90fb50bea50de5954a24a6203495bf756a1c09f52bf0720c1d08c19c4d4269f5536c7b75c44a69d1f1224e444928e28aa2886161daa634384c59905a69bd9a80d1dd9d4fd2a3cd71784e983fb58fd0a2e6d7c776f16882aedadf39af28891c1d7411c5afc99ce9f72509789f7cf89218b5820aa83a8756c413584f0f9658b6862ab69374fecae8344d38751bfa296645d7dbe01cd3fb76f9180234968d8078f4b6cf40e956c7cfec7e43fd55861534c0e04f4093dcd2956e4096ed23b5b12b6c42c14c6cff7479b4de92058de47144f7a46324849fd23fde31cdfeda47d95d61a4b0e09bbc01e9be2ac9ca4b87c10f0326f7996f45dbd02ff9ff2fab3da92570e8dd720e91d0c1ea3143b1b663240fef6e864627fc6dd4b5348a2b3233ac85f141982409758dcece1da7ea4427fb777a33a40d6d3de23b9467e66070b3607165c124de349b846e0ea6804b8533023f68c68596f830c75330f3611e8c3443c45e5fc15a832a51e790f975dbf2d8c0c1e9a7452df5df45402d758edfa24c2d4167deebc98dc4ced2f4ec203476ad47c05e19e5f17483dffcb7daa8a6c51b068e31f75c2bafc2a338ebbd9bbc4c42e51058434bf530e893edb981de0b002d756da6c70770050f94a5e1450b64c5e7df67580438d325d454b243b3e9b6fdc31e1ada5f55bbddc19f026fc614d9facd2e49301ed9e65e6fd93ae47b8f028400a09a42759666c9e8c50e7087579440a83fcb2b1518b0b700c39f6df2d75189db918174bf1e1c13e796c1f7c675669c00158a70fe93faef1e20d2235a67d919825841c21847e9503a9e0a1ec8e71bedc58d520aa7b88ff18745b816a7395236f5b18a848c64ecc6fc7edf18498b45d5e65ecd19f9fa246a41853cd550f967a0db97d465b05d2120fe4499ffcce36dcb88b3079a9c0dc5e3c757703f91ff1cb58c6650ca6196ddd6b17b9639939717dc0a6267f8863476a266313fdd632220c051b0cda44aab5983283e5784cc47bba1a3a1e8ce10c85618b8923106e5bd763c43882e5aefe7ab5d70e797b819bd2a84cf296705a1fd8e1f966aacda30c27cc7b89e06c39a849d8cdfe3ccfaed0203f32b3609cd0ab7c01699d3879059fa5d7891f91c15a859fc4698669a50171fc423f13d7823da04ad31e9702f40b626f18a7adab8a54e18ea22343433c04aa4dec2ecd079f2c583d3799c0058d2ef14953b45c938f08acd2b190a3fab7e5ab64f5edd228df6174474f517c8b7512df790e3235f41d443589fc51af8fc19b2e1d17b3f7a09b15270633c5f1b6db695d014003e51f4bf1409863848894c1c1dd76532334163a9f9c388ea021219835ba5eb2bc08e12a31cf647ab069204389ef7b995d4338bd1c8d35e976ed326df8843ce250b47fe690d4e756c2a2900bcbee716dbcb0866a06095b4d77ca7f7bade15b294c4ceb2390774e5cb516d2a0ab55816e5e8abfa0b256b72077d45d9972ad5df64973505372aec6e203d50c3c2032fb05359dad7bf1a284d9453306d1f8c5112c50c4e51e1eda0dd58ef57197419d2a9191296b2a42ceecae019526ad7168637620472c11ffc58c15171a27ab82e15c1cb8f0f0711354a0f22853615b4bccee1772899c3b7c9a873caea0a1a9d5f9b2041680b60890e38c84009b77d0cc779782624f5b7de302923cafab9591aa0fb079237eb7007179f07f1580a16e3101eb8ea2d1f55fd5365bb1ea6f778c59596cb36ee11a59dc24d372b36ae31ebd49cf524903e984dd2cfee489b91b483d39988484e7e5d3c023bab5b8723933c93febb017c53e2dc4c0fc53ac620ee494f1595c219c2d741b0412d1d6e362e2f3dc36955f178689a1120816743fcc600f3534af022defc86291a6f09f5001ee6b1cefe414ffca6717af8718ae56fd8eb9aae4529f3e1680d304b477af15894cd78aabd130eb3d8e3d2fb68329735c3924f6e394d815ec31d7d93d318f405b70728d6305c5b6f2e21b84b9639e67ae8ad13842fdf506005f03e0d0ed0fa2348d59ffa0955ee59d2bb57f7ec8706a1449567fc61a491c3e35a22cb2aaf7a3364f8daee23564063bc2414fdd6bb25a392571b8b1e4045abe58e1554b01b2d8d9ee506a01614b48c3c2cf0382f500bcbb85008bb1770592438ebfdf0f37904a3ae975db314063252ba0904535f9a2f5e99f7490d4df822ee6893390877f99edbcc0e355f019f2b77fec3b857bee0b09a98b6490e17c9dd3a33a83b0ea7e16aa1ebc284bd079eff1a7d8386f4f85f206b77a39ced31d45df171a5d493c8d3bde83a6bcb6fbeae70ffb89fa42f96ea38008d7b2be8f4f7e8314e025230bcba94ea2989e63c405603c501bbb7bf6ca443d6304f61128436801447ab0edfe87dd8b35586f6b55869996a3e42fe00d835cc5cf3153516883269c2764c4cf148eb06fe8658b9c8332cc5a43c5411c01b4bd2505a0f6a3b9a51c1fa1bc8648aa2e384f060b950550adea66d2912672b95760d76a4e94ad1941c2aedf4998855bade4bb1f87c2b15b4e90d7d6d170401a7a560e873c89a82af147c98a12740aea158a0aad518de3708891ddf10b3670b37b8a48dbfba2c4a42abc4a2135b4d9bcda3ad15421c64d0081aff73291c43db2b9e6c302a19fb4f385eb0454af7758dac9fc73e56e0041d4d2fe1cf60c42f91feb9ca1e9e9dbbb4413c84294f7672208f8056b6067e78b894aab9816bd5a353bae728dddeb700191fb3429e0e05625892e309b827b0f73fb1ff7e7c0dac0c603c1f08b5afddecc153cdc446daef935a43cf190a3962fd333f2399d73010fd6f1ad81bdc163cc8beaf2fb12a8cb72f87beb9e8dc05d6fda775fa2ccb393c1b72c61e614062f9bcf2a1aa1e849909ff4da976af182031ab584660d2033f8eb4a1a0c9d16521a182c78169a9047718b7eafee6d1e8a0be1fe33d3ec807431009797d833e13d900aaa356379dc28b9da41006ea3b7af4bd3d32d5bf94dfbdc524ebcc72c701800f39bbcc9401b852559ae09544ca9c058014acb566bbf06bd53d289335c633561b6ba3b11b1b425aec5275f186a53b439aad6bcd6754168986e36d6cbae76f0b7bfa52b5473a75f19a85617931b2e11849ae67782433c0af49aebbaea5ed7ca4a5f137ca0155ac9ccc127f160b6bbb7ee6e732a6f3793334fad4c662b539d220279b6aef742864b2cd3a71facf9756d661e3836a3067f614b086d19e74ea362e8312221e898891d3535f8fdde44be5845c43e9c11d3ca25fc308506ba760ff654be2999e022deda34b5dad1981ab22bdeccb7d57bb8bafe26479774b2204c3bb96a19875812a6084c5b66fe3265f7dd9be3ffdcb66f100c87a02e43b5bf146ce4bf88faba5791274a5c9c17cefd320e8e55dcd73dd9d8eb39526ec27b701810cf164cc2101d2e861325517fd4be55c62980dd1c80ef0581a00d8ae993bb4cccb41cf3114e67868b2633b795d2a28292637abefd08367244d87fda8ba57bfb970072a03c932ede5a846aa8749043eff5f08bfa60c4145f2c2612cf24f2aba62836dd10cf4606223e5052c7a48c94852773fec33f27fb56a13142f6ccc43c7445a66ea75ed111fb14dd27d213cc072e79d3f04dd60aba5c8f6ce34015812bd535b4e3b9909256d950507fb5f3f199cf83984db22de3ededf049663ad0eba7c4ffc4dcdee9e54b348ae07dfc5ffd917aa94eb76d7328df7793c2a615defdef1838e61c609ad264cbccd8da4c4a42a0ee10050882c3ab0f3c86ee068d6d2eea428e85f47c37c17ee7d64de3382dac8eee92baa77bba4265af7a49046694ae4c4cb833cfadace0cef9c75990bd94079331984a8585441c29a7c837e890ac848fa9a1f137a344de1963949eca3f65c79d1f634d217cffbb5a6daa31f708e64eae23408a06a54df72579be43df17558e9dd7c41c72bb171669a45bee8b94e8615777a8c17569288f57c8407798f2422f2fa0517ec63a4f225aff538feb3b45d300a6c494514331250f1b4aad1598b6fa3b2c5b36edbe9d6510cfb28bd1b1691492d4ed807bf5ec2ba21d9d6d5f056960897be7cfc4ac751d0b309e156eb29c70a142af29b5861801bbf6ee46242e0e76b9053c104600b202faaaa0542aa5aa9604ecee1bc788e29ee4c404da467926096d08939dab9af7e7260aa66c0be5802393c41fc05b1a6b5aed1b0d35d528310f3aaf8a8dfe95451a96e9b26ffbe396a56414e4499bd9493fd14b7f5a71093771a49a9193d16cb0aca4efc4a143839ff0c75a3d9f8e35a9cfcbcc314420745aaa874a76496489ea01422a013a10fbb5db48bcd81e1428b66b2908fa29de2fd5c7a931fb83f92fd0201f27d62132e07bf83fb37d20eee48b873f0c4fa0e696602f4040164e6707f90de687c4eeda0fa777eebcf7a2a455f758c9717b009b753045c274f667c5be1b4098aa5e7152ed7c6d3be64a35b3cf616c38eca8ec5c4fc826c9a5ec6a24737a7ba1ff2baf9ff851818b2fc0d0ed97830cd647d74961dc49c37484278bf10e8afe1be9ac3027b91464c8be67b1fe29b2475952f021ccd07958b89cae0822df95eb531c0f37ebabd81bd117ac4f55bbe5f82dd3e242c7e2cf75f79aa4b4edc3c8464a3a41689bc4cd8977aad934ab3d22a76ad58aa7260b38814895d64de5a3da4ad4980160aff8be0380710e2246577d33b8a9f26ec5be2a02e07e6ebc6041cf8555e6765f95a0ec0d119ce65813d279c1933b7f52147655ebea0e67547a12e26ef90307eb83c05026877c017a3d3cabc3667da941a93db10920de1fbd935cdb7fa33a90c9cdacc7b2ecd2e6d5b06e07b21704ff04cdc780881dcd0d11dcb8e3889d7e3c5f4a691afb600e16bf63a6e3c489e9a7ce731eb689144888a6a82bef61fb87792d4717b5aaf4bf10813c11732021614dab31003f5bac17d7a113694976d40733e68deb2c0ace7b0e8ab024053fd7d3e8d2dd83ed79f594c03fdb739253d458011b888fa27e5ee1ffca93bc34d904dd5777c018491d112754dffccdd0bff6967a54fa119dde484b78d5f8fbf250d503f610f1cdeb480868110a0a5efbec57ce2b40afdae25d13d640346205219bce6ef67dae48c894bc2786e137d0e78d5f27890d420374c3fa0a5834d82c19878adf2ca135fb9b7484e7acf143b48079bb95a88735d14fd9b7b5dc56ef0721dfb07b4296949d32cdde23665ea50d2aad376321e8cf804f04ceaad7efca5369b809242eb412f237cb908fe89a27a7c9227862d5725da46ffd6c111700f94ac1396cd4cd42767f95094c2cca9bd70c27afc5e9ee8e4a6d368e0f4600227b4fd30a04ff0c63cd9d4e438f5b0391de6a8daf646429d6124f13096b630a77771b14b66c35d6fcbcefcdf7aec803a13a4b3113238c12639b628ed8810432e8b62f6d176474d3a053d16282cc9c0c76a618f18e89a894ae2d182925cb4e34cd8feb0055ed36f6c5fad00a26c8c7556cfd713e9d4424a12e00850ef2b52ab5d39a5008f4deec8e14f3705d195d3b5ed5eda849b331ecc0c3cd361d3c75245104e139aaef30dcf0cbd063150906ed1f1fa89dbb47f0cc9a7b59766fa477580208a716f31ec57500a0ccd7aeedb3678e80cc52c003747d7886d18bf1a8209740c6e01d71a74630a53d0e1cd638ffd95f6824f06f85e6bbd51dfa2f38b717ac42ec9e030577e6bbd9b4d39424aad83db61be11aa37eeb662aec7a99282eb32b9fd996c829bc9fea04eeb159012a92fa6e975d33249a91a2081f9389a390ff96da8529aa02bdc5393c4cd5bda2dc888820739ac3addfcded9550d6e091106b30d8cdbcd6ca2a93be37d8333b146f69c461a9b40ab17a18caaa81547f7da845ea0e9d31d11654ce1817ab1623635d1d9076ef9d36f041a7139d482203e93afae67d75d01442c6455aa6e3fbf518602db75e91f3606f8be7ef53a54524e1018af32ab94e9e311ab4b22a18c40e155e79dba038bb25cf62465c528784d30802519c3e98f3565797e7f720f8dc8a8faf9e2233b9b667b50453145a9b415cc86bd040dbe344c7971953ec15a4a0d99c2929608b7b2a5e16656614bfea125edb68c70ac5e3197604fc9f82a8e33e8f9e7808fd685880064604a9de83fbda77e05da56ff8b7fa2372a1bb706d22068969267c04bddbb42d5f50ddbc958719af4e287b0dd5f4e0d72218378a46aa1365c8555714f21e547b5d39daa531270b9439da02be2a42ba8d0759bf53830c471deed7e47bdf7d6a196b61e0854a78fc1a4100c9353ce64b51b98f05ee84f673d88c1ba2120b78900d14365c0168188303d81dd2ce34f79a61c100c78937e1b38766e29e82f7437778f78a2058f6247251c2bc0e206be3e5f830493ac14fdf76f4a0dc6e860bc110171768ed7b323770b945d5951796336077a8f501977aa268bcaa1fe2f7e80a9599a7e6a2c628ee8a62d15c99bcc68694f0956c63cd284baa786f4db9ee0da0ddc6fa96818a26f961b30139fe909c404c735e706b00178418e9121bf498ea06b9da1567b56353bb8ceeee9755c3187208e2fda69ca26831b554daad530e37477bdff9685279450423cca7375268925386bee850fcc872d0c23da33710e0ce227bb0429b98715ee195002f1620313d8287b7152b01dbc278a9b22f35ac417a6afef02d8327dbb595582d1ece051beeae1848000c346665a6ebfae3aae557a56bb1bc1ee2a2fe4e623c5839db29b294af5855daeea47605196a11038d0c12a5d8a7cf46a9f1484f50e34f8bc3b30376ce1e387ad80f607b98c94714c461d80230cdb59056c168bc2510ddfaa44103222950d0b32b4bf313805eeb3e14d682d8f935d7b651425c3bae831fc8e6ea55d99d535d4ab1ebe7e26bf584f111d3042c03e254a20f063d23a4c925330d45c15e56e304bf6ed4f10244e255fe00c121c7e09f39f8ecfaa0bd27a953bd9262c502124181af3fd213efa400e17ea777e6ed34ed8ec723f8bc99c81fc5994d6c8e99d7c708c13b948b4e9bdde057ca70bf057533b9d1b932a90f4882823c6e01a7c3f2ebe9cd469afd73fc0e26d11ba932ee9755313ca8effdf1f7ff1fa5b2960f57b0734bb7201bae3ec930cc2f02b2a73c7bddb87023508d0f9c036b36624f25298802571ce62edf555897a0bb2f224d5da5d31faceb49328c5799baf5072058467cea9a2a81e3a85724266912604e904a4e2796abe93d2bcb50c4e38b6efd391658551975c255f06b76e31e431dcda25bb41c5bc3ce8b4cca74b768afc44e34a49617066ec17e27219d436beee8a9a27054bf81bd9240b13aa678eb4eb4fe2f6eae0a5cee3e8daf6334c57cc47d28ab59a0e8d6632e756414e0e6650c27cfbc9e4445daa374286c2d9d51aea4927d60438e138f40566d2107ea72615b7ddf0289e02369bf0377c11821bf1a8e5b550a5e374309ba59fa1b7e75a37386d801b2627e39713513d2195a935fbdcc1072e8bb796b8e5ce5a3f2080a74f7c565e1f8c33a7fdb0f3875ba41ceec54600690c4a526ae47bfb9d3d708e89e8eb9a0e0b874a29baf59f5e6cd0cedc8f513ca618bd832690db081be06ae6299308ca020a6216be8f3b14dfe18f7e37f2ac8162aa7abf17b5e37db04a9fbbc76546f99e5ddf1dd5f98606ef0a1fc4ca52ce5bbf62bccf86f5e203d081357c2f6c7b14cfa84168203f09f65083f51c0dcbe3a3cf1ecb6ff65019cdd51c3bcc9a6318d679685aef5eb42799fcd58bbb10ebefa3bbd26680c22c520e79cd655b0febcb48727f04af3efba4557bd1ee97a8b2154c467b3f84c75bc41fe85e8c32201f60765e7da498518ff82b96ba4c2411ee64fb128b1544c2175c8f9ac7d264f85e868c4c729c279285b77cca914e6cb6e05366e599877aea866176875e090813f52bc1370c284931a76079a069187d1012583bac1d6eca3b3beba24d851858fb39670125da51adff7e5dc981a2c14458c2da415020f8981d018b99f2459d37bc3e0b21245c9e6cd55e10538128fc95b31c0042be57db0a64b52bda5dc65171b669034ec329e665e0502a19d838871132d361b7af2df582ed8a6c3828fd445bc980d071fa1ece7f3394c02e3d386a93390c837f0b0aa3048749b263c533626f01a9fbfaaa874b9c2e9a17c947f202884bd8ecd5246d0cf8a31756babc86c46bc7ed8cb9f06cc99aa95b12fa1c8ca77678467bb4e0680bb6f75807ab477f368a48d328c09a39a7aee15a66ca0209dea0cd6a93bc8b8a13df7f55f22e9fb92e09bf35e812640b212c2db0a27ee9636030c57e5f9d035b4cdadcb50d75d3eb6d273062501b9188a2f05eec8a1b03278addf081fe67beeea75116d09a38e0f6ea9cbc3c0938b5f85b01ed1a7c5144029bf656ebf83b08ae20f601a14fe0dcaa4fe89f84d8ab04c5195d7e279f07e8d56b2eb9c2a9bc5ed1807c590bf74cf412fd6ab7a90803a17438975002376b01e2f8706bfc017970f0a41a418ed758e94d043f0ae153d09199eea6fc5fa672f92d363f54f21660eefa276782a5fd373b92fc158a6fa7bec0770f22e0522eb665e112e0ad13c5afa978651157d5ee9b30c365159c7427854486d49047735c98f74bd297d14793f546b06e4fb5c635bfc98fb981b918bf98a257af7b35ff59a64dcfbdc0c828982b8e89dee30cde3adbdc0216ed0be9885024601e57d93729e0ea17306c686558a471f993f0be9ca0590c2faa3b0aceb67b7c417ee68f5fde1df36bd4ac1bb6919933033cd9ee781fe2d1c85310b64f2317fb736a1dbf4bb72b26fc2e7cb59fb2cf562eca33a40410810037988734855208d4d08bd162768ec90201289d18712e6910694fceb6c93d26d4ff4df1c518ec335c0c5ebb78ea766e31dd4946beac79f571a8e61104bbf9640c5af14080ce0a7a190bd318e862ded89f46b76c92353f911a4507b2cb02d4a3374fcd317a51cb3859398951c99dd7c6040c0e106c715a91fb2e3e3ece8cf09e1ed137cc2ba0ba180aebf2d049b19c958da72533b154ae872957feeb5c5a6f2021dec42d96826f6bb9cd1b11b869c85a879520f0d4340dc30c3cc5779f98fdb64dc8dda6e91113102447b3f2dfbfc3acc09da9e8e77b2773b5eafb73cc2439fc62312902cc7e6f57d263bf8b1acf7272e41d2453d4bba7a15890607fd661bb8ec330feee01252f8bb0125b3944219b76811f5c3e1e289d83c9bba7179a474e028f67f3e96407ae0f90e61ff9c06125b17017e33d391c4b915931b3ba82cea4da6ab50137eb9edb151d74782da32c406fb777d5191d9417bd13e7787dbb092bc60e7bc6b664515f7825cebf0bd265f5f68a5aae324eae3e91216423d868ea6f03920ab3bac04be5da9e73ce7778b01da57e27b354ab0e41f896e25a47ed57d1da207dcac893f3715adb3de8ee142076c596810c05bf60d3c9039c9247b8d87ba22be04eefb6039c5b99883e5dfabffdb0a079d94f506c4750aee513fcaed501abdf246b9f664fa8eb8733f72e772113d347bd5aa7632055fb4f6d7fc92f00f5ea1cbd959242c7e030abe21775e7d85b891fa0f601d2e8da7568385e51d3b9ef3ebc40b4913bdccc1653e09580cd382708a997b954b618a9f8b1504cd99a51f5aca90a9f202f8ab4c7b59714d34678419ca5ec4a68956c516b9aac48380d205db7bb748f89e36f2a2971205bc75fcdc944d007e4fa40ee0cc25c12a743aed9a2c42eaa12fd46dddc9d930d676a43f86dc66db7e9b465c849618dc96c29d4ea5cd95e00eae75f681d7167bf7fe61b67d4c943dc490d0d570bc239f98862e3d23da2eb80a1ddfeedbc7bfe3c747211b2b65c8d492befdcecdd6f0c09c5a41730b54a8a119b4014f4a3ddc45d069693f1b59f5d5cc38cc37d176419e9e477745a57fdc1529d61570966ef7f3b3d4b393ae91cafe3b20f5276a45ea60b7a8497dcf76b80b34fb6703a3f98eac9bd599c10093630b815ce89ef38d2c22c0a0ac7ab29e41a20ede5bf62ce9c50b0d8250b198b5c3e39983d2a1e26a96993dc63c3c78b1e5419ef203bb0c0146d3def2f000687dd9ed7212674f876d717a8f65684ae073993108f9e9aa552a1091f42ae9345c1f9830433a0f4fd3ba77156c80fe6b488a26a37a6a648d8e0400707a7570c0beeb1ddd21803e302f93f6c8fd95f8464fab04f9547b4fca6bceca82ba17603aa5446200056abb292d75b3afe3a8975502802d4ea3a884849428d7adb87fa51a11ae5c0a5dff30878c38fe09f16f5d266e2cd494907068a85e583e4d0983115d0a23b0c04f73a9c87579aaaf50038ab66d3a86b2c5f5445232281ff09cf2258608afd12011258b138772796176e2c93a5dacacd62c2e6123b090823a89a12373895cea0cce0da6088b9ea40f5f903371348b20cc5442ba01d8eee61e0de7d5f635683162277826acca09f8a2e6eef31b673275c0735e3a79eee0f48579810bc7817ac7d5d9107b2d5add02da58b090f39e17057903e342ea295230270dfcf03fe1d769632ec97e8dc89cddc67ee23d04829fb9660208653f6c3c5882adb36c9e5608c5216f6bc93bc576d66ced37578876426a5a6c1aa809f4fc8b2fa49d26716bebf3799106ecb15adfd6e4aae8e052fb8c662331adff0b1f466039d710a6a404a80cef9ce720734e7e68dea881606ebf50278e00b4dd24c636293aa82b3680a3f00df8ec878b8e6c89c676c3f5ebcfc473cdfc3d418b4b8dd5a4daf0ec63df4ef2fc670aa84f4bb80fe6a61b05c87c4cdba30f209839a1d4b05daf105f0bbed3aa378d09d2e2c051eb38784215543503f42efc645f8950c1d331a95f809e5f00d5d08602b058007740a03fd907a3cfc16dec6c5c9a35a0c5368d0bf7b2b5b204dc138f32de5d440f350a8e5e06a65c1e7236ef91770c6a4f71412c3b41c685271d83c34aed99ffb92164af939cf339da64507855425a1c65cc7cf0f7f5e1c936cce51e25ca02c89c8d50c63d8a28c6a1c058ca8467a8110df6a3a612bb327698996814df4a4a2dc89e8e8482e15d509b782a8e52c3b42fa03623c06105971c0ac023b9157778a9c7b68eb37f1aa41011aa894747d02316803571bef6a64f82af44ce0a9251c59c0d4969c056ffd1d0f85f331fac8213322a5637a76730a0a4d60c5f07c61ea8da5d26e233b92287250793cce5d771853dddacbde59d99a3547076567544c1467d8d901dbb05f6428986419a9771b4f06c9f9bf4ea6fc70c31338e020c978c75b1ed619b13f6faa916ec8a8dd3e595d782d5469943ba6c441b528e7fff0255ac8a1d72b8f99f80969227aa663bbd4e82a51380c7186d74f1edb4c0476a9fd2709cc9ad5948b622fa90b6781080f3edc062e0fe07633f79aaae3aaeadfc9663e9df2b627efa82b9e626943abaab0015ef3b95c292ca26a040f875bb24f36d539abcc54483878254e019f513c5d93e22ccb13e26f5ef524123f0fbb5539d2701611d43072b81dcfb50ce68a2a1bf61657e974e90a00f47580f3ddcaae8807e1a3f663029e32ed1ae33346552f14adc4c06f227177ea9596f57dd036f3a453a961b6212be59bec89c93731c22641d3836fba0d2d8bbb1007918a347011fd5d0c8d4aa4a0bc0d6d9f391836ad4d3d77c2a864484174d43c81bd45f321178a1ac9db785fe00d029afc9e58ffc8b6a3aaffed50a65f23e555492018b0b4191f6640292e5f906963146ee78b0f88fcf0fc33679e95997225c9f61c1d8dc0d26c360d4d8631cf3b94a60be6a14305aa3212bf9a05e65a35499081ccf4aa54c00f4a8eedfe36c29784da54af1d61351bf6edf7abab9b753baf5548a8dab7edec8054ef1aacdd780115c174d455ca3050a74109532b10990af5302b9a6dbd5b726a478b0a3f61213ab2d15576b2ad8bed54b78a03a94f1a7b2d1440da214394330a6d3dd6a0cd2af7d6793fd654913d2cae45019389a4d0398ba4f9f50df5b134093a42a428de4804330f6ec373f2957c7a3002ca55a02d047bc61a30f48e824cca8ac4353c9b5500f7aa65c99de21b975437ff255a383ba8682890a31c3df5deade5ab6489c3320156f2bc575e7bafbd7b7690653c96191c557d8a594c3093cd720e63a1b46fb51354dc786d495c78a14c348a3236cdf9cc3de932db62b50437395435c114fe6166bf3ed73d81724fdd3514513830b4721dc08e1bfbbf5904828a43da53aca8037b6e26973caf345506bf9ccbdaf6cc3d16a1cb1e2a2650b62ae5d0a36b725a3d52ff" -); +get_los(handleSuffix, enParam); // fpService = new FpService() @@ -57,7 +63,7 @@ get_los(handleSuffix, enParam, // // "sec-fetch-dest": "empty", // // "sec-fetch-mode": "cors", // // "sec-fetch-site": "same-origin", -// "sso_security_check_token": "e133ba1f6f124599af5fa5262e1adf02", +// "sso_security_check_token": "0684966ef19e4ee286caa4255c336517", // "x-requested-with": "XMLHttpRequest", // "cookie": cookieJar.getCookieStringSync(baseUrl), // // "Referer": "https://dppt.hubei.chinatax.gov.cn:8443/invoice-business?ruuid=1726970597058", @@ -71,7 +77,7 @@ get_los(handleSuffix, enParam, // console.log('测试getPublicKey请求', await getPublicKey.json()) // } -async function get_los(url, param, _y_ds) { +async function get_los(url, param) { console.time('js执行时长') const [jsDom, cookieJar] = jsdomFromText({ url: `${baseUrl}/invoice-query/invoice-query`, @@ -95,9 +101,6 @@ async function get_los(url, param, _y_ds) { let internalVMContext = dom.getInternalVMContext(); // 执行 js script.runInContext(internalVMContext, {timeout: 1000}); - if (_y_ds){ - window.$_y_ds = _y_ds - } if (window.$dunm.$byno) { window.$dunm.$byno(); @@ -125,7 +128,7 @@ async function get_los(url, param, _y_ds) { "lzkqow23819": `${los.hd}`, "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36", // "x-api-type": "xhr", - "sso_security_check_token": "91081171bc604d16910500c4982e74ea", + // "sso_security_check_token": "0684966ef19e4ee286caa4255c336517", "x-requested-with": "XMLHttpRequest", "cookie": cookieJar.getCookieStringSync(baseUrl), // "Referer": "https://dppt.hubei.chinatax.gov.cn:8443/invoice-business?ruuid=1726970597058", @@ -142,7 +145,4 @@ async function get_los(url, param, _y_ds) { let newVar = await getPublicKey.text(); console.log('测试请求', newVar) - if (newVar['data']) { - console.log(newVar['data']) - } }