admin
2024-12-16 ec012b7d2b915db24cd8b23f723bf18dfe75b7d6
网页代码修改/结构调整
1 文件已重命名
18个文件已修改
1个文件已添加
3267 ■■■■ 已修改文件
gui_wx.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
kp_html/kp/codes_list.html 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
kp_html/kp/css/index23-05-04.css 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
kp_html/kp/index23-05-04.html 528 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
kp_html/kp/js/code_list.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
kp_html/kp/js/http.js 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
kp_html/kp/js/page.js 394 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
kp_html/kp/js/test.js 1258 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
kp_html/kp/test.html 452 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
kpl/kpl_api.py 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
res/codes.txt 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
res/setting.conf 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
test/test_block.py 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
test_ths.py 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/network_delegate_manager.py 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/opencv_util.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/ths_ocr_util.py 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/ths_util.py 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
win32_util.py 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gui_wx.py
@@ -2164,7 +2164,6 @@
                # logging.exception(e)
                # print(str(e))
                pass
            time.sleep(0.005)
    def __show_float_frame(self):
kp_html/kp/codes_list.html
@@ -87,10 +87,22 @@
                    </tr>
                    
                    <tr>
                        <td>成交</td>
                        <td>{{commission_data.deal.count}}</td>
                        <td>{{commission_data.deal.price}}</td>
                        <td>+{{commission_data.deal.money}}</td>
                        <td>成交-股票</td>
                        <td>{{commission_data.deals.stock.count}}</td>
                        <td>{{commission_data.deals.stock.price}}</td>
                        <td>+{{commission_data.deals.stock.money}}</td>
                    </tr>
                    <tr>
                        <td>成交-上证可转债</td>
                        <td>{{commission_data.deals.sh_cb.count}}</td>
                        <td>{{commission_data.deals.sh_cb.price}}</td>
                        <td>+{{commission_data.deals.sh_cb.money}}</td>
                    </tr>
                    <tr>
                        <td>成交-深圳可转债</td>
                        <td>{{commission_data.deals.sz_cb.count}}</td>
                        <td>{{commission_data.deals.sz_cb.price}}</td>
                        <td>+{{commission_data.deals.sz_cb.money}}</td>
                    </tr>
                    <tr>
                        <td>华鑫手续费</td>
@@ -559,6 +571,10 @@
                        <td><textarea id="watch_indexes" style="border: #BBB solid 1px;"
                                placeholder="索引用逗号分隔"></textarea></td>
                    </tr>
                    <tr>
                        <td>结束索引:</td>
                        <td> <input id="end-index" />
                    </tr>
                </table>
kp_html/kp/css/index23-05-04.css
@@ -64,25 +64,24 @@
    font-size: 13px;
    color: #000000;
    background: #FFFFFF;
    font-family: Microsfot YaHei,微软雅黑;
    font-family: Microsfot YaHei, 微软雅黑;
}
#body{
}
#body {}
#body>div:nth-child(2){
#body>div:nth-child(2) {
    height: 435px;
}
#body>div:nth-child(2)>div{
#body>div:nth-child(2)>div {
    height: 435px;
    max-height: 435px;
    overflow: hidden;
}
#body>div:nth-child(3){
  /* height: 400px; */
#body>div:nth-child(3) {
    /* height: 400px; */
}
.top {
@@ -121,11 +120,11 @@
    /* border: 1px solid #191921; */
}
.score-data tr>td:nth-child(3){
.score-data tr>td:nth-child(3) {
    max-width: 400px;
}
.score-data tr>td:nth-child(1){
.score-data tr>td:nth-child(1) {
    width: 80px;
    min-width: 80px;
}
@@ -216,7 +215,7 @@
.daixuan {
    width: 100%;
/*     height: 700px; */
    /*     height: 700px; */
    /* overflow-y: scroll; */
    /* ms-overflow-style: none; */
    /* overflow-y: hidden; */
@@ -226,7 +225,7 @@
    display: none;
}
.daixuan .active{
.daixuan .active {
    background: #f9dcea;
}
@@ -242,7 +241,7 @@
    background: #f9dcea;
}
.outer-container .active{
.outer-container .active {
    background: #f9dcea;
}
@@ -307,10 +306,12 @@
.purple {
    color: #ff80ff;
}
.white{
.white {
    color: #fff;
}
.orange{
.orange {
    color: #FF8020;
}
@@ -426,7 +427,7 @@
    border: 1px solid #b0e8ff;
    text-align: center;
    cursor: pointer;
}
.button-normal:hover {
@@ -434,8 +435,8 @@
    background: #bbf1ff;
}
.color-blue{
    color:  #2156e6;
.color-blue {
    color: #2156e6;
}
.button-blue {
@@ -463,10 +464,11 @@
    background: #164cc1;
}
.btn-invalid{
.btn-invalid {
    background: gray;
}
.btn-invalid:hover{
.btn-invalid:hover {
    background: gray;
    color: #fff;
}
@@ -509,21 +511,21 @@
}
.scroll-x {
    overflow: hidden;
    overflow-x: auto;
    overflow: hidden !important;
    overflow-x: auto !important;
    white-space: nowrap;
    outline: none;
}
.scroll-x .item{
.scroll-x .item {
    display: inline-block;
    border-right: solid 1px #EEE;
    padding: 0 10px;
}
.scroll-x .item .line{
.scroll-x .item .line {
    display: block;
}
.scroll-y {
@@ -551,26 +553,35 @@
.market-container .item {
    box-sizing: border-box;
    position: relative;
    width:100px;
    width: 100px;
    display: inline-block;
    padding:5px 5px 0px 5px;
    padding: 5px 5px 0px 5px;
    border-right: solid 1px #EEE;
    border-bottom: solid 1px #EEE;
}
.market-container .item .delete{
.market-container .item .delete {
    position: absolute;
    right:3px;
    bottom:3px;
    right: 3px;
    bottom: 3px;
}
.market-container .item .delete img{
    height:20px;
.market-container .item .delete img {
    height: 20px;
}
.market-container .item span {
    display: block;
    min-height: 22px;
}
.market-container .item .score {
    display: inline;
    font-size: 20px;
    line-height: 20px;
    color: orange;
    position: absolute;
    right: 5px;
}
.shoubanzuogundong tr {
@@ -605,15 +616,16 @@
.budinggundong .scroll-x span {
    display: block;
}
.budinggundong .scroll-x span:nth-child(1){
    padding-bottom: 2px;
}
.budinggundong .scroll-x span:nth-child(2){
}
.budinggundong .scroll-x span:nth-child(1) {
    padding-bottom: 2px;
}
}
.budinggundong .scroll-x span:nth-child(2) {
    padding-bottom: 2px;
}
.code-table-container {
    word-wrap: break-word;
@@ -632,20 +644,20 @@
    border-width: 1px;
}
.want_code_content{
.want_code_content {
    padding: 10px;
    flex-wrap: wrap;
    width: 200px;
    display: flex;
}
.want_code_content .item{
.want_code_content .item {
    display: flex;
    justify-content: space-between;
    align-items: center;
}
.plate-container{
.plate-container {
    font-size: 14px;
    display: flex;
    padding-left: 10px;
@@ -660,7 +672,7 @@
}
.budinggundong  div {
.budinggundong div {
    width: 465px;
    display: flex;
    justify-content: start;
@@ -668,9 +680,10 @@
    padding: 0 5px;
    border-right: solid 1px #EEE;
    vertical-align: top;
}
.budinggundong  div span{
.budinggundong div span {
    margin-top: 3px;
    margin-right: 5px;
    margin-bottom: 3px;
@@ -678,59 +691,45 @@
    max-width: 200px;
}
.xgb_info{
    max-height: 150px;
.xgb_info {
    max-height: 240px;
    padding: 5px;
    line-height: 25px;
}
.xgb_info p{
    overflow: visible;
    overflow-wrap: break-word;
    word-wrap: break-word;
    white-space: normal;
}
.xgb_limit_up{
    width: 100%;
}
.xgb_limit_up tbody>tr{
    height: 50px;
    padding: 10px 5px;
.xgb_info tr {
    height: 100px;
}
.xgb_limit_up thread>tr:first-child{
.xgb_info thead tr {
    height: 20px;
}
.xgb_limit_up tr>td:nth-child(1) div{
    width: 50px;
.xgb_info tr td div {
    width: 180px;
    height: 100px;
    flex-wrap: wrap;
    display: flex;
    line-height: 20px;
    align-items: flex-start;
    justify-content: start;
}
.xgb_limit_up tr>td:nth-child(2) div{
    width: 400px;
    word-break: break-all;
    overflow-wrap: break-word;
.xgb_info tr td div span {
    line-height: 20px;
    height: 20px;
}
.xgb_limit_up tr>td:nth-child(3) div{
    width: 500px;
    display: flex !important;
}
.xgb_info .label-style{
    padding: 2px 5px;
    margin: 0 0 5px 5px;
}
#date{
#date {
    width: 100px;
    font-size: 14px;
}
.cb_list_top{
.cb_list_top {
    display: flex;
    overflow-wrap: break-word;
    word-wrap: break-word;
@@ -742,56 +741,151 @@
    color: #FE033F;
}
.cb_list_top > div{
    display: block;
.cb_list_top>div {
    display: block;
    width: 180px;
    margin-bottom: 5px;
    cursor: pointer;
}
.cb_list_top button{
.cb_list_top button {
    border-radius: 5px;
    font-size: 12px;
    padding: 1px 4px;
    cursor: pointer;
}
.cb_list{
.cb_list {
    margin: 10px 10px;
    width: 100%;
}
.cb_list table{
.cb_list table {
    border: solid 1px #EEE;
}
.cb_list table tr{
}
.cb_list table tr {}
.cb_list table tr td{
.cb_list table tr td {
    border: none;
    padding: 2px;
}
.cb_list button{
.cb_list button {
    border-radius: 5px;
    font-size: 12px;
    padding: 1px 4px;
    cursor: pointer;
}
.limit-up-block {
}
.limit-up-block {}
.limit-up-block th{
.limit-up-block th {
    border-left: solid 1px #000;
    height: 25px;
}
.limit-up-block td{
.limit-up-block td {
    height: 25px;
}
.market_feeling_info {}
.market_feeling_info table {
    box-sizing: border-box;
    width: 100%;
}
.market_feeling_info table tr td {
    border: none;
}
.check-want{
    height: 15px;
    width: 15px;
}
.base_line{
    border-bottom: solid black 2px;
    padding-bottom: 5px;
}
.new-blocks{
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 50px;
    padding: 5px;
    border: solid black 1px;
}
#green_list_dialog {
    padding: 10px;
    width: 400px;
}
#green_list_dialog div span{
    margin: 10px;
    line-height: 30px;
}
#want_list_dialog {
    padding: 10px;
    width: 400px;
}
#want_list_dialog div span{
    margin: 10px;
    line-height: 30px;
}
#block_codes_dialog{
    padding: 10px;
    width: 400px;
    max-height: 400px;
}
#block_codes_dialog .div{
    width: 100%;
}
 #block_codes_dialog .container{
    display: flex !important;
    flex-wrap: wrap;
}
#block_codes_dialog .container div{
    line-height: 40px;
    margin: 0 10px;
}
.l2_subscript_codes{
    padding: 10px;
    display: flex;
    flex-wrap: wrap;
    width: 100%;
}
.l2_subscript_codes span{
    text-align: left;
    padding: 3px 5px;
    margin-top: 5px;
    margin-right: 5px;
    max-width: 480px;
    width: 480px;
}
.l2_subscript_codes span img{
    width: 20px;
}
.want_list{
    height: 15px;
    width: 15px;
}
kp_html/kp/index23-05-04.html
@@ -29,47 +29,167 @@
                        <div style="margin-top: -40px;margin-left: 800px; ">
                            <input id="date" type="text" /><a class="button-blue" href="#" @click="refresh">刷新</a>
                        </div>
                    </h2>
                </span>
            </div>
            <div class="xgb_info scroll-y">
                <div v-if="xgb_limit_up_reasons" style="height: auto;">
                    <p>板块:<span class="label-style" v-for="item in xgb_limit_up_reasons.blocks">{{item}}</span></p>
                    <p v-if="xgb_limit_up_reasons.zylt">自由流通市值:{{xgb_limit_up_reasons.zylt}}</p>
                    <table class="xgb_limit_up">
                <div class="scroll-x" style="height: auto;width: auto;" v-if="code_third_blocks">
                    <table>
                        <thead>
                            <tr>
                                <td>板块</td>
                                <td>原因</td>
                                <td>成分股</td>
                            </tr>
                            <th>类型</th>
                            <th>匹配原因</th>
                            <th>开盘啦</th>
                            <th>开盘啦历史</th>
                            <th>同花顺</th>
                            <th>通达信</th>
                            <th>东方财富</th>
                        </thead>
                        <tbody>
                            <tr v-for="item in xgb_limit_up_reasons.reasons">
                            <tr>
                                <td>
                                    <div class="red">{{item[0]}}
                                        <div>
                                    原始
                                </td>
                                <td>
                                    <div>
                                        <p>{{item[1]}}</p>
                                <td rowspan="1">
                                    <div class="scroll-y red" style="">
                                        <span v-for="(item,index) in code_third_blocks.match_blocks[1]">
                                            {{item}}<span
                                                v-if="index < code_third_blocks.match_blocks[1].length-1">、</span>
                                        </span>
                                    </div>
                                </td>
                                <td>
                                    <div style="display: flex-block;">
                                        <span class="label-style" v-for="item1 in item[2]">{{item1}} </span>
                                    <div class="scroll-y">
                                        <span v-for="(item,index) in code_third_blocks.origin_blocks[1]">
                                            {{item}}<span
                                                v-if="index < code_third_blocks.origin_blocks[1].length-1">、</span>
                                        </span>
                                    </div>
                                </td>
                                <td>
                                    <div class="scroll-y">
                                        <span v-for="(item,index) in code_third_blocks.origin_blocks[5]">
                                            {{item}}<span
                                                v-if="index < code_third_blocks.origin_blocks[5].length-1">、</span>
                                        </span>
                                    </div>
                                </td>
                                <td>
                                    <div class="scroll-y">
                                        <span v-for="(item,index) in code_third_blocks.origin_blocks[2]">
                                            {{item}}<span
                                                v-if="index < code_third_blocks.origin_blocks[2].length-1">、</span>
                                        </span>
                                    </div>
                                </td>
                                <td>
                                    <div class="scroll-y">
                                        <span v-for="(item,index) in code_third_blocks.origin_blocks[3]">
                                            {{item}}<span
                                                v-if="index < code_third_blocks.origin_blocks[3].length-1">、</span>
                                        </span>
                                    </div>
                                </td>
                                <td>
                                    <div class="scroll-y">
                                        <span v-for="(item,index) in code_third_blocks.origin_blocks[4]">
                                            {{item}}<span
                                                v-if="index < code_third_blocks.origin_blocks[4].length-1">、</span>
                                        </span>
                                    </div>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    过滤后
                                </td>
                                <td rowspan="1">
                                    <div class="scroll-y red">
                                        <span v-for="(item,index) in code_third_blocks.match_blocks[0]">
                                            {{item}}<span
                                                v-if="index < code_third_blocks.match_blocks[0].length-1">、</span>
                                        </span>
                                    </div>
                                </td>
                                <td>
                                    <div class="scroll-y">
                                        <span v-for="(item,index) in code_third_blocks.blocks[1]">
                                            {{item}}<span v-if="index < code_third_blocks.blocks[1].length-1">、</span>
                                        </span>
                                    </div>
                                <td>
                                    <div class="scroll-y">
                                        <span v-for="(item,index) in code_third_blocks.blocks[5]">
                                            {{item}}<span v-if="index < code_third_blocks.blocks[5].length-1">、</span>
                                        </span>
                                    </div>
                                </td>
                                <td>
                                    <div class="scroll-y">
                                        <span v-for="(item,index) in code_third_blocks.blocks[2]">
                                            {{item}}<span v-if="index < code_third_blocks.blocks[2].length-1">、</span>
                                        </span>
                                    </div>
                                </td>
                                <td>
                                    <div class="scroll-y">
                                        <span v-for="(item,index) in code_third_blocks.blocks[3]">
                                            {{item}}<span v-if="index < code_third_blocks.blocks[3].length-1">、</span>
                                        </span>
                                    </div>
                                </td>
                                <td>
                                    <div class="scroll-y">
                                        <span v-for="(item,index) in code_third_blocks.blocks[4]">
                                            {{item}}<span v-if="index < code_third_blocks.blocks[4].length-1">、</span>
                                        </span>
                                    </div>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                    <p>解读:<span>{{xgb_limit_up_reasons.description}}</span></p>
                </div>
            </div>
            <div class="new-blocks">
                <span>
                    <p>新增概念:<span class="red">{{new_blocks}}</span></p>
                </span>
                <button class="layui-btn layui-btn-xs" @click="get_new_blocks">刷新</button>
            </div>
            <!-- 文档流 第一块 -->
@@ -119,10 +239,7 @@
                                        <br>
                                    </span>
                                </td>
                            </tr>
                            <tr>
                                <td><span class="bold">板块</span></td>
@@ -135,7 +252,27 @@
                                </td>
                            </tr>
                            <tr v-if="yesterday_block_info">
                            <tr>
                                <td><span class="bold">最终板块</span></td>
                                <td class="budinggundong">
                                    <div class="scroll-y" style="height: 93px;" v-if="code_third_blocks">
                                        <span v-for="(item,i) in code_third_blocks.match_blocks[0]"
                                            class="label-style red" @click="show_want_codes_new(item)">{{item}}</span>
                                    </div>
                                </td>
                            </tr>
                            <tr>
                                <td><span class="bold">板块流入</span></td>
                                <td class="budinggundong">
                                    <div class="scroll-y" style="height: 93px;" v-if="code_third_blocks">
                                        <span v-for="(item,i) in code_third_blocks.block_in_moneys"
                                            class="label-style">{{item[0]}}:{{item[1]}} ——【{{(item[2]/100000000).toFixed(2)}}亿】</span>
                                    </div>
                                </td>
                            </tr>
                            <tr v-if="yesterday_block_info" style="display: none;">
                                <td><span class="bold">昨日涨停原因</span></td>
                                <td>
                                    <span class="red">{{yesterday_block_info.reason}}</span>
@@ -144,7 +281,7 @@
                                </td>
                            </tr>
                            <tr v-if="yesterday_block_info">
                            <tr v-if="yesterday_block_info" style="display: none;">
                                <td><span class="bold">同原因昨日涨停</span></td>
                                <td class="budinggundong">
                                    <div style="height: 80px;" class="scroll-y">
@@ -174,15 +311,21 @@
                    <div>
                        <table style="width: 520px;">
                            <caption class="table-name">
                                <div class="child-title" :class="{'child-title-active':jingxuan_data_type==0}"
                                    @click="get_jingxuan_data(0)">精选流入</div>
                                <div class="child-title" :class="{'child-title-active':jingxuan_data_type==1}"
                                    @click="get_jingxuan_data(1)">精选流出</div>
                                <div class="child-title" :class="{'child-title-active':industry_data_type==0}"
                                    @click="get_industry_data(0)">行业流入</div>
                                <div class="child-title" :class="{'child-title-active':industry_data_type==1}"
                                    @click="get_industry_data(1)">行业流出</div>
                                <div class="child-title" :class="{'child-title-active':in_money_type==4}"
                                    @click="select_in_money_type(4)">板块流入</div>
                                <div class="child-title" :class="{'child-title-active':in_money_type==5}"
                                    @click="select_in_money_type(5)">板块流出</div>
                                <div class="child-title" :class="{'child-title-active':in_money_type==2}"
                                    @click="select_in_money_type(2)">精选流入</div>
                                <div class="child-title" :class="{'child-title-active':in_money_type==3}"
                                    @click="select_in_money_type(3)">精选流出</div>
                                <div class="child-title" :class="{'child-title-active':in_money_type==0}"
                                    @click="select_in_money_type(0)">行业流入</div>
                                <div class="child-title" :class="{'child-title-active':in_money_type==1}"
                                    @click="select_in_money_type(1)">行业流出</div>
                            </caption>
                            <thead>
@@ -193,12 +336,15 @@
                                        <div class="market-container">
                                            <div class="item" v-for="(item,index) in jingxuan_datas">
                                                <span :class="{'green':item[4]==1}">{{item[1]}}</span>
                                                <span :class="{'green':item[4]==1}">{{money_desc(item[3])}}</span>
                                                <span :class="{'green':item[4]==1}"
                                                    @click="show_want_codes_new(item[1])">{{item[1]}}</span>
                                                <span >{{money_desc(item[3])}}<span class='score' v-if="item.length>5&&parseInt(item[5])>0">{{item[5]}}分</span></span>
                                                <span class='delete'
                                                    :style="{'visibility':item[4]==1?'hidden':'visible' }"><img
                                                        src="images/delete.png"
                                                        style="display: none;" src="images/delete.png"
                                                        v-on:click="forbidden_plate(item[1],1)"></span>
                                                <span style="cursor: pointer;"
                                                    @click="get_block_codes_with_money(item[1], in_money_type%2==0?1:0)">成分股</span>
                                            </div>
                                        </div>
@@ -208,7 +354,7 @@
                            </tbody>
                        </table>
                        <table style="width: 520px;height: 180px;">
                        <table style="width: 500px;height: 180px;">
                            <caption class="table-name">
                                市场情绪
                            </caption>
@@ -217,16 +363,27 @@
                            <tbody>
                                <tr style="padding:0px;">
                                    <td style="padding:0px;">
                                        <div>市场强度:<span class="red" style="font-weight: bold;">{{market_feeling_info.strong}}</span></div>
                                        <canvas id="market_feeling_chart" width="100%" height="25"></canvas>
                                        <div style="padding-left: 10px;">
                                            <p> <span class="red"><span
                                                        class="red">涨停:【{{market_feeling_info.SJZT}}】家</span>
                                                    &nbsp;&nbsp;&nbsp;&nbsp; <span
                                                        class="green">跌停:【{{market_feeling_info.SJDT}}】家</span> </p>
                                            <p> <span class="red">涨:【{{market_feeling_info.SZJS}}】家</span>
                                                &nbsp;&nbsp;&nbsp;&nbsp; <span
                                                    class="green">跌:【{{market_feeling_info.XDJS}}】家</span> </p>
                                        <div style="padding-left: 10px;" class="market_feeling_info">
                                            <table>
                                                <tr>
                                                    <td><span class="red">涨停:【{{market_feeling_info.SJZT}}】家</span></td>
                                                    <td><span class="green">跌停:【{{market_feeling_info.SJDT}}】家</span>
                                                    </td>
                                                    <td>今日量能:{{market_feeling_info.qscln}}亿</td>
                                                </tr>
                                                <tr>
                                                    <td> <span class="red">涨:【{{market_feeling_info.SZJS}}】家</span></td>
                                                    <td><span class="green">跌:【{{market_feeling_info.XDJS}}】家</span>
                                                    </td>
                                                    <td>昨日量能:{{market_feeling_info.q_zrcs}}亿</td>
                                                </tr>
                                            </table>
                                        </div>
                                    </td>
                                </tr>
@@ -239,20 +396,36 @@
            <!-- 文档流 第二块 -->
            <!-- 首板梯队 -->
            <div>
                <!-- 待买池 -->
                <!-- 自定义板块涨停原因 -->
                <div class="table-name plate-container scroll-y"
                    style="float: left;width: 100%;text-align: center; background: #000;height:150px">
                    <span v-for="(item,i) in limit_up_reason_statistic_new" v-on:click="show_want_codes_new(item[0])">
                        <span class="num-style red"
                            :class="{'orange': app.code_third_blocks&&app.code_third_blocks.match_blocks&&app.code_third_blocks.match_blocks[0].includes(item[0])}">{{item[0]}}({{item[1]}}&{{item[2]}}&{{item[4]}})</span>&nbsp;&nbsp;&nbsp;&nbsp;
                    </span>
                </div>
                <!-- 开盘啦涨停原因 -->
                <div class="table-name plate-container scroll-y"
                    style="float: left;width: 100%;text-align: center; height:150px; background-color: white; ">
                    <span v-for="(item,i) in first_info.limit_up_reason_statistic"
                        v-on:click="show_want_codes(item[0])">
                        <span class="num-style red"
                        <span class="num-style color-blue"
                            :class="{'orange': kpl_limit_up_reason == item[0]}">{{item[0]}}({{item[1]}}&{{item[2]}})</span>&nbsp;&nbsp;&nbsp;&nbsp;
                    </span>
                </div>
                <!-- 左侧 -->
                <div style="float: left;width: 27.5%;margin-right: 0.4%;" class="scroll-y">
                    <table style="width: 100%; background: #cecece;" class="shoubanzuogundong">
                        <thead>
                            <tr style="height: 40px;padding-right: 0;">
                                <td style="padding-right: 0;">
                                    <button class="layui-btn layui-btn-xs" @click="show_green_codes">加绿列表</button>
                                    <button class="layui-btn layui-btn-xs" @click="show_want_codes_list">想买列表</button>
                                </td>
                            </tr>
                            <tr style="height: 40px;padding-right: 0;">
                                <td style="padding-right: 0;">
                                    <div style="display: flex;justify-content: space-between;">
@@ -321,44 +494,92 @@
                <!-- 右侧 -->
                <div style="float: right; width:72%;" class="scroll-y limit-up-block" v-if="cb_list">
                    <div class="scroll-x">
                    <table>
                        <thead>
                            <tr>
                                <th>涨停原因</th>
                                <th>7天累计次数</th>
                                <th>7天连续次数</th>
                                <th>最高板</th>
                                <th>>2板有</th>
                                <th colspan="7">近7天涨炸数</th>
                            </tr>
                <div style="float: right; width:72%;" class="scroll-y limit-up-block">
                    <div class="layui-tab">
                        <ul class="layui-tab-title">
                            <li class="layui-this">L2订阅代码</li>
                            <li>扫入下单记录</li>
                            <li>近7天涨停</li>
                        </ul>
                        <div class="layui-tab-content">
                            <div class="layui-tab-item layui-show">
                                <button class="layui-btn layui-btn-xs"
                                    v-on:click="get_l2_subscript_codes">刷新数据</button>
                                <div class="l2_subscript_codes">
                                    <span class="label-style" v-for="(item, index) in l2_subscript_codes" :class="{'green': item[2]<0}" :style="{'border':item[0]==code?'solid orange 2px':'none'}">
                                        <span  @click="add_to_ths(item[0])">{{item[1]}}({{item[0]}})-【{{item[2]}}%】-【{{item[3][0]}},{{item[3][1]}}&nbsp;/&nbsp;{{item[3][2]}}】</span>
                                        <img src="images/delete.png" v-on:click="add_to_forbidden(item[0])"/>
                                    </span>
                                </div>
                            </div>
                            
                        </thead>
                        <tbody>
                            <tr v-for="(item,index) in latest_limit_up_blocks">
                                <td>{{item[0]}}</td>
                                <td>{{item[1]}}</td>
                                <td>{{item[2]}}</td>
                                <td>{{item[3][0]}}({{item[3][2]}})-{{item[3][1]}}%</td>
                                <td>{{item[4]}}个</td>
                                <td>D1-【{{item[5][0][0]}}涨停&{{item[5][0][1]}}炸板】</td>
                                <td>D2-【{{item[5][1][0]}}涨停&{{item[5][1][1]}}炸板】</td>
                                <td>D3-【{{item[5][2][0]}}涨停&{{item[5][2][1]}}炸板】</td>
                                <td>D4-【{{item[5][3][0]}}涨停&{{item[5][3][1]}}炸板】</td>
                                <td>D5-【{{item[5][4][0]}}涨停&{{item[5][4][1]}}炸板】</td>
                                <td>D6-【{{item[5][5][0]}}涨停&{{item[5][5][1]}}炸板】</td>
                                <td>D7-【{{item[5][6][0]}}涨停&{{item[5][6][1]}}炸板】</td>
                            </tr>
                        </tbody>
                    </table>
                            <div class="layui-tab-item">
                                <button class="layui-btn layui-btn-xs"
                                    v-on:click="get_place_order_records">刷新数据</button>
                                <table>
                                    <tr v-for="(item, index) in place_order_record_list">
                                        <td>{{index+1}}</td>
                                        <td>{{item[0]}}</td>
                                        <td>{{item[2]}}({{item[1]}})</td>
                                        <td>{{item[3]}}</td>
                                        <td>
                                            <div v-if="item[4]">
                                                <span v-for="item1 in item[4]">
                                                    {{item1[0]}}-{{(item1[1]/100000000).toFixed(2)}}亿-{{item1[2]+1}}&nbsp;&nbsp;
                                                </span>
                                            </div>
                                        </td>
                                    </tr>
                                </table>
                            </div>
                            <div class="layui-tab-item">
                                <div class="scroll-x" v-if="latest_limit_up_blocks">
                                    <table>
                                        <thead>
                                            <tr>
                                                <th>涨停原因</th>
                                                <th>7天累计次数</th>
                                                <th>7天连续次数</th>
                                                <th>最高板</th>
                                                <th>>2板有</th>
                                                <th colspan="7">近7天涨炸数</th>
                                            </tr>
                                        </thead>
                                        <tbody>
                                            <tr v-for="(item,index) in latest_limit_up_blocks">
                                                <td>{{item[0]}}</td>
                                                <td>{{item[1]}}</td>
                                                <td>{{item[2]}}</td>
                                                <td>{{item[3][0]}}({{item[3][2]}})-{{item[3][1]}}%</td>
                                                <td>{{item[4]}}个</td>
                                                <td>D1-【{{item[5][0][0]}}涨停&{{item[5][0][1]}}炸板】</td>
                                                <td>D2-【{{item[5][1][0]}}涨停&{{item[5][1][1]}}炸板】</td>
                                                <td>D3-【{{item[5][2][0]}}涨停&{{item[5][2][1]}}炸板】</td>
                                                <td>D4-【{{item[5][3][0]}}涨停&{{item[5][3][1]}}炸板】</td>
                                                <td>D5-【{{item[5][4][0]}}涨停&{{item[5][4][1]}}炸板】</td>
                                                <td>D6-【{{item[5][5][0]}}涨停&{{item[5][5][1]}}炸板】</td>
                                                <td>D7-【{{item[5][6][0]}}涨停&{{item[5][6][1]}}炸板】</td>
                                            </tr>
                                        </tbody>
                                    </table>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
@@ -400,36 +621,153 @@
            <!-- 弹出框 -->
            <div id="want_code_dialog" style="display: none;">
                <div v-if="want_codes" class="want_code_content"
                    style="display: flex;width: 676px;justify-content: space-between;">
                    style="display: flex;width: 1000px;justify-content: space-between;">
                    <div v-for="(item,i) in want_codes" class="item"
                        style="display: flex;width: 335px;margin-bottom: 15px;" v-if="item[8]==1">
                        style="display: flex;width: 490px;margin-bottom: 15px;" v-if="item[8]==1"
                        :class="{'base_line': item[0] == code}">
                        <div>
                            <input type="checkbox" :checked="item[9]==1"
                                v-on:click="add_or_remove_forbidden($event,item[0])" />
                                v-on:click="add_or_remove_forbidden($event,item[0], i)" />
                            <img :style="{'visibility':item[3]==1?'visiable':'hidden'}" style="margin-right:5px;"
                                src="./images/stop_up.png"><span
                                :class="{'red': item[5],'green': item[0].indexOf('00')!=0&&item[0].indexOf('60')!=0&&item[0].indexOf('30')!=0 }">{{item[1]}}({{item[0]}})-{{item[2]}}-{{item[6]}}-{{item[7]}}
                            </span><span v-if="item[3]==1">(炸)</span> <span class="red" v-if="item[4]">*</span>
                                src="./images/stop_up.png"> <span v-if="item[10]">@</span> <span
                                :class="{'red': item[5],'green': item[0].indexOf('00')!=0&&item[0].indexOf('60')!=0&&item[0].indexOf('30')!=0 }"><span
                                    style="cursor: pointer;" @click="add_to_ths(item[0])">{{item[1]}}</span>(<span
                                    @click="show_latest_limit_up_queue(item[2])">{{item[0]}}</span>)-{{item[2]}}-{{item[6]}}-{{item[7]}}
                            </span><span v-if="item[3]==1" class="green">(炸)</span> <span class="red"
                                v-if="item[4]">*</span>
                            <span v-if="item.length>=12">【{{(item[11]/100000000).toFixed(2)}}亿】</span>
                            绿
                            <input type="checkbox" :checked="item[4]==1" class="check-want"
                                v-on:click="add_or_remove_green_buy($event,item[0],i)" />
                            想
                            <input v-if="item.length>12" class="want_list" type="checkbox" :checked="item[12]==1" class="check-want"
                                    v-on:click="add_or_remove_want_buy($event,item[0],i)" />
                        </div>
                        <img v-if="item[2]==1" class="delete" src="./images/delete.png"
                            @click="delete_from_want_codes(i)">
                    </div>
                    <div style="width: 100%; height: 1px;background-color: #000;margin-bottom: 5px;"></div>
                    <div v-for="(item,i) in want_codes" class="item"
                        style="display: flex;width: 335px;margin-bottom: 15px;" v-if="item[8]==0">
                        <div><input type="checkbox" :checked="item[9]==1" /><img
                        style="display: flex;width: 360px;margin-bottom: 15px;" v-if="item[8]==0">
                        <div><input type="checkbox" :checked="item[9]==1"
                                v-on:click="add_or_remove_forbidden($event,item[0], i)" /><img
                                :style="{'visibility':item[3]==1?'visiable':'hidden'}" style="margin-right:5px;"
                                src="./images/stop_up.png"><span
                                :class="{'red': item[5]}">{{item[1]}}({{item[0]}})-{{item[2]}}-{{item[6]}}-{{item[7]}}
                            </span><span v-if="item[3]==1">(炸)</span> <span class="red" v-if="item[4]">*</span> </div>
                                src="./images/stop_up.png"><span :class="{'red': item[5]}"><span
                                    @click="add_to_ths(item[0])" style="cursor: pointer;">{{item[1]}}</span>(<span
                                    @click="show_latest_limit_up_queue(item[2])">{{item[0]}}</span>)-{{item[2]}}-{{item[6]}}-{{item[7]}}
                            </span><span v-if="item[3]==1">(炸)</span> <span class="red" v-if="item[4]">*</span>
                            绿<input type="checkbox" :checked="item[4]==1" class="check-want"
                                v-on:click="add_or_remove_green_buy($event,item[0], i)" />
                            想
                            <input v-if="item.length>12" class="want_list" type="checkbox" :checked="item[12]==1" class="check-want"
                                        v-on:click="add_or_remove_want_buy($event,item[0],i)" />
                        </div>
                        <img v-if="item[2]==1" class="delete" src="./images/delete.png"
                            @click="delete_from_want_codes(i)">
                    </div>
                </div>
            </div>
            <div id="latest_limit_up_dialog" style="display: none;">
                <div class="scroll-y" style="height: 600px;">
                    <table>
                        <thead>
                            <tr>
                                <td>代码</td>
                                <td>名称</td>
                                <td>涨停时间</td>
                                <td>高度</td>
                                <td>涨停原因</td>
                                <td>涨停推荐原因</td>
                            </tr>
                        </thead>
                        <tbody>
                            <tr v-for="item in latest_limit_up_datas">
                                <td>{{item[0]}}</td>
                                <td>{{item[1]}}</td>
                                <td>{{item[2]}}</td>
                                <td>{{item[3]}}</td>
                                <td>{{item[4]}}</td>
                                <td>{{item[5]}}</td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </div>
            <div id="green_list_dialog" style="display: none;">
                <div>
                    <span v-for="item in green_list">
                        {{item}}<img class="delete" src="./images/delete.png" @click="delete_from_green_codes(item)">
                    </span>
                </div>
            </div>
            <div id="want_list_dialog" style="display: none;">
                <div>
                    <span v-for="item in want_list">
                        {{item}}<img class="delete" src="./images/delete.png" @click="delete_from_want_codes(item)">
                    </span>
                </div>
            </div>
            <div id="block_codes_dialog" style="display: none;">
                <div>
                    <div class="layui-tab">
                        <ul class="layui-tab-title">
                      <li class="layui-this">流入</li>
                            <li>流出</li>
                        </ul>
                        <div class="layui-tab-content">
                            <div class="layui-tab-item layui-show ">
                                <div class="container">
                                    <div v-for="item in block_codes_in">
                                        {{item[1]}}({{item[0]}})-<span
                                            :class="{'green':item[2]<0}">({{(item[2]/100000000).toFixed(2)}}亿)</span><span
                                            v-if="item[3]==true">(排除)</span>
                                    </div>
                                </div>
                            </div>
                            <div class="layui-tab-item" >
                                <div class="container">
                                    <div v-for="item in block_codes_out">
                                        {{item[1]}}({{item[0]}})-<span
                                            :class="{'green':item[2]<0}">({{(item[2]/100000000).toFixed(2)}}亿)</span><span
                                            v-if="item[3]==true">(排除)</span>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <script src="js/page.js?_=1"></script>
kp_html/kp/js/code_list.js
@@ -77,7 +77,9 @@
            // 过滤的索引
            filter_indexes:[],
            // 费用数据
            commission_data:{"total_commission":0, "month_commission":0}
            commission_data:{"total_commission":0, "month_commission":0},
            // L2数据结束索引
            l2_end_index:null
            
        },
        watch: {
@@ -108,7 +110,6 @@
            setInterval(function() {
                if (is_trade_time()) {
                    app.get_delegated_buy_code_infos();
                    app.get_latest_cancel_orders();
                }
            }, 1000 * 3);
@@ -191,7 +192,7 @@
                
                var date = $("#date").val();
                http_util.get_l2_datas(app.code, date, function(res) {
                http_util.get_l2_datas(app.code, date, app.l2_end_index, function(res) {
                    layer.close(index);
                    console.log("获取到L2数据:", res)
                    res = JSON.parse(res);
@@ -565,9 +566,9 @@
            load_data: function(refresh_l2) {
                if (app.origin_code) {
                    app.get_score_data(app.origin_code, null, function(e) {
                        if (refresh_l2) {
                            app.refresh_l2_data();
                        }
                        // if (refresh_l2) {
                        //     app.refresh_l2_data();
                        // }
                    });
                    
                    app.get_l2_cant_buy_reasons(app.origin_code);
@@ -622,6 +623,7 @@
                
            },
            l2_screen_click:function(){
                // L2筛选
                if(!isNaN($("#min-volume").val())){
                    app.l2_min_volume=$("#min-volume").val();
@@ -634,6 +636,14 @@
                }else{
                    app.l2_max_volume=null;
                }
                if(!isNaN($("#end-index").val())){
                    app.l2_end_index=$("#end-index").val();
                }else{
                    app.l2_end_index=null;
                }
                watch_indexes_str = $("#watch_indexes").val();
                if(watch_indexes_str!=null&&watch_indexes_str.length>0){
                    var final_indexes=[];
@@ -646,6 +656,8 @@
                }else{
                    app.filter_indexes =[];
                }
                layer.msg("设置成功")
            },
            fordbidden_buy:function(code){
@@ -668,19 +680,19 @@
                         let commission_data ={};
                         // commission_data.commission = =res.data.commission;
                         commission_data.delegates =res.data.delegates ;
                         commission_data.deal =res.data.deal;
                         commission_data.deals =res.data.deals;
                        var total_money = 0;
                         for(let k in commission_data.delegates){
                             total_money -=commission_data.delegates[k]["money"];
                         }
                          total_money += commission_data.deal["money"];
                         for(let k in commission_data.deals){
                             total_money +=commission_data.deals[k]["money"];
                         }
                         commission_data.total_commission = total_money.toFixed(2);
                         commission_data.commission = res.data.commission;
                          commission_data.month_commission = res.data.month_commission;
                         console.log(commission_data)
                         app.commission_data = commission_data;
                     }
                 });
            }
kp_html/kp/js/http.js
@@ -52,6 +52,18 @@
            type: type
        }, callback);
    },
    get_blocks_in_money_info: function(type, callback) {
        http_util.http_request("/get_blocks_in_money_info", {
            type: type
        }, callback);
    },
    get_place_order_records: function(day, callback) {
        http_util.http_request("/get_place_order_records", {
            day: day
        }, callback);
    },
    get_limit_up_list: function(code, day, callback) {
        var params = {
@@ -64,6 +76,15 @@
        http_util.http_request("/kpl/get_limit_up_list", params, callback);
    },
    get_limit_up_statistic_infos: function(day, callback) {
        var params = {};
        if (day) {
            params.day = day;
        }
        http_util.http_request("/kpl/get_limit_up_statistic_infos", params, callback);
    },
    get_plate_info: function(code, callback) {
        http_util.http_request("/kpl/get_plate_info", {
@@ -130,6 +151,15 @@
                type_desc = "移除暂不买"
                //移除想买
                break;
            case 8:
                data.type = 441;
                data.data.plates = [plate]
                type_desc = "加绿"
                break;
            case 9:
                data.type = 442;
                type_desc = "移绿"
                break;
        }
        console.log("socket请求", data)
@@ -150,10 +180,24 @@
    },
    get_want_codes: function(plate, callback) {
        pyjs.socket_request(JSON.stringify({
        http_util.socket_request(JSON.stringify({
            type: 403,
            plate: plate
        }), function(result) {
            result = JSON.parse(result);
            if (result.code == 0) {
                callback(result);
            }
        });
    },
    get_green_codes: function(callback) {
        var data = {
            type: 443
        };
        var sign = http_util.get_sign(data);
        data['sign'] = sign;
        http_util.socket_request(JSON.stringify(data), function(result) {
            console.log("结果:", result);
            result = JSON.parse(result);
            if (result.code == 0) {
                callback(result);
@@ -217,6 +261,16 @@
        http_util.http_request("/kpl/get_plate_codes", params, callback);
    },
    get_plate_codes_new: function(plate, day, callback) {
        var params = {
            plate: plate
        };
        if (day) {
            params.day = day;
        }
        http_util.http_request("/kpl/get_plate_codes_new", params, callback);
    },
    get_open_limit_up_count_rank(code, callback) {
        var params = {}
@@ -243,13 +297,17 @@
    },
    //获取L2的数据
    get_l2_datas: function(code, date, callback) {
    get_l2_datas: function(code, date, end_index, callback) {
        var params = {
            code: code
        }
        if (date) {
            params['date'] = date
        }
        if (end_index != null && end_index) {
            params['end_index'] = parseInt(end_index)
        }
        console.log("L2参数", params);
        http_util.http_request("/get_l2_datas", params, callback);
@@ -353,6 +411,12 @@
        http_util.http_request("/get_cb_list", params, callback);
    },
    get_new_blocks(callback) {
        var params = {}
        http_util.http_request("/get_new_blocks", params, callback);
    },
    buy_by_ths(code, callback) {
        var params = {
            "code": code
@@ -366,9 +430,50 @@
        }
        http_util.http_request("/statistic_latest_limit_up_block", params, callback);
    },
    // 获取距离给定时间最近的开盘啦涨停数据
    get_kpl_latest_limit_up_queue_by_time(time, callback) {
        var params = {
            "time": time,
        }
        http_util.http_request("/kpl/get_latest_limit_up_queue", params, callback);
    },
    get_account_commission_detail(callback) {
        http_util.http_request("/get_account_commission_detail", {}, callback);
    },
    get_code_third_blocks: function(code, callback) {
        var params = {
            type: "common",
            data: {
                ctype: "get_code_third_blocks",
                code: code
            },
            sign: ''
        }
        http_util.socket_request(JSON.stringify(params), function(result) {
            result = JSON.parse(result);
            callback(result);
        });
    },
    get_block_codes_with_money: function(block,desc, callback) {
        http_util.http_request("/get_block_codes_with_money", {
            block: block,
            desc:desc
        }, callback);
    },
    // 获取所有L2订阅的列表
    get_l2_subscript_codes: function(callback) {
        var params = {
            type: "get_huaxin_subscript_codes",
            data: {},
            sign: ''
        }
        http_util.socket_request(JSON.stringify(params), function(result) {
            result = JSON.parse(result);
            callback(result);
        });
    }
@@ -376,4 +481,9 @@
};
kp_html/kp/js/page.js
@@ -14,14 +14,14 @@
$(function() {
    function _resize() {
        var code_info_height = 440
        var code_info_height = 440;
        console.log("总高", $(window).height())
        var bottom_height = $(window).height() - code_info_height - 140;
        console.log("底部高", bottom_height)
        $("#body>div:nth-child(3)>div").css("height", code_info_height).css("max-height", code_info_height);
        $("#body>div:nth-child(4)").css("height", bottom_height)
        $("#body>div:nth-child(4)>div:nth-child(2)").css("height", bottom_height - 10)
        $("#body>div:nth-child(4)>div:nth-child(3)").css("height", bottom_height - 60)
        $("#body>div:nth-child(4)>div").css("height", code_info_height).css("max-height", code_info_height);
        $("#body>div:nth-child(5)").css("height", bottom_height)
        $("#body>div:nth-child(5)>div:nth-child(3)").css("height", bottom_height - 10)
        $("#body>div:nth-child(5)>div:nth-child(4)").css("height", bottom_height - 60)
        $(".outer-container").css("height", bottom_height - 180)
    }
    //针对窗口高度做调整
@@ -64,13 +64,14 @@
        //非交易时间不刷新
        if (is_trade_time()) {
            app.get_limit_up_list(app.code, true);
            app.get_limit_up_statistic_infos(true);
        }
    }, 3000, 3000);
    setInterval(function() {
        if (is_trade_time()) {
            app.get_industry_data(app.industry_data_type);
            app.get_jingxuan_data(app.jingxuan_data_type);
            app.get_block_in_money_data(app.in_money_type);
        }
    }, 3000, 10000);
@@ -83,9 +84,13 @@
    
    setInterval(function() {
        if (is_trade_time()) {
            app.get_cb_list();
            app.get_l2_subscript_codes();
        }
    }, 3000, 3000);
@@ -368,7 +373,8 @@
                            ["板块", "2020-01-01"],
                            ["板块", "2020-01-01"]
                        ],
                        blocks: ["板块1", "板块2"]
                        blocks: ["板块1", "板块2"],
                    }]
                },
@@ -378,14 +384,22 @@
                    first: '',
                    second: ''
                },
                industry_data_type: -1,
                jingxuan_data_type: 0,
                // 选股宝涨停原因
                xgb_limit_up_reasons: null,
                in_money_type: 4,
                // 三方代码板块
                code_third_blocks: null,
                // 市场情绪
                market_feeling_info: {},
                // 板块轮动
                latest_limit_up_blocks:[]
                latest_limit_up_blocks:[],
                new_blocks:"",// 新增的概念
                latest_limit_up_datas:[],
                green_list:[], // 绿名单
                limit_up_reason_statistic_new:[],
                place_order_record_list:[], // 下单记录
                block_codes_in:[],
                block_codes_out:[],
                l2_subscript_codes:[],
                want_list:[]
            },
            watch: {
                want_codes: function() {
@@ -410,39 +424,39 @@
                    key = $("#limit_up_search_key").val();
                    app.limit_up_search_key = key;
                },
                //获取行业数据
                get_industry_data: function(type) {
                    if (type < 0) {
                        return;
                    }
                    app.industry_data_type = type;
                    app.jingxuan_data_type = -1;
                    http_util.get_market_data(app.industry_data_type, function(result) {
                        result = JSON.parse(result);
                        if (result.code == 0) {
                            app.jingxuan_datas = result.data;
                        }
                    });
                select_in_money_type:function(type){
                    app.in_money_type = type;
                    app.get_block_in_money_data(type);
                },
                get_jingxuan_data: function(type) {
                    if (type < 0) {
                        return;
                    }
                    app.jingxuan_data_type = type;
                    app.industry_data_type = -1;
                    if (type == 0) {
                        type = 2;
                    } else {
                        type = 3;
                    }
                    http_util.get_market_data(type, function(result) {
                        result = JSON.parse(result);
                        if (result.code == 0) {
                            app.jingxuan_datas = result.data;
                get_block_in_money_data: function(type) {
                    switch(type){
                        case 0:
                        case 1:
                        case 2:
                        case 3:{
                            http_util.get_market_data(type, function(result) {
                                result = JSON.parse(result);
                                if (result.code == 0) {
                                    app.jingxuan_datas = result.data;
                                }
                            });
                        }
                    });
                        break;
                        case 4:
                        case 5:
                        {
                            http_util.get_blocks_in_money_info(type%2, function(result) {
                                result = JSON.parse(result);
                                if (result.code == 0) {
                                    app.jingxuan_datas = result.data;
                                }
                            });
                        }
                        break;
                    }
                },
                get_score_data: function(code, name, callback) {
                    console.log("获取分数数据:", code, name);
                    var date=$("#date").val();
@@ -534,10 +548,32 @@
                        }
                    });
                },
                get_limit_up_statistic_infos: function(is_auto_refresh) {
                    day = $("#date").val();
                    http_util.get_limit_up_statistic_infos(day, function(res) {
                        res = JSON.parse(res)
                        console.log("get_limit_up_statistic_infos", res);
                        if (res.code == 0) {
                            var temps = new Array();
                            var current_limit_up_reason =null;
                            res.data.limit_up_reason_statistic.forEach(function(d) {
                                if (app.code_third_blocks&&app.code_third_blocks.match_blocks&&app.code_third_blocks.match_blocks[0].includes(d[0])) {
                                    current_limit_up_reason = d;
                                } else {
                                    temps.push(d);
                                }
                            });
                            if (current_limit_up_reason) {
                                temps.unshift(current_limit_up_reason);
                            }
                            app.limit_up_reason_statistic_new = temps;
                        }
                    });
                },
                get_plate_info: function(code, is_auto_refresh) {
                    http_util.get_plate_info(code, function(res) {
                        res = JSON.parse(res)
                        console.log(res)
                        console.log("get_plate_info", res)
                        if (res.code == 0) {
                            app.choose_code_info = res.data
                            if (!is_auto_refresh) {
@@ -587,8 +623,23 @@
                            .limit_up_codes[index][1]);
                        app.get_plate_info(app.first_info.limit_up_codes[index][0]);
                        app.get_last_trade_day_reasons(app.first_info.limit_up_codes[index][0]);
                        app.get_code_third_blocks(app.code);
                    }
                },
                get_code_third_blocks:function(code){
                    http_util.get_code_third_blocks(app.code, function(res) {
                        console.log("三方板块请求结果:",JSON.stringify(res.data));
                        if (res.code == 0) {
                            app.code_third_blocks = res.data;
                            console.log(res.data)
                        } else {
                            app.code_third_blocks = null;
                        }
                    });
                },
                //删除1级代码
                del_code_level_1: function(index) {
                    http_util.add_ignore_code(1, app.first_info.limit_up_codes[index][0], function(
@@ -668,19 +719,11 @@
                    app.code_name = code;
                    app.first_info.limit_up_codes.forEach(function(e) {
                        if (e[0] == code) {
                            app.code_name = e[1] + " " + e[0];
                            app.code_name = e[0] + "(" + e[1] +
                                ")";
                        }
                    });
                    http_util.get_xgb_limit_up_reasons(code, function(res) {
                        console.log("选股宝请求结果:", res);
                        res = JSON.parse(res)
                        if (res.code == 0) {
                            app.xgb_limit_up_reasons = res.data;
                            console.log(app.xgb_limit_up_reasons.reasons)
                        } else {
                            app.xgb_limit_up_reasons = null;
                        }
                    });
                    app.get_code_third_blocks(code);
                    //请求板块
                    setTimeout(function() {
@@ -757,6 +800,22 @@
                    });
                },
                show_want_codes_new: function(plate) {
                    if (Date.now() - app.last_show_dialog < 500) {
                        return;
                    }
                    app.last_show_dialog = Date.now()
                    var day = $("#date").val();
                    http_util.get_plate_codes_new(plate,day, function(result) {
                        result = JSON.parse(result);
                        console.log("涨停原因成分股返回:", result);
                        var datas = result.data;
                        app.want_codes_title = plate;
                        app.want_codes = datas;
                        console.log("涨停原因成分股:", datas)
                    });
                },
                delete_from_want_codes: function(index) {
                    http_util.do_action_for_code(app.want_codes[index][0], "", 5,
@@ -842,7 +901,7 @@
                        }
                    });
                },
                add_or_remove_forbidden:function(event,code){
                add_or_remove_forbidden:function(event, code, index){
                    
                    var el = event.currentTarget;
                    var checked = $(el).is(':checked');
@@ -850,53 +909,48 @@
                    if(checked){
                        http_util.do_action_for_code(code,'',0,function(res){
                            
                            app.want_codes[index][9] = 1;
                        });
                    }else{
                        http_util.do_action_for_code(code,'',1,function(res){
                            app.want_codes[index][9] = 0;
                        });
                    }
                    
                },
                get_cb_list:function(){
                    http_util.get_cb_list(function(res){
                        res = JSON.parse(res);
                        if(res.code==0){
                            if(app.cb_list!=null){
                                var buy_codes = [];
                                for(var i=0;i<res.data.length;i++){
                                    var contains = false;
                                    for(var j=0;j<app.cb_list.length;j++){
                                        if(app.cb_list[j][0][0] ==res.data[i][0][0] ){
                                            contains = true;
                                            break;
                                        }
                                    }
                                    if(!contains){
                                        buy_codes.push(res.data[i][0][0])
                                    }
                                }
                                if(buy_codes.length>0){
                                    buy_codes.forEach(function(e){
                                        http_util.buy_by_ths(e,function(res){
                                            res= JSON.parse(res);
                                            if(res.code!=0){
                                                console.log("同花顺下单出错:",res.msg);
                                            }else{
                                                layer.msg("下单完成");
                                            }
                                        });
                                    });
                                }
                            }
                            app.cb_list = res.data;
                            var arr= new Array();
                            arr = arr.concat(res.data);
                            app.cb_list_top = arr;
                            app.set_selected_cb_top(true);
                        }
                    })
                add_or_remove_green_buy:function(event,code, index){
                    var el = event.currentTarget;
                    var checked = $(el).is(':checked');
                    console.log(code, checked);
                    if(checked){
                        http_util.do_action_for_code(code,'',8,function(res){
                                app.want_codes[index][4] = 1;
                        });
                    }else{
                        http_util.do_action_for_code(code,'',9,function(res){
                            app.want_codes[index][4] = 0;
                        });
                    }
                },
                add_or_remove_want_buy:function(event,code, index){
                    var el = event.currentTarget;
                    var checked = $(el).is(':checked');
                    console.log(code, checked);
                    if(checked){
                        http_util.do_action_for_code(code,'',4,function(res){
                                app.want_codes[index][12] = 1;
                        });
                    }else{
                        http_util.do_action_for_code(code,'',5,function(res){
                            app.want_codes[index][12] = 0;
                        });
                    }
                },
                
                set_selected_cb_top:function(update_top){
@@ -957,17 +1011,155 @@
                        }
                    });
                    
                }
                },
                // 获取新增概念
                get_new_blocks:function(){
                  http_util.get_new_blocks(function(res){
                      res= JSON.parse(res);
                      console.log(res);
                      if(res.code==0){
                          var blocks = res.data;
                          var block_str="";
                          for(var i=0;i<blocks.length;i++){
                              block_str +=blocks[i];
                              if(i<blocks.length-1){
                                  block_str+="、";
                              }
                          }
                          app.new_blocks = block_str;
                      }else{
                        layer.msg(res.msg);
                      }
                  })
                },
                add_to_ths:function(code){
                    pyjs.add_code_to_ths(code);
                },
                show_latest_limit_up_queue:function(time_str){
                       http_util.get_kpl_latest_limit_up_queue_by_time(time_str,function(res){
                        res = JSON.parse(res);
                        if(res.code==0){
                            datas = [];
                            res.data.sort((a,b)=>a[2] - b[2]);
                            res.data.forEach(function(e){
                                let date = new Date(e[2]*1000);
                                let hours = String(date.getHours()).padStart(2, '0');
                                let minutes = String(date.getMinutes()).padStart(2, '0');
                                let seconds = String(date.getSeconds()).padStart(2, '0');
                                temp_time_str = `${hours}:${minutes}:${seconds}`;
                                datas.push([e[0],e[1],temp_time_str,e[4],e[5],e[6]]);
                            });
                            app.latest_limit_up_datas = datas;
                            layer.open({
                                title: '当时涨停:' + time_str,
                                type: 1,
                                content: $("#latest_limit_up_dialog"),
                            });
                        }
                    });
                },
                show_green_codes:function(){
                    http_util.get_green_codes(function(res){
                        app.green_list = res.data;
                        layer.open({
                            title: '绿名单',
                            type: 1,
                            content: $("#green_list_dialog"),
                        });
                    });
                },
                delete_from_green_codes:function(code_info){
                    code = code_info.split(":")[1]
                    http_util.do_action_for_code(code, '', 9);
                    http_util.get_green_codes(function(res){
                        app.green_list = res.data;
                    });
                },
                show_want_codes_list:function(){
                    http_util.get_want_codes('',function(res){
                        app.want_list = res.data;
                        layer.open({
                            title: '想买单',
                            type: 1,
                            content: $("#want_list_dialog"),
                        });
                    });
                },
                delete_from_want_codes:function(code_info){
                    code = code_info.split(":")[1]
                    http_util.do_action_for_code(code, '', 5);
                    http_util.get_want_codes('',function(res){
                        app.want_list = res.data;
                    });
                },
                get_place_order_records:function(){
                    day = $("#date").val();
                    http_util.get_place_order_records(day,function(res){
                        res = JSON.parse(res);
                        if(res.code == 0){
                            app.place_order_record_list = res.data;
                        }
                    });
                },
                get_block_codes_with_money:function(block, desc){
                    http_util.get_block_codes_with_money(block, 1, function(res){
                        res = JSON.parse(res);
                        if(res.code == 0){
                            app.block_codes_in = res.data;
                            http_util.get_block_codes_with_money(block, 0, function(res){
                                res = JSON.parse(res);
                                if(res.code == 0){
                                    app.block_codes_out = res.data;
                                }
                                layer.open({
                                    title: '成分股',
                                    type: 1,
                                    content: $("#block_codes_dialog"),
                                });
                            });
                        }
                    });
                },
                get_l2_subscript_codes:function(){
                    http_util.get_l2_subscript_codes(function(res){
                        if(res.code == 0){
                            app.l2_subscript_codes = res.data.list;
                        }
                    });
                },
                add_to_forbidden:function(code){
                        http_util.do_action_for_code(code,'',0,function(res){
                            layer.msg("拉黑成功");
                            app.get_l2_subscript_codes();
                        });
                },
             }
        });
    }
    function init_data() {
        app.get_industry_data(app.industry_data_type);
        app.get_jingxuan_data(app.jingxuan_data_type);
        app.get_block_in_money_data(app.in_money_type);
        app.get_limit_up_list(app.code, false);
        app.get_limit_up_statistic_infos(true);
        app.get_kpl_market_feelings();
        app.get_cb_list();
        app.statistic_latest_limit_up_block("");
    }
kp_html/kp/js/test.js
@@ -0,0 +1,1258 @@
var TOKEN_SERVER_TIME = 1726826975.144;
var hexin_v="";
!function(n, t) {
    !function() {
        var r, e, a;
        r = e = a = n;
        var u, c, s;
        u = c = s = t;
        function v() {
            var n = arguments[s[0]];
            if (!n)
                return r[0];
            for (var t = u[1], o = a[1], i = c[2]; i < n.length; i++) {
                var v = n.charCodeAt(i)
                  , f = v ^ o;
                o = v,
                t += e[2].fromCharCode(f)
            }
            return t
        }
        var f = c[3]
          , l = s[4]
          , p = Wn(e[3], r[4], s[5])
          , d = a[5]
          , h = Wn(c[6], s[7])
          , g = c[8]
          , w = c[9]
          , m = r[6]
          , I = u[10]
          , y = a[7]
          , _ = (s[11],
        c[12],
        s[13])
          , C = e[8]
          , E = u[14]
          , A = ot(e[9], e[10])
          , b = a[11]
          , T = u[15]
          , B = c[16]
          , R = r[12]
          , k = r[13]
          , S = s[17]
          , P = u[18]
          , M = Wn(s[19], s[20], u[21])
          , O = v(s[22], e[14])
          , D = s[23]
          , x = s[24]
          , N = u[25]
          , L = u[26]
          , W = Wn(s[27], r[15])
          , F = u[28]
          , Y = r[16]
          , j = a[17]
          , H = e[18]
          , $ = e[19]
          , U = r[20]
          , V = v(c[29], e[21], e[22])
          , X = s[30]
          , G = s[31]
          , K = s[32]
          , Q = s[33]
          , Z = r[23]
          , q = r[24]
          , z = v(u[12], u[34], s[35])
          , J = u[36]
          , nn = a[25]
          , tn = s[37]
          , rn = c[38]
          , en = r[26]
          , an = c[39]
          , on = s[40]
          , un = a[27]
          , cn = u[41]
          , sn = ot(s[42], c[43])
          , vn = r[28]
          , fn = u[8]
          , ln = s[44]
          , pn = a[29]
          , dn = s[45]
          , hn = a[30]
          , gn = c[46]
          , wn = a[31]
          , mn = a[32]
          , In = s[47]
          , yn = r[33]
          , _n = a[34]
          , Cn = c[48]
          , En = a[8]
          , An = v(a[35], s[49])
          , bn = c[50]
          , Tn = c[51]
          , Bn = at(r[36], s[52])
          , Rn = ot(r[37], e[38])
          , kn = e[39]
          , Sn = u[53]
          , Pn = r[40]
          , Mn = s[54]
          , On = s[55]
          , Dn = Wn(u[56], r[41], r[42])
          , xn = r[43]
          , Nn = u[57]
          , Ln = e[44];
        function Wn() {
            return arguments[u[0]].split(e[0]).reverse().join(c[1])
        }
        var Fn = r[45], Yn = Wn(c[58], e[46]), jn = v(s[59], u[60]), Hn = Wn(r[47], s[61]), $n = s[62], Un = s[63], Vn = u[2], Xn = [new u[27](r[48]), new u[27](c[64])], Gn = [new e[47](ot(a[49])), new u[27](ot(a[50], u[65]))], Kn = c[66][f + l] || r[51].getElementsByTagName(p + d)[r[52]], Qn;
        !function(n) {
            n[e[53]] = s[67];
            function t(n) {
                var t = r[51][u[68]]
                  , o = u[69] + n + s[70]
                  , i = t.indexOf(o);
                if (i == -e[54]) {
                    if (o = n + c[70],
                    t.substr(r[52], o.length) != o)
                        return;
                    i = a[52]
                }
                var f = i + o[v(u[71], s[72])]
                  , l = t.indexOf(r[55], f);
                return l == -a[54] && (l = t[a[56]]),
                t.substring(f, l)
                debugger
            }
            n[a[57]] = f;
            function o(n, t, a, o, i) {
                var c = n + r[58] + t;
                o && (c += e[59] + o),
                i && (c += v(Jn, u[73], s[74]) + i),
                a && (c += u[75] + a),
                u[66][u[68]] = c
            }
            n[s[76]] = t;
            function i(n, t, r) {
                this.setCookie(n, u[1], u[77], t, r)
            }
            n[s[78]] = o;
            function f() {
                var t = a[60];
                this.setCookie(t, u[67]),
                this.getCookie(t) || (n[r[53]] = e[61]),
                this.delCookie(t)
            }
            n[Wn(N, r[62], c[79])] = i
        }(Qn || (Qn = {}));
        var Zn;
        !function(n) {
            var t = u[80], o = v(nn, s[81], u[82]), i = s[67], f, l = u[83][Wn(u[84], e[63])], p, d;
            function g(n) {
                var t = j;
                return t = dn,
                i ? y(n) : f ? w(n) : void u[2]
            }
            function w(n) {
                E(function() {
                    return n = R(n),
                    f.getAttribute(n)
                })()
            }
            function m() {
                try {
                    return !!(o in s[83] && s[83][o])
                } catch (n) {
                    return void u[2]
                }
            }
            function I(n) {
                try {
                    f.removeItem(n)
                } catch (t) {}
            }
            n[c[85]] = C;
            function y(n) {
                try {
                    return f.getItem(n)
                } catch (t) {
                    return u[86]
                }
            }
            n[c[87]] = B;
            function _(n, t) {
                try {
                    f.setItem(n, t)
                } catch (r) {}
            }
            function C() {
                var n = e[64]
                  , r = u[88];
                if (i = m(),
                i)
                    f = a[65][o];
                else if (l[at(e[66])][at(e[67], a[68])])
                    try {
                        p = new ActiveXObject(Wn(a[69], s[89], l)),
                        p.open(),
                        p.write(s[90]),
                        p.close(),
                        d = p.w[e[70]][s[2]][e[71]],
                        f = d.createElement(n + t + r)
                    } catch (c) {
                        f = l.createElement(o),
                        d = l[Wn(u[91], a[72])] || l.getElementsByTagName(s[92])[s[2]] || l[a[73]]
                    }
            }
            function E(n) {
                return function() {
                    d.appendChild(f),
                    f.addBehavior(s[93]),
                    f.load(o);
                    var t = n();
                    return d.removeChild(f),
                    t
                }
            }
            n[c[94]] = g;
            function A(n) {
                var t, r, e;
                if (t = r = e = a,
                i)
                    I(n);
                else {
                    if (!f)
                        return void e[52];
                    b(n)
                }
            }
            function b(n) {
                E(function() {
                    n = R(n),
                    f.removeAttribute(n),
                    f.save(o)
                })()
            }
            function T(n, t) {
                E(function() {
                    n = R(n),
                    f.setAttribute(n, t),
                    f.save(o)
                })()
            }
            n[a[74]] = A;
            function B(n, t) {
                if (void 0 === t)
                    return A(n);
                if (i)
                    _(n, t);
                else {
                    if (!f)
                        return void u[2];
                    T(n, t)
                }
            }
            function R(n) {
                var t = s[95]
                  , e = r[75]
                  , a = new r[47](t + h + e,c[96]);
                return n.replace(new c[27](u[97]), v(s[98], s[99], s[100])).replace(a, c[101])
            }
        }(Zn || (Zn = {}));
        var qn = function() {
            var n, t, r;
            n = t = r = a;
            var e, o, i;
            e = o = i = s;
            var u = o[15]
              , c = o[102]
              , f = e[103];
            function l(r) {
                var a = o[102]
                  , i = e[103];
                this[n[76]] = r;
                for (var u = t[52], c = r[a + g + i]; u < c; u++)
                    this[u] = t[52]
            }
            return l[e[104]][w + m + I + u] = function() {
                for (var a = e[105], u = this[a + y], c = [], s = -e[0], v = o[2], f = u[r[56]]; v < f; v++)
                    for (var l = this[v], p = u[v], d = s += p; c[d] = l & parseInt(t[77], n[78]),
                    --p != r[52]; )
                        --d,
                        l >>= parseInt(n[79], i[106]);
                return c
            }
            ,
            l[v(t[80], t[81], b)][ot(i[107])] = function(n) {
                for (var r = e[8], a = this[ot(e[108], e[109])], o = t[52], u = e[2], s = a[c + r + f]; u < s; u++) {
                    var v = a[u]
                      , l = i[2];
                    do {
                        l = (l << t[82]) + n[o++]
                    } while (--v > t[52]);
                    this[u] = l >>> i[2]
                }
            }
            ,
            l
        }(), zn;
        !function(n) {
            var t = s[13]
              , o = c[53]
              , i = r[83]
              , f = r[84]
              , l = s[110]
              , d = r[85]
              , h = r[86];
            function g(n, a, o, i, u) {
                for (var c = s[13], v = r[87], f = n[s[111]]; a < f; )
                    o[i++] = n[a++] ^ u & parseInt(c + v + t + _, r[88]),
                    u = ~(u * parseInt(e[89], e[82]))
            }
            function w(n) {
                for (var t = c[112], i = r[52], v = n[s[111]], f = []; i < v; ) {
                    var l = n[i++] << parseInt(C + t, c[113]) | n[i++] << e[82] | n[i++];
                    f.push(m.charAt(l >> parseInt(e[90], e[82])), m.charAt(l >> parseInt(s[114], e[78]) & parseInt(a[91], r[88])), m.charAt(l >> u[59] & parseInt(E + o, a[78])), m.charAt(l & parseInt(a[92], u[113])))
                }
                return f.join(e[0])
            }
            for (var m = at(u[115], s[116]), I = {}, y = u[2]; y < parseInt(i + A, e[93]); y++)
                I[m.charAt(y)] = y;
            function O(n) {
                var t, r, e;
                t = r = e = s;
                var o, i, u;
                o = i = u = a;
                for (var c = ot(i[94]), l = e[2], p = n[o[56]], d = []; l < p; ) {
                    var h = I[n.charAt(l++)] << parseInt(at(t[117]), u[82]) | I[n.charAt(l++)] << parseInt(v(t[118], u[95], e[119]), o[88]) | I[n.charAt(l++)] << t[59] | I[n.charAt(l++)];
                    d.push(h >> parseInt(e[120], t[106]), h >> parseInt(t[121], r[122]) & parseInt(f + b + c, t[106]), h & parseInt(o[96], u[88]))
                }
                return d
            }
            function D(n) {
                var t = O(n);
                if (rn,
                p,
                t[r[52]] != h)
                    return error = T + B + l,
                    void 0;
                var a = t[c[0]]
                  , o = [];
                return g(t, +parseInt(e[79], c[122]), o, +u[2], a),
                x(o) == a ? o : void 0
            }
            function x(n) {
                var t = o;
                t = Vn;
                for (var e = c[2], i = a[52], u = n[c[111]]; i < u; i++)
                    e = (e << s[123]) - e + n[i];
                return e & parseInt(s[124], r[88])
            }
            function N(n) {
                var t = et
                  , r = x(n)
                  , e = [h, r];
                return g(n, +a[52], e, +a[88], r),
                t = P,
                w(e)
            }
            n[e[97]] = w,
            n[R + k + S] = O,
            n[u[125]] = N,
            n[d + P + M] = D
        }(zn || (zn = {}));
        var Jn;
        !function(n) {
            var t = Fn
              , o = at(c[126], a[98])
              , i = r[99]
              , f = v(U, u[127])
              , l = s[128]
              , p = ot(a[100])
              , d = r[5]
              , h = r[101]
              , g = ot(u[129])
              , w = s[130]
              , m = r[102]
              , C = a[103]
              , E = e[104];
            function A(n) {
                for (var t = (Tn,
                I,
                []), e = r[52]; e < n[c[111]]; e++)
                    t.push(n.charCodeAt(e));
                return t
            }
            function b() {
                var n = new e[105];
                try {
                    return time = s[52].now(),
                    time / parseInt(c[131], a[88]) >>> c[2]
                } catch (t) {
                    return time = n.getTime(),
                    time / parseInt(s[121], s[84]) >>> r[52]
                }
            }
            function T(n) {
                var t = u[8]
                  , o = {}
                  , i = function(n, o) {
                    var i = c[102], f, l, p, d;
                    for (o = o.replace(s[132], u[1]),
                    o = o.substring(u[0], o[e[56]] - c[0]),
                    f = o.split(c[133]),
                    p = c[2]; p < f[i + t + O]; p++)
                        if (l = f[p].split(v(r[106], c[134])),
                        l && !(l[r[56]] < s[122])) {
                            for (d = r[88]; d < l[r[56]]; d++)
                                l[r[54]] = l[r[54]] + r[107] + l[d];
                            l[s[2]] = new r[47](c[135]).test(l[e[52]]) ? l[a[52]].substring(u[0], l[e[52]][D + x] - c[0]) : l[a[52]],
                            l[r[54]] = new a[47](c[135]).test(l[r[54]]) ? l[e[54]].substring(s[0], l[a[54]][a[56]] - u[0]) : l[s[0]],
                            n[l[c[2]]] = l[e[54]]
                        }
                    return n
                };
                return new r[47](e[108]).test(n) && (o = i(o, n)),
                o
            }
            function B(n) {
                var t, e, a;
                t = e = a = c;
                var u, s, v;
                if (u = s = v = r,
                typeof n === ot(s[109], sn) && n[Wn(y, a[136], s[110])])
                    try {
                        switch (parseInt(n[e[137]])) {
                        case parseInt(a[131], t[122]):
                            break;
                        case parseInt(v[111], s[78]):
                            top[e[138]][v[112]] = n[t[139]];
                            break;
                        case parseInt(u[113], e[122]):
                            top[o + i + N][e[140]] = n[s[114]];
                            break;
                        default:
                            break
                        }
                    } catch (f) {}
            }
            function R(n, t, r) {
                var e, a, o;
                e = a = o = u,
                q ? n.addEventListener(t, r) : n.attachEvent(a[25] + t, r)
            }
            function k() {
                return Math.random() * parseInt(u[141], r[78]) >>> r[52]
            }
            function S(n, t) {
                var o = en
                  , i = new r[47](e[115],a[116]);
                o = T;
                var s = new u[27](v(p, r[117], m));
                if (n) {
                    var f = n.match(i);
                    if (f) {
                        var l = f[u[0]];
                        return t && s.test(l) && (l = l.split(r[118]).pop().split(r[107])[c[2]]),
                        l
                    }
                }
            }
            function P(n) {
                var t = mn
                  , o = c[142]
                  , i = r[119]
                  , v = e[120]
                  , I = a[121];
                if (!(n > e[122])) {
                    n = n || a[52];
                    var y = parseInt(u[143], e[78])
                      , _ = a[51].createElement(u[144]);
                    t = Q,
                    _[c[145]] = location[r[123]] + a[124] + parseInt((new r[105]).getTime() / y) + (f + o + l),
                    _[e[125]] = function() {
                        Vn = u[0],
                        setTimeout(function() {
                            P(++n)
                        }, n * parseInt(e[126], u[84]))
                    }
                    ,
                    _[p + L + d] = _[s[146]] = function() {
                        var n, t, r;
                        n = t = r = a;
                        var e, o, u;
                        e = o = u = c;
                        var s = e[147];
                        this[t[127]] && this[i + W] !== o[148] && this[u[149]] !== o[150] && this[s + F + h] !== u[151] || (Vn = n[52],
                        _[e[152]] = _[g + w + v] = n[128])
                    }
                    ,
                    c[66][m + I].appendChild(_)
                }
            }
            function M(n) {
                var t, e, a;
                t = e = a = r;
                var o, i, u;
                return o = i = u = s,
                new u[27](t[129]).test(n)
            }
            function X() {
                var n = new s[52];
                return typeof TOKEN_SERVER_TIME == s[153] ? r[52] : (time = parseInt(TOKEN_SERVER_TIME),
                time)
            }
            function G(n) {
                var t, e, a;
                t = e = a = s;
                var o, i, u;
                o = i = u = r;
                for (var c = u[52], v = a[2], f = n[o[56]]; v < f; v++)
                    c = (c << a[123]) - c + n.charCodeAt(v),
                    c >>>= o[52];
                return c
            }
            function K(n) {
                var t = new s[27](e[130],s[80]);
                if (n) {
                    return n.match(t)
                }
            }
            function Z(n) {
                var t = new u[27](c[154]);
                if (M(n))
                    return n;
                var o = t.test(n) ? -a[86] : -parseInt(r[79], e[88]);
                return (tn,
                _,
                n.split(s[155])).slice(o).join(a[131])
            }
            n[Y + C + j] = T,
            t = En,
            n[c[156]] = P,
            n[ot(u[157])] = B,
            n[r[132]] = A,
            n[c[158]] = G,
            n[c[159]] = k,
            n[r[133]] = M,
            n[s[160]] = Z,
            n[E + H] = S,
            n[$ + U] = K,
            n[s[161]] = z,
            n[s[162]] = b,
            n[r[134]] = X;
            var q = !!a[65][a[135]];
            function z(n) {
                for (var t = v(O, u[163]), a = e[136], o = s[2], i = n[V + t + a] - s[0]; i >= r[52]; i--)
                    o = o << r[54] | +n[i];
                return o
            }
            n[u[164]] = R
        }(Jn || (Jn = {}));
        var nt;
        !function(n) {
            var t = u[165]
              , o = a[137]
              , i = at(s[166], s[167])
              , v = u[168]
              , f = a[138]
              , l = c[169]
              , p = ot(s[170], B)
              , d = a[52]
              , h = r[52]
              , g = c[2]
              , w = c[2]
              , m = c[2]
              , I = s[2]
              , y = s[67]
              , _ = t + X in s[66].createElement(s[171]) ? o + G + i : s[172]in c[66] ? u[173] : v + K + f + Q;
            Jn.eventBind(s[66], _, S),
            Jn.eventBind(a[51], r[139], T),
            Jn.eventBind(u[66], Wn(e[140], e[141], s[174]), T),
            Jn.eventBind(c[66], l + Z + q, M),
            Jn.eventBind(u[66], c[175], b);
            function C() {
                return w
            }
            function E() {
                return d
            }
            function b(n) {
                w++
            }
            function T(n) {
                d++
            }
            function R() {
                return h
            }
            function k() {
                return g
            }
            function S(n) {
                h++
            }
            function P() {
                return {
                    x: m,
                    y: I,
                    trusted: y
                }
            }
            function M(n) {
                var t, r, e;
                t = r = e = a;
                var o, i, u;
                o = i = u = c;
                var s = (S,
                A,
                u[36]);
                g++,
                y = void 0 == n[s + z] || n[J + nn],
                m = n[ot(r[142], o[84])],
                I = n[i[176]]
            }
            n[e[143]] = E,
            n[ot(e[144])] = R,
            n[e[145]] = k,
            n[u[177]] = C,
            n[tn + p + rn] = P
        }(nt || (nt = {}));
        var tt;
        !function(n) {
            var t = e[146]
              , f = c[4]
              , l = c[178]
              , p = u[179]
              , h = r[147]
              , g = r[148]
              , m = e[149]
              , I = s[102]
              , y = v(rn, u[180], zn)
              , _ = at(r[150], Y)
              , C = a[151]
              , E = u[181]
              , A = c[182]
              , b = e[152]
              , B = u[183]
              , R = s[184]
              , k = a[64];
            BROWSER_LIST = {
                _1: function() {
                    return c[185]in r[65]
                },
                _2: function() {
                    return a[153]in r[65]
                },
                _3: function() {
                    return e[154]in u[83]
                },
                _4: function() {
                    var n = J
                      , r = u[186]
                      , o = s[187];
                    return n = et,
                    e[155]in e[65] && !(r + o + t in a[51].getElementsByTagName(en + f)[s[2]])
                },
                _5: function() {
                    return e[155]in s[83] && !(e[156]in c[83])
                },
                _6: function() {
                    var n, t, r;
                    n = t = r = c;
                    var e, o, u;
                    return e = o = u = a,
                    e[155]in t[83] && !i
                },
                _7: function() {
                    var n, t, r;
                    n = t = r = a;
                    var e, o, i;
                    return e = o = i = u,
                    o[188]in o[83] && !o[83][r[157]]
                },
                _8: function() {
                    return a[155]in e[65] && !e[65][e[158]]
                },
                _9: function() {
                    return u[188]in s[83] && r[65][e[158]]
                },
                _10: function() {
                    var n, t, r;
                    n = t = r = a;
                    var e, o, i;
                    e = o = i = c;
                    var u = o[189];
                    return n[159] === navigator[an + u + on]
                },
                _11: function() {
                    return ot(u[190]) === navigator[r[160]]
                },
                _12: function() {
                    var n, t, r;
                    return n = t = r = s,
                    at(t[191])in r[83]
                },
                _13: function() {
                    var n, t, r;
                    n = t = r = s;
                    var a, o, i;
                    return a = o = i = e,
                    i[161]in t[83]
                },
                _14: function() {
                    return new u[27](a[162],r[116]).test(navigator.appVersion)
                },
                _15: function() {
                    return e[163]in navigator
                },
                _16: function() {
                    return new c[27](u[192],ot(u[193])).test(navigator.vendor)
                },
                _17: function() {
                    return u[194]in u[83]
                },
                _18: function() {
                    return u[195]in c[83] && new r[47](s[196],e[116]).test(o)
                },
                _19: function() {
                    var n, t, r;
                    n = t = r = s;
                    var a, i, u;
                    a = i = u = e;
                    var c = ot(i[164], i[165])
                      , v = u[166];
                    return l + c + v in t[83] && new n[27](u[167],t[80]).test(o)
                },
                _20: function() {
                    var n = u[197];
                    return r[161]in u[83] && new r[47](n + un).test(o)
                },
                _21: function() {
                    return ot(s[198], r[168])in r[65] && new c[27](c[199],r[116]).test(o)
                },
                _22: function() {
                    var n = x;
                    return n = S,
                    s[195]in e[65] && new c[27](a[169]).test(o)
                },
                _23: function() {
                    var n, t, r;
                    n = t = r = c;
                    var a, i, u;
                    return a = i = u = e,
                    u[161]in a[65] && new t[27](u[170]).test(o)
                },
                _24: function() {
                    return s[195]in r[65] && s[200]in e[65]
                },
                _25: function() {
                    var n = w;
                    return n = Q,
                    cn + sn in u[83]
                }
            };
            function P() {
                var n = v(q, e[171], r[172]);
                return plugin_num = a[52],
                navigator[u[201]] && (plugin_num = navigator[p + h + n][c[111]]),
                plugin_num
            }
            function M() {
                for (var n in BROWSER_LIST)
                    if (BROWSER_LIST.hasOwnProperty(n)) {
                        var t = BROWSER_LIST[n];
                        if (t())
                            return +n.substr(u[0])
                    }
                return s[2]
            }
            var O = navigator[s[201]];
            function D() {
                var n, t, r;
                n = t = r = s;
                var e, o, i;
                e = o = i = a;
                var u = e[173];
                return at(e[174]) == (navigator[g + vn + u + m] || navigator[n[202]])
            }
            function N(n) {
                if (!e[65][at(s[191])])
                    return !a[54];
                var t;
                try {
                    t = new a[65][a[155]](n)
                } catch (r) {
                    return !u[0]
                }
                return !!t
            }
            function L() {
                return a[65][a[175]][a[176]]
            }
            function W() {
                for (var n = [], t = r[52]; t < parseInt(a[79], a[93]); t++)
                    n[t] = tn[t]();
                return Jn.booleanToDecimal(n)
            }
            function F() {
                var t = (n,
                d,
                navigator[r[177]]);
                return t && t[I + fn + y] > a[52]
            }
            function j() {
                return z(new a[47](ln + pn + _,s[80])) || N(s[203])
            }
            function H() {
                return z(new a[47](Wn(s[204], r[178]),e[116]))
            }
            function $() {
                var n = Y
                  , t = at(a[179], a[180]);
                n = J;
                var r;
                try {
                    r = c[66].createElement(dn + t).getContext(c[205])
                } catch (e) {}
                return !!r
            }
            function U() {
                return -parseInt(r[181], u[113]) === (new c[52]).getTimezoneOffset()
            }
            function V() {
                var n, t, e;
                n = t = e = r;
                var a, o, i;
                a = o = i = u;
                for (var c = navigator[o[206]], s = o[2]; s < An[o[111]]; s++)
                    if (An[s].test(c))
                        return s + e[54];
                return i[2]
            }
            function X() {
                var n = (m,
                B,
                a[182]);
                return z(new r[47](C + n + hn))
            }
            function G() {
                return gn + E + wn + A in a[51]
            }
            function K() {
                var n, t, r;
                return n = t = r = c,
                r[86]
            }
            function Z() {
                return u[86]
            }
            function q() {
                return navigator.javaEnabled()
            }
            function z(n) {
                var t = T;
                t = h;
                for (var r = a[52]; r < O[u[111]]; r++) {
                    var e = O[r][s[207]];
                    if (n.test(e))
                        return !a[52]
                }
                return !c[0]
            }
            function J() {
                var n, t, r;
                return n = t = r = e,
                n[183] === r[51][t[184]]
            }
            function nn() {
                var n, t, r;
                return n = t = r = c,
                n[86]
            }
            var tn = [q, j, H, X, L, En, D, bn, G, U, $, F, J, nn, Z, K];
            function En() {
                var n = Nn;
                n = un;
                try {
                    return a[185]in s[83]
                } catch (t) {
                    return s[86]
                }
            }
            var An = [new a[47](u[208]), new a[47](e[186]), new e[47](a[187]), new s[27](mn + In), new e[47](r[188]), new u[27](e[189]), new s[27](s[209]), new u[27](u[210]), new a[47](b + yn), new e[47](B + R + k), new c[27](u[211])];
            function bn() {
                return new u[27](ot(r[190]),u[80]).test(navigator[s[212]] || navigator[_n + Cn])
            }
            n[s[213]] = V,
            n[c[214]] = M,
            n[e[191]] = P,
            n[e[192]] = W
        }(tt || (tt = {}));
        var rt;
        !function(n) {
            var t = e[87], o = a[8], i = e[8], f = s[215], l = r[52], p = s[0], d = parseInt(c[216], u[122]), h = e[86], g = u[217], w = u[123], m = e[165], I = parseInt(t + En, c[122]), y = parseInt(a[79], a[82]), _ = c[218], C = parseInt(a[193], e[82]), E = parseInt(o + i, r[78]), A = parseInt(u[219], s[122]), b = parseInt(f + An, s[106]), T = parseInt(r[194], s[106]), B = parseInt(ot(s[220], e[195]), r[82]), R = parseInt(e[196], u[122]), k = parseInt(e[197], a[78]), S;
            function P() {
                var n = s[0]
                  , t = r[88]
                  , e = parseInt(u[13], c[122])
                  , a = s[217];
                S = new qn([a, a, a, a, n, n, n, e, t, t, t, t, t, t, t, a, t, n]),
                S[p] = Jn.serverTimeNow(),
                M(),
                S[B] = Vn,
                S[k] = Un,
                S[R] = c[2],
                S[h] = Jn.strhash(navigator.userAgent),
                S[b] = tt.getBrowserFeature(),
                S[g] = tt.getPlatform(),
                S[w] = tt.getBrowserIndex(),
                S[m] = tt.getPluginNum()
            }
            function M() {
                var n = Qn.getCookie(Fn) || Zn.get(jn);
                if (n && n[s[111]] == parseInt(c[221], e[93])) {
                    var t = zn.decode(n);
                    if (t && (S.decodeBuffer(t),
                    S[l] != s[2]))
                        return
                }
                S[l] = Jn.random()
            }
            function O() {
                S[R]++,
                S[p] = Jn.serverTimeNow(),
                S[d] = Jn.timeNow(),
                S[B] = Vn,
                S[I] = nt.getMouseMove(),
                S[y] = nt.getMouseClick(),
                S[_] = nt.getMouseWhell(),
                S[C] = nt.getKeyDown(),
                S[E] = nt.getClickPos().x,
                S[A] = nt.getClickPos().y;
                var n = S.toBuffer();
                hexin_v = zn.encode(n);
                return hexin_v
            }
            n[e[57]] = P;
            function D() {
                return O()
            }
            n[v(an, a[198], r[199])] = D
        }(rt || (rt = {}));
        var et;
        function at() {
            var n, t, r;
            n = t = r = u;
            var a, o, i;
            a = o = i = e;
            var c = arguments[o[52]];
            if (!c)
                return t[1];
            for (var s = o[0], v = o[1], f = a[52]; f < c.length; f++) {
                var l = c.charCodeAt(f)
                  , p = l ^ v;
                v = v * f % n[222] + o[200],
                s += i[2].fromCharCode(p)
            }
            return s
        }
        !function(n) {
            var t, r, e;
            t = r = e = a;
            var o, i, c;
            o = i = c = u;
            var s = c[223], f = t[201], l = i[224], p = o[225], d = t[202], h = i[92], g = e[203], w = o[226], m = c[110], I = c[223], y = !!r[65][r[135]], _, E, A, T, B, R;
            function k(n) {
                var r = o[227]
                  , e = t[204];
                return j(n) && Qn[r + e + s]
            }
            function S(n, t, e) {
                var a, i, u;
                a = i = u = o;
                var c, s, v;
                c = s = v = r;
                var f = b;
                if (f = En,
                Wn(v[205], s[206])in t)
                    return t.apply(n, e);
                switch (e[v[56]]) {
                case v[52]:
                    return t();
                case i[0]:
                    return t(e[c[52]]);
                case u[122]:
                    return t(e[c[52]], e[a[0]]);
                default:
                    return t(e[u[2]], e[v[88]], e[i[63]])
                }
            }
            function P() {
                var n, t, r;
                n = t = r = i;
                var a, o, u;
                a = o = u = e,
                U(o[65], n[188], function(r) {
                    return function(e) {
                        if (e && new t[27](f + l,v(Fn, n[228])).test(e))
                            try {
                                D()
                            } catch (o) {
                                return a[207]
                            }
                        return new r(e)
                    }
                })
            }
            function M() {
                var n = t[51].getElementsByTagName(c[229]);
                function a(a) {
                    if (!new i[27](at(o[230])).test(a.protocol))
                        return r[61];
                    var u = a[i[231]];
                    if (!u) {
                        var s = n[i[2]];
                        s && (u = s[t[208]])
                    }
                    if ((!u || new e[47](ot(c[232], $n),c[80]).test(u)) && (a[o[140]].split(i[233])[e[52]] == _ && a[at(i[234], c[235])]))
                        return i[86];
                    return e[44]
                }
                Jn.eventBind(t[51], r[209], function(n) {
                    var t = i[236];
                    n = n || event;
                    var r = n[bn + t + p] || n[Wn(o[5], c[237], o[238])];
                    do {
                        if (r[i[240]] == i[241]) {
                            a(r) && D();
                            break
                        }
                    } while (r = r[i[239]])
                }),
                Jn.eventBind(i[66], o[242], D),
                Ln || Jn.eventBind(o[83], e[210], D)
            }
            function O() {
                var n = ot(o[243])
                  , e = o[244];
                _ = location[c[140]].split(o[233])[i[2]],
                E = location[n + Tn + e],
                T = location[i[245]],
                B = location[ot(t[211])],
                A = Jn.getRootDomain(E),
                R = new o[27](i[246] + A.replace(new r[47](t[212],i[96]), ot(c[247], r[213])) + t[214],r[116]),
                M(),
                Y(),
                N(),
                $(),
                D()
            }
            function D() {
                var n = rt.update();
                return Qn.setCookie(Fn, n, o[248], A, t[215]),
                Zn.set(jn, n),
                n
            }
            function N() {
                var n = B;
                n = Un;
                var r = ot(c[249]);
                H(t[216], function(n) {
                    return function(t, a) {
                        var i, u, c;
                        i = u = c = e;
                        var s, v, f;
                        s = v = f = o,
                        f[22][i[217]][f[250]].call(t) === v[251] && (t = t[u[218]] || i[0]);
                        var l = D();
                        return a = a || {},
                        Qn[at(u[219], K)] ? X(t) ? k || (t = L(t)) : a[i[220]] ? a[v[252]][jn] = l : (a[s[252]] = new Headers,
                        a[u[220]].append(jn, l)) : (l = rt.update(),
                        a[f[252]] ? a[Bn + d][jn] = l : (a[h + r] = new Headers,
                        a[i[220]].append(jn, l))),
                        n.call(this, t, a)
                    }
                })
            }
            function L(n) {
                for (var a = rt.update(), u = Gn, s = c[2]; s < u[Rn + kn]; s++)
                    if (u[s].test(n))
                        return n;
                return n + (new t[47](v(r[82], r[221], t[222])).test(n) ? Wn(c[253], i[254], bn) : e[223]) + Yn + c[70] + o[255](a)
            }
            function W(n) {
                var t = cn
                  , a = i[16]
                  , u = e[43];
                t = C;
                var s;
                U(n, c[256], function(n) {
                    return function() {
                        var t, r, a;
                        t = r = a = i;
                        var o, u, c;
                        o = u = c = e;
                        try {
                            X(arguments[o[54]]) && !k(arguments[a[0]]) ? arguments[t[0]] = L(arguments[r[0]]) : s = D(),
                            n.apply(this, arguments),
                            X(arguments[r[0]]) || (Qn[u[53]] || (s = rt.update()),
                            this.setRequestHeader(jn, s))
                        } catch (v) {
                            return o[207]
                        }
                    }
                }),
                U(n, c[257], function(n) {
                    var t = w;
                    return t = p,
                    function() {
                        var t, e, i;
                        t = e = i = r;
                        var c, s, v;
                        c = s = v = o;
                        var f = c[258];
                        try {
                            if (parseInt(this.status) === parseInt(f + g + Sn, e[78])) {
                                for (var l = n.apply(this, arguments), p = new s[27](i[224],t[225]), d, h, w = {}; d = p.exec(l); )
                                    w[d[s[0]].toLowerCase()] = d[i[88]];
                                Jn.analysisRst(Jn.parse(w[$n.toLowerCase()]))
                            }
                        } catch (m) {
                            return Pn + a + u
                        }
                        return n.apply(this, arguments)
                    }
                })
            }
            function Y() {
                var n = i[83][Wn(x, c[259])];
                n && W(n.prototype),
                r[65][o[188]] && P()
            }
            function j(n) {
                var r = rn;
                r = p;
                var e = Jn.getHostFromUrl(n, t[44]);
                return e ? R.test(e) : t[44]
            }
            function H(n, t) {
                if (n in i[83]) {
                    c[83].hasOwnProperty(n) && U(i[83], n, t);
                    var r = e[65][c[260]];
                    if (r) {
                        var a = r[o[104]];
                        a.hasOwnProperty(n) && U(a, n, t)
                    }
                }
            }
            function $() {
                var n = at(c[261])
                  , e = c[262]
                  , a = r[226];
                function u(n) {
                    return function(t) {
                        try {
                            s(t)
                        } catch (r) {
                            return r
                        }
                        return S(this, n, arguments)
                    }
                }
                function s(r) {
                    var u = it
                      , c = i[50]
                      , s = at(o[263], i[264]);
                    if (r && r[c + s + Mn + On] == n + e + Dn) {
                        var v = r[t[227]];
                        u = F,
                        V(v) || (k(v) ? D() : r[a + xn + w] = L(r.src))
                    }
                }
                function v(n) {
                    y ? U(Element.prototype, n, u) : (U(Kn, n, u),
                    U(r[51].body, n, u))
                }
                t[65][Hn] = Jn[t[228]],
                v(at(r[229])),
                v(r[230])
            }
            function U(n, a, i) {
                var u = D
                  , s = c[265]
                  , v = ot(t[231]);
                if (!n)
                    return e[61];
                var f = n[a];
                if (u = S,
                !f)
                    return o[86];
                var l = i(f);
                return y || (l[c[266]] = f + t[0]),
                l[s + m + v + I] = f,
                n[a] = l,
                r[44]
            }
            function V(n) {
                var t = Xn
                  , e = o[83][r[232]];
                e && (t = t.concat(e));
                for (var a = i[2]; a < t[c[111]]; a++)
                    if (t[a].test(n))
                        return o[67];
                return o[86]
            }
            function X(n) {
                var t = Jn.getOriginFromUrl(n);
                return t ? !new r[47](e[233] + T).test(t[c[122]]) || !new o[27](B).test(t[r[54]]) : e[61]
            }
            n[t[57]] = O
        }(et || (et = {}));
        function ot() {
            var n, t, e;
            n = t = e = c;
            var a, o, i;
            a = o = i = r;
            var u = arguments[a[52]];
            if (!u)
                return o[0];
            for (var s = a[0], v = n[267], f = o[200], l = t[2]; l < u.length; l++) {
                var p = u.charCodeAt(l);
                f = (f + t[0]) % v.length,
                p ^= v.charCodeAt(f),
                s += i[2].fromCharCode(p)
            }
            return s
        }
        var it;
        !function(n) {
            var t = Wn(r[234], e[235]);
            function o() {
                try {
                    c()
                } catch (n) {
                    return n
                }
            }
            function i() {
                var n = parseInt(t + Nn, s[113]);
                setInterval(function() {
                    Jn.getServerTime()
                }, n)
            }
            function c() {
                Qn.Init(),
                Zn.Init(),
                rt.Init(),
                et.Init(),
                i()
            }
            u[83][v(r[236], e[237])] || (o(),
            u[83][a[238]] = a[44])
        }(it || (it = {}))
    }()
}(["", 9527, String, Boolean, "eh", "ad", "Bu", "ileds", "1", "\b", Array, "7", "base", "64De", "\u2543\u252b", "etatS", "pa", "e", "FromUrl", "getOrigi", "nFromUrl", "\u255b\u253e", "b?\x18q)", "ic", "k", "sted", "he", "wser", "oNo", "ckw", "ent", "hst", "^And", "RM", "systemL", 5, "\u255f\u0978\u095b\u09f5", "TR8", "!'", "gth", "er", "TP", 83, "r", !0, "v", "v-nixeh", RegExp, "thsi.cn", 'K\x19"]K^xVV', "KXxAPD?\x1b[Y", document, 0, "allow", 1, "; ", "length", "Init", "=", "; domain=", "checkcookie", !1, "eikooCled", "tnemucod", "d", window, "\u2553\u0972\u0959\u09e4\u09bd\u0938\u0980\u09c5\u09b1\u09d1\u09a7\u09dc\u09dd\u09d3\u09c2", "\u2556\u0979\u095e\u09d3\u09b5\u0935\u098f\u09c7\u099d\u09d2\u09b0", 23, "l$P$~", "frames", "ducument", "ydob", "documentElement", "del", "@[\\]^`{|}~]", "base_fileds", "255", 10, "10", 39, "\u2547\u2535\u255a\u252e\u2541\u2535\u254c\u253c\u2559", 8, "4", "3", "de", 3, "11", 2, "203", "22", "111111", "3f", 16, "\x0f", "\u2506\u2537\u2507\u2537", "11111111", "base64Encode", "v\x1d", "ati", "WY", "te", "bo", "rs", "getHost", Date, "{DF", ":", "^{.*}$", "WU<P[C", 52, "1001", "href", "1111101010", "redirect_url", "^\\s*(?:https?:)?\\/{2,}([^\\/\\?\\#\\\\]+)", "i", "\u256c\u252c\u2516\u254b", "@", "ready", "change", "dy", 7, "protocol", "//s.thsi.cn/js/chameleon/time.1", "onerror", "2000", "readyState", null, "^(\\d+\\.)+\\d+$", "^\\s*(?:(https?:))?\\/{2,}([^\\/\\?\\#\\\\]+)", ".", "strToBytes", "isIPAddr", "serverTimeNow", "addEventListener", "th", "wh", "Scro", "mousemove", 55, "evomhcuot", "[[?PVC\x0e", "getMouseMove", '_R"xWB%Po_3YT', "getMouseClick", "ght", "gin", "msD", "ack", "\u2556\u096b\u095f", "Nativ", "^A", "MozSettingsEvent", "safari", "ActiveXObject", "postMessage", "Uint8Array", "WeakMap", "Google Inc.", "vendor", "chrome", "python", "sgAppName", "JX", 6, "me", "LBBROWSER", "w4", "2345Explorer", "TheWorld", "\u2544", 40, "tTr", "\u2506", "navigator", "webdriver", "languages", "taborcA|FDP", "\u2541\u097c\u0949", 95, "1e0", "e Cli", "iso-8859-1", "defaultCharset", "localStorage", "^Win64", "^Linux armv|Android", "^iPhone", "^iPad", "B_{VV", "getPluginNum", "getBrowserFeature", "12", "16", "sE", "10000", "17", "\u2542\u2532\u2556\u2537\u2543\u2526", "\x1cx`R", 2333, "XMLH", "ers", "0", "lo", 57, "ylppa", "error", "target", "click", "unload", "HE9AWT9Y", "\\.", "c?", "$", "/", "fetch", "prototype", "url", "\u2556\u0971\u0956\u09fe\u09a7", "headers", "\u256b\u2554", 79, "?", "^(.*?):[ \\t]*([^\\r\\n]*)\\r?$", "gm", "s", "src", "analysisRst", "\u255e\u0973\u0949\u09f4\u09a2\u0929\u09ac\u09d4\u0992\u09d2\u09b0\u09d4", "appendChild", "Y", "jsonp_ignore", "^", 70, "421", "XH>a", "\u2574\u253c\u257d\u2530\u2575\u2539\u257c\u2533\u257d\u2522\u256e\u2521\u2560\u2524\u2561\u2525", "CHAMELEON_LOADED"], [1, "", 0, "he", "ad", 29, "\x180G\x1f", "?>=<;:\\\\/,+", "ng", "to", "ff", Number, Error, "11", "6", "er", "ro", "code", "co", "_?L", "ed", "@S\x15D*", Object, "len", "gth", "on", "lo", RegExp, "ySta", 13, "eel", "ee", "ouse", "ll", "\u2544\u2530\u2555\u2531", "FCm-", "isTru", "getC", "Pos", "ve", "or", "ae", "^", "On", "Sho", "can", "ont", "roid", "anguage", "\u2502", "ta", "tna", Date, "3", "am", "e", "n+", "f80", "\x1dD", 6, "\u255f\u253a\u2542\u252b\u2545\u2568\u251e", "KCABLLAC_NOELEMAHC", "X-Antispider-Message", 3, ".baidu.", Function, document, !0, "cookie", "; ", "=", 96, "\u255b\u253e\u2550\u2537\u2543\u252b", "\u250c\u252c\u255c\u253d\u2549\u2521\u251c", ";O", "; expires=", "getCookie", "Thu, 01 Jan 1970 00:00:00 GMT", "setCookie", "Z\x18|", "i", "\u255b\u2534\u2557\u2536\u255a\u2509\u257d\u2512\u2560\u2501\u2566\u2503", 52, window, 10, "Init", !1, "set", "v", "eliflmth", '<script>document.w=window<\/script><iframe src="/favicon.icon"></iframe>', "iS.p", "head", "#default#userData", "get", "[!\"#$%&'()*", "g", "^d", "$D", "\u2568\u2537\u2568\u254c\u256a", "]\\P", "___", "le", "th", "prototype", "base_f", 8, "\\R5Z\\R\x14@^Q3G", "ZV%PgQ?Y]S%", 67, "r", "length", "0", 16, "12", "\u2576\u095f\u0979\u09d5\u0995\u091b\u09a9\u09f9\u09bd\u09f7\u0989\u09fd\u09f5\u09f3\u09f9\u0a41\u0a4d\u098f\u0999\u0905\u0975\u09cb\u09a9\u09a9\u099d\u0927\u0933\u0913\u0a6b\u0999\u09a3\u0937\u098b\u09f5\u0933\u0a7b\u091b\u09b1\u0a63\u095f\u09fb\u094d\u0993\u0943\u092b\u0949\u09a3\u09e7\u09cb\u0925\u0993\u09ab\u09f0\u092c\u092c\u0942\u0950\u09c8\u0944\u09c6\u0990\u0944\u09cb\u098e", "i,", "\u2505\u092f", 12, 56, "20", "1000", 2, 5, "11111111", "encode", "\u255b\u0972\u0959", "\u2519", "s", "WY$PYS", "ystate", "1111101000", / /g, ",", "\u250d", '^".*"$', "edoc_sutats", "status_code", "location", "redirect_url", "href", "4294967295", "j", "1200000", "script", "src", "onreadystatechange", "read", "loaded", "readyState", "complete", "interactive", "onload", "undefined", "\\.com\\.cn$|\\.com\\.hk$", ".", "getServerTime", 'YY7YAD?FjD"', "strhash", "random", "getRootDomain", "booleanToDecimal", "timeNow", "\u2559\u253e", "eventBind", "onwh", "\u255b", 46, "DOMM", "cl", "T^5^", "div", "onmousewheel", "mousewheel", 51, "keydown", "clientY", "getKeyDown", "ch", "plu", "\u2543\u252b", "ouc", "art", "^i", "Po", "callPhantom", "max", "Hei", "ActiveXObject", "nd", "yG&Y]\x17\x15ZUG#A]Ez\x15qY5\x1b", "\u2576\u097e\u094e\u09f8\u09a6\u0938\u09b6\u09fe\u0996\u09d7\u09a7\u09d2\u09cc", "Maxthon", "Q", "opr", "chrome", "BIDUBrowser", "QQBro", "[_$ZUR", "UBrowser", "MSGesture", "plugins", "doNotTrack", "ShockwaveFlash.ShockwaveFlash", "]C|\x18", "webgl2", "platform", "name", "^Win32", "^MacIntel", "^Linux [ix]\\d+", "^BlackBerry", "language", "getPlatform", "getBrowserIndex", "1", "10", 4, 9, "1100", "\t\0", "3c", 256, "w", "TTP", "et", "c", "al", "\u255e", "base", "\u2569\u0975\u094e\u09e5\u09a0\u092e\u09d1\u09ed\u09ce", "target", "fh%PTQr", "#", "\u255f\u097c\u0949\u09f9", 97, "rg", "tnemelEcrs", "fn_Ws", "parentNode", "tagName", "A", "submit", "PX%", "me", "host", "\\.?", "d\x19", "Fri, 01 Feb 2050 00:00:00 GMT", "]E%", "toString", "[object Request]", "headers", 83, "&", encodeURIComponent, "open", "getAllResponseHeaders", "4", "tseuqeRpttHLMX", "Window", "\u2564\u095e", "RI", "\u2550\u0953", "(YaZ", "_", "_str", "V587"]);
function get_hexin_v(){
    return hexin_v;
}
console.log("结束:", hexin_v);
kp_html/kp/test.html
@@ -1,442 +1,10 @@
"C:\Program Files\Java\jdk1.8.0_181\bin\java.exe" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2018.2.5\lib\idea_rt.jar=51841:D:\Program Files\JetBrains\IntelliJ IDEA 2018.2.5\bin" -Dfile.encoding=UTF-8 -classpath "D:\workspace\fanli\fanli-server\fanli\target\classes;C:\Program Files\Java\jdk1.8.0_181\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\rt.jar;C:\Users\Administrator\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;D:\workspace\fanli\fanli-server\utils\target\classes;C:\Users\Administrator\.m2\repository\com\opencsv\opencsv\4.3.2\opencsv-4.3.2.jar;C:\Users\Administrator\.m2\repository\org\apache\commons\commons-text\1.3\commons-text-1.3.jar;C:\Users\Administrator\.m2\repository\org\apache\commons\commons-collections4\4.2\commons-collections4-4.2.jar;C:\Users\Administrator\.m2\repository\ch\ethz\ganymed\ganymed-ssh2\build210\ganymed-ssh2-build210.jar;C:\Users\Administrator\.m2\repository\com\alipay\sdk\alipay-easysdk\2.1.0\alipay-easysdk-2.1.0.jar;C:\Users\Administrator\.m2\repository\com\alipay\sdk\easysdk-kernel\1.0.4\easysdk-kernel-1.0.4.jar;C:\Users\Administrator\.m2\repository\com\aliyun\tea\1.0.7\tea-1.0.7.jar;C:\Users\Administrator\.m2\repository\com\qcloud\cmq-http-client\1.0.7\cmq-http-client-1.0.7.jar;C:\Users\Administrator\.m2\repository\com\squareup\okhttp3\okhttp\3.7.0\okhttp-3.7.0.jar;C:\Users\Administrator\.m2\repository\com\github\wechatpay-apiv3\wechatpay-apache-httpclient\0.2.1\wechatpay-apache-httpclient-0.2.1.jar;C:\Users\Administrator\.m2\repository\com\meizu\flyme\push-server-sdk\1.2.8.20190114_release\push-server-sdk-1.2.8.20190114_release.jar;D:\workspace\fanli\fanli-server\utils\libs\vpush-server-sdk-2.2.jar;D:\workspace\fanli\fanli-server\utils\libs\opush-server-sdk-1.0.6.jar;D:\workspace\fanli\fanli-server\utils\libs\MiPush_SDK_Server_Http2_1.0.11.jar;D:\workspace\fanli\fanli-server\utils\libs\okhttp-3.14.2.jar;D:\workspace\fanli\fanli-server\utils\libs\okio-1.17.2.jar;D:\workspace\fanli\fanli-server\facade-goods\target\classes;D:\workspace\fanli\fanli-server\facede-common\target\classes;C:\Users\Administrator\.m2\repository\com\ks\lib-common\0.0.1-SNAPSHOT\lib-common-0.0.1-SNAPSHOT.jar;C:\Users\Administrator\.m2\repository\com\dataoke\sdk\1.0.0\sdk-1.0.0.jar;D:\workspace\fanli\fanli-server\fanli\libs\aes-jre1.6.jar;D:\workspace\fanli\fanli-server\fanli\libs\taobao-sdk-java-auto_1533536267316-20180829.jar;D:\workspace\fanli\fanli-server\fanli\libs\javapns-jdk16-2.3.1.jar;D:\workspace\fanli\fanli-server\fanli\libs\MiPush_SDK_Server_2_2_18.jar;D:\workspace\fanli\fanli-server\fanli\libs\open-api-sdk-2.0.jar;D:\workspace\fanli\fanli-server\fanli\libs\PushJavaSDK.jar;D:\workspace\fanli\fanli-server\fanli\libs\HMS_SDK_2.6.0.301_ADT.jar;D:\workspace\fanli\fanli-server\fanli\libs\HMSAgent_2.6.0.302.jar;D:\workspace\fanli\fanli-server\fanli\libs\ueditor-1.1.2.jar;D:\workspace\fanli\fanli-server\fanli\libs\jd-cps-client-2.2.jar;D:\workspace\fanli\fanli-server\fanli\libs\opush-server-sdk-1.0.3.jar;D:\workspace\fanli\fanli-server\fanli\libs\vpush-server-sdk-2.0.jar;D:\workspace\fanli\fanli-server\fanli\libs\sun.misc.BASE64Decoder.jar;C:\Users\Administrator\.m2\repository\org\apache\dubbo\dubbo\2.7.5\dubbo-2.7.5.jar;C:\Users\Administrator\.m2\repository\com\alibaba\spring\spring-context-support\1.0.5\spring-context-support-1.0.5.jar;C:\Users\Administrator\.m2\repository\io\netty\netty-all\4.1.25.Final\netty-all-4.1.25.Final.jar;C:\Users\Administrator\.m2\repository\org\yaml\snakeyaml\1.20\snakeyaml-1.20.jar;C:\Users\Administrator\.m2\repository\org\apache\zookeeper\zookeeper\3.4.6\zookeeper-3.4.6.jar;C:\Users\Administrator\.m2\repository\jline\jline\0.9.94\jline-0.9.94.jar;C:\Users\Administrator\.m2\repository\io\netty\netty\3.7.0.Final\netty-3.7.0.Final.jar;C:\Users\Administrator\.m2\repository\org\apache\curator\curator-framework\2.13.0\curator-framework-2.13.0.jar;C:\Users\Administrator\.m2\repository\org\apache\curator\curator-client\2.13.0\curator-client-2.13.0.jar;C:\Users\Administrator\.m2\repository\org\apache\curator\curator-recipes\2.13.0\curator-recipes-2.13.0.jar;C:\Users\Administrator\.m2\repository\com\101tec\zkclient\0.10\zkclient-0.10.jar;C:\Users\Administrator\.m2\repository\org\javassist\javassist\3.21.0-GA\javassist-3.21.0-GA.jar;C:\Users\Administrator\.m2\repository\com\ks\facade-vip\0.2.1\facade-vip-0.2.1.jar;C:\Users\Administrator\.m2\repository\com\ks\facade-lijin\0.1.2\facade-lijin-0.1.2.jar;C:\Users\Administrator\.m2\repository\com\ks\facade-push\0.0.1\facade-push-0.0.1.jar;C:\Users\Administrator\.m2\repository\com\aliyun\aliyun-java-sdk-core\4.5.2\aliyun-java-sdk-core-4.5.2.jar;C:\Users\Administrator\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\Administrator\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\Administrator\.m2\repository\org\jacoco\org.jacoco.agent\0.8.5\org.jacoco.agent-0.8.5-runtime.jar;C:\Users\Administrator\.m2\repository\org\ini4j\ini4j\0.5.4\ini4j-0.5.4.jar;C:\Users\Administrator\.m2\repository\io\opentracing\opentracing-api\0.33.0\opentracing-api-0.33.0.jar;C:\Users\Administrator\.m2\repository\io\opentracing\opentracing-util\0.33.0\opentracing-util-0.33.0.jar;C:\Users\Administrator\.m2\repository\io\opentracing\opentracing-noop\0.33.0\opentracing-noop-0.33.0.jar;C:\Users\Administrator\.m2\repository\com\aliyun\aliyun-java-sdk-dypnsapi\1.1.3\aliyun-java-sdk-dypnsapi-1.1.3.jar;C:\Users\Administrator\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Administrator\.m2\repository\ch\qos\logback\logback-access\1.2.3\logback-access-1.2.3.jar;C:\Users\Administrator\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Administrator\.m2\repository\org\slf4j\log4j-over-slf4j\1.7.7\log4j-over-slf4j-1.7.7.jar;C:\Users\Administrator\.m2\repository\org\apache\kafka\kafka-clients\0.10.1.1\kafka-clients-0.10.1.1.jar;C:\Users\Administrator\.m2\repository\net\jpountz\lz4\lz4\1.3.0\lz4-1.3.0.jar;C:\Users\Administrator\.m2\repository\org\xerial\snappy\snappy-java\1.1.2.6\snappy-java-1.1.2.6.jar;C:\Users\Administrator\.m2\repository\org\apache\kafka\kafka_2.11\0.10.1.1\kafka_2.11-0.10.1.1.jar;C:\Users\Administrator\.m2\repository\net\sf\jopt-simple\jopt-simple\4.9\jopt-simple-4.9.jar;C:\Users\Administrator\.m2\repository\com\yammer\metrics\metrics-core\2.2.0\metrics-core-2.2.0.jar;C:\Users\Administrator\.m2\repository\org\scala-lang\scala-library\2.11.8\scala-library-2.11.8.jar;C:\Users\Administrator\.m2\repository\org\scala-lang\modules\scala-parser-combinators_2.11\1.0.4\scala-parser-combinators_2.11-1.0.4.jar;C:\Users\Administrator\.m2\repository\com\tencentcloudapi\cls\tencentcloud-cls-logback-appender\1.0.3\tencentcloud-cls-logback-appender-1.0.3.jar;C:\Users\Administrator\.m2\repository\joda-time\joda-time\2.9.9\joda-time-2.9.9.jar;C:\Users\Administrator\.m2\repository\com\tencentcloudapi\cls\tencentcloud-cls-sdk-java\1.0.5\tencentcloud-cls-sdk-java-1.0.5.jar;C:\Users\Administrator\.m2\repository\com\google\protobuf\protobuf-java\3.15.3\protobuf-java-3.15.3.jar;C:\Users\Administrator\.m2\repository\com\google\protobuf\protobuf-java-util\3.15.3\protobuf-java-util-3.15.3.jar;C:\Users\Administrator\.m2\repository\org\lz4\lz4-java\1.8.0\lz4-java-1.8.0.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.13.1\jackson-databind-2.13.1.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.13.1\jackson-annotations-2.13.1.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.13.1\jackson-core-2.13.1.jar;C:\Users\Administrator\.m2\repository\net\sf\ehcache\ehcache-core\2.6.11\ehcache-core-2.6.11.jar;C:\Users\Administrator\.m2\repository\net\sf\ehcache\ehcache-web\2.0.4\ehcache-web-2.0.4.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-context\4.3.14.RELEASE\spring-context-4.3.14.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-aop\4.3.14.RELEASE\spring-aop-4.3.14.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-beans\4.3.14.RELEASE\spring-beans-4.3.14.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-core\4.3.14.RELEASE\spring-core-4.3.14.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-expression\4.3.14.RELEASE\spring-expression-4.3.14.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-webmvc\4.3.14.RELEASE\spring-webmvc-4.3.14.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-web\4.3.14.RELEASE\spring-web-4.3.14.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-orm\4.3.14.RELEASE\spring-orm-4.3.14.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-jdbc\4.3.14.RELEASE\spring-jdbc-4.3.14.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-tx\4.3.14.RELEASE\spring-tx-4.3.14.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\quartz-scheduler\quartz\2.2.1\quartz-2.2.1.jar;C:\Users\Administrator\.m2\repository\c3p0\c3p0\0.9.1.1\c3p0-0.9.1.1.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-context-support\4.3.14.RELEASE\spring-context-support-4.3.14.RELEASE.jar;C:\Users\Administrator\.m2\repository\aspectj\aspectjrt\1.5.3\aspectjrt-1.5.3.jar;C:\Users\Administrator\.m2\repository\org\aspectj\aspectjweaver\1.5.4\aspectjweaver-1.5.4.jar;C:\Users\Administrator\.m2\repository\cglib\cglib-nodep\3.2.4\cglib-nodep-3.2.4.jar;C:\Users\Administrator\.m2\repository\org\freemarker\freemarker\2.3.23\freemarker-2.3.23.jar;C:\Users\Administrator\.m2\repository\cglib\cglib\2.2.2\cglib-2.2.2.jar;C:\Users\Administrator\.m2\repository\asm\asm\3.3.1\asm-3.3.1.jar;C:\Users\Administrator\.m2\repository\mysql\mysql-connector-java\5.1.21\mysql-connector-java-5.1.21.jar;C:\Users\Administrator\.m2\repository\jstl\jstl\1.2\jstl-1.2.jar;C:\Users\Administrator\.m2\repository\org\apache\commons\commons-dbcp2\2.0\commons-dbcp2-2.0.jar;C:\Users\Administrator\.m2\repository\org\apache\commons\commons-pool2\2.2\commons-pool2-2.2.jar;C:\Users\Administrator\.m2\repository\dom4j\dom4j\1.6.1\dom4j-1.6.1.jar;C:\Users\Administrator\.m2\repository\xml-apis\xml-apis\1.0.b2\xml-apis-1.0.b2.jar;C:\Users\Administrator\.m2\repository\commons-collections\commons-collections\3.1\commons-collections-3.1.jar;C:\Users\Administrator\.m2\repository\commons-dbcp\commons-dbcp\1.4\commons-dbcp-1.4.jar;C:\Users\Administrator\.m2\repository\commons-pool\commons-pool\1.4\commons-pool-1.4.jar;C:\Users\Administrator\.m2\repository\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;C:\Users\Administrator\.m2\repository\javax\transaction\jta\1.1\jta-1.1.jar;C:\Users\Administrator\.m2\repository\org\slf4j\slf4j-api\1.6.1\slf4j-api-1.6.1.jar;C:\Users\Administrator\.m2\repository\org\jboss\logging\jboss-logging\3.1.3.GA\jboss-logging-3.1.3.GA.jar;C:\Users\Administrator\.m2\repository\org\jboss\spec\javax\annotation\jboss-annotations-api_1.2_spec\1.0.0.Final\jboss-annotations-api_1.2_spec-1.0.0.Final.jar;C:\Users\Administrator\.m2\repository\net\sf\json-lib\json-lib\2.4\json-lib-2.4-jdk15.jar;C:\Users\Administrator\.m2\repository\commons-beanutils\commons-beanutils\1.8.0\commons-beanutils-1.8.0.jar;C:\Users\Administrator\.m2\repository\commons-lang\commons-lang\2.5\commons-lang-2.5.jar;C:\Users\Administrator\.m2\repository\net\sf\ezmorph\ezmorph\1.0.6\ezmorph-1.0.6.jar;C:\Users\Administrator\.m2\repository\org\jsoup\jsoup\1.9.2\jsoup-1.9.2.jar;C:\Users\Administrator\.m2\repository\com\google\code\gson\gson\2.7\gson-2.7.jar;C:\Users\Administrator\.m2\repository\commons-httpclient\commons-httpclient\3.1\commons-httpclient-3.1.jar;C:\Users\Administrator\.m2\repository\org\apache\httpcomponents\httpclient\4.4.1\httpclient-4.4.1.jar;C:\Users\Administrator\.m2\repository\org\apache\httpcomponents\httpcore\4.4.1\httpcore-4.4.1.jar;C:\Users\Administrator\.m2\repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;C:\Users\Administrator\.m2\repository\javax\mail\mail\1.4.7\mail-1.4.7.jar;C:\Users\Administrator\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Users\Administrator\.m2\repository\com\google\zxing\core\3.3.0\core-3.3.0.jar;C:\Users\Administrator\.m2\repository\com\google\zxing\javase\3.3.0\javase-3.3.0.jar;C:\Users\Administrator\.m2\repository\com\beust\jcommander\1.48\jcommander-1.48.jar;C:\Users\Administrator\.m2\repository\net\sourceforge\jexcelapi\jxl\2.6.12\jxl-2.6.12.jar;C:\Users\Administrator\.m2\repository\com\alibaba\druid\1.1.10\druid-1.1.10.jar;C:\Users\Administrator\.m2\repository\org\apache\poi\poi-ooxml\3.9\poi-ooxml-3.9.jar;C:\Users\Administrator\.m2\repository\org\apache\poi\poi\3.9\poi-3.9.jar;C:\Users\Administrator\.m2\repository\org\apache\poi\poi-ooxml-schemas\3.9\poi-ooxml-schemas-3.9.jar;C:\Users\Administrator\.m2\repository\org\apache\xmlbeans\xmlbeans\2.3.0\xmlbeans-2.3.0.jar;C:\Users\Administrator\.m2\repository\stax\stax-api\1.0.1\stax-api-1.0.1.jar;C:\Users\Administrator\.m2\repository\org\mybatis\mybatis\3.4.1\mybatis-3.4.1.jar;C:\Users\Administrator\.m2\repository\org\mybatis\mybatis-spring\1.3.0\mybatis-spring-1.3.0.jar;C:\Users\Administrator\.m2\repository\com\github\jai-imageio\jai-imageio-core\1.3.0\jai-imageio-core-1.3.0.jar;C:\Users\Administrator\.m2\repository\com\qcloud\cos_api\5.2.4\cos_api-5.2.4.jar;C:\Users\Administrator\.m2\repository\commons-codec\commons-codec\1.10\commons-codec-1.10.jar;C:\Users\Administrator\.m2\repository\commons-fileupload\commons-fileupload\1.3.1\commons-fileupload-1.3.1.jar;C:\Users\Administrator\.m2\repository\commons-io\commons-io\2.4\commons-io-2.4.jar;C:\Users\Administrator\.m2\repository\redis\clients\jedis\3.1.0\jedis-3.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\data\spring-data-redis\1.0.2.RELEASE\spring-data-redis-1.0.2.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\slf4j\jcl-over-slf4j\1.6.6\jcl-over-slf4j-1.6.6.jar;C:\Users\Administrator\.m2\repository\com\alibaba\fastjson\1.2.47\fastjson-1.2.47.jar;C:\Users\Administrator\.m2\repository\com\github\qcloudsms\qcloudsms\1.0.2\qcloudsms-1.0.2.jar;C:\Users\Administrator\.m2\repository\org\json\json\20170516\json-20170516.jar;C:\Users\Administrator\.m2\repository\org\apache\httpcomponents\httpmime\4.5.3\httpmime-4.5.3.jar;C:\Users\Administrator\.m2\repository\org\springframework\data\spring-data-mongodb\1.10.10.RELEASE\spring-data-mongodb-1.10.10.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\data\spring-data-commons\1.13.10.RELEASE\spring-data-commons-1.13.10.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\mongodb\mongo-java-driver\2.14.3\mongo-java-driver-2.14.3.jar;C:\Users\Administrator\.m2\repository\com\googlecode\json-simple\json-simple\1.1.1\json-simple-1.1.1.jar;C:\Users\Administrator\.m2\repository\org\jdom\jdom\1.1\jdom-1.1.jar;C:\Users\Administrator\.m2\repository\com\aliyun\aliyun-java-sdk-dysmsapi\1.1.0\aliyun-java-sdk-dysmsapi-1.1.0.jar;C:\Users\Administrator\.m2\repository\com\google\guava\guava\27.0.1-jre\guava-27.0.1-jre.jar;C:\Users\Administrator\.m2\repository\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;C:\Users\Administrator\.m2\repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;C:\Users\Administrator\.m2\repository\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;C:\Users\Administrator\.m2\repository\org\checkerframework\checker-qual\2.5.2\checker-qual-2.5.2.jar;C:\Users\Administrator\.m2\repository\com\google\errorprone\error_prone_annotations\2.2.0\error_prone_annotations-2.2.0.jar;C:\Users\Administrator\.m2\repository\com\google\j2objc\j2objc-annotations\1.1\j2objc-annotations-1.1.jar;C:\Users\Administrator\.m2\repository\org\codehaus\mojo\animal-sniffer-annotations\1.17\animal-sniffer-annotations-1.17.jar;C:\Users\Administrator\.m2\repository\net\coobird\thumbnailator\0.4.8\thumbnailator-0.4.8.jar;C:\Users\Administrator\.m2\repository\com\aliyun\openservices\ons-client\1.8.0.Final\ons-client-1.8.0.Final.jar;C:\Users\Administrator\.m2\repository\com\xuxueli\xxl-job-core\2.1.2\xxl-job-core-2.1.2.jar;C:\Users\Administrator\.m2\repository\com\xuxueli\xxl-rpc-core\1.5.0\xxl-rpc-core-1.5.0.jar;C:\Users\Administrator\.m2\repository\com\caucho\hessian\4.0.63\hessian-4.0.63.jar;C:\Users\Administrator\.m2\repository\com\xuxueli\xxl-registry-client\1.1.0\xxl-registry-client-1.1.0.jar;C:\Users\Administrator\.m2\repository\org\codehaus\groovy\groovy\2.5.8\groovy-2.5.8.jar;C:\Users\Administrator\.m2\repository\org\elasticsearch\client\elasticsearch-rest-high-level-client\7.5.1\elasticsearch-rest-high-level-client-7.5.1.jar;C:\Users\Administrator\.m2\repository\org\elasticsearch\elasticsearch\7.5.1\elasticsearch-7.5.1.jar;C:\Users\Administrator\.m2\repository\org\elasticsearch\elasticsearch-core\7.5.1\elasticsearch-core-7.5.1.jar;C:\Users\Administrator\.m2\repository\org\elasticsearch\elasticsearch-secure-sm\7.5.1\elasticsearch-secure-sm-7.5.1.jar;C:\Users\Administrator\.m2\repository\org\elasticsearch\elasticsearch-x-content\7.5.1\elasticsearch-x-content-7.5.1.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-smile\2.8.11\jackson-dataformat-smile-2.8.11.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.8.11\jackson-dataformat-yaml-2.8.11.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.8.11\jackson-dataformat-cbor-2.8.11.jar;C:\Users\Administrator\.m2\repository\org\elasticsearch\elasticsearch-geo\7.5.1\elasticsearch-geo-7.5.1.jar;C:\Users\Administrator\.m2\repository\org\apache\lucene\lucene-core\8.3.0\lucene-core-8.3.0.jar;C:\Users\Administrator\.m2\repository\org\apache\lucene\lucene-analyzers-common\8.3.0\lucene-analyzers-common-8.3.0.jar;C:\Users\Administrator\.m2\repository\org\apache\lucene\lucene-backward-codecs\8.3.0\lucene-backward-codecs-8.3.0.jar;C:\Users\Administrator\.m2\repository\org\apache\lucene\lucene-grouping\8.3.0\lucene-grouping-8.3.0.jar;C:\Users\Administrator\.m2\repository\org\apache\lucene\lucene-highlighter\8.3.0\lucene-highlighter-8.3.0.jar;C:\Users\Administrator\.m2\repository\org\apache\lucene\lucene-join\8.3.0\lucene-join-8.3.0.jar;C:\Users\Administrator\.m2\repository\org\apache\lucene\lucene-memory\8.3.0\lucene-memory-8.3.0.jar;C:\Users\Administrator\.m2\repository\org\apache\lucene\lucene-misc\8.3.0\lucene-misc-8.3.0.jar;C:\Users\Administrator\.m2\repository\org\apache\lucene\lucene-queries\8.3.0\lucene-queries-8.3.0.jar;C:\Users\Administrator\.m2\repository\org\apache\lucene\lucene-queryparser\8.3.0\lucene-queryparser-8.3.0.jar;C:\Users\Administrator\.m2\repository\org\apache\lucene\lucene-sandbox\8.3.0\lucene-sandbox-8.3.0.jar;C:\Users\Administrator\.m2\repository\org\apache\lucene\lucene-spatial\8.3.0\lucene-spatial-8.3.0.jar;C:\Users\Administrator\.m2\repository\org\apache\lucene\lucene-spatial-extras\8.3.0\lucene-spatial-extras-8.3.0.jar;C:\Users\Administrator\.m2\repository\org\apache\lucene\lucene-spatial3d\8.3.0\lucene-spatial3d-8.3.0.jar;C:\Users\Administrator\.m2\repository\org\apache\lucene\lucene-suggest\8.3.0\lucene-suggest-8.3.0.jar;C:\Users\Administrator\.m2\repository\org\elasticsearch\elasticsearch-cli\7.5.1\elasticsearch-cli-7.5.1.jar;C:\Users\Administrator\.m2\repository\com\carrotsearch\hppc\0.8.1\hppc-0.8.1.jar;C:\Users\Administrator\.m2\repository\com\tdunning\t-digest\3.2\t-digest-3.2.jar;C:\Users\Administrator\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.9\HdrHistogram-2.1.9.jar;C:\Users\Administrator\.m2\repository\org\elasticsearch\jna\4.5.1\jna-4.5.1.jar;C:\Users\Administrator\.m2\repository\org\elasticsearch\client\elasticsearch-rest-client\7.5.1\elasticsearch-rest-client-7.5.1.jar;C:\Users\Administrator\.m2\repository\org\apache\httpcomponents\httpasyncclient\4.1.4\httpasyncclient-4.1.4.jar;C:\Users\Administrator\.m2\repository\org\apache\httpcomponents\httpcore-nio\4.4.12\httpcore-nio-4.4.12.jar;C:\Users\Administrator\.m2\repository\org\elasticsearch\plugin\mapper-extras-client\7.5.1\mapper-extras-client-7.5.1.jar;C:\Users\Administrator\.m2\repository\org\elasticsearch\plugin\parent-join-client\7.5.1\parent-join-client-7.5.1.jar;C:\Users\Administrator\.m2\repository\org\elasticsearch\plugin\aggs-matrix-stats-client\7.5.1\aggs-matrix-stats-client-7.5.1.jar;C:\Users\Administrator\.m2\repository\org\elasticsearch\plugin\rank-eval-client\7.5.1\rank-eval-client-7.5.1.jar;C:\Users\Administrator\.m2\repository\org\elasticsearch\plugin\lang-mustache-client\7.5.1\lang-mustache-client-7.5.1.jar;C:\Users\Administrator\.m2\repository\com\github\spullara\mustache\java\compiler\0.9.6\compiler-0.9.6.jar;C:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-api\2.11.2\log4j-api-2.11.2.jar;C:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-core\2.11.2\log4j-core-2.11.2.jar;C:\Users\Administrator\.m2\repository\com\alipay\sdk\alipay-sdk-java\4.9.71.ALL\alipay-sdk-java-4.9.71.ALL.jar;C:\Users\Administrator\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.62\bcprov-jdk15on-1.62.jar;C:\Users\Administrator\.m2\repository\org\apache\rocketmq\rocketmq-client\4.3.0\rocketmq-client-4.3.0.jar;C:\Users\Administrator\.m2\repository\org\apache\rocketmq\rocketmq-common\4.3.0\rocketmq-common-4.3.0.jar;C:\Users\Administrator\.m2\repository\org\apache\rocketmq\rocketmq-remoting\4.3.0\rocketmq-remoting-4.3.0.jar;C:\Users\Administrator\.m2\repository\org\apache\rocketmq\rocketmq-logging\4.3.0\rocketmq-logging-4.3.0.jar;C:\Users\Administrator\.m2\repository\io\netty\netty-tcnative-boringssl-static\1.1.33.Fork26\netty-tcnative-boringssl-static-1.1.33.Fork26.jar;C:\Users\Administrator\.m2\repository\org\apache\commons\commons-lang3\3.4\commons-lang3-3.4.jar;C:\Users\Administrator\.m2\repository\com\tencentcloudapi\tencentcloud-sdk-java\3.1.472\tencentcloud-sdk-java-3.1.472.jar;C:\Users\Administrator\.m2\repository\com\squareup\okio\okio\1.12.0\okio-1.12.0.jar;C:\Users\Administrator\.m2\repository\com\squareup\okhttp\okhttp\2.7.5\okhttp-2.7.5.jar;C:\Users\Administrator\.m2\repository\com\squareup\okhttp\logging-interceptor\2.7.5\logging-interceptor-2.7.5.jar" com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil
19:22:38,825 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
19:22:38,826 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
19:22:38,826 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/D:/workspace/fanli/fanli-server/fanli/target/classes/logback.xml]
19:22:38,983 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
19:22:38,997 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Will scan for changes in [file:/D:/workspace/fanli/fanli-server/fanli/target/classes/logback.xml]
19:22:38,997 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Setting ReconfigureOnChangeTask scanning period to 1 minutes
19:22:39,021 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
19:22:39,028 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
19:22:39,137 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
19:22:39,143 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [ERROR_FILE]
19:22:39,160 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@351962798 - Archive files will be limited to [20 MB] each.
19:22:39,164 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@351962798 - Will use zip compression
19:22:39,166 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@351962798 - Will use the pattern logs/error/error.%d{yyyy-MM-dd}.%i.log for the active file
19:22:39,170 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6e15fe2 - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/error/error.%d{yyyy-MM-dd}.%i.log.zip'.
19:22:39,170 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6e15fe2 - Roll-over at midnight.
19:22:39,174 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6e15fe2 - Setting initial period to Fri Mar 08 17:32:16 CST 2024
19:22:39,182 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[ERROR_FILE] - This appender no longer admits a layout as a sub-component, set an encoder instead.
19:22:39,182 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[ERROR_FILE] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
19:22:39,182 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[ERROR_FILE] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
19:22:39,189 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ERROR_FILE] - Active log file name: logs/error/error.log
19:22:39,189 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ERROR_FILE] - File property is set to [logs/error/error.log]
19:22:39,191 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
19:22:39,191 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [DEBUG_FILE]
19:22:39,192 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1760670079 - Archive files will be limited to [20 MB] each.
19:22:39,193 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1760670079 - Will use zip compression
19:22:39,193 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1760670079 - Will use the pattern logs/debug/debug.%d{yyyy-MM-dd}.%i.log for the active file
19:22:39,195 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@1722011b - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/debug/debug.%d{yyyy-MM-dd}.%i.log.zip'.
19:22:39,195 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@1722011b - Roll-over at midnight.
19:22:39,196 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@1722011b - Setting initial period to Fri Mar 08 17:32:16 CST 2024
19:22:39,197 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[DEBUG_FILE] - This appender no longer admits a layout as a sub-component, set an encoder instead.
19:22:39,197 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[DEBUG_FILE] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
19:22:39,197 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[DEBUG_FILE] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
19:22:39,198 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[DEBUG_FILE] - Active log file name: logs/debug/debug.log
19:22:39,198 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[DEBUG_FILE] - File property is set to [logs/debug/debug.log]
19:22:39,198 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
19:22:39,198 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [USER_INFO]
19:22:39,200 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1470966439 - Archive files will be limited to [20 MB] each.
19:22:39,200 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1470966439 - Will use zip compression
19:22:39,200 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1470966439 - Will use the pattern logs/user/user.%d{yyyy-MM-dd}.%i.log for the active file
19:22:39,202 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5b3f61ff - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/user/user.%d{yyyy-MM-dd}.%i.log.zip'.
19:22:39,202 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5b3f61ff - Roll-over at midnight.
19:22:39,203 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5b3f61ff - Setting initial period to Fri Mar 08 17:32:16 CST 2024
19:22:39,205 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[USER_INFO] - This appender no longer admits a layout as a sub-component, set an encoder instead.
19:22:39,205 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[USER_INFO] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
19:22:39,205 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[USER_INFO] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
19:22:39,205 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[USER_INFO] - Active log file name: logs/user/user.log
19:22:39,205 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[USER_INFO] - File property is set to [logs/user/user.log]
19:22:39,206 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
19:22:39,206 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [ORDER]
19:22:39,207 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1042307502 - Archive files will be limited to [20 MB] each.
19:22:39,207 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1042307502 - Will use zip compression
19:22:39,207 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1042307502 - Will use the pattern logs/order/order.%d{yyyy-MM-dd}.%i.log for the active file
19:22:39,207 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@398dada8 - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/order/order.%d{yyyy-MM-dd}.%i.log.zip'.
19:22:39,207 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@398dada8 - Roll-over at midnight.
19:22:39,208 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@398dada8 - Setting initial period to Fri Mar 08 17:32:16 CST 2024
19:22:39,209 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[ORDER] - This appender no longer admits a layout as a sub-component, set an encoder instead.
19:22:39,209 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[ORDER] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
19:22:39,209 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[ORDER] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
19:22:39,209 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ORDER] - Active log file name: logs/order/order.log
19:22:39,209 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ORDER] - File property is set to [logs/order/order.log]
19:22:39,209 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
19:22:39,209 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [JD_API_APPENDER]
19:22:39,210 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@130764844 - Archive files will be limited to [20 MB] each.
19:22:39,210 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@130764844 - Will use zip compression
19:22:39,211 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@130764844 - Will use the pattern logs/api/jdapi.%d{yyyy-MM-dd}.%i.log for the active file
19:22:39,212 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@275bf9b3 - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/api/jdapi.%d{yyyy-MM-dd}.%i.log.zip'.
19:22:39,212 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@275bf9b3 - Roll-over at midnight.
19:22:39,212 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@275bf9b3 - Setting initial period to Mon Mar 11 18:54:31 CST 2024
19:22:39,214 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[JD_API_APPENDER] - This appender no longer admits a layout as a sub-component, set an encoder instead.
19:22:39,214 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[JD_API_APPENDER] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
19:22:39,214 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[JD_API_APPENDER] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
19:22:39,214 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[JD_API_APPENDER] - Active log file name: logs/api/jdapi.log
19:22:39,214 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[JD_API_APPENDER] - File property is set to [logs/api/jdapi.log]
19:22:39,214 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
19:22:39,214 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [USER_ORDER]
19:22:39,215 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@462039519 - Archive files will be limited to [20 MB] each.
19:22:39,220 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@462039519 - Will use zip compression
19:22:39,220 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@462039519 - Will use the pattern logs/user_order/user_order.%d{yyyy-MM-dd}.%i.log for the active file
19:22:39,222 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@4fbe37eb - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/user_order/user_order.%d{yyyy-MM-dd}.%i.log.zip'.
19:22:39,222 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@4fbe37eb - Roll-over at midnight.
19:22:39,222 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@4fbe37eb - Setting initial period to Fri Mar 08 17:32:16 CST 2024
19:22:39,225 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[USER_ORDER] - This appender no longer admits a layout as a sub-component, set an encoder instead.
19:22:39,225 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[USER_ORDER] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
19:22:39,225 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[USER_ORDER] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
19:22:39,225 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[USER_ORDER] - Active log file name: logs/user_order/user_order.log
19:22:39,225 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[USER_ORDER] - File property is set to [logs/user_order/user_order.log]
19:22:39,226 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
19:22:39,226 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [TEST]
19:22:39,227 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@313082880 - Archive files will be limited to [20 MB] each.
19:22:39,227 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@313082880 - Will use zip compression
19:22:39,228 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@313082880 - Will use the pattern logs/test/test.%d{yyyy-MM-dd}.%i.log for the active file
19:22:39,229 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6a47b187 - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/test/test.%d{yyyy-MM-dd}.%i.log.zip'.
19:22:39,229 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6a47b187 - Roll-over at midnight.
19:22:39,230 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6a47b187 - Setting initial period to Fri Mar 08 17:32:16 CST 2024
19:22:39,231 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[TEST] - This appender no longer admits a layout as a sub-component, set an encoder instead.
19:22:39,231 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[TEST] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
19:22:39,231 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[TEST] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
19:22:39,231 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[TEST] - Active log file name: logs/test/test.log
19:22:39,231 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[TEST] - File property is set to [logs/test/test.log]
19:22:39,231 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
19:22:39,231 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [HTTP]
19:22:39,232 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@541698497 - Archive files will be limited to [20 MB] each.
19:22:39,232 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@541698497 - Will use zip compression
19:22:39,232 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@541698497 - Will use the pattern logs/http/http.%d{yyyy-MM-dd}.%i.log for the active file
19:22:39,233 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@1ef6d34c - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/http/http.%d{yyyy-MM-dd}.%i.log.zip'.
19:22:39,233 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@1ef6d34c - Roll-over at midnight.
19:22:39,234 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@1ef6d34c - Setting initial period to Fri Mar 08 17:32:16 CST 2024
19:22:39,235 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[HTTP] - This appender no longer admits a layout as a sub-component, set an encoder instead.
19:22:39,235 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[HTTP] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
19:22:39,235 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[HTTP] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
19:22:39,235 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[HTTP] - Active log file name: logs/http/http.log
19:22:39,235 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[HTTP] - File property is set to [logs/http/http.log]
19:22:39,235 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
19:22:39,235 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [TAOBAO_LINK]
19:22:39,236 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1176968662 - Archive files will be limited to [20 MB] each.
19:22:39,236 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1176968662 - Will use zip compression
19:22:39,236 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1176968662 - Will use the pattern logs/taobao_link/taobao_link.%d{yyyy-MM-dd}.%i.log for the active file
19:22:39,237 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@11bb571c - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/taobao_link/taobao_link.%d{yyyy-MM-dd}.%i.log.zip'.
19:22:39,237 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@11bb571c - Roll-over at midnight.
19:22:39,238 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@11bb571c - Setting initial period to Fri Mar 08 17:32:16 CST 2024
19:22:39,239 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[TAOBAO_LINK] - This appender no longer admits a layout as a sub-component, set an encoder instead.
19:22:39,239 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[TAOBAO_LINK] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
19:22:39,239 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[TAOBAO_LINK] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
19:22:39,239 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[TAOBAO_LINK] - Active log file name: logs/taobao_link/taobao_link.log
19:22:39,239 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[TAOBAO_LINK] - File property is set to [logs/taobao_link/taobao_link.log]
19:22:39,240 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
19:22:39,240 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [SHARE_GOODS]
19:22:39,241 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@2085745483 - Archive files will be limited to [20 MB] each.
19:22:39,242 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@2085745483 - Will use zip compression
19:22:39,242 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@2085745483 - Will use the pattern logs/share-goods/share-goods.%d{yyyy-MM-dd}.%i.log for the active file
19:22:39,243 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5495333e - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/share-goods/share-goods.%d{yyyy-MM-dd}.%i.log.zip'.
19:22:39,243 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5495333e - Roll-over at midnight.
19:22:39,243 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5495333e - Setting initial period to Fri Mar 08 17:32:16 CST 2024
19:22:39,244 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[SHARE_GOODS] - This appender no longer admits a layout as a sub-component, set an encoder instead.
19:22:39,244 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[SHARE_GOODS] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
19:22:39,244 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[SHARE_GOODS] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
19:22:39,245 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[SHARE_GOODS] - Active log file name: logs/share-goods/share-goods.log
19:22:39,245 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[SHARE_GOODS] - File property is set to [logs/share-goods/share-goods.log]
19:22:39,245 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
19:22:39,245 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [LOGIN]
19:22:39,246 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@706895319 - Archive files will be limited to [20 MB] each.
19:22:39,246 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@706895319 - Will use zip compression
19:22:39,246 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@706895319 - Will use the pattern logs/login/login.%d{yyyy-MM-dd}.%i.log for the active file
19:22:39,246 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@61eaec38 - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/login/login.%d{yyyy-MM-dd}.%i.log.zip'.
19:22:39,246 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@61eaec38 - Roll-over at midnight.
19:22:39,247 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@61eaec38 - Setting initial period to Fri Mar 08 17:32:16 CST 2024
19:22:39,248 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[LOGIN] - This appender no longer admits a layout as a sub-component, set an encoder instead.
19:22:39,248 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[LOGIN] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
19:22:39,248 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[LOGIN] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
19:22:39,248 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[LOGIN] - Active log file name: logs/login/login.log
19:22:39,273 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@125290e5 - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/mq/mq.%d{yyyy-MM-dd}.%i.log.zip'.
19:22:39,273 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@125290e5 - Roll-over at midnight.
19:22:39,273 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@125290e5 - Setting initial period to Fri Mar 08 17:32:16 CST 2024
19:22:39,275 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[MQ] - This appender no longer admits a layout as a sub-component, set an encoder instead.
19:22:39,275 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[MQ] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
19:22:39,275 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[MQ] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
19:22:39,275 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[MQ] - Active log file name: logs/mq/mq.log
19:22:39,275 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[MQ] - File property is set to [logs/mq/mq.log]
19:22:39,275 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
19:22:39,275 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [VIP_INFO]
19:22:39,277 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1872973138 - Archive files will be limited to [20 MB] each.
19:22:39,277 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1872973138 - Will use zip compression
19:22:39,277 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1872973138 - Will use the pattern logs/vip_info/vip_info.%d{yyyy-MM-dd}.%i.log for the active file
19:22:39,278 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@57576994 - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/vip_info/vip_info.%d{yyyy-MM-dd}.%i.log.zip'.
19:22:39,278 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@57576994 - Roll-over at midnight.
19:22:39,279 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@57576994 - Setting initial period to Fri Mar 08 17:32:16 CST 2024
19:22:39,280 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[VIP_INFO] - This appender no longer admits a layout as a sub-component, set an encoder instead.
19:22:39,280 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[VIP_INFO] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
19:22:39,280 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[VIP_INFO] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
19:22:39,280 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[VIP_INFO] - Active log file name: logs/vip_info/vip_info.log
19:22:39,280 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[VIP_INFO] - File property is set to [logs/vip_info/vip_info.log]
19:22:39,280 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
19:22:39,280 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [TEAM]
19:22:39,280 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1634387050 - Archive files will be limited to [20 MB] each.
19:22:39,281 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1634387050 - Will use zip compression
19:22:39,281 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1634387050 - Will use the pattern logs/team/team.%d{yyyy-MM-dd}.%i.log for the active file
19:22:39,281 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@67b9b51a - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/team/team.%d{yyyy-MM-dd}.%i.log.zip'.
19:22:39,281 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@67b9b51a - Roll-over at midnight.
19:22:39,282 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@67b9b51a - Setting initial period to Fri Mar 08 17:32:16 CST 2024
19:22:39,283 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[TEAM] - This appender no longer admits a layout as a sub-component, set an encoder instead.
19:22:39,283 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[TEAM] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
19:22:39,283 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[TEAM] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
19:22:39,284 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[TEAM] - Active log file name: logs/team/team.log
19:22:39,284 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[TEAM] - File property is set to [logs/team/team.log]
19:22:39,284 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
19:22:39,284 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [CLOUD]
19:22:39,285 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@302366050 - Archive files will be limited to [20 MB] each.
19:22:39,285 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@302366050 - Will use zip compression
19:22:39,285 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@302366050 - Will use the pattern logs/cloud/cloud.%d{yyyy-MM-dd}.%i.log for the active file
19:22:39,286 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@7ef27d7f - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/cloud/cloud.%d{yyyy-MM-dd}.%i.log.zip'.
19:22:39,286 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@7ef27d7f - Roll-over at midnight.
19:22:39,286 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@7ef27d7f - Setting initial period to Fri Mar 08 17:32:16 CST 2024
19:22:39,288 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[CLOUD] - This appender no longer admits a layout as a sub-component, set an encoder instead.
19:22:39,288 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[CLOUD] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
19:22:39,288 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[CLOUD] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
19:22:39,288 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[CLOUD] - Active log file name: logs/cloud/cloud.log
19:22:39,288 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[CLOUD] - File property is set to [logs/cloud/cloud.log]
19:22:39,288 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
19:22:39,288 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [PUSH]
19:22:39,289 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1225568095 - Archive files will be limited to [20 MB] each.
19:22:39,289 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1225568095 - Will use zip compression
19:22:39,289 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1225568095 - Will use the pattern logs/push/push.%d{yyyy-MM-dd}.%i.log for the active file
19:22:39,290 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6337c201 - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/push/push.%d{yyyy-MM-dd}.%i.log.zip'.
19:22:39,290 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6337c201 - Roll-over at midnight.
19:22:39,291 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6337c201 - Setting initial period to Fri Mar 08 17:32:16 CST 2024
19:22:39,292 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[PUSH] - This appender no longer admits a layout as a sub-component, set an encoder instead.
19:22:39,292 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[PUSH] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
19:22:39,292 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[PUSH] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
19:22:39,293 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[PUSH] - Active log file name: logs/push/push.log
19:22:39,293 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[PUSH] - File property is set to [logs/push/push.log]
19:22:39,294 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [com.tencentcloudapi.cls.LoghubAppender]
19:22:39,651 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [KAFKA_ERROR]
19:22:39,652 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
19:22:40,212 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [com.tencentcloudapi.cls.LoghubAppender]
19:22:40,212 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [KAFKA_WARNING]
19:22:40,212 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
19:22:40,666 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [com.tencentcloudapi.cls.LoghubAppender]
19:22:40,667 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [KAFKA_DEBUG]
19:22:40,667 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
19:22:41,134 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [com.tencentcloudapi.cls.LoghubAppender]
19:22:41,134 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [KAFKA_USER_GOODS_SCAN]
19:22:41,134 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
19:22:41,589 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [com.tencentcloudapi.cls.LoghubAppender]
19:22:41,589 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [ORDER_MONEY_APPENDER]
19:22:41,590 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
19:22:42,040 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [userInfoLog] to INFO
19:22:42,040 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [userInfoLog] to false
19:22:42,040 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [USER_INFO] to Logger[userInfoLog]
19:22:42,040 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [orderLog] to INFO
19:22:42,040 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [orderLog] to false
19:22:42,040 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [ORDER] to Logger[orderLog]
19:22:42,040 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [userOrderLog] to INFO
19:22:42,040 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [userOrderLog] to false
19:22:42,040 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [USER_ORDER] to Logger[userOrderLog]
19:22:42,040 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [testLog] to INFO
19:22:42,040 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [testLog] to false
19:22:42,040 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [TEST] to Logger[testLog]
19:22:42,040 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [httpLog] to INFO
19:22:42,040 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [httpLog] to false
19:22:42,040 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [HTTP] to Logger[httpLog]
19:22:42,040 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [taoBaoLinkLog] to INFO
19:22:42,040 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [taoBaoLinkLog] to false
19:22:42,040 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [TAOBAO_LINK] to Logger[taoBaoLinkLog]
19:22:42,040 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [shareGoodsLog] to INFO
19:22:42,040 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [shareGoodsLog] to false
19:22:42,040 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [SHARE_GOODS] to Logger[shareGoodsLog]
19:22:42,040 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [loginLog] to INFO
19:22:42,040 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [loginLog] to false
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [LOGIN] to Logger[loginLog]
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [smsLog] to INFO
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [smsLog] to false
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [SMS] to Logger[smsLog]
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [requestLog] to INFO
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [requestLog] to false
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [REQUEST] to Logger[requestLog]
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [requestTimeLog] to INFO
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [requestTimeLog] to false
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [REQUEST_TIME] to Logger[requestTimeLog]
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [jobLog] to INFO
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [jobLog] to false
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [JOB] to Logger[jobLog]
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [mqLog] to INFO
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [mqLog] to false
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [MQ] to Logger[mqLog]
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [vipInfoLog] to INFO
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [vipInfoLog] to false
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [VIP_INFO] to Logger[vipInfoLog]
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [teamLog] to INFO
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [teamLog] to false
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [TEAM] to Logger[teamLog]
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [cloudLog] to INFO
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [cloudLog] to false
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [CLOUD] to Logger[cloudLog]
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [pushLog] to INFO
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [pushLog] to false
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [PUSH] to Logger[pushLog]
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [userGoodsScanLog] to INFO
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [userGoodsScanLog] to false
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [KAFKA_USER_GOODS_SCAN] to Logger[userGoodsScanLog]
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.yeshi.fanli] to DEBUG
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [com.yeshi.fanli] to true
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [DEBUG_FILE] to Logger[com.yeshi.fanli]
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [orderMoneyLog] to INFO
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [orderMoneyLog] to false
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [ORDER_MONEY_APPENDER] to Logger[orderMoneyLog]
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [debugLog] to INFO
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [debugLog] to false
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [KAFKA_DEBUG] to Logger[debugLog]
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.qcloud.cmq.CMQTool] to OFF
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [com.qcloud.cmq.CMQTool] to false
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [jdApiLogger] to INFO
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [jdApiLogger] to false
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [JD_API_APPENDER] to Logger[jdApiLogger]
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - ROOT level set to INFO
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [ERROR_FILE] to Logger[ROOT]
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [KAFKA_ERROR] to Logger[ROOT]
19:22:42,041 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [KAFKA_WARNING] to Logger[ROOT]
19:22:42,041 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
19:22:42,043 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@5c669da8 - Registering current configuration as safe fallback point
SLF4J: The following loggers will not work becasue they were created
SLF4J: during the default configuration phase of the underlying logging system.
SLF4J: See also http://www.slf4j.org/codes.html#substituteLogger
SLF4J: com.tencentcloudapi.cls.producer.common.RetryQueue
SLF4J: com.tencentcloudapi.cls.producer.common.TimerSendBatchTask
SLF4J: com.tencentcloudapi.cls.producer.common.TimerSendBatchTask
SLF4J: com.tencentcloudapi.cls.producer.common.BatchHandler
SLF4J: com.tencentcloudapi.cls.producer.common.BatchHandler
SLF4J: com.tencentcloudapi.cls.producer.common.BatchHandler
SLF4J: com.tencentcloudapi.cls.producer.common.TimerSendBatchTask
SLF4J: com.tencentcloudapi.cls.producer.common.BatchHandler
SLF4J: com.tencentcloudapi.cls.producer.common.BatchHandler
SLF4J: com.tencentcloudapi.cls.producer.common.TimerSendBatchTask
SLF4J: com.tencentcloudapi.cls.producer.common.BatchHandler
SLF4J: com.tencentcloudapi.cls.producer.common.BatchHandler
SLF4J: com.tencentcloudapi.cls.producer.common.TimerSendBatchTask
SLF4J: com.tencentcloudapi.cls.producer.common.BatchHandler
SLF4J: com.tencentcloudapi.cls.producer.common.BatchHandler
SLF4J: com.tencentcloudapi.cls.producer.common.TimerSendBatchTask
SLF4J: com.tencentcloudapi.cls.producer.common.BatchHandler
SLF4J: com.tencentcloudapi.cls.producer.common.BatchHandler
SLF4J: The requested version 1.7.16 by your slf4j binding is not compatible with [1.6]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
<!DOCTYPE html>
<html lang="zh-cmn-Hans">
  <head>
    <meta charset="utf-8">
    <script>!function(t){var e=t._plt=t._plt||[];e.push(["tm","ps",+new Date]),(t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.setTimeout)(function(){e.push(["tm","fraf",+new Date])})}(window);!function(){if("PerformanceLongTaskTiming" in window){var g=window.__tti={e:[]};g.o=new PerformanceObserver(function(l){g.e=g.e.concat(l.getEntries())});g.o.observe({entryTypes:["longtask"]})}}();!function(){var e,t,n,i,r={passive:!0,capture:!0},a=new Date,o=function(){i=[],t=-1,e=null,f(addEventListener)},c=function(i,r){e||(e=r,t=i,n=new Date,f(removeEventListener),u())},u=function(){if(t>=0&&t<n-a){var r={entryType:"first-input",name:e.type,target:e.target,cancelable:e.cancelable,startTime:e.timeStamp,processingStart:e.timeStamp+t};i.forEach((function(e){e(r)})),i=[]}},s=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,t){var n=function(){c(e,t),a()},i=function(){a()},a=function(){removeEventListener("pointerup",n,r),removeEventListener("pointercancel",i,r)};addEventListener("pointerup",n,r),addEventListener("pointercancel",i,r)}(t,e):c(t,e)}},f=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(t){return e(t,s,r)}))},p="hidden"===document.visibilityState?0:1/0;addEventListener("visibilitychange",(function e(t){"hidden"===document.visibilityState&&(p=t.timeStamp,removeEventListener("visibilitychange",e,!0))}),!0);o(),self.webVitals={firstInputPolyfill:function(e){i.push(e),u()},resetFirstInputPolyfill:o,get firstHiddenTime(){return p}}}();</script>
    <link rel="dns-prefetch" href="//static.pddpic.com">
    <link rel="dns-prefetch" href="//api.pinduoduo.com">
    <link rel="dns-prefetch" href="//funimg.pddpic.com">
    <link rel="dns-prefetch" href="//t00img.yangkeduo.com">
    <link rel="dns-prefetch" href="//t16img.yangkeduo.com">
    <link rel="dns-prefetch" href="//avatar.yangkeduo.com">
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
    <meta name="format-detection" content="telephone=no">
    <meta http-equiv="Cache-Control" content="no-cache,no-store,must-revalidate">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Expires" content="0">
    <meta property="og:title" content="拼多多商城">
    <meta property="og:description" content="风靡全国的拼团商城,优质商品新鲜直供,快来一起拼多多吧">
    <meta property="og:image" content="https://funimg.pddpic.com/base/share_logo.jpg">
    <title>拼多多</title>
    <script>window.__enableApiPmmDoubleWrite=false;</script>
    <script>!function(){var e=0,t=!1,r=!1,n=window.__EXT_AUTOREPAIR_HOST_MAP__||{"static.pddpic.com":["static-1.pddpic.com","static-2.pddpic.com"]};function o(e,t){setTimeout((function(){var r=new Error;throw r.extraInfo={error_message:e,errorCode:527,type:501,url:t},r}))}window.addEventListener("error",(function(a){var i=a.target||{},c=i.src||i.href,d=(i.nodeName||"").toLowerCase(),s=document.createElement("a");s.href=c;var l=s.host,f=String(i.onerror),p=f.indexOf("Loading chunk")>0&&f.indexOf("failed")>0||!(!i.dataset||!i.dataset.webpack),u=f.indexOf("CSS_CHUNK_LOAD_FAILED")>0;if(["link","script"].indexOf(d)>=0&&["preload","prefetch"].indexOf(i.rel)<0&&!p&&!u&&n[l]){var y="script"===d,m=Date.now()%2,_=0===m?1:0;!function t(a){var i=document.createElement(d);i.dataset.retryFlag="_retry_".concat(a?1:2);var s=c.replace(l,n[l][a?m:_]);y?(i.src=s,i.crossOrigin="anonymous"):(i.href=s,i.rel="stylesheet"),i.onerror=function(){a?t(!1):y&&(!function(){if(3===(e+=1)){var t=document.createElement("div"),r=window.screen.width/375;document.body.appendChild(t),t.style.position="fixed",t.style.top="45%",t.style.left="50%",t.style.webkitTransform="translateX(-50%)",t.style.transform="translateX(-50%)",t.style.padding="".concat(14*r,"px ").concat(16*r,"px"),t.style.fontSize="".concat(15*r,"px"),t.style.background="rgba(0, 0, 0, .8)",t.style.borderRadius="".concat(8*r,"px"),t.style.color="#fff",t.style.textAlign="center",t.style.whiteSpace="nowrap",t.style.zIndex="9999",t.innerText="资源加载异常, 请切换网络重试",setTimeout((function(){t.remove()}),4e3)}}(),r||(r=!0,o("some_retry_fail",s)))},(y?document.body:document.head).appendChild(i)}(!0),y&&!t&&(t=!0,o("trigger_retry",c))}return null}),!0)}();</script>
    <script>var pinbridge=function(e){var n,t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};n=function(){try{if(top.pinbridge)return top.pinbridge}catch(e){}var e=0,n={},r={},i=window._fastJsN?function(e,n,t,i){var o="function"==typeof window._fastJsN.callNative&&window._fastJsN.callNative(e,n,t?JSON.stringify(t):null,i);return(o=o?JSON.parse(o):null)&&o.hasOwnProperty("errorCode")&&(r.callback(o.callID,o.errorCode,o.data),r.removeCallback(o.callID)),o}:function(e,n,t,r){!function(e,n){if(window&&window.webkit&&window.webkit.messageHandlers&&window.webkit.messageHandlers.hybridAPIMessageHandler)window.webkit.messageHandlers.hybridAPIMessageHandler.postMessage({url:e});else{if(null!=(navigator.userAgent||navigator.vendor||window.opera).match(/phh_android_version/i))return alert(e);var t=document.createElement("iframe");t.setAttribute("src",e),t.setAttribute("style","display:none;"),t.setAttribute("height","0px"),t.setAttribute("width","0px"),t.setAttribute("frameborder","0"),document.body.appendChild(t),t.parentNode.removeChild(t),t=null}}("pinbridge:///request?t="+e+"&m="+n+"&p="+encodeURIComponent(JSON.stringify(t))+"&c="+r)};return r={check:function(e,n,t,i){e&&n||t&&t(!1),r.callNative("AMBridgeAPI","check",{module_name:e,method_name:n},function(e){t&&t(e&&e.exist)},function(){i?i():t&&t(!1)})},callback:function(e,t,r){r=r||{};var i=n[e];i&&(i.func?i.func(t,r):0===t&&i.onSuccess?i.onSuccess(r):0!==t&&i.onError&&i.onError(r,t))},callNative:function(r,o,a,c,l){a=a||{};var d=++e;return n[d]={onSuccess:c,onError:l},a=function r(i){if("object"!==(void 0===i?"undefined":t(i)))return i;var o={};for(var a in"[object Array]"===Object.prototype.toString.call(i)&&(o=[]),i)if(i.hasOwnProperty(a)){var c=i[a];if("function"==typeof c){var l=++e;n[l]={func:c},o[a]="__aimi_function_"+l}else"object"===(void 0===c?"undefined":t(c))&&null!==c?o[a]=r(c):o[a]=c}return o}(a),i(r,o,a,d)},callbackFromNative:function(e,n,t){r.callback(e,n,t)},removeCallback:function(e){delete n[e]},decodeFunctions:function(e){if("object"===(void 0===e?"undefined":t(e))){var n=function(n){if(!e.hasOwnProperty(n))return"continue";var i,o,a,c=e[n];if("string"==typeof c&&0===c.indexOf("__aimi_function_")){var l=c.substring("__aimi_function_".length).split("_");3===l.length&&(i=parseInt(l[0]),o=parseInt(l[1]),a=parseInt(l[2]),isNaN(i)||isNaN(o)||isNaN(a)||(e[n]=function(e,n){r.callNative("AMBridgeAPI","callback",{bridge_id:o,context_id:a,call_id:i,error_code:e,response:n})}))}else"object"===(void 0===c?"undefined":t(c))&&r.decodeFunctions(c)};for(var i in e)n(i)}}}}(),window.pinbridge=n;var r=n,i=r.callbackFromNative,o=r.callNative,a=r.check,c=r.callback,l=r.decodeFunctions,d=r.removeCallback,u=n;return e.callNative=o,e.callback=c,e.callbackFromNative=i,e.check=a,e.decodeFunctions=l,e.default=u,e.removeCallback=d,e}({});</script>
    <script>window.__ERROR_FILTER_LIST__ = {"filterList":[{"fields":{"errorMsg":"Illegal invocation"}},{"fields":{"errorMsg":"Error call native .*:.* cost over 1000ms","errorCode":"555555"}},{"fields":{"errorMsg":"initShareAndMenu 调用超时"}},{"fields":{"errorMsg":"Cannot read|set property '.*?' of null|undefined","platform":"unknown"}},{"fields":{"errorMsg":"ReferenceError: Can't find variable: WebViewJavascriptBridge","platform":"unknown"}},{"fields":{"errorMsg":"undefined is not an object \\(evaluating 'this.pages"}},{"fields":{"errorMsg":"^Cannot read properties of null|undefined \\(reading 'length|-1'\\)$"}},{"fields":{"errorMsg":"^Cannot convert undefined or null to object.*inject-with-store"}},{"fields":{"errorMsg":"Cannot convert a Symbol value to a string"}},{"fields":{"errorMsg":"Cannot.*?redefine.*?property.*?navigator"}},{"fields":{"errorMsg":"“TouchEvent”未定义","platform":"unknown"}},{"fields":{"errorMsg":"DevToolsAPI is not defined"}},{"fields":{"errorMsg":"渲染异常","errorCode":921,"platform":"unknown"}},{"fields":{"errorMsg":"无法重新定义不可配置的属性.*platform.*"}},{"fields":{"page":"Object Not Found Matching Id"}},{"fields":{"errorMsg":"^Request aborted$"}},{"fields":{"errorMsg":"^Network Error$"}},{"fields":{"errorMsg":"^Script error.?$","platform":"unknown"}},{"fields":{"errorMsg":"callNative AMAlert showAlert error: 60000|60004","errorCode":"60000|60004"}},{"fields":{"errorMsg":"config:fail:yf_zmq_udp_proxy jsapi yaaf_mpqq_websvr service error","platform":"qq"}},{"fields":{"errorMsg":"config:fail: no return  body","platform":"qq"}},{"fields":{"errorMsg":"unknown biz error"}},{"fields":{"errorMsg":"Request failed with status code 424|429"}},{"fields":{"errorMsg":"err_unknown_44104"}},{"fields":{"errorMsg":"系统繁忙,请稍后重试"}},{"fields":{"page":"Loading.* chunk .* failed"}},{"fields":{"platform":"unknown"},"eventType":500,"sampleRate":0.01},{"fields":{"platform":"^(?!unknown)"},"eventType":500,"sampleRate":0.1},{"fields":{"errorCode":"555555|555556","platform":"^(?!unknown)"},"eventType":501,"sampleRate":0.1},{"fields":{"platform":"unknown"},"eventType":501,"sampleRate":0.01}],"replaceList":[{"fields":{"errorMsg":"预渲染失败"},"replaceErrorCode":700001,"sampleRate":0.1},{"fields":{"errorMsg":"callNative JSUIControl setRollingAlpha error: 60000"},"replaceErrorCode":700001,"sampleRate":0.1},{"fields":{"errorMsg":"vedio_error_retry_3"},"replaceErrorCode":700002,"sampleRate":0.1},{"fields":{"errorMsg":"Can't find variable: WeixinOpenTags"},"replaceErrorCode":700002,"sampleRate":0.1},{"fields":{"page":"sku_order_render|sku_order_refresh","errorCode":"timeout"},"replaceErrorCode":700003,"sampleRate":0.1},{"fields":{"errorMsg":"面板显示.*?和摩根支付.*?不一致"},"replaceErrorCode":700003,"sampleRate":0.1},{"fields":{"errorMsg":"唤起App失败"},"replaceErrorCode":700004,"sampleRate":0.1},{"fields":{"errorMsg":"goto-app: launch_pdd_app_fail"},"replaceErrorCode":700004,"sampleRate":0.1},{"fields":{"platform":"unknown"},"replaceErrorCode":700000,"sampleRate":0.1}]};</script>
    <script>var initInlineLogger=function(){function e(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function r(r){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?e(Object(t),!0).forEach((function(e){o(r,e,t[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):e(Object(t)).forEach((function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(t,e))}))}return r}function n(e){var r=function(e,r){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,r||"default");if("object"!=typeof t)return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==typeof r?r:r+""}function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(e)}function o(e,r,t){return(r=n(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function i(e,r){return function(e){if(Array.isArray(e))return e}(e)||function(e,r){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var t,o,i,a,d=[],s=!0,u=!1;try{if(i=(n=n.call(e)).next,0===r){if(Object(n)!==n)return;s=!1}else for(;!(s=(t=i.call(n)).done)&&(d.push(t.value),d.length!==r);s=!0);}catch(e){u=!0,o=e}finally{try{if(!s&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return d}}(e,r)||a(e,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e,r){if(e){if("string"==typeof e)return d(e,r);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,r):void 0}}function d(e,r){(null==r||r>e.length)&&(r=e.length);for(var n=0,t=new Array(r);n<r;n++)t[n]=e[n];return t}function s(e,r){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=a(e))||r&&e&&"number"==typeof e.length){n&&(e=n);var t=0,o=function(){};return{s:o,n:function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,d=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return d=e.done,e},e:function(e){s=!0,i=e},f:function(){try{d||null==n.return||n.return()}finally{if(s)throw i}}}}function u(e){return e.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}function p(e){var r=document.cookie?document.cookie.split("; "):[],n={};return r.some((function(r){var t=r.split("="),o=t.slice(1).join("="),i=u(t[0]);return o=u(o),n[i]=o,e===i})),e?n[e]||"":n}String.prototype.includes||(String.prototype.includes=function(e,r){return"number"!=typeof r&&(r=0),!(r+e.length>this.length)&&-1!==this.indexOf(e,r)});var f=function(){for(var e,r=[],n=0;n<256;n++){e=n;for(var t=0;t<8;t++)e=1&e?3988292384^e>>>1:e>>>1;r[n]=e}return r}();function c(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;e=function(e){for(var r="",n=0;n<e.length;n++){var t=e.charCodeAt(n);t<128?r+=String.fromCharCode(t):t<2048?r+=String.fromCharCode(192|t>>6)+String.fromCharCode(128|63&t):t<55296||t>=57344?r+=String.fromCharCode(224|t>>12)+String.fromCharCode(128|t>>6&63)+String.fromCharCode(128|63&t):(t=65536+((1023&t)<<10|1023&e.charCodeAt(++n)),r+=String.fromCharCode(240|t>>18)+String.fromCharCode(128|t>>12&63)+String.fromCharCode(128|t>>6&63)+String.fromCharCode(128|63&t))}return r}(e),r=~r;for(var n=0;n<e.length;n++)r=r>>>8^f[255&(r^e.charCodeAt(n))];return~r>>>0}var l=function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100,n=arguments.length>2?arguments[2]:void 0;if("function"!=typeof e||null!=n&&"function"!=typeof n)throw new TypeError("Expected a function");var t=[],o=[];return function(){for(var i=arguments.length,a=new Array(i),d=0;d<i;d++)a[d]=arguments[d];var s=n?n.apply(this,a):a[0],u=o.indexOf(s);if(u>-1)return t[u];var p=e.apply(this,a);return t.push(p),o.push(s),t.length>r&&(o.shift(),t.shift()),p}}((function(e){return(e="?"===e[0]?e.slice(1):e).split("&").reduce((function(e,r){if(r){var n=i(function(e,r){if(""===r)return[e];var n=e.indexOf(r);return-1===n?[e]:[e.slice(0,n),e.slice(n+r.length)]}(r,"="),2),t=n[0],o=n[1],a=void 0===o?"":o;try{e[decodeURIComponent(t)]=decodeURIComponent(a)}catch(e){d=e,setTimeout((function(){throw d.extraInfo=s,d}))}}var d,s;return e}),{})}));var v={MiniProgram:/miniprogram/i,WeChat:/MicroMessenger/i,QQ:/QQ\/[\d\.]+\s+/i,QQAndQzone:/(QQ\/[\d\.]+\s+)|Qzone/i,QQApp:/QQ\//i,Weibo:/Weibo/i,Ios:/iphone|ipad|ipod/i,IosVersion:/os (\d+)_(\d+)_?(\d+)?/i,Android:/Android/i,AndroidVersion:/Android (\d+).?(\d+)?.?(\d+)?/i,AndroidNative:/phh_android_version/i,IosNative:/phh_ios_version/i,IosApiRequest:/BundleID\/com.xunmeng.pinduoduo/i,Mobile:/Android|webOS|iPhone|iPad|iPod/i,AndroidNativeVersion:/(phh_android_version)\/([^\s]+)\s*/i,IosNativeVersion:/(phh_ios_version|AppVersion)\/([^\s]+)\s*/i,MecoWebViewCore:/MecoCore\/(\d)/i,MecoWebViewSdk:/MecoSDK\/(\d)/i},g="unknown",m="ios",h="android",_="tinyAndroid",y="wechat",w="weibo",b="qq",S="qqapp",A="wxapp",I={Android:"android",IOS:"ios",Unknown:"unknown"};function O(e,r){[e,r].forEach((function(e){if("string"!=typeof e)throw new TypeError("Invalid argument expected string")}));for(var n=function(e){return e.split(".").map((function(e){return parseInt(e,10)||0}))},t=n(e),o=n(r),i=Math.max(t.length,o.length),a=0;a<i;++a){var d=t[a]||0,s=o[a]||0;if(d!==s)return d-s}return 0}function C(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return v.MiniProgram.test(e)||"undefined"!=typeof window&&"miniprogram"===window.__wxjs_environment}function R(e){return v.Ios.test(e)?I.IOS:v.Android.test(e)?I.Android:I.Unknown}function M(e){if(!e||!e.stack)return"";var r=e.stack.replace(/\\n/gi,"").split(/\bat\b/).slice(0,5).join("@").replace(/\?[^:]+/gi,""),n=e.toString();return r.indexOf(n)<0?n+"@"+r:r}function E(e){var r=null;return function(){if(!r){for(var n=arguments.length,t=new Array(n),o=0;o<n;o++)t[o]=arguments[o];r=e.apply(null,t)}return r}}var j,P,x=E((function(){var e=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return v.AndroidNative.test(e)?e.includes("app_type/tiny")?_:h:v.IosNative.test(e)||v.IosApiRequest.test(e)?m:v.WeChat.test(e)?C(e)?A:y:v.Weibo.test(e)?w:v.QQApp.test(e)&&C(e)?S:v.QQAndQzone.test(e)?b:g}(navigator.userAgent),r=e===h,n=e===m,t=r||n,o=e===_,i=t&&function(e,r){var n=r===h?v.AndroidNativeVersion:v.IosNativeVersion,t=e.match(n);return t&&t[2]||""}(navigator.userAgent,e);return{isNativePlatform:t,isAndroid:r,isIos:n,isTinyNativePlatform:o,platform:e,version:i}})),N="https://apm.hutaojie.com",k="/api/pmm/front_log",T="/api/pmm/front_err",V=5,L=501,Q=502,z=600,D="undefined"==typeof window||(window.location.href.includes("hutaojie")||window.location.hostname.includes("panduoduo.yangkeduo.com")||["development","testing","panduoduo"].includes((j="prod_env","undefined"!=typeof window&&window.__ERROR_LOGGER_ENV__?(window.__ERROR_LOGGER_ENV__||{})[j]:""))||"http:"===window.location.protocol),q=function(e){var r=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).pmmHost||"https://apm-a.pinduoduo.com";return e===z?D?""+N+k:""+r+k:D?""+N+T:""+r+T},U=function(e){var r=e.bizSide,n=e.appId,t=e.testAppId;if("undefined"!=typeof window){var o={bizSide:"consumer-platform-fe"};return r&&(o.bizSide=r),D&&!t?(console.error("缺少 testAppId 测试环境应用 id"),o):n?(o.appId=D?t:n,o):(console.error("缺少 appId 正式环境环境应用 id"),o)}return{}},W=void 0,J={IosVersion:/(pddmt_ios_version)\/([^\s]+)\s*/i,AndroidVersion:/(pddmt_android_version)\/([^\s]+)\s*/i,MacVersion:/(pddMerchant_mac_version)\/([^\s]+)\s*/i};function F(){if(void 0!==W)return W;var e=navigator.userAgent,r=[J.IosVersion,J.AndroidVersion,J.MacVersion].find((function(r){return r.test(e)})),n=e.match(r);return W="",n&&(W=n[2]||""),W}var G=function(e){if(P)return P;var r,n,t=D?o(o(o({},h,"1"),m,"3"),_,"0"):o(o(o({},h,"3"),m,"5"),_,"59");return P=t[e]||(r=navigator.userAgent,n="unkonwn",J.IosVersion.test(r)?n="pddmt_ios":J.AndroidVersion.test(r)?n="pddmt_android":J.MacVersion.test(r)&&(n="pdd_merchant_mac"),(D?o(o(o({},"pddmt_android","2"),"pddmt_ios","4"),"pdd_merchant_mac","171"):o(o(o({},"pddmt_android","4"),"pddmt_ios","6"),"pdd_merchant_mac","304"))[n])||-1},H=E((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],t=arguments.length>2?arguments[2]:void 0;if(t)return t;var o=window.location.pathname;if(e.indexOf(o)<0||n.length<=0)return o;var i,a=window.location.search,d=n.find((function(e){return a.indexOf(e)>-1}));if(d){var s=function(e){return r({},l(e))}(a);i=s[d]}return i?"/"===i[0]?i+".html":"/"+i+".html":o}));var K,$,B={platform:"p",osVer:"osV",pddId:"pid",userId:"uid"};function X(e,r){var n;if(!(window.__ERROR_SAMPLE_RATE__&&Math.random()>window.__ERROR_SAMPLE_RATE__||function(e){try{var r,n=e.common_tags,t=void 0===n?{}:n,o=e.datas[0],i=o.extras,a=void 0===i?{}:i,d=o.tags,u=void 0===d?{}:d,p=o.type,f=window.__ERROR_FILTER_LIST__||{},c=f.filterList,l=void 0===c?[]:c,v=f.replaceList,g=void 0===v?[]:v,m=function(e){var r=e.eventType,n=void 0===r?502:r,o=e.fields;return+p==+n&&Object.keys(o).every((function(e){var r=e,n=u;return B[e]?(n=t,r=B[e]):e.startsWith("common.")?(n=t,r=e.substring(7)):e.startsWith("payload.")&&(n=a,r=e.substring(8)),new RegExp(o[e]).test(n[r])}))},h=function(e,r){if(void 0!==e.sampleRate){var n="number"!=typeof e.sampleRate||e.sampleRate<0||e.sampleRate>1?1:e.sampleRate;return Math.random()>n}return r},_=s(l);try{for(_.s();!(r=_.n()).done;){var y=r.value;if(m(y))return h(y,!0)}}catch(e){_.e(e)}finally{_.f()}var w,b=s(g);try{for(b.s();!(w=b.n()).done;){var S=w.value;if(m(S)){var A=u.errorCode;return u.errorCode=""+S.replaceErrorCode,a.errorCode=A,h(S,!1)}}}catch(e){b.e(e)}finally{b.f()}}catch(e){}return!1}(e))){var t=q(null==e||null===(n=e.datas[0])||void 0===n?void 0:n.type,r);if(x().isNativePlatform&&window.pinbridge)window.pinbridge.callNative("JSNetwork","request",{method:"POST",url:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},data:JSON.stringify(e)});else{var o=new XMLHttpRequest;o.open("POST",t,!0),o.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),o.withCredentials=!0,o.send(JSON.stringify(e))}}}function Z(e,r){var n=G(e);$=$||p("ETag")||p("api_uid");var t=function(e){var r=R(e),n="";if(r===I.IOS&&(n=v.IosVersion),r===I.Android&&(n=v.AndroidVersion),n){var t=e.match(n);return(t?[t[1],t[2],t[3]].map((function(e){return e?parseInt(e,10):0})):[]).join(".")}return""}(navigator.userAgent);return{p:e,runningPlatform:e,runningAppId:n,b:"",did:"",mid:"",osV:R(navigator.userAgent)+"_"+t,pid:$,uid:r?r+"":""}}return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.bizSide,o=e.appId,i=e.testAppId;n&&o&&i||console.error("initInlineLogger 缺少必传项 bizSize, appId, testAppId");var a=function(e){var n=e||{},t=n.message,o=void 0===t?"":t,i=n.filename,a=n.lineno,d=n.colno,s=n.error,p=function(e){var r={};if(e&&e.extraInfo){var n=e.extraInfo,t=n.errorMsg,o=n.error_msg,i=n.errorMessage,a=n.error_message,d=n.errorCode,s=n.error_code,u=n.page,p=n.type,f=n.url,c=n.payload;r.errorMsg=t||o||i||a,r.errorCode=d||s,r.page=u,r.type=p,r.url=f,r.payload=c,Object.keys(r).forEach((function(e){return void 0===r[e]&&delete r[e]}))}return r}(s);if(-1!==o.toLowerCase().indexOf("syntaxerror")){f(o+", "+i+", "+a+", "+d+", "+s,!1,p,M(s))}else{var c=(s||{}).message;u(r({errorMsg:"html_error_js: "+(o||c||"unknown"),page:"errMsg: "+c+", stack: "+M(s),errorCode:555558},p))}},d=function(e){var r,n,o,i={error_msg:(r=e.reason)&&r.message,error_stack:M(r),Error:r};u({errorMsg:"html_error_unhandledrejection: "+(i&&i.error_msg||"unknown"),page:"unhandledrejection reason:"+((n=JSON.stringify(i,(o=[],function(e,r){if(null!==r&&"object"===t(r)){if(o.indexOf(r)>=0)return;o.push(r)}return r})))&&n.replace(/(PDDAccessToken=|AccessToken=|"AccessToken":)\s*"?([^;,"]+)"?([;,]?\s*)/gi,(function(e,r,n,t){return""+r+n.length+t}))),payload:i&&i.extraInfo||{}})};window.__RESET_ERROR_LISTENER__=function(){window.removeEventListener("unhandledrejection",d),window.removeEventListener("error",a)},window.addEventListener("error",a),window.addEventListener("unhandledrejection",d),window.addEventListener("error",(function(e){if("[object Event]"===Object.prototype.toString.call(e)){var r=e.target;if(r){var n;if(-1!==["preload","prefetch"].indexOf(r.rel))return;var t=r.src||r.href;if(t&&t.indexOf&&"function"==typeof t.indexOf&&-1!==t.indexOf("127.0.0.1"))return;u({errorMsg:"html_error_"+r.nodeName.toLowerCase()+((null===(n=r.dataset)||void 0===n?void 0:n.retryFlag)||""),page:"Error: "+r.outerHTML,errorCode:555556,type:L,url:t})}else f(JSON.stringify(e),!0)}}),!0);var s={wifi:1,"2g":2,"3g":3,"4g":4};function u(t){var a=t.errorMsg,d=t.errorCode,u=t.page,f=t.type,v=void 0===f?Q:f,g=t.url,m=t.payload,h=void 0===m?{}:m,_=/(\w+).html/.exec(document.referrer),y=navigator.connection&&(navigator.connection.effectiveType||navigator.connection.type),w=x(),b=w.platform,S=w.version;!function(e){if(l)return e(l);var r="pdd_user_id";if(x().isNativePlatform&&window.pinbridge){var n=function(r){l=r.user_id||0,e(l)},t=function(){l=p(r),e(l)};return window.pinbridge.callNative("AMUser","info",{need_token:!1},n,t)}l=p(r),e(l)}((function(t){var p=Date.now()+"_"+t,f=function(e){var r,n=e||{},t=n.bizSide,o=n.appId,i=n.testAppId,a=n.app_version,d=U({bizSide:t,appId:o,testAppId:i}),s=Date.now(),u=Math.pow(10,5)+Math.floor(Math.random()*(Math.pow(10,6)-Math.pow(10,5)));return K=void 0!==K?K:Number(null===(r=a||"")||void 0===r?void 0:r.split(".").reduce((function(e,r,n){return 0===n?e+r:""+e+(r.length<2?"0"+r:r)}),"")),{biz_side:d.bizSide,app:d.appId,level:2,version:K,report_time_ms:s,rand_num:u,crc32:c(s+"-"+u)}}({bizSide:n,appId:o,testAppId:i,app_version:S||F()}),l=Z(b,t),m=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=n.universalPaths,i=n.universalQueryKeys,a=n.reportPath,d=e.app_version,s=e.log_version,u=void 0===s?"0.0.1":s,p=e.network,f=e.page,c=void 0===f?"":f,l=e.page_id,v=e.page_name,g=e.page_sn,m=e.page_url,h=e.refer_page_id,_=e.refer_page_name,y=e.refer_page_sn,w=e.user_agent,b=e.error_msg,S=e.error_message,A=e.serverIp,I=void 0===A?"":A,O=e.httpCode,C=void 0===O?"":O,R=e.httpMethod,M=void 0===R?"":R,E=e.errorCode,j=void 0===E?"555555":E,P=e.error_code,x=e.module,N=void 0===x?"":x,k=e.pageId,T=void 0===k?"":k,V=e.referPageId,L=void 0===V?"":V,Q=e.url,z=H(o,i,a);return r({network:(p||"0")+"",serverIp:I,url:Q,errorCode:String(P||j),errorMsg:(b||S||"").substr(0,150),module:N,pageId:T,pagePath:z,pageSn:g?g+"":"",pageUrl:m||window.location.href,referPageId:L,page_id:l?l+"":"",refer_page_id:h?h+"":"",referPageName:_||"",referPageSn:y?y+"":"",pageName:v||"",page:c,log_version:u,user_agent:w||window.navigator.userAgent,app_version:d||""},t?{httpCode:String(C),httpMethod:M}:{})}({app_version:S,log_version:"1.0.0",network:s[y]||0,page:u,page_url:location.href,refer_page_name:_&&_[1],error_msg:a,url:g,errorCode:d},e);f.common_tags=l,f.datas=[{category:V,type:v,timestamp:Date.now(),tags:m,extras:r({error_logger:"1",unique_tag:p},h)}],X(f,e)}))}function f(e,n){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";!function(e,r){var n,t=x(),o=t.isNativePlatform,i=t.isAndroid,a=t.isIos,d=t.version;o&&(i&&O(d,"6.70.0")>=0||a&&O(d,"5.8.0")>=0)?null===(n=window.pinbridge)||void 0===n||n.callNative("JSRecovery","tryReload",{error_info:[e]},(function(){r("JSRecovery success")}),(function(e,n){r("JSRecovery fail: "+n)})):r("notNativeORLowVersion")}({type:"html_error",message:e},(function(i){u(r({errorMsg:"html_error: "+e,errorCode:555557,page:"capture: "+n+", result: "+i+", message: "+e+", extraMsg: "+o},t))}))}window.$inlineSendNormalLog=function(e){var r=e.errorMsg,n=e.errorCode,t=e.page,o=e.payload;u({errorMsg:r,errorCode:n,page:t,type:z,payload:void 0===o?{}:o})};var l=0}}();</script>
    <script>initInlineLogger({"universalPaths":["/mall_quality_assurance.html","/comm_package_coupon.html"],"universalQueryKeys":["_t_timestamp"],"appId":"100601","testAppId":"100207","bizSide":"consumer-platform-fe","reportPath":"/goods.html"})</script>
            <link rel="preload" href="https://static.pddpic.com/assets/css/react_goods_14478b1cb32464fc3d7e.css" as="style" >
            <link rel="preload" href="https://static.pddpic.com/assets/js/vendor_3a101dbde244a7c6a8c4_1026.js" as="script" crossorigin="anonymous"><link rel="preload" href="https://static.pddpic.com/assets/js/react_pdd_3b7fde8d8051b49385d6_1026.js" as="script" crossorigin="anonymous"><link rel="preload" href="https://static.pddpic.com/assets/js/react_goods_8c8de440d4ab469ad81b_1026.js" as="script" crossorigin="anonymous"><link rel="preload" href="https://static.pddpic.com/assets/js/react_anti_co_9330629aaa98519b1cfc_1026.js" as="script" crossorigin="anonymous">
    <script>!function(n){(n.__pft=n.__pft||{}).inlineCssStart=+new Date}(window);</script>
    <style>body{-webkit-user-select:none;-o-user-select:none;user-select:none}._3kvlx9he,div[contentEditable=true],input,p[contentEditable=true],textarea{-webkit-user-select:text;-o-user-select:text;user-select:text}a[data-active=red]:active,button[data-active=red]:active,div[data-active=red]:active,p[data-active=red]:active{color:#edbbb8!important;background-color:#c51e14!important}a[data-active=yellow]:active,button[data-active=yellow]:active,div[data-active=yellow]:active,p[data-active=yellow]:active{color:#fce2bc!important;background-color:#f69e20!important}a[data-active=ghost-red]:active,button[data-active=ghost-red]:active,div[data-active=ghost-red]:active,p[data-active=ghost-red]:active{color:#c51e14!important;background-color:#fdf3f2!important;border-color:#e02e24!important}a[data-active=ghost-gray]:active,button[data-active=ghost-gray]:active,div[data-active=ghost-gray]:active,p[data-active=ghost-gray]:active{color:#878789!important;background-color:#ebebeb!important;border-color:#8c8c8c!important}a[data-active=cell-white]:active,button[data-active=cell-white]:active,div[data-active=cell-white]:active,p[data-active=cell-white]:active{background-color:rgba(0,0,0,.08)!important}a[data-active=cell-red]:active,button[data-active=cell-red]:active,div[data-active=cell-red]:active,p[data-active=cell-red]:active{background-color:#f9d7d5!important}a[data-active=cell-yellow]:active,button[data-active=cell-yellow]:active,div[data-active=cell-yellow]:active,p[data-active=cell-yellow]:active{background-color:#f9eda1!important}a[data-active=after-red]:after,a[data-active=before-red]:before,button[data-active=after-red]:after,button[data-active=before-red]:before,div[data-active=after-red]:after,div[data-active=before-red]:before{content:"";position:absolute;top:0;left:0;z-index:0;width:100%;height:100%;opacity:0;background:#000;pointer-events:none;border-radius:inherit}a[data-active=before-red]:active,button[data-active=before-red]:active,div[data-active=before-red]:active{color:hsla(0,0%,100%,.6)!important}a[data-active=before-red]:active:before,button[data-active=before-red]:active:before,div[data-active=before-red]:active:before{opacity:.15}a[data-active=after-red]:active,button[data-active=after-red]:active,div[data-active=after-red]:active{color:hsla(0,0%,100%,.6)!important}a[data-active=after-red]:active:after,button[data-active=after-red]:active:after,div[data-active=after-red]:active:after{opacity:.15}a[data-active=after-white]:after,a[data-active=before-white]:before,button[data-active=after-white]:after,button[data-active=before-white]:before,div[data-active=after-white]:after,div[data-active=before-white]:before{content:"";position:absolute;top:0;left:0;z-index:0;width:100%;height:100%;opacity:0;background:#000;pointer-events:none;border-radius:inherit}a[data-active=before-white]:active,button[data-active=before-white]:active,div[data-active=before-white]:active{color:rgba(0,0,0,.6)!important}a[data-active=before-white]:active:before,button[data-active=before-white]:active:before,div[data-active=before-white]:active:before{opacity:.05}a[data-active=after-white]:active,button[data-active=after-white]:active,div[data-active=after-white]:active{color:rgba(0,0,0,.6)!important}a[data-active=after-white]:active:after,button[data-active=after-white]:active:after,div[data-active=after-white]:active:after{opacity:.05}a[data-active=after-ghost]:after,a[data-active=before-ghost]:before,button[data-active=after-ghost]:after,button[data-active=before-ghost]:before,div[data-active=after-ghost]:after,div[data-active=before-ghost]:before{content:"";position:absolute;top:0;left:0;z-index:0;width:100%;height:100%;opacity:0;background:#e02e24;pointer-events:none;border-radius:inherit}a[data-active=before-ghost]:active,button[data-active=before-ghost]:active,div[data-active=before-ghost]:active{color:rgba(234,46,36,.6)!important}a[data-active=before-ghost]:active:before,button[data-active=before-ghost]:active:before,div[data-active=before-ghost]:active:before{opacity:.05}a[data-active=after-ghost]:active,button[data-active=after-ghost]:active,div[data-active=after-ghost]:active{color:rgba(234,46,36,.6)!important}a[data-active=after-ghost]:active:after,button[data-active=after-ghost]:active:after,div[data-active=after-ghost]:active:after{opacity:.05}a[data-active=base-btn-red]:active,button[data-active=base-btn-red]:active,div[data-active=base-btn-red]:active,li[data-active=base-btn-red]:active,span[data-active=base-btn-red]:active{color:hsla(0,0%,100%,.7)!important;background-color:#c51e14!important}a[data-active=base-btn-white]:active,button[data-active=base-btn-white]:active,div[data-active=base-btn-white]:active,li[data-active=base-btn-white]:active,span[data-active=base-btn-white]:active{color:#878789!important;background-color:#ebebeb!important;border:none!important}a[data-active=base-btn-white]:active:after,button[data-active=base-btn-white]:active:after,div[data-active=base-btn-white]:active:after,li[data-active=base-btn-white]:active:after,span[data-active=base-btn-white]:active:after{content:"";position:absolute;width:199%;height:200%;border:1px solid #8c8c8c;-webkit-transform:scale3d(.5,.5,1);transform:scale3d(.5,.5,1);-webkit-transform-origin:0 0;transform-origin:0 0;pointer-events:none;border-radius:8px;top:0;left:0}@media only screen and (-webkit-device-pixel-ratio:1.5){a[data-active=base-btn-white]:active:after,button[data-active=base-btn-white]:active:after,div[data-active=base-btn-white]:active:after,li[data-active=base-btn-white]:active:after,span[data-active=base-btn-white]:active:after{-webkit-transform:scale(.5);transform:scale(.5)}}a[data-active=base-btn-ghost]:active,button[data-active=base-btn-ghost]:active,div[data-active=base-btn-ghost]:active,li[data-active=base-btn-ghost]:active,span[data-active=base-btn-ghost]:active{color:#c51e14!important;background-color:#fdf3f2!important}a[data-active=base-text-black]:active,button[data-active=base-text-black]:active,div[data-active=base-text-black]:active,li[data-active=base-text-black]:active,span[data-active=base-text-black]:active{color:#151516!important}a[data-active=base-text-red]:active,button[data-active=base-text-red]:active,div[data-active=base-text-red]:active,li[data-active=base-text-red]:active,span[data-active=base-text-red]:active{color:#c51e14!important}a[data-active=base-text-black-bg]:active,button[data-active=base-text-black-bg]:active,div[data-active=base-text-black-bg]:active,li[data-active=base-text-black-bg]:active,span[data-active=base-text-black-bg]:active{background-color:rgba(0,0,0,.08)!important}@media only screen and (min-device-height:812px){#hzqMRksL{bottom:calc(.76rem + constant(safe-area-inset-bottom));bottom:calc(.76rem + env(safe-area-inset-bottom))}.ZYytW4MA{bottom:calc(-.76rem + constant(safe-area-inset-bottom));bottom:calc(-.76rem + env(safe-area-inset-bottom))}.CV6NcT6u{bottom:calc(.76rem + constant(safe-area-inset-bottom));bottom:calc(.76rem + env(safe-area-inset-bottom))}._2zLUXqkU{padding-bottom:calc(0px + constant(safe-area-inset-bottom));padding-bottom:calc(0px + env(safe-area-inset-bottom))}}#main{background-color:#0000}.enable-select{-webkit-user-select:text;-o-user-select:text;user-select:text}.goods-container-v2{position:relative;width:100%;max-width:768px;min-height:100%;margin:0 auto;padding:0 0 .54rem;overflow-x:hidden}.goods-container-v2.not-sale{background-color:#f4f4f4;min-height:100vh}@media only screen and (min-device-height:812px){.goods-container-v2{padding-bottom:calc(.54rem + constant(safe-area-inset-bottom));padding-bottom:calc(.54rem + env(safe-area-inset-bottom))}}._3Gf6W74L{background-color:#fff;overflow:hidden}._2atM6O_-{background-color:#f4f4f4}._1pRx7JiJ{visibility:hidden}.YqFujcx6{background-color:#fff;height:100vh;overflow-x:hidden;overflow-y:scroll}::-webkit-scrollbar{display:none;width:0;height:0}@media only screen and (max-width:480px){html{font-size:128px}}@media only screen and (max-width:414px){html{font-size:110.4px}}@media only screen and (max-width:412px){html{font-size:109.86667px}}@media only screen and (max-width:400px){html{font-size:106.66667px}}@media only screen and (max-width:393px){html{font-size:104.8px}}@media only screen and (max-width:375px){html{font-size:100px}}@media only screen and (max-width:360px){html{font-size:96px}}@media only screen and (max-width:345px){html{font-size:92px}}@media only screen and (max-width:320px){html{font-size:85.33333px}}html{-webkit-text-size-adjust:none;font-size:26.66667vw}@media only screen and (min-width:768px){html{font-size:204.8px}}*{border:0;-webkit-tap-highlight-color:transparent;outline:0;margin:0;padding:0}*,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body,html{width:100%;height:100%;font-family:PingFangSC-Regular,Helvetica,STHeiti STXihei,Microsoft YaHei,Microsoft JhengHei,Arial}body{margin:0}blockquote,body,button,dd,dl,dt,fieldset,form,h1,h2,h3,h4,h5,h6,hr,input,legend,li,ol,p,pre,td,textarea,th,ul{vertical-align:baseline;border:0 none;list-style:outside none none}em,i{font-style:normal}ol,ul{list-style:none}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{color:#333;background-color:transparent;text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}a:active,a:hover,a:visited{text-decoration:none;outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0;max-width:100%;width:auto;height:auto;vertical-align:top}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;resize:none}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}.icon{font-style:normal;font-smoothing:antialiased}body{background:#f4f4f4;color:#666;font-size:12px;line-height:1.5;margin:auto;max-width:768px;-webkit-user-select:none;user-select:none}.container{position:relative;width:100%;max-width:768px;min-height:100%;margin:0 auto;padding:0 0 49px;background-color:#f4f4f4}.pdd-go-to-app .icon{font-family:icomoon-comm;font-style:normal}.font-center{font-family:PingFangSC-Regular,STHeiti STXihei,Microsoft YaHei,Microsoft JhengHei}@font-face{font-family:icomoon-comm;src:url("https://funimg.pddpic.com/fonts/comm_iconfont_20210701.ttf");font-weight:400;font-style:normal;line-height:1}@font-face{font-family:icomoon;src:url("https://funimg.pddpic.com/fonts/iconfont_20180706.ttf");font-weight:400;font-style:normal;line-height:1}</style>
    <script>!function(n){(n.__pft=n.__pft||{}).inlineCssEnd=+new Date}(window);</script>
    </head>
    <body>
    <script>!function(n){(n.__pft=n.__pft||{}).bodyLoadTime=+new Date}(window);</script>
    <script>!function(t){var n=t._plt=t._plt||[];n.push(["tm","fp",+new Date]),document.addEventListener("DOMContentLoaded",function(){n.push(["tm","dr",+new Date])}),t.addEventListener("load",function(){n.push(["tm","ld",+new Date])})}(window);</script>
    <div id="main" class="container"><span></span></div>
    <script>
        window.rawData={"store":{"errorRedirectUrl":"\u002F","isPre":false,"$likeMallText":"关注","$likeMallEntryTip":"关注的店铺可在个人中心的“店铺关注”入口查看","preRenderBannerSrc":null,"preRenderHideNoFirstScreenContent":false,"preRenderShowMock":false,"initDataObj":{"needLogin":true},"extra":{"mallActiveTimeText":""},"isNativePlatform":false,"isLiteNativePlatform":false,"isTinyNativePlatform":false,"categoryCouponInfo":{},"popupModalElement":null,"isIOS":false,"isWhiteFont":false,"isTransparentBar":false,"isShowFailingGroupHint":false,"isWeChatMiniProgram":false,"isShowFastGroupBuyTip":false,"skuOcExtend":{},"bannerState":{"currentIndex":0,"goToPageIndex":0,"hasShowedSimpleGoods":false,"simpleGoodsList":[]},"ifHigherMallInfo":false,"ifHasPushState":false,"animationControllers":[],"animationGroupTimer":null,"mallDetailInfo":{},"viewCtx":{},"detailsIsInner":true,"funcAssemblySet":{},"isServerRendered":true,"isFinishInitLoading":true,"isPreClientDataFetch":false,"$isSupportWebp":false,"goodsCommentsInLayerGrey":false,"goodsSkuImageHotGrey":false,"isDDMCMiniProgram":false}};
    </script>
    <script>
        window.leo={"data":{"goods_prerender_oc":"B","goods_prefetch_order_checkout":"600","goods_guide_wait_time":"20000","goods_guide_present_time":"5000","raf_load_js":"A","regions_new":"A","allow_oc_hosts":"[\"mobile.pinduoduo.com\"]","forward_oc_host":"mobile.yangkeduo.com","oc_comp_or_remote":"{\"ios\": \"remote\", \"android\": \"remote\"}","shoes_stream_render":"B","fast_group_buy_qa":"B","goods_rec_offset":"B","comm_toast_by_url_params":"1","goods_direct_order_repay_modify_panel":"1","goods_direct_order_mianmi_v2":"A","goods_direct_order_switch_wechat_if_sign_xyhf_failed":"A","address_line":"0","ignore_show_sku_selector":"0","force_app_by_url_params":"1","chat_active_duration":"A","long_banner_mode":"B","goods_bottom_after_coupon_refresh":"1","use_best_promotion":"B","use_pay_promotion":"1","bottom_mall_icon_style":"B","raw_back_banner_url":"B","wx_goto_app_enforce":"C","live_coupon_sku_selector":"C","comment_projector_back":"A","comment_img_size_opt":"B","goods_comments_layer":"B","goods_sku_image_hot":"B","goods_direct_order_goods_label":"B","sku_guide_xyhf_countdown":"0","living_validation_url":"https:\u002F\u002Frenzheng.pinduoduo.com\u002Fliving-validation\u002Fliving-validation.html","use_h5_face_cert":"1","goods_direct_order_gbs":"1","balance_not_enough_to_mianmi":"1","pay_canceled_to_xyhf":"1","apply_duoduo_pay_cancel_to_mianmi":"1","sku_mask":"B","can_refresh_after_order":"0"},"csrFallback":false,"fallbackData":{}};
    </script>
    <script>
        window.__webpack_public_path__="https://static.pddpic.com/";
    </script>
    <script>
        var pft = window.__pft = window.__pft || {};
        pft.nodePerf = {};
        pft.reqId = "";
        pft.isCSR = false;
        pft.isFallbackCSR = false;
    </script>
        <script>
            window.__NAVIGATION_MAP__={"download.html":"matthew_download.html","market_download.html":"undefined.html","down_market_download.html":"undefined.html","comm_order_snapshot.html":"undefined.html","miff_transplantation_pretence.html":"refresh_slew_forlorn.html","group185.html":"group186.html","pjlkvgcf.html":"transac_virtual_card_pwd.html","ddplteec.html":"transac_virtual_card_pwd.html","svideo_personal.html":"fyxmkief.html?page_key=1","goods_express.html":"psnl_goods_help.html?_t_module_name=goods_express","search_view.html":"relative_goods.html?__rp_name=search_view"};
        </script>
        <script>
            window.__GLOBAL_LEO_CONFIG__={"universalLinkDomain":{"value":"app1.yangkeduo.com"}};
        </script>
        <script>
            window.__ERROR_SAMPLE_RATE__ = 1;
        </script>
        <script>
            window.__CMT_HOST__ = 'apm.pinduoduo.com';
        </script>
        <script>
            window.__CMT_AMPLIFY_RATE__ = 1;
        </script>
        <script>
            window.__CDN_IMG__={"useIpFallback":true,"retryLimit":3,"backupDomainConfigMap":{"dl.pddpic.com":{"dl-1.pddpic.com":50,"dl-2.pddpic.com":50},"t00img.yangkeduo.com":{"img-1.pddpic.com":30,"img-2.pddpic.com":30,"img-3.pddpic.com":20,"img-4.pddpic.com":20},"t13img.yangkeduo.com":{"promotion-1.pddpic.com":50,"promotion-2.pddpic.com":30,"promotion-3.pddpic.com":20},"t20img.yangkeduo.com":{"avatar2-1.pddpic.com":45,"avatar2-2.pddpic.com":45,"avatar2-3.pddpic.com":10},"t22img.yangkeduo.com":{"review-1.pddpic.com":50,"review-2.pddpic.com":50,"review-3.pddpic.com":0},"images.pinduoduo.com":{"images-1.pinduoduo.com":60,"images-2.pinduoduo.com":40},"img.pddpic.com":{"img-1.pddpic.com":30,"img-2.pddpic.com":30,"img-3.pddpic.com":20,"img-4.pddpic.com":20},"t04img.yangkeduo.com":{"t04img-b.yangkeduo.com":100},"commimg.pddpic.com":{"commimg-1.pddpic.com":50,"commimg-2.pddpic.com":50},"promotion.pddpic.com":{"promotion-1.pddpic.com":50,"promotion-2.pddpic.com":30,"promotion-3.pddpic.com":20},"funimg.pddpic.com":{"funimg-1.pddpic.com":50,"funimg-2.pddpic.com":50},"avatar.pddpic.com":{"avatar-b.pddpic.com":100},"avatar2.pddpic.com":{"avatar2-1.pddpic.com":50,"avatar2-2.pddpic.com":50},"avatar3.pddpic.com":{"avatar3-1.pddpic.com":50,"avatar3-2.pddpic.com":50},"review.pddpic.com":{"review-1.pddpic.com":50,"review-2.pddpic.com":50,"review-3.pddpic.com":0}}};
        </script>
            <link href="https://static.pddpic.com/assets/css/react_goods_14478b1cb32464fc3d7e.css" rel="stylesheet" >
    <script id="__LOADABLE_REQUIRED_CHUNKS__" type="application/json" crossorigin="anonymous">[]</script>
            <script type="text/javascript" src="https://static.pddpic.com/assets/js/vendor_3a101dbde244a7c6a8c4_1026.js" crossorigin="anonymous"></script><script type="text/javascript" src="https://static.pddpic.com/assets/js/react_pdd_3b7fde8d8051b49385d6_1026.js" crossorigin="anonymous"></script><script type="text/javascript" src="https://static.pddpic.com/assets/js/react_goods_8c8de440d4ab469ad81b_1026.js" crossorigin="anonymous"></script><script type="text/javascript" src="https://static.pddpic.com/assets/js/react_anti_co_9330629aaa98519b1cfc_1026.js" crossorigin="anonymous"></script>
            <script>
                window.__SPEPKEY__ = 'pdd-web-commodity';
            </script>
            <script crossorigin="anonymous" src=https://static.pddpic.com/assets-rcf/b9216582_d6d4d0f0c5d21ffbb6d2be90e3956413.js ></script>
    <script>window;</script>
    </body>
</html>
null
Process finished with exit code 0
<html>
    <head>
    <script src="js/test.js"></script>
    </head>
    <body>
        <h1>test</h1>
    </body>
</html>
kpl/kpl_api.py
@@ -93,8 +93,8 @@
# 市场行情-精选
def getMarketJingXuanRealRankingInfo(orderJingE_DESC=True):
    data = f"Order={1 if orderJingE_DESC else 0}&a=RealRankingInfo&st=20&apiv=w32&Type=5&c=ZhiShuRanking&PhoneOSNew=1&DeviceID=a38adabd-99ef-3116-8bb9-6d893c846e23&VerSion=5.8.0.2&Index=0&ZSType=7&"
def getMarketJingXuanRealRankingInfo(page=1, orderJingE_DESC=True):
    data = f"Order={1 if orderJingE_DESC else 0}&a=RealRankingInfo&st=50&apiv=w32&Type=5&c=ZhiShuRanking&PhoneOSNew=1&DeviceID=a38adabd-99ef-3116-8bb9-6d893c846e23&VerSion=5.8.0.2&Index={page - 1}&ZSType=7&"
    response = __base_request("https://apphq.longhuvip.com/w1/api/index.php",
                              data=data)
    if response.status_code != 200:
@@ -183,6 +183,18 @@
    return data["info"]
def getMarketStrong():
    """
    获取市场强度
    :return:
    """
    result = __base_request("https://apphwhq.longhuvip.com/w1/api/index.php",
                            f"a=DiskReview&apiv=w35&c=HomeDingPan&VerSion=5.13.0.0&PhoneOSNew=1&DeviceID=d6f20ce9-fa08-31c9-a493-536ebb8e9773&")
    data = result.text
    data = json.loads(data)
    return int(data["info"]["strong"])
def test_l2():
    code = "600981"
    count = 0
@@ -197,4 +209,4 @@
if __name__ == '__main__':
    print(getMarketFelling())
    print(int(getMarketStrong()))
main.py
@@ -25,12 +25,12 @@
import constant
import gui_wx
from network_delegate_manager import LocalKanPanNetworkDelegate
from utils import network_util, xgb_api, ths_util, ths_ocr_util
import setting
from utils import tool
import win32_util
from kpl.kpl_data_manager import KPLLimitUpDataManager
from utils.network_delegate_manager import LocalKanPanNetworkDelegate
URL_MSG_LIST = f"http://{constant.WEB_HOST}/kp/msg_list.html"
@@ -466,10 +466,6 @@
        action.triggered.connect(__show_second_window)
        view_.addAction(action)
        action = QAction("&打开悬浮盯盘", self)
        action.triggered.connect(__show_float_callback)
        view_.addAction(action)
        action = QAction("&打开历史消息", self)
        action.triggered.connect(__show_his_msg_window)
        view_.addAction(action)
@@ -477,8 +473,6 @@
        view_ = menubar.addMenu('&代码管理')
        view_.aboutToShow.connect(__manage_code)
        view_ = menubar.addMenu('&打开分时')
        view_.aboutToShow.connect(__show_main_callback)
    def __init__(self, wx_pipe):
        super().__init__()
res/codes.txt
@@ -1 +1,5 @@
600250
600556
603081
603887
002348
002858
res/setting.conf
@@ -1,10 +1,10 @@
[config]
stay_on_top = 1
window_info = [[-1711, 194, 1280, 800], [1473, 621, 320, 195]]
xgb_window_info = [-2404, 323, 1144, 966]
xgb_window_info = [-1567, 208, 1146, 987]
window_watch_float_info = [146, 419, 435, 220]
window_tick_info = [280, 40, 800, 1000]
kp_second_window_info = [-829, 117, 627, 1064]
kp_second_window_info = [-961, 106, 558, 942]
code_attribute_window_info = [-650, 315, 291, 278]
client = hxh
float_frame_auto_focus = 1
test/test_block.py
New file
@@ -0,0 +1,31 @@
bs = set()
with open("C:\\Users\\Administrator\\Desktop\\板块对应.txt", encoding="utf-8") as f:
    lines = f.readlines()
    for line in lines:
        if line:
            line = line.replace(",", ",").replace("丨","|").strip()
            if line.find("|") >= 0:
                bs |= set(line.split("|")[0].split(","))
                line = line[1]
            bs |= set(line.split(","))
    # print(bs)
bs1=set()
with open("C:\\Users\\Administrator\\Desktop\\板块对应1.txt", encoding="utf-8") as f:
    lines = f.readlines()
    for line in lines:
        if line:
            line = line.replace(",", ",").strip()
            if line.find("|") >= 0:
                bs1 |= set(line.split("|")[0].split(","))
                line = line[1]
            bs1 |= set(line.split(","))
    # print(bs1)
bs2 = bs-bs1
print(len(bs2))
for b in bs2:
    print(b)
test_ths.py
@@ -1,5 +1,17 @@
import array
import win32con
import win32gui
from utils import ths_util
if __name__ == "__main__":
    pass
    win = 0x000414F8
    code_input = win32gui.GetDlgItem(win, 0x00000408)
    # hwnd = 0x0000000000021578
    bufSize = win32gui.SendMessage(code_input, win32con.WM_GETTEXTLENGTH, 0, 0) + 1
    buffer = array.array('b', b'\x00\x00' * bufSize)
    win32gui.SendMessage(code_input, win32con.WM_GETTEXT, bufSize, buffer)
    text = win32gui.PyGetString(buffer.buffer_info()[0], bufSize - 1)
    ftext = text.replace("\x00", "").strip()
    print(ftext)
utils/network_delegate_manager.py
File was renamed from network_delegate_manager.py
@@ -115,12 +115,18 @@
            result = kpl_util.parseMarketIndustry(result)
        elif type_ == 2:
            # 精选,主力净额倒序
            result = kpl_api.getMarketJingXuanRealRankingInfo(True)
            result = kpl_util.parseMarketJingXuan(result)
            result = []
            for p in range(2):
                result_ = kpl_api.getMarketJingXuanRealRankingInfo(p + 1, True)
                result_ = kpl_util.parseMarketJingXuan(result_)
                result.extend(result_)
        elif type_ == 3:
            # 精选,主力净额顺序
            result = kpl_api.getMarketJingXuanRealRankingInfo(False)
            result = kpl_util.parseMarketJingXuan(result)
            result = []
            for p in range(2):
                result_ = kpl_api.getMarketJingXuanRealRankingInfo(p + 1, False)
                result_ = kpl_util.parseMarketJingXuan(result_)
                result.extend(result_)
        fresult = []
        forbidden_plates = []
        for d in result:
@@ -288,6 +294,7 @@
    @classmethod
    def __get_kpl_market_feelings(cls):
        market_feelings = kpl_api.getMarketFelling()
        market_strong = kpl_api.getMarketStrong()
        ps = [('涨停', market_feelings['ZT'], 'red')]
        ps.append(('>%7', int(market_feelings['8']) + int(market_feelings['9']) + int(
            market_feelings['10']), 'red'))
@@ -302,8 +309,9 @@
        ps.append(
            ('7%<', int(market_feelings['-8']) + int(market_feelings['-9']) + int(market_feelings['-10']), 'green'))
        ps.append(('跌停', market_feelings['DT'], 'green'))
        fdata = {"map": ps, "SJZT": market_feelings['SJZT'], "SJDT": market_feelings['SJDT'],
                 "SZJS": market_feelings['SZJS'], "XDJS": market_feelings['XDJS'], "sign": market_feelings['sign']}
        fdata = {"strong": market_strong, "map": ps, "SJZT": market_feelings['SJZT'], "SJDT": market_feelings['SJDT'],
                 "SZJS": market_feelings['SZJS'], "XDJS": market_feelings['XDJS'], "sign": market_feelings['sign'],
                 "qscln": market_feelings['qscln'] // 10000, "q_zrcs": market_feelings['q_zrcs'] // 10000}
        # 获取市场情绪
        return json.dumps(
            {"code": 0, "data": fdata}), True
@@ -357,7 +365,7 @@
            d[1][2] = rate_dict[d[1][0]]
            d[0][0] = d[0][0].split('.')[1]
            d[1][0] = d[1][0].split('.')[1]
        datas.sort(key=lambda x: int(x[2].replace(":","")), reverse=True)
        datas.sort(key=lambda x: int(x[2].replace(":", "")), reverse=True)
        # 获取今日正股涨停的可转债列表
        return json.dumps(
@@ -379,7 +387,6 @@
        else:
            return json.dumps(
                {"code": 1, "msg": '同花顺不能买入'}), True
if __name__ == "__main__":
utils/opencv_util.py
@@ -168,7 +168,7 @@
        plt.show()
    clip_img = img[start_row:end_row, codes_pos[0][0]:codes_pos[-1][1]]
    cv2.imwrite("test1.png", clip_img)
    # cv2.imwrite("test1.png", clip_img)
    return clip_img, img_detail
    # print(clip_img.shape)
utils/ths_ocr_util.py
@@ -18,7 +18,11 @@
    识别同花顺代码
    :return:
    """
    hwnd = ths_util.get_ths_main_content_hwnd()
    start_time = time.time()
    time_use_list = []
    hwnd = ths_util.get_ths_main_content_hwnd_cached()
    time_use_list.append(("获取句柄", time.time() - start_time))
    start_time = time.time()
    if not hwnd:
        raise Exception("看盘页面句柄未获取到")
    # 句柄截图
@@ -27,26 +31,38 @@
    # 格式为:(上边距,宽度,高度,缩放倍数)
    rect_ = setting.get_ths_auto_code_rect()
    time_use_list.append(("获取配置参数", time.time() - start_time))
    start_time = time.time()
    # 测试
    # if len(rect_) > 3:
    #     scale = rect_[3]
    width = int((rect[2] - rect[0]) * scale)
    left = width - rect_[1]
    img = win32_util.window_capture(hwnd, (left, rect_[0], width - 1, rect_[0] + rect_[2]), scale, always_save)
    if int(time.time()) % 5 == 0:
        cv2.imwrite(f"test2.png", opencv_util.gray_img(img))
    if always_save:
        cv2.imwrite(f"test22.png", opencv_util.gray_img(img))
    time_use_list.append(("截图", time.time() - start_time))
    start_time = time.time()
    if always_save:
        cv2.imwrite(f"test_clip_gray.png", opencv_util.gray_img(img))
    clip_img, details = opencv_util.clip_ths_code_area(img)
    if always_save:
        cv2.imwrite(f"test_clip_gray_clip.png", clip_img)
    time_use_list.append(("分割", time.time() - start_time))
    start_time = time.time()
    code = ocr_util.recognize_code(clip_img)
    use_time = round((time.time() - start_time) * 1000)
    time_use_list.append(("识别", time.time() - start_time))
    start_time = time.time()
    if code is None:
        code = ocr_util.recognize_code(img)
        time_use_list.append(("再次识别", time.time() - start_time))
        start_time = time.time()
    if code != last_ocr_code[0]:
        print("保存图片", code)
        debug_logger.info(f"代码识别结果:{code} 识别时间:{use_time}ms")
        msg = " ".join( [f"{x[0]}:{int(x[1]*1000)}ms" for x in time_use_list])
        debug_logger.info(f"代码识别结果:{code} {msg}")
        last_ocr_code[0] = code
        cv2.imwrite(f"datas/test/{code}.png", opencv_util.gray_img(img))
        if always_save:
            cv2.imwrite(f"datas/test/{code}.png", opencv_util.gray_img(img))
    return code
utils/ths_util.py
@@ -79,6 +79,23 @@
    return None
__cache_hwnd = {}
def get_ths_main_content_hwnd_cached():
    """
    获取同花顺主页句柄
    :return:
    """
    target_hwnd = __cache_hwnd.get("ths_main_content_hwnd")
    if target_hwnd and win32_util.is_visible(target_hwnd):
        return target_hwnd
    target_hwnd = get_ths_main_content_hwnd()
    if target_hwnd:
        __cache_hwnd["ths_main_content_hwnd"] = target_hwnd
    return target_hwnd
# 批量点击事件
def betch_click(hwnd, ps, space_time=0.5):
    for p in ps:
@@ -121,7 +138,7 @@
        origin_hwnd = hwnds[0]
        for w in hwnds:
            title = win32_util.getText(w)
            if title.find("同花顺")>=0:
            if title.find("同花顺") >= 0:
                origin_hwnd = w
                break
        input_code(origin_hwnd, num_str[:1])
win32_util.py
@@ -7,6 +7,10 @@
import win32ui
def is_visible(hwnd):
    return win32gui.IsWindowVisible(hwnd)
def getText(hwnd):
    bufSize = win32gui.SendMessage(hwnd, win32con.WM_GETTEXTLENGTH, 0, 0) + 1
    buffer = array.array('b', b'\x00\x00' * bufSize)
@@ -86,12 +90,23 @@
        saveDC.BitBlt((0, 0), (ow, oh), mfcDC, (0, 0), win32con.SRCCOPY)
        # 保存数据
        saveBitMap.SaveBitmapFile(saveDC, "test_origin.png")
        # 内存释放
        win32gui.DeleteObject(saveBitMap.GetHandle())
        saveDC.DeleteDC()
        mfcDC.DeleteDC()
        win32gui.ReleaseDC(hwnd, hWndDC)
        #########################保存最新的数据##########################
        hWndDC = win32gui.GetWindowDC(hwnd)
        mfcDC = win32ui.CreateDCFromHandle(hWndDC)
        saveDC = mfcDC.CreateCompatibleDC()
        # 创建位图对象准备保存图片
        saveBitMap = win32ui.CreateBitmap()
        saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)
        # 将截图保存到saveBitMap中
        saveDC.SelectObject(saveBitMap)
        saveDC.BitBlt((0, 0), (ow, h), mfcDC, (rect[0], rect[1]), win32con.SRCCOPY)
        saveBitMap.SaveBitmapFile(saveDC, "test_origin1.png")
        saveBitMap.SaveBitmapFile(saveDC, "test_origin_clip.png")
    signedIntsArray = saveBitMap.GetBitmapBits(True)