diff --git a/comment/KbAIr7yUT.csv b/comment/KbAIr7yUT.csv
deleted file mode 100644
index f55f55e..0000000
--- a/comment/KbAIr7yUT.csv
+++ /dev/null
@@ -1,34 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/2943941954,一滴糯米,女,广东,225,334,109,可以问问是哪个采访吗!!!最近太忙了,0,2021-04-19 09:55
-https://weibo.cn//u/5457306733,今天吃好吃的了没_,女,北京,687,328,79,耳边又响起那句“唱出关于我平凡梦想的苦辣酸甜”,5,2021-04-19 12:22
-https://weibo.cn//u/2296716800,霍麻辣的亲嫂子er,女,广东,5193,522,2557,确实会逐渐觉得世界把人变得好复杂,但是你的歌你的善良真诚教会了我该带着善意理解这个世界,带着善意爱自己。,5,2021-04-19 14:21
-https://weibo.cn//u/5706470971,半糖去冰qwq,女,江苏,487,416,86, 举报 赞[0] 回复 今天 12:51 来自网页,0,2021-04-20 12:51
-https://weibo.cn//u/2296716800,霍麻辣的亲嫂子er,女,广东,5193,522,2557,确实会逐渐觉得世界把人变得好复杂,但是你的歌你的善良真诚教会了我该带着善意理解这个世界,带着善意爱自己。,5,2021-04-19 14:21
-https://weibo.cn//u/6604382005,秋名山卐大风车,女,其他,804,324,20,带着善意理解世界 也要善意的理解自己 李润祺你菩萨转世,0,2021-04-19 12:41
-https://weibo.cn//u/6177388534,杼思,女,内蒙古,174,49,19,用善良与温柔对待世界,0,2021-04-19 12:38
-https://weibo.cn//u/5457306733,今天吃好吃的了没_,女,北京,687,328,79,耳边又响起那句“唱出关于我平凡梦想的苦辣酸甜”,5,2021-04-19 12:22
-https://weibo.cn//u/5634788357,焕焕_Galaxy,女,北京,22536,2435,1058,善良而又温柔的李润祺,0,2021-04-19 11:58
-https://weibo.cn//u/2745123370,孙小迷糊琪,女,海外,1397,66,278,善良的人 终会被善待和被爱,0,2021-04-19 10:47
-https://weibo.cn//u/3940210301,船长大小姐,女,上海,1401,487,196,不求顶天立地,但求无愧于心,希望世界也能给你最大的善意,0,2021-04-19 10:33
-https://weibo.cn//u/7510290370,冰藍QI,女,香港,517,138,17,又通透又善良的祺祺。年紀那麼少,真令人佩服,0,2021-04-19 10:14
-https://weibo.cn//u/5246681485,海苔小里,女,山东,824,227,39,心里有爱的祺祺,0,2021-04-19 10:13
-https://weibo.cn//u/2874304345,_咕咕酱,女,四川,1949,256,110,回复@一滴糯米:新潮 负责文案编辑的小姐姐,0,2021-04-19 10:03
-https://weibo.cn//u/5210289978,鹿茸倾,女,湖南,3911,1530,212,小李充满善良和光啊,0,2021-04-19 09:58
-https://weibo.cn//u/2943941954,一滴糯米,女,广东,225,334,109,可以问问是哪个采访吗!!!最近太忙了,0,2021-04-19 09:55
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/2943941954,一滴糯米,女,广东,226,334,109,可以问问是哪个采访吗!!!最近太忙了,0,2021-04-19 09:55
-https://weibo.cn//u/5457306733,今天吃好吃的了没_,女,北京,687,328,79,耳边又响起那句“唱出关于我平凡梦想的苦辣酸甜”,5,2021-04-19 12:22
-https://weibo.cn//u/2296716800,霍麻辣的亲嫂子er,女,广东,5193,522,2557,确实会逐渐觉得世界把人变得好复杂,但是你的歌你的善良真诚教会了我该带着善意理解这个世界,带着善意爱自己。,5,2021-04-19 14:21
-https://weibo.cn//u/5706470971,半糖去冰qwq,女,江苏,487,416,86, 举报 赞[0] 回复 今天 12:51 来自网页,0,2021-04-20 12:51
-https://weibo.cn//u/2296716800,霍麻辣的亲嫂子er,女,广东,5193,522,2557,确实会逐渐觉得世界把人变得好复杂,但是你的歌你的善良真诚教会了我该带着善意理解这个世界,带着善意爱自己。,5,2021-04-19 14:21
-https://weibo.cn//u/6604382005,秋名山卐大风车,女,其他,804,324,20,带着善意理解世界 也要善意的理解自己 李润祺你菩萨转世,0,2021-04-19 12:41
-https://weibo.cn//u/6177388534,杼思,女,内蒙古,174,49,19,用善良与温柔对待世界,0,2021-04-19 12:38
-https://weibo.cn//u/5457306733,今天吃好吃的了没_,女,北京,687,328,79,耳边又响起那句“唱出关于我平凡梦想的苦辣酸甜”,5,2021-04-19 12:22
-https://weibo.cn//u/5634788357,焕焕_Galaxy,女,北京,22536,2435,1058,善良而又温柔的李润祺,0,2021-04-19 11:58
-https://weibo.cn//u/2745123370,孙小迷糊琪,女,海外,1397,66,278,善良的人 终会被善待和被爱,0,2021-04-19 10:47
-https://weibo.cn//u/3940210301,船长大小姐,女,上海,1401,487,196,不求顶天立地,但求无愧于心,希望世界也能给你最大的善意,0,2021-04-19 10:33
-https://weibo.cn//u/7510290370,冰藍QI,女,香港,517,138,17,又通透又善良的祺祺。年紀那麼少,真令人佩服,0,2021-04-19 10:14
-https://weibo.cn//u/5246681485,海苔小里,女,山东,824,227,39,心里有爱的祺祺,0,2021-04-19 10:13
-https://weibo.cn//u/2874304345,_咕咕酱,女,四川,1949,256,110,回复@一滴糯米:新潮 负责文案编辑的小姐姐,0,2021-04-19 10:03
-https://weibo.cn//u/5210289978,鹿茸倾,女,湖南,3912,1530,212,小李充满善良和光啊,0,2021-04-19 09:58
-https://weibo.cn//u/2943941954,一滴糯米,女,广东,226,334,109,可以问问是哪个采访吗!!!最近太忙了,0,2021-04-19 09:55
diff --git a/comment/KbARcx4oy.csv b/comment/KbARcx4oy.csv
deleted file mode 100644
index d34dbdb..0000000
--- a/comment/KbARcx4oy.csv
+++ /dev/null
@@ -1,23 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/7220150687,要抱抱不要啵啵,女,江苏,127,27,13,NV的崽崽们,你们都是顶尖的!S2等你们,9,2021-04-18 09:58
-https://weibo.cn//u/5690650810,甜酒炖蛋太好吃了嗷,女,其他,9475,1588,74,4AM好好调整,下个赛季见,2,2021-04-18 09:52
-https://weibo.cn//u/5256090183,XTYMJQ,女,海外,5269,906,150,永远相信NV NV顶尖!!!,6,2021-04-18 09:58
-https://weibo.cn//tuwanpel,和平小师妹,女,北京,1622,138,8489,回复@小饺子花:下赛季一定可以做的更好的!,0,2021-04-18 11:15
-https://weibo.cn//u/7564503065,小饺子花,女,陕西,3,15,1,SMG等你们卷土重来,0,2021-04-18 11:10
-https://weibo.cn//u/6164794266,杜牧与江南,女,重庆,6,79,9,NV我们S2再战!,1,2021-04-18 11:08
-https://weibo.cn//u/7331727744,偽藝術家Willa,女,辽宁,162,256,27,永远相信NV!,0,2021-04-18 11:04
-https://weibo.cn//u/6442904315,哎是菲菲呀,女,其他,87,48,1,想知道微博投票没后续吗,0,2021-04-18 11:01
-https://weibo.cn//tuwanpel,和平小师妹,女,北京,1622,138,8489,回复@哪家烤鹅香:期待他们以更好的状态凯旋归来!,0,2021-04-18 10:54
-https://weibo.cn//tuwanpel,和平小师妹,女,北京,1622,138,8489,回复@冯冯颠颠:我们顶峰再见!,0,2021-04-18 10:51
-https://weibo.cn//u/6158334694,哪家烤鹅香,女,海外,184,186,17,nv我们下个赛季见 相信nv会逆风翻盘凯旋回归[加油],3,2021-04-18 10:51
-https://weibo.cn//tuwanpel,和平小师妹,女,北京,1622,138,8489,回复@Rolling_the_World:那些圈真的绝了,0,2021-04-18 10:49
-https://weibo.cn//u/7418943666,冯冯颠颠,女,其他,43,34,2,永远相信NV 等他们回来,4,2021-04-18 10:48
-https://weibo.cn//u/2817216440,Rolling_the_World,女,上海,8746,194,173,联盟的圈!意难平,3,2021-04-18 10:37
-https://weibo.cn//tuwanpel,和平小师妹,女,北京,1622,138,8489,回复@要抱抱不要啵啵:不在巅峰时慕名而来,不在低谷时转身离开,永远支持他们,1,2021-04-18 10:27
-https://weibo.cn//tuwanpel,和平小师妹,女,北京,1622,138,8489,回复@你是秃秃秃秃girl吗:崽崽们都很值得,0,2021-04-18 10:28
-https://weibo.cn//tuwanpel,和平小师妹,女,北京,1622,138,8489,回复@XTYMJQ:崽崽们都是最棒的,0,2021-04-18 10:27
-https://weibo.cn//tuwanpel,和平小师妹,女,北京,1622,138,8489,回复@甜酒炖蛋太好吃了嗷:期待下赛季四阿妹强势归来,0,2021-04-18 10:27
-https://weibo.cn//u/5256090183,XTYMJQ,女,海外,5269,906,150,永远相信NV NV顶尖!!!,6,2021-04-18 09:58
-https://weibo.cn//u/7220150687,要抱抱不要啵啵,女,江苏,127,27,13,NV的崽崽们,你们都是顶尖的!S2等你们,9,2021-04-18 09:58
-https://weibo.cn//u/6351583510,你是秃秃秃秃girl吗,男,其他,188,191,21,NV在我们心中都是顶尖!,5,2021-04-18 09:53
-https://weibo.cn//u/5690650810,甜酒炖蛋太好吃了嗷,女,其他,9475,1588,74,4AM好好调整,下个赛季见,2,2021-04-18 09:52
diff --git a/comment/KbB0YhBrL.csv b/comment/KbB0YhBrL.csv
deleted file mode 100644
index ec53629..0000000
--- a/comment/KbB0YhBrL.csv
+++ /dev/null
@@ -1,34 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/7530461662,禁萝star,女,河北,566,204,54,迪丽热巴李长歌,0,2021-04-18 10:42
-https://weibo.cn//u/5545329278,偏爱胖迪小盆友,女,江西,2729,323,170,回迪丽热巴李长歌,0,2021-04-18 10:42
-https://weibo.cn//u/7432779120,唯一人在心上,女,四川,2045,293,560,首页互评迪丽热巴李长歌互迪丽,0,2021-04-18 10:41
-https://weibo.cn//u/5941367031,大鸽的草帽2,女,其他,138,33,7,回【迪丽热巴长歌行】,0,2021-04-18 11:01
-https://weibo.cn//u/5634843496,小妩要养一只月亮,女,江苏,1823,263,45,迪丽热巴李长歌已回,0,2021-04-18 10:59
-https://weibo.cn//u/7576123694,大鸽的草帽1,女,其他,141,35,7,回【迪丽热巴长歌行】,0,2021-04-18 10:57
-https://weibo.cn//u/7458857228,大美女8的87,女,吉林,1553,76,20,回迪丽热巴李长歌【迪丽热巴长歌行】,0,2021-04-18 10:49
-https://weibo.cn//u/6390437837,dear柏丽特,女,海外,2202,330,189,互 迪丽热巴长歌长歌我爱你,0,2021-04-18 10:47
-https://weibo.cn//u/6032347195,小疯子洛宸1990,女,河南,9220,1194,76,【迪丽热巴长歌行】,0,2021-04-18 10:45
-https://weibo.cn//u/5533140214,Serendipity1312,女,湖南,556,156,73,互评迪丽热巴,0,2021-04-18 10:45
-https://weibo.cn//u/6098131995,FANTASYG_wsam1,女,其他,1119,138,8,【迪丽热巴长歌行】,0,2021-04-18 10:43
-https://weibo.cn//u/7530461662,禁萝star,女,河北,566,204,54,迪丽热巴李长歌,0,2021-04-18 10:43
-https://weibo.cn//u/5545329278,偏爱胖迪小盆友,女,江西,2729,323,170,回迪丽热巴李长歌,0,2021-04-18 10:43
-https://weibo.cn//u/6568320265,刺猬头目,女,江苏,1368,254,59,迪丽热巴回,0,2021-04-18 10:42
-https://weibo.cn//u/7432779120,唯一人在心上,女,四川,2045,293,560,首页互评迪丽热巴李长歌互迪丽,0,2021-04-18 10:42
-https://weibo.cn//u/6200570622,我是过期小盆友,女,海外,2925,570,25,回迪丽热巴李长歌,0,2021-04-18 10:42
-https://weibo.cn//u/7457486913,老王的酸奶疙瘩0603,女,广东,413,56,1,迪丽热巴李长歌回,0,2021-04-18 10:42
-https://weibo.cn//u/5977887836,Z嘀嘀叭叭,女,广东,678,152,73,回你 迪丽热巴长歌行,0,2021-04-18 10:41
-https://weibo.cn//u/7476496949,樱桃小奶罐,女,吉林,155,51,3,回,迪丽热巴李长歌,0,2021-04-18 10:41
-https://weibo.cn//u/6308506792,是你搞不懂的人,男,其他,1683,448,24,长歌行迪丽热巴李长歌,回你了,0,2021-04-18 10:41
-https://weibo.cn//u/7432058192,惜文-恨天,女,宁夏,1046,1379,29,首页互评,互评互评互评互评互评,0,2021-04-18 10:41
-https://weibo.cn//u/6008926557,烧饼夹个串儿,女,其他,6720,327,544,助攻不用回,0,2021-04-18 10:40
-https://weibo.cn//u/6343126442,小桔子吖D,女,海外,2610,94,50,回你啦 迪丽热巴李长歌,0,2021-04-18 10:40
-https://weibo.cn//u/5504419668,619Jane,女,其他,1566,86,16,回,迪丽热巴李长歌,0,2021-04-18 10:40
-https://weibo.cn//u/5622706410,Dear-Vision,男,新疆,2389,243,20,互 【迪丽热巴长歌行】,0,2021-04-18 10:40
-https://weibo.cn//u/6354891572,Hmasing,女,湖北,195,89,24,首页互谢谢迪丽热巴乔晶晶,0,2021-04-18 10:40
-https://weibo.cn//u/5115991916,溜掉最可爱的鱼,女,海外,848,185,511,迪丽热巴李长歌,0,2021-04-18 10:40
-https://weibo.cn//u/5707064994,大鸽的草帽,男,其他,147,45,6, dlrb,0,2021-04-18 10:39
-https://weibo.cn//u/2306864175,她喜欢夏天D-Q,女,山东,992,377,138,迪丽热巴李长歌,0,2021-04-18 10:39
-https://weibo.cn//u/6461519669,武钟卢_gmul,男,湖南,195,119,18,首页互评谢谢,0,2021-04-18 10:39
-https://weibo.cn//u/5674909888,长歌行太绝了,女,新疆,2307,248,76,迪丽热巴李长歌首页互,0,2021-04-18 10:39
-https://weibo.cn//u/6869892910,Dear-某人w,女,湖南,342,149,75,助攻 不用回【迪丽热巴长歌行】,0,2021-04-18 10:38
-https://weibo.cn//u/6667184302,无聊的小dou包,女,广东,1939,208,26,迪丽热巴李长歌 首页互谢谢,0,2021-04-18 10:38
diff --git a/comment/KbB1biN2i.csv b/comment/KbB1biN2i.csv
deleted file mode 100644
index 55c03fa..0000000
--- a/comment/KbB1biN2i.csv
+++ /dev/null
@@ -1,14 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/3242269022,汤圆小可爱x,女,浙江,485,535,105,@和平精英,2,2021-04-18 10:43
-https://weibo.cn//u/2909823202,静了个静呀,女,江苏,223,489,192,4➕1的话 玩家都开心了 光子也不少赚 多好呀,1,2021-04-18 10:45
-https://weibo.cn//u/6079782306,美国边远小岛的魔法公主,女,其他,332,93,589,小丑鱼的图好赞,1,2021-04-18 10:42
-https://weibo.cn//u/3230629992,2xxAce,女,河北,128,171,2705,回复@2xxAce:upupup,0,2021-04-18 11:16
-https://weibo.cn//u/3230629992,2xxAce,女,河北,128,171,2705,@和平精英,0,2021-04-18 11:15
-https://weibo.cn//u/6088451987,遗憾篇,女,其他,24,38,52,@和平精英,1,2021-04-18 10:52
-https://weibo.cn//u/2909823202,静了个静呀,女,江苏,223,489,192,回复@静了个静呀:@和平精英,0,2021-04-18 10:46
-https://weibo.cn//u/2909823202,静了个静呀,女,江苏,223,489,192,4➕1的话 玩家都开心了 光子也不少赚 多好呀,1,2021-04-18 10:45
-https://weibo.cn//u/3242269022,汤圆小可爱x,女,浙江,485,535,105,@和平精英,2,2021-04-18 10:43
-https://weibo.cn//u/6079782306,美国边远小岛的魔法公主,女,其他,332,93,589,小丑鱼的图好赞,1,2021-04-18 10:42
-https://weibo.cn//u/5664996871,有花呀有花,女,安徽,109,314,67,我觉得光子是为了吊人胃口 还有下一次返场,1,2021-04-18 10:40
-https://weibo.cn//u/6065295945,冰冻Natalie,女,黑龙江,188,505,65, 4+1 4+1 4+1 实在不行3+1也行,1,2021-04-18 10:40
-https://weibo.cn//u/5664996871,有花呀有花,女,安徽,109,314,67,@和平精英,1,2021-04-18 10:39
diff --git a/comment/KbB1tkhy7.csv b/comment/KbB1tkhy7.csv
deleted file mode 100644
index 2f1ccbe..0000000
--- a/comment/KbB1tkhy7.csv
+++ /dev/null
@@ -1,8 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//wwh1221,WH_WONG,男,香港,651,736,410,回复@小罗要勤奋学日语:都行,0,2021-04-18 10:44
-https://weibo.cn//u/5099003208,小罗要勤奋学日语,女,广东,301,88,191,95年怕是能滴到很多妹妹,0,2021-04-18 10:40
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/2867675420,戒糖戒躁戒懒,女,四川,1352,285,169,我是99年妹妹,0,2021-04-18 11:14
-https://weibo.cn//MyGintoki,-CMPC-,女,其他,1787,232,759,娱乐我擅长,0,2021-04-18 11:12
-https://weibo.cn//wwh1221,WH_WONG,男,香港,651,736,410,回复@小罗要勤奋学日语:都行,0,2021-04-18 10:44
-https://weibo.cn//u/5099003208,小罗要勤奋学日语,女,广东,301,88,191,95年怕是能滴到很多妹妹,0,2021-04-18 10:40
diff --git a/comment/KbB32zoLN.csv b/comment/KbB32zoLN.csv
deleted file mode 100644
index 2f8a181..0000000
--- a/comment/KbB32zoLN.csv
+++ /dev/null
@@ -1,6 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/5590856945,·dnbzb,女,其他,734,225,292,豪华手册scar淘汰盒子我爱了,0,2021-04-18 10:55
-https://weibo.cn//u/6026624107,海岛男明星,男,辽宁,21,39,90,菜鸡解说,0,2021-04-18 10:54
-https://weibo.cn//u/2704650351,晴天到的过往,女,湖北,3581,983,12914,菜鸡解说 爆料又准又快,0,2021-04-18 10:48
-https://weibo.cn//u/7483199803,必达东风,男,江苏,29,70,3,菜鸡解说,0,2021-04-18 10:46
-https://weibo.cn//u/6424017019,夏日蒲公英88,男,广东,13,183,91,有爆料,0,2021-04-18 10:45
diff --git a/comment/KbF7QlucX.csv b/comment/KbF7QlucX.csv
deleted file mode 100644
index d0baef0..0000000
--- a/comment/KbF7QlucX.csv
+++ /dev/null
@@ -1,29 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/6030715727,小撩will_,女,辽宁,218,58,167,左边那两坨黄色是啥子哈哈哈,0,2021-04-20 10:46
-https://weibo.cn//u/6622328108,限定轩酱,男,江西,296,307,61,羡慕了!!要是用不完的话我愿意替你分担,0,2021-04-19 21:18
-https://weibo.cn//u/6314259538,叶叶叶叶叶叶叶子呀,女,福建,74,85,9,后悔没买身体乳了,希望老骆这周三还有卖,0,2021-04-19 21:33
-https://weibo.cn//u/3982310407,薇光w,女,宁夏,71,261,3019,棒棒,0,2021-04-20 13:18
-https://weibo.cn//777580730,Satsuki是小倩吖,女,海外,512,191,2625,回复@小撩will_:chillmore沐浴露送的沐浴球哈哈哈哈,0,2021-04-20 13:04
-https://weibo.cn//777580730,Satsuki是小倩吖,女,海外,512,191,2625,回复@l喝果汁吗:强迫症的迫使,0,2021-04-20 13:04
-https://weibo.cn//u/5873890516,骆王宇不举铁,女,其他,173,315,62,送我吧,0,2021-04-20 10:54
-https://weibo.cn//u/5743584438,l喝果汁吗,女,山东,137,84,68,每次看你拍的皂片都极度舒适,0,2021-04-20 10:49
-https://weibo.cn//u/6030715727,小撩will_,女,辽宁,218,58,167,左边那两坨黄色是啥子哈哈哈,0,2021-04-20 10:46
-https://weibo.cn//u/6402395454,虾基儿,女,广东,68,217,38,这送的也太多了吧,0,2021-04-20 10:37
-https://weibo.cn//u/6570813431,枸杞泡茶不秃头wyb,女,安徽,116,138,11,小倩,1,2021-04-20 09:54
-https://weibo.cn//u/5867614732,你不要逼我吃香菜,女,福建,979,122,176,地址私你了 搞快点,1,2021-04-20 07:49
-https://weibo.cn//777580730,Satsuki是小倩吖,女,海外,512,191,2625,回复@Kellicc:对哒!我只在他直播间买,0,2021-04-20 00:33
-https://weibo.cn//u/6571864523,Kellicc,女,江苏,152,360,292,回复@Satsuki是小倩吖:是在大娘直播间入的嘛,0,2021-04-20 00:32
-https://weibo.cn//777580730,Satsuki是小倩吖,女,海外,512,191,2625,回复@Kellicc:好用!!!一定要买!!!值得,0,2021-04-20 00:31
-https://weibo.cn//u/6571864523,Kellicc,女,江苏,152,360,292,神秘博士面膜好用嘛!,0,2021-04-20 00:30
-https://weibo.cn//777580730,Satsuki是小倩吖,女,海外,512,191,2625,回复@你该荣幸724:没事,这周还会有的!,0,2021-04-20 00:24
-https://weibo.cn//u/5860461465,Jennie的Jenny呀,女,广东,53,69,25,想抱住富婆大腿,0,2021-04-19 22:14
-https://weibo.cn//u/3641696182,Fall-4,女,北京,690,332,457,真羡慕,0,2021-04-19 22:08
-https://weibo.cn//u/6386920161,你该荣幸724,男,其他,3,133,11,羡慕买了神秘博士面膜的,0,2021-04-19 22:02
-https://weibo.cn//u/6314259538,叶叶叶叶叶叶叶子呀,女,福建,74,85,9,回复@Satsuki是小倩吖:等你呦倩倩子~,0,2021-04-19 21:34
-https://weibo.cn//777580730,Satsuki是小倩吖,女,海外,512,191,2625,回复@叶叶叶叶叶叶叶子呀:今晚我试试,写个跟chillmore的对比,0,2021-04-19 21:33
-https://weibo.cn//u/6314259538,叶叶叶叶叶叶叶子呀,女,福建,74,85,9,后悔没买身体乳了,希望老骆这周三还有卖,0,2021-04-19 21:33
-https://weibo.cn//u/6622328108,限定轩酱,男,江西,296,307,61,回复@Satsuki是小倩吖:那没事了,有这钱出国际运费我都可以买一堆了,0,2021-04-19 21:31
-https://weibo.cn//777580730,Satsuki是小倩吖,女,海外,512,191,2625,回复@叶叶叶叶叶叶叶子呀:hi!是我,0,2021-04-19 21:29
-https://weibo.cn//777580730,Satsuki是小倩吖,女,海外,512,191,2625,回复@限定轩酱:好呀好呀!国际运费你来,1,2021-04-19 21:29
-https://weibo.cn//u/6622328108,限定轩酱,男,江西,296,307,61,羡慕了!!要是用不完的话我愿意替你分担,0,2021-04-19 21:18
-https://weibo.cn//u/6314259538,叶叶叶叶叶叶叶子呀,女,福建,74,85,9,百货商店老板娘,0,2021-04-19 20:56
diff --git a/comment/KbFANuv4V.csv b/comment/KbFANuv4V.csv
deleted file mode 100644
index 02023b4..0000000
--- a/comment/KbFANuv4V.csv
+++ /dev/null
@@ -1,23 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/6687324611,花冢Q,女,其他,1584,581,121,哇!好棒哦,0,2021-04-19 21:58
-https://weibo.cn//u/3982310407,薇光w,女,宁夏,71,261,3019,姐妹是先投递的简历吗?没有投vlog,0,2021-04-20 11:19
-https://weibo.cn//u/5056307800,是鲤鱼锦o,女,河南,141,309,102,加油wo!!!,0,2021-04-20 09:22
-https://weibo.cn//u/1777614623,Sissi的日记啊,女,江苏,197,604,855,回复@是大莉少女:吼🐒我还在等消息,0,2021-04-20 20:08
-https://weibo.cn//u/6084130919,是大莉少女,女,江苏,61,208,105,加油宝贝,0,2021-04-20 20:06
-https://weibo.cn//u/1777614623,Sissi的日记啊,女,江苏,197,604,855,回复@Jennie的Jenny呀:!好的!,0,2021-04-20 19:32
-https://weibo.cn//u/5860461465,Jennie的Jenny呀,女,广东,53,69,25,加油呀!!,0,2021-04-20 18:25
-https://weibo.cn//u/1777614623,Sissi的日记啊,女,江苏,197,604,855,回复@薇光w:我当时没来的及搞,0,2021-04-20 11:25
-https://weibo.cn//u/3982310407,薇光w,女,宁夏,71,261,3019,姐妹是先投递的简历吗?没有投vlog,0,2021-04-20 11:19
-https://weibo.cn//u/6423646637,小桐_樂事,女,其他,5,33,7,加油!,0,2021-04-20 10:20
-https://weibo.cn//u/1777614623,Sissi的日记啊,女,江苏,197,604,855,回复@是鲤鱼锦o:吼!!,0,2021-04-20 09:27
-https://weibo.cn//u/5056307800,是鲤鱼锦o,女,河南,141,309,102,加油wo!!!,0,2021-04-20 09:22
-https://weibo.cn//u/1777614623,Sissi的日记啊,女,江苏,197,604,855,回复@骆王宇不举铁:吼!姐妹!,0,2021-04-20 09:18
-https://weibo.cn//u/1777614623,Sissi的日记啊,女,江苏,197,604,855,回复@叶叶叶叶叶叶叶子呀:吼!我还在等回复,0,2021-04-20 09:18
-https://weibo.cn//u/5873890516,骆王宇不举铁,女,其他,173,315,62,加油哦,0,2021-04-20 08:46
-https://weibo.cn//u/6314259538,叶叶叶叶叶叶叶子呀,女,福建,74,85,9,加油,0,2021-04-20 08:43
-https://weibo.cn//u/5867614732,你不要逼我吃香菜,女,福建,979,122,176,加油!!!,0,2021-04-20 07:48
-https://weibo.cn//u/1777614623,Sissi的日记啊,女,江苏,197,604,855,回复@阿月我在:吼!,0,2021-04-20 07:45
-https://weibo.cn//u/3803148504,阿月我在,女,四川,654,379,394,哇唔,0,2021-04-20 07:37
-https://weibo.cn//u/6687324611,花冢Q,女,其他,1584,581,121,回复@Sissi的日记啊:加油,0,2021-04-19 23:04
-https://weibo.cn//u/1777614623,Sissi的日记啊,女,江苏,197,604,855,回复@花冢Q:这才是第一步 还有漫漫长路,0,2021-04-19 22:36
-https://weibo.cn//u/6687324611,花冢Q,女,其他,1584,581,121,哇!好棒哦,0,2021-04-19 21:58
diff --git a/comment/KbFRPwtLi.csv b/comment/KbFRPwtLi.csv
deleted file mode 100644
index 1317924..0000000
--- a/comment/KbFRPwtLi.csv
+++ /dev/null
@@ -1,4 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/2034920154,王一博每天滑滑板,女,浙江,9034,615,208,回复@wyb平安喜乐-一宝:等等等等等等等等我能等,0,2021-04-19 22:40
-https://weibo.cn//u/6318987185,wyb平安喜乐-一宝,女,甘肃,301,87,127,好像是5月初吧!,0,2021-04-19 22:39
-https://weibo.cn//u/3626855787,不过是一场回忆,女,其他,2166,256,600,王一博· 春风再美也比不上你的笑,没见过你的人不会明了。,0,2021-04-19 22:38
diff --git a/comment/KbKLyCmOa.csv b/comment/KbKLyCmOa.csv
deleted file mode 100644
index 01ada93..0000000
--- a/comment/KbKLyCmOa.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/6084130919,是大莉少女,女,江苏,61,208,105,不要着急,可以等一下,0,2021-04-20 20:06
-https://weibo.cn//u/1781696553,一个鱼丸都不给,女,江西,361,288,421,现在回复了么,0,2021-04-20 19:43
diff --git a/comment/KbL8dak0D.csv b/comment/KbL8dak0D.csv
deleted file mode 100644
index 4e8298a..0000000
--- a/comment/KbL8dak0D.csv
+++ /dev/null
@@ -1,5 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/5500191418,最可爱的yz_,女,海外,17,379,1060,回复@-_-天线短路宝宝:我把他视频全都刷了个遍!!,0,2021-04-20 14:18
-https://weibo.cn//u/5500191418,最可爱的yz_,女,海外,17,379,1060,回复@_火冰棍子:哈哈哈哈哈,0,2021-04-20 14:18
-https://weibo.cn//u/3807570123,-_-天线短路宝宝,女,新疆,330,139,522,我也用了他买的!!!!哈哈哈哈哈超喜欢大娘,0,2021-04-20 12:14
-https://weibo.cn//u/3232184211,_火冰棍子,女,北京,1428,145,69,牛逼啊妹妹,0,2021-04-20 12:05
diff --git a/comment/KbLiVrgoS.csv b/comment/KbLiVrgoS.csv
deleted file mode 100644
index c6b2395..0000000
--- a/comment/KbLiVrgoS.csv
+++ /dev/null
@@ -1,4 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/7433244508,爱茜1313,女,其他,4609,219,3,最快也得春节,0,2021-04-20 13:14
-https://weibo.cn//u/5912303489,偶是墨白,女,福建,31,38,953,期待演员王一博,0,2021-04-20 13:14
-https://weibo.cn//u/7561911408,wyb1485,女,福建,61,52,2,没错没错想看想看!!!,0,2021-04-20 13:00
diff --git a/comment/KbLmf79TP.csv b/comment/KbLmf79TP.csv
deleted file mode 100644
index 33ebe0f..0000000
--- a/comment/KbLmf79TP.csv
+++ /dev/null
@@ -1,6 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/7484534374,程前鹿子,女,广东,403,2668,2033,回复@程前鹿子:可以,0,2021-04-20 17:54
-https://weibo.cn//u/7484534374,程前鹿子,女,广东,403,2668,2033,我觉得刷酸有些比较刺激🙊你哭试试去黑头泥膜,0,2021-04-20 17:54
-https://weibo.cn//u/3092839284,薄荷味的晓酱,女,海外,55,214,3641,回复@你不要逼我吃香菜:好滴好滴 谢谢集美耐心解答,0,2021-04-20 14:03
-https://weibo.cn//u/5867614732,你不要逼我吃香菜,女,福建,979,122,176,如果是水湿敷效果可能会更好 如果你觉得面霜用完会有点干或者脱皮之类的,可以加个精华,0,2021-04-20 13:02
-https://weibo.cn//u/7277147268,我叫陈梦梦,女,安徽,27,20,2,可以,0,2021-04-20 12:48
diff --git a/comment/KbLuCgKwg.csv b/comment/KbLuCgKwg.csv
deleted file mode 100644
index 9c97ca7..0000000
--- a/comment/KbLuCgKwg.csv
+++ /dev/null
@@ -1,7 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/5088946818,LuNaticOLI,女,上海,1084,221,164,回复@zzh茗:嘻嘻,0,2021-04-20 13:34
-https://weibo.cn//u/5088946818,LuNaticOLI,女,上海,1084,221,164,回复@FunkyAGuy:谢谢姐妹!期待复古神探!,0,2021-04-20 13:34
-https://weibo.cn//u/5088946818,LuNaticOLI,女,上海,1084,221,164,回复@桔子青色:嗯嗯嗯嗯,0,2021-04-20 13:31
-https://weibo.cn//u/6212101409,zzh茗,女,河北,53,200,45,张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚,0,2021-04-20 13:03
-https://weibo.cn//u/6108158726,桔子青色,女,四川,37,13,6,一起守护他,走花路啊,0,2021-04-20 13:00
-https://weibo.cn//u/2351204833,FunkyAGuy,男,北京,9,38,42,祝贺发帖,0,2021-04-20 12:58
diff --git a/comment/KbNCnpZ2v.csv b/comment/KbNCnpZ2v.csv
deleted file mode 100644
index 3f1c52f..0000000
--- a/comment/KbNCnpZ2v.csv
+++ /dev/null
@@ -1,78 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021715,拍下送小样7ml+油面膜1片:,1,2021-04-20 18:21
-https://weibo.cn//u/2473308955,猪猪叹气Orz,女,海外,132,104,194,这个牌子得精油好用,而且店铺的服务特别特别好,1,2021-04-20 18:32
-https://weibo.cn//u/5540290232,一盆多肉_,女,山西,15,200,1574,emmm,有点辣眼,所以我推荐zero卸妆膏,2,2021-04-20 18:23
-https://weibo.cn//u/5570062732,Sangheyo,女,江苏,191,183,188,我一直用他家的,没有姐妹说的辣眼和洗不干净的情况诶,0,2021-04-20 20:14
-https://weibo.cn//u/5470890262,这是锦鲤鲤,女,湖北,142,147,84,回复@这是锦鲤鲤:是小样,0,2021-04-20 19:53
-https://weibo.cn//u/5470890262,这是锦鲤鲤,女,湖北,142,147,84,兰的卸妆油我以前好像还当过试用员,0,2021-04-20 19:52
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021715,回复@做你的快乐丶: 记得要乳化嗷 卸妆油不乳化就会一直是油质地,乳化后就清爽啦,0,2021-04-20 19:44
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021715,回复@肤浅的胖虎: 害 每牌子都会有差评的,选适合自己的~,0,2021-04-20 19:43
-https://weibo.cn//u/6586020023,江南祭酒呀,女,其他,221,285,2,回复@做你的快乐丶:姐妹是不是没有乳化,0,2021-04-20 19:08
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021715,回复@XUEQING杨:日本乐敦rohto官方旗舰店CC精华液面部亮肤维C淡斑祛痘印修复提亮 看看这个 拍2件划算,0,2021-04-20 18:54
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021715,回复@倾寒寒SpartAce:她素tasu彩色眼线笔防水防汗不易脱色晕染持久棕色眼线液胶笔 看看这个 合适不~姐妹,0,2021-04-20 18:49
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021715,回复@猪猪叹气Orz: 谢谢姐妹的反馈哇,0,2021-04-20 18:48
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021715,回复@一盆多肉_: 适合自己的最重要,0,2021-04-20 18:48
-https://weibo.cn//u/7217837973,XUEQING杨,女,安徽,89,128,10,多多有什么精华有活动吗,大学生经常熬夜的,0,2021-04-20 18:42
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021715,回复@-是婷婷呀-:http://t.cn/A6cCBF54 来啦~植护的可吗,0,2021-04-20 18:42
-https://weibo.cn//u/5646783960,改名字了的话还找得到吗,女,云南,2092,191,73,回复@NIKI512:我也要,0,2021-04-20 18:37
-https://weibo.cn//u/5486368289,倾寒寒SpartAce,女,福建,1418,327,187,有眼线笔吗多多,0,2021-04-20 18:33
-https://weibo.cn//u/2473308955,猪猪叹气Orz,女,海外,132,104,194,这个牌子得精油好用,而且店铺的服务特别特别好,1,2021-04-20 18:32
-https://weibo.cn//u/5911772701,-是婷婷呀-,女,北京,3942,415,157,多多 我需要卷纸 帮我蹲一蹲吧,0,2021-04-20 18:31
-https://weibo.cn//u/2957321065,做你的快乐丶,女,广东,141,495,159,用过,蛮好用的,但它真的太油了,0,2021-04-20 18:30
-https://weibo.cn//u/2503055180,NIKI512,女,浙江,640,258,131,逐本的有吗,1,2021-04-20 18:30
-https://weibo.cn//u/2972927100,肤浅的胖虎,女,广东,523,335,346,回复@一盆多肉_:zero糊眼睛哈哈哈,0,2021-04-20 18:26
-https://weibo.cn//u/5540290232,一盆多肉_,女,山西,15,200,1574,emmm,有点辣眼,所以我推荐zero卸妆膏,2,2021-04-20 18:23
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021717,回复@海外大牌: 用过的姐妹来说说看呀,1,2021-04-20 18:21
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021717,拍下送小样7ml+油面膜1片:,1,2021-04-20 18:21
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,拍下送小样7ml+油面膜1片:,1,2021-04-20 18:21
-https://weibo.cn//u/2473308955,猪猪叹气Orz,女,海外,132,104,194,这个牌子得精油好用,而且店铺的服务特别特别好,1,2021-04-20 18:32
-https://weibo.cn//u/5540290232,一盆多肉_,女,山西,15,200,1574,emmm,有点辣眼,所以我推荐zero卸妆膏,2,2021-04-20 18:23
-https://weibo.cn//u/5570062732,Sangheyo,女,江苏,191,183,188,我一直用他家的,没有姐妹说的辣眼和洗不干净的情况诶,0,2021-04-20 20:14
-https://weibo.cn//u/5470890262,这是锦鲤鲤,女,湖北,142,147,84,回复@这是锦鲤鲤:是小样,0,2021-04-20 19:53
-https://weibo.cn//u/5470890262,这是锦鲤鲤,女,湖北,142,147,84,兰的卸妆油我以前好像还当过试用员,0,2021-04-20 19:51
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,回复@做你的快乐丶: 记得要乳化嗷 卸妆油不乳化就会一直是油质地,乳化后就清爽啦,0,2021-04-20 19:44
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,回复@肤浅的胖虎: 害 每牌子都会有差评的,选适合自己的~,0,2021-04-20 19:43
-https://weibo.cn//u/6586020023,江南祭酒呀,女,其他,221,285,2,回复@做你的快乐丶:姐妹是不是没有乳化,0,2021-04-20 19:08
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,回复@XUEQING杨:日本乐敦rohto官方旗舰店CC精华液面部亮肤维C淡斑祛痘印修复提亮 看看这个 拍2件划算,0,2021-04-20 18:54
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,回复@倾寒寒SpartAce:她素tasu彩色眼线笔防水防汗不易脱色晕染持久棕色眼线液胶笔 看看这个 合适不~姐妹,0,2021-04-20 18:49
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,回复@猪猪叹气Orz: 谢谢姐妹的反馈哇,0,2021-04-20 18:48
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,回复@一盆多肉_: 适合自己的最重要,0,2021-04-20 18:48
-https://weibo.cn//u/7217837973,XUEQING杨,女,安徽,89,128,10,多多有什么精华有活动吗,大学生经常熬夜的,0,2021-04-20 18:42
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,回复@-是婷婷呀-:42卷植护无芯卷纸卫生纸家用实惠装厕所草纸手纸整箱批发卷筒纸巾 来啦~植护的可吗,0,2021-04-20 18:42
-https://weibo.cn//u/5646783960,改名字了的话还找得到吗,女,云南,2092,191,73,回复@NIKI512:我也要,0,2021-04-20 18:37
-https://weibo.cn//u/5486368289,倾寒寒SpartAce,女,福建,1418,327,187,有眼线笔吗多多,0,2021-04-20 18:33
-https://weibo.cn//u/2473308955,猪猪叹气Orz,女,海外,132,104,194,这个牌子得精油好用,而且店铺的服务特别特别好,1,2021-04-20 18:32
-https://weibo.cn//u/5911772701,-是婷婷呀-,女,北京,3942,415,157,多多 我需要卷纸 帮我蹲一蹲吧,0,2021-04-20 18:31
-https://weibo.cn//u/2957321065,做你的快乐丶,女,广东,141,495,159,用过,蛮好用的,但它真的太油了,0,2021-04-20 18:30
-https://weibo.cn//u/2503055180,NIKI512,女,浙江,640,258,131,逐本的有吗,1,2021-04-20 18:30
-https://weibo.cn//u/2972927100,肤浅的胖虎,女,广东,523,335,346,回复@一盆多肉_:zero糊眼睛哈哈哈,0,2021-04-20 18:26
-https://weibo.cn//u/5540290232,一盆多肉_,女,山西,15,200,1574,emmm,有点辣眼,所以我推荐zero卸妆膏,2,2021-04-20 18:23
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,回复@海外大牌: 用过的姐妹来说说看呀,1,2021-04-20 18:21
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,拍下送小样7ml+油面膜1片:,1,2021-04-20 18:21
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,拍下送小样7ml+油面膜1片:,1,2021-04-20 18:21
-https://weibo.cn//u/2473308955,猪猪叹气Orz,女,海外,132,104,194,这个牌子得精油好用,而且店铺的服务特别特别好,1,2021-04-20 18:32
-https://weibo.cn//u/5540290232,一盆多肉_,女,山西,15,200,1574,emmm,有点辣眼,所以我推荐zero卸妆膏,2,2021-04-20 18:23
-https://weibo.cn//u/5570062732,Sangheyo,女,江苏,191,183,188,我一直用他家的,没有姐妹说的辣眼和洗不干净的情况诶,0,2021-04-20 20:14
-https://weibo.cn//u/5470890262,这是锦鲤鲤,女,湖北,142,147,84,回复@这是锦鲤鲤:是小样,0,2021-04-20 19:52
-https://weibo.cn//u/5470890262,这是锦鲤鲤,女,湖北,142,147,84,兰的卸妆油我以前好像还当过试用员,0,2021-04-20 19:51
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,回复@做你的快乐丶: 记得要乳化嗷 卸妆油不乳化就会一直是油质地,乳化后就清爽啦,0,2021-04-20 19:44
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,回复@肤浅的胖虎: 害 每牌子都会有差评的,选适合自己的~,0,2021-04-20 19:43
-https://weibo.cn//u/6586020023,江南祭酒呀,女,其他,221,285,2,回复@做你的快乐丶:姐妹是不是没有乳化,0,2021-04-20 19:08
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,回复@XUEQING杨:日本乐敦rohto官方旗舰店CC精华液面部亮肤维C淡斑祛痘印修复提亮 看看这个 拍2件划算,0,2021-04-20 18:54
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,回复@倾寒寒SpartAce:她素tasu彩色眼线笔防水防汗不易脱色晕染持久棕色眼线液胶笔 看看这个 合适不~姐妹,0,2021-04-20 18:49
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,回复@猪猪叹气Orz: 谢谢姐妹的反馈哇,0,2021-04-20 18:48
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,回复@一盆多肉_: 适合自己的最重要,0,2021-04-20 18:48
-https://weibo.cn//u/7217837973,XUEQING杨,女,安徽,89,128,10,多多有什么精华有活动吗,大学生经常熬夜的,0,2021-04-20 18:42
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,回复@-是婷婷呀-:42卷植护无芯卷纸卫生纸家用实惠装厕所草纸手纸整箱批发卷筒纸巾 来啦~植护的可吗,0,2021-04-20 18:42
-https://weibo.cn//u/5646783960,改名字了的话还找得到吗,女,云南,2092,191,73,回复@NIKI512:我也要,0,2021-04-20 18:37
-https://weibo.cn//u/5486368289,倾寒寒SpartAce,女,福建,1418,327,187,有眼线笔吗多多,0,2021-04-20 18:33
-https://weibo.cn//u/2473308955,猪猪叹气Orz,女,海外,132,104,194,这个牌子得精油好用,而且店铺的服务特别特别好,1,2021-04-20 18:32
-https://weibo.cn//u/5911772701,-是婷婷呀-,女,北京,3942,415,157,多多 我需要卷纸 帮我蹲一蹲吧,0,2021-04-20 18:31
-https://weibo.cn//u/2957321065,做你的快乐丶,女,广东,141,495,159,用过,蛮好用的,但它真的太油了,0,2021-04-20 18:30
-https://weibo.cn//u/2503055180,NIKI512,女,浙江,640,258,131,逐本的有吗,1,2021-04-20 18:30
-https://weibo.cn//u/2972927100,肤浅的胖虎,女,广东,523,335,346,回复@一盆多肉_:zero糊眼睛哈哈哈,0,2021-04-20 18:26
-https://weibo.cn//u/5540290232,一盆多肉_,女,山西,15,200,1574,emmm,有点辣眼,所以我推荐zero卸妆膏,2,2021-04-20 18:23
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,回复@海外大牌: 用过的姐妹来说说看呀,1,2021-04-20 18:21
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,拍下送小样7ml+油面膜1片:,1,2021-04-20 18:21
diff --git a/comment/KbOXufHgo.csv b/comment/KbOXufHgo.csv
new file mode 100644
index 0000000..261dcb4
--- /dev/null
+++ b/comment/KbOXufHgo.csv
@@ -0,0 +1,18 @@
+评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
+https://weibo.cn//u/2614022305,末日丁香clove,女,山东,300,110,31,记忆点:虽然已经亮灯,但是大家都是坐在位子上看完了最后的彩蛋才离开哒!是柯南剧场版f了!,0,2021-04-20 21:50
+https://weibo.cn//u/5878659096,超话社区,男,北京,9438,2357,162807121,你好,你感兴趣的“柯南”已开通了超话社区~ 超话社区是微博旗下兴趣互动社区,快来与志同道合的小伙伴们一起交流互动吧! 戳我进入>> ,0,2021-04-20 21:45
+评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
+https://weibo.cn//u/2614022305,末日丁香clove,女,山东,300,110,31,记忆点:虽然已经亮灯,但是大家都是坐在位子上看完了最后的彩蛋才离开哒!是柯南剧场版f了!,0,2021-04-20 21:50
+https://weibo.cn//u/5878659096,超话社区,男,北京,9438,2357,162807417,你好,你感兴趣的“柯南”已开通了超话社区~ 超话社区是微博旗下兴趣互动社区,快来与志同道合的小伙伴们一起交流互动吧! 戳我进入>> ,0,2021-04-20 21:45
+评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
+https://weibo.cn//u/2614022305,末日丁香clove,女,山东,300,110,31,记忆点:虽然已经亮灯,但是大家都是坐在位子上看完了最后的彩蛋才离开哒!是柯南剧场版f了!,0,2021-04-20 21:50
+https://weibo.cn//u/5878659096,超话社区,男,北京,9438,2357,162807865,你好,你感兴趣的“柯南”已开通了超话社区~ 超话社区是微博旗下兴趣互动社区,快来与志同道合的小伙伴们一起交流互动吧! 戳我进入>> ,0,2021-04-20 21:45
+评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
+https://weibo.cn//u/2614022305,末日丁香clove,女,山东,300,110,31,记忆点:虽然已经亮灯,但是大家都是坐在位子上看完了最后的彩蛋才离开哒!是柯南剧场版f了!,0,2021-04-20 21:50
+https://weibo.cn//u/5878659096,超话社区,男,北京,9438,2357,162808004,你好,你感兴趣的“柯南”已开通了超话社区~ 超话社区是微博旗下兴趣互动社区,快来与志同道合的小伙伴们一起交流互动吧! 戳我进入>> ,0,2021-04-20 21:45
+评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
+https://weibo.cn//u/2614022305,末日丁香clove,女,山东,300,110,31,记忆点:虽然已经亮灯,但是大家都是坐在位子上看完了最后的彩蛋才离开哒!是柯南剧场版f了!,0,2021-04-20 21:50
+https://weibo.cn//u/5878659096,超话社区,男,北京,9438,2357,162808436,你好,你感兴趣的“柯南”已开通了超话社区~ 超话社区是微博旗下兴趣互动社区,快来与志同道合的小伙伴们一起交流互动吧! 戳我进入>> ,0,2021-04-20 21:45
+评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
+https://weibo.cn//u/2614022305,末日丁香clove,女,山东,300,110,31,记忆点:虽然已经亮灯,但是大家都是坐在位子上看完了最后的彩蛋才离开哒!是柯南剧场版f了!,0,2021-04-20 21:50
+https://weibo.cn//u/5878659096,超话社区,男,北京,9438,2357,162808495,你好,你感兴趣的“柯南”已开通了超话社区~ 超话社区是微博旗下兴趣互动社区,快来与志同道合的小伙伴们一起交流互动吧! 戳我进入>> ,0,2021-04-20 21:45
diff --git a/comment/KbnuDzqkM.csv b/comment/KbnuDzqkM.csv
deleted file mode 100644
index 383fdf2..0000000
--- a/comment/KbnuDzqkM.csv
+++ /dev/null
@@ -1,2 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/5878659096,超话社区,男,北京,9414,2351,162492681,你好,你感兴趣的“覆车之戒”已开通了超话社区~ 超话社区是微博旗下兴趣互动社区,快来与志同道合的小伙伴们一起交流互动吧! 戳我进入>> ,0,2021-04-17 23:50
diff --git a/comment/Kbt0seKfT.csv b/comment/Kbt0seKfT.csv
deleted file mode 100644
index 6db2976..0000000
--- a/comment/Kbt0seKfT.csv
+++ /dev/null
@@ -1,30 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/6475449974,王炎女青君,男,湖北,81,41,56,每年一问,电子类几天出成绩,1,2021-04-18 14:49
-https://weibo.cn//u/6518674455,1笑2过-,男,其他,24,101,26,什么时候出排名呢,0,2021-04-18 14:39
-https://weibo.cn//u/6315849043,快乐二狗丫,男,广东,32,173,291,赛前:重铸省一荣光,我辈义不容辞! 赛时:??? 赛后:我要退钱,2,2021-04-18 17:50
-https://weibo.cn//u/6015949883,牙疼max,男,其他,0,10,2,有无答案,0,2021-04-18 06:35
-https://weibo.cn//u/7096835461,hhhhhh大大怪下士,男,陕西,21,69,5,回复@Ki_Seki:b组不是76嘛,第一题,1,2021-04-18 06:30
-https://weibo.cn//u/6877472344,伦伈,男,其他,0,66,2,回复@Ki_Seki:第四题呢,0,2021-04-18 21:06
-https://weibo.cn//u/6877472344,伦伈,男,其他,0,66,2,回复@Ki_Seki:我具体数字不太记得,第三题我写的是两千多吧,0,2021-04-18 21:05
-https://weibo.cn//u/6877472344,伦伈,男,其他,0,66,2,回复@Ki_Seki:1和2同,第三题不一样喔,0,2021-04-18 21:05
-https://weibo.cn//u/7480614715,塌鼻的谭糖www,女,其他,773,56,2,回复@塌鼻的谭糖www:A组,0,2021-04-18 20:17
-https://weibo.cn//u/7480614715,塌鼻的谭糖www,女,其他,773,56,2,今年这个难度。。。对两题填空题,有机会拿奖吗,0,2021-04-18 20:17
-https://weibo.cn//u/6518674455,1笑2过-,男,其他,24,101,26,回复@蓝桥杯大赛:蟹蟹,0,2021-04-18 18:06
-https://weibo.cn//u/6350896300,Ki_Seki,男,河南,41,93,46,回复@33的卡布:3的话你是多少呀,0,2021-04-18 17:53
-https://weibo.cn//u/6315849043,快乐二狗丫,男,广东,32,173,291,赛前:重铸省一荣光,我辈义不容辞! 赛时:??? 赛后:我要退钱,2,2021-04-18 17:50
-https://weibo.cn//u/6592424159,悲欢_并不相通,女,重庆,555,1224,128,能统计下软件类的Python组有多少人参加吗,0,2021-04-18 17:45
-https://weibo.cn//u/5247264403,新峰华兴,男,福建,4,167,1,我参与了,0,2021-04-18 17:39
-https://weibo.cn//u/5886174611,33的卡布,男,江西,61,2,3,回复@Ki_Seki:1 2同,0,2021-04-18 17:35
-https://weibo.cn//u/6350896300,Ki_Seki,男,河南,41,93,46,b组答案,有同吗 67108864 3181 47753,0,2021-04-18 17:09
-https://weibo.cn//u/5660921430,小野人61866,男,其他,349,332,251,回复@今天也是东宫男孩呀:1000000007,0,2021-04-18 17:03
-https://weibo.cn//linderu,林庭有茹,男,其他,287,121,63,可以发布答案咩,0,2021-04-18 16:47
-https://weibo.cn//u/2593315357,喵喵小鱼er,男,广东,2347,962,168,暴力杯不暴力了,还有意义吗,2,2021-04-18 16:29
-https://weibo.cn//u/6036101375,一位技术同学,女,四川,25,50,2,题目有电子版吗,想看看,0,2021-04-18 15:26
-https://weibo.cn//u/5672106862,今天也是东宫男孩呀,男,甘肃,1210,971,463,回复@秋川幸子_:四个小时没出 真的哭了,0,2021-04-18 15:19
-https://weibo.cn//243459465,秋川幸子_,女,山东,76,147,755,回复@今天也是东宫男孩呀:!我也是 暴力等了好久都没出,0,2021-04-18 15:11
-https://weibo.cn//u/5672106862,今天也是东宫男孩呀,男,甘肃,1176,910,463,为啥第三题要出那么大的数???机房的电脑算了4个小时没算出来 那么大的数太坑人了吧 分数白白就没了,2,2021-04-18 15:08
-https://weibo.cn//678663688,蓝桥杯大赛,男,北京,1326,459,105521,回复@1笑2过-:两周左右,1,2021-04-18 14:58
-https://weibo.cn//678663688,蓝桥杯大赛,男,北京,1326,459,105521,回复@王炎女青君:大约两周,0,2021-04-18 14:58
-https://weibo.cn//u/6475449974,王炎女青君,男,湖北,81,41,56,每年一问,电子类几天出成绩,1,2021-04-18 14:49
-https://weibo.cn//u/6518674455,1笑2过-,男,其他,24,101,26,什么时候出排名呢,0,2021-04-18 14:39
-https://weibo.cn//u/6350896300,Ki_Seki,男,河南,41,93,46,有人对答案吗,0,2021-04-18 14:34
diff --git a/comment/KbtHOnsOJ.csv b/comment/KbtHOnsOJ.csv
deleted file mode 100644
index 766caad..0000000
--- a/comment/KbtHOnsOJ.csv
+++ /dev/null
@@ -1,20 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//573399711,西西福厮,男,北京,85317,1680,125624,我想用它去图书馆占个位子,0,2021-04-18 00:45
-https://weibo.cn//u/1730775871,齐妙bobo,女,北京,309,360,153276,超好玩,我已经得到自行车了🚲,0,2021-04-18 00:44
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/5625743829,张璇THU,女,北京,25,143,847,哈哈哈,太好玩了,0,2021-04-18 21:34
-https://weibo.cn//u/1730775871,齐妙bobo,女,北京,310,360,153342,超好玩,我已经得到自行车了🚲,0,2021-04-18 15:43
-https://weibo.cn//u/7214334788,水蜜桃和我们,女,河南,182,258,122,哈哈哈我就不体验了,我去过清华,0,2021-04-18 20:05
-https://weibo.cn//u/5625743829,张璇THU,女,北京,25,143,847,哈哈哈,太好玩了,0,2021-04-18 21:34
-https://weibo.cn//u/3821056664,我偶像是大S徐熙媛,女,其他,421,379,268,魂穿清华,0,2021-04-18 21:31
-https://weibo.cn//vampirejax,安维VampireJax,女,北京,7106,1489,1439,太牛了……我一看到二校门就路痴发作,0,2021-04-18 21:10
-https://weibo.cn//u/7211164287,大智若愚愚,男,上海,185,273,107,好玩儿吗,不是清华的能玩儿吗,0,2021-04-18 20:10
-https://weibo.cn//u/7211142625,黑糖波波冻,女,福建,436,136,100,哈哈哈我也,骄傲脸,清华的风景真不戳,0,2021-04-18 20:08
-https://weibo.cn//u/7214334788,水蜜桃和我们,女,河南,182,258,122,哈哈哈我就不体验了,我去过清华,0,2021-04-18 20:05
-https://weibo.cn//u/5444374183,空空白U,女,河南,71,183,42,这个游戏好。圆了大学梦,0,2021-04-18 19:59
-https://weibo.cn//u/1529031962,采花不戴花,男,北京,11709,118,183,//,0,2021-04-18 16:54
-https://weibo.cn//zhiming13411108813,日月青争空间,男,广东,10247,2151,298,转发微博,0,2021-04-18 16:23
-https://weibo.cn//u/5581932707,量化情绪指数,男,北京,2099,1075,397,都能玩,还只是限校友?,0,2021-04-18 16:13
-https://weibo.cn//heyseed,2020改为嘿哥,男,广东,53261,3903,1631, 举报 赞[0] 回复 今天 15:50 来自网页,0,2021-04-18 15:50
-https://weibo.cn//573399711,西西福厮,男,北京,85321,1679,125627,我想用它去图书馆占个位子,0,2021-04-18 15:43
-https://weibo.cn//u/1730775871,齐妙bobo,女,北京,310,360,153342,超好玩,我已经得到自行车了🚲,0,2021-04-18 15:43
diff --git a/get_weibo_crawler_data.py b/get_weibo_crawler_data.py
index 8815ae8..dd760cb 100644
--- a/get_weibo_crawler_data.py
+++ b/get_weibo_crawler_data.py
@@ -7,8 +7,8 @@
# Run this script after all crawlers have done their jobs!!!
def cp_append_file(dst, src):
- f_src = open(src, "r")
- f_dst = open(dst, "w")
+ f_src = open(src, "r",encoding="utf-8")
+ f_dst = open(dst, "w",encoding="utf-8")
# Skip the first line
lines = f_src.readline()
lines = f_src.readlines()
@@ -17,10 +17,10 @@ def cp_append_file(dst, src):
comment = line.split(',')[-3]
# Get comment emotion
print("Starting to analyze emotion")
- emotion = subprocess.check_output(['python', 'keras-bert-emotional-classifier/eval.py', comment]).decode('utf-8')
+ emotion = subprocess.check_output(['C:\\Python36\\python.exe', 'keras-bert-emotional-classifier\\eval.py', comment]).decode('utf-8"')
# Write file
- print(line + ',' + emotion + '\n')
- f_dst.write(line + ',' + emotion + '\n')
+ print(line + ',' + emotion + '\\n')
+ f_dst.write(line + ',' + emotion + '\\n')
f_src.close()
f_dst.close()
@@ -53,8 +53,8 @@ def cp_append_file(dst, src):
print(all_topics)
# Get all posts
for topic in all_topics:
- os.mkdir(BASE_PATH + "/" + topic)
- f_topic_csv = open("topic/" + topic + ".csv")
+ os.mkdir(BASE_PATH + "\\" + topic)
+ f_topic_csv = open("topic\\" + topic + ".csv",encoding="utf-8")
# Skip the first line
lines = f_topic_csv.readline()
lines = f_topic_csv.readlines()
@@ -67,24 +67,24 @@ def cp_append_file(dst, src):
# We create the weibo post directory using wid(weibo post id)
# We only need the post that its comment is greater that 1,
# because we want analyze its emotion using(emotional-classifier)
- # os.mkdir("weibo_data/" + topic + "/" + wid)
+ # os.mkdir("weibo_data\\" + topic + "\\" + wid)
if int(comment_num) > 1:
- os.mkdir(BASE_PATH + "/" + topic + "/" + wid)
- # f_comments = open(BASE_PATH + "/" + topic + "/" + wid + "all_comments.txt", "w")
+ os.mkdir(BASE_PATH + "\\" + topic + "\\" + wid)
+ # f_comments = open(BASE_PATH + "\\" + topic + "\\" + wid + "all_comments.txt", "w")
# check_output returns []byte
print("Starting to crawl post: %s" % wid)
# subprocess.check_output(['python', 'WeiboTopicScrapy.py', wid])
# cmd = "python WeiboTopicScrapy.py" + " " + wid
cmd = [ "python", "WeiboCommentScrapy.py", wid ]
# process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
- print("python WeiboCommentScrapy.py %s" + wid)
+ print("python WeiboCommentScrapy.py %s" % wid)
process = subprocess.Popen("python WeiboCommentScrapy.py" + " " + wid, shell=True, stdout=subprocess.PIPE)
process.wait()
# try:
- # cp_append_file(BASE_PATH + "/" + topic + "/" + wid + "/" + "comment" + ".csv", "comment" + "/" + wid + ".csv")
+ # cp_append_file(BASE_PATH + "\\" + topic + "\\" + wid + "\\" + "comment" + ".csv", "comment" + "\\" + wid + ".csv")
# except:
# print("cp file error")
- cp_append_file(BASE_PATH + "/" + topic + "/" + wid + "/" + "comment" + ".csv", "comment" + "/" + wid + ".csv")
+ cp_append_file(BASE_PATH + "\\" + topic + "\\" + wid + "\\" + "comment" + ".csv", "comment" + "\\" + wid + ".csv")
# No comment found, do nothing
# pass
- # print(BASE_PATH + "/" + topic + "/" + wid + "/" + "comment" + ".csv" + "<-" + "comment" + "/" + wid + ".csv")
+ # print(BASE_PATH + "\\" + topic + "\\" + wid + "\\" + "comment" + ".csv" + "<-" + "comment" + "\\" + wid + ".csv")
diff --git a/keras-bert-emotional-classifier b/keras-bert-emotional-classifier
deleted file mode 120000
index 2bd574d..0000000
--- a/keras-bert-emotional-classifier
+++ /dev/null
@@ -1 +0,0 @@
-/home/coolder/git/DeepLearningExamples/keras-bert-emotional-classifier
\ No newline at end of file
diff --git a/start.py b/start.py
index 34d7f29..19225cb 100644
--- a/start.py
+++ b/start.py
@@ -1,8 +1,101 @@
import os, sys
import multiprocessing
import subprocess
+import csv
+import sqlite3
+import jieba
+from wordcloud import WordCloud
+from imageio import imread
+#csv path
+CSV_FILE_PATH = "weibo_flask\\test.csv"
+
+#save
+def saveData2DB(datalist,dbpath):
+ init_db(dbpath)
+ conn = sqlite3.connect(dbpath)
+ cur = conn.cursor()
+ for data in datalist:
+ for index in range(len(data)):
+ data[index] = '"'+data[index]+'"'
+ sql = '''
+ insert into users_comments (
+ URL,NAME,GENDER,ADDRESS,WB_NUM,FOLLOW,FANS,CONTENT,LIKES,RELEASE_TIME)
+ values(%s)'''%",".join(data)
+ print(sql)
+ finish(dbpath)
+ cur.execute(sql)
+ conn.commit()
+ cur.close()
+ conn.close()
+
+#create table
+def init_db(dbpath):
+ sql = '''
+ CREATE TABLE users_comments(
+ ID INTEGER PRIMARY KEY AUTOINCREMENT,
+ URL CHAR(50),
+ NAME TEXT ,
+ GENDER CHAR(2) NOT NULL,
+ ADDRESS CHAR(50),
+ WB_NUM INT ,
+ FOLLOW INT ,
+ FANS INT ,
+ CONTENT TEXT ,
+ LIKES INT ,
+ RELEASE_TIME TEXT
+ )'''
+
+ conn = sqlite3.connect(dbpath)
+ cursor = conn.cursor()
+ cursor.execute(sql)
+ conn.commit()
+ conn.close()
+def finish(dbpath):
+ sql = '''
+ DELETE FROM users_comments WHERE NAME = "评论者昵称";
+ '''
+
+ conn = sqlite3.connect(dbpath)
+ cursor = conn.cursor()
+ cursor.execute(sql)
+ conn.commit()
+ conn.close()
+
+#Transfer CSV file to DB
+def csv_to_db(filepath):
+ with open(filepath,encoding="utf8")as f:
+ f_csv = csv.reader(f)
+ saveData2DB(f_csv,"weibo_flask\\save.db")
+ f.close()
+
+#Generate WordCloud
+def generateWordCloud(InPngFilePath,inTxtFile,outPngFilePath):
+ frame_png = InPngFilePath
+ data_source = inTxtFile
+
+ f = open(data_source,'r',encoding='utf-8')
+ txt=f.read()
+ #mask=imread('6137484-dc4d579efc67f9ae.png')
+ mask = imread(frame_png)
+ #excludes=''stopwords = excludes,
+ f.close()
+ words = jieba.lcut(txt)
+ new_txt = ' '.join(words)
+ wordcloud = WordCloud(font_path = "msyh.ttc",\
+ background_color = "white",\
+ width = 800,\
+ height = 600,\
+ max_words = 200,\
+ mask = mask,\
+ max_font_size = 80,\
+ ).generate(new_txt)
+ wordcloud.to_file(outPngFilePath)
+
+
+
+
# Crawler function
def crawler(topic):
# This crawler will generate csv file in /topic
@@ -11,46 +104,63 @@ def crawler(topic):
os.system(cmd)
-print("Getting top topics")
-print("Start writing top topics to topic/top_topics.txt")
-# Get data from WeiboTopic.py crawler
-# This is thread, we don't want to use thread now, it will bring more problem
-# top_topics = subprocess.check_output(['python', 'WeiboTopic.py'])
-process = subprocess.Popen(['python', 'WeiboTopic.py'], stdout=subprocess.PIPE)
-# Wait for thread
-process.wait()
-# top_topics = os.system('python WeiboTopic.py')
-# check_output returns bytes, but we want chinese character, so decode it
-top_topics = process.stdout.read().decode('utf-8')
-
-
-f_top_topics = open("topic/top_topics.txt", "w")
-lines = top_topics.split('\n')
-for line in lines:
- # Filter data
- c = line.split(" ")[0]
- # We don't need "0\n"
- if c != "0":
- print(c)
- f_top_topics.write(c + '\n')
-f_top_topics.close()
-print("Writing topic/top_topics.txt done")
-
-
-# Make threads/workers
-f_top_topics = open("topic/top_topics.txt", "r")
-# Skip the first line
-top_topics = f_top_topics.readline()
-top_topics = f_top_topics.readlines()
-f_top_topics.close()
-for top_topic in top_topics:
- print("crawler topic %s" % top_topic)
- # crawler(top_topic)
- p = multiprocessing.Process(target=crawler, args=(top_topic,))
- p.start()
-
-# Analyze emotion
-# os.system("python write_emotion2csv.py")
-print("Store weibo data and starting analyze emotion, this will cost a lot time!!!")
-# subprocess.check_call(['python', 'get_weibo_crawler_data.py'])
-os.system('python get_weibo_crawler_data.py')
+
+
+if __name__ == '__main__':
+ '''
+ print("Getting top topics")
+ print("Start writing top topics to topic\\top_topics.txt")
+ # Get data from WeiboTopic.py crawler
+ # This is thread, we don't want to use thread now, it will bring more problem
+ # top_topics = subprocess.check_output(['python', 'WeiboTopic.py'])
+ process = subprocess.Popen(['python', 'WeiboTopic.py'], stdout=subprocess.PIPE)
+ # Wait for thread
+ process.wait()
+ # top_topics = os.system('python WeiboTopic.py')
+ # check_output returns bytes, but we want chinese character, so decode it
+ #print(process.stdout.read().decode('gbk'))
+ top_topics = process.stdout.read().decode('gbk')
+
+
+ f_top_topics = open("topic\\top_topics.txt", "w")
+ lines = top_topics.split('\n')
+ for line in lines:
+ # Filter data
+ c = line.split(" ")[0]
+ # We don't need "0\n"
+ if c != "0":
+ print(c)
+ f_top_topics.write(c + '\n')
+ f_top_topics.close()
+ print("Writing topic\\top_topics.txt done")
+ '''
+
+
+ '''
+ # Make threads/workers
+ f_top_topics = open("topic\\top_topics.txt", "r")
+ # Skip the first line
+ top_topics = f_top_topics.readlines()
+ f_top_topics.close()
+ for top_topic in top_topics:
+ print("crawler topic %s" % top_topic)
+ # crawler(top_topic)
+ #process = subprocess.Popen(target=crawler, args=(top_topic), shell=True, stdout=subprocess.PIPE)
+ #process.wait()
+ crawler(top_topic)
+
+ '''
+ # Analyze emotion
+ # os.system("python write_emotion2csv.py")
+ print("Starting analyze emotion, this will cost a lot time!!!")
+ subprocess.check_call(['python', 'get_weibo_crawler_data.py'])
+
+ # if save.db exists,it is not executed
+ if not os.path.isfile("weibo_flask\\save.db"):
+ csv_to_db(CSV_FILE_PATH)
+ # generate WordCloud
+ generateWordCloud("OIP.jpg","weibo_comment.txt","weibo_flask\\static\\assets\\img\\word.jpg")
+
+
+
+
diff --git a/store_weibo_data.py b/store_weibo_data.py
deleted file mode 100644
index 0e3ddab..0000000
--- a/store_weibo_data.py
+++ /dev/null
@@ -1,46 +0,0 @@
-import mysql.connector
-
-mydb = mysql.connector.connect(
- host = "localhost",
- user = "root",
- password = "hushanglai",
- database = "crawler_data"
- )
-
-mycursor = mydb.cursor()
-
-f = open("IaYZIu0Ko.csv", "r")
-lines = f.readlines()
-i = 1
-
-for line in lines:
- elements = line.split(",")
- commenter_homepage = elements[0]
- commenter_name = elements[1]
- commenter_gender = elements[2]
- commenter_location = elements[3]
- comenter_weibo_num = elements[4]
- commenter_guanzhu_num = elements[5]
- commenter_fan_num = elements[6]
- comment_content = elements[7]
- comment_like_num = elements[8]
- comment_release_date = elements[9]
-
- # sql1 = "insert into weibo_crawler_data (commenter_homepage, commenter_name, \
- # commenter_gender, commenter_location) values (%s, %s, %s, %s)"
- # values1 = (commenter_homepage, commenter_name, commenter_gender, commenter_location)
- # mycursor.execute(sql1, values1)
- # sql2 = "insert into weibo_crawler_data (comenter_weibo_num, commenter_guanzhu_num, \
- # commenter_fan_num, comment_content, comment_like_num, comment_release_date) \
- # values (%s, %s, %s, %s, %s, %s)"
- # print(comment_content)
- # values2 = (int(comenter_weibo_num), int(commenter_guanzhu_num), int(commenter_fan_num), \
- # comment_content, int(comment_like_num), UNIX_TIMESTAMP(
- # comment_release_date))
- # mycursor.execute(sql2, values2)
- # mydb.commit()
- sql = "insert into test (id, name, id_key, date_time_date) values (%s, %s, %s, %s)"
- values = (str(i), commenter_name, comment_content, comment_release_date)
- mycursor.execute(sql, values)
- mydb.commit()
- i = i + 1
diff --git "a/topic/188\347\224\267\345\233\242.csv" "b/topic/188\347\224\267\345\233\242.csv"
deleted file mode 100644
index 3a8fc8a..0000000
--- "a/topic/188\347\224\267\345\233\242.csv"
+++ /dev/null
@@ -1,9 +0,0 @@
-微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
-KbOo0vsn5,不想袅袅的菜花,女,浙江,372,5405,不想袅袅的菜花:#188男团[超话]#家主梦到前期的男团灵感图: http://t.cn/A6cCkZnR(可不可以夸夸俺ξ( ✿>◡❛)) [组图共11张] 原图 ,无,2021-04-20 20:20,188男团超话,12,0,2,无
-KbOmRDEMp,是乐芸儿吖,女,其他,424,8339,是乐芸儿吖:#188男团[超话]#【宫任】——《搭讪》(不可以快转)纯情小十,在线搭讪梗源图一刚刚看到,立马摸了文宫任短篇合集:http://t.cn/A6qnC6LF [组图共3张] 原图 ,无,2021-04-20 20:17,188男团超话,6,0,10,无
-KbOkZdi0t,-遇江难-,女,上海,176,1486,-遇江难-:在b站看188男团视频剪辑哈哈哈哈哈哈妈的笑不活了 ,无,2021-04-20 20:12,HUAWEI Mate 30 5G,1,0,0,无
-KbOkKadw5,夺损呐集美,女,河北,213,129,夺损呐集美:#188男团[超话]#【急出】偶像周边明信片❗ 我也不知道什么价合适比原价高一点就行了 着急补尾款,wxzfb都行 原图 ,无,2021-04-20 20:12,188男团超话,0,0,2,无
-KbOgyE9mC,与熙同醉光阴,男,湖北,1478,454,与熙同醉光阴:#CP28[超话]#试着接下代购双日摊主证,day1首摊绘旅人,之后去光与夜之恋/未定/188男团。day2首摊188_(:з」∠)_随缘接吧 ,无,2021-04-20 20:01,CP28超话,0,0,0,无
-KbOguhH3X,indulge_ig,女,辽宁,1538,657,indulge_ig:#188男团# 和宋居寒比邵群都不算渣 ,无,2021-04-20 20:01,iPhone客户端,0,0,0,无
-KbOad801r,沈三斤·,女,辽宁,1340,3273,沈三斤·:#188男团[超话]##宫任# 本来有个电话短打,奈何被大眼仔➕ 。我只能想个神经病段子了。希望你们能快点打死我 原图 ,无,2021-04-20 19:46,188男团超话,4,0,0,无
-KbOacwlUX,子霁在故宫开大G,女,浙江,63,128,子霁在故宫开大G:#188男团[超话]# 突然心痛,今天去看车,看了卡宴,狗子你当初怎么舍得砸顾总的车!!那是车嘛?那是💰💰💰💰天呐 ,无,2021-04-20 19:46,188男团超话,0,0,0,无
diff --git a/topic/ZackSnyder.csv b/topic/ZackSnyder.csv
deleted file mode 100644
index 81f0053..0000000
--- a/topic/ZackSnyder.csv
+++ /dev/null
@@ -1,13 +0,0 @@
-微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
-KbLHemkDd,扎克·施奈德电影报道,男,江苏,72,15346,扎克·施奈德电影报道:克里斯·特里奥表示,《扎克·施奈德版正义联盟》里的闪电侠有多动症。#ZackSnydersJusticeLeague##ZackSnyder##ZackSnyder[超话]# [组图共2张] 原图 ,无,2021-04-20 13:27 ,ZackSnyder超话,104,4,13,无
-KbBVsbl6T,扎克·施奈德电影报道,男,江苏,72,15346,扎克·施奈德电影报道:《蝙蝠侠大战超人:正义黎明》最初设定在冬天❄️❄️ #蝙蝠侠大战超人:正义黎明##ZackSnyder##ZackSnyder[超话]# [组图共6张] 原图 ,无,2021-04-19 12:35,ZackSnyder超话,296,45,35,无
-KbBaWdof1,扎克·施奈德电影报道,男,江苏,72,15346,"扎克·施奈德电影报道:【扎克·施奈德、克里斯·特里奥与华纳兄弟影业关于BVS片名的争论】“我记得我和制片公司反复讨论,《蝙蝠侠大战超人:正义黎明》似乎是华纳兄弟影业唯一喜欢的片名。”施奈德在正义展会上说,“用‘v’代替‘versus’的讨论,就像一场疯狂的谈判……我说,‘伙计们,我们就不能取名《太阳之子和夜之骑士》(Son of Sun and Knight of Night)吗,或者更诗意一点的片名?’他们说,‘绝对不行。’我说,‘这是一场官司吗?’”该制片公司注册的在线域名包括""Man of Steel: Battle the Knight"" 、""Man of Steel: Black of Knight""和""Man of Steel: Knight Falls""。克里斯·特里奥:“我更喜欢一些非常简单的片名,比如《蝙蝠侠和超人》(Batman and Superman)。或者延续《超人:钢铁之躯》的脉络,感觉更像是《超人:钢铁之躯》的续集。有一段时间,我们讨论过把它命名为《正义联盟:(副标题)》,暗示这部电影将成为《正义联盟》的开始,尽管它看起来并不像这样。比如《正义联盟:根基》(Justice League: Foundations)或者《正义联盟:崛起》(Justice League: Rising)。”“人们总是问我关于BVS的事情,我总是说,‘听着,事实是,在某种程度上,我们可以说是从制片公司那里偷了那部电影。’这并不是制片公司100%想要制作的电影。”施奈德说,“如果你观察这种解构、建构、再解构、再建构的弧线,那就是我们的节奏。当然,BVS是一部解构电影,而《正义联盟》则是一部建构电影。”施奈德补充道:“所以对我来说,回想起来,我同意克里斯的观点,我希望我们能更努力地与他们战斗。但我觉得我是偷偷制作BVS的,我觉得当他们说,‘可以,但我们只想叫它《蝙蝠侠大战超人》。’我说,‘我们正在讨论制作的那部电影?哦,好吧,既然那样,也可以。’只要不是‘片名和电影我们都不喜欢’就行。”#蝙蝠侠大战超人:正义黎明##ZackSnyder##ZackSnyder[超话]# [组图共6张] 原图 ",无,2021-04-19 10:40,ZackSnyder超话,614,185,58,无
-Kbl6k9sFs,AssCrackBandit_V,男,其他,5553,424,AssCrackBandit_V:#ZackSnyder[超话]##蝙蝠侠大战超人# 原图 ,无,2021-04-17 17:45,iPhone 12,4,0,0,无
-KbkEiofvK,明月何时照哥谭,男,广东,656,2616,明月何时照哥谭:FaceApp+醒图推半天,这个supergirl可还行?#ZackSnydersJusticeLeague# #dc电影# #ZackSnyder[超话]# #超人钢铁之躯# 原图 ,无,2021-04-17 16:36,搜狗高速浏览器,2,0,0,无
-KbiXzxmRY,扎克·施奈德电影报道,男,江苏,72,15346,扎克·施奈德电影报道:《活死人军团》新剧照🧟♀️🧟♂️🧟#活死人军团##ArmyoftheDead##亡者之师##ZackSnyder[超话]# [组图共6张] 原图 ,无,2021-04-17 12:18,ZackSnyder超话,68,6,10,无
-KbikKa0zD,Joey_Young杨昭,男,北京,184,100,Joey_Young杨昭:#ZackSnyder[超话]# For ZSJL! 原图 ,无,2021-04-17 10:42,ZackSnyder超话,6,1,4,无
-Kb9GtCi9n,AssCrackBandit_V,男,其他,5553,424,AssCrackBandit_V:笑死,成人商品#ZackSnyder[超话]# AssCrackBandit_V的微博视频 ,无,2021-04-16 12:41,微博视频号,0,0,0,无
-Kb8LzeDB9,葬月剑士邪龍JaakuDragon,男,湖南,175,1775,葬月剑士邪龍JaakuDragon:#ZackSnyder[超话]#坐等,预计527发行(?)。到时候可以的话买几张,低价或直接送给一些群友。 [组图共2张] 原图 ,无,2021-04-16 10:21,ZackSnyder超话,3,1,1,无
-Kb8J5c2pD,AssCrackBandit_V,男,其他,5553,424,AssCrackBandit_V:#ZackSnyder[超话]# 日版导剪4K&BD已经上架了,6.25发货[嘻嘻] [组图共6张] 原图 ,无,2021-04-16 10:15,ZackSnyder超话,3,0,0,无
-Kb4Psp0WV,第六等星,男,广西,982,294,第六等星:#ZackSnyder[超话]#B站、优酷、爱奇艺等都即将上线《扎克施耐德版正义联盟》,根据优酷的显示来看上线时间是5月3号~还好B站没让我白开大会员。终于就要可以名正言顺的看导剪了!!! [组图共4张] 原图 ,无,2021-04-16 00:19,ZackSnyder超话,7,0,0,无
-Kb1ufhuMr,RestoreTheSnyderVerse,男,其他,80,117,RestoreTheSnyderVerse:太懂了吧😅破站第一扎斯林又一个小号👏😅#RestoreTheSnyderVerse##ZackSnyder[超话]##zacksnyder# 原图 ,无,2021-04-15 15:49,微博国际版,3,0,1,无
diff --git a/topic/comment/KbOo0vsn5.csv b/topic/comment/KbOo0vsn5.csv
deleted file mode 100644
index 424c8ae..0000000
--- a/topic/comment/KbOo0vsn5.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-https://weibo.cn//u/6270105694,夏天里的碳酸气泡,女,其他,948,443,7311,啊啊啊洛羿真的是完美男友啊!,0,2021-04-20 20:24
-https://weibo.cn//u/6798523013,咕咕的核桃仁,女,上海,29,204,3,秀秀好可爱啊啊啊 咕咕我爱了,0,2021-04-20 20:23
diff --git a/topic/top_topics.txt b/topic/top_topics.txt
index 2b9c044..b027673 100644
--- a/topic/top_topics.txt
+++ b/topic/top_topics.txt
@@ -1,19 +1,3 @@
-易建联
-孑风洗陈
-小个子博主
-独居生活日记
-电影版诛仙
-皇马
-大熊猫萌兰
-鹿晗
-ZackSnyder
-骆王宇
-毛利兰
-刘雨昕
-丁程鑫
-日上免税店
-青春有你3
-188男团
-柯哀
-电影维和防暴队
+̽
+˸
diff --git "a/topic/\344\270\201\347\250\213\351\221\253.csv" "b/topic/\344\270\201\347\250\213\351\221\253.csv"
deleted file mode 100644
index 10aa036..0000000
--- "a/topic/\344\270\201\347\250\213\351\221\253.csv"
+++ /dev/null
@@ -1,13 +0,0 @@
-微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
-KbOqYC0Lp,清芷小阔爱,女,其他,205,78,清芷小阔爱:#张雨绮丁程鑫加入快乐大本营#当时他的很多粉丝不都说他因为高考不参加吗? ,无,2021-04-20 20:27,荣耀8X,0,0,0,无
-KbOqS8bpP,XiaMi-程,女,重庆,590,94,XiaMi-程:#丁程鑫[超话]#▪#丁程鑫快乐大本营# 今日份快本直播可可爱爱的丁哥自截/12p[抱一抱]@时代少年团-丁程鑫 [组图共12张] 原图 ,无,2021-04-20 20:27,丁程鑫超话,1,0,0,无
-KbOqR1Ked,温风沐麦圆ll,女,黑龙江,675,148,温风沐麦圆ll:#张雨绮丁程鑫加入快乐大本营#没什么可看的时候就看快本,不要会员还不用盯着看细节,当客厅背景音超级舒服张,,,算了,这三个月我不看了 原图 ,无,2021-04-20 20:27,HUAWEI nova 2s,0,0,0,无
-KbOqIDuAo,不想再用改名卡,女,北京,235,2972,不想再用改名卡:#张雨绮丁程鑫加入快乐大本营#芒果霸霸,真好哇,真好哇秘密花园也开啦丁儿会认识很多很多厉害的人期待子#丁程鑫快乐大本营# @时代少年团-丁程鑫 原图 ,无,2021-04-20 20:26,无,1,0,3,无
-KbOqG3xc1,夏日樱缘,女,北京,169,10210,夏日樱缘:#张雨绮丁程鑫加入快乐大本营#丁哥!好快乐 以后有看快本的源泉了 ,无,2021-04-20 20:26,HUAWEI nova 3i,1,0,0,无
-KbOqBlWh8,浪漫玫瑰悸,女,海外,154,693,浪漫玫瑰悸:我现在的感觉就是 丁程鑫和这个团这个公司好像没什么关系了 就这样挺好的 除了团婊之外大家都开心呀 ,无,2021-04-20 20:26,无,0,0,0,无
-KbOqutFPD,攸犬uu_,女,辽宁,618,2687,攸犬uu_:#张雨绮丁程鑫加入快乐大本营#期待就完事啦 限定快乐~ ,无,2021-04-20 20:26,年王老婆的Android,0,0,0,无
-KbOqtBwKN,沦陷于k蔡先生,女,其他,1153,3139,沦陷于k蔡先生:#张雨绮丁程鑫加入快乐大本营#期待丁程鑫@时代少年团-丁程鑫 ,无,2021-04-20 20:26,三星 GALAXY Note8,0,0,0,无
-KbOqqlwiQ,朽木乜,男,其他,153,1093,朽木乜:爬墙外网 instagram 油管 推特看平区教程可以愉快下载的教程 ins特效🤩啦不乱于Vp心,不困于情不畏将来,不念过往,如此嗯,安好恩UNINE 金泰亨 李振宁 边伯贤exo 贾斯汀比伯 防弹少年团 易烊千玺 时代少年团 易烊千玺马嘉祺、丁程鑫、宋亚轩、刘耀文、Lisa、金泫雅、姜丹尼尔 ins ,无,2021-04-20 20:25,微博 HTML5 版,1,0,1,无
-KbOqmhL5y,莫小爪清潼,女,海南,174,182,莫小爪清潼:#何炅[超话]#快乐大本营入伙饭快乐限定团 张雨绮 丁程鑫小何cut画面 莫小爪清潼的微博视频 ,无,2021-04-20 20:25,何炅超话,1,0,0,无
-KbOqhtyTt,麦兜兜的小汤,女,广西,125,32,麦兜兜的小汤:#张雨绮丁程鑫加入快乐大本营#快乐限定,小丁加油! ,无,2021-04-20 20:25,荣耀 9X,1,0,0,无
-KbOqa5ovB,漫游山城札记,女,重庆,292,64,漫游山城札记:我为#丁程鑫[超话]#贡献66影响力,超话目前在明星超话No.30!还差1.6万影响力超越上一名!戳这里→http://t.cn/Rr9cFzM 跟我一起助TA荣登超话封面吧~ ,无,2021-04-20 20:25,超话,0,0,0,无
diff --git "a/topic/\345\210\230\351\233\250\346\230\225.csv" "b/topic/\345\210\230\351\233\250\346\230\225.csv"
deleted file mode 100644
index d16f7fa..0000000
--- "a/topic/\345\210\230\351\233\250\346\230\225.csv"
+++ /dev/null
@@ -1,8 +0,0 @@
-微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
-KbOrbEj4K,可能鱼都被海风吹走了Yee,女,甘肃,341,3632,可能鱼都被海风吹走了Yee:老婆生日快乐,谢谢你这么用心在你生日的时候带给我们这么好的作品,每首都好好听,好喜欢。蛋糕给你吃,爱你💙 ☔@THE9-刘雨昕 [组图共2张] 原图 ,无,2021-04-20 20:27,☔ 🐦 Android,0,0,0,无
-KbOrattOb,fjura_,女,北京,833,177,fjura_:分享专辑 THE9-刘雨昕《EPSILON》 EPSILON @QQ音乐 原图 ,无,2021-04-20 20:27,iPhone 12 Pro Max,0,0,0,无
-KbOratttn,麻豆娱乐,女,广东,1144,7292021,麻豆娱乐:#刘雨昕0420生日快乐#生日快乐大宝!!有梦有爱有伞 未来一起奔赴祝雨昕生日快樂 EP 《EPSILON》瘋狂大賣 [组图共6张] 原图 ,无,2021-04-20 20:27,刘雨昕超话,0,0,0,无
-KbOrbEj4K,可能鱼都被海风吹走了Yee,女,甘肃,341,3632,可能鱼都被海风吹走了Yee:老婆生日快乐,谢谢你这么用心在你生日的时候带给我们这么好的作品,每首都好好听,好喜欢。蛋糕给你吃,爱你💙 ☔@THE9-刘雨昕 [组图共2张] 原图 ,无,2021-04-20 20:27,☔ 🐦 Android,0,0,0,无
-KbOrattOb,fjura_,女,北京,833,177,fjura_:分享专辑 THE9-刘雨昕《EPSILON》 EPSILON @QQ音乐 原图 ,无,2021-04-20 20:27,iPhone 12 Pro Max,0,0,0,无
-KbOratttn,麻豆娱乐,女,广东,1144,7292021,麻豆娱乐:#刘雨昕0420生日快乐#生日快乐大宝!!有梦有爱有伞 未来一起奔赴祝雨昕生日快樂 EP 《EPSILON》瘋狂大賣 [组图共6张] 原图 ,无,2021-04-20 20:27,刘雨昕超话,0,0,0,无
-KbOrabT4O,2021牛雨熏年,女,北京,755,1003,2021牛雨熏年:好东西啊好东西啊!分享:为什么我认为刘雨昕的《Of Course》是好作品:谈谈语感、乐感、通感;也谈谈性感 为什么我认为刘雨昕的《Of Course》是好作品:谈谈语感、乐感、通感;也谈谈性感 原图 ,无,2021-04-20 20:27,豆瓣,0,0,0,无
diff --git "a/topic/\345\220\215\344\276\246\346\216\242\346\237\257\345\215\227.csv" "b/topic/\345\220\215\344\276\246\346\216\242\346\237\257\345\215\227.csv"
new file mode 100644
index 0000000..779842a
--- /dev/null
+++ "b/topic/\345\220\215\344\276\246\346\216\242\346\237\257\345\215\227.csv"
@@ -0,0 +1,33 @@
+微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
+KbP1v42ao,Afuyu_贝克街,女,陕西,462,1534,Afuyu_贝克街:#名侦探柯南[超话]##松田阵平# 都是他都是他!!导致我现在看高木和佐藤都意难平本来可以叫松田美和子的 [组图共2张] 原图 ,无,2021-04-20 21:55,名侦探柯南超话,0,0,0,无
+KbP1aDkPT,二次元漫漫君,女,北京,59,118737,二次元漫漫君:#名侦探柯南#小兰和柯南的爱情,永远是双向奔赴的! 二次元漫漫君的微博视频 ,无,2021-04-20 21:54,微博视频号,0,0,0,无
+KbP13yXx1,不是火星也不是水星,女,安徽,143,7,不是火星也不是水星:http://t.cn/A6cq8fvZ 我的评分:#名侦探柯南:绯色的子弹#没有想象中的那么难看,整体故事性感觉还好,关键的高潮部分确实是会让人快速打出一串??????这种程度的迷惑……在小兰喊出柯南的名字柯南也大喊小兰的一瞬间还是很感人的,一瞬间有点泪目……灰原哀显得更奇怪了 ,无,2021-04-20 21:53,微评,0,0,0,无
+KbP0U6Idh,第五音_,女,其他,67,256,第五音_:#音#【Animenz】名侦探柯南:绯色的弹丸 - 永远的不在场证明 钢琴#哔哩哔哩动画# 【Animenz】名侦探柯南:绯色的弹丸 - 永远的不在场证明 钢琴 ,无,2021-04-20 21:53,哔哩哔哩,0,0,0,无
+KbP04Fwdx,浅唱斟酌,女,陕西,64,76,浅唱斟酌:#名侦探柯南:绯色的子弹##柯南# diss剧场版是新兰番还是柯哀番的真的没法理解,这次明明是赤井家独秀,非要追cp的话,秀吉和由美不香吗对了,比较兰和哀戏份的真的不是在搞笑吗?这和主线cp基本没啥关系啊,这俩人在这期剧场版基本工具人呀,这还得比比???这次名场面应包括:赤井秀一被亲妈和亲妹合作爆锤,被亲妈言语威胁江户川柯南渣男如何养成绯色的子弹结束ps:超导磁悬浮列车能在理论上成为现实吗?推理其实比较一般,但情节相对来说比较丰满,根本不像yxh说的那样 ,无,2021-04-20 21:52,vivo X50专业影像旗舰,0,0,0,无
+KbOZNymGw,仙气撩人-m,女,安徽,123,50,仙气撩人-m:赤井秀一#名侦探柯南:绯色的子弹# 原图 ,无,2021-04-20 21:51,Samsung Galaxy S8+,0,0,0,无
+KbOYSunlB,据说是豆馅包子_欧根光辉橙海呆,女,海外,2791,612,据说是豆馅包子_欧根光辉橙海呆:#名侦探柯南:绯色的子弹# 这部是挺难看的,各种强行削弱和降智,各种工具人和emmm很难给出评价的剧情,以及党争名场面;不过别带脑子,看赤井一家妈妈打儿子大哥揍三妹二哥小天使,这一家子我知道我就是不说我猜到我偏要藏着,一家天赋异禀真的好帅。至于MVP嘛当然是足球,柯南踢足球是情怀之巅。 ,无,2021-04-20 21:49,iPhone客户端,0,0,0,无
+KbOYvtHti,此少女是濒危物种,女,山东,400,1198,此少女是濒危物种:听说女生看柯南都是冲着帅哥去的💕#名侦探柯南:绯色的子弹##名侦探柯南##赤井秀一# 济南·CC PARK艺术主题购物中心 显示地图 [组图共2张] 原图 ,#赤井秀一#,2021-04-20 21:48,iPhone客户端,0,0,0,无
+KbOYaa0D9,梨诺星冰乐,女,上海,99,38,梨诺星冰乐:我现在真的满脑子名侦探柯南 ,无,2021-04-20 21:47,HUAWEI P30,0,0,0,无
+KbOY3m87Z,Amoda_阿毛,女,广东,928,753,Amoda_阿毛:#名侦探柯南:绯色的子弹# 包场的快乐哈哈开头就猜到凶手系列老套的复仇梗,高潮在后面20分钟 [组图共4张] 原图 ,无,2021-04-20 21:47,iPhone客户端,0,0,0,无
+KbOXZf4C9,-Alchemist-,女,其他,810,160,-Alchemist-:剧场版真是个迷「好烂…但下一部还会看」这句话已经说了很多年了还是被片尾曲惊艳到!椎名林檎 我永远挚爱✌🏻️✌🏻️btw好想吃鳗鱼饭#名侦探柯南:绯色的子弹# 原图 ,无,2021-04-20 21:47,iPhone客户端,0,0,0,无
+KbOXB1mBK,一介_俗人_,男,其他,171,147,一介_俗人_:#贝克街的亡灵##名侦探柯南:绯色的子弹[电影]# 剧场版看过很多,最喜欢的还是贝克街的亡灵[羞嗒嗒]磕新兰 [组图共2张] 原图 ,无,2021-04-20 21:46,iPhone客户端,0,0,1,无
+KbOXufHgo,末日丁香clove,女,山东,110,31,末日丁香clove:打卡2021柯南剧场版很多人说不好看但我还是看的热血澎湃津津有味,有赤井秀一的剧场版就是很好看!#柯南##名侦探柯南:绯色的子弹[电影]# [组图共3张] 原图 ,无,2021-04-20 21:45,vivo X23 AI非凡摄影,2,0,2,无
+KbOXjz4eQ,云中谁寄锦书来_坤坤,女,河北,147,27,云中谁寄锦书来_坤坤:我的月亮永悬不落#名侦探柯南# 原图 ,无,2021-04-20 21:45,iPhone客户端,0,0,0,无
+KbOWRtHui,史迪泰仔,男,海外,297,718,史迪泰仔:首页有看了名侦探柯南绯色的子弹的宝汁嘛 好看不 ,无,2021-04-20 21:44,iPhone客户端,0,0,4,无
+KbOWFnVfF,obliviu,男,湖北,38,655,obliviu:今天和念念🙆🏻看电影🎬了#名侦探柯南:绯色的子弹# 荆门·荆楚理工学院 显示地图 [组图共3张] 原图 ,无,2021-04-20 21:43,iPhone XR,0,0,1,无
+KbOWDAm6o,绿绿绿_绿萝,女,湖南,430,1469,绿绿绿_绿萝:#名侦探柯南:绯色的子弹# 我去二刷了,这次看的国语配音版,赤井秀一的国语配音声线超级棒!喊柯南小子的时候又苏又温柔。 ,无,2021-04-20 21:43,iPhone客户端,0,0,0,无
+微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
+KbP4O505h,橙心社,女,上海,485,140795,橙心社:#柯南# #剧场版# #名侦探柯南:绯色的子弹# 《绯色的子弹》爆了!三天票房22亿 目标破百亿! 橙心社的微博视频 ,无,2021-04-20 22:03,微博视频号,0,0,1,无
+KbP3CcyBi,尹口小月,女,广东,441,7932,尹口小月:哥斯拉大战金刚🦍名侦探柯南:绯色的子弹🚄这两部电影开场半小时剧情都没看到,可惜 [组图共2张] 原图 ,无,2021-04-20 22:00,iPhone客户端,0,0,0,无
+KbP3q6Ngq,L1zhenMeN_,男,辽宁,147,1111,L1zhenMeN_:#名侦探柯南绯色的弹丸#真相永远只有一个! L1zhenMeN_的微博视频 ,无,2021-04-20 22:00,iPhone 11,0,0,0,无
+KbP3d8TeM,YHLFirework,女,广东,208,136,YHLFirework:#名侦探柯南[超话]##绯色的弹丸##赤井秀一# 这个海报绝绝子 大家快去买个相框框起来 真的好看死了 快去买!!!@新一的追番日常 绝了真的 太谢谢你 我这几天的快乐都是因为这个海报周边对了 海报尺寸是30cmx42cm 大家快去某宝买!!! [组图共6张] 原图 ,无,2021-04-20 21:59,名侦探柯南超话,0,0,0,无
+KbP33nIb2,三金西柚z,女,黑龙江,34,99,三金西柚z:#名侦探柯南##赤井秀一# 赤井秀一真的太帅了风一样的男子 [组图共3张] 原图 ,无,2021-04-20 21:59,荣耀10青春版,0,0,1,无
+KbP2FnbnS,眰恦77777,女,其他,241,88,眰恦77777:#🌹##名侦探柯南:绯色的弹丸##贩卖日常##强行九张# 自贡·自贡星维国际电影城 显示地图 [组图共9张] 原图 ,#强行九张#,2021-04-20 21:58,vivo X23全息幻彩,0,0,0,无
+KbP2qnqFv,逆风-涅槃,女,四川,351,631,逆风-涅槃:#名侦探柯南:绯色的子弹# 终于有空来看了包场的感觉不要太爽看完整个人都开心了🥳 [组图共4张] 原图 ,无,2021-04-20 21:57,iPhone XR,0,0,0,无
+KbP1v42ao,Afuyu_贝克街,女,陕西,462,1534,Afuyu_贝克街:#名侦探柯南[超话]##松田阵平# 都是他都是他!!导致我现在看高木和佐藤都意难平本来可以叫松田美和子的 [组图共2张] 原图 ,无,2021-04-20 21:55,名侦探柯南超话,0,0,2,无
+KbP1aDkPT,二次元漫漫君,女,北京,59,118738,二次元漫漫君:#名侦探柯南#小兰和柯南的爱情,永远是双向奔赴的! 二次元漫漫君的微博视频 ,无,2021-04-20 21:54,微博视频号,2,0,0,无
+KbP13yXx1,不是火星也不是水星,女,安徽,143,7,不是火星也不是水星:http://t.cn/A6cq8fvZ 我的评分:#名侦探柯南:绯色的子弹#没有想象中的那么难看,整体故事性感觉还好,关键的高潮部分确实是会让人快速打出一串??????这种程度的迷惑……在小兰喊出柯南的名字柯南也大喊小兰的一瞬间还是很感人的,一瞬间有点泪目……灰原哀显得更奇怪了 ,无,2021-04-20 21:54,微评,0,0,0,无
+KbP0U6Idh,第五音_,女,其他,67,256,第五音_:#音#【Animenz】名侦探柯南:绯色的弹丸 - 永远的不在场证明 钢琴#哔哩哔哩动画# 【Animenz】名侦探柯南:绯色的弹丸 - 永远的不在场证明 钢琴 ,无,2021-04-20 21:54,哔哩哔哩,0,0,0,无
+KbP04Fwdx,浅唱斟酌,女,陕西,64,76,浅唱斟酌:#名侦探柯南:绯色的子弹##柯南# diss剧场版是新兰番还是柯哀番的真的没法理解,这次明明是赤井家独秀,非要追cp的话,秀吉和由美不香吗对了,比较兰和哀戏份的真的不是在搞笑吗?这和主线cp基本没啥关系啊,这俩人在这期剧场版基本工具人呀,这还得比比???这次名场面应包括:赤井秀一被亲妈和亲妹合作爆锤,被亲妈言语威胁江户川柯南渣男如何养成绯色的子弹结束ps:超导磁悬浮列车能在理论上成为现实吗?推理其实比较一般,但情节相对来说比较丰满,根本不像yxh说的那样 ,无,2021-04-20 21:52,vivo X50专业影像旗舰,0,0,0,无
+KbOZNymGw,仙气撩人-m,女,安徽,123,50,仙气撩人-m:赤井秀一#名侦探柯南:绯色的子弹# 原图 ,无,2021-04-20 21:51,Samsung Galaxy S8+,0,0,0,无
+KbOYSunlB,据说是豆馅包子_欧根光辉橙海呆,女,海外,2791,612,据说是豆馅包子_欧根光辉橙海呆:#名侦探柯南:绯色的子弹# 这部是挺难看的,各种强行削弱和降智,各种工具人和emmm很难给出评价的剧情,以及党争名场面;不过别带脑子,看赤井一家妈妈打儿子大哥揍三妹二哥小天使,这一家子我知道我就是不说我猜到我偏要藏着,一家天赋异禀真的好帅。至于MVP嘛当然是足球,柯南踢足球是情怀之巅。 ,无,2021-04-20 21:49,iPhone客户端,0,0,0,无
diff --git "a/topic/\345\244\247\347\206\212\347\214\253\350\220\214\345\205\260.csv" "b/topic/\345\244\247\347\206\212\347\214\253\350\220\214\345\205\260.csv"
deleted file mode 100644
index 66868cc..0000000
--- "a/topic/\345\244\247\347\206\212\347\214\253\350\220\214\345\205\260.csv"
+++ /dev/null
@@ -1,15 +0,0 @@
-微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
-KbOcyrshW,闲庭-戏纸鸢,女,北京,429,9764,闲庭-戏纸鸢:#萌四萌五[超话]#4/20姐妹两在木架上玩轮胎,打闹,引得隔壁的三哥#大熊猫萌兰[超话]# 站着趴窗看热闹[doge],随后小胖么就去爬树了 闲庭-戏纸鸢的微博视频 ,无,2021-04-20 19:51,萌四萌五超话,10,0,3,无
-KbObbFboK,么么儿mua,女,辽宁,807,521,么么儿mua:#带着萌兰游世界##大熊猫萌兰[超话]#[爱你]#喀什古城# [组图共15张] 原图 ,无,2021-04-20 19:48,HUAWEI P30,0,0,0,无
-KbO85kwGS,闲庭-戏纸鸢,女,北京,429,9764,"闲庭-戏纸鸢:#大熊猫萌兰[超话]# 4/20 ,里边混了两张4月15号的照片(么仔第一天对外亮相爬树),想必大家轻而易举的就能辨别出来[嘘] [组图共17张] 原图 ",无,2021-04-20 19:40,大熊猫萌兰超话,21,3,12,无
-KbO6w6vuR,么么儿mua,女,辽宁,807,521,么么儿mua:#带着萌兰游世界##大熊猫萌兰[超话]#[爱你]#喀什古城# 么么儿mua的微博视频 ,无,2021-04-20 19:36,微博视频号,0,0,0,无
-KbNQIhxQs,么么儿就是萌英俊啊,女,四川,234,494,么么儿就是萌英俊啊:#大熊猫萌兰[超话]#[哈哈]拜托老干妈给我买的东西到啦!小心翼翼地撕开萌兰的透明胶,看见里面的东西太满足啦!都好好看谢谢老干妈送我的北北.熊猫谢谢老干妈包装得这么好!(PS:希望北动文创店多出一些萌兰宝宝的周边,我们好买买买!) [组图共2张] 原图 ,无,2021-04-20 18:56 ,大熊猫萌兰超话,39,0,10,无
-KbMPUv5Mp,最爱萌三蛋,女,上海,378,2692,最爱萌三蛋:#大熊猫萌兰[超话]#【20210420】北动小甜甜,不甜不要钱! [组图共6张] 原图 ,无,2021-04-20 16:21 ,大熊猫萌兰超话,135,15,52,无
-KbMKuyOhO,最爱萌三蛋,女,上海,378,2692,最爱萌三蛋:#大熊猫萌兰[超话]#么仔你头套松了[doge] 原图 ,无,2021-04-20 16:08 ,大熊猫萌兰超话,46,1,9,无
-KbMKe3izf,萌萌哒小笨猪,男,海外,343,5974,萌萌哒小笨猪:#萌萌哒小笨猪看熊猫#2021.4.20大熊猫萌兰 穆叔叫起床叫不起来拍摄地北京动物园 萌萌哒小笨猪的微博视频 ,无,2021-04-20 16:07 ,iPhone客户端,1,0,0,无
-KbMJa8tdY,萌萌哒小笨猪,男,海外,343,5974,萌萌哒小笨猪:#萌萌哒小笨猪看熊猫#2021.4.20大熊猫萌兰不想上树 穆叔放的拍摄地北京动物园 萌萌哒小笨猪的微博视频 ,无,2021-04-20 16:05 ,iPhone客户端,0,0,0,无
-KbMFvcaw1,开江发布,男,四川,136,7236,开江发布:大萌兰吃播上线啦~!#90后小伙立志给大熊猫当保镖# 四川共青团的微博视频 ,无,2021-04-20 15:56 ,微博视频号,4,0,0,无
-KbMEPfFlq,萌萌哒小笨猪,男,海外,343,5974,萌萌哒小笨猪:#萌萌哒小笨猪看熊猫#2021.4.20大熊猫萌兰有人进我院子我好好闻闻拍摄地北京动物园 北京 萌萌哒小笨猪的微博视频 显示地图 ,#萌萌哒小笨猪看熊猫#,2021-04-20 15:54 ,iPhone客户端,0,0,0,无
-KbMu7vI6t,萌萌哒小笨猪,男,海外,343,5974,萌萌哒小笨猪:#萌萌哒小笨猪看熊猫#2021.4.20大熊猫萌兰奶爸拿下来了放这里开心的吃拍摄地北京动物园 北京 显示地图 [组图共17张] 原图 ,#萌萌哒小笨猪看熊猫#,2021-04-20 15:28,无,2,0,0,无
-KbMm33DUm,萌萌哒小笨猪,男,海外,343,5974,萌萌哒小笨猪:#萌萌哒小笨猪看熊猫#2021.4.20大熊猫萌兰睡醒了等着加餐了拍摄地北京动物园 [组图共18张] 原图 ,无,2021-04-20 15:08,无,0,0,0,无
-KbK2ruKNu,奈雪的栗子,女,其他,506,3612,奈雪的栗子:20210419】我是谁?我在哪?哦,我是萌兰,我刚睡醒,还在院子里~#大熊猫萌兰[超话]# 原图 ,无,2021-04-20 09:14 ,大熊猫萌兰超话,118,6,32,无
diff --git "a/topic/\345\255\221\351\243\216\346\264\227\351\231\210.csv" "b/topic/\345\255\221\351\243\216\346\264\227\351\231\210.csv"
deleted file mode 100644
index ec72f6b..0000000
--- "a/topic/\345\255\221\351\243\216\346\264\227\351\231\210.csv"
+++ /dev/null
@@ -1,12 +0,0 @@
-微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
-KbMOCrwHo,萤火眠眠YB,女,云南,276,228,萤火眠眠YB:#孑风洗陈[超话]#“不麻烦,笔是我偷的,想见哥哥是真的。”互[羞嗒嗒] ——陆惊宴 原图 ,无,2021-04-20 16:18 ,孑风洗陈超话,0,0,12,无
-KbKXD7tv2,无欲无求的小玩家,女,北京,346,73,无欲无求的小玩家:#孑风洗陈[超话]#喜欢你我说了算! [组图共3张] 原图 ,无,2021-04-20 11:35 ,孑风洗陈超话,0,0,14,无
-KbKxTsZcP,阿九为什么叫阿九-,女,广东,433,1493,阿九为什么叫阿九-:#孑风洗陈[超话]# 按照顺丰这么慢,我可能周四都发不了书签,如果周四发不了,当我没说过之前的话[胖红生气] 原图 ,无,2021-04-20 10:31 ,孑风洗陈超话,2,0,5,无
-KbKhPnUj6,阿九为什么叫阿九-,女,广东,433,1493,阿九为什么叫阿九-:#孑风洗陈[超话]# 吃吐司,涂蓝莓果酱,真的不咋地[泪] ,无,2021-04-20 09:52 ,孑风洗陈超话,0,0,1,无
-KbJT0qk5M,要陪我一起过四季吗,女,陕西,168,273,要陪我一起过四季吗:#孑风洗陈[超话]#就算公交上空无一人司机也会把车开到终点站我的意思是你不要因为任何人的离开而停止原本的生活 ,无,2021-04-20 08:51 ,孑风洗陈超话,0,0,27,无
-KbJovixY5,是谁的井颜啊,女,上海,126,1042,是谁的井颜啊:#孑风洗陈[超话]#早上好,吃早饭了吗一个小计划正在努力制作中我真的是太爱晨哥了呀[打call]我才不会告诉你们是因为我忘了其他书里的话 原图 ,无,2021-04-20 07:36 ,孑风洗陈超话,0,0,2,无
-KbJcbrF0U,巴黎上空飘落的雨,女,山东,572,1721,巴黎上空飘落的雨:#孑风洗陈[超话]##我的房分你一半# 🎐🎐🎐🎐🎐🎐🎐🎐1、你走了就别回来,老子要去爱别人了。2、老子真的要去爱别人了,你别后悔。3、我后悔了。4、陈兮,你欠我一个未来。5、你到底在哪儿。6、我恨你。7、讲个笑话,我听见你喊我了。8、我把心落在你那儿了,你不能不要我。9、你得要我。10、又梦到你了。11、我想见你。12、村上春树说,如果一直想见谁,迟早肯定见得到。13、最喜欢的一句话是好久不见,想说给你听。14、陈兮,新年快乐。15、想唱首歌给你听,歌名叫《其实》。16、陈兮,生日快乐。17、我终于能去找她了。 http://t.cn/A6cCb3N2 ,无,2021-04-20 07:05 ,孑风洗陈超话,8,2,26,无
-KbJ7osnjl,苏小婧鸭_,女,山东,119,94,苏小婧鸭_:#孑风洗陈[超话]#“双箭头的喜欢 是宇宙级别的浪漫” ,无,2021-04-20 06:53 ,孑风洗陈超话,0,0,10,无
-KbJ6jEiJn,小姑娘犯规啊,女,北京,292,300,小姑娘犯规啊:#孑风洗陈[超话]# 🤔原来还差一条啊 ,无,2021-04-20 06:51 ,孑风洗陈超话,0,0,2,无
-KbI1OpXSv,用户feilong,女,青海,5106,1147,用户feilong:#孑风洗陈[超话]#想不失败,要学会忍耐 🌹两头山羊在独木桥上相遇了,谁都不肯让对方,最后相撞,双双掉入悬崖当中。这就是告诉我们,和别人争斗,虽然你可以解气,你也可能把别人撞下悬崖,但是要记住,你付出的代价,那是和别人一起掉进悬崖。 我们对天灾人祸要学会忍耐,对自己的清苦一生要学会忍耐,学佛当中讲究忍耐,你就能够超脱苦海,因为忍耐是学佛人的基础。 要学会放下对别人的抱怨,因为经常抱怨别人的人,他就拥有了失败的基础。因为抱怨没有任何作用,只会给自己的内心增加痛苦,与其抱怨别人,还不如自己好好地去努力。 所以,要想不失败,都要为成功做准备,学会忍耐。能够成功的人,一定不会抱怨和嫉恨别人,忘记自己的痛苦,心平气和地接受失败,这才是一个智者的姿态。 因为抱怨无法改变现实,只有拼搏才能带来希望,我们的佛性不要被自己埋没,只要是真佛,一定会佛光普照啊。 我们放下犹豫,学佛精进,心胸宽大,在这个慈悲的世界当中,人才会拥有和谐的生命。 宽容别人是一种美德,学佛人要学会像大海一样,宽容别人,不管你往大海里倒入污水还是脏水,它照样把你染化成一片绿色的海洋,大海的宽阔胸怀永远处在最低处,所以,要学会在自己的心灵当中保留一块纯洁的海洋和空间,那就是你佛性常住的地方。 ,无,2021-04-20 04:07 ,孑风洗陈超话,0,0,0,无
-KbHSoyzUb,用户feilong,女,青海,5106,1147,用户feilong:#孑风洗陈[超话]#《中庸之道》🌹学佛要管控好自己的心。心不乱动,人像青松;心一贪动,业障开工。一切都是缘分。“缘聚缘散”都是一种现象。学佛人要学会激活心中的“正能量”。念经后,只要有了感恩心,就是“正能量”。拜佛后,烦恼事放下了,就是“正能量”。把学佛心得告诉别人,让别人法喜充满,就是“正能量”。把菩萨拜到自己的心里,每天看到菩萨,就是“正能量”。学佛人在生活中要注意一件事,就是心勿贪多。贪了就痛苦了,贪多没好事。吃得多, 肠胃不好。想多了, 脑子不好。身体累多了, 健康不好。抽烟多了, 免疫系统不好。喝酒多了, 肝脏系统不好。钱多了, 多花钱和被骗机会多了。享乐多了, 作孽多了。生气多了, 烦恼多了。什么事情都要适中,所以佛法说“中庸之道”。昨天跟你们说净信,今天跟你们说不要迷信。迷信会让你忘记你自己的智慧德能。贪心太多失自性,迷信太多丢本性,舍弃贪求有净信,超凡入圣修空性。人生的真谛,你只要“从色看到空”,你就能看到“空即是色”也。接受现在,善果可摘。纠结现在,烦恼不该。学佛自在,放下短暂。想通自在,听佛安排。 ,无,2021-04-20 03:44 ,孑风洗陈超话,0,0,0,无
diff --git "a/topic/\345\260\217\344\270\252\345\255\220\345\215\232\344\270\273.csv" "b/topic/\345\260\217\344\270\252\345\255\220\345\215\232\344\270\273.csv"
deleted file mode 100644
index fb5840b..0000000
--- "a/topic/\345\260\217\344\270\252\345\255\220\345\215\232\344\270\273.csv"
+++ /dev/null
@@ -1,13 +0,0 @@
-微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
-KbOgvsxIz,小米瓜瓜_gua,女,浙江,222,24206,小米瓜瓜_gua:这套jin的完美诠释了什么叫“韩系氛围感”🍼奶欲奶欲的感jio~-荷叶边的衬衫我比较喜欢胸前那两根小带子不系就垂在那里很随意的感jio搭配淡奶黄色的马甲整个人软绵软绵的拿上一杯cafe☕️不要太适合拍照哈哈-指路👉🏻一套是我小♈️滴!(guaguaitsme)#今天穿什么##OOTD##小个子博主[超话]# [组图共12张] 原图 ,无,2021-04-20 20:01,iPhone 11,0,0,0,无
-KbO8niIK6,大卷与小茜,女,广东,45,2682,大卷与小茜:轻甜布朗尼🍩今日份甜味100/100😋#小个子博主[超话]# [组图共6张] 原图 ,无,2021-04-20 19:41,小个子博主超话,2,0,1,无
-KbO0rmn3S,一只大安仔,女,广东,441,6422,一只大安仔:#小个子博主[超话]#裙子测评剪完啦明天中午来[喵喵]#2021有点东西##小个子穿搭##今天穿什么##新星V计划# 原图 ,无,2021-04-20 19:20 ,小个子博主超话,1,0,3,无
-KbNO2qMQo,花圆长,女,其他,86,171593,花圆长:花花的半身裙穿搭最近你们说我胖了....我现在可就是微胖博主#微胖小个子[超话]##小个子女生穿搭##小个子博主[超话]##小个子穿搭##小个子女生穿搭[超话]# [组图共6张] 原图 ,无,2021-04-20 18:50 ,微胖小个子超话,62,1,35,无
-KbNBOcWhb,小仙儿布小布,女,四川,2676,28450,小仙儿布小布:#小个子博主[超话]##布布穿搭志##日系穿搭[超话]#~🌸 用12张图表达对这个小裙子的喜爱~🌸 裙子是昭和时期复古款式~🌸 显身材第一名今天我早点更新哼哼 [组图共12张] 原图 ,无,2021-04-20 18:19 ,小个子博主超话,2,0,4,无
-KbNBy07yO,呀呀酱啊,女,其他,532,1276,呀呀酱啊:不用很配 但却很搭. ✨#小个子博主[超话]##OOTD[超话]##小个子穿搭##今天穿什么# [组图共9张] 原图 ,无,2021-04-20 18:19 ,小个子博主超话,0,0,0,无
-KbNBoxDgy,南风柳韩式搭配,女,浙江,1421,8216,南风柳韩式搭配:这个紫色超级春日#小个子博主[超话]##小个子穿搭##小个子博主##今天穿什么##chic韩风# 杭州 显示地图 原图 ,#chic韩风#,2021-04-20 18:18 ,iPhone客户端,0,0,1,无
-KbNtAf57i,小溪_大海,女,海外,79,1364,小溪_大海:#155.50##小个子博主[超话]# 和上次红色碎花是一起买的不过都下架了微胖小个子穿这种版型的长裙还是很显瘦的姐妹们可以参考一下最后问问姐妹们是喜欢视频还是图片呢 小溪_大海的微博视频 ,无,2021-04-20 17:59 ,iPhone客户端,2,0,2,无
-KbMRlcirR,彤小仙女呀__,女,其他,667,28540,彤小仙女呀__:来撸狗#今天穿什么##OOTD[超话]##小个子博主[超话]# 泉州 显示地图 [组图共9张] 原图 ,无,2021-04-20 16:25 ,iPhone X,2,0,0,无
-KbMtE3pli,大卷与小茜,女,广东,45,2682,大卷与小茜:复古味儿的柏林少女#小个子博主[超话]# [组图共6张] 原图 ,无,2021-04-20 15:27 ,小个子博主超话,7,0,5,无
-KbLlUDaLM,甜桃萌主,男,浙江,354,454253,甜桃萌主:俄罗斯博主Miller Kathie 日常穿搭充满通勤范的简约时尚,简直是小个子女生的穿搭范本~ #甜桃美妆##时尚穿搭# [组图共9张] 原图 ,无,2021-04-20 12:35 ,微博 weibo.com,0,0,0,无
-KbLaDvaDx,天蝎小姐-雅,女,福建,817,32547,天蝎小姐-雅:这个夏天过得像冬天一样但是不得不说这一身真的很绝温柔本人🌸🌸身高152cm#小个子博主[超话]##OOTD[超话]# [组图共12张] 原图 ,无,2021-04-20 12:07 ,小个子博主超话,65,5,34,无
diff --git "a/topic/\346\227\245\344\270\212\345\205\215\347\250\216\345\272\227.csv" "b/topic/\346\227\245\344\270\212\345\205\215\347\250\216\345\272\227.csv"
deleted file mode 100644
index 68007e9..0000000
--- "a/topic/\346\227\245\344\270\212\345\205\215\347\250\216\345\272\227.csv"
+++ /dev/null
@@ -1,9 +0,0 @@
-微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
-KbOqy71rP,这件事就是,女,江苏,147,88,这件事就是:#日上免税店[超话]# 拼倩碧镭射,原价 原图 ,无,2021-04-20 20:26,日上免税店超话,0,0,1,无
-KbOqs6U4V,独霸幼儿园1,女,四川,217,217,独霸幼儿园1:#日上免税店[超话]#出mac chili. ruby woo ,无,2021-04-20 20:26,日上免税店超话,0,0,0,无
-KbOof0rId,magiepourpre,男,海外,390,90,magiepourpre:#日上免税店[超话]#蹲一个mac930 ,无,2021-04-20 20:20,日上免税店超话,0,0,0,无
-KbOm7faRc,白桃芋泥椰,女,辽宁,523,102,白桃芋泥椰:#日上免税店[超话]# 还有要拼白泥的没 开个12件小车 原图 ,无,2021-04-20 20:15,日上免税店超话,0,0,0,无
-KbOk4aqMS,我睡着了Oo,女,香港,222,281,我睡着了Oo:#日上免税店[超话]# 海蓝之谜的气垫和面霜有没有 带价来~ ,无,2021-04-20 20:10,日上免税店超话,1,0,4,无
-KbOiYh065,老师我要吃桃子,男,江苏,493,1158,老师我要吃桃子:#日上免税店[超话]# 找一个海南89下单的 ,无,2021-04-20 20:07,日上免税店超话,0,0,3,无
-KbOg0oKCT,山的那边是海吗_,女,上海,588,356,山的那边是海吗_:#日上免税店[超话]# 想拼一个科颜氏淡斑精华🙋 ,无,2021-04-20 20:00,日上免税店超话,0,0,10,无
-KbOf8FaxA,无对应计划_丶,女,其他,138,427,无对应计划_丶:#日上免税店[超话]# 菁纯110 旧版 骨折价 ,无,2021-04-20 19:58,日上免税店超话,0,0,0,无
diff --git "a/topic/\346\237\257\345\223\200.csv" "b/topic/\346\237\257\345\223\200.csv"
deleted file mode 100644
index c36a834..0000000
--- "a/topic/\346\237\257\345\223\200.csv"
+++ /dev/null
@@ -1,14 +0,0 @@
-微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
-KbOqCaLBa,真夏夢中启介儿,男,上海,922,1483,真夏夢中启介儿:突然想到,你说柯哀注定没好结局就不磕,可我觉得否定单箭头的喜欢人生一定会变得无趣。所以不管怎样,我都喜欢你@SNH48-张怀瑾 ,无,2021-04-20 20:26,◢⁴⁶iPhone XS,0,0,0,无
-KbOpVEOzM,挽月_半夜数星星,女,重庆,237,171,挽月_半夜数星星:#柯哀[超话]#小兰都知道柯南喜欢小哀,还当着小哀的面抱柯南。气抖冷!!!他们圈子,都知道柯哀应该是一对连步美现在都是更亲近小哀而不是柯南知道避嫌气抖冷(抖个激灵,无意黑柯哀党的兰,兰:我是柯哀党啊,我是姐姐) [组图共2张] 原图 ,无,2021-04-20 20:24,柯哀超话,1,0,1,无
-KbOoe9pHD,胜稞快乐追星,女,黑龙江,556,122,胜稞快乐追星:开心的事🈶柯哀发糖了 上山 阿西都是过期快乐可咋整 快点正能量 赐予我正能量吧哈哈哈哈哈哈哈哈哈哈哈哈哈哈快耶斯开心快乐每一天 ,无,2021-04-20 20:20,nova 7 SE 5G 活力版,0,0,0,无
-KbOo4EIqz,棣梵高,男,黑龙江,142,437,棣梵高:柯哀 [组图共6张] 原图 ,无,2021-04-20 20:20,iPhone客户端,0,0,0,无
-KbOn0f4Tw,是滴滴么,女,浙江,350,173,是滴滴么:2021年了,我的首页还有人在嗑魔戒!还有人为了新兰和柯哀吵架。果然只要活得够久什么都可以看见! ,无,2021-04-20 20:17,iPhone客户端,0,0,0,无
-KbOia0SBK,烂片地狱,男,北京,203,2323194,烂片地狱:柯南剧场版票房破亿,据说实际观影中,柯哀画面增多?你去看了吗?#柯南# 烂片地狱的微博视频 ,无,2021-04-20 20:05,微博视频号,0,0,2,无
-KbOhDsdvI,CentWind,男,江苏,197,364,CentWind:#灰原哀[超话]#为什么灰原哀超话可以发言,柯哀超话不能发言。在超话发东西和发微博有什么区别? ,无,2021-04-20 20:04,灰原哀超话,0,0,0,无
-KbOgHfCcB,捕捞银河,女,其他,1330,199,捕捞银河:连喜欢都不能明目张胆的小哀虽然一直磕柯兰但还是会为柯哀感动 [组图共2张] 原图 ,无,2021-04-20 20:02,iPhone客户端,2,0,0,无
-KbOfJiGLv,杯装猕猴桃,女,四川,180,493,杯装猕猴桃:看到新兰和柯哀之争,立马站出来说一句我是坚定的柯哀党 ,无,2021-04-20 19:59,吃我一坨子Android,1,0,0,无
-KbOfubewd,许不许都多,女,其他,105,2535,许不许都多:#柯哀[超话]#《逆旅》解禁第二篇《由暗生》。xl别搞我。🙏 [组图共2张] 原图 ,无,2021-04-20 19:58,柯哀超话,3,0,0,无
-KbOf1fV8U,憨憨陈老婆,女,辽宁,5450,1447,憨憨陈老婆:#名侦探柯南[超话]#柯哀党别给哀招黑了真的,你们到处乱舞最后锅有我们唯粉背 ,无,2021-04-20 19:57,名侦探柯南超话,0,0,0,无
-KbO9Q1Ouy,衣更真绪女仆装了再改名的红烧,女,广东,256,182,衣更真绪女仆装了再改名的红烧:#柯哀[超话]# 我不行了,这次剧场版让我梦回11年前,初中时在贴吧看文哭的撕心裂肺,刚刚在超话看了推文《竟渡河》,我有5,6年没看柯哀文了还是哭的撕心裂肺我的泪点就没变过呜呜呜,时光可以倒流,谢谢m24,让本社畜重回柯哀顺便问问还有没有类似《竟渡河》的文,求推 ,无,2021-04-20 19:44,柯哀超话,4,0,12,无
-KbO8dzKsk,奶茶波波要半糖,女,北京,130,528,奶茶波波要半糖:2021年了,新兰党和柯哀党还在吵架,让我觉得自己仿佛回到了小学和贴吧时代还真是永远年轻,永远火冒三丈啊 ,无,2021-04-20 19:40,iPhone客户端,1,0,0,无
diff --git "a/topic/\346\257\233\345\210\251\345\205\260.csv" "b/topic/\346\257\233\345\210\251\345\205\260.csv"
deleted file mode 100644
index 288aeab..0000000
--- "a/topic/\346\257\233\345\210\251\345\205\260.csv"
+++ /dev/null
@@ -1,5 +0,0 @@
-微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
-KbOc4mpwv,7389lithium,女,其他,106,12,7389lithium:为毛利兰点一首:背对背拥抱 ,无,2021-04-20 19:50,微博国际版,0,0,0,无
-KbNYhvVGV,荼汐DASEKI-赤井秀一现任女友,女,海外,211,435,荼汐DASEKI-赤井秀一现任女友:#当每天都有新奇的事情发生时#我只是想吃个爆米花就走进去了赤井秀一的镜头数我觉得还没那个磁悬浮高铁多每一次和秀一对视我都听到了自己心动的声音看完电影还在回味中一激动抽了两个扭蛋结果出来都是柯南我这个人真的不能买扭蛋/盲盒抽奖这件事就是跟我没关系总的来说就是有事灰原哀/宮野志保无事毛利蘭 [组图共12张] 原图 ,无,2021-04-20 19:15 ,iPhone XS Max,0,0,0,无
-KbNGS7giW,冥峥_等人归,女,其他,199,169,冥峥_等人归:#毛利兰[超话]# 想来求个原图,我记得挺清楚当时原图太太发图配词还是“兰内酱”但是可惜设置半年可见了,所以来试试运气[泪] 原图 ,无,2021-04-20 18:32 ,毛利兰超话,5,0,3,无
-KbNCYCGZ6,Stronger兰Angel,女,海外,429,3923,Stronger兰Angel:#毛利兰[超话]##全世界最好的毛利兰# 授权转载lofter画手鹿生米菌画的兰同人图,美丽帅气兼备的最强御姐兰[给你小心心]授权见评,禁二传二改商用 原图 ,无,2021-04-20 18:22 ,毛利兰超话,48,3,9,无
diff --git "a/topic/\347\213\254\345\261\205\347\224\237\346\264\273\346\227\245\350\256\260.csv" "b/topic/\347\213\254\345\261\205\347\224\237\346\264\273\346\227\245\350\256\260.csv"
deleted file mode 100644
index 3a87fa6..0000000
--- "a/topic/\347\213\254\345\261\205\347\224\237\346\264\273\346\227\245\350\256\260.csv"
+++ /dev/null
@@ -1,11 +0,0 @@
-微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
-KbO9VFGVu,桃九九_,女,海外,455,160552,桃九九_:【WEEKLY VLOG】韩式辣酱炒乌冬面 I 鸡肉滑蛋盖饭 I 干饭人的周末又一个周末记录~我的独居生活以前炒乌冬面放老干妈,第一次尝试放韩式辣酱味道意外的赞!!!还做了鸡肉滑蛋盖浇饭,制作起来也很简单适合吃不了辣的宝子~新的视频感谢大家观看~#我的美食生活vlog# #独居生活图鉴# #独居生活日记[超话]# http://t.cn/A6cCeUPY ,无,2021-04-20 19:45,微博视频号,1,0,4,无
-KbO0Nx6gr,北漂少女大眼萌,女,其他,90,1006223,北漂少女大眼萌:#北漂少女的日常##独居生活图鉴##独居生活日记[超话]# 你知道吗?中国已经有超过2亿单身成年人,其中有7700万是独居状态,远离故乡、父母,独自在城市打拼,住着合租房,大多是单身……在这些标签之下,独居的90后天然地被安上了悲情的色彩。http://t.cn/A6cCdFSZ ,聊一下独居生活,记得过来一起讨论哦~ http://t.cn/RcSYy3n http://t.cn/A6cCdFSe http://t.cn/A6cCgvUO 显示地图 ,http://t.cn/A6cCgvUO,2021-04-20 19:21 ,iPhone 12 Pro Max,258,1,2,无
-KbO0qs0Oe,myways,女,上海,402,258520,myways:#小my VLOG# 近期的早餐好像都是在fafa中度过的,分享一套我百吃不厌的早餐搭配:法式厚吐司+自制拉花咖啡厚吐司建议前一晚浸好,第二天直接烤15min就能吃了,还挺方便的。口感外酥里嫩,很像蛋糕,推荐大家试一下哦。#独居生活日记[超话]##独居生活图鉴# myways的微博视频 ,无,2021-04-20 19:20 ,微博视频号,10,1,2,无
-KbNF99a6s,UNIQ-QINGHUAN,女,福建,458,1422,UNIQ-QINGHUAN::独居少女的生活日记 福州 显示地图 [组图共6张] 原图 ,无,2021-04-20 18:28 ,iPhone客户端,0,0,1,无
-KbNEpycTG,ELLEDECO家居廊,女,上海,330,581639,ELLEDECO家居廊:#独居生活日记[超话]# 对于江书洋而言,艺术是不可或缺的。在几年前接触到当代艺术分支的潮玩后,这位年轻的90后潮玩收藏家感受到收藏的价值与意义。今天与@ELLEDECO家居廊 一起感受其生活态度。 [组图共6张] 原图 ,无,2021-04-20 18:26 ,独居生活日记超话,6,2,0,无
-KbNxO3wfi,微博家居,男,北京,762,8473050,微博家居:#独居生活日记[超话]# 独居的你,日常生活是什么样呢?宅家撸猫、还是外出探店? @西西卡同学 给我们分享了她的独居vlog, 一个人也可以过得充实而美好~你也来 http://t.cn/A6c69C9L 分享独居故事吧!#独居生活图鉴# 西西卡同学的微博视频 ,无,2021-04-20 18:09 ,独居生活日记超话,3,0,0,无
-KbNbEzmaW,没故事的飘飘,女,北京,462,331728,没故事的飘飘:最近经常被问:你是不是一直活得很轻松啊? 衣食无忧、生活工作井井有条,有猫无娃,岁月静好,很难不愉快吧。当然不是了——没有哪一种生活是不会丧的,只要工作,就有无数的烦心事,只要社交,就会有纠缠和为难 。但是,没有这些,快乐与幸福也就很难体会到了吧 每个周末我都争取独处一天,消化心中的郁结,学会发现美好~春天来了,你应明媚有光 BGM《步履不停》《Larmes de caramel》#独居生活日记[超话]##独居生活图鉴##居家植物养成记# http://t.cn/A6cCmGM5 ,无,2021-04-20 17:15 ,微博视频号,123,7,27,无
-KbN5Ht16p,合肥李秀玲设计,女,安徽,361,328099,合肥李秀玲设计:实景1:1复刻效果图 | 106㎡温馨日式家◆面积/106㎡◆风格/日式◆地址/和顺 ·叶语溪无论是在硬装的色彩结构上,还是软装的家具款式上,实景呈现和效果图几乎没什么差别,真正的做到了所见即所得。#合肥装修设计# #独居生活日记[超话]# #装修灵感库# #独居生活图鉴# #合肥·和顺·叶语溪[地点]# [组图共4张] 原图 ,无,2021-04-20 17:00 ,360安全浏览器,6,2,0,无
-KbMp4iw8Y,ELLEDECO家居廊,女,上海,330,581639,ELLEDECO家居廊:#独居生活日记[超话]# 年轻的海归建筑师王旖濛在2020年为自己度身定制了一个家。这个家可以说是她内心世界的外化,她把自己个人的喜好和趣味通过自己的设计和施工,展现在这个家里。南向的落地大窗外正巧是央视大楼,她说,那是她偶像的作品。跟着@ELLEDECO家居廊 来看她如何致敬偶像吧。 [组图共9张] 原图 ,无,2021-04-20 15:15 ,独居生活日记超话,16,5,0,无
-KbLFUxnui,设计师Ryan王恒,男,北京,272,619760,设计师Ryan王恒:#独居生活日记[超话]# “茶道是对尘世琐事中隐藏之美的崇拜。它教导纯粹与和谐,人际敬爱的奥秘,社会秩序的浪漫精神。”大家下午好~#独居生活图鉴##家居设计大赏# 原图 ,无,2021-04-20 13:24 ,独居生活日记超话,5,0,0,无
diff --git "a/topic/\347\224\265\345\275\261\347\211\210\350\257\233\344\273\231.csv" "b/topic/\347\224\265\345\275\261\347\211\210\350\257\233\344\273\231.csv"
deleted file mode 100644
index 26f70e8..0000000
--- "a/topic/\347\224\265\345\275\261\347\211\210\350\257\233\344\273\231.csv"
+++ /dev/null
@@ -1,13 +0,0 @@
-微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
-KbFElCUI6,羡羡100505,女,重庆,854,7292,羡羡100505:#电影版诛仙[超话]##日常见肖战# [哈哈]#肖战欧扎克品牌代言人#日常见肖战 肖战欧扎克品牌代言人ξ( ✿>◡❛) 这花絮也太帅了吧又是为 @X玖少年团肖战DAYTOY 心动的一天花墙走起兔牙守护者肖战♥️甜度爆表肖战♥️完美vocal肖战♥️日系男友肖战♥️肖战超厉害♥️游戏大魔王肖战♥️猜拳黑洞肖战♥️发电机肖战♥️设计师肖战♥️@X玖少年团肖战DAYTOY http://t.cn/A6coYmCP ,无,2021-04-19 22:04,电影版诛仙超话,2,1,171,无
-KbCPsb1jT,羡羡100505,女,重庆,854,7292,羡羡100505:#电影版诛仙[超话]##肖战# [哈哈]#日常见肖战# ❤️ 想把最好的都给你,但是发现你就是最好的肖战我喜欢你 我希望可以 日常见肖战@X玖少年团肖战DAYTOY 快安排 [组图共6张] 原图 ,无,2021-04-19 14:53,电影版诛仙超话,5,1,40,无
-KbsO7uCIX,凳子宽恕几百,男,上海,4179,180,凳子宽恕几百:【游戏美女】【《诛仙》碧瑶 堪称最完美碧瑶COS】裘晓晨在去年夏天出演了《情归诛仙》中的碧瑶,之后大获好评,获得包括《诛仙》作者萧鼎以及原著粉丝的一致认可!而杨幂则可能出现电影版中的碧瑶。粉丝们是否会如愿以偿呢,年底便可见分晓,诛丝们拭目以待吧!#游戏美女# ,无,2021-04-18 13:22,iPhone客户端,0,0,1,无
-Kbr66AaMf,羡羡100505,女,重庆,854,7292,羡羡100505:#电影版诛仙[超话]##日常见肖战# [好喜欢]#肖战# 肖战早安🌞 肖战太帅了好期待如梦 下次🦐 姐手下留情让我买一张吧肖战 日常见肖战⭐⭐⭐认识你,我心里就有了花园,能开出好多花@X玖少年团肖战DAYTOY [组图共8张] 原图 ,无,2021-04-18 09:01,电影版诛仙超话,7,0,205,无
-Kb26373cs,是小呵吖,女,海外,380,757,是小呵吖:电影版的诛仙我就没看,精准避雷不给自己添堵,毕竟那个选角那个造型还有那个故事叙述能让我口吐芬芳三天三夜甚至可能原谅剧版 ,无,2021-04-15 17:22,iPhone客户端,0,0,0,无
-KaT2s6qv0,吉田秋子2021,女,湖北,86,6,吉田秋子2021:我在电影版诛仙超话等级达到LV.5,获得初见美名头衔,老铁双击666,来 #电影版诛仙[超话]#与我畅聊吧! ,无,2021-04-14 18:18,超话,0,0,0,无
-KaQuk1Wur,兔子牙兔子,女,其他,490,75,兔子牙兔子:#电影版诛仙[超话]##肖战斗罗大陆# 肖战斗罗大陆 xz #肖战代言真果粒# 肖战代言真果粒 微风拂面,茶香相伴,真果粒里有真茶,@X玖少年团肖战DAYTOY 专属定制款红柚四季春即将上线,期待!肖战 xz xfx肖战斗罗大陆‖ 肖战代言真果粒 真果粒的微博视频 ,无,2021-04-14 11:49,电影版诛仙超话,0,0,1,无
-KaBG7Dlab,羡羡100505,女,重庆,854,7292,羡羡100505:#电影版诛仙[超话]##肖战蒂兰圣雪品牌代言人#[爱你]#肖战# 忠于自我,做纯粹的自己。与@X玖少年团肖战DAYTOY 一起探寻纯粹自我夏日炎炎 冰淇淋🍦 可以安排了,蒂兰圣雪冰淇淋的微博视频 ,无,2021-04-12 22:07,电影版诛仙超话,11,0,232,无
-KaseYEsAO,羡羡100505,女,重庆,854,7292,羡羡100505:#电影版诛仙[超话]##如梦之梦九周年##肖战参演如梦之梦# 想看肖战饰演的五号病人。之后麻烦给个机会爱和专注的每个当下,都挥洒成了他更闪耀的光芒@X玖少年团肖战DAYTOY X玖少年团肖战DAYTOY的微博视频 ,无,2021-04-11 22:05,电影版诛仙超话,6,0,212,无
-KanVodhjh,栋珑玲贫乏,男,陕西,53,1,栋珑玲贫乏:【游戏美女】【诛仙】碧瑶可以说是完美碧瑶的cosplay。革晓晨在去年夏天出演了《情归诛仙》中的玉瑶,之后获得了好评,《诛仙》的作者萧鼎和原作粉丝都给予了好评。杨幂可能会出现电影版中的碧瑶。粉丝们的愿望是否能实现,年末我就知道了。ヽoo。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 ,无,2021-04-11 11:06,华为手机,0,0,0,无
-Kan3Naoqa,嘶斗蓬双钩,女,浙江,3738,113,嘶斗蓬双钩:【游戏美女】【诛仙】碧瑶可以说是完美碧瑶的cosplay。革晓晨在去年夏天出演了《情归诛仙》中的玉瑶,之后获得了好评,《诛仙》的作者萧鼎和原作粉丝都给予了好评。杨幂可能会出现电影版中的碧瑶。粉丝们的愿望是否能实现,年末我就知道了。ヽoo。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 ,无,2021-04-11 08:54,iPhone客户端,0,0,0,无
-KamQWaxHd,羡羡100505,女,重庆,854,7292,羡羡100505:#电影版诛仙[超话]##肖战石头品牌代言人#[哈哈]#肖战# ♥——————♥肖战早安肖战我喜欢你一早起来听肖战的语音 开启新的一天战式宠女友http://t.cn/A6ccyfMK@X玖少年团肖战DAYTOY ,无,2021-04-11 08:22,肖战女友Android,3,0,71,无
diff --git "a/topic/\347\224\265\345\275\261\347\273\264\345\222\214\351\230\262\346\232\264\351\230\237.csv" "b/topic/\347\224\265\345\275\261\347\273\264\345\222\214\351\230\262\346\232\264\351\230\237.csv"
deleted file mode 100644
index 98d889e..0000000
--- "a/topic/\347\224\265\345\275\261\347\273\264\345\222\214\351\230\262\346\232\264\351\230\237.csv"
+++ /dev/null
@@ -1,10 +0,0 @@
-微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
-KbLuCgKwg,LuNaticOLI,女,上海,221,164,LuNaticOLI:#张哲瀚[超话]#终于熬到了可以发帖的六级,然而第一条帖子却不知从何说起。最深刻的体会就是对张老师的喜欢区别于对其他所有人的喜欢。坦诚说,活了二十多年,也真情实感地喜欢过不少人,有爆红的演员,又踏实的音乐人,有歌手,有运动员。我很欣赏他们的业务能力,欣赏他们的才华,欣赏他们的作品。但对张哲瀚,我觉得我已经不是欣赏,而是发自内心的真挚而强烈地喜欢。我喜欢他的性格,喜欢他的态度,喜欢他的笑,喜欢他每个表情,喜欢他的一本正经,也喜欢他的调皮可爱,喜欢他的言辞,喜欢他的高情商,喜欢他喜欢的一切。说来也巧,我也爱喝茶,爱运动,爱健身,与张老师竟有一些不谋而合之处。但张老师实在比我优秀太多,兴趣广泛的他射箭骑马打高尔夫,甚至爱看书。每每想到这些,就会惊叹一句怎会有这么优秀的人!他是个太阳般的少年,热情奔放活泼,又拥有月亮般的温柔纯真沉稳。所有的美好特质都集中在他一人身上,怎能让人不心生喜欢呢。大家说他十年磨一剑,现在终于大火了。仔细想来,曾经也看过张老师的不少作品,他演的那些角色也还历历在目,遗憾的是没有早一点深入了解他,庆幸的是终于在山河令爆火的契机下让我看到了他,爱上了他。他的专业更不用多说了,毕业大戏我也看了,认真的脸颊上带有不少青涩,再看他现在的戏,能看出这十年他付出了多少努力,又取得了多少进步。专业又认真的张老师,可爱又温柔的小哲,值得最好的一切。期待新歌,期待个人演唱会,期待新剧复古神探,期待新电影维和防暴队。永远走花路吧,最好的哲瀚[心] [组图共9张] 原图 ,无,2021-04-20 12:56 ,张哲瀚超话,16,0,6,无
-KbLiVrgoS,都是月老惹的祸,女,广东,344,150,都是月老惹的祸:#王一博维和防暴队[超话]##王一博维和防暴队# 期待杨震杀青!能赶上国庆,春节也行[笑cry]为王一博买电影票,我迫不及待了 原图 ,无,2021-04-20 12:27 ,王一博维和防暴队超话,3,1,3,无
-KbKgY9o2K,AaIiHhTt-Cyn,男,海外,631,59,AaIiHhTt-Cyn:#电影维和防暴队[超话]#你以血肉之躯,守护和平;我以咫尺之书,遥寄平安。 原图 ,无,2021-04-20 09:50 ,电影维和防暴队超话,6,0,1,无
-KbGHO9Ha7,鲸鱼的CC,女,北京,865,124,鲸鱼的CC:#电影维和防暴队[超话]# 晓看天色暮看云,行也思君,坐也思君。[暖一下]@Johnny黄景瑜 原图 ,无,2021-04-20 00:45 ,电影维和防暴队超话,1,0,0,无
-KbGgDxwsy,xhxbybzjnykyhhmdbhlk,女,北京,235,42,xhxbybzjnykyhhmdbhlk:#王一博维和防暴队# wyb#王一博杨震# 晚安震哥北海平平安安顺顺利利开开心心希望早日在电影院见到你!@UNIQ-王一博 原图 ,无,2021-04-19 23:38,王一博维和防暴队超话,2,0,0,无
-KbFRPwtLi,王一博每天滑滑板,女,浙江,617,208,王一博每天滑滑板:#王一博维和防暴队[超话]# 不懂就问,电影什么时候杀青啊,好想明天就看到电影 ,无,2021-04-19 22:37,王一博维和防暴队超话,0,0,3,无
-KbFAvpHHc,Lilybo,女,广东,470,293,Lilybo:#王一博维和防暴队[超话]#想为震哥去电影院! ,无,2021-04-19 21:54,王一博维和防暴队超话,0,0,0,无
-KbFuqkEiU,别再欺负他了喂,女,重庆,24,13,别再欺负他了喂:想看穿警服的宝,想坐在电影院里看#王一博维和防暴队[超话]# ,无,2021-04-19 21:39,王一博维和防暴队超话,0,0,0,无
-KbCtE0N1y,鱼乐的娱,女,北京,278,2536438,鱼乐的娱:#黄景瑜维和防暴队# 听说今天杀青了,期待起来。黄景瑜的电影《维和防暴队》是2021年才开始拍摄的,片方官宣了主演阵容是黄景瑜、王一博、张哲瀚和钟楚曦。这部电影讲述的是中国维和警察远赴海外执行维和任务的故事,预计将会在2022年上映。 [组图共4张] 原图 ,无,2021-04-19 13:59,iPhone X,449,13,14,无
diff --git "a/topic/\347\232\207\351\251\254.csv" "b/topic/\347\232\207\351\251\254.csv"
deleted file mode 100644
index 28e5a14..0000000
--- "a/topic/\347\232\207\351\251\254.csv"
+++ /dev/null
@@ -1,14 +0,0 @@
-微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
-KbOr2dbxO,Oh_La_La_,女,北京,462,344,Oh_La_La_:穆萨登贝莱加盟马竞,这对于德甲和西甲绝不是好消息,已经开始为联赛冠军未雨绸缪。假如这个登贝莱能很好融入马竞,锋线上就会有至少四种选择,西蒙尼更可以看人下菜。欧冠在下半程的隔山相豆,就意甲更有挑战了。皇马需要一个神奇的阿扎 尔,需要更出色的英超 ? 原图 ,无,2021-04-20 20:27,佛教闻思修超话,0,0,0,无
-KbOpsF7L3,反买,男,海外,227,269436,反买:当选皇马三月最佳球员,本泽马:接下来每场比赛都是决赛本泽马在此前被评为了皇马三月最佳球员,他在近日领取了奖杯,并接受了采访。#欧冠# 本泽马在三月的西甲比赛中表现出色,并且连场取得进球。#欧冠联赛# 本泽马在接受官方采访时说到:“对我们来说,每个球队都在面对皇马时表现出色,他们会退后防守,等待我们进攻,然后打反击。我们需要在每场比赛中踢出自己的足球,并考虑三分。”#五大联赛# “每场比赛都将是决赛,我们必须想着去赢下每场比赛,为三分而战。我们知道剩下的比赛不多了,但是都很难。”#足球# 原图 ,无,2021-04-20 20:23,无,0,0,1,无
-KbOnyaHtP,反买,男,海外,227,269436,反买:ESPN:下周的欧冠半决赛将如期进行据ESPN的消息,欧足联计划下周的欧冠半决赛将如期进行。#欧冠# 2020/21赛季欧冠半决赛,两组对阵分别是巴黎vs曼城,皇马vs切尔西,除巴黎外,其他三家都是欧洲超级联赛创始俱乐部,据此前媒体报道,欧足联可能将曼城、皇马和切尔西踢出欧冠半决赛。#欧冠联赛# 不过据ESPN最新报道声称,消息人士告诉该媒体,欧足联本周不考虑将他们从半决赛中踢出去,下周的比赛将如期进行。#五大联赛# 按照赛程安排,北京时间4月28日凌晨,皇马将主场对阵切尔西,4月29日凌晨,曼城将客战巴黎。#足球# 原图 ,无,2021-04-20 20:18,无,2,0,1,无
-KbOnnj4U4,皇马球迷俱乐部,男,海外,156,1944826,皇马球迷俱乐部:凭借上个月的出色表现,本泽马被MAHOU评选为三月皇马最佳球员。. 皇马球迷俱乐部的微博视频 ,无,2021-04-20 20:18,微博视频号,4,0,2,无
-KbOnfkn9U,挖图志,男,福建,583,1857923,挖图志:#曝皇马、切尔西、曼城或被踢出欧冠#欧冠四强对阵来啦!巴黎圣日耳曼vs#曼城皇马vs切尔西#今日热门# 挖图志的微博视频 ,无,2021-04-20 20:18,微博视频号,1,0,0,无
-KbOn2zEnG,反买,男,海外,227,269436,反买:Goal:姆巴佩已经让身边人开始在马德里找房据Goal报道,巴黎前锋姆巴佩目前正在马德里找房。Goal独家报道,姆巴佩目前正在马德里找房,他已经让自己的身边人开始在西班牙首都寻找住处。#五大联赛# 对于姆巴佩来说,他是皇马下一个转会窗口的头号引援目标,而姆巴佩与巴黎的合同在2022年到期。#欧冠联赛# 据西班牙四台此前报道,巴黎没有参加欧超联赛加速了姆巴佩想要加盟皇马的想法。 原图 ,无,2021-04-20 20:17,无,1,0,0,无
-KbOlL4s2z,足球转会新闻,男,上海,621,265247,足球转会新闻:根据TA消息,目前#欧洲超级联赛#的最大推手是四家俱乐部,他们是#皇马#、#曼联#、#利物浦#以及#阿森纳#,其中三家#英超#豪门均是美国老板。这里多说一句,其实这也是英国佬一直不希望英超俱乐部彻底沦为老板玩物的原因,当年阿布买切尔西,克伦克买阿森纳的股权等,其实都有本土那些“老顽固”担心这担心那,他们也有他们的理由,一旦俱乐部私有化,主动权就不再掌握在本地人手里,更与球迷无关,现在这些俱乐部就是老板们的私人玩物。曼联、阿森纳和利物浦的老板都是美国人,切尔西老板是俄罗斯的,曼城是石油爹,如果你是本地人,站在他们的角度上,你会同意这些外国老板瞎胡闹么?假如中超已经是世界顶级联赛,你会同意最大的那几支豪门老板—假如他们是韩国人或者日本人—另立门户,成立一个有损于本国联赛的赛事吗?所以这个问题上,国内球迷大多数是看热闹的,甚至很支持,国外球迷则基本都不答应,哪怕是“既得利益者”的球迷也不答应,而且大家也都提到了一个问题:损害了这项运动的竞争精神和公平性,这比欧足联的腐败问题要严重的多,欧足联提供的好歹是一个建立在竞争基础上的赛事,机制上还算公平,不公平的只是很多问题上处理不到位,人为导致的灾难,而欧超联赛从成立之初的出发点上就是“非正义的”,属于程序不正义。 原图 ,无,2021-04-20 20:14,微博 weibo.com,3,2,3,无
-KbOkHvCcJ,川体在线官博,男,四川,871,15173,川体在线官博:【#弗洛伦蒂诺提议缩短足球比赛时间#】#欧洲超级联赛正式成立# 。欧超主席,皇马掌门人弗洛伦蒂诺在采访中甚至表示:“如果年轻人觉得足球比赛时间太长,可能是因为比赛不够有趣,或者我们可能不得不缩短足球比赛的时间…… 有些比赛我自己都看不下去。” 原图 ,无,2021-04-20 20:11,Android,0,0,0,无
-KbOjC9rNO,欧宝体育-官方,男,其他,304,201809,欧宝体育-官方:【#塞维利亚# 主教练#洛佩特吉# 发表对#欧洲超级联赛# 的看法】据悉,塞维利亚球队主教练洛佩特吉对欧洲超级联赛发表了看法。目前已经有12个豪门球队成立了欧洲超级联赛,其中包括了皇马、巴萨和马竞三个西甲球队。在发布会上谈到欧超联赛时,洛佩特吉说道:“我并没有了解完全的信息让我来给出观点,这有很多的不确定性,我想要保持谨慎。我希望的,是发生的一切能对足球来说是好事。” 原图 ,无,2021-04-20 20:09,无,0,0,1,无
-KbOhz1nMO,皇马球迷资讯,女,海外,196,796249,皇马球迷资讯:rubenuria:姆巴佩开始在马德里看房子了。🏠#皇马转会传闻# 原图 ,无,2021-04-20 20:03,皇马超话,16,0,7,无
-KbObRCNFP,拜仁小琦,男,广东,572,10424,拜仁小琦:【Corriere】🔴鲁梅尼格谈欧洲超级联赛:🎙️“(这个话题)我们已经讨论了10年,但我们一直决定保持现有的模式。之后疫情破坏了整个欧洲足球届(的秩序),尤其是豪门俱乐部。一些俱乐部认为现在是制造超级联赛的好时机。于是一场大混乱开始了。”🎙️“现在重要的是恢复沟通。我希望仍然能够找到一个解决方案,因为超级联赛伤害了整个欧洲足球。 而我们必须避免它!”🎙️“解决方案是降低成本。通过超级联赛,各个俱乐部正在努力解决随疫情而恶化的债务问题。但解决方案不可能是收取越来越多的钱然后支付给球员和经纪人越来越高的报酬。”🎙️“我们需要缓解一些问题,而不是把更多的问题摆在桌上。我们已经过高支出了开支:每个人,没有例外。现在是时候不要那么傲慢了。”👉关于阿涅利:🎙️“我想和他谈谈,遗憾的是我无法通过电话联系到他。我不知道他的动机,因此在不知道(动机)的情况下我不想批评他。也许(阿涅利)有一个我不知道的原因:也许我们可以互相交流,更好地理解对方。”🎙️“在内马尔转会后,转会市场就迅速膨胀,但我们已经走上了错误的道路,这不是欧足联和国际足联的错。 现在我们有很大的机会来寻求解决方案,并回归到更理性的足球。”👉你是否期望在8月没有皇马、尤文图斯、利物浦的情况下进行欧冠比赛?🎙️“老实说,我不希望这样,我几乎无法想象这种情况。这是对足球的伤害,这一点毋庸置疑。没有这12支伟大的球队,这项赛事(欧冠)就会受到损害。”👉你能确认拜仁不会进入超级联赛吗?🎙️“我们不会加入(超级联赛),因为我们不想成为它的一部分。我们很高兴能在德甲联赛中踢球,这(德甲)是我们的面包和黄油。我们也很高兴能进入欧冠联赛。”🎙️“我们不能忘记我们对球迷的责任,他们普遍反对这样的比赛(超级联赛)。我们也肩负着足球这项运动的责任。”👉像巴萨这样负债十亿欧元的球队,做出某些选择是否更加困难?🎙️“幸运的是我们(拜仁)没有这样的债务。”👉英超球队(加入超级联赛)的选择是因为他们的美国老板吗? 🎙️“是的,因为在欧洲你花了很多钱,也许你(还是)无法获胜。在美国,他们首先考虑的是收入。”👉利物浦主帅克洛普是超级联赛的宿敌。 如果他来到拜仁,这将是(对超级联赛)一个象征性的打击,对吗?🎙️“我们还没有决定教练的人选,首先我们要赢得联赛,然后再决定怎么做。当然,他(克洛普)对他的俱乐部发表了严厉的批评。” #拜仁##仁家的故事# [组图共3张] 原图 ,无,2021-04-20 19:49,拜仁球迷俱乐部超话,7,0,3,无
-KbO2eqqwm,皇家马德里足球俱乐部,男,其他,39,4460147,皇家马德里足球俱乐部:「齐达内:阿扎尔和克罗斯不会出场;不对欧超联赛发表意见」「阿扎尔」如果他没回归,说明他还没有百分百康复。阿扎尔和克罗斯都不会随队出征。「欧超联赛」这个事你得问主席先生。我来是跟你们聊比赛的,其他的问题不是我的职责。「卡瓦哈尔和瓦拉内」好消息,他俩明天会和我们在一起。「弗洛伦蒂诺对姆巴佩的言论」如果主席都这么说的话……(笑)但我只关心明天和加的斯的比赛。「欧冠」球队已经战斗了8个月,我们会继续拼搏直到最后一刻。我不知道能否夺得冠军,但我们会拼尽全力。「体能极限」皇马不会放弃。#halamadrid# #皇马之声# 原图 ,无,2021-04-20 19:24 ,皇马超话,95,6,25,无
-KbO1Ve5AL,足球转会新闻,男,上海,621,265247,足球转会新闻:根据邮报的消息,#皇马#主席弗洛伦蒂诺将担任欧洲超级联赛的主席(已经官方确认),#利物浦#老板亨利、#曼联#老板乔尔-格雷泽以及#阿森纳#老板斯坦-克伦克将担任副主席,#尤文#主席安德雷-阿涅利将担任第四副主席。6家英超俱乐部均不愿意退出本国联赛,但他们需要英超的允许才能参加欧洲超级联赛,极端情况下,传统6强可能需要退出#英超#才能参加欧超(我认为不可能)。说到这里,我还要强调一点:欧超确实是成立了,已经是官方宣布了,但能否顺利开打还是疑问。因为欧足联、国际足联以及各国联赛均反对这项赛事,欧足联甚至表示,凡是参加欧超联赛的球员,均禁止他们参加国家队比赛(各国足协很可能和本国联赛一起站队,毕竟他们从欧超那里得不到好处),禁止参加欧洲杯或者世界杯,所以假如双方不能妥协,欧超能否顺利开打仍然是未知数……总之需要让步的,但发酵一天来看,双方都不让步 原图 ,无,2021-04-20 19:24 ,微博 weibo.com,0,0,5,无
diff --git "a/topic/\347\254\254\344\272\224\344\272\272\346\240\274.csv" "b/topic/\347\254\254\344\272\224\344\272\272\346\240\274.csv"
new file mode 100644
index 0000000..99016a9
--- /dev/null
+++ "b/topic/\347\254\254\344\272\224\344\272\272\346\240\274.csv"
@@ -0,0 +1,41 @@
+微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
+KbP0S3Kct,北海有楠木,女,其他,306,77,北海有楠木:#第五人格[超话]#最近遇见的灯火[笑cry],很迷。 [组图共3张] 原图 ,无,2021-04-20 21:53,第五人格超话,0,0,0,无
+KbP0yagIR,草木一颗星,女,广东,1652,221,草木一颗星:#第五人格[超话]# 本来打算周年庆买古堡的 但是!没想到不打折好纠结买不买 难道要等过年吗[伤心] 原图 ,无,2021-04-20 21:52,第五人格超话,0,0,0,无
+KbP0szqRy,小肖不能说不行,女,重庆,76,179,小肖不能说不行:#第五人格[超话]# 哪些蓝皮是只有蓝皮卡才可以换的[允悲]像机械船舶那样的 ,无,2021-04-20 21:52,第五人格超话,0,0,0,无
+KbOZMi1np,疏影暗语,女,河南,34,27,疏影暗语:#第五人格[超话]#昨晚和今晚的,有双排躺着真舒服 [组图共2张] 原图 ,无,2021-04-20 21:50,第五人格超话,0,0,0,无
+KbOZChrrp,白露未晞白露未已,女,江苏,67,50,白露未晞白露未已:#第五人格[超话]#笑死,薛定谔的倒地[二哈] 原图 ,无,2021-04-20 21:50,第五人格超话,0,0,0,无
+KbOZz0lc1,梨涡飞天啦,女,广东,158,9447,梨涡飞天啦:#第五人格[超话]#让我告诉你什么叫做互相白给!医生爆笑排位对战红蝶,快来看看 梨涡飞天啦的微博视频 ,无,2021-04-20 21:50,第五人格超话,0,0,0,无
+KbOZlpInX,煮蛋三撇,女,江苏,226,17,煮蛋三撇:#第五人格小提琴家[超话]#抱尼痛哭 [组图共2张] 原图 ,无,2021-04-20 21:50,第五人格小提琴家超话,0,0,0,无
+KbOZ0cAEv,我在看风景_,女,上海,136,430,我在看风景_:#Tianba第五人格[超话]#我笑死了 今晚进啵啵直播间 :欢迎河流 送了荧光棒:谢谢流河的荧光棒 送了小星星:谢谢河流的小星星 又看了一眼:谢谢流河的66小星星 百变大伽就是我哈哈哈哈哈哈 ,无,2021-04-20 21:49,Tianba第五人格超话,1,0,0,无
+KbOYZxEFW,坚持做一只快乐的崽,女,河北,568,120,坚持做一只快乐的崽:#第五人格[超话]#想问问大家,调香师紫皮哪个最棒啊?笼中 致命 和红菱艳?试用过红菱艳一般般,但致命感觉好简陋[允悲]有了紫皮卡纠结兑换哪个? ,无,2021-04-20 21:49,第五人格超话,0,0,0,无
+KbOYWzecZ,巧醍,女,其他,1762,549,巧醍:#第五人格[超话]# 图一 :买完所有演绎皮才能得标签🏷️ (不知道隔年集齐反不反场欸[单身狗]图二:今年碎片不打折 (555为什么不早说啊 早知道就去年有打折时买一买[淚][傷心]白存碎片了 [组图共3张] 原图 ,无,2021-04-20 21:49,第五人格超话,0,0,0,无
+KbOZlpInX,煮蛋三撇,女,江苏,226,17,煮蛋三撇:#第五人格小提琴家[超话]#抱尼痛哭 [组图共2张] 原图 ,无,2021-04-20 21:50,第五人格小提琴家超话,0,0,0,无
+KbOZ0cAEv,我在看风景_,女,上海,136,430,我在看风景_:#Tianba第五人格[超话]#我笑死了 今晚进啵啵直播间 :欢迎河流 送了荧光棒:谢谢流河的荧光棒 送了小星星:谢谢河流的小星星 又看了一眼:谢谢流河的66小星星 百变大伽就是我哈哈哈哈哈哈 ,无,2021-04-20 21:49,Tianba第五人格超话,1,0,0,无
+KbOYZxEFW,坚持做一只快乐的崽,女,河北,568,120,坚持做一只快乐的崽:#第五人格[超话]#想问问大家,调香师紫皮哪个最棒啊?笼中 致命 和红菱艳?试用过红菱艳一般般,但致命感觉好简陋[允悲]有了紫皮卡纠结兑换哪个? ,无,2021-04-20 21:49,第五人格超话,0,0,0,无
+KbOYWzecZ,巧醍,女,其他,1762,549,巧醍:#第五人格[超话]# 图一 :买完所有演绎皮才能得标签🏷️ (不知道隔年集齐反不反场欸[单身狗]图二:今年碎片不打折 (555为什么不早说啊 早知道就去年有打折时买一买[淚][傷心]白存碎片了 [组图共3张] 原图 ,无,2021-04-20 21:49,第五人格超话,0,0,0,无
+KbOYxvARU,心悦君兮丶啊奈,女,广东,415,61,心悦君兮丶啊奈:#第五人格[超话]#阿西 我和我同学十分执着 即使海报出了 她还是说是女救人位 但是我依稀记得官方答应了下个是女孩子没有说一定是女救人 就 我现在和疑惑[思考] 是我记错还是她记错了 [组图共3张] 原图 ,无,2021-04-20 21:48,第五人格超话,1,0,2,无
+KbOYt6VkH,V泰泰V_,女,江苏,40,1724,V泰泰V_:#Weibo第五人格战队[超话]# 回忆的线下应援实物图🌸应援小礼物包括:明信片×1,便利贴×1,PP夹×1,纪念票根×1,糖果×10,还有之前剩下的小镜子随机发放🌸凭虎牙回忆直播间8级牌牌可以免费领取 [组图共9张] 原图 ,无,2021-04-20 21:48,Weibo第五人格战队超话,3,1,3,无
+KbOYsrYSo,风逸谦,女,北京,165,75,风逸谦:#第五人格[超话]#二阶排位太难了,用往昔的医生开局十秒震慑,调香师挂机一整局还老秒救人,先知和鸟一起来又一起走,要不是我点了爬行加速,平局都没得。 原图 ,无,2021-04-20 21:48,第五人格超话,0,0,0,无
+KbOYoFQrW,阿廿呢,女,其他,477,100,阿廿呢:#第五人格卖号[超话]# 出个高卷杏ios 10r [组图共2张] 原图 ,无,2021-04-20 21:48,第五人格卖号超话,0,0,0,无
+KbOXTEgbk,鳴蟲不虞,女,其他,468,2429,鳴蟲不虞:#第五人格[超话]# 给大家看个茶言茶语🍵的赛后,给我看吐了,恶心至极。前情提要:圣心医院开局机械师秒倒👏(刚碰到机子人就没了,儿子也没有)本来想卖,结果挂我(祭司)遗产机了,幸好在鸟笼,边修机边卡,然后卡满救,机子也快修完了。机械师下来后,又秒倒了👏,先知还给了个黄圈鸟👏最后到了开门战,还有3人,屠夫(宿伞)抓我,我在靠近大门的废墟遛,调香师也在大门👏,而先知在开木屋门最后由于我遛了10秒左右倒了,然后宿伞就去抓调香了,然后调香也倒了,宿伞又回来挂我,调香倒在旁边。(到了里正常人都不会觉得这把有希望了,就算有也只是宿伞给机会)先知开完门后,就来捞我了,而此时调香也自起了。我上了二楼后,发现调香还在遛,然后就看看有没有机会冲大门,就直接冲大门了,在冲大门前不确定门是否有开,然后就想给自己打个逃生洞,以免穿我脸上。整在瞄的时候发现大门开了,然后就直接冲大门了。没想到宿伞这时刚好传我脸上,我人刚进大门,然后我又从大门被捞了回来。👏我承认,我要是没在小木屋停,我或许有机会冲大门,这点是我的失误。但这局输了就全是我的锅???开门战调香倒的那刻本身就没希望平了,任何机会都要看宿伞给不给机会。结果把这种机会当成必然,别人一失误就是别人大锅的茶言茶语,是真的让人无语甚至恶心到想吐。按照这种逻辑,是不是机械师开局不秒到这把能赢?先知不给黄圈鸟这把稳平?调香开门战不在大门附近逗留是不是也能平?就真的非常恶心,这种指责比赛后直接喷脏话还让人恶心。 [组图共10张] 原图 ,无,2021-04-20 21:46,第五人格超话,0,0,0,无
+微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
+KbP491IbY,陈某想睡觉-,女,广东,35,255,陈某想睡觉-:#第五人格交易[超话]#有没有需要这个代送呀[单身狗] 原图 ,无,2021-04-20 22:01,第五人格交易超话,0,0,0,无
+KbP3ZfqW9,吃芥末的猫咪,女,浙江,262,41,吃芥末的猫咪:#Weibo第五人格战队[超话]#分享一个好笑的事情:我同事不玩第五 听我说了之后偶然看到了第五直播 她说我也不知道谁是谁 就看到人倒了还有公主抱 还看到一个骑毛驴的我说那是野猪 这么大一个猪鼻子看不到吗她说没有 只看到一个屁股 然后我笑到现在 ,无,2021-04-20 22:01,Weibo第五人格战队超话,0,0,0,无
+KbP35mhGm,左兰-阿德米拉缇,女,其他,343,14,左兰-阿德米拉缇:#第五人格[超话]# 每次案件的演绎,都有着不同的精彩瞬间! 原图 ,无,2021-04-20 21:59,iPhone客户端,0,0,0,无
+KbP2EylTr,Blue杞,女,天津,192,2052,Blue杞:#第五人格[超话]##这是在干什么#两人ban邦邦,我空ban,然后这位大哥ban了红夫人掏出了c牌野人先知有点无语,夸了句真的nb然后这位大哥对邦邦进行辱骂,表示邦邦根本不算什么嗯,您说的都对,但是#看了觉得真可怜# Blue杞的微博视频 ,无,2021-04-20 21:58,第五人格超话,0,0,0,无
+KbP2A5idl,扛电饭煲喂饭,女,其他,63,34,扛电饭煲喂饭:#第五人格[超话]#感谢网易,太感谢了!呜呜(虽然我不玩这个[允悲],麻烦奈布摩多摩多) [组图共2张] 原图 ,无,2021-04-20 21:57,nova5i 2400万AI四摄,0,0,0,无
+KbP24pRPX,子些疏狂,女,其他,84,93,子些疏狂:#第五人格[超话]# 联合啥时候出新地图啊 原图 ,无,2021-04-20 21:56,第五人格超话,0,0,0,无
+KbP1UEHsh,戒网瘾中的大锤鸭,男,其他,21,358,戒网瘾中的大锤鸭:#第五人格[超话]# 教大家一个解压的方法 巨爽[偷笑](对不起约约了) 戒网瘾中的大锤鸭的微博视频 ,无,2021-04-20 21:56,第五人格超话,2,0,2,无
+KbP1CEj04,第五同人档案,男,浙江,79,107172,第五同人档案:#第五人格[超话]##第五人格同人##第五同人档案##第五人格三周年庆##破雾重逢之时# 档案君来抓住谷雨的小尾巴!谷雨,二十四节气的第六个节气,春季的最后一个节气,过了这一天,夏天就悄然而至了。谷雨当然要赏牡丹、喝谷雨茶了!感谢画师:@秦择酒 [组图共3张] 原图 ,无,2021-04-20 21:55,第五人格超话,9,0,2,无
+KbP1C6cbw,远坂黑子酱,女,北京,436,69,远坂黑子酱:#第五人格[超话]##第五人格赛事[超话]##第五人格coa4#姐妹们慎粉欧美赛区的B4U啊,他们有成员炼铜,殿堂四黑,之前深渊3排自己屠夫送积分(后面就不能排自己战队的屠夫和人类了)不是我随便说的,玩欧美服的都知道,有石锤的[吃瓜] ,无,2021-04-20 21:55,第五人格超话,1,0,0,无
+KbP1c8dfN,冬日刨冰,男,海外,197,56,冬日刨冰:#第五人格[超话]# 这勘探人如其名[挤眼]开局秒倒真的好喜欢上椅了一直发需要帮助没停过,23s勘探还配救? [组图共3张] 原图 ,无,2021-04-20 21:54,iPhone 12,0,0,0,无
+KbP0S3Kct,北海有楠木,女,其他,306,77,北海有楠木:#第五人格[超话]#最近遇见的灯火[笑cry],很迷。 [组图共3张] 原图 ,无,2021-04-20 21:54,第五人格超话,1,0,0,无
+KbP0yagIR,草木一颗星,女,广东,1652,221,草木一颗星:#第五人格[超话]# 本来打算周年庆买古堡的 但是!没想到不打折好纠结买不买 难道要等过年吗[伤心] 原图 ,无,2021-04-20 21:53,第五人格超话,0,0,1,无
+KbP0szqRy,小肖不能说不行,女,重庆,76,179,小肖不能说不行:#第五人格[超话]# 哪些蓝皮是只有蓝皮卡才可以换的[允悲]像机械船舶那样的 ,无,2021-04-20 21:53,第五人格超话,0,0,0,无
+KbOZMi1np,疏影暗语,女,河南,34,27,疏影暗语:#第五人格[超话]#昨晚和今晚的,有双排躺着真舒服 [组图共2张] 原图 ,无,2021-04-20 21:51,第五人格超话,0,0,0,无
+KbOZChrrp,白露未晞白露未已,女,江苏,67,50,白露未晞白露未已:#第五人格[超话]#笑死,薛定谔的倒地[二哈] 原图 ,无,2021-04-20 21:51,第五人格超话,1,0,0,无
+KbOZz0lc1,梨涡飞天啦,女,广东,158,9447,梨涡飞天啦:#第五人格[超话]#让我告诉你什么叫做互相白给!医生爆笑排位对战红蝶,快来看看 梨涡飞天啦的微博视频 ,无,2021-04-20 21:51,第五人格超话,2,0,1,无
+KbOZlpInX,煮蛋三撇,女,江苏,226,17,煮蛋三撇:#第五人格小提琴家[超话]#抱尼痛哭 [组图共2张] 原图 ,无,2021-04-20 21:50,第五人格小提琴家超话,0,0,0,无
+KbOZ0cAEv,我在看风景_,女,上海,136,430,我在看风景_:#Tianba第五人格[超话]#我笑死了 今晚进啵啵直播间 :欢迎河流 送了荧光棒:谢谢流河的荧光棒 送了小星星:谢谢河流的小星星 又看了一眼:谢谢流河的66小星星 百变大伽就是我哈哈哈哈哈哈 ,无,2021-04-20 21:49,Tianba第五人格超话,3,0,1,无
+KbOYZxEFW,坚持做一只快乐的崽,女,河北,568,120,坚持做一只快乐的崽:#第五人格[超话]#想问问大家,调香师紫皮哪个最棒啊?笼中 致命 和红菱艳?试用过红菱艳一般般,但致命感觉好简陋[允悲]有了紫皮卡纠结兑换哪个? ,无,2021-04-20 21:49,第五人格超话,0,0,0,无
+KbOYWzecZ,巧醍,女,其他,1762,549,巧醍:#第五人格[超话]# 图一 :买完所有演绎皮才能得标签🏷️ (不知道隔年集齐反不反场欸[单身狗]图二:今年碎片不打折 (555为什么不早说啊 早知道就去年有打折时买一买[淚][傷心]白存碎片了 [组图共3张] 原图 ,无,2021-04-20 21:49,第五人格超话,0,0,0,无
diff --git "a/topic/\351\235\222\346\230\245\346\234\211\344\275\2403.csv" "b/topic/\351\235\222\346\230\245\346\234\211\344\275\2403.csv"
deleted file mode 100644
index e7ed7a2..0000000
--- "a/topic/\351\235\222\346\230\245\346\234\211\344\275\2403.csv"
+++ /dev/null
@@ -1,13 +0,0 @@
-微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
-KbOrceQYu,云又挡住太阳了,女,安徽,177,83,云又挡住太阳了:vivo S9系列邀你来#青春有你3有我照亮#青春记录官充能榜,为你喜爱的训练生@青春有你3-孙滢皓 充能,一起过招吧!#vivo S9照亮我的美#vivo S9系列青春有你3有我照亮 ,无,2021-04-20 20:27,台网话题,0,0,0,无
-KbOr7sRw1,_提瓶,女,福建,425,2685,_提瓶:#邓孝慈[超话]#[好喜欢] #向全世界安利邓孝慈# 《邓小慈の千层套路》震惊!邓孝慈竟是战略性钓系爱豆实锤?!为回馈广大粉丝,免费手把手技巧教学!点击就看《女王の修炼守则》!清冷美人?温柔学长?钓系model?甜豆rapper?埃及艳后?金(划)刚(掉)芭比?你喜欢的样子我都有!请给库洛米更多更多的爱吧@青春有你3-邓孝慈 http://t.cn/A6cCkakl ,无,2021-04-20 20:27,邓孝慈超话,0,0,0,无
-KbOr5atCG,vivilook,女,广东,765,1387,vivilook:我在#明星势力榜#青春有你榜上pick @青春有你3-李俊濠 啦,用自己的路子跟世界过招,无惧未知,挑战自我,加油!>>明星势力榜第18位 ,无,2021-04-20 20:27,iPhone 11 Pro,0,0,0,无
-KbOr4ilsw,张大幅呀,女,海外,126,108,张大幅呀:#青春有你3[超话]# 找代投 ,无,2021-04-20 20:27,青春有你3超话,0,0,0,无
-KbOqZdEtH,吃两个梨鸭,女,其他,199,151,吃两个梨鸭:@青春有你3-余景天 原图 ,无,2021-04-20 20:27,iPhone客户端,0,0,0,无
-KbOqSbtLC,一只小阿雅y,女,其他,246,143,一只小阿雅y:我在#王牌对王牌# 战队榜互动中,为@青春有你3-连淮伟 加油助力!王牌登场,笑不可挡!福利彩蛋等你解锁!快来一起为TA打call吧!@王牌对王牌 王牌对王牌战队榜 ,无,2021-04-20 20:27,nova6 自拍大不一样,0,0,0,无
-KbOqZdEtH,吃两个梨鸭,女,其他,199,151,吃两个梨鸭:@青春有你3-余景天 原图 ,无,2021-04-20 20:27,iPhone客户端,0,0,0,无
-KbOqRvsrB,今天也早起了嘛,男,其他,220,118,今天也早起了嘛:#邓孝慈[超话]# [鲜花]#青春有你3邓孝慈# 慈丝们都支棱起来!帮也要把邓孝慈绑上出道位的大椅子上!现在只管冲!别再内讧了🙏🏻@青春有你3-邓孝慈 原图 ,无,2021-04-20 20:26,邓孝慈超话,2,0,0,无
-KbOqF859f,麻辣烫里不放醋,女,黑龙江,163,44,麻辣烫里不放醋:#钟骏一[超话]#“永远喜欢阳光天气和明媚少年”@青春有你3-钟骏一 原图 ,无,2021-04-20 20:26,钟骏一超话,0,0,0,无
-KbOqyoBKM,谈恋爱嘛宝贝,女,山西,103,46,谈恋爱嘛宝贝:#罗一舟[超话]# 🚢#罗一舟青春有你3# 让我看看谁还没在刷弹幕👀冲冲冲!姐妹们!@青春有你3-罗一舟 原图 ,无,2021-04-20 20:26,罗一舟超话,0,0,0,无
-KbOqrfRlf,隻士,女,其他,55,208,隻士:@青春有你3-陈俊宇 想听沙溺 ,无,2021-04-20 20:25,iPhone客户端,0,0,0,无
-KbOqrdEwV,一只小阿雅y,女,其他,246,143,一只小阿雅y:我在#王牌对王牌# 战队能量榜为 @青春有你3-连淮伟 送出了加油卡[加油]快来为你爱的战队助力打call吧!@王牌对王牌 王牌对王牌战队榜 ,无,2021-04-20 20:25,能量榜,0,0,0,无
diff --git "a/topic/\351\252\206\347\216\213\345\256\207.csv" "b/topic/\351\252\206\347\216\213\345\256\207.csv"
deleted file mode 100644
index db54be5..0000000
--- "a/topic/\351\252\206\347\216\213\345\256\207.csv"
+++ /dev/null
@@ -1,11 +0,0 @@
-微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
-KbNCnpZ2v,海外大牌,女,广东,84,3021722,海外大牌:第一次来活动,最近它可太火了火了🔥LAN 兰 天然水感卸妆油 150ml+小样7ml+油面膜1片【99】它家日常是119的,而且活动很少 骆王宇安利过,在某音和小📕上风很大了!有用过的姐妹吗?可以来说说看!主打以油溶油的,天然椰油醇🥥还添加了玫瑰果油,霍霍巴籽油等的,在卸妆的同时兼顾缓解干燥,卸完也不拔干💦卸妆油可以一点也不油嗷,方法用对了使用感就很好!卸妆的过程记得加水乳化,打圈按摩,融化后质地就很清爽,而且卸妆力又很强! [组图共9张] 原图 ,无,2021-04-20 18:21 ,微博 weibo.com,36,0,22,无
-KbMYX8B4X,-由八-,女,广西,278,45,-由八-:#骆王宇[超话]#啥时候会买hedon修容盘呀 ,无,2021-04-20 16:44 ,骆王宇超话,0,0,0,无
-KbM5rf3jw,薄荷味的晓酱,女,海外,214,3641,薄荷味的晓酱:#骆王宇[超话]# 想问一下大家 芙清水杨酸去黑头有用吗[泪] ,无,2021-04-20 14:27 ,骆王宇超话,1,0,1,无
-KbM4vzrdU,Lucky好运连连Lucky,女,其他,423,198,Lucky好运连连Lucky:#骆王宇[超话]#姐妹们,问下大家,比如今天刷酸是不能用功效型产品的,那么,明天我不刷的话,是否可以用比如美白产品吗? ,无,2021-04-20 14:25 ,骆王宇超话,0,0,1,无
-KbLmf79TP,薄荷味的晓酱,女,海外,214,3641,薄荷味的晓酱:#骆王宇[超话]# 昨晚看了大娘的刷酸视频 想问一问集美们 水杨酸的水也可以去黑头吗 是不是用完只涂一个面霜就🉑[泪] ,无,2021-04-20 12:36 ,骆王宇超话,1,0,5,无
-KbL8dak0D,最可爱的yz_,女,海外,379,1060,最可爱的yz_:我是真没想到#骆王宇# 会回复 原图 ,无,2021-04-20 12:01 ,iPhone客户端,3,0,4,无
-KbKLyCmOa,_翻身成为大猛1mio_,男,其他,157,195,_翻身成为大猛1mio_:#骆王宇[超话]#有没有类似情况的姐妹啊我是不是没希望了[跪了]我后来又回复了一下,但是还没收到回信 原图 ,无,2021-04-20 11:05 ,骆王宇超话,0,0,2,无
-KbFUPpuCq,喵描淼妙_,女,北京,226,351,喵描淼妙_:#骆王宇[超话]# 想问大家个问题,大家都投递的什么岗位呀[doge] ,无,2021-04-19 22:44,骆王宇超话,0,0,1,无
-KbFANuv4V,Sissi的日记啊,女,江苏,604,855,Sissi的日记啊:#骆王宇[超话]# 感恩的心!!希望收到好结果[心] 原图 ,无,2021-04-19 21:55,骆王宇超话,5,0,19,无
-KbF7QlucX,Satsuki是小倩吖,女,海外,191,2625,Satsuki是小倩吖:#骆王宇[超话]# 每月一次进货右边买的,左边送的,这么送法,怕工作室迟早吃不消 http://t.cn/RIhnXC5 显示地图 原图 ,#骆王宇[超话]#,2021-04-19 20:44,骆王宇超话,19,0,25,无
diff --git "a/topic/\351\271\277\346\231\227.csv" "b/topic/\351\271\277\346\231\227.csv"
deleted file mode 100644
index 6e7d897..0000000
--- "a/topic/\351\271\277\346\231\227.csv"
+++ /dev/null
@@ -1,6 +0,0 @@
-微博id,发布者昵称,发布者性别,发布者地区,发布者关注数,发布者粉丝数,微博正文,原始图片url,发布时间,发布工具,点赞数,转发数,评论数,发布位置
-KbOr9z917,不吃兔兔吃鹿鹿,女,辽宁,292,298,不吃兔兔吃鹿鹿:#鹿晗玩偶[超话]#带盒盒打卡『花点时间』花店和商场大屏 西安 显示地图 [组图共4张] 原图 ,#鹿晗玩偶[超话]#,2021-04-20 20:27,鹿晗玩偶超话,0,0,0,无
-KbOr7v3ty,陈嘎嘎_,女,浙江,653,244,陈嘎嘎_:#鹿晗[超话]##鹿晗复古软盘专辑# 收到啦好开心 [组图共6张] 原图 ,无,2021-04-20 20:27,iPhone X,0,0,0,无
-KbOr58hlX,嘿一九九七,女,陕西,559,110,嘿一九九七:#鹿晗31岁生日关晓彤没发祝福#我一个路人粉今天刷N多次微博就是为了看看晓彤发没发微博 ,无,2021-04-20 20:27,nova7Pro你在焦点在,0,0,0,无
-KbOr3o0fY,楚天煜煜,女,广东,128,50,楚天煜煜:My prince,happy birthday @M鹿M #鹿晗[超话]##鹿晗0420生日快乐# 原图 ,无,2021-04-20 20:27,小米9,0,0,0,无
-KbOr2tG0I,时代少年团-虞书欣,女,江苏,639,129,时代少年团-虞书欣:@新浪娱乐 你打个电话给鹿晗或者关晓彤,问问他们是不是分手了。快,我着急知道 ,无,2021-04-20 20:27,HUAWEI P30,2,0,0,无
diff --git "a/weibo_data/\345\220\215\344\276\246\346\216\242\346\237\257\345\215\227/KbOXufHgo/comment.csv" "b/weibo_data/\345\220\215\344\276\246\346\216\242\346\237\257\345\215\227/KbOXufHgo/comment.csv"
new file mode 100644
index 0000000..e69de29
diff --git "a/weibo_data/\347\224\265\345\275\261\347\273\264\345\222\214\351\230\262\346\232\264\351\230\237/KbFRPwtLi/comment.csv" "b/weibo_data/\347\224\265\345\275\261\347\273\264\345\222\214\351\230\262\346\232\264\351\230\237/KbFRPwtLi/comment.csv"
deleted file mode 100644
index 3214e96..0000000
--- "a/weibo_data/\347\224\265\345\275\261\347\273\264\345\222\214\351\230\262\346\232\264\351\230\237/KbFRPwtLi/comment.csv"
+++ /dev/null
@@ -1,9 +0,0 @@
-https://weibo.cn//u/2034920154,王一博每天滑滑板,女,浙江,9034,615,208,回复@wyb平安喜乐-一宝:等等等等等等等等我能等,0,2021-04-19 22:40
-,['回复@wyb平安喜乐-一宝:等等等等等等等等我能等']
-
-https://weibo.cn//u/6318987185,wyb平安喜乐-一宝,女,甘肃,301,87,127,好像是5月初吧!,0,2021-04-19 22:39
-,['好像是5月初吧!']
-
-https://weibo.cn//u/3626855787,不过是一场回忆,女,其他,2166,256,600,王一博· 春风再美也比不上你的笑,没见过你的人不会明了。,0,2021-04-19 22:38
-,['王一博· 春风再美也比不上你的笑,没见过你的人不会明了。']
-
diff --git "a/weibo_data/\347\224\265\345\275\261\347\273\264\345\222\214\351\230\262\346\232\264\351\230\237/KbLiVrgoS/comment.csv" "b/weibo_data/\347\224\265\345\275\261\347\273\264\345\222\214\351\230\262\346\232\264\351\230\237/KbLiVrgoS/comment.csv"
deleted file mode 100644
index 0697b48..0000000
--- "a/weibo_data/\347\224\265\345\275\261\347\273\264\345\222\214\351\230\262\346\232\264\351\230\237/KbLiVrgoS/comment.csv"
+++ /dev/null
@@ -1,9 +0,0 @@
-https://weibo.cn//u/7433244508,爱茜1313,女,其他,4609,219,3,最快也得春节,0,2021-04-20 13:14
-,['最快也得春节']
-
-https://weibo.cn//u/5912303489,偶是墨白,女,福建,31,38,953,期待演员王一博,0,2021-04-20 13:14
-,['期待演员王一博']
-
-https://weibo.cn//u/7561911408,wyb1485,女,福建,61,52,2,没错没错想看想看!!!,0,2021-04-20 13:00
-,['没错没错想看想看!!!']
-
diff --git "a/weibo_data/\347\224\265\345\275\261\347\273\264\345\222\214\351\230\262\346\232\264\351\230\237/KbLuCgKwg/comment.csv" "b/weibo_data/\347\224\265\345\275\261\347\273\264\345\222\214\351\230\262\346\232\264\351\230\237/KbLuCgKwg/comment.csv"
deleted file mode 100644
index a24e0d6..0000000
--- "a/weibo_data/\347\224\265\345\275\261\347\273\264\345\222\214\351\230\262\346\232\264\351\230\237/KbLuCgKwg/comment.csv"
+++ /dev/null
@@ -1,18 +0,0 @@
-https://weibo.cn//u/5088946818,LuNaticOLI,女,上海,1084,221,164,回复@zzh茗:嘻嘻,0,2021-04-20 13:34
-,['回复@zzh茗:嘻嘻']
-
-https://weibo.cn//u/5088946818,LuNaticOLI,女,上海,1084,221,164,回复@FunkyAGuy:谢谢姐妹!期待复古神探!,0,2021-04-20 13:34
-,['回复@FunkyAGuy:谢谢姐妹!期待复古神探!']
-
-https://weibo.cn//u/5088946818,LuNaticOLI,女,上海,1084,221,164,回复@桔子青色:嗯嗯嗯嗯,0,2021-04-20 13:31
-,['回复@桔子青色:嗯嗯嗯嗯']
-
-https://weibo.cn//u/6212101409,zzh茗,女,河北,53,200,45,张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚,0,2021-04-20 13:03
-,['张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚张哲瀚']
-
-https://weibo.cn//u/6108158726,桔子青色,女,四川,37,13,6,一起守护他,走花路啊,0,2021-04-20 13:00
-,['一起守护他,走花路啊']
-
-https://weibo.cn//u/2351204833,FunkyAGuy,男,北京,9,38,42,祝贺发帖,0,2021-04-20 12:58
-,['祝贺发帖']
-
diff --git "a/weibo_data/\351\252\206\347\216\213\345\256\207/KbF7QlucX/comment.csv" "b/weibo_data/\351\252\206\347\216\213\345\256\207/KbF7QlucX/comment.csv"
deleted file mode 100644
index 5d2c3b9..0000000
--- "a/weibo_data/\351\252\206\347\216\213\345\256\207/KbF7QlucX/comment.csv"
+++ /dev/null
@@ -1,84 +0,0 @@
-https://weibo.cn//u/6030715727,小撩will_,女,辽宁,218,58,167,左边那两坨黄色是啥子哈哈哈,0,2021-04-20 10:46
-,['左边那两坨黄色是啥子哈哈哈']
-
-https://weibo.cn//u/6622328108,限定轩酱,男,江西,296,307,61,羡慕了!!要是用不完的话我愿意替你分担,0,2021-04-19 21:18
-,['羡慕了!!要是用不完的话我愿意替你分担']
-
-https://weibo.cn//u/6314259538,叶叶叶叶叶叶叶子呀,女,福建,74,85,9,后悔没买身体乳了,希望老骆这周三还有卖,0,2021-04-19 21:33
-,['后悔没买身体乳了,希望老骆这周三还有卖']
-
-https://weibo.cn//u/3982310407,薇光w,女,宁夏,71,261,3019,棒棒,0,2021-04-20 13:18
-,['棒棒']
-
-https://weibo.cn//777580730,Satsuki是小倩吖,女,海外,512,191,2625,回复@小撩will_:chillmore沐浴露送的沐浴球哈哈哈哈,0,2021-04-20 13:04
-,['回复@小撩will_:chillmore沐浴露送的沐浴球哈哈哈哈']
-
-https://weibo.cn//777580730,Satsuki是小倩吖,女,海外,512,191,2625,回复@l喝果汁吗:强迫症的迫使,0,2021-04-20 13:04
-,['回复@l喝果汁吗:强迫症的迫使']
-
-https://weibo.cn//u/5873890516,骆王宇不举铁,女,其他,173,315,62,送我吧,0,2021-04-20 10:54
-,['送我吧']
-
-https://weibo.cn//u/5743584438,l喝果汁吗,女,山东,137,84,68,每次看你拍的皂片都极度舒适,0,2021-04-20 10:49
-,['每次看你拍的皂片都极度舒适']
-
-https://weibo.cn//u/6030715727,小撩will_,女,辽宁,218,58,167,左边那两坨黄色是啥子哈哈哈,0,2021-04-20 10:46
-,['左边那两坨黄色是啥子哈哈哈']
-
-https://weibo.cn//u/6402395454,虾基儿,女,广东,68,217,38,这送的也太多了吧,0,2021-04-20 10:37
-,['这送的也太多了吧']
-
-https://weibo.cn//u/6570813431,枸杞泡茶不秃头wyb,女,安徽,116,138,11,小倩,1,2021-04-20 09:54
-,['小倩']
-
-https://weibo.cn//u/5867614732,你不要逼我吃香菜,女,福建,979,122,176,地址私你了 搞快点,1,2021-04-20 07:49
-,['地址私你了 搞快点']
-
-https://weibo.cn//777580730,Satsuki是小倩吖,女,海外,512,191,2625,回复@Kellicc:对哒!我只在他直播间买,0,2021-04-20 00:33
-,['回复@Kellicc:对哒!我只在他直播间买']
-
-https://weibo.cn//u/6571864523,Kellicc,女,江苏,152,360,292,回复@Satsuki是小倩吖:是在大娘直播间入的嘛,0,2021-04-20 00:32
-,['回复@Satsuki是小倩吖:是在大娘直播间入的嘛']
-
-https://weibo.cn//777580730,Satsuki是小倩吖,女,海外,512,191,2625,回复@Kellicc:好用!!!一定要买!!!值得,0,2021-04-20 00:31
-,['回复@Kellicc:好用!!!一定要买!!!值得']
-
-https://weibo.cn//u/6571864523,Kellicc,女,江苏,152,360,292,神秘博士面膜好用嘛!,0,2021-04-20 00:30
-,['神秘博士面膜好用嘛!']
-
-https://weibo.cn//777580730,Satsuki是小倩吖,女,海外,512,191,2625,回复@你该荣幸724:没事,这周还会有的!,0,2021-04-20 00:24
-,['回复@你该荣幸724:没事,这周还会有的!']
-
-https://weibo.cn//u/5860461465,Jennie的Jenny呀,女,广东,53,69,25,想抱住富婆大腿,0,2021-04-19 22:14
-,['想抱住富婆大腿']
-
-https://weibo.cn//u/3641696182,Fall-4,女,北京,690,332,457,真羡慕,0,2021-04-19 22:08
-,['真羡慕']
-
-https://weibo.cn//u/6386920161,你该荣幸724,男,其他,3,133,11,羡慕买了神秘博士面膜的,0,2021-04-19 22:02
-,['羡慕买了神秘博士面膜的']
-
-https://weibo.cn//u/6314259538,叶叶叶叶叶叶叶子呀,女,福建,74,85,9,回复@Satsuki是小倩吖:等你呦倩倩子~,0,2021-04-19 21:34
-,['回复@Satsuki是小倩吖:等你呦倩倩子~']
-
-https://weibo.cn//777580730,Satsuki是小倩吖,女,海外,512,191,2625,回复@叶叶叶叶叶叶叶子呀:今晚我试试,写个跟chillmore的对比,0,2021-04-19 21:33
-,['回复@叶叶叶叶叶叶叶子呀:今晚我试试,写个跟chillmore的对比']
-
-https://weibo.cn//u/6314259538,叶叶叶叶叶叶叶子呀,女,福建,74,85,9,后悔没买身体乳了,希望老骆这周三还有卖,0,2021-04-19 21:33
-,['后悔没买身体乳了,希望老骆这周三还有卖']
-
-https://weibo.cn//u/6622328108,限定轩酱,男,江西,296,307,61,回复@Satsuki是小倩吖:那没事了,有这钱出国际运费我都可以买一堆了,0,2021-04-19 21:31
-,['回复@Satsuki是小倩吖:那没事了,有这钱出国际运费我都可以买一堆了']
-
-https://weibo.cn//777580730,Satsuki是小倩吖,女,海外,512,191,2625,回复@叶叶叶叶叶叶叶子呀:hi!是我,0,2021-04-19 21:29
-,['回复@叶叶叶叶叶叶叶子呀:hi!是我']
-
-https://weibo.cn//777580730,Satsuki是小倩吖,女,海外,512,191,2625,回复@限定轩酱:好呀好呀!国际运费你来,1,2021-04-19 21:29
-,['回复@限定轩酱:好呀好呀!国际运费你来']
-
-https://weibo.cn//u/6622328108,限定轩酱,男,江西,296,307,61,羡慕了!!要是用不完的话我愿意替你分担,0,2021-04-19 21:18
-,['羡慕了!!要是用不完的话我愿意替你分担']
-
-https://weibo.cn//u/6314259538,叶叶叶叶叶叶叶子呀,女,福建,74,85,9,百货商店老板娘,0,2021-04-19 20:56
-,['百货商店老板娘']
-
diff --git "a/weibo_data/\351\252\206\347\216\213\345\256\207/KbFANuv4V/comment.csv" "b/weibo_data/\351\252\206\347\216\213\345\256\207/KbFANuv4V/comment.csv"
deleted file mode 100644
index 8d29b0e..0000000
--- "a/weibo_data/\351\252\206\347\216\213\345\256\207/KbFANuv4V/comment.csv"
+++ /dev/null
@@ -1,66 +0,0 @@
-https://weibo.cn//u/6687324611,花冢Q,女,其他,1584,581,121,哇!好棒哦,0,2021-04-19 21:58
-,['哇!好棒哦']
-
-https://weibo.cn//u/3982310407,薇光w,女,宁夏,71,261,3019,姐妹是先投递的简历吗?没有投vlog,0,2021-04-20 11:19
-,['姐妹是先投递的简历吗?没有投vlog']
-
-https://weibo.cn//u/5056307800,是鲤鱼锦o,女,河南,141,309,102,加油wo!!!,0,2021-04-20 09:22
-,['加油wo!!!']
-
-https://weibo.cn//u/1777614623,Sissi的日记啊,女,江苏,197,604,855,回复@是大莉少女:吼🐒我还在等消息,0,2021-04-20 20:08
-,['回复@是大莉少女:吼🐒我还在等消息']
-
-https://weibo.cn//u/6084130919,是大莉少女,女,江苏,61,208,105,加油宝贝,0,2021-04-20 20:06
-,['加油宝贝']
-
-https://weibo.cn//u/1777614623,Sissi的日记啊,女,江苏,197,604,855,回复@Jennie的Jenny呀:!好的!,0,2021-04-20 19:32
-,['回复@Jennie的Jenny呀:!好的!']
-
-https://weibo.cn//u/5860461465,Jennie的Jenny呀,女,广东,53,69,25,加油呀!!,0,2021-04-20 18:25
-,['加油呀!!']
-
-https://weibo.cn//u/1777614623,Sissi的日记啊,女,江苏,197,604,855,回复@薇光w:我当时没来的及搞,0,2021-04-20 11:25
-,['回复@薇光w:我当时没来的及搞']
-
-https://weibo.cn//u/3982310407,薇光w,女,宁夏,71,261,3019,姐妹是先投递的简历吗?没有投vlog,0,2021-04-20 11:19
-,['姐妹是先投递的简历吗?没有投vlog']
-
-https://weibo.cn//u/6423646637,小桐_樂事,女,其他,5,33,7,加油!,0,2021-04-20 10:20
-,['加油!']
-
-https://weibo.cn//u/1777614623,Sissi的日记啊,女,江苏,197,604,855,回复@是鲤鱼锦o:吼!!,0,2021-04-20 09:27
-,['回复@是鲤鱼锦o:吼!!']
-
-https://weibo.cn//u/5056307800,是鲤鱼锦o,女,河南,141,309,102,加油wo!!!,0,2021-04-20 09:22
-,['加油wo!!!']
-
-https://weibo.cn//u/1777614623,Sissi的日记啊,女,江苏,197,604,855,回复@骆王宇不举铁:吼!姐妹!,0,2021-04-20 09:18
-,['回复@骆王宇不举铁:吼!姐妹!']
-
-https://weibo.cn//u/1777614623,Sissi的日记啊,女,江苏,197,604,855,回复@叶叶叶叶叶叶叶子呀:吼!我还在等回复,0,2021-04-20 09:18
-,['回复@叶叶叶叶叶叶叶子呀:吼!我还在等回复']
-
-https://weibo.cn//u/5873890516,骆王宇不举铁,女,其他,173,315,62,加油哦,0,2021-04-20 08:46
-,['加油哦']
-
-https://weibo.cn//u/6314259538,叶叶叶叶叶叶叶子呀,女,福建,74,85,9,加油,0,2021-04-20 08:43
-,['加油']
-
-https://weibo.cn//u/5867614732,你不要逼我吃香菜,女,福建,979,122,176,加油!!!,0,2021-04-20 07:48
-,['加油!!!']
-
-https://weibo.cn//u/1777614623,Sissi的日记啊,女,江苏,197,604,855,回复@阿月我在:吼!,0,2021-04-20 07:45
-,['回复@阿月我在:吼!']
-
-https://weibo.cn//u/3803148504,阿月我在,女,四川,654,379,394,哇唔,0,2021-04-20 07:37
-,['哇唔']
-
-https://weibo.cn//u/6687324611,花冢Q,女,其他,1584,581,121,回复@Sissi的日记啊:加油,0,2021-04-19 23:04
-,['回复@Sissi的日记啊:加油']
-
-https://weibo.cn//u/1777614623,Sissi的日记啊,女,江苏,197,604,855,回复@花冢Q:这才是第一步 还有漫漫长路,0,2021-04-19 22:36
-,['回复@花冢Q:这才是第一步 还有漫漫长路']
-
-https://weibo.cn//u/6687324611,花冢Q,女,其他,1584,581,121,哇!好棒哦,0,2021-04-19 21:58
-,['哇!好棒哦']
-
diff --git "a/weibo_data/\351\252\206\347\216\213\345\256\207/KbKLyCmOa/comment.csv" "b/weibo_data/\351\252\206\347\216\213\345\256\207/KbKLyCmOa/comment.csv"
deleted file mode 100644
index 135f94c..0000000
--- "a/weibo_data/\351\252\206\347\216\213\345\256\207/KbKLyCmOa/comment.csv"
+++ /dev/null
@@ -1,6 +0,0 @@
-https://weibo.cn//u/6084130919,是大莉少女,女,江苏,61,208,105,不要着急,可以等一下,0,2021-04-20 20:06
-,['不要着急,可以等一下']
-
-https://weibo.cn//u/1781696553,一个鱼丸都不给,女,江西,361,288,421,现在回复了么,0,2021-04-20 19:43
-,['现在回复了么']
-
diff --git "a/weibo_data/\351\252\206\347\216\213\345\256\207/KbL8dak0D/comment.csv" "b/weibo_data/\351\252\206\347\216\213\345\256\207/KbL8dak0D/comment.csv"
deleted file mode 100644
index 6859bf6..0000000
--- "a/weibo_data/\351\252\206\347\216\213\345\256\207/KbL8dak0D/comment.csv"
+++ /dev/null
@@ -1,12 +0,0 @@
-https://weibo.cn//u/5500191418,最可爱的yz_,女,海外,17,379,1060,回复@-_-天线短路宝宝:我把他视频全都刷了个遍!!,0,2021-04-20 14:18
-,['回复@-_-天线短路宝宝:我把他视频全都刷了个遍!!']
-
-https://weibo.cn//u/5500191418,最可爱的yz_,女,海外,17,379,1060,回复@_火冰棍子:哈哈哈哈哈,0,2021-04-20 14:18
-,['回复@_火冰棍子:哈哈哈哈哈']
-
-https://weibo.cn//u/3807570123,-_-天线短路宝宝,女,新疆,330,139,522,我也用了他买的!!!!哈哈哈哈哈超喜欢大娘,0,2021-04-20 12:14
-,['我也用了他买的!!!!哈哈哈哈哈超喜欢大娘']
-
-https://weibo.cn//u/3232184211,_火冰棍子,女,北京,1428,145,69,牛逼啊妹妹,0,2021-04-20 12:05
-,['牛逼啊妹妹']
-
diff --git "a/weibo_data/\351\252\206\347\216\213\345\256\207/KbLmf79TP/comment.csv" "b/weibo_data/\351\252\206\347\216\213\345\256\207/KbLmf79TP/comment.csv"
deleted file mode 100644
index e9e608b..0000000
--- "a/weibo_data/\351\252\206\347\216\213\345\256\207/KbLmf79TP/comment.csv"
+++ /dev/null
@@ -1,15 +0,0 @@
-https://weibo.cn//u/7484534374,程前鹿子,女,广东,403,2668,2033,回复@程前鹿子:可以,0,2021-04-20 17:54
-,['回复@程前鹿子:可以']
-
-https://weibo.cn//u/7484534374,程前鹿子,女,广东,403,2668,2033,我觉得刷酸有些比较刺激🙊你哭试试去黑头泥膜,0,2021-04-20 17:54
-,['我觉得刷酸有些比较刺激🙊你哭试试去黑头泥膜']
-
-https://weibo.cn//u/3092839284,薄荷味的晓酱,女,海外,55,214,3641,回复@你不要逼我吃香菜:好滴好滴 谢谢集美耐心解答,0,2021-04-20 14:03
-,['回复@你不要逼我吃香菜:好滴好滴 谢谢集美耐心解答']
-
-https://weibo.cn//u/5867614732,你不要逼我吃香菜,女,福建,979,122,176,如果是水湿敷效果可能会更好 如果你觉得面霜用完会有点干或者脱皮之类的,可以加个精华,0,2021-04-20 13:02
-,['如果是水湿敷效果可能会更好 如果你觉得面霜用完会有点干或者脱皮之类的,可以加个精华']
-
-https://weibo.cn//u/7277147268,我叫陈梦梦,女,安徽,27,20,2,可以,0,2021-04-20 12:48
-,['可以']
-
diff --git "a/weibo_data/\351\252\206\347\216\213\345\256\207/KbNCnpZ2v/comment.csv" "b/weibo_data/\351\252\206\347\216\213\345\256\207/KbNCnpZ2v/comment.csv"
deleted file mode 100644
index 2fae935..0000000
--- "a/weibo_data/\351\252\206\347\216\213\345\256\207/KbNCnpZ2v/comment.csv"
+++ /dev/null
@@ -1,231 +0,0 @@
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021715,拍下送小样7ml+油面膜1片:,1,2021-04-20 18:21
-,['拍下送小样7ml+油面膜1片:']
-
-https://weibo.cn//u/2473308955,猪猪叹气Orz,女,海外,132,104,194,这个牌子得精油好用,而且店铺的服务特别特别好,1,2021-04-20 18:32
-,['这个牌子得精油好用,而且店铺的服务特别特别好']
-
-https://weibo.cn//u/5540290232,一盆多肉_,女,山西,15,200,1574,emmm,有点辣眼,所以我推荐zero卸妆膏,2,2021-04-20 18:23
-,['emmm,有点辣眼,所以我推荐zero卸妆膏']
-
-https://weibo.cn//u/5570062732,Sangheyo,女,江苏,191,183,188,我一直用他家的,没有姐妹说的辣眼和洗不干净的情况诶,0,2021-04-20 20:14
-,['我一直用他家的,没有姐妹说的辣眼和洗不干净的情况诶']
-
-https://weibo.cn//u/5470890262,这是锦鲤鲤,女,湖北,142,147,84,回复@这是锦鲤鲤:是小样,0,2021-04-20 19:53
-,['回复@这是锦鲤鲤:是小样']
-
-https://weibo.cn//u/5470890262,这是锦鲤鲤,女,湖北,142,147,84,兰的卸妆油我以前好像还当过试用员,0,2021-04-20 19:52
-,['兰的卸妆油我以前好像还当过试用员']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021715,回复@做你的快乐丶: 记得要乳化嗷 卸妆油不乳化就会一直是油质地,乳化后就清爽啦,0,2021-04-20 19:44
-,['回复@做你的快乐丶: 记得要乳化嗷 卸妆油不乳化就会一直是油质地,乳化后就清爽啦']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021715,回复@肤浅的胖虎: 害 每牌子都会有差评的,选适合自己的~,0,2021-04-20 19:43
-,['回复@肤浅的胖虎: 害 每牌子都会有差评的,选适合自己的~']
-
-https://weibo.cn//u/6586020023,江南祭酒呀,女,其他,221,285,2,回复@做你的快乐丶:姐妹是不是没有乳化,0,2021-04-20 19:08
-,['回复@做你的快乐丶:姐妹是不是没有乳化']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021715,回复@XUEQING杨:日本乐敦rohto官方旗舰店CC精华液面部亮肤维C淡斑祛痘印修复提亮 看看这个 拍2件划算,0,2021-04-20 18:54
-,['回复@XUEQING杨:日本乐敦rohto官方旗舰店CC精华液面部亮肤维C淡斑祛痘印修复提亮 看看这个 拍2件划算']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021715,回复@倾寒寒SpartAce:她素tasu彩色眼线笔防水防汗不易脱色晕染持久棕色眼线液胶笔 看看这个 合适不~姐妹,0,2021-04-20 18:49
-,['回复@倾寒寒SpartAce:她素tasu彩色眼线笔防水防汗不易脱色晕染持久棕色眼线液胶笔 看看这个 合适不~姐妹']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021715,回复@猪猪叹气Orz: 谢谢姐妹的反馈哇,0,2021-04-20 18:48
-,['回复@猪猪叹气Orz: 谢谢姐妹的反馈哇']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021715,回复@一盆多肉_: 适合自己的最重要,0,2021-04-20 18:48
-,['回复@一盆多肉_: 适合自己的最重要']
-
-https://weibo.cn//u/7217837973,XUEQING杨,女,安徽,89,128,10,多多有什么精华有活动吗,大学生经常熬夜的,0,2021-04-20 18:42
-,['多多有什么精华有活动吗,大学生经常熬夜的']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021715,回复@-是婷婷呀-:http://t.cn/A6cCBF54 来啦~植护的可吗,0,2021-04-20 18:42
-,['回复@-是婷婷呀-:http://t.cn/A6cCBF54 来啦~植护的可吗']
-
-https://weibo.cn//u/5646783960,改名字了的话还找得到吗,女,云南,2092,191,73,回复@NIKI512:我也要,0,2021-04-20 18:37
-,['回复@NIKI512:我也要']
-
-https://weibo.cn//u/5486368289,倾寒寒SpartAce,女,福建,1418,327,187,有眼线笔吗多多,0,2021-04-20 18:33
-,['有眼线笔吗多多']
-
-https://weibo.cn//u/2473308955,猪猪叹气Orz,女,海外,132,104,194,这个牌子得精油好用,而且店铺的服务特别特别好,1,2021-04-20 18:32
-,['这个牌子得精油好用,而且店铺的服务特别特别好']
-
-https://weibo.cn//u/5911772701,-是婷婷呀-,女,北京,3942,415,157,多多 我需要卷纸 帮我蹲一蹲吧,0,2021-04-20 18:31
-,['多多 我需要卷纸 帮我蹲一蹲吧']
-
-https://weibo.cn//u/2957321065,做你的快乐丶,女,广东,141,495,159,用过,蛮好用的,但它真的太油了,0,2021-04-20 18:30
-,['用过,蛮好用的,但它真的太油了']
-
-https://weibo.cn//u/2503055180,NIKI512,女,浙江,640,258,131,逐本的有吗,1,2021-04-20 18:30
-,['逐本的有吗']
-
-https://weibo.cn//u/2972927100,肤浅的胖虎,女,广东,523,335,346,回复@一盆多肉_:zero糊眼睛哈哈哈,0,2021-04-20 18:26
-,['回复@一盆多肉_:zero糊眼睛哈哈哈']
-
-https://weibo.cn//u/5540290232,一盆多肉_,女,山西,15,200,1574,emmm,有点辣眼,所以我推荐zero卸妆膏,2,2021-04-20 18:23
-,['emmm,有点辣眼,所以我推荐zero卸妆膏']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021717,回复@海外大牌: 用过的姐妹来说说看呀,1,2021-04-20 18:21
-,['回复@海外大牌: 用过的姐妹来说说看呀']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021717,拍下送小样7ml+油面膜1片:,1,2021-04-20 18:21
-,['拍下送小样7ml+油面膜1片:']
-
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-,['评论内容']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,拍下送小样7ml+油面膜1片:,1,2021-04-20 18:21
-,['拍下送小样7ml+油面膜1片:']
-
-https://weibo.cn//u/2473308955,猪猪叹气Orz,女,海外,132,104,194,这个牌子得精油好用,而且店铺的服务特别特别好,1,2021-04-20 18:32
-,['这个牌子得精油好用,而且店铺的服务特别特别好']
-
-https://weibo.cn//u/5540290232,一盆多肉_,女,山西,15,200,1574,emmm,有点辣眼,所以我推荐zero卸妆膏,2,2021-04-20 18:23
-,['emmm,有点辣眼,所以我推荐zero卸妆膏']
-
-https://weibo.cn//u/5570062732,Sangheyo,女,江苏,191,183,188,我一直用他家的,没有姐妹说的辣眼和洗不干净的情况诶,0,2021-04-20 20:14
-,['我一直用他家的,没有姐妹说的辣眼和洗不干净的情况诶']
-
-https://weibo.cn//u/5470890262,这是锦鲤鲤,女,湖北,142,147,84,回复@这是锦鲤鲤:是小样,0,2021-04-20 19:53
-,['回复@这是锦鲤鲤:是小样']
-
-https://weibo.cn//u/5470890262,这是锦鲤鲤,女,湖北,142,147,84,兰的卸妆油我以前好像还当过试用员,0,2021-04-20 19:51
-,['兰的卸妆油我以前好像还当过试用员']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,回复@做你的快乐丶: 记得要乳化嗷 卸妆油不乳化就会一直是油质地,乳化后就清爽啦,0,2021-04-20 19:44
-,['回复@做你的快乐丶: 记得要乳化嗷 卸妆油不乳化就会一直是油质地,乳化后就清爽啦']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,回复@肤浅的胖虎: 害 每牌子都会有差评的,选适合自己的~,0,2021-04-20 19:43
-,['回复@肤浅的胖虎: 害 每牌子都会有差评的,选适合自己的~']
-
-https://weibo.cn//u/6586020023,江南祭酒呀,女,其他,221,285,2,回复@做你的快乐丶:姐妹是不是没有乳化,0,2021-04-20 19:08
-,['回复@做你的快乐丶:姐妹是不是没有乳化']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,回复@XUEQING杨:日本乐敦rohto官方旗舰店CC精华液面部亮肤维C淡斑祛痘印修复提亮 看看这个 拍2件划算,0,2021-04-20 18:54
-,['回复@XUEQING杨:日本乐敦rohto官方旗舰店CC精华液面部亮肤维C淡斑祛痘印修复提亮 看看这个 拍2件划算']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,回复@倾寒寒SpartAce:她素tasu彩色眼线笔防水防汗不易脱色晕染持久棕色眼线液胶笔 看看这个 合适不~姐妹,0,2021-04-20 18:49
-,['回复@倾寒寒SpartAce:她素tasu彩色眼线笔防水防汗不易脱色晕染持久棕色眼线液胶笔 看看这个 合适不~姐妹']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,回复@猪猪叹气Orz: 谢谢姐妹的反馈哇,0,2021-04-20 18:48
-,['回复@猪猪叹气Orz: 谢谢姐妹的反馈哇']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,回复@一盆多肉_: 适合自己的最重要,0,2021-04-20 18:48
-,['回复@一盆多肉_: 适合自己的最重要']
-
-https://weibo.cn//u/7217837973,XUEQING杨,女,安徽,89,128,10,多多有什么精华有活动吗,大学生经常熬夜的,0,2021-04-20 18:42
-,['多多有什么精华有活动吗,大学生经常熬夜的']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,回复@-是婷婷呀-:42卷植护无芯卷纸卫生纸家用实惠装厕所草纸手纸整箱批发卷筒纸巾 来啦~植护的可吗,0,2021-04-20 18:42
-,['回复@-是婷婷呀-:42卷植护无芯卷纸卫生纸家用实惠装厕所草纸手纸整箱批发卷筒纸巾 来啦~植护的可吗']
-
-https://weibo.cn//u/5646783960,改名字了的话还找得到吗,女,云南,2092,191,73,回复@NIKI512:我也要,0,2021-04-20 18:37
-,['回复@NIKI512:我也要']
-
-https://weibo.cn//u/5486368289,倾寒寒SpartAce,女,福建,1418,327,187,有眼线笔吗多多,0,2021-04-20 18:33
-,['有眼线笔吗多多']
-
-https://weibo.cn//u/2473308955,猪猪叹气Orz,女,海外,132,104,194,这个牌子得精油好用,而且店铺的服务特别特别好,1,2021-04-20 18:32
-,['这个牌子得精油好用,而且店铺的服务特别特别好']
-
-https://weibo.cn//u/5911772701,-是婷婷呀-,女,北京,3942,415,157,多多 我需要卷纸 帮我蹲一蹲吧,0,2021-04-20 18:31
-,['多多 我需要卷纸 帮我蹲一蹲吧']
-
-https://weibo.cn//u/2957321065,做你的快乐丶,女,广东,141,495,159,用过,蛮好用的,但它真的太油了,0,2021-04-20 18:30
-,['用过,蛮好用的,但它真的太油了']
-
-https://weibo.cn//u/2503055180,NIKI512,女,浙江,640,258,131,逐本的有吗,1,2021-04-20 18:30
-,['逐本的有吗']
-
-https://weibo.cn//u/2972927100,肤浅的胖虎,女,广东,523,335,346,回复@一盆多肉_:zero糊眼睛哈哈哈,0,2021-04-20 18:26
-,['回复@一盆多肉_:zero糊眼睛哈哈哈']
-
-https://weibo.cn//u/5540290232,一盆多肉_,女,山西,15,200,1574,emmm,有点辣眼,所以我推荐zero卸妆膏,2,2021-04-20 18:23
-,['emmm,有点辣眼,所以我推荐zero卸妆膏']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,回复@海外大牌: 用过的姐妹来说说看呀,1,2021-04-20 18:21
-,['回复@海外大牌: 用过的姐妹来说说看呀']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021716,拍下送小样7ml+油面膜1片:,1,2021-04-20 18:21
-,['拍下送小样7ml+油面膜1片:']
-
-评论者主页,评论者昵称,评论者性别,评论者所在地,评论者微博数,评论者关注数,评论者粉丝数,评论内容,评论获赞数,评论发布时间
-,['评论内容']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,拍下送小样7ml+油面膜1片:,1,2021-04-20 18:21
-,['拍下送小样7ml+油面膜1片:']
-
-https://weibo.cn//u/2473308955,猪猪叹气Orz,女,海外,132,104,194,这个牌子得精油好用,而且店铺的服务特别特别好,1,2021-04-20 18:32
-,['这个牌子得精油好用,而且店铺的服务特别特别好']
-
-https://weibo.cn//u/5540290232,一盆多肉_,女,山西,15,200,1574,emmm,有点辣眼,所以我推荐zero卸妆膏,2,2021-04-20 18:23
-,['emmm,有点辣眼,所以我推荐zero卸妆膏']
-
-https://weibo.cn//u/5570062732,Sangheyo,女,江苏,191,183,188,我一直用他家的,没有姐妹说的辣眼和洗不干净的情况诶,0,2021-04-20 20:14
-,['我一直用他家的,没有姐妹说的辣眼和洗不干净的情况诶']
-
-https://weibo.cn//u/5470890262,这是锦鲤鲤,女,湖北,142,147,84,回复@这是锦鲤鲤:是小样,0,2021-04-20 19:52
-,['回复@这是锦鲤鲤:是小样']
-
-https://weibo.cn//u/5470890262,这是锦鲤鲤,女,湖北,142,147,84,兰的卸妆油我以前好像还当过试用员,0,2021-04-20 19:51
-,['兰的卸妆油我以前好像还当过试用员']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,回复@做你的快乐丶: 记得要乳化嗷 卸妆油不乳化就会一直是油质地,乳化后就清爽啦,0,2021-04-20 19:44
-,['回复@做你的快乐丶: 记得要乳化嗷 卸妆油不乳化就会一直是油质地,乳化后就清爽啦']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,回复@肤浅的胖虎: 害 每牌子都会有差评的,选适合自己的~,0,2021-04-20 19:43
-,['回复@肤浅的胖虎: 害 每牌子都会有差评的,选适合自己的~']
-
-https://weibo.cn//u/6586020023,江南祭酒呀,女,其他,221,285,2,回复@做你的快乐丶:姐妹是不是没有乳化,0,2021-04-20 19:08
-,['回复@做你的快乐丶:姐妹是不是没有乳化']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,回复@XUEQING杨:日本乐敦rohto官方旗舰店CC精华液面部亮肤维C淡斑祛痘印修复提亮 看看这个 拍2件划算,0,2021-04-20 18:54
-,['回复@XUEQING杨:日本乐敦rohto官方旗舰店CC精华液面部亮肤维C淡斑祛痘印修复提亮 看看这个 拍2件划算']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,回复@倾寒寒SpartAce:她素tasu彩色眼线笔防水防汗不易脱色晕染持久棕色眼线液胶笔 看看这个 合适不~姐妹,0,2021-04-20 18:49
-,['回复@倾寒寒SpartAce:她素tasu彩色眼线笔防水防汗不易脱色晕染持久棕色眼线液胶笔 看看这个 合适不~姐妹']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,回复@猪猪叹气Orz: 谢谢姐妹的反馈哇,0,2021-04-20 18:48
-,['回复@猪猪叹气Orz: 谢谢姐妹的反馈哇']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,回复@一盆多肉_: 适合自己的最重要,0,2021-04-20 18:48
-,['回复@一盆多肉_: 适合自己的最重要']
-
-https://weibo.cn//u/7217837973,XUEQING杨,女,安徽,89,128,10,多多有什么精华有活动吗,大学生经常熬夜的,0,2021-04-20 18:42
-,['多多有什么精华有活动吗,大学生经常熬夜的']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,回复@-是婷婷呀-:42卷植护无芯卷纸卫生纸家用实惠装厕所草纸手纸整箱批发卷筒纸巾 来啦~植护的可吗,0,2021-04-20 18:42
-,['回复@-是婷婷呀-:42卷植护无芯卷纸卫生纸家用实惠装厕所草纸手纸整箱批发卷筒纸巾 来啦~植护的可吗']
-
-https://weibo.cn//u/5646783960,改名字了的话还找得到吗,女,云南,2092,191,73,回复@NIKI512:我也要,0,2021-04-20 18:37
-,['回复@NIKI512:我也要']
-
-https://weibo.cn//u/5486368289,倾寒寒SpartAce,女,福建,1418,327,187,有眼线笔吗多多,0,2021-04-20 18:33
-,['有眼线笔吗多多']
-
-https://weibo.cn//u/2473308955,猪猪叹气Orz,女,海外,132,104,194,这个牌子得精油好用,而且店铺的服务特别特别好,1,2021-04-20 18:32
-,['这个牌子得精油好用,而且店铺的服务特别特别好']
-
-https://weibo.cn//u/5911772701,-是婷婷呀-,女,北京,3942,415,157,多多 我需要卷纸 帮我蹲一蹲吧,0,2021-04-20 18:31
-,['多多 我需要卷纸 帮我蹲一蹲吧']
-
-https://weibo.cn//u/2957321065,做你的快乐丶,女,广东,141,495,159,用过,蛮好用的,但它真的太油了,0,2021-04-20 18:30
-,['用过,蛮好用的,但它真的太油了']
-
-https://weibo.cn//u/2503055180,NIKI512,女,浙江,640,258,131,逐本的有吗,1,2021-04-20 18:30
-,['逐本的有吗']
-
-https://weibo.cn//u/2972927100,肤浅的胖虎,女,广东,523,335,346,回复@一盆多肉_:zero糊眼睛哈哈哈,0,2021-04-20 18:26
-,['回复@一盆多肉_:zero糊眼睛哈哈哈']
-
-https://weibo.cn//u/5540290232,一盆多肉_,女,山西,15,200,1574,emmm,有点辣眼,所以我推荐zero卸妆膏,2,2021-04-20 18:23
-,['emmm,有点辣眼,所以我推荐zero卸妆膏']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,回复@海外大牌: 用过的姐妹来说说看呀,1,2021-04-20 18:21
-,['回复@海外大牌: 用过的姐妹来说说看呀']
-
-https://weibo.cn//u/6494237922,海外大牌,女,广东,130947,84,3021714,拍下送小样7ml+油面膜1片:,1,2021-04-20 18:21
-,['拍下送小样7ml+油面膜1片:']
-
diff --git a/weibo_flask/.idea/dataSources.local.xml b/weibo_flask/.idea/dataSources.local.xml
new file mode 100644
index 0000000..f490476
--- /dev/null
+++ b/weibo_flask/.idea/dataSources.local.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+ "
+
+
+ master_key
+ false
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/weibo_flask/.idea/dataSources.xml b/weibo_flask/.idea/dataSources.xml
new file mode 100644
index 0000000..9598d2b
--- /dev/null
+++ b/weibo_flask/.idea/dataSources.xml
@@ -0,0 +1,11 @@
+
+
+
+
+ sqlite.xerial
+ true
+ org.sqlite.JDBC
+ jdbc:sqlite:$PROJECT_DIR$/movie.db
+
+
+
\ No newline at end of file
diff --git a/weibo_flask/.idea/dataSources/f8992ce1-af87-476e-9624-b2c980d51dc7.xml b/weibo_flask/.idea/dataSources/f8992ce1-af87-476e-9624-b2c980d51dc7.xml
new file mode 100644
index 0000000..f237274
--- /dev/null
+++ b/weibo_flask/.idea/dataSources/f8992ce1-af87-476e-9624-b2c980d51dc7.xml
@@ -0,0 +1,88 @@
+
+
+
+
+ 3.25.1
+
+
+ 1
+
+
+
+
+
+
+
+
+ 1
+ integer|0s
+ 1
+
+
+ 2
+ text|0s
+
+
+ 3
+ text|0s
+
+
+ 4
+ varchar|0s
+
+
+ 5
+ varchar|0s
+
+
+ 6
+ numeric|0s
+
+
+ 7
+ numeric|0s
+
+
+ 8
+ text|0s
+
+
+ 9
+ text|0s
+
+
+ id
+ 1
+
+
+ 1
+ text|0s
+
+
+ 2
+ text|0s
+
+
+ 3
+ text|0s
+
+
+ 4
+ int|0s
+
+
+ 5
+ text|0s
+
+
+ 1
+
+
+ 2
+
+
+
\ No newline at end of file
diff --git a/weibo_flask/.idea/douban_flask.iml b/weibo_flask/.idea/douban_flask.iml
new file mode 100644
index 0000000..fe0cf37
--- /dev/null
+++ b/weibo_flask/.idea/douban_flask.iml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/weibo_flask/.idea/inspectionProfiles/profiles_settings.xml b/weibo_flask/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/weibo_flask/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/weibo_flask/.idea/misc.xml b/weibo_flask/.idea/misc.xml
new file mode 100644
index 0000000..8656114
--- /dev/null
+++ b/weibo_flask/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/weibo_flask/.idea/modules.xml b/weibo_flask/.idea/modules.xml
new file mode 100644
index 0000000..33a86c1
--- /dev/null
+++ b/weibo_flask/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/weibo_flask/.idea/workspace.xml b/weibo_flask/.idea/workspace.xml
new file mode 100644
index 0000000..c7bfb70
--- /dev/null
+++ b/weibo_flask/.idea/workspace.xml
@@ -0,0 +1,306 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1583565183371
+
+
+ 1583565183371
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/weibo_flask/__pycache__/app.cpython-37.pyc b/weibo_flask/__pycache__/app.cpython-37.pyc
new file mode 100644
index 0000000..2bc0469
Binary files /dev/null and b/weibo_flask/__pycache__/app.cpython-37.pyc differ
diff --git a/weibo_flask/app.py b/weibo_flask/app.py
new file mode 100644
index 0000000..6383e90
--- /dev/null
+++ b/weibo_flask/app.py
@@ -0,0 +1,96 @@
+from flask import Flask,render_template
+import sqlite3
+
+app = Flask(__name__)
+
+
+@app.route('/')
+def index():
+ return render_template("index.html")
+
+
+@app.route('/index')
+def home():
+ #return render_template("index.html")
+ return index()
+
+
+@app.route('/movie')
+def movie():
+ datalist = []
+ con = sqlite3.connect("save.db")
+ cur = con.cursor()
+ sql = "select * from users_comments"
+ data = cur.execute(sql)
+ for item in data:
+ datalist.append(item)
+ cur.close()
+ con.close()
+ print(datalist)
+ return render_template("movie.html",movies = datalist)
+
+
+
+@app.route('/score')
+def score():
+ score = []
+ num = []
+ score1 = []
+ num1 = []
+ score2 = []
+ num2 = []
+ k=0
+ con = sqlite3.connect("save.db")
+ cur = con.cursor()
+ sql = "select count(NAME) as t,NAME,WB_NUM from users_comments group by NAME order by WB_NUM desc limit 5"
+ sql1 = "select substr(release_time,0,12) as time ,count(substr(release_time,0,12)) from users_comments group by time limit 4"
+ sql2 = "select address,count(address) as t from users_comments group by address order by t desc"
+ data = cur.execute(sql)
+ for item in data:
+ score.append(str(item[1]))
+ num.append(item[2])
+ data1 = cur.execute(sql1)
+ for item in data1:
+ score1.append(str(item[0]))
+ num1.append(item[1])
+ data2 = cur.execute(sql2)
+ for item in data2:
+ if(k<5):
+ k+=1
+ score2.append(str(item[0]))
+ num2.append(item[1])
+ cur.close()
+ con.close()
+ return render_template("score.html",score= score,num=num,score1= score1,num1=num1,score2= score2,num2=num2)
+
+
+@app.route('/word')
+def word():
+ return render_template("word.html")
+
+@app.route('/team')
+def team():
+ addr = {}
+ con = sqlite3.connect("save.db")
+ cur = con.cursor()
+ sql = "select address,wb_num from users_comments"
+ data = cur.execute(sql)
+ for item in data:
+ flag = addr.get(item[0],0)
+ if(flag):
+ addr[item[0]]=item[1]+addr.get(item[0])
+ else:
+ addr[item[0]]=item[1]
+ #print(item)
+
+
+ cur.close()
+ con.close()
+ print(addr)
+ #print(addr['北京'])
+ #print(type(addr.get('北京')))
+ return render_template("team.html",addr=addr)
+
+
+if __name__ == '__main__':
+ app.run()
diff --git a/weibo_flask/run_flask.ps1 b/weibo_flask/run_flask.ps1
new file mode 100644
index 0000000..f273830
--- /dev/null
+++ b/weibo_flask/run_flask.ps1
@@ -0,0 +1 @@
+python app.py
\ No newline at end of file
diff --git a/weibo_flask/save.db b/weibo_flask/save.db
new file mode 100644
index 0000000..c96fb32
Binary files /dev/null and b/weibo_flask/save.db differ
diff --git a/weibo_flask/static/assets/css/style.css b/weibo_flask/static/assets/css/style.css
new file mode 100644
index 0000000..9a0facd
--- /dev/null
+++ b/weibo_flask/static/assets/css/style.css
@@ -0,0 +1,1340 @@
+
+/*--------------------------------------------------------------
+# General
+--------------------------------------------------------------*/
+body {
+ font-family: "Open Sans", sans-serif;
+ color: #444;
+}
+
+a {
+ color: #428bca;
+}
+
+a:hover {
+ color: #9eccf4;
+ text-decoration: none;
+}
+
+h1, h2, h3, h4, h5, h6, .font-primary {
+ font-family: "Raleway", sans-serif;
+}
+
+/*--------------------------------------------------------------
+# Back to top button
+--------------------------------------------------------------*/
+.back-to-top {
+ position: fixed;
+ display: none;
+ width: 40px;
+ height: 40px;
+ border-radius: 3px;
+ right: 15px;
+ bottom: 15px;
+ background: #428bca;
+ color: #fff;
+ transition: display 0.5s ease-in-out;
+ z-index: 99999;
+}
+
+.back-to-top i {
+ font-size: 24px;
+ position: absolute;
+ top: 8px;
+ left: 8px;
+}
+
+.back-to-top:hover {
+ color: #fff;
+ background: #629fd3;
+ transition: background 0.2s ease-in-out;
+}
+
+/*--------------------------------------------------------------
+# Top Bar
+--------------------------------------------------------------*/
+#topbar {
+ background: #fff;
+ padding: 10px 0;
+ border-bottom: 1px solid #eee;
+ font-size: 14px;
+}
+
+#topbar .contact-info a {
+ line-height: 1;
+ color: #444;
+ transition: 0.3s;
+}
+
+#topbar .contact-info a:hover {
+ color: #428bca;
+}
+
+#topbar .contact-info i {
+ color: #428bca;
+ padding: 4px;
+}
+
+#topbar .contact-info .icofont-phone {
+ padding-left: 20px;
+ margin-left: 10px;
+}
+
+#topbar .social-links a {
+ color: #5c768d;
+ padding: 4px 12px;
+ display: inline-block;
+ line-height: 1px;
+ transition: 0.3s;
+}
+
+#topbar .social-links a:hover {
+ color: #428bca;
+}
+.tlinks{text-indent:-9999px;height:0;line-height:0;font-size:0;overflow:hidden;}
+/*--------------------------------------------------------------
+# Header
+--------------------------------------------------------------*/
+#header {
+ height: 70px;
+ transition: all 0.5s;
+ transition: all 0.5s;
+ padding: 10px 0;
+ background: #fff;
+ z-index: 997;
+}
+
+#header.header-scrolled {
+ box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.1);
+}
+
+#header .logo h1 {
+ font-size: 28px;
+ margin: 0;
+ padding: 10px 0;
+ line-height: 1;
+ font-weight: 400;
+ letter-spacing: 3px;
+ text-transform: uppercase;
+}
+
+#header .logo h1 a, #header .logo h1 a:hover {
+ color: #1c5c93;
+ text-decoration: none;
+}
+
+#header .logo img {
+ padding: 0;
+ margin: 0;
+ max-height: 40px;
+}
+
+/*--------------------------------------------------------------
+# Navigation Menu
+--------------------------------------------------------------*/
+/* Desktop Navigation */
+.nav-menu, .nav-menu * {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+.nav-menu > ul > li {
+ position: relative;
+ white-space: nowrap;
+ float: left;
+}
+
+.nav-menu a {
+ display: block;
+ position: relative;
+ color: #5c768d;
+ padding: 12px 15px;
+ transition: 0.3s;
+ font-size: 14px;
+ font-family: "Open Sans", sans-serif;
+}
+
+.nav-menu a:hover, .nav-menu .active > a, .nav-menu li:hover > a {
+ color: #428bca;
+ text-decoration: none;
+}
+
+.nav-menu .drop-down ul {
+ display: block;
+ position: absolute;
+ left: 0;
+ top: 100%;
+ z-index: 99;
+ opacity: 0;
+ visibility: hidden;
+ padding: 10px 0;
+ background: #fff;
+ box-shadow: 0px 0px 30px rgba(127, 137, 161, 0.25);
+ transition: ease all 0.3s;
+}
+
+.nav-menu .drop-down:hover > ul {
+ opacity: 1;
+ top: 100%;
+ visibility: visible;
+}
+
+.nav-menu .drop-down li {
+ min-width: 180px;
+ position: relative;
+}
+
+.nav-menu .drop-down ul a {
+ padding: 10px 20px;
+ font-size: 14px;
+ font-weight: 500;
+ text-transform: none;
+ color: #103453;
+}
+
+.nav-menu .drop-down ul a:hover, .nav-menu .drop-down ul .active > a, .nav-menu .drop-down ul li:hover > a {
+ color: #428bca;
+}
+
+.nav-menu .drop-down > a:after {
+ content: "\ea99";
+ font-family: IcoFont;
+ padding-left: 5px;
+}
+
+.nav-menu .drop-down .drop-down ul {
+ top: 0;
+ left: 100%;
+}
+
+.nav-menu .drop-down .drop-down:hover > ul {
+ opacity: 1;
+ top: 0;
+}
+
+.nav-menu .drop-down .drop-down > a {
+ padding-right: 35px;
+}
+
+.nav-menu .drop-down .drop-down > a:after {
+ content: "\eaa0";
+ font-family: IcoFont;
+ position: absolute;
+ right: 15px;
+}
+
+@media (max-width: 1366px) {
+ .nav-menu .drop-down .drop-down ul {
+ left: -90%;
+ }
+ .nav-menu .drop-down .drop-down:hover > ul {
+ left: -100%;
+ }
+ .nav-menu .drop-down .drop-down > a:after {
+ content: "\ea9d";
+ }
+}
+
+/* Mobile Navigation */
+.mobile-nav {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ z-index: 9999;
+ overflow-y: auto;
+ left: -260px;
+ width: 260px;
+ padding-top: 18px;
+ background: #1f3548;
+ transition: 0.4s;
+}
+
+.mobile-nav * {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+.mobile-nav a {
+ display: block;
+ position: relative;
+ color: #e3f0fc;
+ padding: 10px 20px;
+ font-weight: 500;
+}
+
+.mobile-nav a:hover, .mobile-nav .active > a, .mobile-nav li:hover > a {
+ color: #9eccf4;
+ text-decoration: none;
+}
+
+.mobile-nav .drop-down > a:after {
+ content: "\ea99";
+ font-family: IcoFont;
+ padding-left: 10px;
+ position: absolute;
+ right: 15px;
+}
+
+.mobile-nav .active.drop-down > a:after {
+ content: "\eaa0";
+}
+
+.mobile-nav .drop-down > a {
+ padding-right: 35px;
+}
+
+.mobile-nav .drop-down ul {
+ display: none;
+ overflow: hidden;
+}
+
+.mobile-nav .drop-down li {
+ padding-left: 20px;
+}
+
+.mobile-nav-toggle {
+ position: fixed;
+ right: 15px;
+ top: 20px;
+ z-index: 9998;
+ border: 0;
+ background: none;
+ font-size: 24px;
+ transition: all 0.4s;
+ outline: none !important;
+ line-height: 1;
+ cursor: pointer;
+ text-align: right;
+}
+
+.mobile-nav-toggle i {
+ color: #5c768d;
+}
+
+.mobile-nav-overly {
+ width: 100%;
+ height: 100%;
+ z-index: 9997;
+ top: 0;
+ left: 0;
+ position: fixed;
+ background: rgba(31, 53, 72, 0.7);
+ overflow: hidden;
+ display: none;
+}
+
+.mobile-nav-active {
+ overflow: hidden;
+}
+
+.mobile-nav-active .mobile-nav {
+ left: 0;
+}
+
+.mobile-nav-active .mobile-nav-toggle i {
+ color: #fff;
+}
+
+/*--------------------------------------------------------------
+# Hero Section
+--------------------------------------------------------------*/
+#hero {
+ width: 100%;
+ height: calc(100vh - 114px);
+ padding: 0;
+ overflow: hidden;
+}
+
+#hero .carousel-item {
+ width: 100%;
+ height: calc(100vh - 114px);
+ background-size: cover;
+ background-position: top right;
+ background-repeat: no-repeat;
+ overflow: hidden;
+}
+
+#hero .carousel-item::before {
+ content: '';
+ background-color: rgba(13, 30, 45, 0.6);
+ position: absolute;
+ height: 100%;
+ width: 100%;
+ top: 0;
+ right: 0;
+ left: 0;
+ bottom: 0;
+ overflow: hidden;
+}
+
+#hero .carousel-container {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: absolute;
+ bottom: 0;
+ top: 0;
+ left: 0;
+ right: 0;
+ overflow: hidden;
+}
+
+#hero .carousel-content {
+ text-align: left;
+}
+
+@media (max-width: 992px) {
+ #hero, #hero .carousel-item {
+ height: calc(100vh - 70px);
+ }
+ #hero .carousel-content.container {
+ padding: 0 50px;
+ }
+}
+
+#hero h2 {
+ color: #fff;
+ margin-bottom: 30px;
+ font-size: 48px;
+ font-weight: 900;
+}
+
+#hero p {
+ width: 80%;
+ -webkit-animation-delay: 0.4s;
+ animation-delay: 0.4s;
+ color: #fff;
+}
+
+#hero .carousel-inner .carousel-item {
+ transition-property: opacity;
+ background-position: center top;
+}
+
+#hero .carousel-inner .carousel-item,
+#hero .carousel-inner .active.carousel-item-left,
+#hero .carousel-inner .active.carousel-item-right {
+ opacity: 0;
+}
+
+#hero .carousel-inner .active,
+#hero .carousel-inner .carousel-item-next.carousel-item-left,
+#hero .carousel-inner .carousel-item-prev.carousel-item-right {
+ opacity: 1;
+ transition: 0.5s;
+}
+
+#hero .carousel-inner .carousel-item-next,
+#hero .carousel-inner .carousel-item-prev,
+#hero .carousel-inner .active.carousel-item-left,
+#hero .carousel-inner .active.carousel-item-right {
+ left: 0;
+ transform: translate3d(0, 0, 0);
+}
+
+#hero .carousel-control-prev, #hero .carousel-control-next {
+ width: 10%;
+}
+
+#hero .carousel-control-next-icon, #hero .carousel-control-prev-icon {
+ background: none;
+ font-size: 48px;
+ line-height: 1;
+ width: auto;
+ height: auto;
+}
+
+#hero .carousel-indicators li {
+ cursor: pointer;
+}
+
+#hero .btn-get-started {
+ font-family: "Raleway", sans-serif;
+ font-weight: 500;
+ font-size: 14px;
+ letter-spacing: 1px;
+ display: inline-block;
+ padding: 12px 32px;
+ border-radius: 5px;
+ transition: 0.5s;
+ line-height: 1;
+ margin: 10px;
+ color: #fff;
+ -webkit-animation-delay: 0.8s;
+ animation-delay: 0.8s;
+ border: 0;
+ background: #428bca;
+}
+
+#hero .btn-get-started:hover {
+ background: #1c5c93;
+}
+
+@media (max-width: 768px) {
+ #hero h2 {
+ font-size: 28px;
+ }
+}
+
+@media (min-width: 1024px) {
+ #hero p {
+ width: 60%;
+ }
+ #hero .carousel-control-prev, #hero .carousel-control-next {
+ width: 5%;
+ }
+}
+
+/*--------------------------------------------------------------
+# Sections General
+--------------------------------------------------------------*/
+section {
+ padding: 60px 0;
+}
+
+.section-bg {
+ background-color: #f5f9fc;
+}
+
+.section-title {
+ text-align: center;
+ padding-bottom: 30px;
+}
+
+.section-title h2 {
+ font-size: 32px;
+ font-weight: 600;
+ margin-bottom: 20px;
+ padding-bottom: 0;
+ color: #5c768d;
+}
+
+.section-title p {
+ margin-bottom: 0;
+}
+
+/*--------------------------------------------------------------
+# About Us
+--------------------------------------------------------------*/
+.about {
+ padding-bottom: 30px;
+}
+
+.about .container {
+ box-shadow: 0 5px 25px 0 rgba(214, 215, 216, 0.6);
+}
+
+.about .video-box img {
+ padding: 15px 0;
+}
+
+.about .section-title p {
+ text-align: left;
+ font-style: italic;
+ color: #666;
+}
+
+.about .about-content {
+ padding: 40px;
+}
+
+.about .icon-box + .icon-box {
+ margin-top: 40px;
+}
+
+.about .icon-box .icon {
+ float: left;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 72px;
+ height: 72px;
+ background: #f1f7fb;
+ border-radius: 6px;
+ transition: 0.5s;
+}
+
+.about .icon-box .icon i {
+ color: #428bca;
+ font-size: 32px;
+}
+
+.about .icon-box:hover .icon {
+ background: #428bca;
+}
+
+.about .icon-box:hover .icon i {
+ color: #fff;
+}
+
+.about .icon-box .title {
+ margin-left: 95px;
+ font-weight: 700;
+ margin-bottom: 10px;
+ font-size: 18px;
+ text-transform: uppercase;
+}
+
+.about .icon-box .title a {
+ color: #343a40;
+ transition: 0.3s;
+}
+
+.about .icon-box .title a:hover {
+ color: #428bca;
+}
+
+.about .icon-box .description {
+ margin-left: 95px;
+ line-height: 24px;
+ font-size: 14px;
+}
+
+.about .video-box {
+ position: relative;
+}
+
+.about .play-btn {
+ width: 94px;
+ height: 94px;
+ background: radial-gradient(#428bca 50%, rgba(66, 139, 202, 0.4) 52%);
+ border-radius: 50%;
+ display: block;
+ position: absolute;
+ left: calc(50% - 47px);
+ top: calc(50% - 47px);
+ overflow: hidden;
+}
+
+.about .play-btn::after {
+ content: '';
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translateX(-40%) translateY(-50%);
+ width: 0;
+ height: 0;
+ border-top: 10px solid transparent;
+ border-bottom: 10px solid transparent;
+ border-left: 15px solid #fff;
+ z-index: 100;
+ transition: all 400ms cubic-bezier(0.55, 0.055, 0.675, 0.19);
+}
+
+.about .play-btn::before {
+ content: '';
+ position: absolute;
+ width: 120px;
+ height: 120px;
+ -webkit-animation-delay: 0s;
+ animation-delay: 0s;
+ -webkit-animation: pulsate-btn 2s;
+ animation: pulsate-btn 2s;
+ -webkit-animation-direction: forwards;
+ animation-direction: forwards;
+ -webkit-animation-iteration-count: infinite;
+ animation-iteration-count: infinite;
+ -webkit-animation-timing-function: steps;
+ animation-timing-function: steps;
+ opacity: 1;
+ border-radius: 50%;
+ border: 5px solid rgba(66, 139, 202, 0.7);
+ top: -15%;
+ left: -15%;
+ background: rgba(198, 16, 0, 0);
+}
+
+.about .play-btn:hover::after {
+ border-left: 15px solid #428bca;
+ transform: scale(20);
+}
+
+.about .play-btn:hover::before {
+ content: '';
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translateX(-40%) translateY(-50%);
+ width: 0;
+ height: 0;
+ border: none;
+ border-top: 10px solid transparent;
+ border-bottom: 10px solid transparent;
+ border-left: 15px solid #fff;
+ z-index: 200;
+ -webkit-animation: none;
+ animation: none;
+ border-radius: 0;
+}
+
+@-webkit-keyframes pulsate-btn {
+ 0% {
+ transform: scale(0.6, 0.6);
+ opacity: 1;
+ }
+ 100% {
+ transform: scale(1, 1);
+ opacity: 0;
+ }
+}
+
+@keyframes pulsate-btn {
+ 0% {
+ transform: scale(0.6, 0.6);
+ opacity: 1;
+ }
+ 100% {
+ transform: scale(1, 1);
+ opacity: 0;
+ }
+}
+
+/*--------------------------------------------------------------
+# About Lists
+--------------------------------------------------------------*/
+.about-lists {
+ padding: 40px;
+}
+
+.about-lists .row {
+ overflow: hidden;
+}
+
+.about-lists .content-item {
+ padding: 40px;
+ border-left: 1px solid #d9e8f4;
+ border-bottom: 1px solid #d9e8f4;
+ margin: -1px;
+}
+
+.about-lists .content-item span {
+ display: block;
+ font-size: 24px;
+ font-weight: 400;
+ color: #9eccf4;
+}
+
+.about-lists .content-item h4 {
+ font-size: 28px;
+ font-weight: 400;
+ padding: 0;
+ margin: 20px 0;
+}
+
+.about-lists .content-item p {
+ color: #aaaaaa;
+ font-size: 15px;
+ margin: 0;
+ padding: 0;
+}
+
+@media (max-width: 768px) {
+ .about-lists .content-item {
+ padding: 40px 0;
+ }
+}
+
+/*--------------------------------------------------------------
+# Counts
+--------------------------------------------------------------*/
+.counts {
+ padding-bottom: 30px;
+}
+
+.counts .count-box {
+ box-shadow: 0px 0 16px rgba(0, 0, 0, 0.1);
+ padding: 30px;
+ background: #fff;
+ margin-bottom: 30px;
+}
+
+.counts .count-box i {
+ display: block;
+ font-size: 64px;
+ margin-bottom: 15px;
+}
+
+.counts .count-box span {
+ font-size: 42px;
+ display: block;
+ font-weight: 700;
+ color: #1c5c93;
+}
+
+.counts .count-box p {
+ padding: 0;
+ margin: 0;
+ font-family: "Raleway", sans-serif;
+ font-size: 14px;
+}
+
+/*--------------------------------------------------------------
+# Services
+--------------------------------------------------------------*/
+.services {
+ padding-bottom: 30px;
+}
+
+.services .icon-box {
+ margin-bottom: 20px;
+ text-align: center;
+}
+
+.services .icon {
+ display: flex;
+ justify-content: center;
+}
+
+.services .icon i {
+ width: 80px;
+ height: 80px;
+ margin-bottom: 20px;
+ background: #fff;
+ border-radius: 50%;
+ transition: 0.5s;
+ color: #428bca;
+ font-size: 40px;
+ overflow: hidden;
+ padding-top: 20px;
+ box-shadow: 0px 0 25px rgba(0, 0, 0, 0.15);
+}
+
+.services .icon-box:hover .icon i {
+ box-shadow: 0px 0 30px rgba(66, 139, 202, 0.5);
+}
+
+.services .title {
+ font-weight: 600;
+ margin-bottom: 15px;
+ font-size: 18px;
+ position: relative;
+ padding-bottom: 15px;
+}
+
+.services .title a {
+ color: #444;
+ transition: 0.3s;
+}
+
+.services .title a:hover {
+ color: #428bca;
+}
+
+.services .title::after {
+ content: '';
+ position: absolute;
+ display: block;
+ width: 50px;
+ height: 2px;
+ background: #428bca;
+ bottom: 0;
+ left: calc(50% - 25px);
+}
+
+.services .description {
+ line-height: 24px;
+ font-size: 14px;
+}
+
+/*--------------------------------------------------------------
+# Our Portfolio
+--------------------------------------------------------------*/
+.portfolio .portfolio-item {
+ margin-bottom: 30px;
+}
+
+.portfolio #portfolio-flters {
+ padding: 0;
+ margin: 0 0 35px 0;
+ list-style: none;
+ text-align: center;
+}
+
+.portfolio #portfolio-flters li {
+ cursor: pointer;
+ margin: 0 15px 15px 0;
+ display: inline-block;
+ padding: 10px 20px;
+ font-size: 12px;
+ line-height: 20px;
+ color: #444;
+ border-radius: 4px;
+ text-transform: uppercase;
+ background: #fff;
+ margin-bottom: 5px;
+ transition: all 0.3s ease-in-out;
+}
+
+.portfolio #portfolio-flters li:hover, .portfolio #portfolio-flters li.filter-active {
+ background: #428bca;
+ color: #fff;
+}
+
+.portfolio #portfolio-flters li:last-child {
+ margin-right: 0;
+}
+
+.portfolio .portfolio-wrap {
+ box-shadow: 0px 2px 12px rgba(0, 0, 0, 0.08);
+ transition: 0.3s;
+ position: relative;
+ overflow: hidden;
+}
+
+.portfolio .portfolio-wrap img {
+ transition: 0.3s;
+}
+
+.portfolio .portfolio-wrap .portfolio-info {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ opacity: 0;
+ position: absolute;
+ bottom: 0;
+ top: 0;
+ left: 0;
+ right: 0;
+ transition: 0.3s;
+ text-align: center;
+ background: rgba(31, 53, 72, 0.6);
+ padding-bottom: 30px;
+}
+
+.portfolio .portfolio-wrap .portfolio-info h4 {
+ font-size: 20px;
+ color: #fff;
+ font-weight: 600;
+}
+
+.portfolio .portfolio-wrap .portfolio-info p {
+ color: #fff;
+ font-size: 14px;
+ text-transform: uppercase;
+}
+
+.portfolio .portfolio-wrap .portfolio-info a {
+ color: #428bca;
+ margin: 0 4px;
+ font-size: 18px;
+ line-height: 1;
+ background-color: #fff;
+ padding-top: 7px;
+ border-radius: 50px;
+ text-align: center;
+ width: 36px;
+ height: 35px;
+ display: inline-block;
+ transition: 0.3s;
+}
+
+.portfolio .portfolio-wrap .portfolio-info a:hover {
+ background: #428bca;
+ color: #fff;
+}
+
+.portfolio .portfolio-wrap:hover {
+ box-shadow: 0px 4px 14px rgba(0, 0, 0, 0.16);
+}
+
+.portfolio .portfolio-wrap:hover .portfolio-info {
+ opacity: 1;
+ padding-bottom: 0;
+}
+
+.portfolio .portfolio-wrap:hover img {
+ transform: scale(1.1);
+}
+
+/*--------------------------------------------------------------
+# Our Team
+--------------------------------------------------------------*/
+.team {
+ background: #fff;
+ padding: 60px 0 30px 0;
+}
+
+.team .member {
+ text-align: center;
+ margin-bottom: 80px;
+ position: relative;
+}
+
+.team .member .pic {
+ border-radius: 4px;
+ overflow: hidden;
+}
+
+.team .member img {
+ transition: all ease-in-out 0.4s;
+}
+
+.team .member:hover img {
+ transform: scale(1.1);
+}
+
+.team .member .member-info {
+ position: absolute;
+ bottom: -48px;
+ left: 20px;
+ right: 20px;
+ background: linear-gradient(360deg, #5c768d 0%, rgba(92, 118, 141, 0.9) 35%, rgba(140, 167, 191, 0.8) 100%);
+ padding: 15px 0;
+ border-radius: 4px;
+}
+
+.team .member h4 {
+ font-weight: 700;
+ margin-bottom: 10px;
+ font-size: 16px;
+ color: #fff;
+ position: relative;
+ padding-bottom: 10px;
+}
+
+.team .member h4::after {
+ content: '';
+ position: absolute;
+ display: block;
+ width: 50px;
+ height: 1px;
+ background: #fff;
+ bottom: 0;
+ left: calc(50% - 25px);
+}
+
+.team .member span {
+ font-style: italic;
+ display: block;
+ font-size: 13px;
+ color: #fff;
+}
+
+.team .member .social {
+ margin-top: 15px;
+}
+
+.team .member .social a {
+ transition: color 0.3s;
+ color: #fff;
+}
+
+.team .member .social a:hover {
+ color: #9eccf4;
+}
+
+.team .member .social i {
+ font-size: 16px;
+ margin: 0 2px;
+}
+
+@media (max-width: 992px) {
+ .team .member {
+ margin-bottom: 100px;
+ }
+}
+
+/*--------------------------------------------------------------
+# Frequently Asked Questions
+--------------------------------------------------------------*/
+.faq {
+ padding-bottom: 30px;
+}
+
+.faq .faq-item {
+ margin-bottom: 40px;
+}
+
+.faq .faq-item h4 {
+ font-size: 20px;
+ line-height: 28px;
+ font-weight: 600;
+ margin-bottom: 15px;
+ color: #1f3548;
+}
+
+/*--------------------------------------------------------------
+# Contact Us
+--------------------------------------------------------------*/
+.contact .info-box {
+ color: #444;
+ text-align: center;
+ box-shadow: 0 0 30px rgba(214, 215, 216, 0.6);
+ padding: 20px 0 30px 0;
+ margin-bottom: 30px;
+ width: 100%;
+}
+
+.contact .info-box i {
+ font-size: 32px;
+ color: #428bca;
+ border-radius: 50%;
+ padding: 8px;
+ border: 2px dotted #9eccf4;
+}
+
+.contact .info-box h3 {
+ font-size: 20px;
+ color: #666;
+ font-weight: 700;
+ margin: 10px 0;
+}
+
+.contact .info-box p {
+ padding: 0;
+ line-height: 24px;
+ font-size: 14px;
+ margin-bottom: 0;
+}
+
+.contact .php-email-form {
+ box-shadow: 0 0 30px rgba(214, 215, 216, 0.6);
+ padding: 30px;
+}
+
+.contact .php-email-form .validate {
+ display: none;
+ color: red;
+ margin: 0 0 15px 0;
+ font-weight: 400;
+ font-size: 13px;
+}
+
+.contact .php-email-form .error-message {
+ display: none;
+ color: #fff;
+ background: #ed3c0d;
+ text-align: center;
+ padding: 15px;
+ font-weight: 600;
+}
+
+.contact .php-email-form .sent-message {
+ display: none;
+ color: #fff;
+ background: #18d26e;
+ text-align: center;
+ padding: 15px;
+ font-weight: 600;
+}
+
+.contact .php-email-form .loading {
+ display: none;
+ background: #fff;
+ text-align: center;
+ padding: 15px;
+}
+
+.contact .php-email-form .loading:before {
+ content: "";
+ display: inline-block;
+ border-radius: 50%;
+ width: 24px;
+ height: 24px;
+ margin: 0 10px -6px 0;
+ border: 3px solid #18d26e;
+ border-top-color: #eee;
+ -webkit-animation: animate-loading 1s linear infinite;
+ animation: animate-loading 1s linear infinite;
+}
+
+.contact .php-email-form input, .contact .php-email-form textarea {
+ border-radius: 0;
+ box-shadow: none;
+ font-size: 14px;
+}
+
+.contact .php-email-form input::focus, .contact .php-email-form textarea::focus {
+ background-color: #428bca;
+}
+
+.contact .php-email-form input {
+ padding: 20px 15px;
+}
+
+.contact .php-email-form textarea {
+ padding: 12px 15px;
+}
+
+.contact .php-email-form button[type="submit"] {
+ background: #428bca;
+ border: 0;
+ padding: 10px 24px;
+ color: #fff;
+ transition: 0.4s;
+}
+
+.contact .php-email-form button[type="submit"]:hover {
+ background: #6aa3d5;
+}
+
+@-webkit-keyframes animate-loading {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+@keyframes animate-loading {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+#footer {
+ background: #587187;
+ padding: 0 0 30px 0;
+ color: #fff;
+ font-size: 14px;
+}
+
+#footer .footer-top {
+ background: #5c768d;
+ border-top: 1px solid #768fa6;
+ border-bottom: 1px solid #67839c;
+ padding: 60px 0 30px 0;
+}
+
+#footer .footer-top .footer-info {
+ margin-bottom: 30px;
+}
+
+#footer .footer-top .footer-info h3 {
+ font-size: 24px;
+ margin: 0 0 20px 0;
+ padding: 2px 0 2px 0;
+ line-height: 1;
+ font-weight: 700;
+}
+
+#footer .footer-top .footer-info p {
+ font-size: 14px;
+ line-height: 24px;
+ margin-bottom: 0;
+ font-family: "Raleway", sans-serif;
+ color: #fff;
+}
+
+#footer .footer-top .social-links a {
+ font-size: 18px;
+ display: inline-block;
+ background: #768fa6;
+ color: #fff;
+ line-height: 1;
+ padding: 8px 0;
+ margin-right: 4px;
+ border-radius: 50%;
+ text-align: center;
+ width: 36px;
+ height: 36px;
+ transition: 0.3s;
+}
+
+#footer .footer-top .social-links a:hover {
+ background: #428bca;
+ color: #fff;
+ text-decoration: none;
+}
+
+#footer .footer-top h4 {
+ font-size: 16px;
+ font-weight: 600;
+ color: #fff;
+ position: relative;
+ padding-bottom: 12px;
+}
+
+#footer .footer-top .footer-links {
+ margin-bottom: 30px;
+}
+
+#footer .footer-top .footer-links ul {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+
+#footer .footer-top .footer-links ul i {
+ padding-right: 2px;
+ color: #9eccf4;
+ font-size: 18px;
+ line-height: 1;
+}
+
+#footer .footer-top .footer-links ul li {
+ padding: 10px 0;
+ display: flex;
+ align-items: center;
+}
+
+#footer .footer-top .footer-links ul li:first-child {
+ padding-top: 0;
+}
+
+#footer .footer-top .footer-links ul a {
+ color: #fff;
+ transition: 0.3s;
+ display: inline-block;
+ line-height: 1;
+}
+
+#footer .footer-top .footer-links ul a:hover {
+ color: #9eccf4;
+}
+
+#footer .footer-top .footer-newsletter form {
+ margin-top: 30px;
+ background: #fff;
+ padding: 6px 10px;
+ position: relative;
+ border-radius: 4;
+}
+
+#footer .footer-top .footer-newsletter form input[type="email"] {
+ border: 0;
+ padding: 4px;
+ width: calc(100% - 110px);
+}
+
+#footer .footer-top .footer-newsletter form input[type="submit"] {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ border: 0;
+ background: none;
+ font-size: 16px;
+ padding: 0 20px;
+ background: #428bca;
+ color: #fff;
+ transition: 0.3s;
+ border-radius: 4;
+}
+
+#footer .footer-top .footer-newsletter form input[type="submit"]:hover {
+ background: #5295ce;
+}
+
+#footer .copyright {
+ text-align: center;
+ padding-top: 30px;
+}
+
+#footer .credits {
+ padding-top: 10px;
+ text-align: center;
+ font-size: 13px;
+ color: #fff;
+}
+
+#footer .credits a {
+ color: #9eccf4;
+}
diff --git a/weibo_flask/static/assets/img/about.jpg b/weibo_flask/static/assets/img/about.jpg
new file mode 100644
index 0000000..51e62ff
Binary files /dev/null and b/weibo_flask/static/assets/img/about.jpg differ
diff --git a/weibo_flask/static/assets/img/apple-touch-icon.png b/weibo_flask/static/assets/img/apple-touch-icon.png
new file mode 100644
index 0000000..447cec2
Binary files /dev/null and b/weibo_flask/static/assets/img/apple-touch-icon.png differ
diff --git a/weibo_flask/static/assets/img/favicon.png b/weibo_flask/static/assets/img/favicon.png
new file mode 100644
index 0000000..d752fd5
Binary files /dev/null and b/weibo_flask/static/assets/img/favicon.png differ
diff --git a/weibo_flask/static/assets/img/portfolio/portfolio-1.jpg b/weibo_flask/static/assets/img/portfolio/portfolio-1.jpg
new file mode 100644
index 0000000..4609def
Binary files /dev/null and b/weibo_flask/static/assets/img/portfolio/portfolio-1.jpg differ
diff --git a/weibo_flask/static/assets/img/portfolio/portfolio-2.jpg b/weibo_flask/static/assets/img/portfolio/portfolio-2.jpg
new file mode 100644
index 0000000..6c61a2c
Binary files /dev/null and b/weibo_flask/static/assets/img/portfolio/portfolio-2.jpg differ
diff --git a/weibo_flask/static/assets/img/portfolio/portfolio-3.jpg b/weibo_flask/static/assets/img/portfolio/portfolio-3.jpg
new file mode 100644
index 0000000..84e9dde
Binary files /dev/null and b/weibo_flask/static/assets/img/portfolio/portfolio-3.jpg differ
diff --git a/weibo_flask/static/assets/img/portfolio/portfolio-4.jpg b/weibo_flask/static/assets/img/portfolio/portfolio-4.jpg
new file mode 100644
index 0000000..04167e6
Binary files /dev/null and b/weibo_flask/static/assets/img/portfolio/portfolio-4.jpg differ
diff --git a/weibo_flask/static/assets/img/portfolio/portfolio-5.jpg b/weibo_flask/static/assets/img/portfolio/portfolio-5.jpg
new file mode 100644
index 0000000..e6cb5e8
Binary files /dev/null and b/weibo_flask/static/assets/img/portfolio/portfolio-5.jpg differ
diff --git a/weibo_flask/static/assets/img/portfolio/portfolio-6.jpg b/weibo_flask/static/assets/img/portfolio/portfolio-6.jpg
new file mode 100644
index 0000000..8d3e5d0
Binary files /dev/null and b/weibo_flask/static/assets/img/portfolio/portfolio-6.jpg differ
diff --git a/weibo_flask/static/assets/img/portfolio/portfolio-7.jpg b/weibo_flask/static/assets/img/portfolio/portfolio-7.jpg
new file mode 100644
index 0000000..652c3eb
Binary files /dev/null and b/weibo_flask/static/assets/img/portfolio/portfolio-7.jpg differ
diff --git a/weibo_flask/static/assets/img/portfolio/portfolio-8.jpg b/weibo_flask/static/assets/img/portfolio/portfolio-8.jpg
new file mode 100644
index 0000000..ca8dfc7
Binary files /dev/null and b/weibo_flask/static/assets/img/portfolio/portfolio-8.jpg differ
diff --git a/weibo_flask/static/assets/img/portfolio/portfolio-9.jpg b/weibo_flask/static/assets/img/portfolio/portfolio-9.jpg
new file mode 100644
index 0000000..05c4e53
Binary files /dev/null and b/weibo_flask/static/assets/img/portfolio/portfolio-9.jpg differ
diff --git a/weibo_flask/static/assets/img/slide/slide-1.jpg b/weibo_flask/static/assets/img/slide/slide-1.jpg
new file mode 100644
index 0000000..fc11899
Binary files /dev/null and b/weibo_flask/static/assets/img/slide/slide-1.jpg differ
diff --git a/weibo_flask/static/assets/img/slide/slide-2.jpg b/weibo_flask/static/assets/img/slide/slide-2.jpg
new file mode 100644
index 0000000..6497a3b
Binary files /dev/null and b/weibo_flask/static/assets/img/slide/slide-2.jpg differ
diff --git a/weibo_flask/static/assets/img/slide/slide-3.jpg b/weibo_flask/static/assets/img/slide/slide-3.jpg
new file mode 100644
index 0000000..282bfd5
Binary files /dev/null and b/weibo_flask/static/assets/img/slide/slide-3.jpg differ
diff --git a/weibo_flask/static/assets/img/team/team-1.jpg b/weibo_flask/static/assets/img/team/team-1.jpg
new file mode 100644
index 0000000..05253af
Binary files /dev/null and b/weibo_flask/static/assets/img/team/team-1.jpg differ
diff --git a/weibo_flask/static/assets/img/team/team-2.jpg b/weibo_flask/static/assets/img/team/team-2.jpg
new file mode 100644
index 0000000..05253af
Binary files /dev/null and b/weibo_flask/static/assets/img/team/team-2.jpg differ
diff --git a/weibo_flask/static/assets/img/team/team-3.jpg b/weibo_flask/static/assets/img/team/team-3.jpg
new file mode 100644
index 0000000..05253af
Binary files /dev/null and b/weibo_flask/static/assets/img/team/team-3.jpg differ
diff --git a/weibo_flask/static/assets/img/team/team-4.jpg b/weibo_flask/static/assets/img/team/team-4.jpg
new file mode 100644
index 0000000..05253af
Binary files /dev/null and b/weibo_flask/static/assets/img/team/team-4.jpg differ
diff --git a/weibo_flask/static/assets/img/tree.jpg b/weibo_flask/static/assets/img/tree.jpg
new file mode 100644
index 0000000..f0768f3
Binary files /dev/null and b/weibo_flask/static/assets/img/tree.jpg differ
diff --git a/weibo_flask/static/assets/img/word.jpg b/weibo_flask/static/assets/img/word.jpg
new file mode 100644
index 0000000..169f35b
Binary files /dev/null and b/weibo_flask/static/assets/img/word.jpg differ
diff --git a/weibo_flask/static/assets/js/bmap.min.js b/weibo_flask/static/assets/js/bmap.min.js
new file mode 100644
index 0000000..6cccade
--- /dev/null
+++ b/weibo_flask/static/assets/js/bmap.min.js
@@ -0,0 +1,22 @@
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("echarts")):"function"==typeof define&&define.amd?define(["exports","echarts"],t):t((e=e||self).bmap={},e.echarts)}(this,function(e,d){"use strict";function l(e,t){this._bmap=e,this.dimensions=["lng","lat"],this._mapOffset=[0,0],this._api=t,this._projection=new BMap.MercatorProjection}function t(a,r){return r=r||[0,0],d.util.map([0,1],function(e){var t=r[e],o=a[e]/2,n=[],i=[];return n[e]=t-o,i[e]=t+o,n[1-e]=i[1-e]=r[1-e],Math.abs(this.dataToPoint(n)[e]-this.dataToPoint(i)[e])},this)}var c;function f(e){for(var t in e)if(e.hasOwnProperty(t))return;return 1}l.prototype.dimensions=["lng","lat"],l.prototype.setZoom=function(e){this._zoom=e},l.prototype.setCenter=function(e){this._center=this._projection.lngLatToPoint(new BMap.Point(e[0],e[1]))},l.prototype.setMapOffset=function(e){this._mapOffset=e},l.prototype.getBMap=function(){return this._bmap},l.prototype.dataToPoint=function(e){var t=new BMap.Point(e[0],e[1]),e=this._bmap.pointToOverlayPixel(t),t=this._mapOffset;return[e.x-t[0],e.y-t[1]]},l.prototype.pointToData=function(e){var t=this._mapOffset;return[(e=this._bmap.overlayPixelToPoint({x:e[0]+t[0],y:e[1]+t[1]})).lng,e.lat]},l.prototype.getViewRect=function(){var e=this._api;return new d.graphic.BoundingRect(0,0,e.getWidth(),e.getHeight())},l.prototype.getRoamTransform=function(){return d.matrix.create()},l.prototype.prepareCustoms=function(){var e=this.getViewRect();return{coordSys:{type:"bmap",x:e.x,y:e.y,width:e.width,height:e.height},api:{coord:d.util.bind(this.dataToPoint,this),size:d.util.bind(t,this)}}},l.dimensions=l.prototype.dimensions,l.create=function(e,p){var s,m=p.getDom();e.eachComponent("bmap",function(e){var t,o=p.getZr().painter,n=o.getViewportRoot();if("undefined"==typeof BMap)throw new Error("BMap api is not loaded");function i(e){this._root=e}if(c=c||((i.prototype=new BMap.Overlay).initialize=function(e){return e.getPanes().labelPane.appendChild(this._root),this._root},i.prototype.draw=function(){},i),s)throw new Error("Only one bmap component can exist");e.__bmap||((a=m.querySelector(".ec-extension-bmap"))&&(n.style.left="0px",n.style.top="0px",m.removeChild(a)),(a=document.createElement("div")).className="ec-extension-bmap",a.style.cssText="position:absolute;width:100%;height:100%",m.appendChild(a),(r=e.get("mapOptions"))&&delete(r=d.util.clone(r)).mapType,t=e.__bmap=new BMap.Map(a,r),a=new c(n),t.addOverlay(a),o.getViewportRootOffset=function(){return{offsetLeft:0,offsetTop:0}}),t=e.__bmap;var a,r=e.get("center"),n=e.get("zoom");r&&n&&(a=t.getCenter(),o=t.getZoom(),e.centerOrZoomChanged([a.lng,a.lat],o)&&(o=new BMap.Point(r[0],r[1]),t.centerAndZoom(o,n))),(s=new l(t,p)).setMapOffset(e.__mapOffset||[0,0]),s.setZoom(n),s.setCenter(r),e.coordinateSystem=s}),e.eachSeries(function(e){"bmap"===e.get("coordinateSystem")&&(e.coordinateSystem=s)})},d.extendComponentModel({type:"bmap",getBMap:function(){return this.__bmap},setCenterAndZoom:function(e,t){this.option.center=e,this.option.zoom=t},centerOrZoomChanged:function(e,t){var o,n=this.option;return o=e,e=n.center,!(o&&e&&o[0]===e[0]&&o[1]===e[1]&&t===n.zoom)},defaultOption:{center:[104.114129,37.550339],zoom:5,mapStyle:{},mapStyleV2:{},mapOptions:{},roam:!1}}),d.extendComponentView({type:"bmap",render:function(r,e,p){var s=!0,t=r.getBMap(),m=p.getZr().painter.getViewportRoot(),l=r.coordinateSystem,o=function(e,t){var o,n,i,a;s||(a=m.parentNode.parentNode.parentNode,o=[-parseInt(a.style.left,10)||0,-parseInt(a.style.top,10)||0],n=m.style,i=o[0]+"px",a=o[1]+"px",n.left!==i&&(n.left=i),n.top!==a&&(n.top=a),l.setMapOffset(o),r.__mapOffset=o,p.dispatchAction({type:"bmapRoam",animation:{duration:0}}))};function n(){s||p.dispatchAction({type:"bmapRoam",animation:{duration:0}})}t.removeEventListener("moving",this._oldMoveHandler),t.removeEventListener("moveend",this._oldMoveHandler),t.removeEventListener("zoomend",this._oldZoomEndHandler),t.addEventListener("moving",o),t.addEventListener("moveend",o),t.addEventListener("zoomend",n),this._oldMoveHandler=o,this._oldZoomEndHandler=n;var i=r.get("roam");i&&"scale"!==i?t.enableDragging():t.disableDragging(),i&&"move"!==i?(t.enableScrollWheelZoom(),t.enableDoubleClickZoom(),t.enablePinchToZoom()):(t.disableScrollWheelZoom(),t.disableDoubleClickZoom(),t.disablePinchToZoom());var a=r.__mapStyle,o=r.get("mapStyle")||{},i=JSON.stringify(o);JSON.stringify(a)!==i&&(f(o)||t.setMapStyle(d.util.clone(o)),r.__mapStyle=JSON.parse(i));a=r.__mapStyle2,o=r.get("mapStyleV2")||{},i=JSON.stringify(o);JSON.stringify(a)!==i&&(f(o)||t.setMapStyleV2(d.util.clone(o)),r.__mapStyle2=JSON.parse(i)),s=!1}}),d.registerCoordinateSystem("bmap",l),d.registerAction({type:"bmapRoam",event:"bmapRoam",update:"updateLayout"},function(e,t){t.eachComponent("bmap",function(e){var t=e.getBMap(),o=t.getCenter();e.setCenterAndZoom([o.lng,o.lat],t.getZoom())})});e.version="1.0.0",Object.defineProperty(e,"__esModule",{value:!0})});
\ No newline at end of file
diff --git a/weibo_flask/static/assets/js/china.js b/weibo_flask/static/assets/js/china.js
new file mode 100644
index 0000000..12dabff
--- /dev/null
+++ b/weibo_flask/static/assets/js/china.js
@@ -0,0 +1,46 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+(function (root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['exports', 'echarts'], factory);
+ } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+ // CommonJS
+ factory(exports, require('echarts'));
+ } else {
+ // Browser globals
+ factory({}, root.echarts);
+ }
+}(this, function (exports, echarts) {
+ var log = function (msg) {
+ if (typeof console !== 'undefined') {
+ console && console.error && console.error(msg);
+ }
+ }
+ if (!echarts) {
+ log('ECharts is not Loaded');
+ return;
+ }
+ if (!echarts.registerMap) {
+ log('ECharts Map is not loaded')
+ return;
+ }
+ echarts.registerMap('china', {"type":"FeatureCollection","features":[{"type":"Feature","id":"710000","properties":{"id":"710000","cp":[121.509062,24.044332],"name":"台湾","childNum":6},"geometry":{"type":"MultiPolygon","coordinates":[["@@°Ü¯Û"],["@@ƛĴÕƊÉɼģºðʀ\\ƎsÆNŌÔĚänÜƤɊĂǀĆĴĤNJŨxĚĮǂƺòƌâÔ®ĮXŦţƸZûÐƕƑGđ¨ĭMó·ęcëƝɉlÝƯֹÅŃ^Ó·śŃNjƏďíåɛGɉ¿@ăƑ¥ĘWǬÏĶŁâ"],["@@\\p|WoYG¿¥Ij@¢"],["@@
¡@V^RqBbAnTXeRz¤L«³I"],["@@ÆEEkWqë @"],["@@fced"],["@@¯ɜÄèaì¯ØǓIġĽ"],["@@çûĖëĄhòř "]],"encodeOffsets":[[[122886,24033]],[[123335,22980]],[[122375,24193]],[[122518,24117]],[[124427,22618]],[[124862,26043]],[[126259,26318]],[[127671,26683]]]}},{"type":"Feature","id":"130000","properties":{"id":"130000","cp":[114.502461,38.045474],"name":"河北","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@o~Z]ªrºc_ħ²G¼s`jΟnüsÂłNX_M`ǽÓnUK
Ĝēs¤©yrý§uģcJe"],["@@U`Ts¿mÂ"],["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiñÖ`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒQgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧˏf°ÐTªqs{S¯r æÝlNd®²Ğ džiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|ǰ
N«úmH¯âDùyŜŲIÄuШD¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu
{Z}Ö@U´
ʚLg®¯Oı°Ãw ^VbÉsmA
ê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅna@³@ďyýIĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃͶSj®AyÂhðk`«P˵EFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅaVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MðoťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@c̬¢aĦtRıÒ¾ùƀ^juųœKUFyƝ
īÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥ÍpDž¡KąÅkĝęěhq}HyÃ]¹ǧ£
Í÷¿qáµ§g¤o^á¾ZE¤i`ij{nOl»WÝĔįhgF[¿¡ßkOüš_ūiDZàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],"encodeOffsets":[[[119712,40641]],[[121616,39981]],[[116462,37237]]]}},{"type":"Feature","id":"140000","properties":{"id":"140000","cp":[111.849248,36.857014],"name":"山西","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ÞĩÒSra}ÁyWix±Üe´lèßÓǏokćiµVZģ¡coTS˹ĪmnÕńehZg{gtwªpXaĚThȑp{¶Eh®RćƑP¿£Pmc¸mQÝWďȥoÅîɡųAďä³aÏJ½¥PGąSM
EÅruµéYÓŌ_dĒCoȵ]¯_²ÕjāK~©ÅØ^ÔkïçămÏk]±cݯÑÃmQÍ~_apm
~ç¡qu{JÅŧ·Ls}EyÁÆcI{¤IiCfUcƌÃp§]ě«vD@¡SÀµMÅwuYY¡DbÑc¡h×]nkoQdaMç~eDÛtT©±@¥ù@É¡ZcW|WqOJmĩl«ħşvOÓ«IqăV¥D[mI~Ó¢cehiÍ]Ɠ~ĥqX·eƷn±}v[ěďŕ]_œ`¹§ÕōIo©bs^}Ét±ū«³p£ÿ·Wµ|¡¥ăFÏs×¥ŅxÊdÒ{ºvĴÎêÌɊ²¶ü¨|ÞƸµȲLLúÉƎ¤ϊęĔV`_bªS^|dzY|dz¥pZbÆ£¶ÒK}tĦÔņƠPYznÍvX¶Ěn ĠÔzý¦ª÷ÑĸÙUȌ¸dòÜJð´ìúNM¬XZ´¤ŊǸ_tldI{¦ƀðĠȤ¥NehXnYGR° ƬDj¬¸|CĞKqºfƐiĺ©ª~ĆOQª ¤@ìǦɌ²æBÊTŸʂōĖĴŞȀÆÿȄlŤĒötνî¼ĨXh|ªM¤Ðz"],"encodeOffsets":[[116874,41716]]}},{"type":"Feature","id":"150000","properties":{"id":"150000","cp":[111.670801,41.818311],"name":"内蒙古","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@¯PqFB
|S³C|kñHdiÄ¥sʼnÅ
PóÑÑE^ÅPpy_YtShQ·aHwsOnʼnÃs©iqjUSiº]ïW«gW¡ARë¥_sgÁnUI«m
]jvV¼euhwqAaW_µj
»çjioQR¹ēÃßt@r³[ÛlćË^ÍÉáGOUÛOB±XkŹ£k|e]olkVͼÕqtaÏõjgÁ£§U^RLËnX°ÇBz^~wfvypV ¯ƫĉ˭ȫƗŷɿÿĿƑ˃ĝÿÃǃßËőó©ǐȍŒĖM×ÍEyxþp]ÉvïèvƀnÂĴÖ@V~Ĉv¦wĖtējyÄDXÄxGQuv_i¦aBçw˛wD©{tāmQ{EJ§KPśƘƿ¥@sCTÉ}ɃwƇy±gÑ}T[÷kÐ禫
SÒ¥¸ëBX½HáŵÀğtSÝÂa[ƣ°¯¦Pï¡]£ġÒk®G²èQ°óMq}EóƐÇ\\@áügQÍu¥FTÕ¿Jû]|mvāÎYua^WoÀa·ząÒot×¶CLƗi¯¤mƎHNJ¤îìɾŊìTdåwsRÖgĒųúÍġäÕ}Q¶¿A[¡{d×uQAMxVvMOmăl«ct[wº_ÇÊjb£ĦS_éQZ_lwgOiýe`YYLq§IÁdz£ÙË[ÕªuƏ³ÍTs·bÁĽäė[b[ŗfãcn¥îC¿÷µ[ŏÀQōĉm¿Á^£mJVmL[{Ï_£F¥Ö{ŹA}
×Wu©ÅaųijƳhB{·TQqÙIķËZđ©Yc|M¡
LeVUóK_QWk_ĥ¿ãZ»X\\ĴuUèlG®ěłTĠğDŃOrÍdÆÍz]±
ŭ©Å]ÅÐ}UË¥©TċïxgckfWgi\\ÏĒ¥HkµEë{»ÏetcG±ahUiñiWsɁ·cCÕk]wȑ|ća}w
VaĚá G°ùnM¬¯{ÈÐÆA¥ÄêJxÙ¢hP¢ÛºµwWOóFÁz^ÀŗÎú´§¢T¤ǻƺSėǵhÝÅQgvBHouʝl_o¿Ga{ïq{¥|ſĿHĂ÷aĝÇqZñiñC³ª
»E`¨åXēÕqÉû[l}ç@čƘóO¿¡FUsAʽīccocÇS}£IS~ălkĩXçmĈ
ŀÐoÐdxÒuL^T{r@¢ÍĝKén£kQyÅõËXŷƏL§~}kq»IHėDžjĝ»ÑÞoå°qTt|r©ÏS¯·eŨĕx«È[eM¿yupN~¹ÏyN£{©għWí»Í¾səšDž_ÃĀɗ±ąijĉʍŌŷSÉA±åǥɋ@ë£R©ąP©}ĹªƏj¹erLDĝ·{i«ƫC£µsKC
GS|úþXgp{ÁX¿ć{ƱȏñZáĔyoÁhA}ŅĆfdʼn_¹Y°ėǩÑ¡H¯¶oMQqð¡Ë|Ñ`ƭŁX½·óÛxğįÅcQs«tȋDžFù^it«Č¯[hAi©á¥ÇĚ×l|¹y¯YȵƓñǙµïċĻ|Düȭ¶¡oŽäÕG\\ÄT¿Òõr¯LguÏYęRƩɷŌO\\İТæ^Ŋ IJȶȆbÜGĝ¬¿ĚVĎgª^íu½jÿĕęjık@Ľ]ėl¥ËĭûÁėéV©±ćn©ȇÍq¯½YÃÔʼnÉNÑÅÝy¹NqáʅDǡËñƁYÅy̱os§ȋµʽǘǏƬɱàưN¢ƔÊuľýľώȪƺɂļxZĈ}ÌʼnŪĺœĭFЛĽ̅ȣͽÒŵìƩÇϋÿȮǡŏçƑůĕ~ǼȳÐUfdIxÿ\\G zâɏÙOº·pqy£@qþ@Ǟ˽IBäƣzsÂZÁàĻdñ°ŕzéØűzșCìDȐĴĺf®Àľưø@ɜÖÞKĊŇƄ§͑těï͡VAġÑÑ»d³öǍÝXĉĕÖ{þĉu¸ËʅğU̎éhɹƆ̗̮ȘNJ֥ड़ࡰţાíϲäʮW¬®ҌeרūȠkɬɻ̼ãüfƠSצɩςåȈHϚÎKdzͲOðÏȆƘ¼CϚǚ࢚˼ФÔ¤ƌĞ̪Qʤ´¼mȠJˀƲÀɠmǐnǔĎȆÞǠN~ʢĜ¶ƌĆĘźʆȬ˪ĚǏĞGȖƴƀj`ĢçĶāàŃºēĢĖćYÀŎüôQÐÂŎŞdžŞêƖoˆDĤÕºÑǘÛˤ³̀gńƘĔÀ^ªƂ`ªt¾äƚêĦ¼ÐĔǎ¨Ȕ»͠^ˮÊȦƤøxRrŜH¤¸ÂxDÄ|ø˂˜ƮЬɚwɲFjĔ²Äw°dždÀÉ_ĸdîàŎjÊêTЪŌŜWÈ|tqĢUB~´°ÎFCU¼pĀēƄN¦¾O¶łKĊOjĚj´ĜYp{¦SĚÍ\\TתV÷Ší¨ÅDK°ßtŇĔK¨ǵÂcḷ̌ĚǣȄĽFlġUĵŇȣFʉɁMğįʏƶɷØŭOǽ«ƽū¹Ʊő̝Ȩ§ȞʘĖiɜɶʦ}¨֪ࠜ̀ƇǬ¹ǨE˦ĥªÔêFxúQEr´Wrh¤Ɛ \\talĈDJÜ|[Pll̚¸ƎGú´P¬W¦^¦H]prRn|or¾wLVnÇIujkmon£cX^Bh`¥V¦U¤¸}xRj[^xN[~ªxQ[`ªHÆÂExx^wN¶Ê|¨ìMrdYpoRzNyÀDs~bcfÌ`L¾n|¾T°c¨È¢ar¤`[|òDŞĔöxElÖdHÀI`Ď\\Àì~ÆR¼tf¦^¢ķ¶eÐÚMptgjɡČÅyġLûŇV®ÄÈƀϰP|ªVVªj¬ĚÒêp¬E|ŬÂc|ÀtƐK f{ĘFĒƌXƲąo½Ę\\¥o}Ûu£çkX{uĩ«āíÓUŅßŢqŤ¥lyň[oi{¦LńðFȪȖĒL¿Ìf£K£ʺoqNwğc`uetOj×°KJ±qÆġmĚŗos¬
qehqsuH{¸kH¡
ÊRǪÇƌbȆ¢´äÜ¢NìÉʖ¦â©Ġu¦öČ^â£ĂhĖMÈÄw\\fŦ°W ¢¾luŸDw\\̀ʉÌÛM
Ā[bÓEn}¶Vc
ês"]],"encodeOffsets":[[[129102,52189]]]}},{"type":"Feature","id":"210000","properties":{"id":"210000","cp":[123.429096,41.796767],"name":"辽宁","childNum":16},"geometry":{"type":"MultiPolygon","coordinates":[["@@L@@sa"],["@@MnNm"],["@@dc"],["@@eÀC@b"],["@@f
XwkbrÄ`qg"],["@@^jtWQ"],["@@~ Y]c"],["@@G`ĔN^_¿ZÃM"],["@@iX¶BY"],["@@YZ"],["@@L_{Epf"],["@@^WqCT\\"],["@@\\[§t|¤_"],["@@m`n_"],["@@Ïxnj{q_×^Giip"],["@@@é^BntaÊU]x ¯ÄPIJ°hʙK³VÕ@Y~|EvĹsǦL^pòŸÒG Ël]xxÄ_fT¤Ď¤cPC¨¸TVjbgH²sdÎdHt`B²¬GJję¶[ÐhjeXdlwhðSȦªVÊÏÆZÆŶ®²^ÎyÅÎcPqńĚDMħĜŁHkçvV[ij¼WYÀäĦ`XlR`ôLUVfK¢{NZdĒªYĸÌÚJRr¸SA|ƴgŴĴÆbvªØX~źB|¦ÕE¤Ð`\\|KUnnI]¤ÀÂĊnŎR®Ő¿¶\\ÀøíDm¦ÎbŨabaĘ\\ľã¸atÎSƐ´©v\\ÖÚÌǴ¤Â¨JKrZ_ZfjþhPkx`YRIjJcVf~sCN¤ EhæmsHy¨SðÑÌ\\\\ĐRZk°IS§fqŒßýáĞÙÉÖ[^¯ǤŲê´\\¦¬ĆPM¯£»uïpùzExanµyoluqe¦W^£ÊL}ñrkqWňûPUP¡ôJoo·U}£[·¨@XĸDXmÛݺGUCÁª½{íĂ^cjk¶Ã[q¤LÉö³cux«zZf²BWÇ®Yß½ve±ÃCý£W{Ú^q^sÑ·¨ÍOt¹·C¥GDrí@wÕKţëV·i}xËÍ÷i©ĝɝǡ]{c±OW³Ya±_ç©HĕoƫŇqr³Lys[ñ³¯OSďOMisZ±ÅFC¥Pq{Ã[Pg}\\¿ghćO
k^ģÁFıĉĥMoEqqZûěʼn³F¦oĵhÕP{¯~TÍlªNßYÐ{Ps{ÃVUeĎwk±ʼnVÓ½ŽJãÇÇ»Jm°dhcÀffdF~ĀeĖd`sx² ®EżĀdQÂd^~ăÔH¦\\LKpĄVez¤NP ǹÓRÆąJSha[¦´ÂghwmBШźhI|VV|p] ¼èNä¶ÜBÖ¼L`¼bØæKVpoúNZÞÒKxpw|ÊEMnzEQIZZNBčÚFÜçmĩWĪñtÞĵÇñZ«uD±|Əlij¥ãn·±PmÍada CLǑkùó¡³Ï«QaċÏOÃ¥ÕđQȥċƭy³ÃA"]],"encodeOffsets":[[[123686,41445]],[[126019,40435]],[[124393,40128]],[[126117,39963]],[[125322,40140]],[[126686,40700]],[[126041,40374]],[[125584,40168]],[[125453,40165]],[[125362,40214]],[[125280,40291]],[[125774,39997]],[[125976,40496]],[[125822,39993]],[[125509,40217]],[[122731,40949]]]}},{"type":"Feature","id":"220000","properties":{"id":"220000","cp":[125.3245,43.886841],"name":"吉林","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@pä³PClFbbÍzwBGĭZÅi»lYċ²SgkÇ£^Sqd¯R
©é£¯S\\cZ¹iűƏCuƍÓXoR}M^o£
R}oªUF
uuXHlEÅÏ©¤ÛmTþ¤D²ÄufàÀXXȱAeyYw¬dvõ´KÊ£\\rµÄlidā]|DÂVH¹Þ®ÜWnCķ W§@\\¸~¤Vp¸póIO¢VOŇürXql~òÉK]¤¥Xrfkvzpm¶bwyFoúv𼤠N°ąO¥«³[éǡű_°Õ\\ÚÊĝþâőàerR¨JYlďQ[ ÏYëЧTGztnß¡gFkMāGÁ¤ia Éȹ`\\xs¬dĆkNnuNUuP@vRY¾\\¢
GªóĄ~RãÖÎĢùđŴÕhQxtcæëSɽʼníëlj£ƍG£nj°KƘµDsØÑpyƸ®¿bXp]vbÍZuĂ{n^IüÀSÖ¦EvRÎûh@â[ƏÈô~FNr¯ôçR±HÑlĢ^¤¢OðævxsŒ]ÞÁTĠs¶¿âÆGW¾ìA¦·TѬè¥ÏÐJ¨¼ÒÖ¼ƦɄxÊ~StD@Ă¼Ŵ¡jlºWvÐzƦZвCH AxiukdGgetqmcÛ£Ozy¥cE}|
¾cZ
k¿uŐã[oxGikfeäT@
SUwpiÚFM©£è^Ú`@v¶eňf heP¶täOlÃUgÞzŸU`l}ÔÆUvØ_Ō¬Öi^ĉi§²ÃB~¡ĈÚEgc|DC_Ȧm²rBx¼MÔ¦ŮdĨÃâYxƘDVÇĺĿg¿cwÅ\\¹¥Yĭl¤OvLjM_a W`zļMž·\\swqÝSAqŚij¯°kRē°wx^ĐkǂÒ\\]nrĂ}²ĊŲÒøãh·M{yMzysěnĒġV·°G³¼XÀ¤¹i´o¤ŃÈ`ÌDzÄUĞd\\iÖmÈBĤÜɲDEh LG¾ƀľ{WaYÍÈĢĘÔRîĐj}ÇccjoUb½{h§Ǿ{KƖµÎ÷GĀÖŠåưÎslyiē«`å§H¥Ae^§GK}iã\\c]v©ģZmÃ|[M}ģTɟĵÂÂ`ÀçmFK¥ÚíÁbX³ÌQÒHof{]ept·GŋĜYünĎųVY^ydõkÅZW«WUa~U·SbwGçǑiW^qFuNĝ·EwUtW·Ýďæ©PuqEzwAVXRãQ`©GMehccďÏd©ÑW_ÏYƅ»
é\\ɹ~ǙG³mØ©BšuT§Ĥ½¢Ã_ýL¡ýqT^rme\\PpZZbyuybQefµ]UhĿDCmûvaÙNSkCwncćfv~
YÇG"],"encodeOffsets":[[130196,42528]]}},{"type":"Feature","id":"230000","properties":{"id":"230000","cp":[128.642464,46.756967],"name":"黑龙江","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@UµNÿ¥īèçHÍøƕ¶Lǽ|g¨|a¾pVidd~ÈiíďÓQġėÇZÎXb½|ſÃH½KFgɱCģÛÇAnjÕc[VĝDZÃËÇ_ £ń³pj£º¿»WH´¯U¸đĢmtĜyzzNN|g¸÷äűѱĉā~mq^[ǁÑďlw]¯xQĔ¯l°řĴrBÞTxr[tޏĻN_yX`biNKu
P£kZĮ¦[ºxÆÀdhĹŀUÈƗCwáZħÄŭcÓ¥»NAw±qȥnD`{ChdÙFć}¢A±Äj¨]ĊÕjŋ«×`VuÓÅ~_kŷVÝyhVkÄãPsOµfgeŇ
µf@u_Ù ÙcªNªÙEojVxT@ãSefjlwH\\pŏäÀvlY½d{F~¦dyz¤PÜndsrhfHcvlwjF£G±DÏƥYyÏu¹XikĿ¦ÏqƗǀOŜ¨LI|FRĂn sª|C˜zxAè¥bfudTrFWÁ¹Am|ĔĕsķÆF´N}ć
UÕ@Áijſmuçuð^ÊýowFzØÎĕNőǏȎôªÌŒDŽàĀÄ˄ĞŀƒʀĀƘŸˮȬƬĊ°Uzouxe]}
AyÈW¯ÌmKQ]Īºif¸ÄX|sZt|½ÚUÎ lk^p{f¤lºlÆW A²PVÜPHÊâ]ÎĈÌÜk´\\@qàsĔÄQºpRij¼èi`¶bXrBgxfv»uUi^v~J¬mVp´£´VWrnP½ì¢BX¬hðX¹^TjVriªjtŊÄmtPGx¸bgRsT`ZozÆO]ÒFôÒOÆŊvÅpcGêsx´DR{AEOr°x|íb³Wm~DVjºéNNËܲɶGxŷCSt}]ûōSmtuÇÃĕNāg»íT«u}ç½BĵÞʣ¥ëÊ¡MÛ³ãȅ¡ƋaǩÈÉQG¢·lG|tvgrrf«ptęŘnÅĢrI²¯LiØsPf_vĠdxM prʹL¤¤eËÀđKïÙVY§]Ióáĥ]ķK¥j|pŇ\\kzţ¦šnņäÔVĂîά|vW®l¤èØrxm¶ă~lÄƯĄ̈́öȄEÔ¤ØQĄĄ»ƢjȦOǺ¨ìSŖÆƬyQv`cwZSÌ®ü±DŽ]ŀç¬B¬©ńzƺŷɄeeOĨSfm ĊƀP̎ēz©ĊÄÕÊmgÇsJ¥ƔŊśæÎÑqv¿íUOµªÂnĦÁ_½ä@êí
£P}Ġ[@gġ}gɊ×ûÏWXá¢užƻÌsNͽƎÁ§čŐAēeL³àydl¦ĘVçŁpśdžĽĺſÊQíÜçÛġÔsĕ¬Ǹ¯YßċġHµ ¡eå`ļrĉŘóƢFìĎWøxÊkƈdƬv|I|·©NqńRŀ¤éeŊŀàŀU²ŕƀBQ£Ď}L¹Îk@©ĈuǰųǨÚ§ƈnTËÇéƟÊcfčŤ^XmHĊĕË«W·ċëx³ǔķÐċJāwİ_ĸȀ^ôWr°oú¬Ħ
ŨK~ȰCĐ´Ƕ£fNÎèâw¢XnŮeÂÆĶ¾¾xäLĴĘlļO¤ÒĨA¢Êɚ¨®ØCÔ ŬGƠƦYĜĘÜƬDJg_ͥœ@čŅĻA¶¯@wÎqC½Ĉ»NăëKďÍQÙƫ[«ÃígßÔÇOÝáWñuZ¯ĥŕā¡ÑķJu¤E 寰WKɱ_d_}}vyõu¬ï¹ÓU±½@gÏ¿rýDg
Cdµ°MFYxw¿CG£Rƛ½Õ{]L§{qqą¿BÇƻğëܭNJË|c²}Fµ}ÙRsÓpg±QNqǫŋRwŕnéÑÉK«SeYR
ŋ@{¤SJ}D Ûǖ֍]gr¡µŷjqWÛham³~S«Þ]"]],"encodeOffsets":[[[134456,44547]]]}},{"type":"Feature","id":"320000","properties":{"id":"320000","cp":[119.767413,33.041544],"name":"江苏","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@cþÅPi`ZRu¥É\\]~°Y`µÓ^phÁbnÀşúòaĬºTÖŒbe¦¦{¸ZâćNp©Hr|^mjhSEb\\afv`sz^lkljÄtg¤D¾X¿À|ĐiZȀåB·î}GL¢õcßjayBFµÏC^ĭcÙt¿sğH]j{s©HM¢QnDÀ©DaÜÞ·jgàiDbPufjDk`dPOîhw¡ĥ¥GP²ĐobºrYî¶aHŢ´ ]´rılw³r_{£DB_Ûdåuk|Ũ¯F Cºyr{XFye³Þċ¿ÂkĭB¿MvÛpm`rÚã@ƹhågËÖƿxnlč¶Åì½Ot¾dJlVJĂǀŞqvnO^JZż·Q}êÍÅmµÒ]ƍ¦Dq}¬R^èĂ´ŀĻĊIÔtIJyQŐĠMNtR®òLhĚs©»}OÓGZz¶A\\jĨFäOĤHYJvÞHNiÜaĎÉnFQlNM¤B´ĄNöɂtpŬdfå
qm¿QûùŞÚb¤uŃJŴu»¹ĄlȖħŴw̌ŵ²ǹǠ͛hĭłƕrçü±Yxcitğ®jű¢KOķCoy`å®VTa_Ā]ŐÝɞï²ʯÊ^]afYǸÃĆēĪȣJđ͍ôƋÄÄÍīçÛɈǥ£ÛmY`ó£Z«§°Ó³QafusNıDž_k}¢m[ÝóDµ¡RLčiXyÅNïă¡¸iĔÏNÌŕoēdōîåŤûHcs}~Ûwbù¹£¦ÓCtOPrE^ÒogĉIµÛÅʹK
¤½phMü`oæŀ"],"encodeOffsets":[[121740,32276]]}},{"type":"Feature","id":"330000","properties":{"id":"330000","cp":[120.153576,29.287459],"name":"浙江","childNum":45},"geometry":{"type":"MultiPolygon","coordinates":[["@@E^dQ]K"],["@@jX^j"],["@@sfbU"],["@@qP\\xz[ck"],["@@R¢FX}°[s_"],["@@Cb\\}"],["@@e|v\\la{u"],["@@v~u}"],["@@QxÂF¯}"],["@@¹nvÞs¯o"],["@@rSkUEj"],["@@biZP"],["@@p[}INf"],["@@À¿"],["@@¹dnb
"],["@@rSBnR"],["@@g~h}"],["@@FlEk"],["@@OdPc"],["@@v[u\\"],["@@FjâL~wyoo~sµL\\"],["@@¬e¹aN"],["@@\\nÔ¡q]L³ë\\ÿ®QÖ"],["@@ÊA©[¬"],["@@Kxv"],["@@@hlIk]"],["@@pW{o||j"],["@@Md|_mC"],["@@¢
X£ÏylD¼XtH"],["@@hlÜ[LykAvyfw^E¤"],["@@fp¤MusR"],["@@®_ma~LÁ¬Z"],["@@iMxZ"],["@@ZcYd"],["@@Z~dOSo|A¿qZv"],["@@@`EN¡v"],["@@|TY{"],["@@@n@m"],["@@XWkCT\\"],["@@ºwZRkĕWO¢"],["@@X®±Grƪ\\ÔáXq{"],["@@ůTG°ĄLHm°UC"],["@@¤aÜx~}dtüGæţŎíĔcŖpMËÐj碷ðĄÆMzjWKĎ¢Q¶À_ê_Bıi«pZgf¤Nrq]§ĂN®«H±yƳí¾×ŸīàLłčŴǝĂíÀBŖÕªÁŖHŗʼnåqûõi¨hÜ·ñt»¹ýv_[«¸mYL¯Qª
mĉÅdMgÇjcº«ę¬K´B«Âącoċ\\xKd¡gěŧ«®á[~ıxu·ÅKsËÉc¢Ù\\ĭƛëbf¹ģSĜkáƉÔĈZB{aMµfzʼnfåÂŧįƋǝÊĕġć£g³neą»@¦S®\\ßðChiqªĭiAuAµ_W¥ƣO\\lċĢttC¨£t`PZäuXßBsĻyekOđġĵHuXBµ]×\\°®¬F¢¾pµ¼kŘó¬Wät¸|@L¨¸µrºù³Ù~§WIZW®±Ð¨ÒÉx`²pĜrOògtÁZ}þÙ]¡FKwsPlU[}¦Rvn`hq¬\\nQ´ĘRWb_ rtČFIÖkĦPJ¶ÖÀÖJĈĄTĚòC ²@Pú
Øz©PCÈÚDZhŖl¬â~nm¨f©iļ«mntuÖZÜÄjL®EÌFª²iÊxبIÈhhst"],["@@o\\VzRZ}y"],["@@@°¡mÛGĕ¨§Ianá[ýƤjfæØLäGr"]],"encodeOffsets":[[[125592,31553]],[[125785,31436]],[[125729,31431]],[[125513,31380]],[[125223,30438]],[[125115,30114]],[[124815,29155]],[[124419,28746]],[[124095,28635]],[[124005,28609]],[[125000,30713]],[[125111,30698]],[[125078,30682]],[[125150,30684]],[[124014,28103]],[[125008,31331]],[[125411,31468]],[[125329,31479]],[[125626,30916]],[[125417,30956]],[[125254,30976]],[[125199,30997]],[[125095,31058]],[[125083,30915]],[[124885,31015]],[[125218,30798]],[[124867,30838]],[[124755,30788]],[[124802,30809]],[[125267,30657]],[[125218,30578]],[[125200,30562]],[[124968,30474]],[[125167,30396]],[[124955,29879]],[[124714,29781]],[[124762,29462]],[[124325,28754]],[[123990,28459]],[[125366,31477]],[[125115,30363]],[[125369,31139]],[[122495,31878]],[[125329,30690]],[[125192,30787]]]}},{"type":"Feature","id":"340000","properties":{"id":"340000","cp":[117.283042,31.26119],"name":"安徽","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@^iuLX^"],["@@e©Ehl"],["@@°ZÆëϵmkǀwÌÕæhºgBĝâqÙĊzÖgņtÀÁĂÆáhEz|WzqD¹°Eŧl{ævÜcA`¤C`|´qxIJkq^³³GšµbíZ
¹qpa±ď OH¦Ħx¢gPícOl_iCveaOjCh߸iÝbÛªCC¿mRV§¢A|t^iĠGÀtÚsd]ĮÐDE¶zAb àiödK¡~H¸íæAǿYj{ď¿À½W®£ChÃsikkly]_teu[bFaTign{]GqªoĈMYá|·¥f¥őaSÕėNµñĞ«Im_m¿Âa]uĜp
Z_§{Cäg¤°r[_YjÆOdý[I[á·¥Q_nùgL¾mvˊBÜÆ¶ĊJhpc¹O]iŠ]¥ jtsggJǧw×jÉ©±EFËKiÛÃÕYv
sm¬njĻª§emná}k«ŕgđ²ÙDÇ¤í¡ªOy×Où±@DñSęćăÕIÕ¿IµĥOjNÕËT¡¿tNæŇàåyķrĕq§ÄĩsWÆßF¶X®¿mw
RIÞfßoG³¾©uyHį{Ɓħ¯AFnuP
ÍÔzVdàôº^Ðæd´oG¤{S¬ćxã}ŧ×Kǥĩ«ÕOEзÖdÖsƘѨ[Û^Xr¢¼§xvÄÆµ`K§ tÒ´Cvlo¸fzŨð¾NY´ı~ÉĔē
ßúLÃÃ_ÈÏ|]ÂÏFlg`ben¾¢pUh~ƴ˶_r sĄ~cƈ]|r c~`¼{À{ȒiJjz`îÀT¥Û³
]u}f
ïQl{skloNdjäËzDvčoQďHI¦rbtHĔ~BmlRV_ħTLnñH±DL¼Lªl§Ťa¸ĚlK²\\RòvDcÎJbt[¤D@®hh~kt°ǾzÖ@¾ªdbYhüóZ ň¶vHrľ\\ÊJuxAT|dmÀO[ÃÔG·ĚąĐlŪÚpSJ¨ĸLvÞcPæķŨ®mÐálwKhïgA¢ųƩޤOÈm°K´"]],"encodeOffsets":[[[121722,32278]],[[119475,30423]],[[119168,35472]]]}},{"type":"Feature","id":"350000","properties":{"id":"350000","cp":[118.306239,26.075302],"name":"福建","childNum":18},"geometry":{"type":"MultiPolygon","coordinates":[["@@zht´]"],["@@aj^~ĆG©O"],["@@ed¨C}}i"],["@@@vPGsQ"],["@@sBzddW]Q"],["@@S¨Q{"],["@@NVucW"],["@@qptBAq"],["@@¸[mu"],["@@Q\\pD]_"],["@@jSwUadpF"],["@@eXª~"],["@@AjvFso"],["@@fT_Çí\\v|ba¦jZÆy°"],["@@IjJi"],["@@wJIx«¼AoNe{M"],["@@K±¡ÓČäeZ"],["@@k¡¹Eh~c®wBkUplÀ¡I~Māe£bN¨gZý¡a±Öcp©PhI¢Qq
ÇGj|¥U g[Ky¬ŏv@OptÉEF\\@ åA¬V{XģĐBy
cpě
¼³Ăp·¤¥ohqqÚ¡ŅLs^á§qlÀhH¨MCe»åÇGD¥zPO£čÙkJA¼ßėuĕeûÒiÁŧSW¥Qûŗ½ùěcݧSùĩąSWó«íęACµeRåǃRCÒÇZÍ¢ź±^dlstjD¸ZpuÔâÃH¾oLUêÃÔjjēò´ĄWƛ
^Ñ¥Ħ@ÇòmOw¡õyJyD}¢ďÑÈġfZda©º²z£NjD°Ötj¶¬ZSÎ~¾c°¶ÐmxO¸¢Pl´SL|¥AȪĖMņIJg®áIJČĒü` QF¬h|ĂJ@zµ |ê³È ¸UÖŬŬÀEttĸr]ðM¤ĶIJHtÏ AĬkvsq^aÎbvdfÊòSD´Z^xPsĂrvƞŀjJd×ŘÉ ®AΦĤdxĆqAZRÀMźnĊ»İÐZ YXæJyĊ²·¶q§·K@·{sXãô«lŗ¶»o½E¡«¢±¨Y®Ø¶^AvWĶGĒĢPlzfļtàAvWYãO_¤sD§ssČġ[kƤPX¦`¶®BBvĪjv©jx[L¥àï[F
¼ÍË»ğV`«Ip}ccÅĥZEãoP
´B@D¸m±z«Ƴ¿å³BRضWlâþäą`]Z£Tc ĹGµ¶Hm@_©k¾xĨôȉðX«½đCIbćqK³ÁÄš¬OAwã»aLʼnËĥW[ÂGIÂNxij¤D¢îĎÎB§°_JGs¥E@
¤uć
PåcuMuw¢BI¿]zG¹guĮck\\_"]],"encodeOffsets":[[[123250,27563]],[[122541,27268]],[[123020,27189]],[[122916,27125]],[[122887,26845]],[[122808,26762]],[[122568,25912]],[[122778,26197]],[[122515,26757]],[[122816,26587]],[[123388,27005]],[[122450,26243]],[[122578,25962]],[[121255,25103]],[[120987,24903]],[[122339,25802]],[[121042,25093]],[[122439,26024]]]}},{"type":"Feature","id":"360000","properties":{"id":"360000","cp":[115.592151,27.676493],"name":"江西","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ĢĨƐgļ¼ÂMD~ņªe^\\^§ý©j×cZبzdÒa¶lÒJìõ`oz÷@¤u޸´ôęöY¼HČƶajlÞƩ¥éZ[|h}^U ¥pĄžƦO lt¸Æ Q\\aÆ|CnÂOjtĚĤdÈF`¶@Ðë ¦ōÒ¨SêvHĢûXD®
QgÄWiØPÞìºr¤džNĠ¢lĄtZoCƞÔºCxrpĠV®Ê{f_Y`_eq®Aot`@oDXfkp¨|s¬\\DÄSfè©Hn¬
^DhÆyøJhØxĢĀLÊƠPżċĄwȠ̦G®ǒĤäTŠÆ~Ħw«|TF¡nc³Ïå¹]ĉđxe{ÎÓvOEm°BƂĨİ|Gvz½ª´HàpeJÝQxnÀWEµàXÅĪt¨ÃĖrÄwÀFÎ|ňÓMå¼ibµ¯»åDT±m[r«_gmQu~¥V\\OkxtL E¢Ú^~ýêPóqoě±_Êw§ÑªåƗā¼mĉŹ¿NQ
YBąrwģcÍ¥BŗÊcØiIƝĿuqtāwO]³YCñTeÉcaubÍ]trluī
BÐGsĵıN£ï^ķqss¿FūūVÕ·´Ç{éĈýÿOER_đûIċâJhŅıNȩĕB
¦K{Tk³¡OP·wnµÏd¯}½TÍ«YiµÕsC¯iM¤¦¯P|ÿUHvhe¥oFTuõ\\OSsMòđƇiaºćXĊĵà·çhƃ÷Ç{ígu^đgm[×zkKN¶Õ»lčÓ{XSÆv©_ÈëJbVkĔVÀ¤P¾ºÈMÖxlò~ªÚàGĂ¢B±ÌKyáV¼Ã~
`gsÙfIƋlę¹e|~udjuTlXµf`¿Jd[\\L²"],"encodeOffsets":[[116689,26234]]}},{"type":"Feature","id":"370000","properties":{"id":"370000","cp":[118.000923,36.275807],"name":"山东","childNum":13},"geometry":{"type":"MultiPolygon","coordinates":[["@@Xjd]{K"],["@@itbFHy"],["@@HlGk"],["@@TGy"],["@@K¬U"],["@@WdXc"],["@@PtOs"],["@@LnXhc"],["@@ppVu]Or"],["@@cdzAUa"],["@@udRhnCI"],["@@oIpR"],["@@Ľč{fzƤîKÎMĮ]ZF½Y]â£ph¶¨râøÀÎǨ¤^ºÄGz~grĚĜlĞÆLĆdž¢Îo¦cvKbgr°WhmZp L]LºcUÆnżĤÌĒbAnrOA´ȊcÀbƦUØrĆUÜøĬƞEzVL®öØBkŖÝĐ˹ŧ̄±ÀbÎÉnb²ĦhņBĖįĦåXćì@L¯´ywƕCéõė ƿ¸lµ¾Z|ZWyFY¨Mf~C¿`à_RÇzwƌfQnny´INoƬèôº|sTJULîVjǎ¾ĒØDz²XPn±ŴPè¸ŔLƔÜƺ_TüÃĤBBċÈöA´faM¨{«M`¶d¡ôÖ°mȰBÔjj´PM|c^d¤u¤Û´ä«ƢfPk¶Môl]Lb}su^ke{lC
MrDÇ]NÑFsmoõľHyGă{{çrnÓEƕZGª¹Fj¢ïW
uøCǷë¡ąuhÛ¡^KxC`C\\bÅxì²ĝÝ¿_NīCȽĿåB¥¢·IŖÕy\\¹kxãČ×GDyäÁçFQ¡KtŵƋ]CgÏAùSedcÚźuYfyMmhUWpSyGwMPqŀÁ¼zK¶GY§Ë@´śÇµƕBm@IogZ¯uTMx}CVKï{éƵP_K«pÛÙqċtkkù]gTğwoɁsMõ³ăAN£MRkmEÊčÛbMjÝGu
IZGPģãħE[iµBEuDPÔ~ª¼ęt]ûG§¡QMsğNPŏįzs£Ug{đJĿļā³]ç«Qr~¥CƎÑ^n¶ÆéÎR~ݏYI] PumŝrƿIā[xedzL¯v¯s¬ÁY
~}
ťuŁgƋpÝĄ_ņī¶ÏSR´ÁP~¿Cyċßdwk´SsX|t`Ä ÈðAªìÎT°¦Dda^lĎDĶÚY°`ĪŴǒàŠv\\ebZHŖR¬ŢƱùęOÑM³FÛWp["]],"encodeOffsets":[[[123806,39303]],[[123821,39266]],[[123742,39256]],[[123702,39203]],[[123649,39066]],[[123847,38933]],[[123580,38839]],[[123894,37288]],[[123043,36624]],[[123344,38676]],[[123522,38857]],[[123628,38858]],[[118260,36742]]]}},{"type":"Feature","id":"410000","properties":{"id":"410000","cp":[113.665412,33.757975],"name":"河南","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ýLùµP³swIÓxcŢĞð´E®ÚPtĴXØx¶@«ŕŕQGYfa[şußǩđš_X³ijÕčC]kbc¥CS¯ëÍB©÷³Si_}mYTt³xlàcČzÀD}ÂOQ³ÐTĨ¯ƗòËŖ[hłŦv~}ÂZ«¤lPÇ£ªÝŴÅR§ØnhctâknÏľŹUÓÝdKuķI§oTũÙďkęĆH¸Ó\\Ä¿PcnS{wBIvÉĽ[GqµuŇôYgûZca©@½Õǽys¯}lgg@C\\£asIdÍuCQñ[L±ęk·ţb¨©kK»KC²òGKmĨS`UQnk}AGēsqaJ¥ĐGRĎpCuÌy ã iMcplk|tRkðev~^´¦ÜSí¿_iyjI|ȑ|¿_»d}q^{Ƈdă}tqµ`Ƴĕg}V¡om½faÇo³TTj¥tĠRyK{ùÓjuµ{t}uËRivGçJFjµÍyqÎàQÂFewixGw½Yŷpµú³XU½ġyłåkÚwZX·l¢Á¢KzOÎÎjc¼htoDHr
|J½}JZ_¯iPq{tę½ĕ¦Zpĵø«kQ
Ť]MÛfaQpě±ǽ¾]uFu÷nčįADp}AjmcEÇaª³o³ÆÍSƇĈÙDIzËčľ^KLiÞñ[aA²zzÌ÷D|[íijgfÕÞd®|`Ć~oĠƑô³ŊD×°¯CsøÀ«ìUMhTº¨¸ǡîSÔDruÂÇZÖEvPZW~ØÐtĄE¢¦Ðy¸bô´oŬ¬²Ês~]®tªapŎJ¨Öº_Ŕ`Ŗ^Đ\\Ĝu~m²Ƹ¸fWĦrƔ}Î^gjdfÔ¡J}\\n C¦þWxªJRÔŠu¬ĨĨmFdM{\\d\\YÊ¢ú@@¦ª²SÜsC}fNècbpRmlØ^gd¢aÒ¢CZZxvƶN¿¢T@uC¬^ĊðÄn|lGlRjsp¢ED}Fio~ÔN~zkĘHVsDzßjŬŢ`Pûàl¢\\ÀEhİgÞē X¼Pk|m"],"encodeOffsets":[[118256,37017]]}},{"type":"Feature","id":"420000","properties":{"id":"420000","cp":[113.298572,30.684355],"name":"湖北","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@AB"],["@@lskt"],["@@¾«}{ra®pîÃ\\{øCËyyB±b\\òÝjKL ]ĎĽÌJyÚCƈćÎT´Å´pb©ÈdFin~BCo°BĎÃømv®E^vǾ½Ĝ²RobÜeN^ĺ£R¬lĶ÷YoĖ¥Ě¾|sOr°jY`~I¾®I{GqpCgyl{£ÍÍyPL¡¡¸kWxYlÙæŁĢz¾V´W¶ùŸo¾ZHxjwfxGNÁ³Xéæl¶EièIH ujÌQ~v|sv¶Ôi|ú¢FhQsğ¦SiŠBgÐE^ÁÐ{čnOÂÈUÎóĔÊēIJ}Z³½Mŧïeyp·uk³DsѨL¶_Åuèw»¡WqÜ]\\Ò§tƗcÕ¸ÕFÏǝĉăxŻČƟOKÉġÿ×wg÷IÅzCg]m«ªGeçÃTC«[t§{loWeC@ps_Bprf_``Z|ei¡oċMqow¹DƝÓDYpûsYkıǃ}s¥ç³[§cY§HK«Qy]¢wwö¸ïx¼ņ¾Xv®ÇÀµRĠÐHM±cÏdƒǍũȅȷ±DSyúĝ£ŤĀàtÖÿï[îb\\}pĭÉI±Ñy
¿³x¯No|¹HÏÛmjúË~TuęjCöAwě¬Rđl¯ ÑbŇTĿ_[IčĄʿnM¦ğ\\É[T·k¹©oĕ@A¾wya¥Y\\¥Âaz¯ãÁ¡k¥ne£ÛwE©Êō¶˓uoj_U¡cF¹[WvP©whuÕyBF`RqJUw\\i¡{jEPïÿ½fć
QÑÀQ{°fLÔ~wXgītêݾĺHd³fJd]HJ²
EoU¥HhwQsƐ»Xmg±çve]DmÍPoCc¾_hhøYrŊU¶eD°Č_N~øĹĚ·`z]Äþp¼
äÌQv\\rCé¾TnkžŐÚÜa¼ÝƆ̶Ûo
d
ĔňТJqPb ¾|J¾fXƐîĨ_Z¯À}úƲN_ĒÄ^ĈaŐyp»CÇÄKñL³ġM²wrIÒŭxjb[n«øæà ^²h¯ÚŐªÞ¸Y²ĒVø}Ā^İ´LÚm¥ÀJÞ{JVųÞŃx×sxxƈē ģMřÚðòIfĊŒ\\Ʈ±ŒdʧĘDvČ_Àæ~Dċ´A®µ¨ØLV¦êHÒ¤"]],"encodeOffsets":[[[113712,34000]],[[115612,30507]],[[113649,34054]]]}},{"type":"Feature","id":"430000","properties":{"id":"430000","cp":[111.782279,28.09409],"name":"湖南","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@nFTs"],["@@ßÅÆá½ÔXrCO
ËRïÿĩTooQyÓ[ŅBE¬ÎÓXaį§Ã¸G °ITxpúxÚij¥Ï̾edÄ©ĸG
àGhM¤Â_U}Ċ}¢pczfþg¤ÇòAVM"],["@@©KA·³CQ±Á«³BUƑ¹AtćOwD]JiØSm¯b£ylX
HËѱH«C^õľAŧ¤É¥ïyuǙuA¢^{ÌC´¦ŷJ£^[ª¿ĕ~Ƈ
N
skóā¹¿ï]ă~÷O§@Vm¡Qđ¦¢Ĥ{ºjÔª¥nf´~Õo×ÛąMąıuZmZcÒ IJβSÊDŽŶ¨ƚCÖŎªQؼrŭ«}NÏürʬmjr@ĘrTW SsdHzƓ^ÇÂyUi¯DÅYlŹu{hT}mĉ¹¥ěDÿë©ıÓ[Oº£¥ótł¹MÕƪ`P
DiÛU¾ÅâìUñBÈ£ýhedy¡oċ`pfmjP~kZa
ZsÐd°wj§@Ĵ®w~^kÀÅKvNmX\\¨aŃqvíó¿F¤¡@ũÑVw}S@j}¾«pĂrªg àÀ²NJ¶¶Dô
K|^ª°LX¾ŴäPα£EXd^¶IJÞÜ~u¸ǔMRhsR
e`ÄofIÔ\\Ø ićymnú¨cj ¢»GČìƊÿШXeĈ¾Oð Fi ¢|[jVxrIQ_EzAN¦zLU`cªxOTu RLÄ¢dVi`p˔vŎµªÉF~Ød¢ºgİàw¸Áb[¦Zb¦z½xBĖ@ªpºlS¸Ö\\Ĕ[N¥ˀmĎăJ\\ŀ`
ňSÚĖÁĐiOĜ«BxDõĚivSÌ}iùÜnкG{p°M´wÀÒzJ²ò¨ oTçüöoÛÿñőФùTz²CȆȸǎŪƑÐc°dPÎğ˶[Ƚu¯½WM¡ÉB·rínZÒ `¨GA¾\\pēXhÃRCüWGġu
Té§ŎÑ©ò³I±³}_EÃħg®ęisÁPDmÅ{b[RÅs·kPŽƥóRoOV~]{g\\êYƪ¦kÝbiċƵGZ»Ěõ
ó·³vŝ£ø@pyö_ëIkѵbcѧy
×dYتiþ¨[]f]Ņ©C}ÁN»hĻħƏĩ"]],"encodeOffsets":[[[115640,30489]],[[112543,27312]],[[116690,26230]]]}},{"type":"Feature","id":"440000","properties":{"id":"440000","cp":[113.280637,23.125178],"name":"广东","childNum":24},"geometry":{"type":"MultiPolygon","coordinates":[["@@QdAua"],["@@lxDLo"],["@@sbhNLo"],["@@Ă ā"],["@@WltO[["],["@@Kr]S"],["@@eI]y"],["@@I|Mym"],["@@Û³LS¼Y"],["@@nvºBëui©`¾"],["@@zdÛJw®"],["@@°
¯"],["@@a yAª¸ËJIxØ@ĀHAmÃV¡ofuo"],["@@sŗÃÔėAƁZÄ ~°ČPäh"],["@@¶ÝÌvmĞhıQ"],["@@HdSjĒ¢D}war
u«ZqadYM"],["@@el\\LqqU"],["@@~rMo\\"],["@@f^C"],["@@øPªoj÷ÍÝħXČx°Q¨ıXNv"],["@@gÇƳo[~tly"],["@@EÆC¿"],["@@OP"],["@@wđógĝ[³¡VÙæÅöM̳¹pÁaËýý©D©ÜJŹƕģGą¤{Ùū
ÇO²«BƱéAÒĥ¡«BhlmtÃPµyU¯ucd·w_bŝcīímGO|KPȏŹãŝIŕŭŕ@Óoo¿ē±ß}
ŭIJWÈCőâUâǙIğʼn©IijE×
Á³AówXJþ±ÌÜÓĨ£L]ĈÙƺZǾĆĖMĸĤfÎĵlŨnÈĐtFFĤêk¶^k°f¶g}®Faf`vXŲxl¦ÔÁ²¬Ð¦pqÊ̲iXØRDÎ}Ä@ZĠsx®AR~®ETtĄZƈfŠŠHâÒÐAµ\\S¸^wĖkRzalŜ|E¨ÈNĀňZTpBh£\\ĎƀuXĖtKL¶G|»ĺEļĞ~ÜĢÛĊrOÙîvd]n¬VÊĜ°RÖpMƂªFbwEÀ©\\
¤]ŸI®¥D³|Ë]CöAŤ¦
æ´¥¸Lv¼¢ĽBaôF~®²GÌÒEYzk¤°ahlVÕI^CxĈPsBƒºV¸@¾ªR²ĨN]´_eavSivc}p}Đ¼ƌkJÚe th_¸ ºx±ò_xN˲@ă¡ßH©Ùñ}wkNÕ¹ÇO½¿£ĕ]ly_WìIǪ`uTÅxYĒÖ¼kÖµMjJÚwn\\hĒv]îh|ÈƄøèg¸Ķß ĉĈWb¹ƀdéĘNTtP[öSvrCZaGubo´ŖÒÇĐ~¡zCI
özx¢PnÈñ @ĥÒ¦]ƞV}³ăĔñiiÄÓVépKG½ÄÓávYoC·sitiaÀyŧΡÈYDÑům}ý|m[węõĉZÅxUO}÷N¹³ĉo_qtăqwµŁYÙǝŕ¹tïÛUïmRCº
ĭ|µÕÊK½Rē ó]GªęAx»HO£|ām¡diď×YïYWªʼnOeÚtĐ«zđ¹T
āúEá²\\ķÍ}jYàÙÆſ¿Çdğ·ùTßÇţʄ¡XgWÀLJğ·¿ÃOj YÇ÷Qěi"]],"encodeOffsets":[[[117381,22988]],[[116552,22934]],[[116790,22617]],[[116973,22545]],[[116444,22536]],[[116931,22515]],[[116496,22490]],[[116453,22449]],[[113301,21439]],[[118726,21604]],[[118709,21486]],[[113210,20816]],[[115482,22082]],[[113171,21585]],[[113199,21590]],[[115232,22102]],[[115739,22373]],[[115134,22184]],[[113056,21175]],[[119573,21271]],[[119957,24020]],[[115859,22356]],[[116561,22649]],[[116285,22746]]]}},{"type":"Feature","id":"450000","properties":{"id":"450000","cp":[108.320004,22.82402],"name":"广西","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@H TQ§A"],["@@ĨʪLƊDÎĹĐCǦė¸zÚGn£¾rªŀÜt¬@ÖÚSx~øOŒŶÐÂæȠ\\ÈÜObĖw^oÞLf¬°bI lTØBÌF£Ć¹gñĤaYt¿¤VSñK¸¤nM¼JE±½¸ñoÜCƆæĪ^ĚQÖ¦^f´QüÜÊz¯lzUĺš@ìp¶n]sxtx¶@~ÒĂJb©gk{°~c°`Ô¬rV\\la¼¤ôá`¯¹LCÆbxEræOv[H[~|aB£ÖsºdAĐzNÂðsÞÆ
Ĥªbab`ho¡³F«èVlo¤ÔRzpp®SĪº¨ÖºN
ijd`a¦¤F³ºDÎńĀìCĜº¦Ċ~nS|gźvZkCÆj°zVÈÁƔ]LÊFZg
čPkini«qÇczÍY®¬Ů»qR×ō©DÕ§ƙǃŵTÉĩ±ıdÑnYYIJvNĆĆØÜ Öp}e³¦m©iÓ|¹ħņ|ª¦QF¢Â¬ʖovg¿em^ucà÷gÕuíÙćĝ}FϼĹ{µHKsLSđƃrč¤[AgoSŇYMÿ§Ç{FśbkylQxĕ]T·¶[B
ÑÏGáşşƇe
ăYSsFQ}BwtYğÃ@~
CÍQ ×Wj˱rÉ¥oÏ ±«ÓÂ¥kwWűmcih³K~µh¯e]lµélEģEďsmÇŧē`ãògK_ÛsUʝćğ¶höO¤Ǜn³c`¡y¦CezYwa[ďĵűMę§]XÎ_íÛ]éÛUćİÕBƣ±
dy¹T^dûÅÑŦ·PĻþÙ`K¦
¢ÍeĥR¿³£[~äu¼dltW¸oRM¢ď\\z}Æzdvň{ÎXF¶°Â_ÒÂÏL©ÖTmu¼ãlīkiqéfA·Êµ\\őDc¥ÝFyÔćcűH_hLÜêĺШc}rn`½Ì@¸¶ªVLhŒ\\Ţĺk~Ġið°|gtTĭĸ^xvKVGréAébUuMJVÃO¡
qĂXËSģãlýà_juYÛÒBG^éÖ¶§EGÅzěƯ¤EkN[kdåucé¬dnYpAyČ{`]þ¯TbÜÈk¡ĠvàhÂƄ¢Jî¶²"]],"encodeOffsets":[[[111707,21520]],[[107619,25527]]]}},{"type":"Feature","id":"460000","properties":{"id":"460000","cp":[109.83119,19.031971],"name":"海南","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@¦Ŝil¢XƦƞòïè§ŞCêɕrŧůÇąĻõ·ĉ³œ̅kÇm@ċȧŧĥĽʉƅſȓÒ˦ŝE}ºƑ[ÍĜȋ gÎfǐÏĤ¨êƺ\\Ɔ¸ĠĎvʄȀоjNðĀÒRZdžzÐŘΰH¨Ƣb²_Ġ "],"encodeOffsets":[[112750,20508]]}},{"type":"Feature","id":"510000","properties":{"id":"510000","cp":[104.065735,30.659462],"name":"四川","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@LqKr"],["@@[ĻéV£_ţġñpG réÏ·~ąSfy×Í·ºſƽiÍıƣıĻmHH}siaX@iǰÁÃ×t«T¤JJJyJÈ`Ohߦ¡uËhIyCjmÿw
ZG
TiSsOB²fNmsPa{M{õE^Hj}gYpaeu¯oáwHjÁ½M¡pMuåmni{fk\\oÎqCwEZ¼KĝAy{m÷LwO×SimRI¯rKõBS«sFe]fµ¢óY_ÆPRcue°Cbo×bd£ŌIHgtrnyPt¦foaXďxlBowz_{ÊéWiêEGhܸºuFĈIxf®Y½ĀǙ]¤EyF²ċw¸¿@g¢§RGv»áW`ÃĵJwi]t¥wO½a[×]`ÃiüL¦LabbTÀåc}ÍhÆh®BHî|îºÉk¤Sy£ia©taį·Ɖ`ō¥UhO
ĝLk}©Fos´JmµlŁu
ønÑJWΪYÀïAetTŅÓGË«bo{ıwodƟ½OġܵxàNÖ¾P²§HKv¾]|BÆåoZ`¡Ø`ÀmºĠ~ÌЧnÇ
¿¤]wğ@srğu~Io[é±¹ ¿ſđÓ@qg¹zƱřaí°KtǤV»Ã[ĩǭƑ^ÇÓ@áťsZÏÅĭƋěpwDóÖáŻneQËq·GCœýS]x·ýq³OÕ¶Qzßti{řáÍÇWŝŭñzÇWpç¿JXĩè½cFÂLiVjx}\\NŇĖ¥GeJA¼ÄHfÈu~¸Æ«dE³ÉMA|bÒ
ćhG¬CMõƤąAvüVéŀ_V̳ĐwQj´·ZeÈÁ¨X´Æ¡Qu·»ÕZ³ġqDoy`L¬gdp°şp¦ėìÅĮZ°Iähzĵf²å ĚÑKpIN|Ñz]ń
·FU×é»R³MÉ»GM«kiér}Ã`¹ăÞmÈnÁîRǀ³ĜoİzŔwǶVÚ£À]ɜ»ĆlƂ²Ġ
þTº·àUȞÏʦ¶I«dĽĢdĬ¿»Ĕ×h\\c¬ä²GêëĤł¥ÀǿżÃÆMº}BÕĢyFVvwxBèĻĒ©ĈtCĢɽŠȣ¦āæ·HĽîôNÔ~^¤Ɗu^s¼{TA¼ø°¢İªDè¾Ň¶ÝJ®Z´ğ~Sn|ªWÚ©òzPOȸbð¢|øĞŒQìÛÐ@ĞǎRS¤Á§d
i´ezÝúØã]HqkIþËQǦÃsǤ[E¬ÉŪÍxXƒ·ÖƁİlƞ¹ª¹|XÊwnÆƄmÀêErĒtD®ċæcQE®³^ĭ¥©l}äQtoŖÜqÆkµªÔĻĴ¡@Ċ°B²Èw^^RsºT£ڿQPJvÄz^Đ¹Æ¯fLà´GC²dtĀRt¼¤ĦOðğfÔðDŨŁĞƘïPÈ®âbMüÀXZ ¸£@Å»»QÉ]dsÖ×_Í_ÌêŮPrĔĐÕGĂeZÜîĘqBhtO ¤tE[h|YÔZśÎs´xº±Uñt|OĩĠºNbgþJy^dÂY Į]Řz¦gC³R`Āz¢Aj¸CL¤RÆ»@Ŏk\\Ç´£YW}z@Z}öoû¶]´^NÒ}èNªPÍy¹`S°´ATeVamdUĐwʄvĮÕ\\uÆŗ¨Yp¹àZÂmWh{á}WØǍÉüwga§áCNęÎ[ĀÕĪgÖɪXøx¬½Ů¦¦[NÎLÜUÖ´òrÙŠxR^JkijnDX{U~ET{ļº¦PZcjF²Ė@pg¨B{u¨ŦyhoÚD®¯¢ WòàFΤ¨GDäz¦kŮPġqË¥À]eâÚ´ªKxīPÖ|æ[xäJÞĥsNÖ½I¬nĨY´®ÐƐmDŝuäđđEb
ee_v¡}ìęNJē}qÉåT¯µRs¡M@}ůaa¯wvƉåZw\\Z{åû^"]],"encodeOffsets":[[[108815,30935]],[[110617,31811]]]}},{"type":"Feature","id":"520000","properties":{"id":"520000","cp":[106.713478,26.578343],"name":"贵州","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@G\\lY£in"],["@@q|mc¯tÏVSÎ"],["@@hÑ£IsNgßHHªķÃh_¹¡ĝħń¦uÙùgS¯JH|sÝÅtÁïyMDč»eÕtA¤{b\\}G®u\\åPFqwÅaD
K°ºâ_£ùbµmÁÛĹM[q|hlaªāI}ѵ@swtwm^oµD鼊yVky°ÉûÛR
³e¥]RÕěħ[ƅåÛDpJiVÂF²I
»mN·£LbÒYbWsÀbpkiTZĄă¶Hq`
ĥ_J¯ae«KpÝx]aĕÛPÇȟ[ÁåŵÏő÷Pw}TÙ@Õs«ĿÛq©½m¤ÙH·yǥĘĉBµĨÕnđ]K©œáGçş§ÕßgǗĦTèƤƺ{¶ÉHÎd¾ŚÊ·OÐjXWrãLyzÉAL¾ę¢bĶėy_qMĔąro¼hĊw¶øV¤w²Ĉ]ÊKx|`ź¦ÂÈdrcÈbe¸`I¼čTF´¼Óýȃr¹ÍJ©k_șl³´_pĐ`oÒh¶pa^ÓĔ}D»^Xy`d[Kv
JPhèhCrĂĚÂ^Êƌ wZLĠ£ÁbrzOIlMMĪŐžËr×ÎeŦtw|¢mKjSǘňĂStÎŦEtqFT¾E쬬ôxÌO¢ K³ŀºäYPVgŎ¦Ŋm޼VZwVlz¤
£Tl®ctĽÚó{GAÇge~Îd¿æaSba¥KKûj®_Ä^\\ؾbP®¦x^sxjĶI_Ä Xâ¼Hu¨Qh¡À@Ëô}±GNìĎlT¸
`V~R°tbÕĊ`¸úÛtÏFDu[MfqGH·¥yAztMFe|R_GkChZeÚ°tov`xbDnÐ{E}ZèxNEÞREn[Pv@{~rĆAB§EO¿|UZ~ìUf¨J²ĂÝÆsªB`s¶fvö¦Õ~dÔq¨¸º»uù[[§´sb¤¢zþF¢Æ
ÀhÂW\\ıËIÝo±ĭŠ£þÊs}¡R]ěDg´VG¢j±®èºÃmpU[Á뺰rÜbNu¸}º¼`niºÔXĄ¤¼ÔdaµÁ_Ã
ftQQgR·Ǔv}Ý×ĵ]µWc¤F²OĩųãW½¯K©
]{LóµCIµ±Mß¿h©āq¬o½~@i~TUxŪÒ¢@£ÀEîôruńb[§nWuMÆLl¿]x}ij½"]],"encodeOffsets":[[[112158,27383]],[[112105,27474]],[[112095,27476]]]}},{"type":"Feature","id":"530000","properties":{"id":"530000","cp":[101.512251,24.740609],"name":"云南","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@[ùx½}ÑRHYīĺûsÍniEoã½Ya²ė{c¬ĝgĂsAØÅwďõzFjw}«Dx¿}Uũlê@HÅF¨ÇoJ´Ónũuą¡Ã¢pÒÅØ TF²xa²ËXcÊlHîAßËŁkŻƑŷÉ©hWæßUËs¡¦}teèÆ¶StÇÇ}Fd£jĈZĆÆ¤Tč\\D}O÷£U§~ŃGåŃDĝ¸Tsd¶¶Bª¤u¢ŌĎo~t¾ÍŶÒtD¦ÚiôözØX²ghįh½Û±¯ÿm·zR¦Ɵ`ªŊÃh¢rOÔ´£Ym¼èêf¯ŪĽncÚbw\\zlvWªâ ¦gmĿBĹ£¢ƹřbĥkǫßeeZkÙIKueT»sVesbaĕ ¶®dNĄÄpªy¼³BE®lGŭCǶwêżĔÂepÍÀQƞpC¼ŲÈAÎô¶RäQ^Øu¬°_Èôc´¹ò¨P΢hlϦ´ĦÆ´sâÇŲPnÊD^¯°Upv}®BP̪jǬxSöwlfòªvqĸ|`HviļndĜĆhňem·FyÞqóSᝳX_ĞçêtryvL¤§z¦c¦¥jnŞklD¤øz½ĜàĂŧMÅ|áƆàÊcðÂFÜáŢ¥\\\\ºİøÒÐJĴîD¦zK²ǏÎEh~CDhMn^ÌöÄ©ČZÀaüfɭyœpį´ěFűk]Ôě¢qlÅĆÙa¶~ÄqêljN¬¼HÊNQ´ê¼VظE^ŃÒyM{JLoÒęæe±Ķygã¯JYÆĭĘëo¥Šo¯hcK«z_prC´ĢÖY¼ v¸¢RÅW³Â§fǸYi³xR´ďUË`êĿUûuĆBƣöNDH«ĈgÑaB{ÊNF´¬c·Åv}eÇÃGB»If¦HňĕM
~[iwjUÁKE¾dĪçWIèÀoÈXòyŞŮÈXâÎŚj|àsRyµÖPr´þ ¸^wþTDŔHr¸RÌmfżÕâCôoxĜƌÆĮÐYtâŦÔ@]ÈǮƒ\\μģUsȯLbîƲŚºyhr@ĒÔƀÀ²º\\êpJ}ĠvqtĠ@^xÀ£È¨mËÏğ}n¹_¿¢×Y_æpÅA^{½Lu¨GO±Õ½ßM¶wÁĢÛPƢ¼pcIJx|ap̬HÐŊSfsðBZ¿©XÏÒKk÷Eû¿S
rEFsÕūkóVǥʼniTL¡n{uxţÏhôŝ¬ğōNNJkyPaqÂğ¤K®YxÉƋÁ]āęDqçgOgILu\\_gz]W¼~CÔē]bµogpÑ_oď`´³Țkl`IªºÎȄqÔþ»E³ĎSJ»_f·adÇqÇc¥Á_Źw{L^ɱćxU£µ÷xgĉp»ĆqNē`rĘzaĵĚ¡K½ÊBzyäKXqiWPÏɸ½řÍcÊG|µƕƣGË÷k°_^ý|_zċBZocmø¯hhcæ\\lMFlư£ĜÆyHF¨µêÕ]HA
àÓ^it `þßäkĤÎT~Wlÿ¨ÔPzUCNVv [jâôDôď[}z¿msSh¯{jïğl}šĹ[őgK©U·µË@¾m_~q¡f¹
ÅË^»f³ø}Q¡Ö˳gͱ^Ç
\\ëÃA_¿bWÏ[¶ƛé£F{īZgm@|kHǭƁć¦UĔť×ë}ǝeďºȡȘÏíBÉ£āĘPªij¶ʼnÿy©nď£G¹¡I±LÉĺÑdĉÜW¥}gÁ{aqÃ¥aıęÏZï`"],"encodeOffsets":[[104636,22969]]}},{"type":"Feature","id":"540000","properties":{"id":"540000","cp":[89.132212,30.860361],"name":"西藏","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ÂhľxŖxÒVºÅâAĪÝȆµę¯Ňa±r_w~uSÕňqOj]ɄQ
£Z
UDûoY»©M[L¼qãË{VÍçWVi]ë©Ä÷àyƛhÚU°adcQ~Mx¥cc¡ÙaSyFÖkuRýq¿ÔµQĽ³aG{¿FµëªéĜÿª@¬·K·àariĕĀ«V»ŶĴūgèLǴŇƶaftèBŚ£^âǐÝ®M¦ÁǞÿ¬LhJ¾óƾƺcxwf]Y
´¦|QLn°adĊ
\\¨oǀÍŎ´ĩĀd`tÊQŞŕ|¨C^©Ĉ¦¦ÎJĊ{ëĎjª²rÐl`¼Ą[t|¦Stè¾PÜK¸dƄı]s¤î_v¹ÎVòŦj£Əsc¬_Ğ´|٦Av¦w`ăaÝaa¢e¤ı²©ªSªÈMĄwÉØŔì@T¤Ę\\õª@þo´xA sÂtŎKzó´ÇĊµ¢r^nĊƬ×üG¢³ {âĊ]G~bÀgVjzlhǶfOfdªB]pjTOtĊn¤}®¦Č¥d¢¼»ddY¼t¢eȤJ¤}Ǿ¡°§¤AÐlc@ĝsªćļđAçwxUuzEÖġ~AN¹ÄÅȀݦ¿ģŁéì±H
ãd«g[ؼēÀcīľġ¬cJµ
ÐʥVȝ¸ßS¹ý±ğkƁ¼ą^ɛ¤Ûÿb[}¬ōõÃ]ËNm®g@Bg}ÍF±ǐyL¥íCIijÏ÷Ñį[¹¦[âšEÛïÁÉdƅß{âNÆāŨß¾ě÷yC£k´ÓH@¹TZ¥¢į·ÌAЧ®Zc
v½Z¹|ÅWZqgW|ieZÅYVÓqdqbc²R@c¥Rã»GeeƃīQ}J[ÒK
¬Ə|oėjġĠÑN¡ð¯EBčnwôɍėª²CλŹġǝʅįĭạ̃ūȹ]ΓͧgšsgȽóϧµǛęgſ¶ҍć`ĘąŌJÞä¤rÅň¥ÖÁUětęuůÞiĊÄÀ\\Æs¦ÓRb|Â^řÌkÄŷ¶½÷f±iMÝ@ĥ°G¬ÃM¥n£Øąğ¯ß§aëbéüÑOčk£{\\eµª×MÉfm«Ƒ{Å×Gŏǩãy³©WÑăû··Qòı}¯ãIéÕÂZ¨īès¶ZÈsæĔTŘvgÌsN@îá¾ó@ÙwU±ÉT廣TđWxq¹Zobs[ׯcĩvėŧ³BM|¹kªħ¥TzNYnÝßpęrñĠĉRS~½ěVVµõ«M££µBĉ¥áºae~³AuĐh`ܳç@BÛïĿa©|z²Ý¼D£àč²ŸIûI āóK¥}rÝ_Á´éMaň¨~ªSĈ½½KÙóĿeƃÆB·¬ën×W|Uº}LJrƳlŒµ`bÔ`QÐÓ@s¬ñIÍ@ûws¡åQÑßÁ`ŋĴ{ĪTÚÅTSijYo|Ç[ǾµMW¢ĭiÕØ¿@Mh
pÕ]jéò¿OƇĆƇpêĉâlØwěsǩĵ¸c
bU¹ř¨WavquSMzeo_^gsÏ·¥Ó@~¯¿RiīB\\qTGªÇĜçPoÿfñòą¦óQīÈáPābß{ZŗĸIæÅhnszÁCËìñÏ·ąĚÝUm®óL·ăUÈíoù´Êj°ŁŤ_uµ^°ìÇ@tĶĒ¡ÆM³Ģ«İĨÅ®ğRāðggheÆ¢zÊ©Ô\\°ÝĎz~ź¤PnMĪÖB£kné§żćĆKǰ¼L¶èâz¨u¦¥LDĘz¬ýÎmĘd¾ßFzhg²Fy¦ĝ¤ċņbÎ@yĄæm°NĮZRÖíJ²öLĸÒ¨Y®ƌÐVàtt_ÚÂyĠz]ŢhzĎ{ÂĢXc|ÐqfO¢¤ögÌHNPKŖUú´xx[xvĐCûĀìÖT¬¸^}Ìsòd´_KgžLĴ
ÀBon|H@Êx¦BpŰŌ¿fµƌA¾zLjRx¶FkĄźRzŀ~¶[´HnªVƞuĒȨƎcƽÌm¸ÁÈM¦x͊ëÀxdžBú^´W£dkɾĬpw˂ØɦļĬIŚÊnŔa¸~J°îlɌxĤÊÈðhÌ®gT´øàCÀ^ªerrƘd¢İP|Ė ŸWªĦ^¶´ÂLaT±üWƜǀRÂŶUńĖ[QhlLüAÜ\\qRĄ©"],"encodeOffsets":[[90849,37210]]}},{"type":"Feature","id":"610000","properties":{"id":"610000","cp":[108.948024,34.263161],"name":"陕西","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@p¢ȮµûGĦ}Ħðǚ¶òƄjɂz°{ºØkÈęâ¦jªBg\\ċ°s¬]jú EȌdž¬stRÆdĠİwܸôW¾ƮłÒ_{Ìû¼jº¹¢GǪÒ¯ĘZ`ºŊecņą~BÂgzpâēòYǠȰÌTΨÂW|fcă§uF@N¢XLRMº[ğȣſï|¥Jkc`sʼnǷY¹W@µ÷K
ãï³ÛIcñ·VȋÚÒķø©þ¥yÓğęmWµÎumZyOŅƟĥÓ~sÑL¤µaÅ
Y¦ocyZ{y c]{Ta©`U_Ěē£ωÊƍKùK¶ȱÝƷ§{û»ÅÁȹÍéuij|¹cÑdìUYOuFÕÈYvÁCqÓTǢí§·S¹NgV¬ë÷Át°DدC´ʼnƒópģ}ċcEË
FéGU¥×K
§¶³BČ}C¿åċ`wġB·¤őcƭ²ő[Å^axwQO
ÿEËߌĤNĔwƇÄńwĪo[_KÓª³ÙnKÇěÿ]ďă_d©·©Ýŏ°Ù®g]±ßå¬÷m\\iaǑkěX{¢|ZKlçhLtŇîŵœè[É@ƉĄEtƇϳħZ«mJ
×¾MtÝĦ£IwÄå\\Õ{OwĬ©LÙ³ÙgBƕŀrÌĢŭO¥lãyC§HÍ£ßEñX¡°ÙCgpťzb`wIvA|§hoĕ@E±iYd¥OϹS|}F@¾oAO²{tfÜ¢FǂÒW²°BĤh^Wx{@¬F¸¡ķn£P|ªĴ@^ĠĈæbÔc¶lYi
^MicϰÂ[ävï¶gv@ÀĬ·lJ¸sn|¼u~a]ÆÈtŌºJpþ£KKf~¦UbyäIĺãnÔ¿^ŵMThĠܤko¼Ŏìąǜh`[tRd²IJ_XPrɲlXiL§à¹H°Ȧqº®QCbAŌJ¸ĕÚ³ĺ§ `d¨YjiZvRĺ±öVKkjGȊÄePĞZmļKÀ[`ösìhïÎoĬdtKÞ{¬èÒÒBÔpIJÇĬJŊ¦±J«Y§@·pHµàåVKepWftsAÅqC·¬ko«pHÆuK@oHĆÛķhxenS³àǍrqƶRbzy¸ËÐl¼EºpĤ¼x¼½~Ğà@ÚüdK^mÌSj"],"encodeOffsets":[[110234,38774]]}},{"type":"Feature","id":"620000","properties":{"id":"620000","cp":[103.823557,36.058039],"name":"甘肃","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@VuUv"],["@@ũEĠtt~nkh`Q¦ÅÄÜdwAb×ĠąJ¤DüègĺqBqj°lI¡ĨÒ¤úSHbjÎB°aZ¢KJO[|A£Dx}NìHUnrk kp¼Y kMJn[aGáÚÏ[½rc}aQxOgsPMnUsncZ
sKúvAtÞġ£®ĀYKdnFw¢JE°Latf`¼h¬we|Æbj}GA·~W`¢MC¤tL©IJ°qdfObÞĬ¹ttu`^ZúE`[@Æsîz®¡CƳƜG²R¢RmfwĸgÜą G@pzJM½mhVy¸uÈÔO±¨{LfæU¶ßGĂq\\ª¬²I¥IʼnÈīoıÓÑAçÑ|«LÝcspīðÍg
të_õ\\ĉñLYnĝgRǡÁiHLlõUĹ²uQjYi§Z_c¨´ĹĖÙ·ŋI
aBDR¹ȥr¯GºßK¨jWkɱOqWij\\aQ\\sg_ĆǛōëp»£lğÛgSŶN®À]ÓämĹãJaz¥V}Le¤Lýo¹IsŋÅÇ^bz
³tmEÁ´a¹cčecÇNĊãÁ\\č¯dNj]jZµkÓdaćå]ğij@ ©O{¤ĸm¢E·®«|@Xwg]A챝XǁÑdzªcwQÚŝñsÕ³ÛV_ý¥\\ů¥©¾÷w©WÕÊĩhÿÖÁRo¸V¬âDb¨hûxÊ×nj~Zâg|XÁnßYoº§ZÅŘv[ĭÖʃuďxcVbnUSf
B¯³_TzºÎO©çMÑ~M³]µ^püµÄY~y@X~¤Z³[Èōl@®Å¼£QK·Di¡ByÿQ_´D¥hŗy^ĭÁZ]cIzýah¹MĪğPs{ò²Vw¹t³ŜË[Ñ}X\\gsF£sPAgěp×ëfYHāďÖqēŭOÏëdLü\\it^c®Rʺ¶¢H°mrY£B¹čIoľu¶uI]vģSQ{UŻÅ}QÂ|̰ƅ¤ĩŪU ęĄÌZÒ\\v²PĔ»ƢNHĂyAmƂwVm`]ÈbH`Ì¢²ILvĜH®¤Dlt_¢JJÄämèÔDëþgºƫaʎÌrêYi~ ÎݤNpÀA¾Ĕ¼b
ð÷®üszMzÖĖQdȨýv§Tè|ªHþa¸|Ð ƒwKĢx¦ivr^ÿ ¸l öæfƟĴ·PJv}n\\h¹¶v·À|\\ƁĚN´ĜçèÁz]ġ¤²¨QÒŨTIlªťØ}¼˗ƦvÄùØE«FïËIqōTvāÜŏíÛßÛVj³âwGăÂíNOPìyV³ʼnĖýZso§HÑiYw[ß\\X¦¥c]ÔƩÜ·«jÐqvÁ¦m^ċ±R¦ƈťĚgÀ»IïĨʗƮ°ƝĻþÍAƉſ±tÍEÕÞāNUÍ¡\\ſčåÒʻĘm ƭÌŹöʥëQ¤µÇcƕªoIýIÉ_mkl³ăƓ¦j¡YzŇi}Msßõīʋ }ÁVm_[n}eıUĥ¼ªI{ΧDÓƻėojqYhĹT©oūĶ£]ďxĩǑMĝq`B´ƃ˺Чç~²ņj@¥@đ´ί}ĥtPńǾV¬ufÓÉCtÓ̻
¹£G³]ƖƾŎĪŪĘ̖¨ʈĢƂlɘ۪üºňUðǜȢƢż̌ȦǼĤŊɲĖÂKq´ï¦ºĒDzņɾªǀÞĈĂD½ĄĎÌŗĞrôñnN¼â¾ʄľԆ|DŽ֦ज़ȗlj̘̭ɺƅêgV̍ʆĠ·ÌĊv|ýĖÕWĊǎÞ´õ¼cÒÒBĢ͢UĜð͒s¨ňƃLĉÕÝ@ɛƯ÷¿ĽĹeȏijëCȚDŲyê×Ŗyò¯ļcÂßY
tÁƤyAã˾J@ǝrý@¤
rz¸oP¹ɐÚyáHĀ[Jw
cVeȴÏ»ÈĖ}ƒŰŐèȭǢόĀƪÈŶë;Ñ̆ȤМľĮEŔĹŊũ~ËUă{ĻƹɁύȩþĽvĽƓÉ@ēĽɲßǐƫʾǗĒpäWÐxnsÀ^ƆwW©¦cÅ¡Ji§vúF¶¨c~c¼īeXǚ\\đ¾JwÀďksãAfÕ¦L}waoZD½Ml«]eÒÅaɲáo½FõÛ]ĻÒ¡wYR£¢rvÓ®y®LFLzĈôe]gx}|KK}xklL]c¦£fRtív¦PĤoH{tK"]],"encodeOffsets":[[[108619,36299]],[[108589,36341]]]}},{"type":"Feature","id":"630000","properties":{"id":"630000","cp":[96.778916,35.623178],"name":"青海","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@InJm"],["@@CƽOŃĦsΰ~dz¦@@Ņi±è}ШƄ˹A³r_ĞǒNĪĐw¤^ŬĵªpĺSZgrpiƼĘÔ¨C|ÍJ©Ħ»®VIJ~f\\m `UnÂ~ʌĬàöNt~ňjy¢ZiƔ¥Ąk´nl`JÊJþ©pdƖ®È£¶ìRʦźõƮËnʼėæÑƀĎ[¢VÎĂMÖÝÎF²sƊƀÎBļýƞ¯ʘƭðħ¼Jh¿ŦęΌƇ¥²Q]Č¥nuÂÏri¸¬ƪÛ^Ó¦d¥[Wà
x\\ZjÒ¨GtpþYŊĕ´zUOëPîMĄÁxH´áiÜUàîÜŐĂÛSuŎrJð̬EFÁú×uÃÎkrĒ{V}İ«O_ÌËĬ©ÓŧSRѱ§Ģ£^ÂyèçěM³Ƃę{[¸¿u
ºµ[gt£¸OƤĿéYõ·kĀq]juw¥DĩƍõÇPéĽG©ã¤G
uȧþRcÕĕNyyûtøï»a½ē¿BMoį£Íj}éZËqbʍƬh¹ìÿÓAçãnIáI`ks£CGěUy×Cy
@¶ʡÊBnāzGơMē¼±O÷õJËĚăVĪũƆ£¯{ËL½ÌzżVR|ĠTbuvJvµhĻĖHAëáa
OÇðñęNw
œľ·LmI±íĠĩPÉ×®ÿscB³±JKßĊ«`
ađ»·QAmOVţéÿ¤¹SQt]]Çx±¯A@ĉij¢Óļ©l¶ÅÛrŕspãRk~¦ª]Į´FRådČsCqđéFn¿ÅƃmÉx{W©ºƝºįkÕƂƑ¸wWūЩÈF£\\tÈ¥ÄRÈýÌJ lGr^×äùyÞ³fjc¨£ÂZ|ǓMĝÏ@ëÜőRĝ÷¡{aïȷPu°ËXÙ{©TmĠ}Y³ÞIňµç½©C¡į÷¯B»|St»]vųs»}MÓ ÿʪƟǭA¡fs»PY¼c¡»¦cċ¥£~msĉPSi^o©AecPeǵkgyUi¿h}aHĉ^|á´¡HØûÅ«ĉ®]m¡qĉ¶³ÈyôōLÁstB®wn±ă¥HSòė£Së@לÊăxÇN©©T±ª£IJ¡fb®Þbb_Ą¥xu¥B{łĝ³«`dƐt¤ťiñÍUuºí`£^tƃIJc·ÛLO½sç¥Ts{ă\\_»kϱq©čiìĉ|ÍI¥ć¥]ª§D{ŝŖÉR_sÿc³ĪōƿΧp[ĉc¯bKmR¥{³Ze^wx¹dƽŽôIg §Mĕ ƹĴ¿ǣÜÍ]Ý]snåA{eƭ`ǻŊĿ\\ijŬűYÂÿ¬jĖqßb¸L«¸©@ěĀ©ê¶ìÀEH|´bRľÓ¶rÀQþvl®ÕETzÜdb hw¤{LRdcb¯ÙVgƜßzÃôì®^jUèXÎ|UäÌ»rK\\ªN¼pZCüVY¤ɃRi^rPŇTÖ}|br°qňb̰ªiƶGQ¾²x¦PmlŜ[Ĥ¡ΞsĦÔÏâ\\ªÚŒU\\f
¢N²§x|¤§xĔsZPòʛ²SÐqF`ªVÞŜĶƨVZÌL`¢dŐIqr\\oäõF礻Ŷ×h¹]ClÙ\\¦ďÌį¬řtTӺƙgQÇÓHţĒ´ÃbEÄlbʔC|CŮkƮ[ʼ¬ň´KŮÈΰÌζƶlðļATUvdTGº̼ÔsÊDÔveOg"]],"encodeOffsets":[[[105308,37219]],[[95370,40081]]]}},{"type":"Feature","id":"640000","properties":{"id":"640000","cp":[106.278179,37.26637],"name":"宁夏","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@KëÀęĞ«Oęȿȕı]ʼn¡åįÕÔ«ǴõƪĚQÐZhv K°öqÀÑS[ÃÖHƖčËnL]ûc
Ùß@ĝ¾}w»»oģF¹»kÌÏ·{zP§B¢íyÅt@@á]Yv_ssģ¼ißĻL¾ġsKD£¡N_
X¸}B~HaiÅf{«x»ge_bsKF¯¡IxmELcÿZ¤ĢÝsuBLùtYdmVtNmtOPhRw~bd
¾qÐ\\âÙH\\bImlNZ»loqlVmGā§~QCw¤{A\\PKNY¯bFkC¥sks_Ã\\ă«¢ħkJi¯rrAhĹûç£CUĕĊ_ÔBixÅÙĄnªÑaM~ħpOu¥sîeQ¥¤^dkKwlL~{L~hw^ófćKyEKzuÔ¡qQ¤xZÑ¢^ļöܾEp±âbÊÑÆ^fk¬
NC¾YpxbK~¥eÖäBlt¿Đx½I[ĒǙWf»Ĭ}d§dµùEuj¨IÆ¢¥dXªƅx¿]mtÏwßRĶX¢͎vÆzƂZò®ǢÌʆCrâºMÞzÆMÒÊÓŊZľr°Î®Ȉmª²ĈUªĚîøºĮ¦ÌĘk^FłĬhĚiĀ˾iİbjÕ"],["@@mfwěwMrŢªv@G"]],"encodeOffsets":[[[109366,40242]],[[108600,36303]]]}},{"type":"Feature","id":"650000","properties":{"id":"650000","cp":[85.617733,40.792818],"name":"新疆","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@QØĔ²X¨~ǘBºjʐߨvKƔX¨vĊO÷¢i@~cĝe_«E}QxgɪëÏÃ@sÅyXoŖ{ô«ŸuX
êÎf`C¹ÂÿÐGĮÕĞXŪōŸMźÈƺQèĽôe|¿ƸJR¤ĘEjcUóº¯Ĩ_ŘÁMª÷Ð¥OéÈ¿ÖğǤǷÂFÒzÉx[]Ĥĝœ¦EP}ûƥé¿İƷTėƫœŕƅƱB»Đ±ēO
¦E}`cȺrĦáŖuÒª«IJπdƺÏØZƴwʄ¤ĖGĐǂZĶèH¶}ÚZצʥĪï|ÇĦMŔ»İĝLjì¥Βba¯¥ǕǚkĆŵĦɑĺƯxūД̵nơʃĽá½M»òmqóŘĝč˾ăC
ćāƿÝɽ©DZҹđ¥³ðLrÁ®ɱĕģʼnǻ̋ȥơŻǛȡVï¹Ň۩ûkɗġƁ§ʇė̕ĩũƽō^ƕUv£ƁQïƵkŏ½ΉÃŭdzLŇʻ«ƭ\\lŭD{ʓDkaFÃÄa³ŤđÔGRÈƚhSӹŚsİ«ĐË[¥ÚDkº^Øg¼ŵ¸£EÍöůʼnT¡c_ËKYƧUśĵÝU_©rETÏʜ±OñtYwē¨{£¨uM³x½şL©Ùá[ÓÐĥ Νtģ¢\\śnkOw¥±T»ƷFɯàĩÞáB¹Æ
ÑUwŕĽw[mG½Èå~Æ÷QyěCFmĭZīŵVÁƿQƛûXS²b½KϽĉS©ŷXĕ{ĕK·¥Ɨcqq©f¿]ßDõU³hgËÇïģÉɋwk¯í}I·œbmÉřīJɥĻˁ×xoɹīlc
¤³Xù]DžA¿w͉ì¥wÇN·ÂËnƾƍdǧđ®ƝvUm©³G\\}µĿQyŹlăµEwLJQ½yƋBe¶ŋÀůo¥AÉw@{Gpm¿AijŽKLh³`ñcËtW±»ÕSëüÿďDu\\wwwù³VLŕOMËGh£õP¡erÏd{ġWÁ
č|yšg^ğyÁzÙs`s|ÉåªÇ}m¢Ń¨`x¥ù^}Ì¥H«YªƅAйn~ź¯f¤áÀzgÇDIÔ´AňĀÒ¶ûEYospõD[{ù°]uJqU|Soċxţ[õÔĥkŋÞŭZ˺óYËüċrw ÞkrťË¿XGÉbřaDü·Ē÷Aê[ÄäI®BÕĐÞ_¢āĠpÛÄȉĖġDKwbmÄNôfƫVÉvidzHQµâFùœ³¦{YGd¢ĚÜO {Ö¦ÞÍÀP^bƾl[vt×ĈÍE˨¡Đ~´î¸ùÎhuè`¸HÕŔVºwĠââWò@{ÙNÝ´ə²ȕn{¿¥{l÷eé^eďXj©î\\ªÑòÜìc\\üqÕ[Č¡xoÂċªbØø|¶ȴZdÆÂońéG\\¼C°ÌÆn´nxÊOĨŪƴĸ¢¸òTxÊǪMīĞÖŲÃɎOvʦƢ~FRěò¿ġ~åŊúN¸qĘ[Ĕ¶ÂćnÒPĒÜvúĀÊbÖ{Äî¸~Ŕünp¤ÂH¾ĄYÒ©ÊfºmÔĘcDoĬMŬS¤s²ʘÚžȂVŦ èW°ªB|IJXŔþÈJĦÆæFĚêYĂªĂ]øªŖNÞüAfɨJ¯ÎrDDĤ`mz\\§~D¬{vJ«lµĂb¤pŌŰNĄ¨ĊXW|ų ¿¾ɄĦƐMTòP÷fØĶK¢ȝ˔Sô¹òEð`Ɩ½ǒÂň×äı§ĤƝ§C~¡hlåǺŦŞkâ~}FøàIJaĞfƠ¥Ŕd®U¸źXv¢aƆúŪtŠųƠjdƺƺÅìnrh\\ĺ¯äɝĦ]èpĄ¦´LƞĬ´ƤǬ˼Ēɸ¤rºǼ²¨zÌPðŀbþ¹ļD¢¹\\ĜÑŚ¶ZƄ³àjĨoâȴLÊȮĐĚăÀêZǚŐ¤qȂ\\L¢ŌİfÆs|zºeªÙæ§{Ā´ƐÚ¬¨Ĵà²łhʺKÞºÖTiƢ¾ªì°`öøu®Ê¾ãØ"],"encodeOffsets":[[88824,50096]]}},{"type":"Feature","id":"110000","properties":{"id":"110000","cp":[116.405285,39.904989],"name":"北京","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ĽOÁûtŷmiÍt_H»Ĩ±d`¹{bw
Yr³S]§§o¹qGtm_SŧoaFLgQN_dV@Zom_ć\\ßc±x¯oœRcfe
£o§ËgToÛJíĔóu
|wP¤XnO¢ÉŦ¯rNÄā¤zâŖÈRpŢZÚ{GrFt¦Òx§ø¹RóäV¤XdżâºWbwڍUd®bêņ¾jnŎGŃŶnzÚSeîĜZczî¾i]ÍQaúÍÔiþĩȨWĢü|Ėu[qb[swP@ÅğP¿{\\¥A¨ÏѨj¯X\\¯MKpA³[H
īu}}"],"encodeOffsets":[[120023,41045]]}},{"type":"Feature","id":"120000","properties":{"id":"120000","cp":[117.190182,39.125596],"name":"天津","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ŬgX§Ü«E
¶F̬O_ïlÁgz±AXeµÄĵ{¶]gitgIj·¥îakS¨ÐƎk}ĕ{gBqGf{¿aU^fIư³õ{YıëNĿk©ïËZŏR§òoY×Ógc
ĥs¡bġ«@dekąI[nlPqCnp{ō³°`{PNdƗqSÄĻNNâyj]äÒD ĬH°Æ]~¡HO¾X}ÐxgpgWrDGpù^LrzWxZ^¨´T\\|~@IzbĤjeĊªz£®ĔvěLmV¾Ô_ÈNW~zbĬvG²ZmDM~~"],"encodeOffsets":[[120237,41215]]}},{"type":"Feature","id":"310000","properties":{"id":"310000","cp":[121.472644,31.231706],"name":"上海","childNum":6},"geometry":{"type":"MultiPolygon","coordinates":[["@@ɧư¬EpƸÁxc"],["@@©ª"],["@@MA"],["@@QpİE§ÉC¾"],["@@bŝÕÕEȣÚƥêImɇǦèÜĠÚÃƌÃ͎ó"],["@@ǜûȬɋŭ×^sYɍDŋŽąñCG²«ªč@h_p¯A{oloY¬j@IJ`gQÚhr|ǀ^MIJvtbe´R¯Ô¬¨Yô¤r]ìƬį"]],"encodeOffsets":[[[124702,32062]],[[124547,32200]],[[124808,31991]],[[124726,32110]],[[124903,32376]],[[124438,32149]]]}},{"type":"Feature","id":"500000","properties":{"id":"500000","cp":[107.304962,29.533155],"name":"重庆","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@vjG~nGŘŬĶȂƀƾ¹¸ØÎezĆT¸}êÐqHðqĖä¥^CÆIj²p
\\_ æüY|[YxƊæu°xb®
Űb@~¢NQt°¶Sæ Ê~rljĔëĚ¢~uf`faĔJåĊnÖ]jƎćÊ@£¾a®£Ű{ŶĕFègLk{Y|¡ĜWƔtƬJÑxq±ĢN´òKLÈüD|s`ŋć]Ã`đMûƱ½~Y°ħ`ƏíW½eI½{aOIrÏ¡ĕŇapµÜƅġ^ÖÛbÙŽŏml½SêqDu[RãË»ÿw`»y¸_ĺę}÷`M¯ċfCVµqʼn÷Zgg`d½pDOÎCn^uf²ènh¼WtƏxRGg¦
pVFI±G^Ic´ecGĹÞ½sëĬhxW}KÓeXsbkF¦LØgTkïƵNï¶}Gyw\\oñ¡nmĈzj@Óc£»Wă¹Ój_m»¹·~MvÛaq»ê\\ÂoVnÓØÍ²«bq¿efE Ĝ^Q~ Évýş¤²ĮpEİ}zcĺL½¿gÅ¡ýE¡ya£³t\\¨\\vú»¼§·Ñr_oÒý¥u_n»_At©Þűā§IVeëY}{VPÀFA¨ąB}q@|Ou\\FmQFÝ
Mwå}]|FmÏCawu_p¯sfÙgY
DHl`{QEfNysB¦zG¸rHeN\\CvEsÐùÜ_·ÖĉsaQ¯}_UxÃđqNH¬Äd^ÝŰR¬ã°wećJE·vÝ·HgéFXjÉê`|ypxkAwWĐpb¥eOsmzwqChóUQl¥F^lafanòsrEvfQdÁUVfÎvÜ^eftET¬ôA\\¢sJnQTjPØxøK|nBzĞ»LY
FDxÓvr[ehľvN¢o¾NiÂxGpâ¬zbfZo~hGi]öF||NbtOMn eA±tPTLjpYQ|SHYĀxinzDJÌg¢và¥Pg_ÇzIIII£®S¬Øsμ£N"],["@@ifjN@s"]],"encodeOffsets":[[[109628,30765]],[[111725,31320]]]}},{"type":"Feature","id":"810000","properties":{"id":"810000","cp":[114.173355,22.320048],"name":"香港","childNum":5},"geometry":{"type":"MultiPolygon","coordinates":[["@@AlBk"],["@@mn"],["@@EpFo"],["@@ea¢pl¸Eõ¹hj[]ÔCÎ@lj¡uBX
´AI¹
[yDU]W`çwZkmc
MpÅv}IoJlcafŃK°ä¬XJmÐ đhI®æÔtSHnEÒrÈc"],["@@rMUwAS®e"]],"encodeOffsets":[[[117111,23002]],[[117072,22876]],[[117045,22887]],[[116975,23082]],[[116882,22747]]]}},{"type":"Feature","id":"820000","properties":{"id":"820000","cp":[113.54909,22.198951],"name":"澳门","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@kÊd°å§s"],"encodeOffsets":[[116279,22639]]}}],"UTF8Encoding":true});
+}));
diff --git a/weibo_flask/static/assets/js/dataTool.min.js b/weibo_flask/static/assets/js/dataTool.min.js
new file mode 100644
index 0000000..73776c5
--- /dev/null
+++ b/weibo_flask/static/assets/js/dataTool.min.js
@@ -0,0 +1,22 @@
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("echarts")):"function"==typeof define&&define.amd?define(["exports","echarts"],t):t((e=e||self).dataTool={},e.echarts)}(this,function(e,t){"use strict";var r=Array.prototype,i=r.slice,l=r.map,o=function(){}.constructor,r=o?o.prototype:null;function a(e,t,r){if(!e)return[];if(!t)return function(e){for(var t=[],r=1;r=10&&r++,r}return{isNumber:r,isInteger:t,quantityExponent:e}}.call(r,t,r,n),!(void 0!==e&&(n.exports=e))},function(n,r,t){var e;e=function(n){function r(n){for(var r=[];t(n);)r.push(n.length),n=n[0];return r}function t(n){return"[object Array]"===l.call(n)}function e(n,r){for(var t=[],e=0;er?1:n0)e=o;else{if(!(i<0))return o+1;t=o+1}}return t}function s(n,r,t){if(n&&r){if(n.map&&n.map===c)return n.map(r,t);for(var e=[],o=0,i=n.length;o=1)return n[t-1];var e=(t-1)*r,o=Math.floor(e),i=n[o],a=n[o+1];return i+(a-i)*(e-o)}}.call(r,t,r,n),!(void 0!==e&&(n.exports=e))},function(n,r,t){var e;e=function(n){function r(n,r){function t(n,r){if(!n)throw new Error("Can not find dimension by "+r)}if(null!=r){var e=n.upstream;if(o.isArray(r)){for(var i=[],a=0;as&&(u.min=s),u.max0?w[E-1]:w[E]-c===M?c:w[E]-M,D[E].x1=E50?50:r},scott:function(n,r,t){return Math.ceil((t-r)/(3.5*a(n)*Math.pow(n.length,-1/3)))},freedmanDiaconis:function(n,r,t){return n.sort(c),Math.ceil((t-r)/(2*(i(n,.75)-i(n,.25))*Math.pow(n.length,-1/3)))},sturges:function(n){return Math.ceil(Math.log(n.length)/Math.LN2)+1}};return r}.call(r,t,r,n),!(void 0!==e&&(n.exports=e))},function(n,r,t){var e;e=function(n){function r(n,r){for(var t=0;tMath.abs(n[t][e])&&(e=o);for(var i=t;i=t;s--)n[s][u]-=n[s][t]/n[t][t]*n[t][u]}for(var l=new Array(r),f=n.length-1,o=n.length-2;o>=0;o--){for(var a=0,t=o+1;t=0;l--)w+=l>1?Math.round(g[l]*Math.pow(10,l+1))/Math.pow(10,l+1)+"x^"+l+" + ":1===l?Math.round(100*g[l])/100+"x + ":Math.round(100*g[l])/100;return{points:x,parameter:g,expression:w}}},u=function(n,r,t){var e="number"==typeof t?{order:t}:t||{},u=i(e.dimensions,[0,1]),s=o(r,{dimensions:u}),l=a[n](s,{order:e.order,dimensions:u}),f=u[0];return l.points.sort(function(n,r){return n[f]-r[f]}),l};return u}.call(r,t,r,n),!(void 0!==e&&(n.exports=e))},function(n,r,t){var e;e=function(n){var r=t(13);return function(n){var t=r(n);return t?Math.sqrt(t):t}}.call(r,t,r,n),!(void 0!==e&&(n.exports=e))},function(n,r,t){var e;e=function(n){function r(n){for(var r=-(1/0),t=0;tr&&(r=n[t]);return r}var e=t(1),o=e.isNumber;return r}.call(r,t,r,n),!(void 0!==e&&(n.exports=e))},function(n,r,t){var e;e=function(n){function r(n){var r=n.length;return r?e(n)/n.length:0}var e=t(14);return r}.call(r,t,r,n),!(void 0!==e&&(n.exports=e))},function(n,r,t){var e;e=function(n){function r(n){for(var r=1/0,t=0;t=2){for(var t,e=i(n),a=0,u=0;u=Math.sqrt(50)?a*=10:u>=Math.sqrt(10)?a*=5:u>=Math.sqrt(2)&&(a*=2);var s=i<0?-i:0,l=+(t>=n?a:-a).toFixed(s);return{step:l,toFixedPrecision:s}}}.call(r,t,r,n),!(void 0!==e&&(n.exports=e))}])});
\ No newline at end of file
diff --git a/weibo_flask/static/assets/js/echarts-gl.min.js b/weibo_flask/static/assets/js/echarts-gl.min.js
new file mode 100644
index 0000000..a77b680
--- /dev/null
+++ b/weibo_flask/static/assets/js/echarts-gl.min.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("echarts")):"function"==typeof define&&define.amd?define(["echarts"],t):"object"==typeof exports?exports["echarts-gl"]=t(require("echarts")):e["echarts-gl"]=t(e.echarts)}(self,(function(e){return(()=>{"use strict";var t={501:(e,t,r)=>{r.r(t);var i=r(83);function n(e,t,r){"object"==typeof t&&(r=t,t=null);var i,n=this;if(!(e instanceof Function))for(var s in i=[],e)e.hasOwnProperty(s)&&i.push(s);var l=function(t){if(n.apply(this,arguments),e instanceof Function?a(this,e.call(this,t)):o(this,e,i),this.constructor===l)for(var r=l.__initializers__,s=0;s=400?e.onerror&&e.onerror():e.onload&&e.onload(t.response)},e.onerror&&(t.onerror=e.onerror),t.send(null)}};var B,z={supportWebGL:function(){if(null==B)try{var e=document.createElement("canvas");if(!e.getContext("webgl")&&!e.getContext("experimental-webgl"))throw new Error}catch(e){B=!1}return B}};z.Int8Array="undefined"==typeof Int8Array?Array:Int8Array,z.Uint8Array="undefined"==typeof Uint8Array?Array:Uint8Array,z.Uint16Array="undefined"==typeof Uint16Array?Array:Uint16Array,z.Uint32Array="undefined"==typeof Uint32Array?Array:Uint32Array,z.Int16Array="undefined"==typeof Int16Array?Array:Int16Array,z.Float32Array="undefined"==typeof Float32Array?Array:Float32Array,z.Float64Array="undefined"==typeof Float64Array?Array:Float64Array;var G={};"undefined"!=typeof window?G=window:void 0!==r.g&&(G=r.g),z.requestAnimationFrame=G.requestAnimationFrame||G.msRequestAnimationFrame||G.mozRequestAnimationFrame||G.webkitRequestAnimationFrame||function(e){setTimeout(e,16)},z.createCanvas=function(){return document.createElement("canvas")},z.createImage=function(){return new G.Image},z.request={get:F.get},z.addEventListener=function(e,t,r,i){e.addEventListener(t,r,i)},z.removeEventListener=function(e,t,r){e.removeEventListener(t,r)};const U=z;var k=function(){this.head=null,this.tail=null,this._length=0};k.prototype.insert=function(e){var t=new k.Entry(e);return this.insertEntry(t),t},k.prototype.insertAt=function(e,t){if(!(e<0)){for(var r=this.head,i=0;r&&i!=e;)r=r.next,i++;if(r){var n=new k.Entry(t),a=r.prev;a?(a.next=n,n.prev=a):this.head=n,n.next=r,r.prev=n}else this.insert(t)}},k.prototype.insertBeforeEntry=function(e,t){var r=new k.Entry(e),i=t.prev;i?(i.next=r,r.prev=i):this.head=r,r.next=t,t.prev=r,this._length++},k.prototype.insertEntry=function(e){this.head?(this.tail.next=e,e.prev=this.tail,this.tail=e):this.head=this.tail=e,this._length++},k.prototype.remove=function(e){var t=e.prev,r=e.next;t?t.next=r:this.head=r,r?r.prev=t:this.tail=t,e.next=e.prev=null,this._length--},k.prototype.removeAt=function(e){if(!(e<0)){for(var t=this.head,r=0;t&&r!=e;)t=t.next,r++;return t?(this.remove(t),t.value):void 0}},k.prototype.getHead=function(){if(this.head)return this.head.value},k.prototype.getTail=function(){if(this.tail)return this.tail.value},k.prototype.getAt=function(e){if(!(e<0)){for(var t=this.head,r=0;t&&r!=e;)t=t.next,r++;return t.value}},k.prototype.indexOf=function(e){for(var t=this.head,r=0;t;){if(t.value===e)return r;t=t.next,r++}},k.prototype.length=function(){return this._length},k.prototype.isEmpty=function(){return 0===this._length},k.prototype.forEach=function(e,t){for(var r=this.head,i=0,n=void 0!==t;r;)n?e.call(t,r.value,i):e(r.value,i),r=r.next,i++},k.prototype.clear=function(){this.tail=this.head=null,this._length=0},k.Entry=function(e){this.value=e,this.next=null,this.prev=null};const V=k;var H=function(e){this._list=new V,this._map={},this._maxSize=e||10};H.prototype.setMaxSize=function(e){this._maxSize=e},H.prototype.put=function(e,t){if(!this._map.hasOwnProperty(e)){var r=this._list.length();if(r>=this._maxSize&&r>0){var i=this._list.head;this._list.remove(i),delete this._map[i.key]}var n=this._list.insert(t);n.key=e,this._map[e]=n}},H.prototype.get=function(e){var t=this._map[e];if(this._map.hasOwnProperty(e))return t!==this._list.tail&&(this._list.remove(t),this._list.insertEntry(t)),t.value},H.prototype.remove=function(e){var t=this._map[e];void 0!==t&&(delete this._map[e],this._list.remove(t))},H.prototype.clear=function(){this._list.clear(),this._map={}};const W=H;var j={},X={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function q(e){return(e=Math.round(e))<0?0:e>255?255:e}function Z(e){return e<0?0:e>1?1:e}function Y(e){return e.length&&"%"===e.charAt(e.length-1)?q(parseFloat(e)/100*255):q(parseInt(e,10))}function K(e){return e.length&&"%"===e.charAt(e.length-1)?Z(parseFloat(e)/100):Z(parseFloat(e))}function Q(e,t,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?e+(t-e)*r*6:2*r<1?t:3*r<2?e+(t-e)*(2/3-r)*6:e}function J(e,t,r){return e+(t-e)*r}function $(e,t,r,i,n){return e[0]=t,e[1]=r,e[2]=i,e[3]=n,e}function ee(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}var te=new W(20),re=null;function ie(e,t){re&&ee(re,t),re=te.put(e,re||t.slice())}function ne(e,t){var r=(parseFloat(e[0])%360+360)%360/360,i=K(e[1]),n=K(e[2]),a=n<=.5?n*(i+1):n+i-n*i,o=2*n-a;return $(t=t||[],q(255*Q(o,a,r+1/3)),q(255*Q(o,a,r)),q(255*Q(o,a,r-1/3)),1),4===e.length&&(t[3]=e[3]),t}j.parse=function(e,t){if(e){t=t||[];var r=te.get(e);if(r)return ee(t,r);var i,n=(e+="").replace(/ /g,"").toLowerCase();if(n in X)return ee(t,X[n]),ie(e,t),t;if("#"===n.charAt(0))return 4===n.length?(i=parseInt(n.substr(1),16))>=0&&i<=4095?($(t,(3840&i)>>4|(3840&i)>>8,240&i|(240&i)>>4,15&i|(15&i)<<4,1),ie(e,t),t):void $(t,0,0,0,1):7===n.length?(i=parseInt(n.substr(1),16))>=0&&i<=16777215?($(t,(16711680&i)>>16,(65280&i)>>8,255&i,1),ie(e,t),t):void $(t,0,0,0,1):void 0;var a=n.indexOf("("),o=n.indexOf(")");if(-1!==a&&o+1===n.length){var s=n.substr(0,a),l=n.substr(a+1,o-(a+1)).split(","),h=1;switch(s){case"rgba":if(4!==l.length)return void $(t,0,0,0,1);h=K(l.pop());case"rgb":return 3!==l.length?void $(t,0,0,0,1):($(t,Y(l[0]),Y(l[1]),Y(l[2]),h),ie(e,t),t);case"hsla":return 4!==l.length?void $(t,0,0,0,1):(l[3]=K(l[3]),ne(l,t),ie(e,t),t);case"hsl":return 3!==l.length?void $(t,0,0,0,1):(ne(l,t),ie(e,t),t);default:return}}$(t,0,0,0,1)}},j.parseToFloat=function(e,t){if(t=j.parse(e,t))return t[0]/=255,t[1]/=255,t[2]/=255,t},j.lift=function(e,t){var r=j.parse(e);if(r){for(var i=0;i<3;i++)r[i]=t<0?r[i]*(1-t)|0:(255-r[i])*t+r[i]|0;return j.stringify(r,4===r.length?"rgba":"rgb")}},j.toHex=function(e){var t=j.parse(e);if(t)return((1<<24)+(t[0]<<16)+(t[1]<<8)+ +t[2]).toString(16).slice(1)},j.fastLerp=function(e,t,r){if(t&&t.length&&e>=0&&e<=1){r=r||[];var i=e*(t.length-1),n=Math.floor(i),a=Math.ceil(i),o=t[n],s=t[a],l=i-n;return r[0]=q(J(o[0],s[0],l)),r[1]=q(J(o[1],s[1],l)),r[2]=q(J(o[2],s[2],l)),r[3]=Z(J(o[3],s[3],l)),r}},j.fastMapToColor=j.fastLerp,j.lerp=function(e,t,r){if(t&&t.length&&e>=0&&e<=1){var i=e*(t.length-1),n=Math.floor(i),a=Math.ceil(i),o=j.parse(t[n]),s=j.parse(t[a]),l=i-n,h=j.stringify([q(J(o[0],s[0],l)),q(J(o[1],s[1],l)),q(J(o[2],s[2],l)),Z(J(o[3],s[3],l))],"rgba");return r?{color:h,leftIndex:n,rightIndex:a,value:i}:h}},j.mapToColor=j.lerp,j.modifyHSL=function(e,t,r,i){if(e=j.parse(e))return e=function(e){if(e){var t,r,i=e[0]/255,n=e[1]/255,a=e[2]/255,o=Math.min(i,n,a),s=Math.max(i,n,a),l=s-o,h=(s+o)/2;if(0===l)t=0,r=0;else{r=h<.5?l/(s+o):l/(2-s-o);var u=((s-i)/6+l/2)/l,c=((s-n)/6+l/2)/l,d=((s-a)/6+l/2)/l;i===s?t=d-c:n===s?t=1/3+u-d:a===s&&(t=2/3+c-u),t<0&&(t+=1),t>1&&(t-=1)}var f=[360*t,r,h];return null!=e[3]&&f.push(e[3]),f}}(e),null!=t&&(e[0]=(n=t,(n=Math.round(n))<0?0:n>360?360:n)),null!=r&&(e[1]=K(r)),null!=i&&(e[2]=K(i)),j.stringify(ne(e),"rgba");var n},j.modifyAlpha=function(e,t){if((e=j.parse(e))&&null!=t)return e[3]=Z(t),j.stringify(e,"rgba")},j.stringify=function(e,t){if(e&&e.length){var r=e[0]+","+e[1]+","+e[2];return"rgba"!==t&&"hsva"!==t&&"hsla"!==t||(r+=","+e[3]),t+"("+r+")"}};var ae=j.parseToFloat,oe={};function se(e){var t=Object.keys(e);t.sort();for(var r=[],i=0;i=0},getEnabledUniforms:function(){return this._enabledUniforms},getTextureUniforms:function(){return this._textureUniforms},set:function(e,t){if("object"==typeof e)for(var r in e){var i=e[r];this.setUniform(r,i)}else this.setUniform(e,t)},get:function(e){var t=this.uniforms[e];if(t)return t.value},attachShader:function(e,t){var r=this.uniforms;this.uniforms=e.createUniforms(),this.shader=e;var i=this.uniforms;this._enabledUniforms=Object.keys(i),this._enabledUniforms.sort(),this._textureUniforms=this._enabledUniforms.filter((function(e){var t=this.uniforms[e].type;return"t"===t||"tv"===t}),this);var n=this.vertexDefines,a=this.fragmentDefines;if(this.vertexDefines=f.clone(e.vertexDefines),this.fragmentDefines=f.clone(e.fragmentDefines),t){for(var o in r)i[o]&&(i[o].value=r[o].value);f.defaults(this.vertexDefines,n),f.defaults(this.fragmentDefines,a)}var s={};for(var l in e.textures)s[l]={shaderType:e.textures[l].shaderType,type:e.textures[l].type,enabled:!(!t||!this._textureStatus[l])&&this._textureStatus[l].enabled};this._textureStatus=s,this._programKey=""},clone:function(){var e=new this.constructor({name:this.name,shader:this.shader});for(var t in this.uniforms)e.uniforms[t].value=this.uniforms[t].value;return e.depthTest=this.depthTest,e.depthMask=this.depthMask,e.transparent=this.transparent,e.blend=this.blend,e.vertexDefines=f.clone(this.vertexDefines),e.fragmentDefines=f.clone(this.fragmentDefines),e.enableTexture(this.getEnabledTextures()),e.precision=this.precision,e},define:function(e,t,r){var i=this.vertexDefines,n=this.fragmentDefines;"vertex"!==e&&"fragment"!==e&&"both"!==e&&arguments.length<3&&(r=t,t=e,e="both"),r=null!=r?r:null,"vertex"!==e&&"both"!==e||i[t]!==r&&(i[t]=r,this._programKey=""),"fragment"!==e&&"both"!==e||n[t]!==r&&(n[t]=r,"both"!==e&&(this._programKey=""))},undefine:function(e,t){"vertex"!==e&&"fragment"!==e&&"both"!==e&&arguments.length<2&&(t=e,e="both"),"vertex"!==e&&"both"!==e||this.isDefined("vertex",t)&&(delete this.vertexDefines[t],this._programKey=""),"fragment"!==e&&"both"!==e||this.isDefined("fragment",t)&&(delete this.fragmentDefines[t],"both"!==e&&(this._programKey=""))},isDefined:function(e,t){switch(e){case"vertex":return void 0!==this.vertexDefines[t];case"fragment":return void 0!==this.fragmentDefines[t]}},getDefine:function(e,t){switch(e){case"vertex":return this.vertexDefines[t];case"fragment":return this.fragmentDefines[t]}},enableTexture:function(e){if(Array.isArray(e))for(var t=0;t0&&(n=1/Math.sqrt(n),e[0]=t[0]*n,e[1]=t[1]*n),e},fe.dot=function(e,t){return e[0]*t[0]+e[1]*t[1]},fe.cross=function(e,t,r){var i=t[0]*r[1]-t[1]*r[0];return e[0]=e[1]=0,e[2]=i,e},fe.lerp=function(e,t,r,i){var n=t[0],a=t[1];return e[0]=n+i*(r[0]-n),e[1]=a+i*(r[1]-a),e},fe.random=function(e,t){t=t||1;var r=2*GLMAT_RANDOM()*Math.PI;return e[0]=Math.cos(r)*t,e[1]=Math.sin(r)*t,e},fe.transformMat2=function(e,t,r){var i=t[0],n=t[1];return e[0]=r[0]*i+r[2]*n,e[1]=r[1]*i+r[3]*n,e},fe.transformMat2d=function(e,t,r){var i=t[0],n=t[1];return e[0]=r[0]*i+r[2]*n+r[4],e[1]=r[1]*i+r[3]*n+r[5],e},fe.transformMat3=function(e,t,r){var i=t[0],n=t[1];return e[0]=r[0]*i+r[3]*n+r[6],e[1]=r[1]*i+r[4]*n+r[7],e},fe.transformMat4=function(e,t,r){var i=t[0],n=t[1];return e[0]=r[0]*i+r[4]*n+r[12],e[1]=r[1]*i+r[5]*n+r[13],e},fe.forEach=(he=fe.create(),function(e,t,r,i,n,a){var o,s;for(t||(t=2),r||(r=0),s=i?Math.min(i*t+r,e.length):e.length,o=r;o0&&i.push("#define "+n.toUpperCase()+"_COUNT "+a)}if(r)for(var o=0;ol.getMaxJointNumber()&&(d.USE_SKIN_MATRICES_TEXTURE=null),c+="\n"+Me(d)+"\n"}a&&(c+="\n#define INSTANCING\n");var f=c+Me(t.vertexDefines,s,u),p=c+Me(t.fragmentDefines,s,u),m=f+"\n"+t.shader.vertex,g=["OES_standard_derivatives","EXT_shader_texture_lod"].filter((function(e){return null!=l.getGLExtension(e)}));g.indexOf("EXT_shader_texture_lod")>=0&&(p+="\n#define SUPPORT_TEXTURE_LOD"),g.indexOf("OES_standard_derivatives")>=0&&(p+="\n#define SUPPORT_STANDARD_DERIVATIVES");var _,v,y=function(e){for(var t=[],r=0;r=0){if(1!==s&&4!==s){ke();break}s=2,h=[]}else if(1!==s)if(4!==s)u(c),s=0;else{var d=c;Ie.indexOf(d)>=0||Re.indexOf(d)>=0||Fe.indexOf(d)>=0?l[o].semantic=d:"ignore"===d||"unconfigurable"===d?l[o].ignore=!0:l[o].value="bool"===e?"true"===d:parseFloat(d)}else l[o].value="bool"===e?"true"===c:parseFloat(c),h=null;else{if(2!==s){ke();break}if(!(h instanceof Array)){ke();break}h.push(+i[++a])}else l[o].value=new U.Float32Array(h),h=null,s=5;else if(2===s){if(!(h instanceof Array)){ke();break}h.push(+i[++a])}else s=5;else s=4;else{if(0!==s&&3!==s){ke();break}s=1}}return l}function He(e,t){"object"==typeof e&&(t=e.fragment,e=e.vertex),e=Ue(e),t=Ue(t),this._shaderID=function(e,t){var r="vertex:"+e+"fragment:"+t;if(ze[r])return ze[r];var i=f.genGUID();return ze[r]=i,Ge[i]={vertex:e,fragment:t},i}(e,t),this._vertexCode=He.parseImport(e),this._fragmentCode=He.parseImport(t),this.attributeSemantics={},this.matrixSemantics={},this.uniformSemantics={},this.matrixSemanticKeys=[],this.uniformTemplates={},this.attributes={},this.textures={},this.vertexDefines={},this.fragmentDefines={},this._parseAttributes(),this._parseUniforms(),this._parseDefines()}He.prototype={constructor:He,createUniforms:function(){var e={};for(var t in this.uniformTemplates){var r=this.uniformTemplates[t];e[t]={type:r.type,value:r.value()}}return e},_parseImport:function(){this._vertexCode=He.parseImport(this.vertex),this._fragmentCode=He.parseImport(this.fragment)},_addSemanticUniform:function(e,t,r){if(Ie.indexOf(r)>=0)this.attributeSemantics[r]={symbol:e,type:t};else if(Fe.indexOf(r)>=0){var i=!1,n=r;r.match(/TRANSPOSE$/)&&(i=!0,n=r.slice(0,-9)),this.matrixSemantics[r]={symbol:e,type:t,isTranspose:i,semanticNoTranspose:n}}else Re.indexOf(r)>=0&&(this.uniformSemantics[r]={symbol:e,type:t})},_addMaterialUniform:function(e,t,r,i,n,a){a[e]={type:r,value:n?Ne.array:i||Ne[t],semantic:null}},_parseUniforms:function(){var e={},t=this;function r(e){return null!=e?function(){return e}:null}function i(i,n,a){var o=Ve(n,a),s=[];for(var l in o){var h=o[l],u=h.semantic,c=l,d=Pe[n],f=r(o[l].value);o[l].isArray&&(c+="["+o[l].arraySize+"]",d+="v"),s.push(c),t._uniformList.push(l),h.ignore||("sampler2D"!==n&&"samplerCube"!==n||(t.textures[l]={shaderType:"fragment",type:n}),u?t._addSemanticUniform(l,d,u):t._addMaterialUniform(l,n,d,f,o[l].isArray,e))}return s.length>0?"uniform "+n+" "+s.join(",")+";\n":""}this._uniformList=[],this._vertexCode=this._vertexCode.replace(Ce,i),this._fragmentCode=this._fragmentCode.replace(Ce,i),t.matrixSemanticKeys=Object.keys(this.matrixSemantics),this.uniformTemplates=e},_parseAttributes:function(){var e={},t=this;this._vertexCode=this._vertexCode.replace(De,(function(r,i,n){var a=Ve(i,n),o=Be[i]||1,s=[];for(var l in a){var h=a[l].semantic;if(e[l]={type:"float",size:o,semantic:h||null},h){if(Ie.indexOf(h)<0)throw new Error('Unkown semantic "'+h+'"');t.attributeSemantics[h]={symbol:l,type:i}}s.push(l)}return"attribute "+i+" "+s.join(",")+";\n"})),this.attributes=e},_parseDefines:function(){var e=this;function t(t,r,i){var n=e.fragmentDefines;return n[r]||(n[r]="false"!==i&&("true"===i||(i?isNaN(parseFloat(i))?i.trim():parseFloat(i):null))),""}this._vertexCode=this._vertexCode.replace(Le,t),this._fragmentCode=this._fragmentCode.replace(Le,t)},clone:function(){var e=Ge[this._shaderID];return new He(e.vertex,e.fragment)}},Object.defineProperty&&(Object.defineProperty(He.prototype,"shaderID",{get:function(){return this._shaderID}}),Object.defineProperty(He.prototype,"vertex",{get:function(){return this._vertexCode}}),Object.defineProperty(He.prototype,"fragment",{get:function(){return this._fragmentCode}}),Object.defineProperty(He.prototype,"uniforms",{get:function(){return this._uniformList}}));var We=/(@import)\s*([0-9a-zA-Z_\-\.]*)/g;He.parseImport=function(e){return e.replace(We,(function(e,t,r){return(e=He.source(r))?He.parseImport(e):(console.error('Shader chunk "'+r+'" not existed in library'),"")}))};var je=/(@export)\s*([0-9a-zA-Z_\-\.]*)\s*\n([\s\S]*?)@end/g;He.import=function(e){e.replace(je,(function(e,t,r,i){if(i=i.replace(/(^[\s\t\xa0\u3000]+)|([\u3000\xa0\s\t]+\x24)/g,"")){for(var n,a=r.split("."),o=He.codes,s=0;s 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n gl_FragColor = vec4(0.0,0.0,0.0,1.0);\n}\n@end";var Ze={create:function(){var e=new ce(16);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e},clone:function(e){var t=new ce(16);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},identity:function(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e},transpose:function(e,t){if(e===t){var r=t[1],i=t[2],n=t[3],a=t[6],o=t[7],s=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=r,e[6]=t[9],e[7]=t[13],e[8]=i,e[9]=a,e[11]=t[14],e[12]=n,e[13]=o,e[14]=s}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15];return e},invert:function(e,t){var r=t[0],i=t[1],n=t[2],a=t[3],o=t[4],s=t[5],l=t[6],h=t[7],u=t[8],c=t[9],d=t[10],f=t[11],p=t[12],m=t[13],g=t[14],_=t[15],v=r*s-i*o,y=r*l-n*o,x=r*h-a*o,b=i*l-n*s,w=i*h-a*s,T=n*h-a*l,S=u*m-c*p,M=u*g-d*p,A=u*_-f*p,E=c*g-d*m,C=c*_-f*m,D=d*_-f*g,L=v*D-y*C+x*E+b*A-w*M+T*S;return L?(L=1/L,e[0]=(s*D-l*C+h*E)*L,e[1]=(n*C-i*D-a*E)*L,e[2]=(m*T-g*w+_*b)*L,e[3]=(d*w-c*T-f*b)*L,e[4]=(l*A-o*D-h*M)*L,e[5]=(r*D-n*A+a*M)*L,e[6]=(g*x-p*T-_*y)*L,e[7]=(u*T-d*x+f*y)*L,e[8]=(o*C-s*A+h*S)*L,e[9]=(i*A-r*C-a*S)*L,e[10]=(p*w-m*x+_*v)*L,e[11]=(c*x-u*w-f*v)*L,e[12]=(s*M-o*E-l*S)*L,e[13]=(r*E-i*M+n*S)*L,e[14]=(m*y-p*b-g*v)*L,e[15]=(u*b-c*y+d*v)*L,e):null},adjoint:function(e,t){var r=t[0],i=t[1],n=t[2],a=t[3],o=t[4],s=t[5],l=t[6],h=t[7],u=t[8],c=t[9],d=t[10],f=t[11],p=t[12],m=t[13],g=t[14],_=t[15];return e[0]=s*(d*_-f*g)-c*(l*_-h*g)+m*(l*f-h*d),e[1]=-(i*(d*_-f*g)-c*(n*_-a*g)+m*(n*f-a*d)),e[2]=i*(l*_-h*g)-s*(n*_-a*g)+m*(n*h-a*l),e[3]=-(i*(l*f-h*d)-s*(n*f-a*d)+c*(n*h-a*l)),e[4]=-(o*(d*_-f*g)-u*(l*_-h*g)+p*(l*f-h*d)),e[5]=r*(d*_-f*g)-u*(n*_-a*g)+p*(n*f-a*d),e[6]=-(r*(l*_-h*g)-o*(n*_-a*g)+p*(n*h-a*l)),e[7]=r*(l*f-h*d)-o*(n*f-a*d)+u*(n*h-a*l),e[8]=o*(c*_-f*m)-u*(s*_-h*m)+p*(s*f-h*c),e[9]=-(r*(c*_-f*m)-u*(i*_-a*m)+p*(i*f-a*c)),e[10]=r*(s*_-h*m)-o*(i*_-a*m)+p*(i*h-a*s),e[11]=-(r*(s*f-h*c)-o*(i*f-a*c)+u*(i*h-a*s)),e[12]=-(o*(c*g-d*m)-u*(s*g-l*m)+p*(s*d-l*c)),e[13]=r*(c*g-d*m)-u*(i*g-n*m)+p*(i*d-n*c),e[14]=-(r*(s*g-l*m)-o*(i*g-n*m)+p*(i*l-n*s)),e[15]=r*(s*d-l*c)-o*(i*d-n*c)+u*(i*l-n*s),e},determinant:function(e){var t=e[0],r=e[1],i=e[2],n=e[3],a=e[4],o=e[5],s=e[6],l=e[7],h=e[8],u=e[9],c=e[10],d=e[11],f=e[12],p=e[13],m=e[14],g=e[15];return(t*o-r*a)*(c*g-d*m)-(t*s-i*a)*(u*g-d*p)+(t*l-n*a)*(u*m-c*p)+(r*s-i*o)*(h*g-d*f)-(r*l-n*o)*(h*m-c*f)+(i*l-n*s)*(h*p-u*f)},multiply:function(e,t,r){var i=t[0],n=t[1],a=t[2],o=t[3],s=t[4],l=t[5],h=t[6],u=t[7],c=t[8],d=t[9],f=t[10],p=t[11],m=t[12],g=t[13],_=t[14],v=t[15],y=r[0],x=r[1],b=r[2],w=r[3];return e[0]=y*i+x*s+b*c+w*m,e[1]=y*n+x*l+b*d+w*g,e[2]=y*a+x*h+b*f+w*_,e[3]=y*o+x*u+b*p+w*v,y=r[4],x=r[5],b=r[6],w=r[7],e[4]=y*i+x*s+b*c+w*m,e[5]=y*n+x*l+b*d+w*g,e[6]=y*a+x*h+b*f+w*_,e[7]=y*o+x*u+b*p+w*v,y=r[8],x=r[9],b=r[10],w=r[11],e[8]=y*i+x*s+b*c+w*m,e[9]=y*n+x*l+b*d+w*g,e[10]=y*a+x*h+b*f+w*_,e[11]=y*o+x*u+b*p+w*v,y=r[12],x=r[13],b=r[14],w=r[15],e[12]=y*i+x*s+b*c+w*m,e[13]=y*n+x*l+b*d+w*g,e[14]=y*a+x*h+b*f+w*_,e[15]=y*o+x*u+b*p+w*v,e},multiplyAffine:function(e,t,r){var i=t[0],n=t[1],a=t[2],o=t[4],s=t[5],l=t[6],h=t[8],u=t[9],c=t[10],d=t[12],f=t[13],p=t[14],m=r[0],g=r[1],_=r[2];return e[0]=m*i+g*o+_*h,e[1]=m*n+g*s+_*u,e[2]=m*a+g*l+_*c,m=r[4],g=r[5],_=r[6],e[4]=m*i+g*o+_*h,e[5]=m*n+g*s+_*u,e[6]=m*a+g*l+_*c,m=r[8],g=r[9],_=r[10],e[8]=m*i+g*o+_*h,e[9]=m*n+g*s+_*u,e[10]=m*a+g*l+_*c,m=r[12],g=r[13],_=r[14],e[12]=m*i+g*o+_*h+d,e[13]=m*n+g*s+_*u+f,e[14]=m*a+g*l+_*c+p,e}};Ze.mul=Ze.multiply,Ze.mulAffine=Ze.multiplyAffine,Ze.translate=function(e,t,r){var i,n,a,o,s,l,h,u,c,d,f,p,m=r[0],g=r[1],_=r[2];return t===e?(e[12]=t[0]*m+t[4]*g+t[8]*_+t[12],e[13]=t[1]*m+t[5]*g+t[9]*_+t[13],e[14]=t[2]*m+t[6]*g+t[10]*_+t[14],e[15]=t[3]*m+t[7]*g+t[11]*_+t[15]):(i=t[0],n=t[1],a=t[2],o=t[3],s=t[4],l=t[5],h=t[6],u=t[7],c=t[8],d=t[9],f=t[10],p=t[11],e[0]=i,e[1]=n,e[2]=a,e[3]=o,e[4]=s,e[5]=l,e[6]=h,e[7]=u,e[8]=c,e[9]=d,e[10]=f,e[11]=p,e[12]=i*m+s*g+c*_+t[12],e[13]=n*m+l*g+d*_+t[13],e[14]=a*m+h*g+f*_+t[14],e[15]=o*m+u*g+p*_+t[15]),e},Ze.scale=function(e,t,r){var i=r[0],n=r[1],a=r[2];return e[0]=t[0]*i,e[1]=t[1]*i,e[2]=t[2]*i,e[3]=t[3]*i,e[4]=t[4]*n,e[5]=t[5]*n,e[6]=t[6]*n,e[7]=t[7]*n,e[8]=t[8]*a,e[9]=t[9]*a,e[10]=t[10]*a,e[11]=t[11]*a,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},Ze.rotate=function(e,t,r,i){var n,a,o,s,l,h,u,c,d,f,p,m,g,_,v,y,x,b,w,T,S,M,A,E,C=i[0],D=i[1],L=i[2],P=Math.sqrt(C*C+D*D+L*L);return Math.abs(P)0&&(a=1/Math.sqrt(a),e[0]=t[0]*a,e[1]=t[1]*a,e[2]=t[2]*a),e},Ke.dot=function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]},Ke.cross=function(e,t,r){var i=t[0],n=t[1],a=t[2],o=r[0],s=r[1],l=r[2];return e[0]=n*l-a*s,e[1]=a*o-i*l,e[2]=i*s-n*o,e},Ke.lerp=function(e,t,r,i){var n=t[0],a=t[1],o=t[2];return e[0]=n+i*(r[0]-n),e[1]=a+i*(r[1]-a),e[2]=o+i*(r[2]-o),e},Ke.random=function(e,t){t=t||1;var r=2*de()*Math.PI,i=2*de()-1,n=Math.sqrt(1-i*i)*t;return e[0]=Math.cos(r)*n,e[1]=Math.sin(r)*n,e[2]=i*t,e},Ke.transformMat4=function(e,t,r){var i=t[0],n=t[1],a=t[2],o=r[3]*i+r[7]*n+r[11]*a+r[15];return o=o||1,e[0]=(r[0]*i+r[4]*n+r[8]*a+r[12])/o,e[1]=(r[1]*i+r[5]*n+r[9]*a+r[13])/o,e[2]=(r[2]*i+r[6]*n+r[10]*a+r[14])/o,e},Ke.transformMat3=function(e,t,r){var i=t[0],n=t[1],a=t[2];return e[0]=i*r[0]+n*r[3]+a*r[6],e[1]=i*r[1]+n*r[4]+a*r[7],e[2]=i*r[2]+n*r[5]+a*r[8],e},Ke.transformQuat=function(e,t,r){var i=t[0],n=t[1],a=t[2],o=r[0],s=r[1],l=r[2],h=r[3],u=h*i+s*a-l*n,c=h*n+l*i-o*a,d=h*a+o*n-s*i,f=-o*i-s*n-l*a;return e[0]=u*h+f*-o+c*-l-d*-s,e[1]=c*h+f*-s+d*-o-u*-l,e[2]=d*h+f*-l+u*-s-c*-o,e},Ke.rotateX=function(e,t,r,i){var n=[],a=[];return n[0]=t[0]-r[0],n[1]=t[1]-r[1],n[2]=t[2]-r[2],a[0]=n[0],a[1]=n[1]*Math.cos(i)-n[2]*Math.sin(i),a[2]=n[1]*Math.sin(i)+n[2]*Math.cos(i),e[0]=a[0]+r[0],e[1]=a[1]+r[1],e[2]=a[2]+r[2],e},Ke.rotateY=function(e,t,r,i){var n=[],a=[];return n[0]=t[0]-r[0],n[1]=t[1]-r[1],n[2]=t[2]-r[2],a[0]=n[2]*Math.sin(i)+n[0]*Math.cos(i),a[1]=n[1],a[2]=n[2]*Math.cos(i)-n[0]*Math.sin(i),e[0]=a[0]+r[0],e[1]=a[1]+r[1],e[2]=a[2]+r[2],e},Ke.rotateZ=function(e,t,r,i){var n=[],a=[];return n[0]=t[0]-r[0],n[1]=t[1]-r[1],n[2]=t[2]-r[2],a[0]=n[0]*Math.cos(i)-n[1]*Math.sin(i),a[1]=n[0]*Math.sin(i)+n[1]*Math.cos(i),a[2]=n[2],e[0]=a[0]+r[0],e[1]=a[1]+r[1],e[2]=a[2]+r[2],e},Ke.forEach=function(){var e=Ke.create();return function(t,r,i,n,a,o){var s,l;for(r||(r=3),i||(i=0),l=n?Math.min(n*r+i,t.length):t.length,s=i;s1?0:Math.acos(n)};const Qe=Ke;Xe.import(qe);var Je=Ye.create,$e={};function et(e){return e.material}function tt(e,t,r){return t.uniforms[r].value}function rt(e,t,r,i){return r!==i}function it(e){return!0}function nt(){}var at={float:S,byte:5120,ubyte:T,short:5122,ushort:5123};function ot(e,t,r){this.availableAttributes=e,this.availableAttributeSymbols=t,this.indicesBuffer=r,this.vao=null}function st(e){var t,r;this.bind=function(e){t||((t=U.createCanvas()).width=t.height=1,t.getContext("2d"));var i=e.gl,n=!r;n&&(r=i.createTexture()),i.bindTexture(i.TEXTURE_2D,r),n&&i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,t)},this.unbind=function(e){e.gl.bindTexture(e.gl.TEXTURE_2D,null)},this.isRenderable=function(){return!0}}var lt=m.extend((function(){return{canvas:null,_width:100,_height:100,devicePixelRatio:"undefined"!=typeof window&&window.devicePixelRatio||1,clearColor:[0,0,0,0],clearBit:17664,alpha:!0,depth:!0,stencil:!1,antialias:!0,premultipliedAlpha:!0,preserveDrawingBuffer:!1,throwError:!0,gl:null,viewport:{},maxJointNumber:20,__currentFrameBuffer:null,_viewportStack:[],_clearStack:[],_sceneRendering:null}}),(function(){this.canvas||(this.canvas=U.createCanvas());var e=this.canvas;try{var t={alpha:this.alpha,depth:this.depth,stencil:this.stencil,antialias:this.antialias,premultipliedAlpha:this.premultipliedAlpha,preserveDrawingBuffer:this.preserveDrawingBuffer};if(this.gl=e.getContext("webgl",t)||e.getContext("experimental-webgl",t),!this.gl)throw new Error;this._glinfo=new v(this.gl),this.gl.targetRenderer&&console.error("Already created a renderer"),this.gl.targetRenderer=this,this.resize()}catch(e){throw"Error creating WebGL Context "+e}this._programMgr=new Ee(this),this._placeholderTexture=new st(this)}),{resize:function(e,t){var r=this.canvas,i=this.devicePixelRatio;null!=e?(r.style&&(r.style.width=e+"px",r.style.height=t+"px"),r.width=e*i,r.height=t*i,this._width=e,this._height=t):(this._width=r.width/i,this._height=r.height/i),this.setViewport(0,0,this._width,this._height)},getWidth:function(){return this._width},getHeight:function(){return this._height},getViewportAspect:function(){var e=this.viewport;return e.width/e.height},setDevicePixelRatio:function(e){this.devicePixelRatio=e,this.resize(this._width,this._height)},getDevicePixelRatio:function(){return this.devicePixelRatio},getGLExtension:function(e){return this._glinfo.getExtension(e)},getGLParameter:function(e){return this._glinfo.getParameter(e)},setViewport:function(e,t,r,i,n){if("object"==typeof e){var a=e;e=a.x,t=a.y,r=a.width,i=a.height,n=a.devicePixelRatio}n=n||this.devicePixelRatio,this.gl.viewport(e*n,t*n,r*n,i*n),this.viewport={x:e,y:t,width:r,height:i,devicePixelRatio:n}},saveViewport:function(){this._viewportStack.push(this.viewport)},restoreViewport:function(){this._viewportStack.length>0&&this.setViewport(this._viewportStack.pop())},saveClear:function(){this._clearStack.push({clearBit:this.clearBit,clearColor:this.clearColor})},restoreClear:function(){if(this._clearStack.length>0){var e=this._clearStack.pop();this.clearColor=e.clearColor,this.clearBit=e.clearBit}},bindSceneRendering:function(e){this._sceneRendering=e},render:function(e,t,r,i){var n=this.gl,a=this.clearColor;if(this.clearBit){n.colorMask(!0,!0,!0,!0),n.depthMask(!0);var o=this.viewport,s=!1,l=o.devicePixelRatio;(o.width!==this._width||o.height!==this._height||l&&l!==this.devicePixelRatio||o.x||o.y)&&(s=!0,n.enable(n.SCISSOR_TEST),n.scissor(o.x*l,o.y*l,o.width*l,o.height*l)),n.clearColor(a[0],a[1],a[2],a[3]),n.clear(this.clearBit),s&&n.disable(n.SCISSOR_TEST)}if(r||e.update(!1),e.updateLights(),t=t||e.getMainCamera()){t.update();var h=e.updateRenderList(t,!0);this._sceneRendering=e;var u=h.opaque,c=h.transparent,d=e.material;e.trigger("beforerender",this,e,t,h),i?(this.renderPreZ(u,e,t),n.depthFunc(n.LEQUAL)):n.depthFunc(n.LESS);for(var f=Je(),p=Qe.create(),m=0;m0){var s=e[n-1],l=s.joints?s.joints.length:0;if((a.joints?a.joints.length:0)===l&&a.material===s.material&&a.lightGroup===s.lightGroup){a.__program=s.__program;continue}}var h=this._programMgr.getProgram(a,o,t);this.validateProgram(h),a.__program=h}},renderPass:function(e,t,r){this.trigger("beforerenderpass",this,e,t,r),(r=r||{}).getMaterial=r.getMaterial||et,r.getUniform=r.getUniform||tt,r.isMaterialChanged=r.isMaterialChanged||rt,r.beforeRender=r.beforeRender||nt,r.afterRender=r.afterRender||nt;var i=r.ifRender||it;this.updatePrograms(e,this._sceneRendering,r),r.sortCompare&&e.sort(r.sortCompare);var n=this.viewport,a=n.devicePixelRatio,o=[n.x*a,n.y*a,n.width*a,n.height*a],s=this.devicePixelRatio,l=this.__currentFrameBuffer?[this.__currentFrameBuffer.getTextureWidth(),this.__currentFrameBuffer.getTextureHeight()]:[this._width*s,this._height*s],h=[o[2],o[3]],u=Date.now();t?(Ye.copy(ht.VIEW,t.viewMatrix.array),Ye.copy(ht.PROJECTION,t.projectionMatrix.array),Ye.copy(ht.VIEWINVERSE,t.worldTransform.array)):(Ye.identity(ht.VIEW),Ye.identity(ht.PROJECTION),Ye.identity(ht.VIEWINVERSE)),Ye.multiply(ht.VIEWPROJECTION,ht.PROJECTION,ht.VIEW),Ye.invert(ht.PROJECTIONINVERSE,ht.PROJECTION),Ye.invert(ht.VIEWPROJECTIONINVERSE,ht.VIEWPROJECTION);for(var c,d,f,p,m,g,_,v,y,x,b,w,T=this.gl,S=this._sceneRendering,M=0;Mthis.getMaxJointNumber()){var a=n.getSubSkinMatricesTexture(e.__uid__,e.joints);t.useTextureSlot(this,a,r),t.setUniform(i,"1i","skinMatricesTexture",r),t.setUniform(i,"1f","skinMatricesTextureSize",a.width)}else{var o=n.getSubSkinMatrices(e.__uid__,e.joints);t.setUniformOfSemantic(i,"SKIN_MATRIX",o)}},_renderObject:function(e,t,r){var i=this.gl,n=e.geometry,a=e.mode;null==a&&(a=4);var o=null,s=e.isInstancedMesh&&e.isInstancedMesh();if(!s||(o=this.getGLExtension("ANGLE_instanced_arrays"))){var l;if(s&&(l=this._bindInstancedAttributes(e,r,o)),t.indicesBuffer){var h=this.getGLExtension("OES_element_index_uint")&&n.indices instanceof Uint32Array?i.UNSIGNED_INT:i.UNSIGNED_SHORT;s?o.drawElementsInstancedANGLE(a,t.indicesBuffer.count,h,0,e.getInstanceCount()):i.drawElements(a,t.indicesBuffer.count,h,0)}else s?o.drawArraysInstancedANGLE(a,0,n.vertexCount,e.getInstanceCount()):i.drawArrays(a,0,n.vertexCount);if(s)for(var u=0;ur?r:e}ct.add=function(e,t,r){return Qe.add(e.array,t.array,r.array),e._dirty=!0,e},ct.set=function(e,t,r,i){Qe.set(e.array,t,r,i),e._dirty=!0},ct.copy=function(e,t){return Qe.copy(e.array,t.array),e._dirty=!0,e},ct.cross=function(e,t,r){return Qe.cross(e.array,t.array,r.array),e._dirty=!0,e},ct.distance=ct.dist=function(e,t){return Qe.distance(e.array,t.array)},ct.divide=ct.div=function(e,t,r){return Qe.divide(e.array,t.array,r.array),e._dirty=!0,e},ct.dot=function(e,t){return Qe.dot(e.array,t.array)},ct.len=function(e){return Qe.length(e.array)},ct.lerp=function(e,t,r,i){return Qe.lerp(e.array,t.array,r.array,i),e._dirty=!0,e},ct.min=function(e,t,r){return Qe.min(e.array,t.array,r.array),e._dirty=!0,e},ct.max=function(e,t,r){return Qe.max(e.array,t.array,r.array),e._dirty=!0,e},ct.multiply=ct.mul=function(e,t,r){return Qe.multiply(e.array,t.array,r.array),e._dirty=!0,e},ct.negate=function(e,t){return Qe.negate(e.array,t.array),e._dirty=!0,e},ct.normalize=function(e,t){return Qe.normalize(e.array,t.array),e._dirty=!0,e},ct.random=function(e,t){return Qe.random(e.array,t),e._dirty=!0,e},ct.scale=function(e,t,r){return Qe.scale(e.array,t.array,r),e._dirty=!0,e},ct.scaleAndAdd=function(e,t,r,i){return Qe.scaleAndAdd(e.array,t.array,r.array,i),e._dirty=!0,e},ct.squaredDistance=ct.sqrDist=function(e,t){return Qe.sqrDist(e.array,t.array)},ct.squaredLength=ct.sqrLen=function(e){return Qe.sqrLen(e.array)},ct.subtract=ct.sub=function(e,t,r){return Qe.subtract(e.array,t.array,r.array),e._dirty=!0,e},ct.transformMat3=function(e,t,r){return Qe.transformMat3(e.array,t.array,r.array),e._dirty=!0,e},ct.transformMat4=function(e,t,r){return Qe.transformMat4(e.array,t.array,r.array),e._dirty=!0,e},ct.transformQuat=function(e,t,r){return Qe.transformQuat(e.array,t.array,r.array),e._dirty=!0,e};var mt=Math.atan2,gt=Math.asin,_t=Math.abs;ct.eulerFromQuat=function(e,t,r){e._dirty=!0,t=t.array;var i=e.array,n=t[0],a=t[1],o=t[2],s=t[3],l=n*n,h=a*a,u=o*o,c=s*s;switch(r=(r||"XYZ").toUpperCase()){case"XYZ":i[0]=mt(2*(n*s-a*o),c-l-h+u),i[1]=gt(pt(2*(n*o+a*s),-1,1)),i[2]=mt(2*(o*s-n*a),c+l-h-u);break;case"YXZ":i[0]=gt(pt(2*(n*s-a*o),-1,1)),i[1]=mt(2*(n*o+a*s),c-l-h+u),i[2]=mt(2*(n*a+o*s),c-l+h-u);break;case"ZXY":i[0]=gt(pt(2*(n*s+a*o),-1,1)),i[1]=mt(2*(a*s-o*n),c-l-h+u),i[2]=mt(2*(o*s-n*a),c-l+h-u);break;case"ZYX":i[0]=mt(2*(n*s+o*a),c-l-h+u),i[1]=gt(pt(2*(a*s-n*o),-1,1)),i[2]=mt(2*(n*a+o*s),c+l-h-u);break;case"YZX":i[0]=mt(2*(n*s-o*a),c-l+h-u),i[1]=mt(2*(a*s-n*o),c+l-h-u),i[2]=gt(pt(2*(n*a+o*s),-1,1));break;case"XZY":i[0]=mt(2*(n*s+a*o),c-l+h-u),i[1]=mt(2*(n*o+a*s),c+l-h-u),i[2]=gt(pt(2*(o*s-n*a),-1,1));break;default:console.warn("Unkown order: "+r)}return e},ct.eulerFromMat3=function(e,t,r){var i=t.array,n=i[0],a=i[3],o=i[6],s=i[1],l=i[4],h=i[7],u=i[2],c=i[5],d=i[8],f=e.array;switch(r=(r||"XYZ").toUpperCase()){case"XYZ":f[1]=gt(pt(o,-1,1)),_t(o)<.99999?(f[0]=mt(-h,d),f[2]=mt(-a,n)):(f[0]=mt(c,l),f[2]=0);break;case"YXZ":f[0]=gt(-pt(h,-1,1)),_t(h)<.99999?(f[1]=mt(o,d),f[2]=mt(s,l)):(f[1]=mt(-u,n),f[2]=0);break;case"ZXY":f[0]=gt(pt(c,-1,1)),_t(c)<.99999?(f[1]=mt(-u,d),f[2]=mt(-a,l)):(f[1]=0,f[2]=mt(s,n));break;case"ZYX":f[1]=gt(-pt(u,-1,1)),_t(u)<.99999?(f[0]=mt(c,d),f[2]=mt(s,n)):(f[0]=0,f[2]=mt(-a,l));break;case"YZX":f[2]=gt(pt(s,-1,1)),_t(s)<.99999?(f[0]=mt(-h,l),f[1]=mt(-u,n)):(f[0]=0,f[1]=mt(o,d));break;case"XZY":f[2]=gt(-pt(a,-1,1)),_t(a)<.99999?(f[0]=mt(c,l),f[1]=mt(o,n)):(f[0]=mt(-h,d),f[1]=0);break;default:console.warn("Unkown order: "+r)}return e._dirty=!0,e},Object.defineProperties(ct,{POSITIVE_X:{get:function(){return new ct(1,0,0)}},NEGATIVE_X:{get:function(){return new ct(-1,0,0)}},POSITIVE_Y:{get:function(){return new ct(0,1,0)}},NEGATIVE_Y:{get:function(){return new ct(0,-1,0)}},POSITIVE_Z:{get:function(){return new ct(0,0,1)}},NEGATIVE_Z:{get:function(){return new ct(0,0,-1)}},UP:{get:function(){return new ct(0,1,0)}},ZERO:{get:function(){return new ct}}});const vt=ct;var yt,xt,bt,wt,Tt,St=function(e,t){this.origin=e||new vt,this.direction=t||new vt};St.prototype={constructor:St,intersectPlane:function(e,t){var r=e.normal.array,i=e.distance,n=this.origin.array,a=this.direction.array,o=Qe.dot(r,a);if(0===o)return null;t||(t=new vt);var s=(Qe.dot(r,n)-i)/o;return Qe.scaleAndAdd(t.array,n,a,-s),t._dirty=!0,t},mirrorAgainstPlane:function(e){var t=Qe.dot(e.normal.array,this.direction.array);Qe.scaleAndAdd(this.direction.array,this.direction.array,e.normal.array,2*-t),this.direction._dirty=!0},distanceToPoint:(Tt=Qe.create(),function(e){Qe.sub(Tt,e,this.origin.array);var t=Qe.dot(Tt,this.direction.array);if(t<0)return Qe.distance(this.origin.array,e);var r=Qe.lenSquared(Tt);return Math.sqrt(r-t*t)}),intersectSphere:function(){var e=Qe.create();return function(t,r,i){var n=this.origin.array,a=this.direction.array;t=t.array,Qe.sub(e,t,n);var o=Qe.dot(e,a),s=Qe.squaredLength(e)-o*o,l=r*r;if(!(s>l)){var h=Math.sqrt(l-s),u=o-h,c=o+h;return i||(i=new vt),u<0?c<0?null:(Qe.scaleAndAdd(i.array,n,a,c),i):(Qe.scaleAndAdd(i.array,n,a,u),i)}}}(),intersectBoundingBox:function(e,t){var r,i,n,a,o,s,l=this.direction.array,h=this.origin.array,u=e.min.array,c=e.max.array,d=1/l[0],f=1/l[1],p=1/l[2];if(d>=0?(r=(u[0]-h[0])*d,i=(c[0]-h[0])*d):(i=(u[0]-h[0])*d,r=(c[0]-h[0])*d),f>=0?(n=(u[1]-h[1])*f,a=(c[1]-h[1])*f):(a=(u[1]-h[1])*f,n=(c[1]-h[1])*f),r>a||n>i)return null;if((n>r||r!=r)&&(r=n),(a=0?(o=(u[2]-h[2])*p,s=(c[2]-h[2])*p):(s=(u[2]-h[2])*p,o=(c[2]-h[2])*p),r>s||o>i)return null;if((o>r||r!=r)&&(r=o),(s=0?r:i;return t||(t=new vt),Qe.scaleAndAdd(t.array,h,l,m),t},intersectTriangle:(yt=Qe.create(),xt=Qe.create(),bt=Qe.create(),wt=Qe.create(),function(e,t,r,i,n,a){var o=this.direction.array,s=this.origin.array;e=e.array,t=t.array,r=r.array,Qe.sub(yt,t,e),Qe.sub(xt,r,e),Qe.cross(wt,xt,o);var l=Qe.dot(yt,wt);if(i){if(l>-1e-5)return null}else if(l>-1e-5&&l<1e-5)return null;Qe.sub(bt,s,e);var h=Qe.dot(wt,bt)/l;if(h<0||h>1)return null;Qe.cross(wt,yt,bt);var u=Qe.dot(o,wt)/l;if(u<0||u>1||h+u>1)return null;Qe.cross(wt,yt,xt);var c=-Qe.dot(bt,wt)/l;return c<0?null:(n||(n=new vt),a&&vt.set(a,1-h-u,h,u),Qe.scaleAndAdd(n.array,s,o,c),n)}),applyTransform:function(e){vt.add(this.direction,this.direction,this.origin),vt.transformMat4(this.origin,this.origin,e),vt.transformMat4(this.direction,this.direction,e),vt.sub(this.direction,this.direction,this.origin),vt.normalize(this.direction,this.direction)},copy:function(e){vt.copy(this.origin,e.origin),vt.copy(this.direction,e.direction)},clone:function(){var e=new St;return e.copy(this),e}};const Mt=St;var At={create:function(){var e=new ce(4);return e[0]=0,e[1]=0,e[2]=0,e[3]=0,e},clone:function(e){var t=new ce(4);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t},fromValues:function(e,t,r,i){var n=new ce(4);return n[0]=e,n[1]=t,n[2]=r,n[3]=i,n},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e},set:function(e,t,r,i,n){return e[0]=t,e[1]=r,e[2]=i,e[3]=n,e},add:function(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e[3]=t[3]+r[3],e},subtract:function(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e[3]=t[3]-r[3],e}};At.sub=At.subtract,At.multiply=function(e,t,r){return e[0]=t[0]*r[0],e[1]=t[1]*r[1],e[2]=t[2]*r[2],e[3]=t[3]*r[3],e},At.mul=At.multiply,At.divide=function(e,t,r){return e[0]=t[0]/r[0],e[1]=t[1]/r[1],e[2]=t[2]/r[2],e[3]=t[3]/r[3],e},At.div=At.divide,At.min=function(e,t,r){return e[0]=Math.min(t[0],r[0]),e[1]=Math.min(t[1],r[1]),e[2]=Math.min(t[2],r[2]),e[3]=Math.min(t[3],r[3]),e},At.max=function(e,t,r){return e[0]=Math.max(t[0],r[0]),e[1]=Math.max(t[1],r[1]),e[2]=Math.max(t[2],r[2]),e[3]=Math.max(t[3],r[3]),e},At.scale=function(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e},At.scaleAndAdd=function(e,t,r,i){return e[0]=t[0]+r[0]*i,e[1]=t[1]+r[1]*i,e[2]=t[2]+r[2]*i,e[3]=t[3]+r[3]*i,e},At.distance=function(e,t){var r=t[0]-e[0],i=t[1]-e[1],n=t[2]-e[2],a=t[3]-e[3];return Math.sqrt(r*r+i*i+n*n+a*a)},At.dist=At.distance,At.squaredDistance=function(e,t){var r=t[0]-e[0],i=t[1]-e[1],n=t[2]-e[2],a=t[3]-e[3];return r*r+i*i+n*n+a*a},At.sqrDist=At.squaredDistance,At.length=function(e){var t=e[0],r=e[1],i=e[2],n=e[3];return Math.sqrt(t*t+r*r+i*i+n*n)},At.len=At.length,At.squaredLength=function(e){var t=e[0],r=e[1],i=e[2],n=e[3];return t*t+r*r+i*i+n*n},At.sqrLen=At.squaredLength,At.negate=function(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=-t[3],e},At.inverse=function(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e[3]=1/t[3],e},At.normalize=function(e,t){var r=t[0],i=t[1],n=t[2],a=t[3],o=r*r+i*i+n*n+a*a;return o>0&&(o=1/Math.sqrt(o),e[0]=t[0]*o,e[1]=t[1]*o,e[2]=t[2]*o,e[3]=t[3]*o),e},At.dot=function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]},At.lerp=function(e,t,r,i){var n=t[0],a=t[1],o=t[2],s=t[3];return e[0]=n+i*(r[0]-n),e[1]=a+i*(r[1]-a),e[2]=o+i*(r[2]-o),e[3]=s+i*(r[3]-s),e},At.random=function(e,t){return t=t||1,e[0]=de(),e[1]=de(),e[2]=de(),e[3]=de(),At.normalize(e,e),At.scale(e,e,t),e},At.transformMat4=function(e,t,r){var i=t[0],n=t[1],a=t[2],o=t[3];return e[0]=r[0]*i+r[4]*n+r[8]*a+r[12]*o,e[1]=r[1]*i+r[5]*n+r[9]*a+r[13]*o,e[2]=r[2]*i+r[6]*n+r[10]*a+r[14]*o,e[3]=r[3]*i+r[7]*n+r[11]*a+r[15]*o,e},At.transformQuat=function(e,t,r){var i=t[0],n=t[1],a=t[2],o=r[0],s=r[1],l=r[2],h=r[3],u=h*i+s*a-l*n,c=h*n+l*i-o*a,d=h*a+o*n-s*i,f=-o*i-s*n-l*a;return e[0]=u*h+f*-o+c*-l-d*-s,e[1]=c*h+f*-s+d*-o-u*-l,e[2]=d*h+f*-l+u*-s-c*-o,e},At.forEach=function(){var e=At.create();return function(t,r,i,n,a,o){var s,l;for(r||(r=4),i||(i=0),l=n?Math.min(n*r+i,t.length):t.length,s=i;s.999999?(e[0]=0,e[1]=0,e[2]=0,e[3]=1,e):(Qe.cross(Lt,t,r),e[0]=Lt[0],e[1]=Lt[1],e[2]=Lt[2],e[3]=1+i,It.normalize(e,e))}),It.setAxes=(Nt=Dt.create(),function(e,t,r,i){return Nt[0]=r[0],Nt[3]=r[1],Nt[6]=r[2],Nt[1]=i[0],Nt[4]=i[1],Nt[7]=i[2],Nt[2]=-t[0],Nt[5]=-t[1],Nt[8]=-t[2],It.normalize(e,It.fromMat3(e,Nt))}),It.clone=Et.clone,It.fromValues=Et.fromValues,It.copy=Et.copy,It.set=Et.set,It.identity=function(e){return e[0]=0,e[1]=0,e[2]=0,e[3]=1,e},It.setAxisAngle=function(e,t,r){r*=.5;var i=Math.sin(r);return e[0]=i*t[0],e[1]=i*t[1],e[2]=i*t[2],e[3]=Math.cos(r),e},It.add=Et.add,It.multiply=function(e,t,r){var i=t[0],n=t[1],a=t[2],o=t[3],s=r[0],l=r[1],h=r[2],u=r[3];return e[0]=i*u+o*s+n*h-a*l,e[1]=n*u+o*l+a*s-i*h,e[2]=a*u+o*h+i*l-n*s,e[3]=o*u-i*s-n*l-a*h,e},It.mul=It.multiply,It.scale=Et.scale,It.rotateX=function(e,t,r){r*=.5;var i=t[0],n=t[1],a=t[2],o=t[3],s=Math.sin(r),l=Math.cos(r);return e[0]=i*l+o*s,e[1]=n*l+a*s,e[2]=a*l-n*s,e[3]=o*l-i*s,e},It.rotateY=function(e,t,r){r*=.5;var i=t[0],n=t[1],a=t[2],o=t[3],s=Math.sin(r),l=Math.cos(r);return e[0]=i*l-a*s,e[1]=n*l+o*s,e[2]=a*l+i*s,e[3]=o*l-n*s,e},It.rotateZ=function(e,t,r){r*=.5;var i=t[0],n=t[1],a=t[2],o=t[3],s=Math.sin(r),l=Math.cos(r);return e[0]=i*l+n*s,e[1]=n*l-i*s,e[2]=a*l+o*s,e[3]=o*l-a*s,e},It.calculateW=function(e,t){var r=t[0],i=t[1],n=t[2];return e[0]=r,e[1]=i,e[2]=n,e[3]=Math.sqrt(Math.abs(1-r*r-i*i-n*n)),e},It.dot=Et.dot,It.lerp=Et.lerp,It.slerp=function(e,t,r,i){var n,a,o,s,l,h=t[0],u=t[1],c=t[2],d=t[3],f=r[0],p=r[1],m=r[2],g=r[3];return(a=h*f+u*p+c*m+d*g)<0&&(a=-a,f=-f,p=-p,m=-m,g=-g),1-a>1e-6?(n=Math.acos(a),o=Math.sin(n),s=Math.sin((1-i)*n)/o,l=Math.sin(i*n)/o):(s=1-i,l=i),e[0]=s*h+l*f,e[1]=s*u+l*p,e[2]=s*c+l*m,e[3]=s*d+l*g,e},It.invert=function(e,t){var r=t[0],i=t[1],n=t[2],a=t[3],o=r*r+i*i+n*n+a*a,s=o?1/o:0;return e[0]=-r*s,e[1]=-i*s,e[2]=-n*s,e[3]=a*s,e},It.conjugate=function(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3],e},It.length=Et.length,It.len=It.length,It.squaredLength=Et.squaredLength,It.sqrLen=It.squaredLength,It.normalize=Et.normalize,It.fromMat3=function(e,t){var r,i=t[0]+t[4]+t[8];if(i>0)r=Math.sqrt(i+1),e[3]=.5*r,r=.5/r,e[0]=(t[5]-t[7])*r,e[1]=(t[6]-t[2])*r,e[2]=(t[1]-t[3])*r;else{var n=0;t[4]>t[0]&&(n=1),t[8]>t[3*n+n]&&(n=2);var a=(n+1)%3,o=(n+2)%3;r=Math.sqrt(t[3*n+n]-t[3*a+a]-t[3*o+o]+1),e[n]=.5*r,r=.5/r,e[3]=(t[3*a+o]-t[3*o+a])*r,e[a]=(t[3*a+n]+t[3*n+a])*r,e[o]=(t[3*o+n]+t[3*n+o])*r}return e};const Rt=It;var Ft,Bt,zt,Gt,Ut=function(){this._axisX=new vt,this._axisY=new vt,this._axisZ=new vt,this.array=Ye.create(),this._dirty=!0};Ut.prototype={constructor:Ut,setArray:function(e){for(var t=0;t0){var t=this.min,r=this.max,i=t.array,n=r.array;tr(i,e[0]),tr(n,e[0]);for(var a=1;an[0]&&(n[0]=o[0]),o[1]>n[1]&&(n[1]=o[1]),o[2]>n[2]&&(n[2]=o[2])}t._dirty=!0,r._dirty=!0}},union:function(e){var t=this.min,r=this.max;return Qe.min(t.array,t.array,e.min.array),Qe.max(r.array,r.array,e.max.array),t._dirty=!0,r._dirty=!0,this},intersection:function(e){var t=this.min,r=this.max;return Qe.max(t.array,t.array,e.min.array),Qe.min(r.array,r.array,e.max.array),t._dirty=!0,r._dirty=!0,this},intersectBoundingBox:function(e){var t=this.min.array,r=this.max.array,i=e.min.array,n=e.max.array;return!(t[0]>n[0]||t[1]>n[1]||t[2]>n[2]||r[0]=n[0]&&r[1]>=n[1]&&r[2]>=n[2]},containPoint:function(e){var t=this.min.array,r=this.max.array,i=e.array;return t[0]<=i[0]&&t[1]<=i[1]&&t[2]<=i[2]&&r[0]>=i[0]&&r[1]>=i[1]&&r[2]>=i[2]},isFinite:function(){var e=this.min.array,t=this.max.array;return isFinite(e[0])&&isFinite(e[1])&&isFinite(e[2])&&isFinite(t[0])&&isFinite(t[1])&&isFinite(t[2])},applyTransform:function(e){this.transformFrom(this,e)},transformFrom:(Zt=Qe.create(),Yt=Qe.create(),Kt=Qe.create(),Qt=Qe.create(),Jt=Qe.create(),$t=Qe.create(),function(e,t){var r=e.min.array,i=e.max.array,n=t.array;return Zt[0]=n[0]*r[0],Zt[1]=n[1]*r[0],Zt[2]=n[2]*r[0],Yt[0]=n[0]*i[0],Yt[1]=n[1]*i[0],Yt[2]=n[2]*i[0],Kt[0]=n[4]*r[1],Kt[1]=n[5]*r[1],Kt[2]=n[6]*r[1],Qt[0]=n[4]*i[1],Qt[1]=n[5]*i[1],Qt[2]=n[6]*i[1],Jt[0]=n[8]*r[2],Jt[1]=n[9]*r[2],Jt[2]=n[10]*r[2],$t[0]=n[8]*i[2],$t[1]=n[9]*i[2],$t[2]=n[10]*i[2],r=this.min.array,i=this.max.array,r[0]=Math.min(Zt[0],Yt[0])+Math.min(Kt[0],Qt[0])+Math.min(Jt[0],$t[0])+n[12],r[1]=Math.min(Zt[1],Yt[1])+Math.min(Kt[1],Qt[1])+Math.min(Jt[1],$t[1])+n[13],r[2]=Math.min(Zt[2],Yt[2])+Math.min(Kt[2],Qt[2])+Math.min(Jt[2],$t[2])+n[14],i[0]=Math.max(Zt[0],Yt[0])+Math.max(Kt[0],Qt[0])+Math.max(Jt[0],$t[0])+n[12],i[1]=Math.max(Zt[1],Yt[1])+Math.max(Kt[1],Qt[1])+Math.max(Jt[1],$t[1])+n[13],i[2]=Math.max(Zt[2],Yt[2])+Math.max(Kt[2],Qt[2])+Math.max(Jt[2],$t[2])+n[14],this.min._dirty=!0,this.max._dirty=!0,this}),applyProjection:function(e){var t=this.min.array,r=this.max.array,i=e.array,n=t[0],a=t[1],o=t[2],s=r[0],l=r[1],h=t[2],u=r[0],c=r[1],d=r[2];if(1===i[15])t[0]=i[0]*n+i[12],t[1]=i[5]*a+i[13],r[2]=i[10]*o+i[14],r[0]=i[0]*u+i[12],r[1]=i[5]*c+i[13],t[2]=i[10]*d+i[14];else{var f=-1/o;t[0]=i[0]*n*f,t[1]=i[5]*a*f,r[2]=(i[10]*o+i[14])*f,f=-1/h,r[0]=i[0]*s*f,r[1]=i[5]*l*f,f=-1/d,t[2]=(i[10]*d+i[14])*f}return this.min._dirty=!0,this.max._dirty=!0,this},updateVertices:function(){var e=this.vertices;if(!e){e=[];for(var t=0;t<8;t++)e[t]=Qe.fromValues(0,0,0);this.vertices=e}var r=this.min.array,i=this.max.array;return er(e[0],r[0],r[1],r[2]),er(e[1],r[0],i[1],r[2]),er(e[2],i[0],r[1],r[2]),er(e[3],i[0],i[1],r[2]),er(e[4],r[0],r[1],i[2]),er(e[5],r[0],i[1],i[2]),er(e[6],i[0],r[1],i[2]),er(e[7],i[0],i[1],i[2]),this},copy:function(e){var t=this.min,r=this.max;return tr(t.array,e.min.array),tr(r.array,e.max.array),t._dirty=!0,r._dirty=!0,this},clone:function(){var e=new rr;return e.copy(this),e}};const ir=rr;var nr,ar,or=0;const sr=m.extend({name:"",position:null,rotation:null,scale:null,worldTransform:null,localTransform:null,autoUpdateLocalTransform:!0,_parent:null,_scene:null,_needsUpdateWorldTransform:!0,_inIterating:!1,__depth:0},(function(){this.name||(this.name=(this.type||"NODE")+"_"+or++),this.position||(this.position=new vt),this.rotation||(this.rotation=new qt),this.scale||(this.scale=new vt(1,1,1)),this.worldTransform=new Ht,this.localTransform=new Ht,this._children=[]}),{target:null,invisible:!1,isSkinnedMesh:function(){return!1},isRenderable:function(){return!1},setName:function(e){var t=this._scene;if(t){var r=t._nodeRepository;delete r[this.name],r[e]=this}this.name=e},add:function(e){var t=e._parent;if(t!==this){t&&t.remove(e),e._parent=this,this._children.push(e);var r=this._scene;r&&r!==e.scene&&e.traverse(this._addSelfToScene,this),e._needsUpdateWorldTransform=!0}},remove:function(e){var t=this._children,r=t.indexOf(e);r<0||(t.splice(r,1),e._parent=null,this._scene&&e.traverse(this._removeSelfFromScene,this))},removeAll:function(){for(var e=this._children,t=0;t0},beforeRender:function(e){},afterRender:function(e,t){},getBoundingBox:function(e,t){return t=sr.prototype.getBoundingBox.call(this,e,t),this.geometry&&this.geometry.boundingBox&&t.union(this.geometry.boundingBox),t},clone:(lr=["castShadow","receiveShadow","mode","culling","cullFace","frontFace","frustumCulling","renderOrder","lineWidth","ignorePicking","ignorePreZ","ignoreGBuffer"],function(){var e=sr.prototype.clone.call(this);e.geometry=this.geometry,e.material=this.material;for(var t=0;t=0&&g[p]>1e-4&&(Qe.transformMat4(T,m,d[_[p]]),Qe.scaleAndAdd(v,v,T,g[p]));S.set(f,v)}}for(f=0;f>t;return e+1},dispose:function(e){var t=this._cache;t.use(e.__uid__);var r=t.get("webgl_texture");r&&e.gl.deleteTexture(r),t.deleteContext(e.__uid__)},isRenderable:function(){},isPowerOfTwo:function(){}});Object.defineProperty(br.prototype,"width",{get:function(){return this._width},set:function(e){this._width=e}}),Object.defineProperty(br.prototype,"height",{get:function(){return this._height},set:function(e){this._height=e}}),br.BYTE=5120,br.UNSIGNED_BYTE=T,br.SHORT=5122,br.UNSIGNED_SHORT=5123,br.INT=5124,br.UNSIGNED_INT=5125,br.FLOAT=S,br.HALF_FLOAT=36193,br.UNSIGNED_INT_24_8_WEBGL=34042,br.DEPTH_COMPONENT=M,br.DEPTH_STENCIL=34041,br.ALPHA=6406,br.RGB=6407,br.RGBA=A,br.LUMINANCE=6409,br.LUMINANCE_ALPHA=6410,br.SRGB=35904,br.SRGB_ALPHA=35906,br.COMPRESSED_RGB_S3TC_DXT1_EXT=33776,br.COMPRESSED_RGBA_S3TC_DXT1_EXT=33777,br.COMPRESSED_RGBA_S3TC_DXT3_EXT=33778,br.COMPRESSED_RGBA_S3TC_DXT5_EXT=33779,br.NEAREST=E,br.LINEAR=C,br.NEAREST_MIPMAP_NEAREST=D,br.LINEAR_MIPMAP_NEAREST=L,br.NEAREST_MIPMAP_LINEAR=P,br.LINEAR_MIPMAP_LINEAR=O,br.REPEAT=N,br.CLAMP_TO_EDGE=I,br.MIRRORED_REPEAT=33648;const wr=br;var Tr=ur.extend({skeleton:null,joints:null},(function(){this.joints||(this.joints=[])}),{offsetMatrix:null,isInstancedMesh:function(){return!1},isSkinnedMesh:function(){return!!(this.skeleton&&this.joints&&this.joints.length>0)},clone:function(){var e=ur.prototype.clone.call(this);return e.skeleton=this.skeleton,this.joints&&(e.joints=this.joints.slice()),e}});Tr.POINTS=0,Tr.LINES=1,Tr.LINE_LOOP=2,Tr.LINE_STRIP=3,Tr.TRIANGLES=4,Tr.TRIANGLE_STRIP=5,Tr.TRIANGLE_FAN=6,Tr.BACK=x,Tr.FRONT=y,Tr.FRONT_AND_BACK=1032,Tr.CW=b,Tr.CCW=w;const Sr=Tr;const Mr={isPowerOfTwo:function(e){return 0==(e&e-1)},nextPowerOfTwo:function(e){return e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e},nearestPowerOfTwo:function(e){return Math.pow(2,Math.round(Math.log(e)/Math.LN2))}};var Ar=Mr.isPowerOfTwo;function Er(e){return Math.pow(2,Math.round(Math.log(e)/Math.LN2))}var Cr=wr.extend((function(){return{image:null,pixels:null,mipmaps:[],convertToPOT:!1}}),{textureType:"texture2D",update:function(e){var t=e.gl;t.bindTexture(t.TEXTURE_2D,this._cache.get("webgl_texture")),this.updateCommon(e);var r=this.format,i=this.type,n=!(!this.convertToPOT||this.mipmaps.length||!this.image||this.wrapS!==wr.REPEAT&&this.wrapT!==wr.REPEAT||!this.NPOT);t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,n?this.wrapS:this.getAvailableWrapS()),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,n?this.wrapT:this.getAvailableWrapT()),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,n?this.magFilter:this.getAvailableMagFilter()),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,n?this.minFilter:this.getAvailableMinFilter());var a=e.getGLExtension("EXT_texture_filter_anisotropic");if(a&&this.anisotropic>1&&t.texParameterf(t.TEXTURE_2D,a.TEXTURE_MAX_ANISOTROPY_EXT,this.anisotropic),36193===i&&(e.getGLExtension("OES_texture_half_float")||(i=S)),this.mipmaps.length)for(var o=this.width,s=this.height,l=0;l=wr.COMPRESSED_RGB_S3TC_DXT1_EXT?e.compressedTexImage2D(e.TEXTURE_2D,r,a,i,n,0,t.pixels):e.texImage2D(e.TEXTURE_2D,r,a,i,n,0,a,o,t.pixels)},generateMipmap:function(e){var t=e.gl;this.useMipmap&&!this.NPOT&&(t.bindTexture(t.TEXTURE_2D,this._cache.get("webgl_texture")),t.generateMipmap(t.TEXTURE_2D))},isPowerOfTwo:function(){return Ar(this.width)&&Ar(this.height)},isRenderable:function(){return this.image?this.image.width>0&&this.image.height>0:!(!this.width||!this.height)},bind:function(e){e.gl.bindTexture(e.gl.TEXTURE_2D,this.getWebGLTexture(e))},unbind:function(e){e.gl.bindTexture(e.gl.TEXTURE_2D,null)},load:function(e,t){var r=U.createImage();t&&(r.crossOrigin=t);var i=this;return r.onload=function(){i.dirty(),i.trigger("success",i)},r.onerror=function(){i.trigger("error",i)},r.src=e,this.image=r,this}});Object.defineProperty(Cr.prototype,"width",{get:function(){return this.image?this.image.width:this._width},set:function(e){this.image?console.warn("Texture from image can't set width"):(this._width!==e&&this.dirty(),this._width=e)}}),Object.defineProperty(Cr.prototype,"height",{get:function(){return this.image?this.image.height:this._height},set:function(e){this.image?console.warn("Texture from image can't set height"):(this._height!==e&&this.dirty(),this._height=e)}});const Dr=Cr;function Lr(e){return{byte:U.Int8Array,ubyte:U.Uint8Array,short:U.Int16Array,ushort:U.Uint16Array}[e]||U.Float32Array}function Pr(e){return"attr_"+e}function Or(e,t,r,i){switch(this.name=e,this.type=t,this.size=r,this.semantic=i||"",this.value=null,r){case 1:this.get=function(e){return this.value[e]},this.set=function(e,t){this.value[e]=t},this.copy=function(e,t){this.value[e]=this.value[e]};break;case 2:this.get=function(e,t){var r=this.value;return t[0]=r[2*e],t[1]=r[2*e+1],t},this.set=function(e,t){var r=this.value;r[2*e]=t[0],r[2*e+1]=t[1]},this.copy=function(e,t){var r=this.value;t*=2,r[e*=2]=r[t],r[e+1]=r[t+1]};break;case 3:this.get=function(e,t){var r=3*e,i=this.value;return t[0]=i[r],t[1]=i[r+1],t[2]=i[r+2],t},this.set=function(e,t){var r=3*e,i=this.value;i[r]=t[0],i[r+1]=t[1],i[r+2]=t[2]},this.copy=function(e,t){var r=this.value;t*=3,r[e*=3]=r[t],r[e+1]=r[t+1],r[e+2]=r[t+2]};break;case 4:this.get=function(e,t){var r=this.value,i=4*e;return t[0]=r[i],t[1]=r[i+1],t[2]=r[i+2],t[3]=r[i+3],t},this.set=function(e,t){var r=this.value,i=4*e;r[i]=t[0],r[i+1]=t[1],r[i+2]=t[2],r[i+3]=t[3]},this.copy=function(e,t){var r=this.value;t*=4,r[e*=4]=r[t],r[e+1]=r[t+1],r[e+2]=r[t+2],r[e+3]=r[t+3]}}}function Nr(e,t,r,i,n){this.name=e,this.type=t,this.buffer=r,this.size=i,this.semantic=n,this.symbol="",this.needsRemove=!1}function Ir(e){this.buffer=e,this.count=0}Or.prototype.init=function(e){if(!this.value||this.value.length!==e*this.size){var t=Lr(this.type);this.value=new t(e*this.size)}},Or.prototype.fromArray=function(e){var t,r=Lr(this.type);if(e[0]&&e[0].length){var i=0,n=this.size;t=new r(e.length*n);for(var a=0;a=0){t||(t=[]);var r=this.indices;return t[0]=r[3*e],t[1]=r[3*e+1],t[2]=r[3*e+2],t}},setTriangleIndices:function(e,t){var r=this.indices;r[3*e]=t[0],r[3*e+1]=t[1],r[3*e+2]=t[2]},isUseIndices:function(){return!!this.indices},initIndicesFromArray:function(e){var t,r=this.vertexCount>65535?U.Uint32Array:U.Uint16Array;if(e[0]&&e[0].length){var i=0;t=new r(3*e.length);for(var n=0;n=0&&(t.splice(r,1),delete this.attributes[e],!0)},getAttribute:function(e){return this.attributes[e]},getEnabledAttributes:function(){var e=this._enabledAttributes,t=this._attributeList;if(e)return e;for(var r=[],i=this.vertexCount,n=0;na[0]&&(a[0]=s),l>a[1]&&(a[1]=l),h>a[2]&&(a[2]=h)}r._dirty=!0,i._dirty=!0}},generateVertexNormals:function(){if(this.vertexCount){var e=this.indices,t=this.attributes,r=t.position.value,i=t.normal.value;if(i&&i.length===r.length)for(var n=0;n65535&&(this.indices=new U.Uint32Array(this.indices));for(var e=this.attributes,t=this.indices,r=this.getEnabledAttributes(),i={},n=0;nthis.distance,n=1;n<8;n++)if(Qe.dot(t[n].array,r)>this.distance!=i)return!0},intersectLine:(Qr=Qe.create(),function(e,t,r){var i=this.distanceToPoint(e),n=this.distanceToPoint(t);if(i>0&&n>0||i<0&&n<0)return null;var a=this.normal.array,o=this.distance,s=e.array;Qe.sub(Qr,t.array,e.array),Qe.normalize(Qr,Qr);var l=Qe.dot(a,Qr);if(0===l)return null;r||(r=new vt);var h=(Qe.dot(a,s)-o)/l;return Qe.scaleAndAdd(r.array,s,Qr,-h),r._dirty=!0,r}),applyTransform:(Zr=Ye.create(),Yr=Et.create(),Kr=Et.create(),Kr[3]=1,function(e){e=e.array,Qe.scale(Kr,this.normal.array,this.distance),Et.transformMat4(Kr,Kr,e),this.distance=Qe.dot(Kr,this.normal.array),Ye.invert(Zr,e),Ye.transpose(Zr,Zr),Yr[3]=0,Qe.copy(Yr,this.normal.array),Et.transformMat4(Yr,Yr,Zr),Qe.copy(this.normal.array,Yr)}),copy:function(e){Qe.copy(this.normal.array,e.normal.array),this.normal._dirty=!0,this.distance=e.distance},clone:function(){var e=new Jr;return e.copy(this),e}};const $r=Jr;var ei,ti=Qe.set,ri=Qe.copy,ii=Qe.transformMat4,ni=Math.min,ai=Math.max,oi=function(){this.planes=[];for(var e=0;e<6;e++)this.planes.push(new $r);for(this.boundingBox=new ir,this.vertices=[],e=0;e<8;e++)this.vertices[e]=Qe.fromValues(0,0,0)};oi.prototype={setFromProjection:function(e){var t=this.planes,r=e.array,i=r[0],n=r[1],a=r[2],o=r[3],s=r[4],l=r[5],h=r[6],u=r[7],c=r[8],d=r[9],f=r[10],p=r[11],m=r[12],g=r[13],_=r[14],v=r[15];ti(t[0].normal.array,o-i,u-s,p-c),t[0].distance=-(v-m),t[0].normalize(),ti(t[1].normal.array,o+i,u+s,p+c),t[1].distance=-(v+m),t[1].normalize(),ti(t[2].normal.array,o+n,u+l,p+d),t[2].distance=-(v+g),t[2].normalize(),ti(t[3].normal.array,o-n,u-l,p-d),t[3].distance=-(v-g),t[3].normalize(),ti(t[4].normal.array,o-a,u-h,p-f),t[4].distance=-(v-_),t[4].normalize(),ti(t[5].normal.array,o+a,u+h,p+f),t[5].distance=-(v+_),t[5].normalize();var y=this.boundingBox,x=this.vertices;if(0===v){var b=l/i,w=-_/(f-1),T=-_/(f+1),S=-T/l,M=-w/l;y.min.set(-S*b,-S,T),y.max.set(S*b,S,w),ti(x[0],-S*b,-S,T),ti(x[1],-S*b,S,T),ti(x[2],S*b,-S,T),ti(x[3],S*b,S,T),ti(x[4],-M*b,-M,w),ti(x[5],-M*b,M,w),ti(x[6],M*b,-M,w),ti(x[7],M*b,M,w)}else{var A=(-1-m)/i,E=(1-m)/i,C=(1-g)/l,D=(-1-g)/l,L=(-1-_)/f,P=(1-_)/f;y.min.set(Math.min(A,E),Math.min(D,C),Math.min(P,L)),y.max.set(Math.max(E,A),Math.max(C,D),Math.max(L,P));var O=y.min.array,N=y.max.array;ti(x[0],O[0],O[1],O[2]),ti(x[1],O[0],N[1],O[2]),ti(x[2],N[0],O[1],O[2]),ti(x[3],N[0],N[1],O[2]),ti(x[4],O[0],O[1],N[2]),ti(x[5],O[0],N[1],N[2]),ti(x[6],N[0],O[1],N[2]),ti(x[7],N[0],N[1],N[2])}},getTransformedBoundingBox:(ei=Qe.create(),function(e,t){var r=this.vertices,i=t.array,n=e.min,a=e.max,o=n.array,s=a.array,l=r[0];ii(ei,l,i),ri(o,ei),ri(s,ei);for(var h=1;h<8;h++)l=r[h],ii(ei,l,i),o[0]=ni(ei[0],o[0]),o[1]=ni(ei[1],o[1]),o[2]=ni(ei[2],o[2]),s[0]=ai(ei[0],s[0]),s[1]=ai(ei[1],s[1]),s[2]=ai(ei[2],s[2]);return n._dirty=!0,a._dirty=!0,e})};const si=oi;var li;const hi=sr.extend((function(){return{projectionMatrix:new Ht,invProjectionMatrix:new Ht,viewMatrix:new Ht,frustum:new si}}),(function(){this.update(!0)}),{update:function(e){sr.prototype.update.call(this,e),Ht.invert(this.viewMatrix,this.worldTransform),this.updateProjectionMatrix(),Ht.invert(this.invProjectionMatrix,this.projectionMatrix),this.frustum.setFromProjection(this.projectionMatrix)},setViewMatrix:function(e){Ht.copy(this.viewMatrix,e),Ht.invert(this.worldTransform,e),this.decomposeWorldTransform()},decomposeProjectionMatrix:function(){},setProjectionMatrix:function(e){Ht.copy(this.projectionMatrix,e),Ht.invert(this.invProjectionMatrix,e),this.decomposeProjectionMatrix()},updateProjectionMatrix:function(){},castRay:(li=Et.create(),function(e,t){var r=void 0!==t?t:new Mt,i=e.array[0],n=e.array[1];return Et.set(li,i,n,-1,1),Et.transformMat4(li,li,this.invProjectionMatrix.array),Et.transformMat4(li,li,this.worldTransform.array),Qe.scale(r.origin.array,li,1/li[3]),Et.set(li,i,n,1,1),Et.transformMat4(li,li,this.invProjectionMatrix.array),Et.transformMat4(li,li,this.worldTransform.array),Qe.scale(li,li,1/li[3]),Qe.sub(r.direction.array,li,r.origin.array),Qe.normalize(r.direction.array,r.direction.array),r.direction._dirty=!0,r.origin._dirty=!0,r})});var ui,ci,di=Ye.create(),fi=Ye.create(),pi={};function mi(e){var t=[],r=Object.keys(e);r.sort();for(var i=0;i0&&console.warn("Found multiple camera in one scene. Use the fist one."),this._cameraList.push(e)):e instanceof qr&&this.lights.push(e),e.name&&(this._nodeRepository[e.name]=e)},removeFromScene:function(e){var t;e instanceof hi?(t=this._cameraList.indexOf(e))>=0&&this._cameraList.splice(t,1):e instanceof qr&&(t=this.lights.indexOf(e))>=0&&this.lights.splice(t,1),e.name&&delete this._nodeRepository[e.name]},getNode:function(e){return this._nodeRepository[e]},setMainCamera:function(e){var t=this._cameraList.indexOf(e);t>=0&&this._cameraList.splice(t,1),this._cameraList.unshift(e)},getMainCamera:function(){return this._cameraList[0]},getLights:function(){return this.lights},updateLights:function(){var e=this.lights;this._previousLightNumber=this._lightNumber;for(var t={},r=0;r0&&this._doUpdateRenderList(o,t,r,i,n)}},isFrustumCulled:(ui=new ir,ci=new Ht,function(e,t,r){var i=e.boundingBox;if(i||(i=e.skeleton&&e.skeleton.boundingBox?e.skeleton.boundingBox:e.geometry.boundingBox),!i)return!1;if(ci.array=r,ui.transformFrom(i,ci),e.castShadow&&this.viewBoundingBoxLastFrame.union(ui),e.frustumCulling){if(!ui.intersectBoundingBox(t.frustum.boundingBox))return!0;ci.array=t.projectionMatrix.array,ui.max.array[2]>0&&ui.min.array[2]<0&&(ui.max.array[2]=-1e-20),ui.applyProjection(ci);var n=ui.min.array,a=ui.max.array;if(a[0]<-1||n[0]>1||a[1]<-1||n[1]>1||a[2]<-1||n[2]>1)return!0}return!1}),_updateLightUniforms:function(){var e=this.lights;e.sort(_i);var t=this._lightUniforms;for(var r in t)for(var i in t[r])t[r][i].value.length=0;for(var n=0;n=this._maxSize&&a>0){var s=r.head;r.remove(s),delete i[s.key],n=s.value,this._lastRemovedEntry=s}o?o.value=t:o=new yi(t),o.key=e,r.insertEntry(o),i[e]=o}return n},e.prototype.get=function(e){var t=this._map[e],r=this._list;if(null!=t)return t!==r.tail&&(r.remove(t),r.insertEntry(t)),t.value},e.prototype.clear=function(){this._list.clear(),this._map={}},e.prototype.len=function(){return this._list.len()},e}();var wi=Mr.isPowerOfTwo,Ti=["px","nx","py","ny","pz","nz"],Si=wr.extend((function(){return{image:{px:null,nx:null,py:null,ny:null,pz:null,nz:null},pixels:{px:null,nx:null,py:null,ny:null,pz:null,nz:null},mipmaps:[]}}),{textureType:"textureCube",update:function(e){var t=e.gl;t.bindTexture(t.TEXTURE_CUBE_MAP,this._cache.get("webgl_texture")),this.updateCommon(e);var r=this.format,i=this.type;t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_S,this.getAvailableWrapS()),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_T,this.getAvailableWrapT()),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MAG_FILTER,this.getAvailableMagFilter()),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MIN_FILTER,this.getAvailableMinFilter());var n=e.getGLExtension("EXT_texture_filter_anisotropic");if(n&&this.anisotropic>1&&t.texParameterf(t.TEXTURE_CUBE_MAP,n.TEXTURE_MAX_ANISOTROPY_EXT,this.anisotropic),36193===i&&(e.getGLExtension("OES_texture_half_float")||(i=S)),this.mipmaps.length)for(var a=this.width,o=this.height,s=0;s0&&e.height>0}Object.defineProperty(Si.prototype,"width",{get:function(){return this.image&&this.image.px?this.image.px.width:this._width},set:function(e){this.image&&this.image.px?console.warn("Texture from image can't set width"):(this._width!==e&&this.dirty(),this._width=e)}}),Object.defineProperty(Si.prototype,"height",{get:function(){return this.image&&this.image.px?this.image.px.height:this._height},set:function(e){this.image&&this.image.px?console.warn("Texture from image can't set height"):(this._height!==e&&this.dirty(),this._height=e)}});const Ai=Si,Ei=hi.extend({fov:50,aspect:1,near:.1,far:2e3},{updateProjectionMatrix:function(){var e=this.fov/180*Math.PI;this.projectionMatrix.perspective(e,this.aspect,this.near,this.far)},decomposeProjectionMatrix:function(){var e=this.projectionMatrix.array,t=2*Math.atan(1/e[5]);this.fov=t/Math.PI*180,this.aspect=e[5]/e[0],this.near=e[14]/(e[10]-1),this.far=e[14]/(e[10]+1)},clone:function(){var e=hi.prototype.clone.call(this);return e.fov=this.fov,e.aspect=this.aspect,e.near=this.near,e.far=this.far,e}});var Ci="framebuffer",Di="renderbuffer",Li="renderbuffer_width",Pi="renderbuffer_height",Oi="renderbuffer_attached",Ni="depthtexture_attached",Ii=36160,Ri=36161,Fi=36096,Bi=m.extend({depthBuffer:!0,viewport:null,_width:0,_height:0,_textures:null,_boundRenderer:null},(function(){this._cache=new xr,this._textures={}}),{getTextureWidth:function(){return this._width},getTextureHeight:function(){return this._height},bind:function(e){if(e.__currentFrameBuffer){if(e.__currentFrameBuffer===this)return;console.warn("Renderer already bound with another framebuffer. Unbind it first")}e.__currentFrameBuffer=this;var t=e.gl;t.bindFramebuffer(Ii,this._getFrameBufferGL(e)),this._boundRenderer=e;var r=this._cache;r.put("viewport",e.viewport);var i,n,a=!1;for(var o in this._textures){a=!0;var s=this._textures[o];s&&(i=s.texture.width,n=s.texture.height,this._doAttach(e,s.texture,o,s.target))}this._width=i,this._height=n,!a&&this.depthBuffer&&console.error("Must attach texture before bind, or renderbuffer may have incorrect width and height."),this.viewport?e.setViewport(this.viewport):e.setViewport(0,0,i,n,1);var l=r.get("attached_textures");if(l)for(var o in l)if(!this._textures[o]){var h=l[o];this._doDetach(t,o,h)}if(!r.get(Ni)&&this.depthBuffer){r.miss(Di)&&r.put(Di,t.createRenderbuffer());var u=r.get(Di);i===r.get(Li)&&n===r.get(Pi)||(t.bindRenderbuffer(Ri,u),t.renderbufferStorage(Ri,t.DEPTH_COMPONENT16,i,n),r.put(Li,i),r.put(Pi,n),t.bindRenderbuffer(Ri,null)),r.get(Oi)||(t.framebufferRenderbuffer(Ii,Fi,Ri,u),r.put(Oi,!0))}},unbind:function(e){e.__currentFrameBuffer=null,e.gl.bindFramebuffer(Ii,null),this._boundRenderer=null,this._cache.use(e.__uid__);var t=this._cache.get("viewport");t&&e.setViewport(t),this.updateMipmap(e)},updateMipmap:function(e){var t=e.gl;for(var r in this._textures){var i=this._textures[r];if(i){var n=i.texture;if(!n.NPOT&&n.useMipmap&&n.minFilter===wr.LINEAR_MIPMAP_LINEAR){var a="textureCube"===n.textureType?34067:3553;t.bindTexture(a,n.getWebGLTexture(e)),t.generateMipmap(a),t.bindTexture(a,null)}}}},checkStatus:function(e){return e.checkFramebufferStatus(Ii)},_getFrameBufferGL:function(e){var t=this._cache;return t.use(e.__uid__),t.miss(Ci)&&t.put(Ci,e.gl.createFramebuffer()),t.get(Ci)},attach:function(e,t,r){if(!e.width)throw new Error("The texture attached to color buffer is not a valid.");t=t||36064,r=r||3553;var i,n=this._boundRenderer;if(n&&n.gl){var a=this._cache;a.use(n.__uid__),i=a.get("attached_textures")}var o=this._textures[t];if(!o||o.target!==r||o.texture!==e||!i||null==i[t]){var s=!0;n&&(s=this._doAttach(n,e,t,r),this.viewport||n.setViewport(0,0,e.width,e.height,1)),s&&(this._textures[t]=this._textures[t]||{},this._textures[t].texture=e,this._textures[t].target=r)}},_doAttach:function(e,t,r,i){var n=e.gl,a=t.getWebGLTexture(e),o=this._cache.get("attached_textures");if(o&&o[r]){var s=o[r];if(s.texture===t&&s.target===i)return}var l=!0;if(((r=+r)===Fi||r===R)&&(e.getGLExtension("WEBGL_depth_texture")||(console.error("Depth texture is not supported by the browser"),l=!1),t.format!==M&&34041!==t.format&&(console.error("The texture attached to depth buffer is not a valid."),l=!1),l)){var h=this._cache.get(Di);h&&(n.framebufferRenderbuffer(Ii,Fi,Ri,null),n.deleteRenderbuffer(h),this._cache.put(Di,!1)),this._cache.put(Oi,!1),this._cache.put(Ni,!0)}return n.framebufferTexture2D(Ii,r,i,a,0),o||(o={},this._cache.put("attached_textures",o)),o[r]=o[r]||{},o[r].texture=t,o[r].target=i,l},_doDetach:function(e,t,r){e.framebufferTexture2D(Ii,t,r,null,0);var i=this._cache.get("attached_textures");i&&i[t]&&(i[t]=null),t!==Fi&&t!==R||this._cache.put(Ni,!1)},detach:function(e,t){this._textures[e]=null,this._boundRenderer&&(this._cache.use(this._boundRenderer.__uid__),this._doDetach(this._boundRenderer.gl,e,t))},dispose:function(e){var t=e.gl,r=this._cache;r.use(e.__uid__);var i=r.get(Di);i&&t.deleteRenderbuffer(i);var n=r.get(Ci);n&&t.deleteFramebuffer(n),r.deleteContext(e.__uid__),this._textures={}}});Bi.DEPTH_ATTACHMENT=Fi,Bi.COLOR_ATTACHMENT0=36064,Bi.STENCIL_ATTACHMENT=36128,Bi.DEPTH_STENCIL_ATTACHMENT=R;const zi=Bi;var Gi=["px","nx","py","ny","pz","nz"];const Ui=m.extend((function(){var e={position:new vt,far:1e3,near:.1,texture:null,shadowMapPass:null},t=e._cameras={px:new Ei({fov:90}),nx:new Ei({fov:90}),py:new Ei({fov:90}),ny:new Ei({fov:90}),pz:new Ei({fov:90}),nz:new Ei({fov:90})};return t.px.lookAt(vt.POSITIVE_X,vt.NEGATIVE_Y),t.nx.lookAt(vt.NEGATIVE_X,vt.NEGATIVE_Y),t.py.lookAt(vt.POSITIVE_Y,vt.POSITIVE_Z),t.ny.lookAt(vt.NEGATIVE_Y,vt.NEGATIVE_Z),t.pz.lookAt(vt.POSITIVE_Z,vt.NEGATIVE_Y),t.nz.lookAt(vt.NEGATIVE_Z,vt.NEGATIVE_Y),e._frameBuffer=new zi,e}),{getCamera:function(e){return this._cameras[e]},render:function(e,t,r){var i=e.gl;r||t.update();for(var n=this.texture.width,a=2*Math.atan(n/(n-.5))/Math.PI*180,o=0;o<6;o++){var s=Gi[o],l=this._cameras[s];if(vt.copy(l.position,this.position),l.far=this.far,l.near=this.near,l.fov=a,this.shadowMapPass){l.update();var h=t.getBoundingBox();h.applyTransform(l.viewMatrix),t.viewBoundingBoxLastFrame.copy(h),this.shadowMapPass.render(e,t,l,!0)}this._frameBuffer.attach(this.texture,i.COLOR_ATTACHMENT0,i.TEXTURE_CUBE_MAP_POSITIVE_X+o),this._frameBuffer.bind(e),e.render(t,l,!0),this._frameBuffer.unbind(e)}},dispose:function(e){this._frameBuffer.dispose(e)}}),ki=Vr.extend({dynamic:!1,widthSegments:1,heightSegments:1},(function(){this.build()}),{build:function(){for(var e=this.heightSegments,t=this.widthSegments,r=this.attributes,i=[],n=[],a=[],o=[],s=0;s<=e;s++)for(var l=s/e,h=0;h<=t;h++){var u=h/t;if(i.push([2*u-1,2*l-1,0]),n&&n.push([u,l]),a&&a.push([0,0,1]),h0?this.material.define("fragment","LOD"):this.material.undefine("fragment","LOD"),e.renderPass([this],r)}}),Xi=ji;function qi(e){return e.charCodeAt(0)+(e.charCodeAt(1)<<8)+(e.charCodeAt(2)<<16)+(e.charCodeAt(3)<<24)}var Zi=qi("DXT1"),Yi=qi("DXT3"),Ki=qi("DXT5");const Qi=function(e,t){var r=new Int32Array(e,0,31);if(542327876!==r[0])return null;if(4&!r(20))return null;var i,n,a=r(21),o=r[4],s=r[3],l=512&r[28],h=131072&r[2];switch(a){case Zi:i=8,n=wr.COMPRESSED_RGB_S3TC_DXT1_EXT;break;case Yi:i=16,n=wr.COMPRESSED_RGBA_S3TC_DXT3_EXT;break;case Ki:i=16,n=wr.COMPRESSED_RGBA_S3TC_DXT5_EXT;break;default:return null}var u=r[1]+4,c=l?6:1,d=1;h&&(d=Math.max(1,r[7]));for(var f=[],p=0;p0){var n=Math.pow(2,e[3]-128-8+i);t[r+0]=e[0]*n,t[r+1]=e[1]*n,t[r+2]=e[2]*n}else t[r+0]=0,t[r+1]=0,t[r+2]=0;return t[r+3]=1,t}function en(e,t,r,i){for(var n,a,o=0,s=0,l=i;l>0;)if(e[s][0]=t[r++],e[s][1]=t[r++],e[s][2]=t[r++],e[s][3]=t[r++],1===e[s][0]&&1===e[s][1]&&1===e[s][2]){for(var h=e[s][3]<>>0;h>0;h--)n=e[s-1],(a=e[s])[0]=n[0],a[1]=n[1],a[2]=n[2],a[3]=n[3],s++,l--;o+=8}else s++,l--,o=0;return r}function tn(e,t,r,i){if(i<8|i>32767)return en(e,t,r,i);if(2!=(n=t[r++]))return en(e,t,r-1,i);if(e[0][1]=t[r++],e[0][2]=t[r++],n=t[r++],(e[0][2]<<8>>>0|n)>>>0!==i)return null;for(var n=0;n<4;n++)for(var a=0;a128){o=(127&o)>>>0;for(var s=t[r++];o--;)e[a++][n]=s}else for(;o--;)e[a++][n]=t[r++]}return r}const rn=function(e,t,r){null==r&&(r=0);var i=new Uint8Array(e),n=i.length;if("#?"===function(e,t,r){for(var i="",n=0;n<2;n++)i+=Ji(e[n]);return i}(i)){for(var a=2;a=n)){a+=2;for(var o="";a20)return console.warn("Given image is not a height map"),e}var d,f,p,m;l%(4*i)==0?(d=o.data[l],p=o.data[l+4]):l%(4*i)==4*(i-1)?(d=o.data[l-4],p=o.data[l]):(d=o.data[l-4],p=o.data[l+4]),l<4*i?(f=o.data[l],m=o.data[l+4*i]):l>i*(n-1)*4?(f=o.data[l-4*i],m=o.data[l]):(f=o.data[l-4*i],m=o.data[l+4*i]),s.data[l]=d-p+127,s.data[l+1]=f-m+127,s.data[l+2]=255,s.data[l+3]=255}return a.putImageData(s,0,0),r},isHeightImage:function(e,t,r){if(!e||!e.width||!e.height)return!1;var i=document.createElement("canvas"),n=i.getContext("2d"),a=t||32;r=r||20,i.width=i.height=a,n.drawImage(e,0,0,a,a);for(var o=n.getImageData(0,0,a,a),s=0;sr)return!1}return!0},_fetchTexture:function(e,t,r){U.request.get({url:e,responseType:"arraybuffer",onload:t,onerror:r})},createChessboard:function(e,t,r,i){e=e||512,t=t||64,r=r||"black",i=i||"white";var n=Math.ceil(e/t),a=document.createElement("canvas");a.width=e,a.height=e;var o=a.getContext("2d");o.fillStyle=i,o.fillRect(0,0,e,e),o.fillStyle=r;for(var s=0;s=0||(on.forEach((function(t){e.on(t,this[sn(t)],this)}),this),this._meshes.push(e))},detachFromMesh:function(e){var t=this._meshes.indexOf(e);t>=0&&this._meshes.splice(t,1),on.forEach((function(t){e.off(t,this[sn(t)])}),this)},dispose:function(){this._meshes.forEach((function(e){this.detachFromMesh(e)}),this)}};const hn=ln,un=hi.extend({left:-1,right:1,near:-1,far:1,top:1,bottom:-1},{updateProjectionMatrix:function(){this.projectionMatrix.ortho(this.left,this.right,this.bottom,this.top,this.near,this.far)},decomposeProjectionMatrix:function(){var e=this.projectionMatrix.array;this.left=(-1-e[12])/e[0],this.right=(1-e[12])/e[0],this.top=(1-e[13])/e[5],this.bottom=(-1-e[13])/e[5],this.near=-(-1-e[14])/e[10],this.far=-(1-e[14])/e[10]},clone:function(){var e=hi.prototype.clone.call(this);return e.left=this.left,e.right=this.right,e.near=this.near,e.far=this.far,e.top=this.top,e.bottom=this.bottom,e}});Xe.import("\n@export clay.compositor.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n v_Texcoord = texcoord;\n gl_Position = worldViewProjection * vec4(position, 1.0);\n}\n@end");var cn=new ki,dn=new Sr({geometry:cn,frustumCulling:!1}),fn=new un;const pn=m.extend((function(){return{fragment:"",outputs:null,material:null,blendWithPrevious:!1,clearColor:!1,clearDepth:!0}}),(function(){var e=new Xe(Xe.source("clay.compositor.vertex"),this.fragment),t=new le({shader:e});t.enableTexturesAll(),this.material=t}),{setUniform:function(e,t){this.material.setUniform(e,t)},getUniform:function(e){var t=this.material.uniforms[e];if(t)return t.value},attachOutput:function(e,t){this.outputs||(this.outputs={}),t=t||36064,this.outputs[t]=e},detachOutput:function(e){for(var t in this.outputs)this.outputs[t]===e&&(this.outputs[t]=null)},bind:function(e,t){if(this.outputs)for(var r in this.outputs){var i=this.outputs[r];i&&t.attach(i,r)}t&&t.bind(e)},unbind:function(e,t){t.unbind(e)},render:function(e,t){var r=e.gl;if(t){this.bind(e,t);var i=e.getGLExtension("EXT_draw_buffers");if(i&&this.outputs){var n=[];for(var a in this.outputs)(a=+a)>=r.COLOR_ATTACHMENT0&&a<=r.COLOR_ATTACHMENT0+8&&n.push(a);i.drawBuffersEXT(n)}}this.trigger("beforerender",this,e);var o=this.clearDepth?r.DEPTH_BUFFER_BIT:0;if(r.depthMask(!0),this.clearColor){o|=r.COLOR_BUFFER_BIT,r.colorMask(!0,!0,!0,!0);var s=this.clearColor;Array.isArray(s)&&r.clearColor(s[0],s[1],s[2],s[3])}r.clear(o),this.blendWithPrevious?(r.enable(r.BLEND),this.material.transparent=!0):(r.disable(r.BLEND),this.material.transparent=!1),this.renderQuad(e),this.trigger("afterrender",this,e),t&&this.unbind(e,t)},renderQuad:function(e){dn.material=this.material,e.renderPass([dn],fn)},dispose:function(e){}});var mn={},gn=["px","nx","py","ny","pz","nz"];mn.prefilterEnvironmentMap=function(e,t,r,i,n){n&&i||(i=mn.generateNormalDistribution(),n=mn.integrateBRDF(e,i));var a=(r=r||{}).width||64,o=r.height||64,s=r.type||t.type,l=new Ai({width:a,height:o,type:s,flipY:!1,mipmaps:[]});l.isPowerOfTwo()||console.warn("Width and height must be power of two to enable mipmap.");var h=Math.min(a,o),u=Math.log(h)/Math.log(2)+1,c=new le({shader:new Xe({vertex:Xe.source("clay.skybox.vertex"),fragment:"#define SHADER_NAME prefilter\n#define SAMPLE_NUMBER 1024\n#define PI 3.14159265358979\nuniform mat4 viewInverse : VIEWINVERSE;\nuniform samplerCube environmentMap;\nuniform sampler2D normalDistribution;\nuniform float roughness : 0.5;\nvarying vec2 v_Texcoord;\nvarying vec3 v_WorldPosition;\n@import clay.util.rgbm\nvec3 importanceSampleNormal(float i, float roughness, vec3 N) {\n vec3 H = texture2D(normalDistribution, vec2(roughness, i)).rgb;\n vec3 upVector = abs(N.y) > 0.999 ? vec3(1.0, 0.0, 0.0) : vec3(0.0, 1.0, 0.0);\n vec3 tangentX = normalize(cross(N, upVector));\n vec3 tangentZ = cross(N, tangentX);\n return normalize(tangentX * H.x + N * H.y + tangentZ * H.z);\n}\nvoid main() {\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(v_WorldPosition - eyePos);\n vec3 N = V;\n vec3 prefilteredColor = vec3(0.0);\n float totalWeight = 0.0;\n float fMaxSampleNumber = float(SAMPLE_NUMBER);\n for (int i = 0; i < SAMPLE_NUMBER; i++) {\n vec3 H = importanceSampleNormal(float(i) / fMaxSampleNumber, roughness, N);\n vec3 L = reflect(-V, H);\n float NoL = clamp(dot(N, L), 0.0, 1.0);\n if (NoL > 0.0) {\n prefilteredColor += decodeHDR(textureCube(environmentMap, L)).rgb * NoL;\n totalWeight += NoL;\n }\n }\n gl_FragColor = encodeHDR(vec4(prefilteredColor / totalWeight, 1.0));\n}\n"})});c.set("normalDistribution",i),r.encodeRGBM&&c.define("fragment","RGBM_ENCODE"),r.decodeRGBM&&c.define("fragment","RGBM_DECODE");var d,f=new vi;if("texture2D"===t.textureType){var p=new Ai({width:a,height:o,type:s===wr.FLOAT?wr.HALF_FLOAT:s});an.panoramaToCubeMap(e,t,p,{encodeRGBM:r.decodeRGBM}),t=p}(d=new ji({scene:f,material:c})).material.set("environmentMap",t);var m=new Ui({texture:l});r.encodeRGBM&&(s=l.type=wr.UNSIGNED_BYTE);for(var g=new Dr({width:a,height:o,type:s}),_=new zi({depthBuffer:!1}),v=U[s===wr.UNSIGNED_BYTE?"Uint8Array":"Float32Array"],y=0;y 0.999 ? vec3(1.0, 0.0, 0.0) : vec3(0.0, 1.0, 0.0);\n vec3 tangentX = normalize(cross(N, upVector));\n vec3 tangentZ = cross(N, tangentX);\n return normalize(tangentX * H.x + N * H.y + tangentZ * H.z);\n}\nfloat G_Smith(float roughness, float NoV, float NoL) {\n float k = roughness * roughness / 2.0;\n float G1V = NoV / (NoV * (1.0 - k) + k);\n float G1L = NoL / (NoL * (1.0 - k) + k);\n return G1L * G1V;\n}\nvoid main() {\n vec2 uv = gl_FragCoord.xy / viewportSize;\n float NoV = uv.x;\n float roughness = uv.y;\n vec3 V;\n V.x = sqrt(1.0 - NoV * NoV);\n V.y = 0.0;\n V.z = NoV;\n float A = 0.0;\n float B = 0.0;\n for (int i = 0; i < SAMPLE_NUMBER; i++) {\n vec3 H = importanceSampleNormal(float(i) / fSampleNumber, roughness, N);\n vec3 L = reflect(-V, H);\n float NoL = clamp(L.z, 0.0, 1.0);\n float NoH = clamp(H.z, 0.0, 1.0);\n float VoH = clamp(dot(V, H), 0.0, 1.0);\n if (NoL > 0.0) {\n float G = G_Smith(roughness, NoV, NoL);\n float G_Vis = G * VoH / (NoH * NoV);\n float Fc = pow(1.0 - VoH, 5.0);\n A += (1.0 - Fc) * G_Vis;\n B += Fc * G_Vis;\n }\n }\n gl_FragColor = vec4(vec2(A, B) / fSampleNumber, 0.0, 1.0);\n}\n"}),n=new Dr({width:512,height:256,type:wr.HALF_FLOAT,wrapS:wr.CLAMP_TO_EDGE,wrapT:wr.CLAMP_TO_EDGE,minFilter:wr.NEAREST,magFilter:wr.NEAREST,useMipmap:!1});return i.setUniform("normalDistribution",t),i.setUniform("viewportSize",[512,256]),i.attachOutput(n),i.render(e,r),r.dispose(e),n},mn.generateNormalDistribution=function(e,t){for(var r=new Dr({width:e=e||256,height:t=t||1024,type:wr.FLOAT,minFilter:wr.NEAREST,magFilter:wr.NEAREST,wrapS:wr.CLAMP_TO_EDGE,wrapT:wr.CLAMP_TO_EDGE,useMipmap:!1}),i=new Float32Array(t*e*4),n=[],a=0;a>>16)>>>0;h=(((16711935&(h=((252645135&(h=((858993459&(h=((1431655765&h)<<1|(2863311530&h)>>>1)>>>0))<<2|(3435973836&h)>>>2)>>>0))<<4|(4042322160&h)>>>4)>>>0))<<8|(4278255360&h)>>>8)>>>0)/4294967296;var u=Math.sqrt((1-h)/(1+(s*s-1)*h));n[l]=u}for(l=0;l65535?Uint32Array:Uint16Array,v=this.indices=new _(t*e*6),y=this.radius,x=this.phiStart,b=this.phiLength,w=this.thetaStart,T=this.thetaLength,S=[],M=[],A=0,E=1/(y=this.radius);for(d=0;d<=e;d++)for(c=0;c<=t;c++)h=c/t,u=d/e,o=-y*Math.cos(x+h*b)*Math.sin(w+u*T),s=y*Math.cos(w+u*T),l=y*Math.sin(x+h*b)*Math.sin(w+u*T),S[0]=o,S[1]=s,S[2]=l,M[0]=h,M[1]=u,r.set(A,S),i.set(A,M),S[0]*=E,S[1]*=E,S[2]*=E,n.set(A,S),A++;var C=t+1,D=0;for(d=0;d255?255:e}function Qn(e){return e<0?0:e>1?1:e}function Jn(e){var t=e;return t.length&&"%"===t.charAt(t.length-1)?Kn(parseFloat(t)/100*255):Kn(parseInt(t,10))}function $n(e){var t=e;return t.length&&"%"===t.charAt(t.length-1)?Qn(parseFloat(t)/100):Qn(parseFloat(t))}function ea(e,t,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?e+(t-e)*r*6:2*r<1?t:3*r<2?e+(t-e)*(2/3-r)*6:e}function ta(e,t,r,i,n){return e[0]=t,e[1]=r,e[2]=i,e[3]=n,e}function ra(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}var ia=new bi(20),na=null;function aa(e,t){na&&ra(na,t),na=ia.put(e,na||t.slice())}function oa(e,t){if(e){t=t||[];var r=ia.get(e);if(r)return ra(t,r);var i=(e+="").replace(/ /g,"").toLowerCase();if(i in Yn)return ra(t,Yn[i]),aa(e,t),t;var n,a=i.length;if("#"===i.charAt(0))return 4===a||5===a?(n=parseInt(i.slice(1,4),16))>=0&&n<=4095?(ta(t,(3840&n)>>4|(3840&n)>>8,240&n|(240&n)>>4,15&n|(15&n)<<4,5===a?parseInt(i.slice(4),16)/15:1),aa(e,t),t):void ta(t,0,0,0,1):7===a||9===a?(n=parseInt(i.slice(1,7),16))>=0&&n<=16777215?(ta(t,(16711680&n)>>16,(65280&n)>>8,255&n,9===a?parseInt(i.slice(7),16)/255:1),aa(e,t),t):void ta(t,0,0,0,1):void 0;var o=i.indexOf("("),s=i.indexOf(")");if(-1!==o&&s+1===a){var l=i.substr(0,o),h=i.substr(o+1,s-(o+1)).split(","),u=1;switch(l){case"rgba":if(4!==h.length)return 3===h.length?ta(t,+h[0],+h[1],+h[2],1):ta(t,0,0,0,1);u=$n(h.pop());case"rgb":return 3!==h.length?void ta(t,0,0,0,1):(ta(t,Jn(h[0]),Jn(h[1]),Jn(h[2]),u),aa(e,t),t);case"hsla":return 4!==h.length?void ta(t,0,0,0,1):(h[3]=$n(h[3]),sa(h,t),aa(e,t),t);case"hsl":return 3!==h.length?void ta(t,0,0,0,1):(sa(h,t),aa(e,t),t);default:return}}ta(t,0,0,0,1)}}function sa(e,t){var r=(parseFloat(e[0])%360+360)%360/360,i=$n(e[1]),n=$n(e[2]),a=n<=.5?n*(i+1):n+i-n*i,o=2*n-a;return ta(t=t||[],Kn(255*ea(o,a,r+1/3)),Kn(255*ea(o,a,r)),Kn(255*ea(o,a,r-1/3)),1),4===e.length&&(t[3]=e[3]),t}var la=Object.prototype.toString,ha=Array.prototype,ua=ha.forEach,ca=(ha.filter,ha.slice,ha.map,function(){}.constructor),da=ca?ca.prototype:null;function fa(e){return!!e&&"string"!=typeof e&&"number"==typeof e.length}function pa(e){if(!e)return[];if(Object.keys)return Object.keys(e);var t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(r);return t}function ma(e,t){for(var r=new e.constructor(e.length+t.length),i=0;io)i.length=o;else for(var s=a;s=2&&this.interpolable},e.prototype.getAdditiveTrack=function(){return this._additiveTrack},e.prototype.addKeyframe=function(e,t){e>=this.maxTime?this.maxTime=e:this._needsSort=!0;var r=this.keyframes,i=r.length;if(this.interpolable)if(fa(t)){var n=function(e){return fa(e&&e[0])?2:1}(t);if(i>0&&this.arrDim!==n)return void(this.interpolable=!1);if(1===n&&"number"!=typeof t[0]||2===n&&"number"!=typeof t[0][0])return void(this.interpolable=!1);if(i>0){var a=r[i-1];this._isAllValueEqual&&(1===n&&wa(t,a.value)||(this._isAllValueEqual=!1))}this.arrDim=n}else{if(this.arrDim>0)return void(this.interpolable=!1);if("string"==typeof t){var o=oa(t);o?(t=o,this.isValueColor=!0):this.interpolable=!1}else if("number"!=typeof t)return void(this.interpolable=!1);this._isAllValueEqual&&i>0&&(a=r[i-1],(this.isValueColor&&!wa(a.value,t)||a.value!==t)&&(this._isAllValueEqual=!1))}var s={time:e,value:t,percent:0};return this.keyframes.push(s),s},e.prototype.prepare=function(e){var t=this.keyframes;this._needsSort&&t.sort((function(e,t){return e.time-t.time}));for(var r=this.arrDim,i=t.length,n=t[i-1],a=0;a0&&a!==i-1&&ba(t[a].value,n.value,r);if(e&&this.needsAnimate()&&e.needsAnimate()&&r===e.arrDim&&this.isValueColor===e.isValueColor&&!e._finished){this._additiveTrack=e;var o=t[0].value;for(a=0;a=0&&!(a[r].percent<=t);r--);r=Math.min(r,o-2)}else{for(r=this._lastFrame;rt);r++);r=Math.min(r-1,o-2)}var u=a[r+1],c=a[r];if(c&&u){this._lastFrame=r,this._lastFramePercent=t;var d=u.percent-c.percent;if(0!==d){var f=(t-c.percent)/d,p=i?this._additiveValue:h?Ea:e[s];if((l>0||h)&&!p&&(p=this._additiveValue=[]),this.useSpline){var m=a[r][n],g=a[0===r?r:r-1][n],_=a[r>o-2?o-1:r+1][n],v=a[r>o-3?o-1:r+2][n];if(l>0)1===l?Sa(p,g,m,_,v,f,f*f,f*f*f):function(e,t,r,i,n,a,o,s){for(var l=t.length,h=t[0].length,u=0;u0?1===l?va(p,c[n],u[n],f):function(e,t,r,i){for(var n=t.length,a=n&&t[0].length,o=0;o.5?t:e}(c[n],u[n],f),i?this._additiveValue=y:e[s]=y);i&&this._addToTarget(e)}}}},e.prototype._addToTarget=function(e){var t=this.arrDim,r=this.propName,i=this._additiveValue;0===t?this.isValueColor?(oa(e[r],Ea),ya(Ea,Ea,i,1),e[r]=Aa(Ea)):e[r]=e[r]+i:1===t?ya(e[r],e[r],i,1):2===t&&xa(e[r],e[r],i,1)},e}();const Da=function(){function e(e,t,r){this._tracks={},this._trackKeys=[],this._delay=0,this._maxTime=0,this._paused=!1,this._started=0,this._clip=null,this._target=e,this._loop=t,t&&r?function(){for(var e=[],t=0;t0)){this._started=1;for(var r=this,i=[],n=0;n1){var o=a.pop();n.addKeyframe(o.time,e[i]),n.prepare(n.getAdditiveTrack())}}}},e}(),La={_animators:null,getAnimators:function(){return this._animators=this._animators||[],this._animators},animate:function(e,t){var r;if(this._animators=this._animators||[],e){for(var i=e.split("."),n=this,a=0,o=i.length;a=0&&s.splice(e,1)})),s.push(l),this.__zr&&this.__zr.animation.addAnimator(l),l},stopAnimation:function(e){this._animators=this._animators||[];for(var t=this._animators,r=t.length,i=0;i 1e-4)\n{\n skinMatrixWS += getSkinMatrix(joint.y) * weight.y;\n}\nif (weight.z > 1e-4)\n{\n skinMatrixWS += getSkinMatrix(joint.z) * weight.z;\n}\nfloat weightW = 1.0-weight.x-weight.y-weight.z;\nif (weightW > 1e-4)\n{\n skinMatrixWS += getSkinMatrix(joint.w) * weightW;\n}\n@end\n@export clay.chunk.instancing_header\n#ifdef INSTANCING\nattribute vec4 instanceMat1;\nattribute vec4 instanceMat2;\nattribute vec4 instanceMat3;\n#endif\n@end\n@export clay.chunk.instancing_matrix\nmat4 instanceMat = mat4(\n vec4(instanceMat1.xyz, 0.0),\n vec4(instanceMat2.xyz, 0.0),\n vec4(instanceMat3.xyz, 0.0),\n vec4(instanceMat1.w, instanceMat2.w, instanceMat3.w, 1.0)\n);\n@end\n@export clay.util.parallax_correct\nvec3 parallaxCorrect(in vec3 dir, in vec3 pos, in vec3 boxMin, in vec3 boxMax) {\n vec3 first = (boxMax - pos) / dir;\n vec3 second = (boxMin - pos) / dir;\n vec3 further = max(first, second);\n float dist = min(further.x, min(further.y, further.z));\n vec3 fixedPos = pos + dir * dist;\n vec3 boxCenter = (boxMax + boxMin) * 0.5;\n return normalize(fixedPos - boxCenter);\n}\n@end\n@export clay.util.clamp_sample\nvec4 clampSample(const in sampler2D texture, const in vec2 coord)\n{\n#ifdef STEREO\n float eye = step(0.5, coord.x) * 0.5;\n vec2 coordClamped = clamp(coord, vec2(eye, 0.0), vec2(0.5 + eye, 1.0));\n#else\n vec2 coordClamped = clamp(coord, vec2(0.0), vec2(1.0));\n#endif\n return texture2D(texture, coordClamped);\n}\n@end\n@export clay.util.ACES\nvec3 ACESToneMapping(vec3 color)\n{\n const float A = 2.51;\n const float B = 0.03;\n const float C = 2.43;\n const float D = 0.59;\n const float E = 0.14;\n return (color * (A * color + B)) / (color * (C * color + D) + E);\n}\n@end";function Oa(e){return e instanceof HTMLCanvasElement||e instanceof HTMLImageElement||e instanceof Image}Object.assign(sr.prototype,La),Xe.import(Pa),Xe.import(qe),Xe.import("\n@export ecgl.common.transformUniforms\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nuniform mat4 world : WORLD;\n@end\n\n@export ecgl.common.attributes\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\nattribute vec3 normal : NORMAL;\n@end\n\n@export ecgl.common.uv.header\nuniform vec2 uvRepeat : [1.0, 1.0];\nuniform vec2 uvOffset : [0.0, 0.0];\nuniform vec2 detailUvRepeat : [1.0, 1.0];\nuniform vec2 detailUvOffset : [0.0, 0.0];\n\nvarying vec2 v_Texcoord;\nvarying vec2 v_DetailTexcoord;\n@end\n\n@export ecgl.common.uv.main\nv_Texcoord = texcoord * uvRepeat + uvOffset;\nv_DetailTexcoord = texcoord * detailUvRepeat + detailUvOffset;\n@end\n\n@export ecgl.common.uv.fragmentHeader\nvarying vec2 v_Texcoord;\nvarying vec2 v_DetailTexcoord;\n@end\n\n\n@export ecgl.common.albedo.main\n\n vec4 albedoTexel = vec4(1.0);\n#ifdef DIFFUSEMAP_ENABLED\n albedoTexel = texture2D(diffuseMap, v_Texcoord);\n #ifdef SRGB_DECODE\n albedoTexel = sRGBToLinear(albedoTexel);\n #endif\n#endif\n\n#ifdef DETAILMAP_ENABLED\n vec4 detailTexel = texture2D(detailMap, v_DetailTexcoord);\n #ifdef SRGB_DECODE\n detailTexel = sRGBToLinear(detailTexel);\n #endif\n albedoTexel.rgb = mix(albedoTexel.rgb, detailTexel.rgb, detailTexel.a);\n albedoTexel.a = detailTexel.a + (1.0 - detailTexel.a) * albedoTexel.a;\n#endif\n\n@end\n\n@export ecgl.common.wireframe.vertexHeader\n\n#ifdef WIREFRAME_QUAD\nattribute vec4 barycentric;\nvarying vec4 v_Barycentric;\n#elif defined(WIREFRAME_TRIANGLE)\nattribute vec3 barycentric;\nvarying vec3 v_Barycentric;\n#endif\n\n@end\n\n@export ecgl.common.wireframe.vertexMain\n\n#if defined(WIREFRAME_QUAD) || defined(WIREFRAME_TRIANGLE)\n v_Barycentric = barycentric;\n#endif\n\n@end\n\n\n@export ecgl.common.wireframe.fragmentHeader\n\nuniform float wireframeLineWidth : 1;\nuniform vec4 wireframeLineColor: [0, 0, 0, 0.5];\n\n#ifdef WIREFRAME_QUAD\nvarying vec4 v_Barycentric;\nfloat edgeFactor () {\n vec4 d = fwidth(v_Barycentric);\n vec4 a4 = smoothstep(vec4(0.0), d * wireframeLineWidth, v_Barycentric);\n return min(min(min(a4.x, a4.y), a4.z), a4.w);\n}\n#elif defined(WIREFRAME_TRIANGLE)\nvarying vec3 v_Barycentric;\nfloat edgeFactor () {\n vec3 d = fwidth(v_Barycentric);\n vec3 a3 = smoothstep(vec3(0.0), d * wireframeLineWidth, v_Barycentric);\n return min(min(a3.x, a3.y), a3.z);\n}\n#endif\n\n@end\n\n\n@export ecgl.common.wireframe.fragmentMain\n\n#if defined(WIREFRAME_QUAD) || defined(WIREFRAME_TRIANGLE)\n if (wireframeLineWidth > 0.) {\n vec4 lineColor = wireframeLineColor;\n#ifdef SRGB_DECODE\n lineColor = sRGBToLinear(lineColor);\n#endif\n\n gl_FragColor.rgb = mix(gl_FragColor.rgb, lineColor.rgb, (1.0 - edgeFactor()) * lineColor.a);\n }\n#endif\n@end\n\n\n\n\n@export ecgl.common.bumpMap.header\n\n#ifdef BUMPMAP_ENABLED\nuniform sampler2D bumpMap;\nuniform float bumpScale : 1.0;\n\n\nvec3 bumpNormal(vec3 surfPos, vec3 surfNormal, vec3 baseNormal)\n{\n vec2 dSTdx = dFdx(v_Texcoord);\n vec2 dSTdy = dFdy(v_Texcoord);\n\n float Hll = bumpScale * texture2D(bumpMap, v_Texcoord).x;\n float dHx = bumpScale * texture2D(bumpMap, v_Texcoord + dSTdx).x - Hll;\n float dHy = bumpScale * texture2D(bumpMap, v_Texcoord + dSTdy).x - Hll;\n\n vec3 vSigmaX = dFdx(surfPos);\n vec3 vSigmaY = dFdy(surfPos);\n vec3 vN = surfNormal;\n\n vec3 R1 = cross(vSigmaY, vN);\n vec3 R2 = cross(vN, vSigmaX);\n\n float fDet = dot(vSigmaX, R1);\n\n vec3 vGrad = sign(fDet) * (dHx * R1 + dHy * R2);\n return normalize(abs(fDet) * baseNormal - vGrad);\n\n}\n#endif\n\n@end\n\n@export ecgl.common.normalMap.vertexHeader\n\n#ifdef NORMALMAP_ENABLED\nattribute vec4 tangent : TANGENT;\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n\n@end\n\n@export ecgl.common.normalMap.vertexMain\n\n#ifdef NORMALMAP_ENABLED\n if (dot(tangent, tangent) > 0.0) {\n v_Tangent = normalize((worldInverseTranspose * vec4(tangent.xyz, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n }\n#endif\n\n@end\n\n\n@export ecgl.common.normalMap.fragmentHeader\n\n#ifdef NORMALMAP_ENABLED\nuniform sampler2D normalMap;\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n\n@end\n\n@export ecgl.common.normalMap.fragmentMain\n#ifdef NORMALMAP_ENABLED\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, v_DetailTexcoord).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = normalTexel * 2.0 - 1.0;\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n N = normalize(tbn * N);\n }\n }\n#endif\n@end\n\n\n\n@export ecgl.common.vertexAnimation.header\n\n#ifdef VERTEX_ANIMATION\nattribute vec3 prevPosition;\nattribute vec3 prevNormal;\nuniform float percent;\n#endif\n\n@end\n\n@export ecgl.common.vertexAnimation.main\n\n#ifdef VERTEX_ANIMATION\n vec3 pos = mix(prevPosition, position, percent);\n vec3 norm = mix(prevNormal, normal, percent);\n#else\n vec3 pos = position;\n vec3 norm = normal;\n#endif\n\n@end\n\n\n@export ecgl.common.ssaoMap.header\n#ifdef SSAOMAP_ENABLED\nuniform sampler2D ssaoMap;\nuniform vec4 viewport : VIEWPORT;\n#endif\n@end\n\n@export ecgl.common.ssaoMap.main\n float ao = 1.0;\n#ifdef SSAOMAP_ENABLED\n ao = texture2D(ssaoMap, (gl_FragCoord.xy - viewport.xy) / viewport.zw).r;\n#endif\n@end\n\n\n\n\n@export ecgl.common.diffuseLayer.header\n\n#if (LAYER_DIFFUSEMAP_COUNT > 0)\nuniform float layerDiffuseIntensity[LAYER_DIFFUSEMAP_COUNT];\nuniform sampler2D layerDiffuseMap[LAYER_DIFFUSEMAP_COUNT];\n#endif\n\n@end\n\n@export ecgl.common.emissiveLayer.header\n\n#if (LAYER_EMISSIVEMAP_COUNT > 0)\nuniform float layerEmissionIntensity[LAYER_EMISSIVEMAP_COUNT];\nuniform sampler2D layerEmissiveMap[LAYER_EMISSIVEMAP_COUNT];\n#endif\n\n@end\n\n@export ecgl.common.layers.header\n@import ecgl.common.diffuseLayer.header\n@import ecgl.common.emissiveLayer.header\n@end\n\n@export ecgl.common.diffuseLayer.main\n\n#if (LAYER_DIFFUSEMAP_COUNT > 0)\n for (int _idx_ = 0; _idx_ < LAYER_DIFFUSEMAP_COUNT; _idx_++) {{\n float intensity = layerDiffuseIntensity[_idx_];\n vec4 texel2 = texture2D(layerDiffuseMap[_idx_], v_Texcoord);\n #ifdef SRGB_DECODE\n texel2 = sRGBToLinear(texel2);\n #endif\n albedoTexel.rgb = mix(albedoTexel.rgb, texel2.rgb * intensity, texel2.a);\n albedoTexel.a = texel2.a + (1.0 - texel2.a) * albedoTexel.a;\n }}\n#endif\n\n@end\n\n@export ecgl.common.emissiveLayer.main\n\n#if (LAYER_EMISSIVEMAP_COUNT > 0)\n for (int _idx_ = 0; _idx_ < LAYER_EMISSIVEMAP_COUNT; _idx_++)\n {{\n vec4 texel2 = texture2D(layerEmissiveMap[_idx_], v_Texcoord) * layerEmissionIntensity[_idx_];\n #ifdef SRGB_DECODE\n texel2 = sRGBToLinear(texel2);\n #endif\n float intensity = layerEmissionIntensity[_idx_];\n gl_FragColor.rgb += texel2.rgb * texel2.a * intensity;\n }}\n#endif\n\n@end\n"),Xe.import("@export ecgl.color.vertex\n\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\n\n@import ecgl.common.uv.header\n\nattribute vec2 texcoord : TEXCOORD_0;\nattribute vec3 position: POSITION;\n\n@import ecgl.common.wireframe.vertexHeader\n\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n#endif\n\n#ifdef VERTEX_ANIMATION\nattribute vec3 prevPosition;\nuniform float percent : 1.0;\n#endif\n\n#ifdef ATMOSPHERE_ENABLED\nattribute vec3 normal: NORMAL;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nvarying vec3 v_Normal;\n#endif\n\nvoid main()\n{\n#ifdef VERTEX_ANIMATION\n vec3 pos = mix(prevPosition, position, percent);\n#else\n vec3 pos = position;\n#endif\n\n gl_Position = worldViewProjection * vec4(pos, 1.0);\n\n @import ecgl.common.uv.main\n\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n\n#ifdef ATMOSPHERE_ENABLED\n v_Normal = normalize((worldInverseTranspose * vec4(normal, 0.0)).xyz);\n#endif\n\n @import ecgl.common.wireframe.vertexMain\n\n}\n\n@end\n\n@export ecgl.color.fragment\n\n#define LAYER_DIFFUSEMAP_COUNT 0\n#define LAYER_EMISSIVEMAP_COUNT 0\n\nuniform sampler2D diffuseMap;\nuniform sampler2D detailMap;\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\n\n#ifdef ATMOSPHERE_ENABLED\nuniform mat4 viewTranspose: VIEWTRANSPOSE;\nuniform vec3 glowColor;\nuniform float glowPower;\nvarying vec3 v_Normal;\n#endif\n\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n\n@import ecgl.common.layers.header\n\n@import ecgl.common.uv.fragmentHeader\n\n@import ecgl.common.wireframe.fragmentHeader\n\n@import clay.util.srgb\n\nvoid main()\n{\n#ifdef SRGB_DECODE\n gl_FragColor = sRGBToLinear(color);\n#else\n gl_FragColor = color;\n#endif\n\n#ifdef VERTEX_COLOR\n gl_FragColor *= v_Color;\n#endif\n\n @import ecgl.common.albedo.main\n\n @import ecgl.common.diffuseLayer.main\n\n gl_FragColor *= albedoTexel;\n\n#ifdef ATMOSPHERE_ENABLED\n float atmoIntensity = pow(1.0 - dot(v_Normal, (viewTranspose * vec4(0.0, 0.0, 1.0, 0.0)).xyz), glowPower);\n gl_FragColor.rgb += glowColor * atmoIntensity;\n#endif\n\n @import ecgl.common.emissiveLayer.main\n\n @import ecgl.common.wireframe.fragmentMain\n\n}\n@end"),Xe.import("/**\n * http: */\n\n@export ecgl.lambert.vertex\n\n@import ecgl.common.transformUniforms\n\n@import ecgl.common.uv.header\n\n\n@import ecgl.common.attributes\n\n@import ecgl.common.wireframe.vertexHeader\n\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n#endif\n\n\n@import ecgl.common.vertexAnimation.header\n\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nvoid main()\n{\n @import ecgl.common.uv.main\n\n @import ecgl.common.vertexAnimation.main\n\n\n gl_Position = worldViewProjection * vec4(pos, 1.0);\n\n v_Normal = normalize((worldInverseTranspose * vec4(norm, 0.0)).xyz);\n v_WorldPosition = (world * vec4(pos, 1.0)).xyz;\n\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n\n @import ecgl.common.wireframe.vertexMain\n}\n\n@end\n\n\n@export ecgl.lambert.fragment\n\n#define LAYER_DIFFUSEMAP_COUNT 0\n#define LAYER_EMISSIVEMAP_COUNT 0\n\n#define NORMAL_UP_AXIS 1\n#define NORMAL_FRONT_AXIS 2\n\n@import ecgl.common.uv.fragmentHeader\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nuniform sampler2D diffuseMap;\nuniform sampler2D detailMap;\n\n@import ecgl.common.layers.header\n\nuniform float emissionIntensity: 1.0;\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\n\nuniform mat4 viewInverse : VIEWINVERSE;\n\n#ifdef ATMOSPHERE_ENABLED\nuniform mat4 viewTranspose: VIEWTRANSPOSE;\nuniform vec3 glowColor;\nuniform float glowPower;\n#endif\n\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n\n\n@import ecgl.common.ssaoMap.header\n\n@import ecgl.common.bumpMap.header\n\n@import clay.util.srgb\n\n@import ecgl.common.wireframe.fragmentHeader\n\n@import clay.plugin.compute_shadow_map\n\nvoid main()\n{\n#ifdef SRGB_DECODE\n gl_FragColor = sRGBToLinear(color);\n#else\n gl_FragColor = color;\n#endif\n\n#ifdef VERTEX_COLOR\n #ifdef SRGB_DECODE\n gl_FragColor *= sRGBToLinear(v_Color);\n #else\n gl_FragColor *= v_Color;\n #endif\n#endif\n\n @import ecgl.common.albedo.main\n\n @import ecgl.common.diffuseLayer.main\n\n gl_FragColor *= albedoTexel;\n\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n\n float ambientFactor = 1.0;\n\n#ifdef BUMPMAP_ENABLED\n N = bumpNormal(v_WorldPosition, v_Normal, N);\n ambientFactor = dot(v_Normal, N);\n#endif\n\n vec3 N2 = vec3(N.x, N[NORMAL_UP_AXIS], N[NORMAL_FRONT_AXIS]);\n\n vec3 diffuseColor = vec3(0.0, 0.0, 0.0);\n\n @import ecgl.common.ssaoMap.main\n\n#ifdef AMBIENT_LIGHT_COUNT\n for(int i = 0; i < AMBIENT_LIGHT_COUNT; i++)\n {\n diffuseColor += ambientLightColor[i] * ambientFactor * ao;\n }\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseColor += calcAmbientSHLight(_idx_, N2) * ambientSHLightColor[_idx_] * ao;\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int i = 0; i < DIRECTIONAL_LIGHT_COUNT; i++)\n {\n vec3 lightDirection = -directionalLightDirection[i];\n vec3 lightColor = directionalLightColor[i];\n\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsDir[i];\n }\n#endif\n\n float ndl = dot(N, normalize(lightDirection)) * shadowContrib;\n\n diffuseColor += lightColor * clamp(ndl, 0.0, 1.0);\n }\n#endif\n\n gl_FragColor.rgb *= diffuseColor;\n\n#ifdef ATMOSPHERE_ENABLED\n float atmoIntensity = pow(1.0 - dot(v_Normal, (viewTranspose * vec4(0.0, 0.0, 1.0, 0.0)).xyz), glowPower);\n gl_FragColor.rgb += glowColor * atmoIntensity;\n#endif\n\n @import ecgl.common.emissiveLayer.main\n\n @import ecgl.common.wireframe.fragmentMain\n}\n\n@end"),Xe.import("@export ecgl.realistic.vertex\n\n@import ecgl.common.transformUniforms\n\n@import ecgl.common.uv.header\n\n@import ecgl.common.attributes\n\n\n@import ecgl.common.wireframe.vertexHeader\n\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n#endif\n\n#ifdef NORMALMAP_ENABLED\nattribute vec4 tangent : TANGENT;\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n\n@import ecgl.common.vertexAnimation.header\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nvoid main()\n{\n\n @import ecgl.common.uv.main\n\n @import ecgl.common.vertexAnimation.main\n\n gl_Position = worldViewProjection * vec4(pos, 1.0);\n\n v_Normal = normalize((worldInverseTranspose * vec4(norm, 0.0)).xyz);\n v_WorldPosition = (world * vec4(pos, 1.0)).xyz;\n\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n\n#ifdef NORMALMAP_ENABLED\n v_Tangent = normalize((worldInverseTranspose * vec4(tangent.xyz, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n#endif\n\n @import ecgl.common.wireframe.vertexMain\n\n}\n\n@end\n\n\n\n@export ecgl.realistic.fragment\n\n#define LAYER_DIFFUSEMAP_COUNT 0\n#define LAYER_EMISSIVEMAP_COUNT 0\n#define PI 3.14159265358979\n#define ROUGHNESS_CHANEL 0\n#define METALNESS_CHANEL 1\n\n#define NORMAL_UP_AXIS 1\n#define NORMAL_FRONT_AXIS 2\n\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n\n@import ecgl.common.uv.fragmentHeader\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nuniform sampler2D diffuseMap;\n\nuniform sampler2D detailMap;\nuniform sampler2D metalnessMap;\nuniform sampler2D roughnessMap;\n\n@import ecgl.common.layers.header\n\nuniform float emissionIntensity: 1.0;\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\n\nuniform float metalness : 0.0;\nuniform float roughness : 0.5;\n\nuniform mat4 viewInverse : VIEWINVERSE;\n\n#ifdef ATMOSPHERE_ENABLED\nuniform mat4 viewTranspose: VIEWTRANSPOSE;\nuniform vec3 glowColor;\nuniform float glowPower;\n#endif\n\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n@import clay.header.ambient_cubemap_light\n#endif\n\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n\n@import ecgl.common.normalMap.fragmentHeader\n\n@import ecgl.common.ssaoMap.header\n\n@import ecgl.common.bumpMap.header\n\n@import clay.util.srgb\n\n@import clay.util.rgbm\n\n@import ecgl.common.wireframe.fragmentHeader\n\n@import clay.plugin.compute_shadow_map\n\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\n\nfloat D_Phong(float g, float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\n\nvoid main()\n{\n vec4 albedoColor = color;\n\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n#ifdef VERTEX_COLOR\n #ifdef SRGB_DECODE\n albedoColor *= sRGBToLinear(v_Color);\n #else\n albedoColor *= v_Color;\n #endif\n#endif\n\n @import ecgl.common.albedo.main\n\n @import ecgl.common.diffuseLayer.main\n\n albedoColor *= albedoTexel;\n\n float m = metalness;\n\n#ifdef METALNESSMAP_ENABLED\n float m2 = texture2D(metalnessMap, v_DetailTexcoord)[METALNESS_CHANEL];\n m = clamp(m2 + (m - 0.5) * 2.0, 0.0, 1.0);\n#endif\n\n vec3 baseColor = albedoColor.rgb;\n albedoColor.rgb = baseColor * (1.0 - m);\n vec3 specFactor = mix(vec3(0.04), baseColor, m);\n\n float g = 1.0 - roughness;\n\n#ifdef ROUGHNESSMAP_ENABLED\n float g2 = 1.0 - texture2D(roughnessMap, v_DetailTexcoord)[ROUGHNESS_CHANEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n#endif\n\n vec3 N = v_Normal;\n\n#ifdef DOUBLE_SIDED\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n\n float ambientFactor = 1.0;\n\n#ifdef BUMPMAP_ENABLED\n N = bumpNormal(v_WorldPosition, v_Normal, N);\n ambientFactor = dot(v_Normal, N);\n#endif\n\n@import ecgl.common.normalMap.fragmentMain\n\n vec3 N2 = vec3(N.x, N[NORMAL_UP_AXIS], N[NORMAL_FRONT_AXIS]);\n\n vec3 diffuseTerm = vec3(0.0);\n vec3 specularTerm = vec3(0.0);\n\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n vec3 fresnelTerm = F_Schlick(ndv, specFactor);\n\n @import ecgl.common.ssaoMap.main\n\n#ifdef AMBIENT_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += ambientLightColor[_idx_] * ambientFactor * ao;\n }}\n#endif\n\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += calcAmbientSHLight(_idx_, N2) * ambientSHLightColor[_idx_] * ao;\n }}\n#endif\n\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++)\n {{\n vec3 L = -directionalLightDirection[_idx_];\n vec3 lc = directionalLightColor[_idx_];\n\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, normalize(L)), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsDir[_idx_];\n }\n#endif\n\n vec3 li = lc * ndl * shadowContrib;\n\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n\n\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n vec3 L = reflect(-V, N);\n L = vec3(L.x, L[NORMAL_UP_AXIS], L[NORMAL_FRONT_AXIS]);\n float rough2 = clamp(1.0 - g, 0.0, 1.0);\n float bias2 = rough2 * 5.0;\n vec2 brdfParam2 = texture2D(ambientCubemapLightBRDFLookup[0], vec2(rough2, ndv)).xy;\n vec3 envWeight2 = specFactor * brdfParam2.x + brdfParam2.y;\n vec3 envTexel2;\n for(int _idx_ = 0; _idx_ < AMBIENT_CUBEMAP_LIGHT_COUNT; _idx_++)\n {{\n envTexel2 = RGBMDecode(textureCubeLodEXT(ambientCubemapLightCubemap[_idx_], L, bias2), 8.12);\n specularTerm += ambientCubemapLightColor[_idx_] * envTexel2 * envWeight2 * ao;\n }}\n#endif\n\n gl_FragColor.rgb = albedoColor.rgb * diffuseTerm + specularTerm;\n gl_FragColor.a = albedoColor.a;\n\n#ifdef ATMOSPHERE_ENABLED\n float atmoIntensity = pow(1.0 - dot(v_Normal, (viewTranspose * vec4(0.0, 0.0, 1.0, 0.0)).xyz), glowPower);\n gl_FragColor.rgb += glowColor * atmoIntensity;\n#endif\n\n#ifdef SRGB_ENCODE\n gl_FragColor = linearTosRGB(gl_FragColor);\n#endif\n\n @import ecgl.common.emissiveLayer.main\n\n @import ecgl.common.wireframe.fragmentMain\n}\n\n@end"),Xe.import("@export ecgl.hatching.vertex\n\n@import ecgl.realistic.vertex\n\n@end\n\n\n@export ecgl.hatching.fragment\n\n#define NORMAL_UP_AXIS 1\n#define NORMAL_FRONT_AXIS 2\n\n@import ecgl.common.uv.fragmentHeader\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nuniform vec4 color : [0.0, 0.0, 0.0, 1.0];\nuniform vec4 paperColor : [1.0, 1.0, 1.0, 1.0];\n\nuniform mat4 viewInverse : VIEWINVERSE;\n\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n\n\n@import ecgl.common.ssaoMap.header\n\n@import ecgl.common.bumpMap.header\n\n@import clay.util.srgb\n\n@import ecgl.common.wireframe.fragmentHeader\n\n@import clay.plugin.compute_shadow_map\n\nuniform sampler2D hatch1;\nuniform sampler2D hatch2;\nuniform sampler2D hatch3;\nuniform sampler2D hatch4;\nuniform sampler2D hatch5;\nuniform sampler2D hatch6;\n\nfloat shade(in float tone) {\n vec4 c = vec4(1. ,1., 1., 1.);\n float step = 1. / 6.;\n vec2 uv = v_DetailTexcoord;\n if (tone <= step / 2.0) {\n c = mix(vec4(0.), texture2D(hatch6, uv), 12. * tone);\n }\n else if (tone <= step) {\n c = mix(texture2D(hatch6, uv), texture2D(hatch5, uv), 6. * tone);\n }\n if(tone > step && tone <= 2. * step){\n c = mix(texture2D(hatch5, uv), texture2D(hatch4, uv) , 6. * (tone - step));\n }\n if(tone > 2. * step && tone <= 3. * step){\n c = mix(texture2D(hatch4, uv), texture2D(hatch3, uv), 6. * (tone - 2. * step));\n }\n if(tone > 3. * step && tone <= 4. * step){\n c = mix(texture2D(hatch3, uv), texture2D(hatch2, uv), 6. * (tone - 3. * step));\n }\n if(tone > 4. * step && tone <= 5. * step){\n c = mix(texture2D(hatch2, uv), texture2D(hatch1, uv), 6. * (tone - 4. * step));\n }\n if(tone > 5. * step){\n c = mix(texture2D(hatch1, uv), vec4(1.), 6. * (tone - 5. * step));\n }\n\n return c.r;\n}\n\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\n\nvoid main()\n{\n#ifdef SRGB_DECODE\n vec4 inkColor = sRGBToLinear(color);\n#else\n vec4 inkColor = color;\n#endif\n\n#ifdef VERTEX_COLOR\n #ifdef SRGB_DECODE\n inkColor *= sRGBToLinear(v_Color);\n #else\n inkColor *= v_Color;\n #endif\n#endif\n\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n\n float tone = 0.0;\n\n float ambientFactor = 1.0;\n\n#ifdef BUMPMAP_ENABLED\n N = bumpNormal(v_WorldPosition, v_Normal, N);\n ambientFactor = dot(v_Normal, N);\n#endif\n\n vec3 N2 = vec3(N.x, N[NORMAL_UP_AXIS], N[NORMAL_FRONT_AXIS]);\n\n @import ecgl.common.ssaoMap.main\n\n#ifdef AMBIENT_LIGHT_COUNT\n for(int i = 0; i < AMBIENT_LIGHT_COUNT; i++)\n {\n tone += dot(ambientLightColor[i], w) * ambientFactor * ao;\n }\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n tone += dot(calcAmbientSHLight(_idx_, N2) * ambientSHLightColor[_idx_], w) * ao;\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int i = 0; i < DIRECTIONAL_LIGHT_COUNT; i++)\n {\n vec3 lightDirection = -directionalLightDirection[i];\n float lightTone = dot(directionalLightColor[i], w);\n\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsDir[i];\n }\n#endif\n\n float ndl = dot(N, normalize(lightDirection)) * shadowContrib;\n\n tone += lightTone * clamp(ndl, 0.0, 1.0);\n }\n#endif\n\n gl_FragColor = mix(inkColor, paperColor, shade(clamp(tone, 0.0, 1.0)));\n }\n@end\n"),Xe.import("@export ecgl.sm.depth.vertex\n\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\n\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n\n#ifdef VERTEX_ANIMATION\nattribute vec3 prevPosition;\nuniform float percent : 1.0;\n#endif\n\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\n\nvoid main(){\n\n#ifdef VERTEX_ANIMATION\n vec3 pos = mix(prevPosition, position, percent);\n#else\n vec3 pos = position;\n#endif\n\n v_ViewPosition = worldViewProjection * vec4(pos, 1.0);\n gl_Position = v_ViewPosition;\n\n v_Texcoord = texcoord;\n\n}\n@end\n\n\n\n@export ecgl.sm.depth.fragment\n\n@import clay.sm.depth.fragment\n\n@end");var Na=vi.prototype.addToScene,Ia=vi.prototype.removeFromScene;vi.prototype.addToScene=function(e){if(Na.call(this,e),this.__zr){var t=this.__zr;e.traverse((function(e){e.__zr=t,e.addAnimatorsToZr&&e.addAnimatorsToZr(t)}))}},vi.prototype.removeFromScene=function(e){Ia.call(this,e),e.traverse((function(e){var t=e.__zr;e.__zr=null,t&&e.removeAnimatorsFromZr&&e.removeAnimatorsFromZr(t)}))},le.prototype.setTextureImage=function(e,t,r,i){if(this.shader){var n,a=r.getZr(),o=this;return o.autoUpdateTextureStatus=!1,o.disableTexture(e),!(s=t)||"none"===s||(n=Ra.loadTexture(t,r,i,(function(t){o.enableTexture(e),a&&a.refresh()})),o.set(e,n)),n}var s};var Ra={};Ra.Renderer=ut,Ra.Node=sr,Ra.Mesh=Sr,Ra.Shader=Xe,Ra.Material=le,Ra.Texture=wr,Ra.Texture2D=Dr,Ra.Geometry=Vr,Ra.SphereGeometry=En,Ra.PlaneGeometry=ki,Ra.CubeGeometry=Wi,Ra.AmbientLight=Cn,Ra.DirectionalLight=Dn,Ra.PointLight=Ln,Ra.SpotLight=Pn,Ra.PerspectiveCamera=Ei,Ra.OrthographicCamera=un,Ra.Vector2=_e,Ra.Vector3=vt,Ra.Vector4=Rn,Ra.Quaternion=qt,Ra.Matrix2=Gn,Ra.Matrix2d=Hn,Ra.Matrix3=jn,Ra.Matrix4=Ht,Ra.Plane=$r,Ra.Ray=Mt,Ra.BoundingBox=ir,Ra.Frustum=si;var Fa=an.createBlank("rgba(255,255,255,0)").image;function Ba(e){return Math.pow(2,Math.round(Math.log(e)/Math.LN2))}function za(e){if((e.wrapS===wr.REPEAT||e.wrapT===wr.REPEAT)&&e.image){var t=Ba(e.width),r=Ba(e.height);if(t!==e.width||r!==e.height){var i=document.createElement("canvas");i.width=t,i.height=r,i.getContext("2d").drawImage(e.image,0,0,t,r),e.image=i}}}Ra.loadTexture=function(e,t,r,i){"function"==typeof r&&(i=r,r={}),r=r||{};for(var n=Object.keys(r).sort(),a="",o=0;o3?t[3]=e[3]:t[3]=1,t):((t=i.color.parse(e||"#000",t)||[0,0,0,0])[0]/=255,t[1]/=255,t[2]/=255,t)},Ra.directionFromAlphaBeta=function(e,t){var r=e/180*Math.PI+Math.PI/2,i=-t/180*Math.PI+Math.PI/2,n=[],a=Math.sin(r);return n[0]=a*Math.cos(i),n[1]=-Math.cos(r),n[2]=a*Math.sin(i),n},Ra.getShadowResolution=function(e){var t=1024;switch(e){case"low":t=512;break;case"medium":break;case"high":t=2048;break;case"ultra":t=4096}return t},Ra.COMMON_SHADERS=["lambert","color","realistic","hatching","shadow"],Ra.createShader=function(e){"ecgl.shadow"===e&&(e="ecgl.displayShadow");var t=Xe.source(e+".vertex"),r=Xe.source(e+".fragment");t||console.error("Vertex shader of '%s' not exits",e),r||console.error("Fragment shader of '%s' not exits",e);var i=new Xe(t,r);return i.name=e,i},Ra.createMaterial=function(e,t){t instanceof Array||(t=[t]);var r=Ra.createShader(e),i=new le({shader:r});return t.forEach((function(e){"string"==typeof e&&i.define(e)})),i},Ra.setMaterialFromModel=function(e,t,r,i){t.autoUpdateTextureStatus=!1;var n=r.getModel(e+"Material"),a=n.get("detailTexture"),o=Mn(n.get("textureTiling"),1),s=Mn(n.get("textureOffset"),0);"number"==typeof o&&(o=[o,o]),"number"==typeof s&&(s=[s,s]);var l=o[0]>1||o[1]>1?Ra.Texture.REPEAT:Ra.Texture.CLAMP_TO_EDGE,h={anisotropic:8,wrapS:l,wrapT:l};if("realistic"===e){var u=n.get("roughness"),c=n.get("metalness");null!=c?isNaN(c)&&(t.setTextureImage("metalnessMap",c,i,h),c=Mn(n.get("metalnessAdjust"),.5)):c=0,null!=u?isNaN(u)&&(t.setTextureImage("roughnessMap",u,i,h),u=Mn(n.get("roughnessAdjust"),.5)):u=.5;var d=n.get("normalTexture");t.setTextureImage("detailMap",a,i,h),t.setTextureImage("normalMap",d,i,h),t.set({roughness:u,metalness:c,detailUvRepeat:o,detailUvOffset:s})}else if("lambert"===e)t.setTextureImage("detailMap",a,i,h),t.set({detailUvRepeat:o,detailUvOffset:s});else if("color"===e)t.setTextureImage("detailMap",a,i,h),t.set({detailUvRepeat:o,detailUvOffset:s});else if("hatching"===e){var f=n.get("hatchingTextures")||[];f.length;for(var p=0;p<6;p++)t.setTextureImage("hatch"+(p+1),f[p],i,{anisotropic:8,wrapS:Ra.Texture.REPEAT,wrapT:Ra.Texture.REPEAT});t.set({detailUvRepeat:o,detailUvOffset:s})}},Ra.updateVertexAnimation=function(e,t,r,i){var n=i.get("animation"),a=i.get("animationDurationUpdate"),o=i.get("animationEasingUpdate"),s=r.shadowDepthMaterial;if(n&&t&&a>0&&t.geometry.vertexCount===r.geometry.vertexCount){r.material.define("vertex","VERTEX_ANIMATION"),r.ignorePreZ=!0,s&&s.define("vertex","VERTEX_ANIMATION");for(var l=0;l=0&&this._viewsToDispose.splice(t,1),this.views.push(e),e.layer=this;var r=this.zr;e.scene.traverse((function(e){e.__zr=r,e.addAnimatorsToZr&&e.addAnimatorsToZr(r)}))}},ka.prototype.removeView=function(e){if(e.layer===this){var t=this.views.indexOf(e);t>=0&&(this.views.splice(t,1),e.scene.traverse(Va,this),e.layer=null,this._viewsToDispose.push(e))}},ka.prototype.removeViewsAll=function(){this.views.forEach((function(e){e.scene.traverse(Va,this),e.layer=null,this._viewsToDispose.push(e)}),this),this.views.length=0},ka.prototype.resize=function(e,t){this.renderer.resize(e,t)},ka.prototype.clear=function(){var e=this.renderer.gl,t=this._backgroundColor||[0,0,0,0];e.clearColor(t[0],t[1],t[2],t[3]),e.depthMask(!0),e.colorMask(!0,!0,!0,!0),e.clear(e.DEPTH_BUFFER_BIT|e.COLOR_BUFFER_BIT)},ka.prototype.clearDepth=function(){var e=this.renderer.gl;e.clear(e.DEPTH_BUFFER_BIT)},ka.prototype.clearColor=function(){var e=this.renderer.gl;e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT)},ka.prototype.needsRefresh=function(){this.zr.refresh()},ka.prototype.refresh=function(e){this._backgroundColor=e?Ga.parseColor(e):[0,0,0,0],this.renderer.clearColor=this._backgroundColor;for(var t=0;t20)){e=e.event;var i=this.pickObject(e.offsetX,e.offsetY);i&&(this._dispatchEvent(e.type,e,i),this._dispatchDataEvent(e.type,e,i));var n=this._clickToSetFocusPoint(e);n&&n.view.setDOFFocusOnPoint(n.distance)&&this.zr.refresh()}}},ka.prototype._clickToSetFocusPoint=function(e){for(var t=this.renderer,r=t.viewport,i=this.views.length-1;i>=0;i--){var n=this.views[i];if(n.hasDOF()&&n.containPoint(e.offsetX,e.offsetY)){this._picking.scene=n.scene,this._picking.camera=n.camera,t.viewport=n.viewport;var a=this._picking.pick(e.offsetX,e.offsetY,!0);if(a)return a.view=n,a}}t.viewport=r},ka.prototype.onglobalout=function(e){var t=this._hovered;t&&this._dispatchEvent("mouseout",e,{target:t.target})},ka.prototype.pickObject=function(e,t){for(var r=[],i=this.renderer,n=i.viewport,a=0;a=0&&(c.dataIndex=this._lastDataIndex,c.seriesIndex=this._lastSeriesIndex,this.zr.handler.dispatchToElement(u,"mouseout",t)),l=!0):null!=s&&s!==this._lastEventData&&(null!=this._lastEventData&&(c.eventData=this._lastEventData,this.zr.handler.dispatchToElement(u,"mouseout",t)),l=!0),this._lastEventData=s,this._lastDataIndex=a,this._lastSeriesIndex=o),c.eventData=s,c.dataIndex=a,c.seriesIndex=o,(null!=s||parseInt(a,10)>=0&&parseInt(o,10)>=0)&&(this.zr.handler.dispatchToElement(u,e,t),l&&this.zr.handler.dispatchToElement(u,"mouseover",t))},ka.prototype._dispatchToView=function(e,t){for(var r=0;re&&o=0&&(function(e){Ka(e,"itemStyle"),Ka(e,"lineStyle"),Ka(e,"areaStyle"),Ka(e,"label")}(t),"mapbox"===t.coordinateSystem&&(t.coordinateSystem="mapbox3D",e.mapbox3D=e.mapbox))})),Qa(e.xAxis3D),Qa(e.yAxis3D),Qa(e.zAxis3D),Qa(e.grid3D),Ka(e.geo3D)}));const $a={defaultOption:{viewControl:{projection:"perspective",autoRotate:!1,autoRotateDirection:"cw",autoRotateSpeed:10,autoRotateAfterStill:3,damping:.8,rotateSensitivity:1,zoomSensitivity:1,panSensitivity:1,panMouseButton:"middle",rotateMouseButton:"left",distance:150,minDistance:40,maxDistance:400,orthographicSize:150,maxOrthographicSize:400,minOrthographicSize:20,center:[0,0,0],alpha:0,beta:0,minAlpha:-90,maxAlpha:90}},setView:function(e){e=e||{},this.option.viewControl=this.option.viewControl||{},null!=e.alpha&&(this.option.viewControl.alpha=e.alpha),null!=e.beta&&(this.option.viewControl.beta=e.beta),null!=e.distance&&(this.option.viewControl.distance=e.distance),null!=e.center&&(this.option.viewControl.center=e.center)}},eo={defaultOption:{postEffect:{enable:!1,bloom:{enable:!0,intensity:.1},depthOfField:{enable:!1,focalRange:20,focalDistance:50,blurRadius:10,fstop:2.8,quality:"medium"},screenSpaceAmbientOcclusion:{enable:!1,radius:2,quality:"medium",intensity:1},screenSpaceReflection:{enable:!1,quality:"medium",maxRoughness:.8},colorCorrection:{enable:!0,exposure:0,brightness:0,contrast:1,saturation:1,lookupTexture:""},edge:{enable:!1},FXAA:{enable:!1}},temporalSuperSampling:{enable:"auto"}}},to={defaultOption:{light:{main:{shadow:!1,shadowQuality:"high",color:"#fff",intensity:1,alpha:0,beta:0},ambient:{color:"#fff",intensity:.2},ambientCubemap:{texture:null,exposure:1,diffuseIntensity:.5,specularIntensity:.5}}}};var ro=i.ComponentModel.extend({type:"grid3D",dependencies:["xAxis3D","yAxis3D","zAxis3D"],defaultOption:{show:!0,zlevel:-10,left:0,top:0,width:"100%",height:"100%",environment:"auto",boxWidth:100,boxHeight:100,boxDepth:100,axisPointer:{show:!0,lineStyle:{color:"rgba(0, 0, 0, 0.8)",width:1},label:{show:!0,formatter:null,margin:8,textStyle:{fontSize:14,color:"#fff",backgroundColor:"rgba(0,0,0,0.5)",padding:3,borderRadius:3}}},axisLine:{show:!0,lineStyle:{color:"#333",width:2,type:"solid"}},axisTick:{show:!0,inside:!1,length:3,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,margin:8,textStyle:{fontSize:12}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}},light:{main:{alpha:30,beta:40},ambient:{intensity:.4}},viewControl:{alpha:20,beta:40,autoRotate:!1,distance:200,minDistance:40,maxDistance:400}}});i.util.merge(ro.prototype,$a),i.util.merge(ro.prototype,eo),i.util.merge(ro.prototype,to);const io=ro;var no=Object.prototype.toString,ao=Array.prototype,oo=ao.forEach,so=ao.filter,lo=ao.slice,ho=ao.map,uo=function(){}.constructor,co=uo?uo.prototype:null;function fo(e,t){if(Object.assign)Object.assign(e,t);else for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}function po(e,t,r){if(e="prototype"in e?e.prototype:e,t="prototype"in t?t.prototype:t,Object.getOwnPropertyNames)for(var i=Object.getOwnPropertyNames(t),n=0;n0&&this._notFirst?this.animateTo({alpha:h,beta:u,center:c,distance:a,orthographicSize:o,easing:l.animationEasingUpdate,duration:l.animationDurationUpdate}):(this.setDistance(a),this.setAlpha(h),this.setBeta(u),this.setCenter(c),this.setOrthographicSize(o)),this._notFirst=!0,this._validateProperties()},_validateProperties:function(){},animateTo:function(e){var t=this.zr,r=this,i={},n={};return null!=e.distance&&(i.distance=this.getDistance(),n.distance=e.distance),null!=e.orthographicSize&&(i.orthographicSize=this.getOrthographicSize(),n.orthographicSize=e.orthographicSize),null!=e.alpha&&(i.alpha=this.getAlpha(),n.alpha=e.alpha),null!=e.beta&&(i.beta=this.getBeta(),n.beta=e.beta),null!=e.center&&(i.center=this.getCenter(),n.center=e.center),this._addAnimator(t.animation.animate(i).when(e.duration||1e3,n).during((function(){null!=i.alpha&&r.setAlpha(i.alpha),null!=i.beta&&r.setBeta(i.beta),null!=i.distance&&r.setDistance(i.distance),null!=i.center&&r.setCenter(i.center),null!=i.orthographicSize&&r.setOrthographicSize(i.orthographicSize),r._needsUpdate=!0}))).start(e.easing||"linear")},stopAllAnimation:function(){for(var e=0;e0},_update:function(e){if(this._rotating){var t=("cw"===this.autoRotateDirection?1:-1)*this.autoRotateSpeed/180*Math.PI;this._phi-=t*e/1e3,this._needsUpdate=!0}else this._rotateVelocity.len()>0&&(this._needsUpdate=!0);(Math.abs(this._zoomSpeed)>.1||this._panVelocity.len()>0)&&(this._needsUpdate=!0),this._needsUpdate&&(e=Math.min(e,50),this._updateDistanceOrSize(e),this._updatePan(e),this._updateRotate(e),this._updateTransform(),this.getCamera().update(),this.zr&&this.zr.refresh(),this.trigger("update"),this._needsUpdate=!1)},_updateRotate:function(e){var t=this._rotateVelocity;this._phi=t.y*e/20+this._phi,this._theta=t.x*e/20+this._theta,this.setAlpha(this.getAlpha()),this.setBeta(this.getBeta()),this._vectorDamping(t,Math.pow(this.damping,e/16))},_updateDistanceOrSize:function(e){"perspective"===this._projection?this._setDistance(this._distance+this._zoomSpeed*e/20):this._setOrthoSize(this._orthoSize+this._zoomSpeed*e/20),this._zoomSpeed*=Math.pow(this.damping,e/16)},_setDistance:function(e){this._distance=Math.max(Math.min(e,this.maxDistance),this.minDistance)},_setOrthoSize:function(e){this._orthoSize=Math.max(Math.min(e,this.maxOrthographicSize),this.minOrthographicSize);var t=this.getCamera(),r=this._orthoSize,i=r/this.viewGL.viewport.height*this.viewGL.viewport.width;t.left=-i/2,t.right=i/2,t.top=r/2,t.bottom=-r/2},_updatePan:function(e){var t=this._panVelocity,r=this._distance,i=this.getCamera(),n=i.worldTransform.y,a=i.worldTransform.x;this._center.scaleAndAdd(a,-t.x*r/200).scaleAndAdd(n,-t.y*r/200),this._vectorDamping(t,0)},_updateTransform:function(){var e=this.getCamera(),t=new vt,r=this._theta+Math.PI/2,i=this._phi+Math.PI/2,n=Math.sin(r);t.x=n*Math.cos(i),t.y=-Math.cos(r),t.z=n*Math.sin(i),e.position.copy(this._center).scaleAndAdd(t,this._distance),e.rotation.identity().rotateY(-this._phi).rotateX(-this._theta)},_startCountingStill:function(){clearTimeout(this._stillTimeout);var e=this.autoRotateAfterStill,t=this;!isNaN(e)&&e>0&&(this._stillTimeout=setTimeout((function(){t._rotating=!0}),1e3*e))},_vectorDamping:function(e,t){var r=e.len();(r*=t)<1e-4&&(r=0),e.normalize().scale(r)},_decomposeTransform:function(){if(this.getCamera()){this.getCamera().updateWorldTransform();var e=this.getCamera().worldTransform.z,t=Math.asin(e.y),r=Math.atan2(e.x,e.z);this._theta=t,this._phi=-r,this.setBeta(this.getBeta()),this.setAlpha(this.getAlpha()),this.getCamera().aspect?this._setDistance(this.getCamera().position.dist(this._center)):this._setOrthoSize(this.getCamera().top-this.getCamera().bottom)}},_mouseDownHandler:function(e){if(!e.target&&!this._isAnimating()){var t=e.offsetX,r=e.offsetY;this.viewGL&&!this.viewGL.containPoint(t,r)||(this.zr.on("mousemove",this._mouseMoveHandler),this.zr.on("mouseup",this._mouseUpHandler),e.event.targetTouches?1===e.event.targetTouches.length&&(this._mode="rotate"):e.event.button===Oo[this.rotateMouseButton]?this._mode="rotate":e.event.button===Oo[this.panMouseButton]?this._mode="pan":this._mode="",this._rotateVelocity.set(0,0),this._rotating=!1,this.autoRotate&&this._startCountingStill(),this._mouseX=e.offsetX,this._mouseY=e.offsetY)}},_mouseMoveHandler:function(e){if(!(e.target&&e.target.__isGLToZRProxy||this._isAnimating())){var t=No(this.panSensitivity),r=No(this.rotateSensitivity);"rotate"===this._mode?(this._rotateVelocity.y=(e.offsetX-this._mouseX)/this.zr.getHeight()*2*r[0],this._rotateVelocity.x=(e.offsetY-this._mouseY)/this.zr.getWidth()*2*r[1]):"pan"===this._mode&&(this._panVelocity.x=(e.offsetX-this._mouseX)/this.zr.getWidth()*t[0]*400,this._panVelocity.y=(-e.offsetY+this._mouseY)/this.zr.getHeight()*t[1]*400),this._mouseX=e.offsetX,this._mouseY=e.offsetY,e.event.preventDefault()}},_mouseWheelHandler:function(e){if(!this._isAnimating()){var t=e.event.wheelDelta||-e.event.detail;this._zoomHandler(e,t)}},_pinchHandler:function(e){this._isAnimating()||(this._zoomHandler(e,e.pinchScale>1?1:-1),this._mode="")},_zoomHandler:function(e,t){if(0!==t){var r,i=e.offsetX,n=e.offsetY;this.viewGL&&!this.viewGL.containPoint(i,n)||(r="perspective"===this._projection?Math.max(Math.max(Math.min(this._distance-this.minDistance,this.maxDistance-this._distance))/20,.5):Math.max(Math.max(Math.min(this._orthoSize-this.minOrthographicSize,this.maxOrthographicSize-this._orthoSize))/20,.5),this._zoomSpeed=(t>0?-1:1)*r*this.zoomSensitivity,this._rotating=!1,this.autoRotate&&"rotate"===this._mode&&this._startCountingStill(),e.event.preventDefault())}},_mouseUpHandler:function(){this.zr.off("mousemove",this._mouseMoveHandler),this.zr.off("mouseup",this._mouseUpHandler)},_isRightMouseButtonUsed:function(){return"right"===this.rotateMouseButton||"right"===this.panMouseButton},_contextMenuHandler:function(e){this._isRightMouseButtonUsed()&&e.preventDefault()},_addAnimator:function(e){var t=this._animators;return t.push(e),e.done((function(){var r=t.indexOf(e);r>=0&&t.splice(r,1)})),e}});Object.defineProperty(Io.prototype,"autoRotate",{get:function(e){return this._autoRotate},set:function(e){this._autoRotate=e,this._rotating=e}});const Ro=Io,Fo={convertToDynamicArray:function(e){e&&this.resetOffset();var t=this.attributes;for(var r in t)e||!t[r].value?t[r].value=[]:t[r].value=Array.prototype.slice.call(t[r].value);e||!this.indices?this.indices=[]:this.indices=Array.prototype.slice.call(this.indices)},convertToTypedArray:function(){var e=this.attributes;for(var t in e)e[t].value&&e[t].value.length>0?e[t].value=new Float32Array(e[t].value):e[t].value=null;this.indices&&this.indices.length>0&&(this.indices=this.vertexCount>65535?new Uint32Array(this.indices):new Uint16Array(this.indices)),this.dirty()}},Bo={vec2:pe,vec3:Qe,vec4:Et,mat2:Bn,mat2d:kn,mat3:Dt,mat4:Ye,quat:Rt};var zo=Bo.vec3,Go=[[0,0],[1,1]],Uo=Vr.extend((function(){return{segmentScale:1,dynamic:!0,useNativeLine:!0,attributes:{position:new Vr.Attribute("position","float",3,"POSITION"),positionPrev:new Vr.Attribute("positionPrev","float",3),positionNext:new Vr.Attribute("positionNext","float",3),prevPositionPrev:new Vr.Attribute("prevPositionPrev","float",3),prevPosition:new Vr.Attribute("prevPosition","float",3),prevPositionNext:new Vr.Attribute("prevPositionNext","float",3),offset:new Vr.Attribute("offset","float",1),color:new Vr.Attribute("color","float",4,"COLOR")}}}),{resetOffset:function(){this._vertexOffset=0,this._triangleOffset=0,this._itemVertexOffsets=[]},setVertexCount:function(e){var t=this.attributes;this.vertexCount!==e&&(t.position.init(e),t.color.init(e),this.useNativeLine||(t.positionPrev.init(e),t.positionNext.init(e),t.offset.init(e)),e>65535?this.indices instanceof Uint16Array&&(this.indices=new Uint32Array(this.indices)):this.indices instanceof Uint32Array&&(this.indices=new Uint16Array(this.indices)))},setTriangleCount:function(e){this.triangleCount!==e&&(this.indices=0===e?null:this.vertexCount>65535?new Uint32Array(3*e):new Uint16Array(3*e))},_getCubicCurveApproxStep:function(e,t,r,i){return 1/(zo.dist(e,t)+zo.dist(r,t)+zo.dist(i,r)+1)*this.segmentScale},getCubicCurveVertexCount:function(e,t,r,i){var n=this._getCubicCurveApproxStep(e,t,r,i),a=Math.ceil(1/n);return this.useNativeLine?2*a:2*a+2},getCubicCurveTriangleCount:function(e,t,r,i){var n=this._getCubicCurveApproxStep(e,t,r,i),a=Math.ceil(1/n);return this.useNativeLine?0:2*a},getLineVertexCount:function(){return this.getPolylineVertexCount(Go)},getLineTriangleCount:function(){return this.getPolylineTriangleCount(Go)},getPolylineVertexCount:function(e){var t;return t="number"==typeof e?e:"number"!=typeof e[0]?e.length:e.length/3,this.useNativeLine?2*(t-1):2*(t-1)+2},getPolylineTriangleCount:function(e){var t;return t="number"==typeof e?e:"number"!=typeof e[0]?e.length:e.length/3,this.useNativeLine?0:2*Math.max(t-1,0)},addCubicCurve:function(e,t,r,i,n,a){null==a&&(a=1);var o=e[0],s=e[1],l=e[2],h=t[0],u=t[1],c=t[2],d=r[0],f=r[1],p=r[2],m=i[0],g=i[1],_=i[2],v=this._getCubicCurveApproxStep(e,t,r,i),y=v*v,x=y*v,b=3*v,w=3*y,T=6*y,S=6*x,M=o-2*h+d,A=s-2*u+f,E=l-2*c+p,C=3*(h-d)-o+m,D=3*(u-f)-s+g,L=3*(c-p)-l+_,P=o,O=s,N=l,I=(h-o)*b+M*w+C*x,R=(u-s)*b+A*w+D*x,F=(c-l)*b+E*w+L*x,B=M*T+C*S,z=A*T+D*S,G=E*T+L*S,U=C*S,k=D*S,V=L*S,H=0,W=0,j=Math.ceil(1/v),X=new Float32Array(3*(j+1)),q=(X=[],0);for(W=0;W1&&(P=I>0?Math.min(P,m):Math.max(P,m),O=R>0?Math.min(O,g):Math.max(O,g),N=F>0?Math.min(N,_):Math.max(N,_));return this.addPolyline(X,n,a)},addLine:function(e,t,r,i){return this.addPolyline([e,t],r,i)},addPolyline:function(e,t,r,i,n){if(e.length){var a="number"!=typeof e[0];if(null==n&&(n=a?e.length:e.length/3),!(n<2)){null==i&&(i=0),null==r&&(r=1),this._itemVertexOffsets.push(this._vertexOffset);var o,s,l=(a="number"!=typeof e[0])?"number"!=typeof t[0]:t.length/4===n,h=this.attributes.position,u=this.attributes.positionPrev,c=this.attributes.positionNext,d=this.attributes.color,f=this.attributes.offset,p=this.indices,m=this._vertexOffset;r=Math.max(r,.01);for(var g=i;g1&&(h.copy(m,m-1),d.copy(m,m-1),m++):(g0&&(c.set(m-2,o),c.set(m-1,o)),h.set(m,o),h.set(m+1,o),d.set(m,s),d.set(m+1,s),f.set(m,r/2),f.set(m+1,-r/2),m+=2),this.useNativeLine)d.set(m,s),h.set(m,o),m++;else if(g>0){var y=3*this._triangleOffset;(p=this.indices)[y]=m-4,p[y+1]=m-3,p[y+2]=m-2,p[y+3]=m-3,p[y+4]=m-1,p[y+5]=m-2,this._triangleOffset+=2}}if(!this.useNativeLine){var x=this._vertexOffset,b=this._vertexOffset+2*n;u.copy(x,x+2),u.copy(x+1,x+3),c.copy(b-1,b-3),c.copy(b-2,b-4)}return this._vertexOffset=m,this._vertexOffset}}},setItemColor:function(e,t){for(var r=this._itemVertexOffsets[e],i=eo&&(n=this._x=0,a+=this._rowHeight+l,this._y=a,this._rowHeight=0),this._x+=t+l,this._rowHeight=Math.max(this._rowHeight,r),a+r+l>s)return null;e.x+=this.offsetX*this.dpr+n,e.y+=this.offsetY*this.dpr+a,this._zr.add(e);var h=[this.offsetX/this.width,this.offsetY/this.height];return[[n/o+h[0],a/s+h[1]],[(n+t)/o+h[0],(a+r)/s+h[1]]]},_fitElement:function(e,t,r){var i=e.getBoundingRect(),n=t/i.width,a=r/i.height;e.x=-i.x*n,e.y=-i.y*a,e.scaleX=n,e.scaleY=a,e.update()}},Ho.prototype={clear:function(){for(var e=0;e=e)){var n=(r+this._nodeWidth)*this._dpr,a=(i+this._nodeHeight)*this._dpr;try{this._zr.resize({width:n,height:a})}catch(e){this._canvas.width=n,this._canvas.height=a}var o=new Vo(this._zr,r,i,this._nodeWidth,this._nodeHeight,this._gap,this._dpr);return this._textureAtlasNodes.push(o),o}},add:function(e,t,r){if(this._coords[e.id])return this._coords[e.id];var i=this._getCurrentNode().add(e,t,r);if(!i){var n=this._expand();if(!n)return;i=n.add(e,t,r)}return this._coords[e.id]=i,i},getCoordsScale:function(){var e=this._dpr;return[this._nodeWidth/this._canvas.width*e,this._nodeHeight/this._canvas.height*e]},getCoords:function(e){return this._coords[e]}};const Wo=Ho;function jo(){}jo.prototype={constructor:jo,setScene:function(e){this._scene=e,this._skybox&&this._skybox.attachScene(this._scene)},initLight:function(e){this._lightRoot=e,this.mainLight=new Ga.DirectionalLight({shadowBias:.005}),this.ambientLight=new Ga.AmbientLight,e.add(this.mainLight),e.add(this.ambientLight)},dispose:function(){this._lightRoot&&(this._lightRoot.remove(this.mainLight),this._lightRoot.remove(this.ambientLight))},updateLight:function(e){var t=this.mainLight,r=this.ambientLight,i=e.getModel("light"),n=i.getModel("main"),a=i.getModel("ambient");t.intensity=n.get("intensity"),r.intensity=a.get("intensity"),t.color=Ga.parseColor(n.get("color")).slice(0,3),r.color=Ga.parseColor(a.get("color")).slice(0,3);var o=n.get("alpha")||0,s=n.get("beta")||0;t.position.setArray(Ga.directionFromAlphaBeta(o,s)),t.lookAt(Ga.Vector3.ZERO),t.castShadow=n.get("shadow"),t.shadowResolution=Ga.getShadowResolution(n.get("shadowQuality"))},updateAmbientCubemap:function(e,t,r){var i=t.getModel("light.ambientCubemap"),n=i.get("texture");if(n){this._cubemapLightsCache=this._cubemapLightsCache||{};var a=this._cubemapLightsCache[n];if(!a){var o=this;a=this._cubemapLightsCache[n]=Ga.createAmbientCubemap(i.option,e,r,(function(){o._isSkyboxFromAmbientCubemap&&o._skybox.setEnvironmentMap(a.specular.cubemap),r.getZr().refresh()}))}this._lightRoot.add(a.diffuse),this._lightRoot.add(a.specular),this._currentCubemapLights=a}else this._currentCubemapLights&&(this._lightRoot.remove(this._currentCubemapLights.diffuse),this._lightRoot.remove(this._currentCubemapLights.specular),this._currentCubemapLights=null)},updateSkybox:function(e,t,r){var n=t.get("environment"),a=this,o=(a._skybox=a._skybox||new ji,a._skybox);if(n&&"none"!==n)if("auto"===n)if(this._isSkyboxFromAmbientCubemap=!0,this._currentCubemapLights){var s=this._currentCubemapLights.specular.cubemap;o.setEnvironmentMap(s),this._scene&&o.attachScene(this._scene),o.material.set("lod",3)}else this._skybox&&this._skybox.detachScene();else if("object"==typeof n&&n.colorStops||"string"==typeof n&&i.color.parse(n)){this._isSkyboxFromAmbientCubemap=!1;var l=new Ga.Texture2D({anisotropic:8,flipY:!1});o.setEnvironmentMap(l);var h=l.image=document.createElement("canvas");h.width=h.height=16;var u=h.getContext("2d"),c=new i.graphic.Rect({shape:{x:0,y:0,width:16,height:16},style:{fill:n}});i.innerDrawElementOnCanvas(u,c),o.attachScene(this._scene)}else this._isSkyboxFromAmbientCubemap=!1,l=Ga.loadTexture(n,r,{anisotropic:8,flipY:!1}),o.setEnvironmentMap(l),o.attachScene(this._scene);else this._skybox&&this._skybox.detachScene(this._scene),this._skybox=null;var d=t.coordinateSystem;if(this._skybox)if(!d||!d.viewGL||"auto"===n||n.match&&n.match(/.hdr$/))this._skybox.material.undefine("fragment","SRGB_DECODE");else{var f=d.viewGL.isLinearSpace()?"define":"undefine";this._skybox.material[f]("fragment","SRGB_DECODE")}}};const Xo=jo;var qo=Bo.vec3,Zo=Vr.extend((function(){return{segmentScale:1,useNativeLine:!0,attributes:{position:new Vr.Attribute("position","float",3,"POSITION"),normal:new Vr.Attribute("normal","float",3,"NORMAL"),color:new Vr.Attribute("color","float",4,"COLOR")}}}),{resetOffset:function(){this._vertexOffset=0,this._faceOffset=0},setQuadCount:function(e){var t=this.attributes,r=this.getQuadVertexCount()*e,i=this.getQuadTriangleCount()*e;this.vertexCount!==r&&(t.position.init(r),t.normal.init(r),t.color.init(r)),this.triangleCount!==i&&(this.indices=r>65535?new Uint32Array(3*i):new Uint16Array(3*i))},getQuadVertexCount:function(){return 4},getQuadTriangleCount:function(){return 2},addQuad:function(){var e=qo.create(),t=qo.create(),r=qo.create(),i=[0,3,1,3,2,1];return function(n,a){var o=this.attributes.position,s=this.attributes.normal,l=this.attributes.color;qo.sub(e,n[1],n[0]),qo.sub(t,n[2],n[1]),qo.cross(r,e,t),qo.normalize(r,r);for(var h=0;h<4;h++)o.set(this._vertexOffset+h,n[h]),l.set(this._vertexOffset+h,a),s.set(this._vertexOffset+h,r);var u=3*this._faceOffset;for(h=0;h<6;h++)this.indices[u+h]=i[h]+this._vertexOffset;this._vertexOffset+=4,this._faceOffset+=2}}()});i.util.defaults(Zo.prototype,Fo);const Yo=Zo;var Ko=Mn,Qo={x:0,y:2,z:1};function Jo(e,t,r){this.rootNode=new Ga.Node;var i=new Ga.Mesh({geometry:new ko({useNativeLine:!1}),material:t,castShadow:!1,ignorePicking:!0,$ignorePicking:!0,renderOrder:1}),n=new Ga.Mesh({geometry:new Yo,material:r,castShadow:!1,culling:!1,ignorePicking:!0,$ignorePicking:!0,renderOrder:0});this.rootNode.add(n),this.rootNode.add(i),this.faceInfo=e,this.plane=new Ga.Plane,this.linesMesh=i,this.quadsMesh=n}Jo.prototype.update=function(e,t,r){var i=e.coordinateSystem,n=[i.getAxis(this.faceInfo[0]),i.getAxis(this.faceInfo[1])],a=this.linesMesh.geometry,o=this.quadsMesh.geometry;a.convertToDynamicArray(!0),o.convertToDynamicArray(!0),this._updateSplitLines(a,n,e,r),this._udpateSplitAreas(o,n,e,r),a.convertToTypedArray(),o.convertToTypedArray();var s=i.getAxis(this.faceInfo[2]);!function(e,t,r,i){var n=[0,0,0],a=i<0?r.getExtentMin():r.getExtentMax();n[Qo[r.dim]]=a,e.position.setArray(n),e.rotation.identity(),t.distance=-Math.abs(a),t.normal.set(0,0,0),"x"===r.dim?(e.rotation.rotateY(i*Math.PI/2),t.normal.x=-i):"z"===r.dim?(e.rotation.rotateX(-i*Math.PI/2),t.normal.y=-i):(i>0&&e.rotation.rotateY(Math.PI),t.normal.z=-i)}(this.rootNode,this.plane,s,this.faceInfo[3])},Jo.prototype._updateSplitLines=function(e,t,r,n){var a=n.getDevicePixelRatio();t.forEach((function(n,o){var s=n.model,l=t[1-o].getExtent();if(!n.scale.isBlank()){var h=s.getModel("splitLine",r.getModel("splitLine"));if(h.get("show")){var u=h.getModel("lineStyle"),c=u.get("color"),d=Ko(u.get("opacity"),1),f=Ko(u.get("width"),1);c=i.util.isArray(c)?c:[c];for(var p=n.getTicksCoords({tickModel:h}),m=0,g=0;g65535?new Uint32Array(3*r):new Uint16Array(3*r))},setSpriteAlign:function(e,t,r,i,n){var a,o,s,l;switch(null==r&&(r="left"),null==i&&(i="top"),n=n||0,r){case"left":a=n,s=t[0]+n;break;case"center":case"middle":a=-t[0]/2,s=t[0]/2;break;case"right":a=-t[0]-n,s=-n}switch(i){case"bottom":o=n,l=t[1]+n;break;case"middle":o=-t[1]/2,l=t[1]/2;break;case"top":o=-t[1]-n,l=-n}var h=4*e,u=this.attributes.offset;u.set(h,[a,l]),u.set(h+1,[s,l]),u.set(h+2,[s,o]),u.set(h+3,[a,o])},addSprite:function(e,t,r,i,n,a){var o=this._vertexOffset;this.setSprite(this._vertexOffset/4,e,t,r,i,n,a);for(var s=0;s 0.0) {\n currProj = clipNear(currProj, nextProj);\n }\n else if (prevProj.w > 0.0) {\n currProj = clipNear(currProj, prevProj);\n }\n }\n\n vec2 prevScreen = (prevProj.xy / abs(prevProj.w) + 1.0) * 0.5 * viewport.zw;\n vec2 currScreen = (currProj.xy / abs(currProj.w) + 1.0) * 0.5 * viewport.zw;\n vec2 nextScreen = (nextProj.xy / abs(nextProj.w) + 1.0) * 0.5 * viewport.zw;\n\n vec2 dir;\n float len = offset;\n if (position == positionPrev) {\n dir = normalize(nextScreen - currScreen);\n }\n else if (position == positionNext) {\n dir = normalize(currScreen - prevScreen);\n }\n else {\n vec2 dirA = normalize(currScreen - prevScreen);\n vec2 dirB = normalize(nextScreen - currScreen);\n\n vec2 tanget = normalize(dirA + dirB);\n\n float miter = 1.0 / max(dot(tanget, dirA), 0.5);\n len *= miter;\n dir = tanget;\n }\n\n dir = vec2(-dir.y, dir.x) * len;\n currScreen += dir;\n\n currProj.xy = (currScreen / viewport.zw - 0.5) * 2.0 * abs(currProj.w);\n@end\n\n\n@export ecgl.meshLines3D.vertex\n\nattribute vec3 position: POSITION;\nattribute vec3 positionPrev;\nattribute vec3 positionNext;\nattribute float offset;\nattribute vec4 a_Color : COLOR;\n\n#ifdef VERTEX_ANIMATION\nattribute vec3 prevPosition;\nattribute vec3 prevPositionPrev;\nattribute vec3 prevPositionNext;\nuniform float percent : 1.0;\n#endif\n\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform vec4 viewport : VIEWPORT;\nuniform float near : NEAR;\n\nvarying vec4 v_Color;\n\n@import ecgl.common.wireframe.vertexHeader\n\n@import ecgl.lines3D.clipNear\n\nvoid main()\n{\n @import ecgl.lines3D.expandLine\n\n gl_Position = currProj;\n\n v_Color = a_Color;\n\n @import ecgl.common.wireframe.vertexMain\n}\n@end\n\n\n@export ecgl.meshLines3D.fragment\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\n\nvarying vec4 v_Color;\n\n@import ecgl.common.wireframe.fragmentHeader\n\n@import clay.util.srgb\n\nvoid main()\n{\n#ifdef SRGB_DECODE\n gl_FragColor = sRGBToLinear(color * v_Color);\n#else\n gl_FragColor = color * v_Color;\n#endif\n\n @import ecgl.common.wireframe.fragmentMain\n}\n\n@end";var us=Mn;Ga.Shader.import(hs);var cs={x:0,y:2,z:1};const ds=i.ComponentView.extend({type:"grid3D",__ecgl__:!0,init:function(e,t){var r=new Ga.Material({shader:Ga.createShader("ecgl.color"),depthMask:!1,transparent:!0}),i=new Ga.Material({shader:Ga.createShader("ecgl.meshLines3D"),depthMask:!1,transparent:!0});r.define("fragment","DOUBLE_SIDED"),r.define("both","VERTEX_COLOR"),this.groupGL=new Ga.Node,this._control=new Ro({zr:t.getZr()}),this._control.init(),this._faces=[["y","z","x",-1,"left"],["y","z","x",1,"right"],["x","y","z",-1,"bottom"],["x","y","z",1,"top"],["x","z","y",-1,"far"],["x","z","y",1,"near"]].map((function(e){var t=new $o(e,i,r);return this.groupGL.add(t.rootNode),t}),this),this._axes=["x","y","z"].map((function(e){var t=new ls(e,i);return this.groupGL.add(t.rootNode),t}),this);var n=t.getDevicePixelRatio();this._axisLabelSurface=new Wo({width:256,height:256,devicePixelRatio:n}),this._axisLabelSurface.onupdate=function(){t.getZr().refresh()},this._axisPointerLineMesh=new Ga.Mesh({geometry:new ko({useNativeLine:!1}),material:i,castShadow:!1,ignorePicking:!0,renderOrder:3}),this.groupGL.add(this._axisPointerLineMesh),this._axisPointerLabelsSurface=new Wo({width:128,height:128,devicePixelRatio:n}),this._axisPointerLabelsMesh=new is({ignorePicking:!0,renderOrder:4,castShadow:!1}),this._axisPointerLabelsMesh.material.set("textureAtlas",this._axisPointerLabelsSurface.getTexture()),this.groupGL.add(this._axisPointerLabelsMesh),this._lightRoot=new Ga.Node,this._sceneHelper=new Xo,this._sceneHelper.initLight(this._lightRoot)},render:function(e,t,r){this._model=e,this._api=r;var i=e.coordinateSystem;i.viewGL.add(this._lightRoot),e.get("show")?i.viewGL.add(this.groupGL):i.viewGL.remove(this.groupGL);var n=this._control;n.setViewGL(i.viewGL);var a=e.getModel("viewControl");n.setFromViewControlModel(a,0),this._axisLabelSurface.clear(),n.off("update"),e.get("show")&&(this._faces.forEach((function(i){i.update(e,t,r)}),this),this._axes.forEach((function(t){t.update(e,this._axisLabelSurface,r)}),this)),n.on("update",this._onCameraChange.bind(this,e,r),this),this._sceneHelper.setScene(i.viewGL.scene),this._sceneHelper.updateLight(e),i.viewGL.setPostEffect(e.getModel("postEffect"),r),i.viewGL.setTemporalSuperSampling(e.getModel("temporalSuperSampling")),this._initMouseHandler(e)},afterRender:function(e,t,r,i){var n=i.renderer;this._sceneHelper.updateAmbientCubemap(n,e,r),this._sceneHelper.updateSkybox(n,e,r)},showAxisPointer:function(e,t,r,i){this._doShowAxisPointer(),this._updateAxisPointer(i.value)},hideAxisPointer:function(e,t,r,i){this._doHideAxisPointer()},_initMouseHandler:function(e){var t=e.coordinateSystem.viewGL;e.get("show")&&e.get("axisPointer.show")?t.on("mousemove",this._updateAxisPointerOnMousePosition,this):t.off("mousemove",this._updateAxisPointerOnMousePosition)},_updateAxisPointerOnMousePosition:function(e){if(!e.target){for(var t,r=this._model.coordinateSystem,i=r.viewGL,n=i.castRay(e.offsetX,e.offsetY,new Ga.Ray),a=0;ai[1]?0:1,o=this._faces[2*r+a],s=this._faces[2*r+1-a];o.rootNode.invisible=!0,s.rootNode.invisible=!1}},_updateAxisLinePosition:function(){var e=this._model.coordinateSystem,t=e.getAxis("x"),r=e.getAxis("y"),i=e.getAxis("z"),n=i.getExtentMax(),a=i.getExtentMin(),o=t.getExtentMin(),s=t.getExtentMax(),l=r.getExtentMax(),h=r.getExtentMin(),u=this._axes[0].rootNode,c=this._axes[1].rootNode,d=this._axes[2].rootNode,f=this._faces,p=f[4].rootNode.invisible?h:l,m=f[2].rootNode.invisible?n:a,g=f[0].rootNode.invisible?o:s,_=f[2].rootNode.invisible?n:a,v=f[0].rootNode.invisible?s:o,y=f[4].rootNode.invisible?h:l;u.rotation.identity(),c.rotation.identity(),d.rotation.identity(),f[4].rootNode.invisible&&(this._axes[0].flipped=!0,u.rotation.rotateX(Math.PI)),f[0].rootNode.invisible&&(this._axes[1].flipped=!0,c.rotation.rotateZ(Math.PI)),f[4].rootNode.invisible&&(this._axes[2].flipped=!0,d.rotation.rotateY(Math.PI)),u.position.set(0,m,p),c.position.set(g,_,0),d.position.set(v,0,y),u.update(),c.update(),d.update(),this._updateAxisLabelAlign()},_updateAxisLabelAlign:function(){var e=this._control.getCamera(),t=[new Ga.Vector4,new Ga.Vector4],r=new Ga.Vector4;this.groupGL.getWorldPosition(r),r.w=1,r.transformMat4(e.viewMatrix).transformMat4(e.projectionMatrix),r.x/=r.w,r.y/=r.w,this._axes.forEach((function(i){for(var n=i.axisLineCoords,a=(i.labelsMesh.geometry,0);ar.y?"bottom":"top"):(s="middle",o=u>r.x?"left":"right"),i.setSpriteAlign(o,s,this._api)}),this)},_doShowAxisPointer:function(){this._axisPointerLineMesh.invisible&&(this._axisPointerLineMesh.invisible=!1,this._axisPointerLabelsMesh.invisible=!1,this._api.getZr().refresh())},_doHideAxisPointer:function(){this._axisPointerLineMesh.invisible||(this._axisPointerLineMesh.invisible=!0,this._axisPointerLabelsMesh.invisible=!0,this._api.getZr().refresh())},_updateAxisPointer:function(e){var t=this._model.coordinateSystem,r=t.dataToPoint(e),i=this._axisPointerLineMesh.geometry,n=this._model.getModel("axisPointer"),a=this._api.getDevicePixelRatio();function o(e){return Mn(e.model.get("axisPointer.show"),n.get("show"))}function s(e){var t=e.model.getModel("axisPointer",n).getModel("lineStyle"),r=Ga.parseColor(t.get("color")),i=us(t.get("width"),1),a=us(t.get("opacity"),1);return r[3]*=a,{color:r,lineWidth:i}}i.convertToDynamicArray(!0);for(var l=0;lp&&(p=y,mp&&(p=x,_=r.x&&e<=r.x+r.width&&t>=r.y&&t<=r.y+r.height},e.prototype.clone=function(){return new e(this.x,this.y,this.width,this.height)},e.prototype.copy=function(t){e.copy(this,t)},e.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},e.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},e.prototype.isZero=function(){return 0===this.width||0===this.height},e.create=function(t){return new e(t.x,t.y,t.width,t.height)},e.copy=function(e,t){e.x=t.x,e.y=t.y,e.width=t.width,e.height=t.height},e.applyTransform=function(t,r,i){if(i){if(i[1]<1e-5&&i[1]>-1e-5&&i[2]<1e-5&&i[2]>-1e-5){var n=i[0],a=i[3],o=i[4],s=i[5];return t.x=r.x*n+o,t.y=r.y*a+s,t.width=r.width*n,t.height=r.height*a,t.width<0&&(t.x+=t.width,t.width=-t.width),void(t.height<0&&(t.y+=t.height,t.height=-t.height))}ws.x=Ss.x=r.x,ws.y=Ms.y=r.y,Ts.x=Ms.x=r.x+r.width,Ts.y=Ss.y=r.y+r.height,ws.transform(i),Ms.transform(i),Ts.transform(i),Ss.transform(i),t.x=xs(ws.x,Ts.x,Ss.x,Ms.x),t.y=xs(ws.y,Ts.y,Ss.y,Ms.y);var l=bs(ws.x,Ts.x,Ss.x,Ms.x),h=bs(ws.y,Ts.y,Ss.y,Ms.y);t.width=l-t.x,t.height=h-t.y}else t!==r&&e.copy(t,r)},e}();function Ds(e,t,r,i,n){var a=0,o=0;null==i&&(i=1/0),null==n&&(n=1/0);var s=0;t.eachChild((function(l,h){var u,c,d=l.getBoundingRect(),f=t.childAt(h+1),p=f&&f.getBoundingRect();if("horizontal"===e){var m=d.width+(p?-p.x+d.x:0);(u=a+m)>i||l.newline?(a=0,u=m,o+=s+r,s=d.height):s=Math.max(s,d.height)}else{var g=d.height+(p?-p.y+d.y:0);(c=o+g)>n||l.newline?(a+=s+r,o=0,c=g,s=d.width):s=Math.max(s,d.width)}l.newline||(l.x=a,l.y=o,l.markRedraw(),"horizontal"===e?a=u+r:o=c+r)}))}function Ls(e,t,r){r=function(e){if("number"==typeof e)return[e,e,e,e];var t=e.length;return 2===t?[e[0],e[1],e[0],e[1]]:3===t?[e[0],e[1],e[2],e[1]]:e}(r||0);var i=t.width,n=t.height,a=wo(e.left,i),o=wo(e.top,n),s=wo(e.right,i),l=wo(e.bottom,n),h=wo(e.width,i),u=wo(e.height,n),c=r[2]+r[0],d=r[1]+r[3],f=e.aspect;switch(isNaN(h)&&(h=i-s-d-a),isNaN(u)&&(u=n-l-c-o),null!=f&&(isNaN(h)&&isNaN(u)&&(f>i/n?h=.8*i:u=.8*n),isNaN(h)&&(h=f*u),isNaN(u)&&(u=h/f)),isNaN(a)&&(a=i-s-h-d),isNaN(o)&&(o=n-l-u-c),e.left||e.right){case"center":a=i/2-h/2-r[3];break;case"right":a=i-h-d}switch(e.top||e.bottom){case"middle":case"center":o=n/2-u/2-r[0];break;case"bottom":o=n-u-c}a=a||0,o=o||0,isNaN(h)&&(h=i-d-a-(s||0)),isNaN(u)&&(u=n-c-o-(l||0));var p=new Cs(a+r[3],o+r[0],h,u);return p.margin=r,p}vo(Ds,"vertical"),vo(Ds,"horizontal");var Ps=function(){this._pool={},this._allocatedTextures=[]};Ps.prototype={constructor:Ps,get:function(e){var t=Is(e);this._pool.hasOwnProperty(t)||(this._pool[t]=[]);var r=this._pool[t];if(!r.length){var i=new Dr(e);return this._allocatedTextures.push(i),i}return r.pop()},put:function(e){var t=Is(e);this._pool.hasOwnProperty(t)||(this._pool[t]=[]),this._pool[t].push(e)},clear:function(e){for(var t=0;t 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n#ifdef USE_VSM\n depth = depth * 0.5 + 0.5;\n float moment1 = depth;\n float moment2 = depth * depth;\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n moment2 += 0.25*(dx*dx+dy*dy);\n #endif\n gl_FragColor = vec4(moment1, moment2, 0.0, 1.0);\n#else\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n depth += sqrt(dx*dx + dy*dy) * slopeScale + bias;\n #else\n depth += bias;\n #endif\n gl_FragColor = encodeFloat(depth * 0.5 + 0.5);\n#endif\n}\n@end\n@export clay.sm.debug_depth\nuniform sampler2D depthMap;\nvarying vec2 v_Texcoord;\n@import clay.util.decode_float\nvoid main() {\n vec4 tex = texture2D(depthMap, v_Texcoord);\n#ifdef USE_VSM\n gl_FragColor = vec4(tex.rgb, 1.0);\n#else\n float depth = decodeFloat(tex);\n gl_FragColor = vec4(depth, depth, depth, 1.0);\n#endif\n}\n@end\n@export clay.sm.distance.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 world : WORLD;\nattribute vec3 position : POSITION;\n@import clay.chunk.skinning_header\nvarying vec3 v_WorldPosition;\nvoid main (){\n vec4 P = vec4(position, 1.0);\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n P = skinMatrixWS * P;\n#endif\n#ifdef INSTANCING\n @import clay.chunk.instancing_matrix\n P = instanceMat * P;\n#endif\n gl_Position = worldViewProjection * P;\n v_WorldPosition = (world * P).xyz;\n}\n@end\n@export clay.sm.distance.fragment\nuniform vec3 lightPosition;\nuniform float range : 100;\nvarying vec3 v_WorldPosition;\n@import clay.util.encode_float\nvoid main(){\n float dist = distance(lightPosition, v_WorldPosition);\n#ifdef USE_VSM\n gl_FragColor = vec4(dist, dist * dist, 0.0, 0.0);\n#else\n dist = dist / range;\n gl_FragColor = encodeFloat(dist);\n#endif\n}\n@end\n@export clay.plugin.shadow_map_common\n@import clay.util.decode_float\nfloat tapShadowMap(sampler2D map, vec2 uv, float z){\n vec4 tex = texture2D(map, uv);\n return step(z, decodeFloat(tex) * 2.0 - 1.0);\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize, vec2 scale) {\n float shadowContrib = tapShadowMap(map, uv, z);\n vec2 offset = vec2(1.0 / textureSize) * scale;\n#ifdef PCF_KERNEL_SIZE\n for (int _idx_ = 0; _idx_ < PCF_KERNEL_SIZE; _idx_++) {{\n shadowContrib += tapShadowMap(map, uv + offset * pcfKernel[_idx_], z);\n }}\n return shadowContrib / float(PCF_KERNEL_SIZE + 1);\n#else\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, -offset.y), z);\n return shadowContrib / 9.0;\n#endif\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize) {\n return pcf(map, uv, z, textureSize, vec2(1.0));\n}\nfloat chebyshevUpperBound(vec2 moments, float z){\n float p = 0.0;\n z = z * 0.5 + 0.5;\n if (z <= moments.x) {\n p = 1.0;\n }\n float variance = moments.y - moments.x * moments.x;\n variance = max(variance, 0.0000001);\n float mD = moments.x - z;\n float pMax = variance / (variance + mD * mD);\n pMax = clamp((pMax-0.4)/(1.0-0.4), 0.0, 1.0);\n return max(p, pMax);\n}\nfloat computeShadowContrib(\n sampler2D map, mat4 lightVPM, vec3 position, float textureSize, vec2 scale, vec2 offset\n) {\n vec4 posInLightSpace = lightVPM * vec4(position, 1.0);\n posInLightSpace.xyz /= posInLightSpace.w;\n float z = posInLightSpace.z;\n if(all(greaterThan(posInLightSpace.xyz, vec3(-0.99, -0.99, -1.0))) &&\n all(lessThan(posInLightSpace.xyz, vec3(0.99, 0.99, 1.0)))){\n vec2 uv = (posInLightSpace.xy+1.0) / 2.0;\n #ifdef USE_VSM\n vec2 moments = texture2D(map, uv * scale + offset).xy;\n return chebyshevUpperBound(moments, z);\n #else\n return pcf(map, uv * scale + offset, z, textureSize, scale);\n #endif\n }\n return 1.0;\n}\nfloat computeShadowContrib(sampler2D map, mat4 lightVPM, vec3 position, float textureSize) {\n return computeShadowContrib(map, lightVPM, position, textureSize, vec2(1.0), vec2(0.0));\n}\nfloat computeShadowContribOmni(samplerCube map, vec3 direction, float range)\n{\n float dist = length(direction);\n vec4 shadowTex = textureCube(map, direction);\n#ifdef USE_VSM\n vec2 moments = shadowTex.xy;\n float variance = moments.y - moments.x * moments.x;\n float mD = moments.x - dist;\n float p = variance / (variance + mD * mD);\n if(moments.x + 0.001 < dist){\n return clamp(p, 0.0, 1.0);\n }else{\n return 1.0;\n }\n#else\n return step(dist, (decodeFloat(shadowTex) + 0.0002) * range);\n#endif\n}\n@end\n@export clay.plugin.compute_shadow_map\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT) || defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT) || defined(POINT_LIGHT_SHADOWMAP_COUNT)\n#ifdef SPOT_LIGHT_SHADOWMAP_COUNT\nuniform sampler2D spotLightShadowMaps[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 spotLightMatrices[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float spotLightShadowMapSizes[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#ifdef DIRECTIONAL_LIGHT_SHADOWMAP_COUNT\n#if defined(SHADOW_CASCADE)\nuniform sampler2D directionalLightShadowMaps[1]:unconfigurable;\nuniform mat4 directionalLightMatrices[SHADOW_CASCADE]:unconfigurable;\nuniform float directionalLightShadowMapSizes[1]:unconfigurable;\nuniform float shadowCascadeClipsNear[SHADOW_CASCADE]:unconfigurable;\nuniform float shadowCascadeClipsFar[SHADOW_CASCADE]:unconfigurable;\n#else\nuniform sampler2D directionalLightShadowMaps[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 directionalLightMatrices[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float directionalLightShadowMapSizes[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#endif\n#ifdef POINT_LIGHT_SHADOWMAP_COUNT\nuniform samplerCube pointLightShadowMaps[POINT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\nuniform bool shadowEnabled : true;\n#ifdef PCF_KERNEL_SIZE\nuniform vec2 pcfKernel[PCF_KERNEL_SIZE];\n#endif\n@import clay.plugin.shadow_map_common\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfSpotLights(vec3 position, inout float shadowContribs[SPOT_LIGHT_COUNT] ) {\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < SPOT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n spotLightShadowMaps[_idx_], spotLightMatrices[_idx_], position,\n spotLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = SPOT_LIGHT_SHADOWMAP_COUNT; _idx_ < SPOT_LIGHT_COUNT; _idx_++){{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n#ifdef SHADOW_CASCADE\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float depth = (2.0 * gl_FragCoord.z - gl_DepthRange.near - gl_DepthRange.far)\n / (gl_DepthRange.far - gl_DepthRange.near);\n float shadowContrib;\n shadowContribs[0] = 1.0;\n for (int _idx_ = 0; _idx_ < SHADOW_CASCADE; _idx_++) {{\n if (\n depth >= shadowCascadeClipsNear[_idx_] &&\n depth <= shadowCascadeClipsFar[_idx_]\n ) {\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[0], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[0],\n vec2(1.0 / float(SHADOW_CASCADE), 1.0),\n vec2(float(_idx_) / float(SHADOW_CASCADE), 0.0)\n );\n shadowContribs[0] = shadowContrib;\n }\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#else\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[_idx_], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfPointLights(vec3 position, inout float shadowContribs[POINT_LIGHT_COUNT] ){\n vec3 lightPosition;\n vec3 direction;\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n lightPosition = pointLightPosition[_idx_];\n direction = position - lightPosition;\n shadowContribs[_idx_] = computeShadowContribOmni(pointLightShadowMaps[_idx_], direction, pointLightRange[_idx_]);\n }}\n for(int _idx_ = POINT_LIGHT_SHADOWMAP_COUNT; _idx_ < POINT_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n@end");var Gs,Us,ks,Vs,Hs,Ws,js,Xs=m.extend((function(){return{softShadow:Xs.PCF,shadowBlur:1,lightFrustumBias:"auto",kernelPCF:new Float32Array([1,0,1,1,-1,1,0,1,-1,0,-1,-1,1,-1,0,-1]),precision:"highp",_lastRenderNotCastShadow:!1,_frameBuffer:new zi,_textures:{},_shadowMapNumber:{POINT_LIGHT:0,DIRECTIONAL_LIGHT:0,SPOT_LIGHT:0},_depthMaterials:{},_distanceMaterials:{},_receivers:[],_lightsCastShadow:[],_lightCameras:{},_lightMaterials:{},_texturePool:new Rs}}),(function(){this._gaussianPassH=new pn({fragment:Xe.source("clay.compositor.gaussian_blur")}),this._gaussianPassV=new pn({fragment:Xe.source("clay.compositor.gaussian_blur")}),this._gaussianPassH.setUniform("blurSize",this.shadowBlur),this._gaussianPassH.setUniform("blurDir",0),this._gaussianPassV.setUniform("blurSize",this.shadowBlur),this._gaussianPassV.setUniform("blurDir",1),this._outputDepthPass=new pn({fragment:Xe.source("clay.sm.debug_depth")})}),{render:function(e,t,r,i){r||(r=t.getMainCamera()),this.trigger("beforerender",this,e,t,r),this._renderShadowPass(e,t,r,i),this.trigger("afterrender",this,e,t,r)},renderDebug:function(e,t){e.saveClear();var r=e.viewport,i=0,n=t||r.width/4,a=n;for(var o in this.softShadow===Xs.VSM?this._outputDepthPass.material.define("fragment","USE_VSM"):this._outputDepthPass.material.undefine("fragment","USE_VSM"),this._textures){var s=this._textures[o];e.setViewport(i,0,n*s.width/s.height,a),this._outputDepthPass.setUniform("depthMap",s),this._outputDepthPass.render(e),i+=n*s.width/s.height}e.setViewport(r),e.restoreClear()},_updateReceivers:function(e,t){if(t.receiveShadow?(this._receivers.push(t),t.material.set("shadowEnabled",1),t.material.set("pcfKernel",this.kernelPCF)):t.material.set("shadowEnabled",0),this.softShadow===Xs.VSM)t.material.define("fragment","USE_VSM"),t.material.undefine("fragment","PCF_KERNEL_SIZE");else{t.material.undefine("fragment","USE_VSM");var r=this.kernelPCF;r&&r.length?t.material.define("fragment","PCF_KERNEL_SIZE",r.length/2):t.material.undefine("fragment","PCF_KERNEL_SIZE")}},_update:function(e,t){var r=this;t.traverse((function(t){t.isRenderable()&&r._updateReceivers(e,t)}));for(var i=0;i4){console.warn("Support at most 4 cascade");continue}p.shadowCascade>1&&(o=p),this.renderDirectionalLightShadow(e,t,r,p,c,u,h)}else"SPOT_LIGHT"===p.type?this.renderSpotLightShadow(e,t,p,l,s):"POINT_LIGHT"===p.type&&this.renderPointLightShadow(e,t,p,d);this._shadowMapNumber[p.type]++}for(var m in this._shadowMapNumber){var g=this._shadowMapNumber[m],_=m+"_SHADOWMAP_COUNT";for(f=0;f0?v.define("fragment",_,g):v.isDefined("fragment",_)&&v.undefine("fragment",_))}for(f=0;f0){var x=h.map(S);if(y.directionalLightShadowMaps={value:h,type:"tv"},y.directionalLightMatrices={value:u,type:"m4v"},y.directionalLightShadowMapSizes={value:x,type:"1fv"},o){var b=c.slice(),w=c.slice();b.pop(),w.shift(),b.reverse(),w.reverse(),u.reverse(),y.shadowCascadeClipsNear={value:b,type:"1fv"},y.shadowCascadeClipsFar={value:w,type:"1fv"}}}if(s.length>0){var T=s.map(S);(y=t.shadowUniforms).spotLightShadowMaps={value:s,type:"tv"},y.spotLightMatrices={value:l,type:"m4v"},y.spotLightShadowMapSizes={value:T,type:"1fv"}}d.length>0&&(y.pointLightShadowMaps={value:d,type:"tv"})}function S(e){return e.height}},renderDirectionalLightShadow:(Gs=new si,Us=new Ht,ks=new ir,Vs=new Ht,Hs=new Ht,Ws=new Ht,js=new Ht,function(e,t,r,i,n,a,o){var s=this._getDepthMaterial(i),l={getMaterial:function(e){return e.shadowDepthMaterial||s},isMaterialChanged:zs,getUniform:Bs,ifRender:function(e){return e.castShadow},sortCompare:ut.opaqueSortCompare};if(!t.viewBoundingBoxLastFrame.isFinite()){var h=t.getBoundingBox();t.viewBoundingBoxLastFrame.copy(h).applyTransform(r.viewMatrix)}var u=Math.min(-t.viewBoundingBoxLastFrame.min.z,r.far),c=Math.max(-t.viewBoundingBoxLastFrame.max.z,r.near),d=this._getDirectionalLightCamera(i,t,r),f=Ws.array;js.copy(d.projectionMatrix),Ye.invert(Hs.array,d.worldTransform.array),Ye.multiply(Hs.array,Hs.array,r.worldTransform.array),Ye.multiply(f,js.array,Hs.array);for(var p=[],m=r instanceof Ei,g=(r.near+r.far)/(r.near-r.far),_=2*r.near*r.far/(r.near-r.far),v=0;v<=i.shadowCascade;v++){var y=c*Math.pow(u/c,v/i.shadowCascade),x=c+(u-c)*v/i.shadowCascade,b=y*i.cascadeSplitLogFactor+x*(1-i.cascadeSplitLogFactor);p.push(b),n.push(-(-b*g+_)/-b)}var w=this._getTexture(i,i.shadowCascade);o.push(w);var T=e.viewport,S=e.gl;for(this._frameBuffer.attach(w),this._frameBuffer.bind(e),S.clear(S.COLOR_BUFFER_BIT|S.DEPTH_BUFFER_BIT),v=0;vd?s>f?p[n>0?"px":"nx"]=!0:p[o>0?"pz":"nz"]=!0:d>f?p[a>0?"py":"ny"]=!0:p[o>0?"pz":"nz"]=!0}for(r=0;r0&&(this.outputs[e].keepLastFrame?(this._prevOutputTextures[e]&&this._compositor.releaseTexture(this._prevOutputTextures[e]),this._prevOutputTextures[e]=this._outputTextures[e]):this._compositor.releaseTexture(this._outputTextures[e]))}}),Ys=m.extend((function(){return{nodes:[]}}),{dirty:function(){this._dirty=!0},addNode:function(e){this.nodes.indexOf(e)>=0||(this.nodes.push(e),this._dirty=!0)},removeNode:function(e){"string"==typeof e&&(e=this.getNodeByName(e));var t=this.nodes.indexOf(e);t>=0&&(this.nodes.splice(t,1),this._dirty=!0)},getNodeByName:function(e){for(var t=0;t=r.COLOR_ATTACHMENT0&&u<=r.COLOR_ATTACHMENT0+8&&h.push(u);l.drawBuffersEXT(h)}e.saveClear(),e.clearBit=16640,t=e.render(this.scene,this.camera,!this.autoUpdateScene,this.preZ),e.restoreClear(),i.unbind(e)}else t=e.render(this.scene,this.camera,!this.autoUpdateScene,this.preZ);this.trigger("afterrender",t),this._rendering=!1,this._rendered=!0}}),Js=Zs.extend((function(){return{texture:null,outputs:{color:{}}}}),(function(){}),{getOutput:function(e,t){return this.texture},beforeFrame:function(){},afterFrame:function(){}}),$s=Zs.extend((function(){return{name:"",inputs:{},outputs:null,shader:"",inputLinks:{},outputLinks:{},pass:null,_prevOutputTextures:{},_outputTextures:{},_outputReferences:{},_rendering:!1,_rendered:!1,_compositor:null}}),(function(){var e=new pn({fragment:this.shader});this.pass=e}),{render:function(e,t){this.trigger("beforerender",e),this._rendering=!0;var r=e.gl;for(var i in this.inputLinks){var n=(c=this.inputLinks[i]).node.getOutput(e,c.pin);this.pass.setUniform(i,n)}if(this.outputs){this.pass.outputs={};var a={};for(var o in this.outputs){var s=this.updateParameter(o,e);isNaN(s.width)&&this.updateParameter(o,e);var l=this.outputs[o],h=this._compositor.allocateTexture(s);this._outputTextures[o]=h,"string"==typeof(u=l.attachment||r.COLOR_ATTACHMENT0)&&(u=r[u]),a[u]=h}for(var u in this._compositor.getFrameBuffer().bind(e),a)this._compositor.getFrameBuffer().attach(a[u],u);this.pass.render(e),this._compositor.getFrameBuffer().updateMipmap(e)}else this.pass.outputs=null,this._compositor.getFrameBuffer().unbind(e),this.pass.render(e,t);for(var i in this.inputLinks){var c;(c=this.inputLinks[i]).node.removeReference(c.pin)}this._rendering=!1,this._rendered=!0,this.trigger("afterrender",e)},updateParameter:function(e,t){var r,i,n=this.outputs[e],a=n.parameters,o=n._parametersCopy;if(o||(o=n._parametersCopy={}),a)for(var s in a)"width"!==s&&"height"!==s&&(o[s]=a[s]);return r="function"==typeof a.width?a.width.call(this,t):a.width,i="function"==typeof a.height?a.height.call(this,t):a.height,r=Math.ceil(r),i=Math.ceil(i),o.width===r&&o.height===i||this._outputTextures[e]&&this._outputTextures[e].dispose(t),o.width=r,o.height=i,o},setParameter:function(e,t){this.pass.setUniform(e,t)},getParameter:function(e){return this.pass.getUniform(e)},setParameters:function(e){for(var t in e)this.setParameter(t,e[t])},define:function(e,t){this.pass.material.define("fragment",e,t)},undefine:function(e){this.pass.material.undefine("fragment",e)},removeReference:function(e){this._outputReferences[e]--,0===this._outputReferences[e]&&(this.outputs[e].keepLastFrame?(this._prevOutputTextures[e]&&this._compositor.releaseTexture(this._prevOutputTextures[e]),this._prevOutputTextures[e]=this._outputTextures[e]):this._compositor.releaseTexture(this._outputTextures[e]))},clear:function(){Zs.prototype.clear.call(this),this.pass.material.disableTexturesAll()}}),el="@export clay.compositor.kernel.gaussian_9\nfloat gaussianKernel[9];\ngaussianKernel[0] = 0.07;\ngaussianKernel[1] = 0.09;\ngaussianKernel[2] = 0.12;\ngaussianKernel[3] = 0.14;\ngaussianKernel[4] = 0.16;\ngaussianKernel[5] = 0.14;\ngaussianKernel[6] = 0.12;\ngaussianKernel[7] = 0.09;\ngaussianKernel[8] = 0.07;\n@end\n@export clay.compositor.kernel.gaussian_13\nfloat gaussianKernel[13];\ngaussianKernel[0] = 0.02;\ngaussianKernel[1] = 0.03;\ngaussianKernel[2] = 0.06;\ngaussianKernel[3] = 0.08;\ngaussianKernel[4] = 0.11;\ngaussianKernel[5] = 0.13;\ngaussianKernel[6] = 0.14;\ngaussianKernel[7] = 0.13;\ngaussianKernel[8] = 0.11;\ngaussianKernel[9] = 0.08;\ngaussianKernel[10] = 0.06;\ngaussianKernel[11] = 0.03;\ngaussianKernel[12] = 0.02;\n@end\n@export clay.compositor.gaussian_blur\n#define SHADER_NAME gaussian_blur\nuniform sampler2D texture;varying vec2 v_Texcoord;\nuniform float blurSize : 2.0;\nuniform vec2 textureSize : [512.0, 512.0];\nuniform float blurDir : 0.0;\n@import clay.util.rgbm\n@import clay.util.clamp_sample\nvoid main (void)\n{\n @import clay.compositor.kernel.gaussian_9\n vec2 off = blurSize / textureSize;\n off *= vec2(1.0 - blurDir, blurDir);\n vec4 sum = vec4(0.0);\n float weightAll = 0.0;\n for (int i = 0; i < 9; i++) {\n float w = gaussianKernel[i];\n vec4 texel = decodeHDR(clampSample(texture, v_Texcoord + float(i - 4) * off));\n sum += texel * w;\n weightAll += w;\n }\n gl_FragColor = encodeHDR(sum / max(weightAll, 0.01));\n}\n@end\n",tl="\n@export clay.compositor.lut\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform sampler2D lookup;\nvoid main()\n{\n vec4 tex = texture2D(texture, v_Texcoord);\n float blueColor = tex.b * 63.0;\n vec2 quad1;\n quad1.y = floor(floor(blueColor) / 8.0);\n quad1.x = floor(blueColor) - (quad1.y * 8.0);\n vec2 quad2;\n quad2.y = floor(ceil(blueColor) / 8.0);\n quad2.x = ceil(blueColor) - (quad2.y * 8.0);\n vec2 texPos1;\n texPos1.x = (quad1.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * tex.r);\n texPos1.y = (quad1.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * tex.g);\n vec2 texPos2;\n texPos2.x = (quad2.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * tex.r);\n texPos2.y = (quad2.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * tex.g);\n vec4 newColor1 = texture2D(lookup, texPos1);\n vec4 newColor2 = texture2D(lookup, texPos2);\n vec4 newColor = mix(newColor1, newColor2, fract(blueColor));\n gl_FragColor = vec4(newColor.rgb, tex.w);\n}\n@end",rl="@export clay.compositor.output\n#define OUTPUT_ALPHA\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\n@import clay.util.rgbm\nvoid main()\n{\n vec4 tex = decodeHDR(texture2D(texture, v_Texcoord));\n gl_FragColor.rgb = tex.rgb;\n#ifdef OUTPUT_ALPHA\n gl_FragColor.a = tex.a;\n#else\n gl_FragColor.a = 1.0;\n#endif\n gl_FragColor = encodeHDR(gl_FragColor);\n#ifdef PREMULTIPLY_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif\n}\n@end",il="@export clay.compositor.bright\nuniform sampler2D texture;\nuniform float threshold : 1;\nuniform float scale : 1.0;\nuniform vec2 textureSize: [512, 512];\nvarying vec2 v_Texcoord;\nconst vec3 lumWeight = vec3(0.2125, 0.7154, 0.0721);\n@import clay.util.rgbm\nvec4 median(vec4 a, vec4 b, vec4 c)\n{\n return a + b + c - min(min(a, b), c) - max(max(a, b), c);\n}\nvoid main()\n{\n vec4 texel = decodeHDR(texture2D(texture, v_Texcoord));\n#ifdef ANTI_FLICKER\n vec3 d = 1.0 / textureSize.xyx * vec3(1.0, 1.0, 0.0);\n vec4 s1 = decodeHDR(texture2D(texture, v_Texcoord - d.xz));\n vec4 s2 = decodeHDR(texture2D(texture, v_Texcoord + d.xz));\n vec4 s3 = decodeHDR(texture2D(texture, v_Texcoord - d.zy));\n vec4 s4 = decodeHDR(texture2D(texture, v_Texcoord + d.zy));\n texel = median(median(texel, s1, s2), s3, s4);\n#endif\n float lum = dot(texel.rgb , lumWeight);\n vec4 color;\n if (lum > threshold && texel.a > 0.0)\n {\n color = vec4(texel.rgb * scale, texel.a * scale);\n }\n else\n {\n color = vec4(0.0);\n }\n gl_FragColor = encodeHDR(color);\n}\n@end\n",nl="@export clay.compositor.downsample\nuniform sampler2D texture;\nuniform vec2 textureSize : [512, 512];\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\nfloat brightness(vec3 c)\n{\n return max(max(c.r, c.g), c.b);\n}\n@import clay.util.clamp_sample\nvoid main()\n{\n vec4 d = vec4(-1.0, -1.0, 1.0, 1.0) / textureSize.xyxy;\n#ifdef ANTI_FLICKER\n vec3 s1 = decodeHDR(clampSample(texture, v_Texcoord + d.xy)).rgb;\n vec3 s2 = decodeHDR(clampSample(texture, v_Texcoord + d.zy)).rgb;\n vec3 s3 = decodeHDR(clampSample(texture, v_Texcoord + d.xw)).rgb;\n vec3 s4 = decodeHDR(clampSample(texture, v_Texcoord + d.zw)).rgb;\n float s1w = 1.0 / (brightness(s1) + 1.0);\n float s2w = 1.0 / (brightness(s2) + 1.0);\n float s3w = 1.0 / (brightness(s3) + 1.0);\n float s4w = 1.0 / (brightness(s4) + 1.0);\n float oneDivideSum = 1.0 / (s1w + s2w + s3w + s4w);\n vec4 color = vec4(\n (s1 * s1w + s2 * s2w + s3 * s3w + s4 * s4w) * oneDivideSum,\n 1.0\n );\n#else\n vec4 color = decodeHDR(clampSample(texture, v_Texcoord + d.xy));\n color += decodeHDR(clampSample(texture, v_Texcoord + d.zy));\n color += decodeHDR(clampSample(texture, v_Texcoord + d.xw));\n color += decodeHDR(clampSample(texture, v_Texcoord + d.zw));\n color *= 0.25;\n#endif\n gl_FragColor = encodeHDR(color);\n}\n@end",al="\n@export clay.compositor.upsample\n#define HIGH_QUALITY\nuniform sampler2D texture;\nuniform vec2 textureSize : [512, 512];\nuniform float sampleScale: 0.5;\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\n@import clay.util.clamp_sample\nvoid main()\n{\n#ifdef HIGH_QUALITY\n vec4 d = vec4(1.0, 1.0, -1.0, 0.0) / textureSize.xyxy * sampleScale;\n vec4 s;\n s = decodeHDR(clampSample(texture, v_Texcoord - d.xy));\n s += decodeHDR(clampSample(texture, v_Texcoord - d.wy)) * 2.0;\n s += decodeHDR(clampSample(texture, v_Texcoord - d.zy));\n s += decodeHDR(clampSample(texture, v_Texcoord + d.zw)) * 2.0;\n s += decodeHDR(clampSample(texture, v_Texcoord )) * 4.0;\n s += decodeHDR(clampSample(texture, v_Texcoord + d.xw)) * 2.0;\n s += decodeHDR(clampSample(texture, v_Texcoord + d.zy));\n s += decodeHDR(clampSample(texture, v_Texcoord + d.wy)) * 2.0;\n s += decodeHDR(clampSample(texture, v_Texcoord + d.xy));\n gl_FragColor = encodeHDR(s / 16.0);\n#else\n vec4 d = vec4(-1.0, -1.0, +1.0, +1.0) / textureSize.xyxy;\n vec4 s;\n s = decodeHDR(clampSample(texture, v_Texcoord + d.xy));\n s += decodeHDR(clampSample(texture, v_Texcoord + d.zy));\n s += decodeHDR(clampSample(texture, v_Texcoord + d.xw));\n s += decodeHDR(clampSample(texture, v_Texcoord + d.zw));\n gl_FragColor = encodeHDR(s / 4.0);\n#endif\n}\n@end",ol="@export clay.compositor.hdr.composite\n#define TONEMAPPING\nuniform sampler2D texture;\n#ifdef BLOOM_ENABLED\nuniform sampler2D bloom;\n#endif\n#ifdef LENSFLARE_ENABLED\nuniform sampler2D lensflare;\nuniform sampler2D lensdirt;\n#endif\n#ifdef LUM_ENABLED\nuniform sampler2D lum;\n#endif\n#ifdef LUT_ENABLED\nuniform sampler2D lut;\n#endif\n#ifdef COLOR_CORRECTION\nuniform float brightness : 0.0;\nuniform float contrast : 1.0;\nuniform float saturation : 1.0;\n#endif\n#ifdef VIGNETTE\nuniform float vignetteDarkness: 1.0;\nuniform float vignetteOffset: 1.0;\n#endif\nuniform float exposure : 1.0;\nuniform float bloomIntensity : 0.25;\nuniform float lensflareIntensity : 1;\nvarying vec2 v_Texcoord;\n@import clay.util.srgb\nvec3 ACESToneMapping(vec3 color)\n{\n const float A = 2.51;\n const float B = 0.03;\n const float C = 2.43;\n const float D = 0.59;\n const float E = 0.14;\n return (color * (A * color + B)) / (color * (C * color + D) + E);\n}\nfloat eyeAdaption(float fLum)\n{\n return mix(0.2, fLum, 0.5);\n}\n#ifdef LUT_ENABLED\nvec3 lutTransform(vec3 color) {\n float blueColor = color.b * 63.0;\n vec2 quad1;\n quad1.y = floor(floor(blueColor) / 8.0);\n quad1.x = floor(blueColor) - (quad1.y * 8.0);\n vec2 quad2;\n quad2.y = floor(ceil(blueColor) / 8.0);\n quad2.x = ceil(blueColor) - (quad2.y * 8.0);\n vec2 texPos1;\n texPos1.x = (quad1.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.r);\n texPos1.y = (quad1.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.g);\n vec2 texPos2;\n texPos2.x = (quad2.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.r);\n texPos2.y = (quad2.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.g);\n vec4 newColor1 = texture2D(lut, texPos1);\n vec4 newColor2 = texture2D(lut, texPos2);\n vec4 newColor = mix(newColor1, newColor2, fract(blueColor));\n return newColor.rgb;\n}\n#endif\n@import clay.util.rgbm\nvoid main()\n{\n vec4 texel = vec4(0.0);\n vec4 originalTexel = vec4(0.0);\n#ifdef TEXTURE_ENABLED\n texel = decodeHDR(texture2D(texture, v_Texcoord));\n originalTexel = texel;\n#endif\n#ifdef BLOOM_ENABLED\n vec4 bloomTexel = decodeHDR(texture2D(bloom, v_Texcoord));\n texel.rgb += bloomTexel.rgb * bloomIntensity;\n texel.a += bloomTexel.a * bloomIntensity;\n#endif\n#ifdef LENSFLARE_ENABLED\n texel += decodeHDR(texture2D(lensflare, v_Texcoord)) * texture2D(lensdirt, v_Texcoord) * lensflareIntensity;\n#endif\n texel.a = min(texel.a, 1.0);\n#ifdef LUM_ENABLED\n float fLum = texture2D(lum, vec2(0.5, 0.5)).r;\n float adaptedLumDest = 3.0 / (max(0.1, 1.0 + 10.0*eyeAdaption(fLum)));\n float exposureBias = adaptedLumDest * exposure;\n#else\n float exposureBias = exposure;\n#endif\n#ifdef TONEMAPPING\n texel.rgb *= exposureBias;\n texel.rgb = ACESToneMapping(texel.rgb);\n#endif\n texel = linearTosRGB(texel);\n#ifdef LUT_ENABLED\n texel.rgb = lutTransform(clamp(texel.rgb,vec3(0.0),vec3(1.0)));\n#endif\n#ifdef COLOR_CORRECTION\n texel.rgb = clamp(texel.rgb + vec3(brightness), 0.0, 1.0);\n texel.rgb = clamp((texel.rgb - vec3(0.5))*contrast+vec3(0.5), 0.0, 1.0);\n float lum = dot(texel.rgb, vec3(0.2125, 0.7154, 0.0721));\n texel.rgb = mix(vec3(lum), texel.rgb, saturation);\n#endif\n#ifdef VIGNETTE\n vec2 uv = (v_Texcoord - vec2(0.5)) * vec2(vignetteOffset);\n texel.rgb = mix(texel.rgb, vec3(1.0 - vignetteDarkness), dot(uv, uv));\n#endif\n gl_FragColor = encodeHDR(texel);\n#ifdef DEBUG\n #if DEBUG == 1\n gl_FragColor = encodeHDR(decodeHDR(texture2D(texture, v_Texcoord)));\n #elif DEBUG == 2\n gl_FragColor = encodeHDR(decodeHDR(texture2D(bloom, v_Texcoord)) * bloomIntensity);\n #elif DEBUG == 3\n gl_FragColor = encodeHDR(decodeHDR(texture2D(lensflare, v_Texcoord) * lensflareIntensity));\n #endif\n#endif\n if (originalTexel.a <= 0.01 && gl_FragColor.a > 1e-5) {\n gl_FragColor.a = dot(gl_FragColor.rgb, vec3(0.2125, 0.7154, 0.0721));\n }\n#ifdef PREMULTIPLY_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif\n}\n@end",sl="@export clay.compositor.blend\n#define SHADER_NAME blend\n#ifdef TEXTURE1_ENABLED\nuniform sampler2D texture1;\nuniform float weight1 : 1.0;\n#endif\n#ifdef TEXTURE2_ENABLED\nuniform sampler2D texture2;\nuniform float weight2 : 1.0;\n#endif\n#ifdef TEXTURE3_ENABLED\nuniform sampler2D texture3;\nuniform float weight3 : 1.0;\n#endif\n#ifdef TEXTURE4_ENABLED\nuniform sampler2D texture4;\nuniform float weight4 : 1.0;\n#endif\n#ifdef TEXTURE5_ENABLED\nuniform sampler2D texture5;\nuniform float weight5 : 1.0;\n#endif\n#ifdef TEXTURE6_ENABLED\nuniform sampler2D texture6;\nuniform float weight6 : 1.0;\n#endif\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\nvoid main()\n{\n vec4 tex = vec4(0.0);\n#ifdef TEXTURE1_ENABLED\n tex += decodeHDR(texture2D(texture1, v_Texcoord)) * weight1;\n#endif\n#ifdef TEXTURE2_ENABLED\n tex += decodeHDR(texture2D(texture2, v_Texcoord)) * weight2;\n#endif\n#ifdef TEXTURE3_ENABLED\n tex += decodeHDR(texture2D(texture3, v_Texcoord)) * weight3;\n#endif\n#ifdef TEXTURE4_ENABLED\n tex += decodeHDR(texture2D(texture4, v_Texcoord)) * weight4;\n#endif\n#ifdef TEXTURE5_ENABLED\n tex += decodeHDR(texture2D(texture5, v_Texcoord)) * weight5;\n#endif\n#ifdef TEXTURE6_ENABLED\n tex += decodeHDR(texture2D(texture6, v_Texcoord)) * weight6;\n#endif\n gl_FragColor = encodeHDR(tex);\n}\n@end",ll="@export clay.compositor.fxaa\nuniform sampler2D texture;\nuniform vec4 viewport : VIEWPORT;\nvarying vec2 v_Texcoord;\n#define FXAA_REDUCE_MIN (1.0/128.0)\n#define FXAA_REDUCE_MUL (1.0/8.0)\n#define FXAA_SPAN_MAX 8.0\n@import clay.util.rgbm\nvoid main()\n{\n vec2 resolution = 1.0 / viewport.zw;\n vec3 rgbNW = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( -1.0, -1.0 ) ) * resolution ) ).xyz;\n vec3 rgbNE = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( 1.0, -1.0 ) ) * resolution ) ).xyz;\n vec3 rgbSW = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( -1.0, 1.0 ) ) * resolution ) ).xyz;\n vec3 rgbSE = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( 1.0, 1.0 ) ) * resolution ) ).xyz;\n vec4 rgbaM = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution ) );\n vec3 rgbM = rgbaM.xyz;\n float opacity = rgbaM.w;\n vec3 luma = vec3( 0.299, 0.587, 0.114 );\n float lumaNW = dot( rgbNW, luma );\n float lumaNE = dot( rgbNE, luma );\n float lumaSW = dot( rgbSW, luma );\n float lumaSE = dot( rgbSE, luma );\n float lumaM = dot( rgbM, luma );\n float lumaMin = min( lumaM, min( min( lumaNW, lumaNE ), min( lumaSW, lumaSE ) ) );\n float lumaMax = max( lumaM, max( max( lumaNW, lumaNE) , max( lumaSW, lumaSE ) ) );\n vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n float dirReduce = max( ( lumaNW + lumaNE + lumaSW + lumaSE ) * ( 0.25 * FXAA_REDUCE_MUL ), FXAA_REDUCE_MIN );\n float rcpDirMin = 1.0 / ( min( abs( dir.x ), abs( dir.y ) ) + dirReduce );\n dir = min( vec2( FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max( vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * resolution;\n vec3 rgbA = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * ( 1.0 / 3.0 - 0.5 ) ) ).xyz;\n rgbA += decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * ( 2.0 / 3.0 - 0.5 ) ) ).xyz;\n rgbA *= 0.5;\n vec3 rgbB = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * -0.5 ) ).xyz;\n rgbB += decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * 0.5 ) ).xyz;\n rgbB *= 0.25;\n rgbB += rgbA * 0.5;\n float lumaB = dot( rgbB, luma );\n if ( ( lumaB < lumaMin ) || ( lumaB > lumaMax ) )\n {\n gl_FragColor = vec4( rgbA, opacity );\n }\n else {\n gl_FragColor = vec4( rgbB, opacity );\n }\n}\n@end";!function(e){e.import("@export clay.compositor.coloradjust\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float brightness : 0.0;\nuniform float contrast : 1.0;\nuniform float exposure : 0.0;\nuniform float gamma : 1.0;\nuniform float saturation : 1.0;\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\nvoid main()\n{\n vec4 tex = texture2D( texture, v_Texcoord);\n vec3 color = clamp(tex.rgb + vec3(brightness), 0.0, 1.0);\n color = clamp( (color-vec3(0.5))*contrast+vec3(0.5), 0.0, 1.0);\n color = clamp( color * pow(2.0, exposure), 0.0, 1.0);\n color = clamp( pow(color, vec3(gamma)), 0.0, 1.0);\n float luminance = dot( color, w );\n color = mix(vec3(luminance), color, saturation);\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.brightness\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float brightness : 0.0;\nvoid main()\n{\n vec4 tex = texture2D( texture, v_Texcoord);\n vec3 color = tex.rgb + vec3(brightness);\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.contrast\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float contrast : 1.0;\nvoid main()\n{\n vec4 tex = texture2D( texture, v_Texcoord);\n vec3 color = (tex.rgb-vec3(0.5))*contrast+vec3(0.5);\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.exposure\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float exposure : 0.0;\nvoid main()\n{\n vec4 tex = texture2D(texture, v_Texcoord);\n vec3 color = tex.rgb * pow(2.0, exposure);\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.gamma\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float gamma : 1.0;\nvoid main()\n{\n vec4 tex = texture2D(texture, v_Texcoord);\n vec3 color = pow(tex.rgb, vec3(gamma));\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.saturation\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float saturation : 1.0;\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\nvoid main()\n{\n vec4 tex = texture2D(texture, v_Texcoord);\n vec3 color = tex.rgb;\n float luminance = dot(color, w);\n color = mix(vec3(luminance), color, saturation);\n gl_FragColor = vec4(color, tex.a);\n}\n@end"),e.import(el),e.import("@export clay.compositor.hdr.log_lum\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\n@import clay.util.rgbm\nvoid main()\n{\n vec4 tex = decodeHDR(texture2D(texture, v_Texcoord));\n float luminance = dot(tex.rgb, w);\n luminance = log(luminance + 0.001);\n gl_FragColor = encodeHDR(vec4(vec3(luminance), 1.0));\n}\n@end\n@export clay.compositor.hdr.lum_adaption\nvarying vec2 v_Texcoord;\nuniform sampler2D adaptedLum;\nuniform sampler2D currentLum;\nuniform float frameTime : 0.02;\n@import clay.util.rgbm\nvoid main()\n{\n float fAdaptedLum = decodeHDR(texture2D(adaptedLum, vec2(0.5, 0.5))).r;\n float fCurrentLum = exp(encodeHDR(texture2D(currentLum, vec2(0.5, 0.5))).r);\n fAdaptedLum += (fCurrentLum - fAdaptedLum) * (1.0 - pow(0.98, 30.0 * frameTime));\n gl_FragColor = encodeHDR(vec4(vec3(fAdaptedLum), 1.0));\n}\n@end\n@export clay.compositor.lum\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\nvoid main()\n{\n vec4 tex = texture2D( texture, v_Texcoord );\n float luminance = dot(tex.rgb, w);\n gl_FragColor = vec4(vec3(luminance), 1.0);\n}\n@end"),e.import(tl),e.import("@export clay.compositor.vignette\n#define OUTPUT_ALPHA\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float darkness: 1;\nuniform float offset: 1;\n@import clay.util.rgbm\nvoid main()\n{\n vec4 texel = decodeHDR(texture2D(texture, v_Texcoord));\n gl_FragColor.rgb = texel.rgb;\n vec2 uv = (v_Texcoord - vec2(0.5)) * vec2(offset);\n gl_FragColor = encodeHDR(vec4(mix(texel.rgb, vec3(1.0 - darkness), dot(uv, uv)), texel.a));\n}\n@end"),e.import(rl),e.import(il),e.import(nl),e.import(al),e.import(ol),e.import("@export clay.compositor.lensflare\n#define SAMPLE_NUMBER 8\nuniform sampler2D texture;\nuniform sampler2D lenscolor;\nuniform vec2 textureSize : [512, 512];\nuniform float dispersal : 0.3;\nuniform float haloWidth : 0.4;\nuniform float distortion : 1.0;\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\nvec4 textureDistorted(\n in vec2 texcoord,\n in vec2 direction,\n in vec3 distortion\n) {\n return vec4(\n decodeHDR(texture2D(texture, texcoord + direction * distortion.r)).r,\n decodeHDR(texture2D(texture, texcoord + direction * distortion.g)).g,\n decodeHDR(texture2D(texture, texcoord + direction * distortion.b)).b,\n 1.0\n );\n}\nvoid main()\n{\n vec2 texcoord = -v_Texcoord + vec2(1.0); vec2 textureOffset = 1.0 / textureSize;\n vec2 ghostVec = (vec2(0.5) - texcoord) * dispersal;\n vec2 haloVec = normalize(ghostVec) * haloWidth;\n vec3 distortion = vec3(-textureOffset.x * distortion, 0.0, textureOffset.x * distortion);\n vec4 result = vec4(0.0);\n for (int i = 0; i < SAMPLE_NUMBER; i++)\n {\n vec2 offset = fract(texcoord + ghostVec * float(i));\n float weight = length(vec2(0.5) - offset) / length(vec2(0.5));\n weight = pow(1.0 - weight, 10.0);\n result += textureDistorted(offset, normalize(ghostVec), distortion) * weight;\n }\n result *= texture2D(lenscolor, vec2(length(vec2(0.5) - texcoord)) / length(vec2(0.5)));\n float weight = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5));\n weight = pow(1.0 - weight, 10.0);\n vec2 offset = fract(texcoord + haloVec);\n result += textureDistorted(offset, normalize(ghostVec), distortion) * weight;\n gl_FragColor = result;\n}\n@end"),e.import(sl),e.import(ll)}(Xe);var hl=/^#source\((.*?)\)/;function ul(e,t,r){var i,n,a,o,s=e.type||"filter";if("filter"===s){var l=e.shader.trim(),h=hl.exec(l);if(h?i=Xe.source(h[1].trim()):"#"===l.charAt(0)&&(i=t.shaders[l.substr(1)]),i||(i=l),!i)return}if(e.inputs)for(var u in n={},e.inputs)"string"==typeof e.inputs[u]?n[u]=e.inputs[u]:n[u]={node:e.inputs[u].node,pin:e.inputs[u].pin};if(e.outputs)for(var u in a={},e.outputs){var c=e.outputs[u];a[u]={},null!=c.attachment&&(a[u].attachment=c.attachment),null!=c.keepLastFrame&&(a[u].keepLastFrame=c.keepLastFrame),null!=c.outputLastFrame&&(a[u].outputLastFrame=c.outputLastFrame),c.parameters&&(a[u].parameters=fl(c.parameters))}if(o="scene"===s?new Qs({name:e.name,scene:r.scene,camera:r.camera,outputs:a}):"texture"===s?new Js({name:e.name,outputs:a}):new $s({name:e.name,shader:i,inputs:n,outputs:a})){if(e.parameters)for(var u in e.parameters)"string"==typeof(d=e.parameters[u])?"#"===(d=d.trim()).charAt(0)?d=t.textures[d.substr(1)]:o.on("beforerender",pl(u,ml(d))):"function"==typeof d&&o.on("beforerender",d),o.setParameter(u,d);if(e.defines&&o.pass)for(var u in e.defines){var d=e.defines[u];o.pass.material.define("fragment",u,d)}}return o}function cl(e,t){return e}function dl(e,t){return t}function fl(e){var t={};if(!e)return t;["type","minFilter","magFilter","wrapS","wrapT","flipY","useMipmap"].forEach((function(r){var i=e[r];null!=i&&("string"==typeof i&&(i=wr[i]),t[r]=i)}));var r=e.scale||1;return["width","height"].forEach((function(i){if(null!=e[i]){var n=e[i];"string"==typeof n?(n=n.trim(),t[i]=(a=ml(n),o=(o=r)||1,function(e){var t=e.getDevicePixelRatio(),r=e.getWidth()*o,i=e.getHeight()*o;return a(r,i,t)})):t[i]=n}var a,o})),t.width||(t.width=cl),t.height||(t.height=dl),null!=e.useMipmap&&(t.useMipmap=e.useMipmap),t}function pl(e,t){return function(r){var i=r.getDevicePixelRatio(),n=r.getWidth(),a=r.getHeight(),o=t(n,a,i);this.setParameter(e,o)}}function ml(e){var t=/^expr\((.*)\)$/.exec(e);if(t)try{var r=new Function("width","height","dpr","return "+t[1]);return r(1,1),r}catch(e){throw new Error("Invalid expression.")}}const gl=function(e,t){for(var r=0,i=1/t,n=e;n>0;)r+=i*(n%t),n=Math.floor(n/t),i/=t;return r};function _l(e){for(var t=new Uint8Array(e*e*4),r=0,i=new vt,n=0;n 0.99999) {\n gl_FragColor = vec4(1.0);\n return;\n }\n mat3 kernelBasis;\n#endif\n\n float z = depthTexel.r * 2.0 - 1.0;\n\n vec4 projectedPos = vec4(v_Texcoord * 2.0 - 1.0, z, 1.0);\n vec4 p4 = projectionInv * projectedPos;\n\n vec3 position = p4.xyz / p4.w;\n\n float ao = ssaoEstimator(position, kernelBasis);\n ao = clamp(1.0 - (1.0 - ao) * intensity, 0.0, 1.0);\n gl_FragColor = vec4(vec3(ao), 1.0);\n}\n\n@end\n\n\n@export ecgl.ssao.blur\n#define SHADER_NAME SSAO_BLUR\n\nuniform sampler2D ssaoTexture;\n\n#ifdef NORMALTEX_ENABLED\nuniform sampler2D normalTex;\n#endif\n\nvarying vec2 v_Texcoord;\n\nuniform vec2 textureSize;\nuniform float blurSize : 1.0;\n\nuniform int direction: 0.0;\n\n#ifdef DEPTHTEX_ENABLED\nuniform sampler2D depthTex;\nuniform mat4 projection;\nuniform float depthRange : 0.5;\n\nfloat getLinearDepth(vec2 coord)\n{\n float depth = texture2D(depthTex, coord).r * 2.0 - 1.0;\n return projection[3][2] / (depth * projection[2][3] - projection[2][2]);\n}\n#endif\n\nvoid main()\n{\n float kernel[5];\n kernel[0] = 0.122581;\n kernel[1] = 0.233062;\n kernel[2] = 0.288713;\n kernel[3] = 0.233062;\n kernel[4] = 0.122581;\n\n vec2 off = vec2(0.0);\n if (direction == 0) {\n off[0] = blurSize / textureSize.x;\n }\n else {\n off[1] = blurSize / textureSize.y;\n }\n\n vec2 coord = v_Texcoord;\n\n float sum = 0.0;\n float weightAll = 0.0;\n\n#ifdef NORMALTEX_ENABLED\n vec3 centerNormal = texture2D(normalTex, v_Texcoord).rgb * 2.0 - 1.0;\n#endif\n#if defined(DEPTHTEX_ENABLED)\n float centerDepth = getLinearDepth(v_Texcoord);\n#endif\n\n for (int i = 0; i < 5; i++) {\n vec2 coord = clamp(v_Texcoord + vec2(float(i) - 2.0) * off, vec2(0.0), vec2(1.0));\n\n float w = kernel[i];\n#ifdef NORMALTEX_ENABLED\n vec3 normal = texture2D(normalTex, coord).rgb * 2.0 - 1.0;\n w *= clamp(dot(normal, centerNormal), 0.0, 1.0);\n#endif\n#ifdef DEPTHTEX_ENABLED\n float d = getLinearDepth(coord);\n w *= (1.0 - smoothstep(abs(centerDepth - d) / depthRange, 0.0, 1.0));\n#endif\n\n weightAll += w;\n sum += texture2D(ssaoTexture, coord).r * w;\n }\n\n gl_FragColor = vec4(vec3(sum / weightAll), 1.0);\n}\n\n@end\n"),xl.prototype.setDepthTexture=function(e){this._depthTex=e},xl.prototype.setNormalTexture=function(e){this._normalTex=e,this._ssaoPass.material[e?"enableTexture":"disableTexture"]("normalTex"),this.setKernelSize(this._kernelSize)},xl.prototype.update=function(e,t,r){var i=e.getWidth(),n=e.getHeight(),a=this._ssaoPass,o=this._blurPass;a.setUniform("kernel",this._kernels[r%this._kernels.length]),a.setUniform("depthTex",this._depthTex),null!=this._normalTex&&a.setUniform("normalTex",this._normalTex),a.setUniform("depthTexSize",[this._depthTex.width,this._depthTex.height]);var s=new Ht;Ht.transpose(s,t.worldTransform),a.setUniform("projection",t.projectionMatrix.array),a.setUniform("projectionInv",t.invProjectionMatrix.array),a.setUniform("viewInverseTranspose",s.array);var l=this._ssaoTexture,h=this._blurTexture,u=this._blurTexture2;l.width=i/2,l.height=n/2,h.width=i,h.height=n,u.width=i,u.height=n,this._framebuffer.attach(l),this._framebuffer.bind(e),e.gl.clearColor(1,1,1,1),e.gl.clear(e.gl.COLOR_BUFFER_BIT),a.render(e),o.setUniform("textureSize",[i/2,n/2]),o.setUniform("projection",t.projectionMatrix.array),this._framebuffer.attach(h),o.setUniform("direction",0),o.setUniform("ssaoTexture",l),o.render(e),this._framebuffer.attach(u),o.setUniform("textureSize",[i,n]),o.setUniform("direction",1),o.setUniform("ssaoTexture",h),o.render(e),this._framebuffer.unbind(e);var c=e.clearColor;e.gl.clearColor(c[0],c[1],c[2],c[3])},xl.prototype.getTargetTexture=function(){return this._blurTexture2},xl.prototype.setParameter=function(e,t){"noiseTexSize"===e?this.setNoiseSize(t):"kernelSize"===e?this.setKernelSize(t):"intensity"===e?this._ssaoPass.material.set("intensity",t):this._ssaoPass.setUniform(e,t)},xl.prototype.setKernelSize=function(e){this._kernelSize=e,this._ssaoPass.material.define("fragment","KERNEL_SIZE",e),this._kernels=this._kernels||[];for(var t=0;t<30;t++)this._kernels[t]=yl(e,t*e,!!this._normalTex)},xl.prototype.setNoiseSize=function(e){var t=this._ssaoPass.getUniform("noiseTex");t?(t.data=_l(e),t.width=t.height=e,t.dirty()):(t=vl(e),this._ssaoPass.setUniform("noiseTex",vl(e))),this._ssaoPass.setUniform("noiseTexSize",[e,e])},xl.prototype.dispose=function(e){this._blurTexture.dispose(e),this._ssaoTexture.dispose(e),this._blurTexture2.dispose(e)};const bl=xl;function wl(e){e=e||{},this._ssrPass=new pn({fragment:Xe.source("ecgl.ssr.main"),clearColor:[0,0,0,0]}),this._blurPass1=new pn({fragment:Xe.source("ecgl.ssr.blur"),clearColor:[0,0,0,0]}),this._blurPass2=new pn({fragment:Xe.source("ecgl.ssr.blur"),clearColor:[0,0,0,0]}),this._blendPass=new pn({fragment:Xe.source("clay.compositor.blend")}),this._blendPass.material.disableTexturesAll(),this._blendPass.material.enableTexture(["texture1","texture2"]),this._ssrPass.setUniform("gBufferTexture1",e.normalTexture),this._ssrPass.setUniform("gBufferTexture2",e.depthTexture),this._blurPass1.setUniform("gBufferTexture1",e.normalTexture),this._blurPass1.setUniform("gBufferTexture2",e.depthTexture),this._blurPass2.setUniform("gBufferTexture1",e.normalTexture),this._blurPass2.setUniform("gBufferTexture2",e.depthTexture),this._blurPass2.material.define("fragment","VERTICAL"),this._blurPass2.material.define("fragment","BLEND"),this._ssrTexture=new Dr({type:wr.HALF_FLOAT}),this._texture2=new Dr({type:wr.HALF_FLOAT}),this._texture3=new Dr({type:wr.HALF_FLOAT}),this._prevTexture=new Dr({type:wr.HALF_FLOAT}),this._currentTexture=new Dr({type:wr.HALF_FLOAT}),this._frameBuffer=new zi({depthBuffer:!1}),this._normalDistribution=null,this._totalSamples=256,this._samplePerFrame=4,this._ssrPass.material.define("fragment","SAMPLE_PER_FRAME",this._samplePerFrame),this._ssrPass.material.define("fragment","TOTAL_SAMPLES",this._totalSamples),this._downScale=1}Xe.import("@export ecgl.ssr.main\n\n#define SHADER_NAME SSR\n#define MAX_ITERATION 20;\n#define SAMPLE_PER_FRAME 5;\n#define TOTAL_SAMPLES 128;\n\nuniform sampler2D sourceTexture;\nuniform sampler2D gBufferTexture1;\nuniform sampler2D gBufferTexture2;\nuniform sampler2D gBufferTexture3;\nuniform samplerCube specularCubemap;\nuniform float specularIntensity: 1;\n\nuniform mat4 projection;\nuniform mat4 projectionInv;\nuniform mat4 toViewSpace;\nuniform mat4 toWorldSpace;\n\nuniform float maxRayDistance: 200;\n\nuniform float pixelStride: 16;\nuniform float pixelStrideZCutoff: 50; \nuniform float screenEdgeFadeStart: 0.9; \nuniform float eyeFadeStart : 0.2; uniform float eyeFadeEnd: 0.8; \nuniform float minGlossiness: 0.2; uniform float zThicknessThreshold: 1;\n\nuniform float nearZ;\nuniform vec2 viewportSize : VIEWPORT_SIZE;\n\nuniform float jitterOffset: 0;\n\nvarying vec2 v_Texcoord;\n\n#ifdef DEPTH_DECODE\n@import clay.util.decode_float\n#endif\n\n#ifdef PHYSICALLY_CORRECT\nuniform sampler2D normalDistribution;\nuniform float sampleOffset: 0;\nuniform vec2 normalDistributionSize;\n\nvec3 transformNormal(vec3 H, vec3 N) {\n vec3 upVector = N.y > 0.999 ? vec3(1.0, 0.0, 0.0) : vec3(0.0, 1.0, 0.0);\n vec3 tangentX = normalize(cross(N, upVector));\n vec3 tangentZ = cross(N, tangentX);\n return normalize(tangentX * H.x + N * H.y + tangentZ * H.z);\n}\nvec3 importanceSampleNormalGGX(float i, float roughness, vec3 N) {\n float p = fract((i + sampleOffset) / float(TOTAL_SAMPLES));\n vec3 H = texture2D(normalDistribution,vec2(roughness, p)).rgb;\n return transformNormal(H, N);\n}\nfloat G_Smith(float g, float ndv, float ndl) {\n float roughness = 1.0 - g;\n float k = roughness * roughness / 2.0;\n float G1V = ndv / (ndv * (1.0 - k) + k);\n float G1L = ndl / (ndl * (1.0 - k) + k);\n return G1L * G1V;\n}\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\n#endif\n\nfloat fetchDepth(sampler2D depthTexture, vec2 uv)\n{\n vec4 depthTexel = texture2D(depthTexture, uv);\n return depthTexel.r * 2.0 - 1.0;\n}\n\nfloat linearDepth(float depth)\n{\n if (projection[3][3] == 0.0) {\n return projection[3][2] / (depth * projection[2][3] - projection[2][2]);\n }\n else {\n return (depth - projection[3][2]) / projection[2][2];\n }\n}\n\nbool rayIntersectDepth(float rayZNear, float rayZFar, vec2 hitPixel)\n{\n if (rayZFar > rayZNear)\n {\n float t = rayZFar; rayZFar = rayZNear; rayZNear = t;\n }\n float cameraZ = linearDepth(fetchDepth(gBufferTexture2, hitPixel));\n return rayZFar <= cameraZ && rayZNear >= cameraZ - zThicknessThreshold;\n}\n\n\nbool traceScreenSpaceRay(\n vec3 rayOrigin, vec3 rayDir, float jitter,\n out vec2 hitPixel, out vec3 hitPoint, out float iterationCount\n)\n{\n float rayLength = ((rayOrigin.z + rayDir.z * maxRayDistance) > -nearZ)\n ? (-nearZ - rayOrigin.z) / rayDir.z : maxRayDistance;\n\n vec3 rayEnd = rayOrigin + rayDir * rayLength;\n\n vec4 H0 = projection * vec4(rayOrigin, 1.0);\n vec4 H1 = projection * vec4(rayEnd, 1.0);\n\n float k0 = 1.0 / H0.w, k1 = 1.0 / H1.w;\n\n vec3 Q0 = rayOrigin * k0, Q1 = rayEnd * k1;\n\n vec2 P0 = (H0.xy * k0 * 0.5 + 0.5) * viewportSize;\n vec2 P1 = (H1.xy * k1 * 0.5 + 0.5) * viewportSize;\n\n P1 += dot(P1 - P0, P1 - P0) < 0.0001 ? 0.01 : 0.0;\n vec2 delta = P1 - P0;\n\n bool permute = false;\n if (abs(delta.x) < abs(delta.y)) {\n permute = true;\n delta = delta.yx;\n P0 = P0.yx;\n P1 = P1.yx;\n }\n float stepDir = sign(delta.x);\n float invdx = stepDir / delta.x;\n\n vec3 dQ = (Q1 - Q0) * invdx;\n float dk = (k1 - k0) * invdx;\n\n vec2 dP = vec2(stepDir, delta.y * invdx);\n\n float strideScaler = 1.0 - min(1.0, -rayOrigin.z / pixelStrideZCutoff);\n float pixStride = 1.0 + strideScaler * pixelStride;\n\n dP *= pixStride; dQ *= pixStride; dk *= pixStride;\n\n vec4 pqk = vec4(P0, Q0.z, k0);\n vec4 dPQK = vec4(dP, dQ.z, dk);\n\n pqk += dPQK * jitter;\n float rayZFar = (dPQK.z * 0.5 + pqk.z) / (dPQK.w * 0.5 + pqk.w);\n float rayZNear;\n\n bool intersect = false;\n\n vec2 texelSize = 1.0 / viewportSize;\n\n iterationCount = 0.0;\n\n for (int i = 0; i < MAX_ITERATION; i++)\n {\n pqk += dPQK;\n\n rayZNear = rayZFar;\n rayZFar = (dPQK.z * 0.5 + pqk.z) / (dPQK.w * 0.5 + pqk.w);\n\n hitPixel = permute ? pqk.yx : pqk.xy;\n hitPixel *= texelSize;\n\n intersect = rayIntersectDepth(rayZNear, rayZFar, hitPixel);\n\n iterationCount += 1.0;\n\n dPQK *= 1.2;\n\n if (intersect) {\n break;\n }\n }\n\n Q0.xy += dQ.xy * iterationCount;\n Q0.z = pqk.z;\n hitPoint = Q0 / pqk.w;\n\n return intersect;\n}\n\nfloat calculateAlpha(\n float iterationCount, float reflectivity,\n vec2 hitPixel, vec3 hitPoint, float dist, vec3 rayDir\n)\n{\n float alpha = clamp(reflectivity, 0.0, 1.0);\n alpha *= 1.0 - (iterationCount / float(MAX_ITERATION));\n vec2 hitPixelNDC = hitPixel * 2.0 - 1.0;\n float maxDimension = min(1.0, max(abs(hitPixelNDC.x), abs(hitPixelNDC.y)));\n alpha *= 1.0 - max(0.0, maxDimension - screenEdgeFadeStart) / (1.0 - screenEdgeFadeStart);\n\n float _eyeFadeStart = eyeFadeStart;\n float _eyeFadeEnd = eyeFadeEnd;\n if (_eyeFadeStart > _eyeFadeEnd) {\n float tmp = _eyeFadeEnd;\n _eyeFadeEnd = _eyeFadeStart;\n _eyeFadeStart = tmp;\n }\n\n float eyeDir = clamp(rayDir.z, _eyeFadeStart, _eyeFadeEnd);\n alpha *= 1.0 - (eyeDir - _eyeFadeStart) / (_eyeFadeEnd - _eyeFadeStart);\n\n alpha *= 1.0 - clamp(dist / maxRayDistance, 0.0, 1.0);\n\n return alpha;\n}\n\n@import clay.util.rand\n\n@import clay.util.rgbm\n\nvoid main()\n{\n vec4 normalAndGloss = texture2D(gBufferTexture1, v_Texcoord);\n\n if (dot(normalAndGloss.rgb, vec3(1.0)) == 0.0) {\n discard;\n }\n\n float g = normalAndGloss.a;\n#if !defined(PHYSICALLY_CORRECT)\n if (g <= minGlossiness) {\n discard;\n }\n#endif\n\n float reflectivity = (g - minGlossiness) / (1.0 - minGlossiness);\n\n vec3 N = normalize(normalAndGloss.rgb * 2.0 - 1.0);\n N = normalize((toViewSpace * vec4(N, 0.0)).xyz);\n\n vec4 projectedPos = vec4(v_Texcoord * 2.0 - 1.0, fetchDepth(gBufferTexture2, v_Texcoord), 1.0);\n vec4 pos = projectionInv * projectedPos;\n vec3 rayOrigin = pos.xyz / pos.w;\n vec3 V = -normalize(rayOrigin);\n\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n float iterationCount;\n float jitter = rand(fract(v_Texcoord + jitterOffset));\n\n#ifdef PHYSICALLY_CORRECT\n vec4 color = vec4(vec3(0.0), 1.0);\n vec4 albedoMetalness = texture2D(gBufferTexture3, v_Texcoord);\n vec3 albedo = albedoMetalness.rgb;\n float m = albedoMetalness.a;\n vec3 diffuseColor = albedo * (1.0 - m);\n vec3 spec = mix(vec3(0.04), albedo, m);\n\n float jitter2 = rand(fract(v_Texcoord)) * float(TOTAL_SAMPLES);\n\n for (int i = 0; i < SAMPLE_PER_FRAME; i++) {\n vec3 H = importanceSampleNormalGGX(float(i) + jitter2, 1.0 - g, N);\n vec3 rayDir = normalize(reflect(-V, H));\n#else\n vec3 rayDir = normalize(reflect(-V, N));\n#endif\n vec2 hitPixel;\n vec3 hitPoint;\n\n bool intersect = traceScreenSpaceRay(rayOrigin, rayDir, jitter, hitPixel, hitPoint, iterationCount);\n\n float dist = distance(rayOrigin, hitPoint);\n\n vec3 hitNormal = texture2D(gBufferTexture1, hitPixel).rgb * 2.0 - 1.0;\n hitNormal = normalize((toViewSpace * vec4(hitNormal, 0.0)).xyz);\n#ifdef PHYSICALLY_CORRECT\n float ndl = clamp(dot(N, rayDir), 0.0, 1.0);\n float vdh = clamp(dot(V, H), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n vec3 litTexel = vec3(0.0);\n if (dot(hitNormal, rayDir) < 0.0 && intersect) {\n litTexel = texture2D(sourceTexture, hitPixel).rgb;\n litTexel *= pow(clamp(1.0 - dist / 200.0, 0.0, 1.0), 3.0);\n\n }\n else {\n #ifdef SPECULARCUBEMAP_ENABLED\n vec3 rayDirW = normalize(toWorldSpace * vec4(rayDir, 0.0)).rgb;\n litTexel = RGBMDecode(textureCubeLodEXT(specularCubemap, rayDirW, 0.0), 8.12).rgb * specularIntensity;\n#endif\n }\n color.rgb += ndl * litTexel * (\n F_Schlick(ndl, spec) * G_Smith(g, ndv, ndl) * vdh / (ndh * ndv + 0.001)\n );\n }\n color.rgb /= float(SAMPLE_PER_FRAME);\n#else\n #if !defined(SPECULARCUBEMAP_ENABLED)\n if (dot(hitNormal, rayDir) >= 0.0) {\n discard;\n }\n if (!intersect) {\n discard;\n }\n#endif\n float alpha = clamp(calculateAlpha(iterationCount, reflectivity, hitPixel, hitPoint, dist, rayDir), 0.0, 1.0);\n vec4 color = texture2D(sourceTexture, hitPixel);\n color.rgb *= alpha;\n\n#ifdef SPECULARCUBEMAP_ENABLED\n vec3 rayDirW = normalize(toWorldSpace * vec4(rayDir, 0.0)).rgb;\n alpha = alpha * (intersect ? 1.0 : 0.0);\n float bias = (1.0 -g) * 5.0;\n color.rgb += (1.0 - alpha)\n * RGBMDecode(textureCubeLodEXT(specularCubemap, rayDirW, bias), 8.12).rgb\n * specularIntensity;\n#endif\n\n#endif\n\n gl_FragColor = encodeHDR(color);\n}\n@end\n\n@export ecgl.ssr.blur\n\nuniform sampler2D texture;\nuniform sampler2D gBufferTexture1;\nuniform sampler2D gBufferTexture2;\nuniform mat4 projection;\nuniform float depthRange : 0.05;\n\nvarying vec2 v_Texcoord;\n\nuniform vec2 textureSize;\nuniform float blurSize : 1.0;\n\n#ifdef BLEND\n #ifdef SSAOTEX_ENABLED\nuniform sampler2D ssaoTex;\n #endif\nuniform sampler2D sourceTexture;\n#endif\n\nfloat getLinearDepth(vec2 coord)\n{\n float depth = texture2D(gBufferTexture2, coord).r * 2.0 - 1.0;\n return projection[3][2] / (depth * projection[2][3] - projection[2][2]);\n}\n\n@import clay.util.rgbm\n\n\nvoid main()\n{\n @import clay.compositor.kernel.gaussian_9\n\n vec4 centerNTexel = texture2D(gBufferTexture1, v_Texcoord);\n float g = centerNTexel.a;\n float maxBlurSize = clamp(1.0 - g, 0.0, 1.0) * blurSize;\n#ifdef VERTICAL\n vec2 off = vec2(0.0, maxBlurSize / textureSize.y);\n#else\n vec2 off = vec2(maxBlurSize / textureSize.x, 0.0);\n#endif\n\n vec2 coord = v_Texcoord;\n\n vec4 sum = vec4(0.0);\n float weightAll = 0.0;\n\n vec3 cN = centerNTexel.rgb * 2.0 - 1.0;\n float cD = getLinearDepth(v_Texcoord);\n for (int i = 0; i < 9; i++) {\n vec2 coord = clamp((float(i) - 4.0) * off + v_Texcoord, vec2(0.0), vec2(1.0));\n float w = gaussianKernel[i]\n * clamp(dot(cN, texture2D(gBufferTexture1, coord).rgb * 2.0 - 1.0), 0.0, 1.0);\n float d = getLinearDepth(coord);\n w *= (1.0 - smoothstep(abs(cD - d) / depthRange, 0.0, 1.0));\n\n weightAll += w;\n sum += decodeHDR(texture2D(texture, coord)) * w;\n }\n\n#ifdef BLEND\n float aoFactor = 1.0;\n #ifdef SSAOTEX_ENABLED\n aoFactor = texture2D(ssaoTex, v_Texcoord).r;\n #endif\n gl_FragColor = encodeHDR(\n sum / weightAll * aoFactor + decodeHDR(texture2D(sourceTexture, v_Texcoord))\n );\n#else\n gl_FragColor = encodeHDR(sum / weightAll);\n#endif\n}\n\n@end"),wl.prototype.setAmbientCubemap=function(e,t){this._ssrPass.material.set("specularCubemap",e),this._ssrPass.material.set("specularIntensity",t);var r=e&&t;this._ssrPass.material[r?"enableTexture":"disableTexture"]("specularCubemap")},wl.prototype.update=function(e,t,r,i){var n=e.getWidth(),a=e.getHeight(),o=this._ssrTexture,s=this._texture2,l=this._texture3;o.width=this._prevTexture.width=this._currentTexture.width=n/this._downScale,o.height=this._prevTexture.height=this._currentTexture.height=a/this._downScale,s.width=l.width=n,s.height=l.height=a;var h=this._frameBuffer,u=this._ssrPass,c=this._blurPass1,d=this._blurPass2,f=this._blendPass,p=new Ht,m=new Ht;Ht.transpose(p,t.worldTransform),Ht.transpose(m,t.viewMatrix),u.setUniform("sourceTexture",r),u.setUniform("projection",t.projectionMatrix.array),u.setUniform("projectionInv",t.invProjectionMatrix.array),u.setUniform("toViewSpace",p.array),u.setUniform("toWorldSpace",m.array),u.setUniform("nearZ",t.near);var g=i/this._totalSamples*this._samplePerFrame;if(u.setUniform("jitterOffset",g),u.setUniform("sampleOffset",i*this._samplePerFrame),c.setUniform("textureSize",[o.width,o.height]),d.setUniform("textureSize",[n,a]),d.setUniform("sourceTexture",r),c.setUniform("projection",t.projectionMatrix.array),d.setUniform("projection",t.projectionMatrix.array),h.attach(o),h.bind(e),u.render(e),this._physicallyCorrect&&(h.attach(this._currentTexture),f.setUniform("texture1",this._prevTexture),f.setUniform("texture2",o),f.material.set({weight1:i>=1?.95:0,weight2:i>=1?.05:1}),f.render(e)),h.attach(s),c.setUniform("texture",this._physicallyCorrect?this._currentTexture:o),c.render(e),h.attach(l),d.setUniform("texture",s),d.render(e),h.unbind(e),this._physicallyCorrect){var _=this._prevTexture;this._prevTexture=this._currentTexture,this._currentTexture=_}},wl.prototype.getTargetTexture=function(){return this._texture3},wl.prototype.setParameter=function(e,t){"maxIteration"===e?this._ssrPass.material.define("fragment","MAX_ITERATION",t):this._ssrPass.setUniform(e,t)},wl.prototype.setPhysicallyCorrect=function(e){e?(this._normalDistribution||(this._normalDistribution=_n.generateNormalDistribution(64,this._totalSamples)),this._ssrPass.material.define("fragment","PHYSICALLY_CORRECT"),this._ssrPass.material.set("normalDistribution",this._normalDistribution),this._ssrPass.material.set("normalDistributionSize",[64,this._totalSamples])):this._ssrPass.material.undefine("fragment","PHYSICALLY_CORRECT"),this._physicallyCorrect=e},wl.prototype.setSSAOTexture=function(e){var t=this._blurPass2;e?(t.material.enableTexture("ssaoTex"),t.material.set("ssaoTex",e)):t.material.disableTexture("ssaoTex")},wl.prototype.isFinished=function(e){return!this._physicallyCorrect||e>this._totalSamples/this._samplePerFrame},wl.prototype.dispose=function(e){this._ssrTexture.dispose(e),this._texture2.dispose(e),this._texture3.dispose(e),this._prevTexture.dispose(e),this._currentTexture.dispose(e),this._frameBuffer.dispose(e)};const Tl=wl,Sl=[0,0,-.321585265978,-.154972575841,.458126042375,.188473391593,.842080129861,.527766490688,.147304551086,-.659453822776,-.331943915203,-.940619700594,.0479226680259,.54812163202,.701581552186,-.709825561388,-.295436780218,.940589268233,-.901489676764,.237713156085,.973570876096,-.109899459384,-.866792314779,-.451805525005,.330975007087,.800048655954,-.344275183665,.381779221166,-.386139432542,-.437418421534,-.576478634965,-.0148463392551,.385798197415,-.262426961053,-.666302061145,.682427250835,-.628010632582,-.732836215494,.10163141741,-.987658134403,.711995289051,-.320024291314,.0296005138058,.950296523438,.0130612307608,-.351024443122,-.879596633704,-.10478487883,.435712737232,.504254490347,.779203817497,.206477676721,.388264289969,-.896736162545,-.153106280781,-.629203242522,-.245517550697,.657969239148,.126830499058,.26862328493,-.634888119007,-.302301223431,.617074219636,.779817204925];function Ml(e,t,r,i,n){var a=e.gl;t.setUniform(a,"1i",r,n),a.activeTexture(a.TEXTURE0+n),i.isRenderable()?i.bind(e):i.unbind(e)}function Al(e,t,r,i,n){var a,o,s,l,h=e.gl;return function(n,u,c){if(!l||l.material!==n.material){var d=n.material,f=n.__program,p=d.get("roughness");null==p&&(p=1);var m=d.get("normalMap")||t,g=d.get("roughnessMap"),_=d.get("bumpMap"),v=d.get("uvRepeat"),y=d.get("uvOffset"),x=d.get("detailUvRepeat"),b=d.get("detailUvOffset"),w=!!_&&d.isTextureEnabled("bumpMap"),T=!!g&&d.isTextureEnabled("roughnessMap"),S=d.isDefined("fragment","DOUBLE_SIDED");_=_||r,g=g||i,c!==u?(u.set("normalMap",m),u.set("bumpMap",_),u.set("roughnessMap",g),u.set("useBumpMap",w),u.set("useRoughnessMap",T),u.set("doubleSide",S),null!=v&&u.set("uvRepeat",v),null!=y&&u.set("uvOffset",y),null!=x&&u.set("detailUvRepeat",x),null!=b&&u.set("detailUvOffset",b),u.set("roughness",p)):(f.setUniform(h,"1f","roughness",p),a!==m&&Ml(e,f,"normalMap",m,0),o!==_&&_&&Ml(e,f,"bumpMap",_,1),s!==g&&g&&Ml(e,f,"roughnessMap",g,2),null!=v&&f.setUniform(h,"2f","uvRepeat",v),null!=y&&f.setUniform(h,"2f","uvOffset",y),null!=x&&f.setUniform(h,"2f","detailUvRepeat",x),null!=b&&f.setUniform(h,"2f","detailUvOffset",b),f.setUniform(h,"1i","useBumpMap",+w),f.setUniform(h,"1i","useRoughnessMap",+T),f.setUniform(h,"1i","doubleSide",+S)),a=m,o=_,s=g,l=n}}}function El(e){e=e||{},this._depthTex=new Dr({format:wr.DEPTH_COMPONENT,type:wr.UNSIGNED_INT}),this._normalTex=new Dr({type:wr.HALF_FLOAT}),this._framebuffer=new zi,this._framebuffer.attach(this._normalTex),this._framebuffer.attach(this._depthTex,zi.DEPTH_ATTACHMENT),this._normalMaterial=new le({shader:new Xe(Xe.source("ecgl.normal.vertex"),Xe.source("ecgl.normal.fragment"))}),this._normalMaterial.enableTexture(["normalMap","bumpMap","roughnessMap"]),this._defaultNormalMap=an.createBlank("#000"),this._defaultBumpMap=an.createBlank("#000"),this._defaultRoughessMap=an.createBlank("#000"),this._debugPass=new pn({fragment:Xe.source("clay.compositor.output")}),this._debugPass.setUniform("texture",this._normalTex),this._debugPass.material.undefine("fragment","OUTPUT_ALPHA")}Xe.import("@export ecgl.normal.vertex\n\n@import ecgl.common.transformUniforms\n\n@import ecgl.common.uv.header\n\n@import ecgl.common.attributes\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\n@import ecgl.common.normalMap.vertexHeader\n\n@import ecgl.common.vertexAnimation.header\n\nvoid main()\n{\n\n @import ecgl.common.vertexAnimation.main\n\n @import ecgl.common.uv.main\n\n v_Normal = normalize((worldInverseTranspose * vec4(normal, 0.0)).xyz);\n v_WorldPosition = (world * vec4(pos, 1.0)).xyz;\n\n @import ecgl.common.normalMap.vertexMain\n\n gl_Position = worldViewProjection * vec4(pos, 1.0);\n\n}\n\n\n@end\n\n\n@export ecgl.normal.fragment\n\n#define ROUGHNESS_CHANEL 0\n\nuniform bool useBumpMap;\nuniform bool useRoughnessMap;\nuniform bool doubleSide;\nuniform float roughness;\n\n@import ecgl.common.uv.fragmentHeader\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nuniform mat4 viewInverse : VIEWINVERSE;\n\n@import ecgl.common.normalMap.fragmentHeader\n@import ecgl.common.bumpMap.header\n\nuniform sampler2D roughnessMap;\n\nvoid main()\n{\n vec3 N = v_Normal;\n \n bool flipNormal = false;\n if (doubleSide) {\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n\n if (dot(N, V) < 0.0) {\n flipNormal = true;\n }\n }\n\n @import ecgl.common.normalMap.fragmentMain\n\n if (useBumpMap) {\n N = bumpNormal(v_WorldPosition, v_Normal, N);\n }\n\n float g = 1.0 - roughness;\n\n if (useRoughnessMap) {\n float g2 = 1.0 - texture2D(roughnessMap, v_DetailTexcoord)[ROUGHNESS_CHANEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n }\n\n if (flipNormal) {\n N = -N;\n }\n\n gl_FragColor.rgb = (N.xyz + 1.0) * 0.5;\n gl_FragColor.a = g;\n}\n@end"),El.prototype.getDepthTexture=function(){return this._depthTex},El.prototype.getNormalTexture=function(){return this._normalTex},El.prototype.update=function(e,t,r){var i=e.getWidth(),n=e.getHeight(),a=this._depthTex,o=this._normalTex,s=this._normalMaterial;a.width=i,a.height=n,o.width=i,o.height=n;var l=t.getRenderList(r).opaque;this._framebuffer.bind(e),e.gl.clearColor(0,0,0,0),e.gl.clear(e.gl.COLOR_BUFFER_BIT|e.gl.DEPTH_BUFFER_BIT),e.gl.disable(e.gl.BLEND),e.renderPass(l,r,{getMaterial:function(){return s},ifRender:function(e){return e.renderNormal},beforeRender:Al(e,this._defaultNormalMap,this._defaultBumpMap,this._defaultRoughessMap,this._normalMaterial),sort:e.opaqueSortCompare}),this._framebuffer.unbind(e)},El.prototype.renderDebug=function(e){this._debugPass.render(e)},El.prototype.dispose=function(e){this._depthTex.dispose(e),this._normalTex.dispose(e)};const Cl=El;function Dl(e){e=e||{},this._edgePass=new pn({fragment:Xe.source("ecgl.edge")}),this._edgePass.setUniform("normalTexture",e.normalTexture),this._edgePass.setUniform("depthTexture",e.depthTexture),this._targetTexture=new Dr({type:wr.HALF_FLOAT}),this._frameBuffer=new zi,this._frameBuffer.attach(this._targetTexture)}Dl.prototype.update=function(e,t,r,i){var n=e.getWidth(),a=e.getHeight(),o=this._targetTexture;o.width=n,o.height=a;var s=this._frameBuffer;s.bind(e),this._edgePass.setUniform("projectionInv",t.invProjectionMatrix.array),this._edgePass.setUniform("textureSize",[n,a]),this._edgePass.setUniform("texture",r),this._edgePass.render(e),s.unbind(e)},Dl.prototype.getTargetTexture=function(){return this._targetTexture},Dl.prototype.setParameter=function(e,t){this._edgePass.setUniform(e,t)},Dl.prototype.dispose=function(e){this._targetTexture.dispose(e),this._frameBuffer.dispose(e)};const Ll=Dl,Pl={type:"compositor",nodes:[{name:"source",type:"texture",outputs:{color:{}}},{name:"source_half",shader:"#source(clay.compositor.downsample)",inputs:{texture:"source"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 2)",height:"expr(height * 1.0 / 2)",type:"HALF_FLOAT"}}},parameters:{textureSize:"expr( [width * 1.0, height * 1.0] )"}},{name:"bright",shader:"#source(clay.compositor.bright)",inputs:{texture:"source_half"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 2)",height:"expr(height * 1.0 / 2)",type:"HALF_FLOAT"}}},parameters:{threshold:2,scale:4,textureSize:"expr([width * 1.0 / 2, height / 2])"}},{name:"bright_downsample_4",shader:"#source(clay.compositor.downsample)",inputs:{texture:"bright"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 4)",height:"expr(height * 1.0 / 4)",type:"HALF_FLOAT"}}},parameters:{textureSize:"expr( [width * 1.0 / 2, height / 2] )"}},{name:"bright_downsample_8",shader:"#source(clay.compositor.downsample)",inputs:{texture:"bright_downsample_4"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 8)",height:"expr(height * 1.0 / 8)",type:"HALF_FLOAT"}}},parameters:{textureSize:"expr( [width * 1.0 / 4, height / 4] )"}},{name:"bright_downsample_16",shader:"#source(clay.compositor.downsample)",inputs:{texture:"bright_downsample_8"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 16)",height:"expr(height * 1.0 / 16)",type:"HALF_FLOAT"}}},parameters:{textureSize:"expr( [width * 1.0 / 8, height / 8] )"}},{name:"bright_downsample_32",shader:"#source(clay.compositor.downsample)",inputs:{texture:"bright_downsample_16"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 32)",height:"expr(height * 1.0 / 32)",type:"HALF_FLOAT"}}},parameters:{textureSize:"expr( [width * 1.0 / 16, height / 16] )"}},{name:"bright_upsample_16_blur_h",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_downsample_32"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 16)",height:"expr(height * 1.0 / 16)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:0,textureSize:"expr( [width * 1.0 / 32, height / 32] )"}},{name:"bright_upsample_16_blur_v",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_upsample_16_blur_h"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 16)",height:"expr(height * 1.0 / 16)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:1,textureSize:"expr( [width * 1.0 / 16, height * 1.0 / 16] )"}},{name:"bright_upsample_8_blur_h",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_downsample_16"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 8)",height:"expr(height * 1.0 / 8)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:0,textureSize:"expr( [width * 1.0 / 16, height * 1.0 / 16] )"}},{name:"bright_upsample_8_blur_v",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_upsample_8_blur_h"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 8)",height:"expr(height * 1.0 / 8)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:1,textureSize:"expr( [width * 1.0 / 8, height * 1.0 / 8] )"}},{name:"bright_upsample_8_blend",shader:"#source(clay.compositor.blend)",inputs:{texture1:"bright_upsample_8_blur_v",texture2:"bright_upsample_16_blur_v"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 8)",height:"expr(height * 1.0 / 8)",type:"HALF_FLOAT"}}},parameters:{weight1:.3,weight2:.7}},{name:"bright_upsample_4_blur_h",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_downsample_8"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 4)",height:"expr(height * 1.0 / 4)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:0,textureSize:"expr( [width * 1.0 / 8, height * 1.0 / 8] )"}},{name:"bright_upsample_4_blur_v",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_upsample_4_blur_h"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 4)",height:"expr(height * 1.0 / 4)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:1,textureSize:"expr( [width * 1.0 / 4, height * 1.0 / 4] )"}},{name:"bright_upsample_4_blend",shader:"#source(clay.compositor.blend)",inputs:{texture1:"bright_upsample_4_blur_v",texture2:"bright_upsample_8_blend"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 4)",height:"expr(height * 1.0 / 4)",type:"HALF_FLOAT"}}},parameters:{weight1:.3,weight2:.7}},{name:"bright_upsample_2_blur_h",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_downsample_4"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 2)",height:"expr(height * 1.0 / 2)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:0,textureSize:"expr( [width * 1.0 / 4, height * 1.0 / 4] )"}},{name:"bright_upsample_2_blur_v",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_upsample_2_blur_h"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 2)",height:"expr(height * 1.0 / 2)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:1,textureSize:"expr( [width * 1.0 / 2, height * 1.0 / 2] )"}},{name:"bright_upsample_2_blend",shader:"#source(clay.compositor.blend)",inputs:{texture1:"bright_upsample_2_blur_v",texture2:"bright_upsample_4_blend"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 2)",height:"expr(height * 1.0 / 2)",type:"HALF_FLOAT"}}},parameters:{weight1:.3,weight2:.7}},{name:"bright_upsample_full_blur_h",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright"},outputs:{color:{parameters:{width:"expr(width * 1.0)",height:"expr(height * 1.0)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:0,textureSize:"expr( [width * 1.0 / 2, height * 1.0 / 2] )"}},{name:"bright_upsample_full_blur_v",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_upsample_full_blur_h"},outputs:{color:{parameters:{width:"expr(width * 1.0)",height:"expr(height * 1.0)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:1,textureSize:"expr( [width * 1.0, height * 1.0] )"}},{name:"bloom_composite",shader:"#source(clay.compositor.blend)",inputs:{texture1:"bright_upsample_full_blur_v",texture2:"bright_upsample_2_blend"},outputs:{color:{parameters:{width:"expr(width * 1.0)",height:"expr(height * 1.0)",type:"HALF_FLOAT"}}},parameters:{weight1:.3,weight2:.7}},{name:"coc",shader:"#source(ecgl.dof.coc)",outputs:{color:{parameters:{minFilter:"NEAREST",magFilter:"NEAREST",width:"expr(width * 1.0)",height:"expr(height * 1.0)"}}},parameters:{focalDist:50,focalRange:30}},{name:"dof_far_blur",shader:"#source(ecgl.dof.diskBlur)",inputs:{texture:"source",coc:"coc"},outputs:{color:{parameters:{width:"expr(width * 1.0)",height:"expr(height * 1.0)",type:"HALF_FLOAT"}}},parameters:{textureSize:"expr( [width * 1.0, height * 1.0] )"}},{name:"dof_near_blur",shader:"#source(ecgl.dof.diskBlur)",inputs:{texture:"source",coc:"coc"},outputs:{color:{parameters:{width:"expr(width * 1.0)",height:"expr(height * 1.0)",type:"HALF_FLOAT"}}},parameters:{textureSize:"expr( [width * 1.0, height * 1.0] )"},defines:{BLUR_NEARFIELD:null}},{name:"dof_coc_blur",shader:"#source(ecgl.dof.diskBlur)",inputs:{texture:"coc"},outputs:{color:{parameters:{minFilter:"NEAREST",magFilter:"NEAREST",width:"expr(width * 1.0)",height:"expr(height * 1.0)"}}},parameters:{textureSize:"expr( [width * 1.0, height * 1.0] )"},defines:{BLUR_COC:null}},{name:"dof_composite",shader:"#source(ecgl.dof.composite)",inputs:{original:"source",blurred:"dof_far_blur",nearfield:"dof_near_blur",coc:"coc",nearcoc:"dof_coc_blur"},outputs:{color:{parameters:{width:"expr(width * 1.0)",height:"expr(height * 1.0)",type:"HALF_FLOAT"}}}},{name:"composite",shader:"#source(clay.compositor.hdr.composite)",inputs:{texture:"source",bloom:"bloom_composite"},outputs:{color:{parameters:{width:"expr(width * 1.0)",height:"expr(height * 1.0)"}}},defines:{}},{name:"FXAA",shader:"#source(clay.compositor.fxaa)",inputs:{texture:"composite"}}]};function Ol(e,t){return{color:{parameters:{width:e,height:t}}}}Xe.import(el),Xe.import(tl),Xe.import(rl),Xe.import(il),Xe.import(nl),Xe.import(al),Xe.import(ol),Xe.import(sl),Xe.import(ll),Xe.import("@export ecgl.dof.coc\n\nuniform sampler2D depth;\n\nuniform float zNear: 0.1;\nuniform float zFar: 2000;\n\nuniform float focalDistance: 3;\nuniform float focalRange: 1;\nuniform float focalLength: 30;\nuniform float fstop: 2.8;\n\nvarying vec2 v_Texcoord;\n\n@import clay.util.encode_float\n\nvoid main()\n{\n float z = texture2D(depth, v_Texcoord).r * 2.0 - 1.0;\n\n float dist = 2.0 * zNear * zFar / (zFar + zNear - z * (zFar - zNear));\n\n float aperture = focalLength / fstop;\n\n float coc;\n\n float uppper = focalDistance + focalRange;\n float lower = focalDistance - focalRange;\n if (dist <= uppper && dist >= lower) {\n coc = 0.5;\n }\n else {\n float focalAdjusted = dist > uppper ? uppper : lower;\n\n coc = abs(aperture * (focalLength * (dist - focalAdjusted)) / (dist * (focalAdjusted - focalLength)));\n coc = clamp(coc, 0.0, 2.0) / 2.00001;\n\n if (dist < lower) {\n coc = -coc;\n }\n coc = coc * 0.5 + 0.5;\n }\n\n gl_FragColor = encodeFloat(coc);\n}\n@end\n\n\n@export ecgl.dof.composite\n\n#define DEBUG 0\n\nuniform sampler2D original;\nuniform sampler2D blurred;\nuniform sampler2D nearfield;\nuniform sampler2D coc;\nuniform sampler2D nearcoc;\nvarying vec2 v_Texcoord;\n\n@import clay.util.rgbm\n@import clay.util.float\n\nvoid main()\n{\n vec4 blurredColor = texture2D(blurred, v_Texcoord);\n vec4 originalColor = texture2D(original, v_Texcoord);\n\n float fCoc = decodeFloat(texture2D(coc, v_Texcoord));\n\n fCoc = abs(fCoc * 2.0 - 1.0);\n\n float weight = smoothstep(0.0, 1.0, fCoc);\n \n#ifdef NEARFIELD_ENABLED\n vec4 nearfieldColor = texture2D(nearfield, v_Texcoord);\n float fNearCoc = decodeFloat(texture2D(nearcoc, v_Texcoord));\n fNearCoc = abs(fNearCoc * 2.0 - 1.0);\n\n gl_FragColor = encodeHDR(\n mix(\n nearfieldColor, mix(originalColor, blurredColor, weight),\n pow(1.0 - fNearCoc, 4.0)\n )\n );\n#else\n gl_FragColor = encodeHDR(mix(originalColor, blurredColor, weight));\n#endif\n\n}\n\n@end\n\n\n\n@export ecgl.dof.diskBlur\n\n#define POISSON_KERNEL_SIZE 16;\n\nuniform sampler2D texture;\nuniform sampler2D coc;\nvarying vec2 v_Texcoord;\n\nuniform float blurRadius : 10.0;\nuniform vec2 textureSize : [512.0, 512.0];\n\nuniform vec2 poissonKernel[POISSON_KERNEL_SIZE];\n\nuniform float percent;\n\nfloat nrand(const in vec2 n) {\n return fract(sin(dot(n.xy ,vec2(12.9898,78.233))) * 43758.5453);\n}\n\n@import clay.util.rgbm\n@import clay.util.float\n\n\nvoid main()\n{\n vec2 offset = blurRadius / textureSize;\n\n float rnd = 6.28318 * nrand(v_Texcoord + 0.07 * percent );\n float cosa = cos(rnd);\n float sina = sin(rnd);\n vec4 basis = vec4(cosa, -sina, sina, cosa);\n\n#if !defined(BLUR_NEARFIELD) && !defined(BLUR_COC)\n offset *= abs(decodeFloat(texture2D(coc, v_Texcoord)) * 2.0 - 1.0);\n#endif\n\n#ifdef BLUR_COC\n float cocSum = 0.0;\n#else\n vec4 color = vec4(0.0);\n#endif\n\n\n float weightSum = 0.0;\n\n for (int i = 0; i < POISSON_KERNEL_SIZE; i++) {\n vec2 ofs = poissonKernel[i];\n\n ofs = vec2(dot(ofs, basis.xy), dot(ofs, basis.zw));\n\n vec2 uv = v_Texcoord + ofs * offset;\n vec4 texel = texture2D(texture, uv);\n\n float w = 1.0;\n#ifdef BLUR_COC\n float fCoc = decodeFloat(texel) * 2.0 - 1.0;\n cocSum += clamp(fCoc, -1.0, 0.0) * w;\n#else\n texel = texel;\n #if !defined(BLUR_NEARFIELD)\n float fCoc = decodeFloat(texture2D(coc, uv)) * 2.0 - 1.0;\n w *= abs(fCoc);\n #endif\n texel.rgb *= texel.a;\n color += texel * w;\n#endif\n\n weightSum += w;\n }\n\n#ifdef BLUR_COC\n gl_FragColor = encodeFloat(clamp(cocSum / weightSum, -1.0, 0.0) * 0.5 + 0.5);\n#else\n color /= weightSum;\n color.rgb /= (color.a + 0.0001);\n gl_FragColor = color;\n#endif\n}\n\n@end"),Xe.import("@export ecgl.edge\n\nuniform sampler2D texture;\n\nuniform sampler2D normalTexture;\nuniform sampler2D depthTexture;\n\nuniform mat4 projectionInv;\n\nuniform vec2 textureSize;\n\nuniform vec4 edgeColor: [0,0,0,0.8];\n\nvarying vec2 v_Texcoord;\n\nvec3 packColor(vec2 coord) {\n float z = texture2D(depthTexture, coord).r * 2.0 - 1.0;\n vec4 p = vec4(v_Texcoord * 2.0 - 1.0, z, 1.0);\n vec4 p4 = projectionInv * p;\n\n return vec3(\n texture2D(normalTexture, coord).rg,\n -p4.z / p4.w / 5.0\n );\n}\n\nvoid main() {\n vec2 cc = v_Texcoord;\n vec3 center = packColor(cc);\n\n float size = clamp(1.0 - (center.z - 10.0) / 100.0, 0.0, 1.0) * 0.5;\n float dx = size / textureSize.x;\n float dy = size / textureSize.y;\n\n vec2 coord;\n vec3 topLeft = packColor(cc+vec2(-dx, -dy));\n vec3 top = packColor(cc+vec2(0.0, -dy));\n vec3 topRight = packColor(cc+vec2(dx, -dy));\n vec3 left = packColor(cc+vec2(-dx, 0.0));\n vec3 right = packColor(cc+vec2(dx, 0.0));\n vec3 bottomLeft = packColor(cc+vec2(-dx, dy));\n vec3 bottom = packColor(cc+vec2(0.0, dy));\n vec3 bottomRight = packColor(cc+vec2(dx, dy));\n\n vec3 v = -topLeft-2.0*top-topRight+bottomLeft+2.0*bottom+bottomRight;\n vec3 h = -bottomLeft-2.0*left-topLeft+bottomRight+2.0*right+topRight;\n\n float edge = sqrt(dot(h, h) + dot(v, v));\n\n edge = smoothstep(0.8, 1.0, edge);\n\n gl_FragColor = mix(texture2D(texture, v_Texcoord), vec4(edgeColor.rgb, 1.0), edgeColor.a * edge);\n}\n@end");var Nl=["composite","FXAA"];function Il(){this._width,this._height,this._dpr,this._sourceTexture=new Dr({type:wr.HALF_FLOAT}),this._depthTexture=new Dr({format:wr.DEPTH_COMPONENT,type:wr.UNSIGNED_INT}),this._framebuffer=new zi,this._framebuffer.attach(this._sourceTexture),this._framebuffer.attach(this._depthTexture,zi.DEPTH_ATTACHMENT),this._normalPass=new Cl,this._compositor=function(e,t){var r=new Ks;t=t||{};var i={textures:{},parameters:{}};for(var n in e.parameters){var a=e.parameters[n];i.parameters[n]=fl(a)}return function(e,t,r,i){if(e.textures){var n={},a=0,o=!1,s=r.textureRootPath;f.each(e.textures,(function(e,t){var r,l=e.path,h=fl(e.parameters);if(Array.isArray(l)&&6===l.length)s&&(l=l.map((function(e){return f.relative2absolute(e,s)}))),r=new Ai(h);else{if("string"!=typeof l)return;s&&(l=f.relative2absolute(l,s)),r=new Dr(h)}r.load(l),a++,r.once("success",(function(){n[t]=r,0==--a&&(i(n),o=!0)}))})),0!==a||o||i(n)}else i({})}(e,0,t,(function(n){i.textures=n,function(n,a){for(var o=0;o=this._haltonSequence.length},render:function(e,t,r){var i=this._blendPass;0===this._frame?(i.setUniform("weight1",0),i.setUniform("weight2",1)):(i.setUniform("weight1",.9),i.setUniform("weight2",.1)),i.setUniform("texture1",this._prevFrameTex),i.setUniform("texture2",t||this._sourceTex),this._blendFb.attach(this._outputTex),this._blendFb.bind(e),i.render(e),this._blendFb.unbind(e),r||(this._outputPass.setUniform("texture",this._outputTex),this._outputPass.render(e));var n=this._prevFrameTex;this._prevFrameTex=this._outputTex,this._outputTex=n,this._frame++},dispose:function(e){this._sourceFb.dispose(e),this._blendFb.dispose(e),this._prevFrameTex.dispose(e),this._outputTex.dispose(e),this._sourceTex.dispose(e),this._outputPass.dispose(e),this._blendPass.dispose(e)}};const Bl=Fl;function zl(e){e=e||"perspective",this.layer=null,this.scene=new vi,this.rootNode=this.scene,this.viewport={x:0,y:0,width:0,height:0},this.setProjection(e),this._compositor=new Rl,this._temporalSS=new Bl,this._shadowMapPass=new qs;for(var t=[],r=0,i=0;i<30;i++){for(var n=[],a=0;a<6;a++)n.push(4*gl(r,2)-2),n.push(4*gl(r,3)-2),r++;t.push(n)}this._pcfKernels=t,this.scene.on("beforerender",(function(e,t,r){this.needsTemporalSS()&&this._temporalSS.jitterProjection(e,r)}),this)}zl.prototype.setProjection=function(e){var t=this.camera;t&&t.update(),"perspective"===e?this.camera instanceof Ei||(this.camera=new Ei,t&&this.camera.setLocalTransform(t.localTransform)):this.camera instanceof un||(this.camera=new un,t&&this.camera.setLocalTransform(t.localTransform)),this.camera.near=.1,this.camera.far=2e3},zl.prototype.setViewport=function(e,t,r,i,n){this.camera instanceof Ei&&(this.camera.aspect=r/i),n=n||1,this.viewport.x=e,this.viewport.y=t,this.viewport.width=r,this.viewport.height=i,this.viewport.devicePixelRatio=n,this._compositor.resize(r*n,i*n),this._temporalSS.resize(r*n,i*n)},zl.prototype.containPoint=function(e,t){var r=this.viewport;return t=this.layer.renderer.getHeight()-t,e>=r.x&&t>=r.y&&e<=r.x+r.width&&t<=r.y+r.height};var Gl=new _e;zl.prototype.castRay=function(e,t,r){var i=this.layer.renderer,n=i.viewport;return i.viewport=this.viewport,i.screenToNDC(e,t,Gl),this.camera.castRay(Gl,r),i.viewport=n,r},zl.prototype.prepareRender=function(){this.scene.update(),this.camera.update(),this.scene.updateLights();var e=this.scene.updateRenderList(this.camera);this._needsSortProgressively=!1;for(var t=0;t30},zl.prototype._doRender=function(e,t,r){var i=this.scene,n=this.camera;r=r||0,this._updateTransparent(e,i,n,r),t||(this._shadowMapPass.kernelPCF=this._pcfKernels[0],this._shadowMapPass.render(e,i,n,!0)),this._updateShadowPCFKernel(r);var a,o=e.clearColor;e.gl.clearColor(o[0],o[1],o[2],o[3]),this._enablePostEffect&&(this.needsTemporalSS()&&this._temporalSS.jitterProjection(e,n),this._compositor.updateNormal(e,i,n,this._temporalSS.getFrame())),this._updateSSAO(e,i,n,this._temporalSS.getFrame()),this._enablePostEffect?((a=this._compositor.getSourceFrameBuffer()).bind(e),e.gl.clear(e.gl.DEPTH_BUFFER_BIT|e.gl.COLOR_BUFFER_BIT),e.render(i,n,!0,!0),a.unbind(e),this.needsTemporalSS()&&t?(this._compositor.composite(e,i,n,this._temporalSS.getSourceFrameBuffer(),this._temporalSS.getFrame()),e.setViewport(this.viewport),this._temporalSS.render(e)):(e.setViewport(this.viewport),this._compositor.composite(e,i,n,null,0))):this.needsTemporalSS()&&t?((a=this._temporalSS.getSourceFrameBuffer()).bind(e),e.saveClear(),e.clearBit=e.gl.DEPTH_BUFFER_BIT|e.gl.COLOR_BUFFER_BIT,e.render(i,n,!0,!0),e.restoreClear(),a.unbind(e),e.setViewport(this.viewport),this._temporalSS.render(e)):(e.setViewport(this.viewport),e.render(i,n,!0,!0))},zl.prototype._updateTransparent=function(e,t,r,i){for(var n=new vt,a=new Ht,o=r.getWorldPosition(),s=t.getRenderList(r).transparent,l=0;lthis.camera.far||e80*r){i=a=e[0],n=o=e[1];for(var p=r;pa&&(a=s),l>o&&(o=l);h=Math.max(a-i,o-n)}return uh(d,f,r,i,n,h),f}function lh(e,t,r,i,n){var a,o;if(n===Dh(e,t,r,i)>0)for(a=t;a=t;a-=i)o=Ah(a,e[a],e[a+1],o);return o&&wh(o,o.next)&&(Eh(o),o=o.next),o}function hh(e,t){if(!e)return e;t||(t=e);var r,i=e;do{if(r=!1,i.steiner||!wh(i,i.next)&&0!==bh(i.prev,i,i.next))i=i.next;else{if(Eh(i),(i=t=i.prev)===i.next)return null;r=!0}}while(r||i!==t);return t}function uh(e,t,r,i,n,a,o){if(e){!o&&a&&function(e,t,r,i){var n=e;do{null===n.z&&(n.z=_h(n.x,n.y,t,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next}while(n!==e);n.prevZ.nextZ=null,n.prevZ=null,function(e){var t,r,i,n,a,o,s,l,h=1;do{for(r=e,e=null,a=null,o=0;r;){for(o++,i=r,s=0,t=0;t0||l>0&&i;)0!==s&&(0===l||!i||r.z<=i.z)?(n=r,r=r.nextZ,s--):(n=i,i=i.nextZ,l--),a?a.nextZ=n:e=n,n.prevZ=a,a=n;r=i}a.nextZ=null,h*=2}while(o>1)}(n)}(e,i,n,a);for(var s,l,h=e;e.prev!==e.next;)if(s=e.prev,l=e.next,a?dh(e,i,n,a):ch(e))t.push(s.i/r),t.push(e.i/r),t.push(l.i/r),Eh(e),e=l.next,h=l.next;else if((e=l)===h){o?1===o?uh(e=fh(e,t,r),t,r,i,n,a,2):2===o&&ph(e,t,r,i,n,a):uh(hh(e),t,r,i,n,a,1);break}}}function ch(e){var t=e.prev,r=e,i=e.next;if(bh(t,r,i)>=0)return!1;for(var n=e.next.next;n!==e.prev;){if(yh(t.x,t.y,r.x,r.y,i.x,i.y,n.x,n.y)&&bh(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function dh(e,t,r,i){var n=e.prev,a=e,o=e.next;if(bh(n,a,o)>=0)return!1;for(var s=n.xa.x?n.x>o.x?n.x:o.x:a.x>o.x?a.x:o.x,u=n.y>a.y?n.y>o.y?n.y:o.y:a.y>o.y?a.y:o.y,c=_h(s,l,t,r,i),d=_h(h,u,t,r,i),f=e.nextZ;f&&f.z<=d;){if(f!==e.prev&&f!==e.next&&yh(n.x,n.y,a.x,a.y,o.x,o.y,f.x,f.y)&&bh(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(f=e.prevZ;f&&f.z>=c;){if(f!==e.prev&&f!==e.next&&yh(n.x,n.y,a.x,a.y,o.x,o.y,f.x,f.y)&&bh(f.prev,f,f.next)>=0)return!1;f=f.prevZ}return!0}function fh(e,t,r){var i=e;do{var n=i.prev,a=i.next.next;!wh(n,a)&&Th(n,i,i.next,a)&&Sh(n,a)&&Sh(a,n)&&(t.push(n.i/r),t.push(i.i/r),t.push(a.i/r),Eh(i),Eh(i.next),i=e=a),i=i.next}while(i!==e);return i}function ph(e,t,r,i,n,a){var o=e;do{for(var s=o.next.next;s!==o.prev;){if(o.i!==s.i&&xh(o,s)){var l=Mh(o,s);return o=hh(o,o.next),l=hh(l,l.next),uh(o,t,r,i,n,a),void uh(l,t,r,i,n,a)}s=s.next}o=o.next}while(o!==e)}function mh(e,t){return e.x-t.x}function gh(e,t){if(t=function(e,t){var r,i=t,n=e.x,a=e.y,o=-1/0;do{if(a<=i.y&&a>=i.next.y&&i.next.y!==i.y){var s=i.x+(a-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(s<=n&&s>o){if(o=s,s===n){if(a===i.y)return i;if(a===i.next.y)return i.next}r=i.x=i.x&&i.x>=u&&n!==i.x&&yh(ar.x)&&Sh(i,e)&&(r=i,d=l),i=i.next;return r}(e,t)){var r=Mh(t,e);hh(r,r.next)}}function _h(e,t,r,i,n){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-r)/n)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-i)/n)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function vh(e){var t=e,r=e;do{t.x=0&&(e-o)*(i-s)-(r-o)*(t-s)>=0&&(r-o)*(a-s)-(n-o)*(i-s)>=0}function xh(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function(e,t){var r=e;do{if(r.i!==e.i&&r.next.i!==e.i&&r.i!==t.i&&r.next.i!==t.i&&Th(r,r.next,e,t))return!0;r=r.next}while(r!==e);return!1}(e,t)&&Sh(e,t)&&Sh(t,e)&&function(e,t){var r=e,i=!1,n=(e.x+t.x)/2,a=(e.y+t.y)/2;do{r.y>a!=r.next.y>a&&r.next.y!==r.y&&n<(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next}while(r!==e);return i}(e,t)}function bh(e,t,r){return(t.y-e.y)*(r.x-t.x)-(t.x-e.x)*(r.y-t.y)}function wh(e,t){return e.x===t.x&&e.y===t.y}function Th(e,t,r,i){return!!(wh(e,t)&&wh(r,i)||wh(e,i)&&wh(r,t))||bh(e,t,r)>0!=bh(e,t,i)>0&&bh(r,i,e)>0!=bh(r,i,t)>0}function Sh(e,t){return bh(e.prev,e,e.next)<0?bh(e,t,e.next)>=0&&bh(e,e.prev,t)>=0:bh(e,t,e.prev)<0||bh(e,e.next,t)<0}function Mh(e,t){var r=new Ch(e.i,e.x,e.y),i=new Ch(t.i,t.x,t.y),n=e.next,a=t.prev;return e.next=t,t.prev=e,r.next=n,n.prev=r,i.next=r,r.prev=i,a.next=i,i.prev=a,i}function Ah(e,t,r,i){var n=new Ch(e,t,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function Eh(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function Ch(e,t,r){this.i=e,this.x=t,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function Dh(e,t,r,i){for(var n=0,a=t,o=r-i;ah&&s.push({pivot:Math.floor((l+h)/2),left:h,right:l}),h=a[o].pivot+1,(l=a[o].right)>h&&s.push({pivot:Math.floor((l+h)/2),left:h,right:l})}a=this._parts=s}else for(o=0;o=2e4},doSortTriangles:function(e,t){var r=this.indices;if(0===t){var i=this.attributes.position;e=e.array,this._triangleZList&&this._triangleZList.length===this.triangleCount||(this._triangleZList=new Float32Array(this.triangleCount),this._sortedTriangleIndices=new Uint32Array(this.triangleCount),this._indicesTmp=new r.constructor(r.length),this._triangleZListTmp=new Float32Array(this.triangleCount));for(var n,a=0,o=0;o0,r={},n=0;n65535?new Uint32Array(3*o):new Uint16Array(3*o),d.material.shader!==t&&d.material.attachShader(t,!0),Ga.setMaterialFromModel(t.__shading,d.material,e,r),s>0&&(this._linesMesh.geometry.resetOffset(),this._linesMesh.geometry.setVertexCount(s),this._linesMesh.geometry.setTriangleCount(l)),this._dataIndexOfVertex=new Uint32Array(a),this._vertexRangeOfDataIndex=new Uint32Array(2*(n-i))},_updateRegionMesh:function(e,t,r,i){for(var n=e.getData(),a=0,o=0,s=!1,l=this._polygonMesh,h=this._linesMesh,u=r;u0;w&&(b*=t.getDevicePixelRatio(),this._updateLinesGeometry(h.geometry,e,u,v,b,e.coordinateSystem.transform)),h.invisible=!w,h.material.set({color:g})}(l=this._polygonMesh).material.transparent=s,l.material.depthMask=!s,l.geometry.updateBoundingBox(),l.frontFace=this.extrudeY?Ga.Mesh.CCW:Ga.Mesh.CW,l.material.get("normalMap")&&l.geometry.generateTangents(),l.seriesIndex=e.seriesIndex,l.on("mousemove",this._onmousemove,this),l.on("mouseout",this._onmouseout,this)},_updateDebugWireframe:function(e){var t=e.getModel("debug.wireframe");if(t.get("show")){var r=Ga.parseColor(t.get("lineStyle.color")||"rgba(0,0,0,0.5)"),i=Mn(t.get("lineStyle.width"),1),n=this._polygonMesh;n.geometry.generateBarycentric(),n.material.define("both","WIREFRAME_TRIANGLE"),n.material.set("wireframeLineColor",r),n.material.set("wireframeLineWidth",i)}},_onmousemove:function(e){var t=this._dataIndexOfVertex[e.triangle[0]];null==t&&(t=-1),t!==this._lastHoverDataIndex&&(this.downplay(this._lastHoverDataIndex),this.highlight(t),this._labelsBuilder.updateLabels([t])),this._lastHoverDataIndex=t,this._polygonMesh.dataIndex=t},_onmouseout:function(e){e.target&&(this.downplay(this._lastHoverDataIndex),this._lastHoverDataIndex=-1,this._polygonMesh.dataIndex=-1),this._labelsBuilder.updateLabels([])},_updateGroundPlane:function(e,t,r){var i=e.getModel("groundPlane",e);if(this._groundMesh.invisible=!i.get("show",!0),!this._groundMesh.invisible){var n=e.get("shading"),a=this._groundMaterials[n];a||(a=this._groundMaterials.lambert),Ga.setMaterialFromModel(n,a,i,r),a.get("normalMap")&&this._groundMesh.geometry.generateTangents(),this._groundMesh.material=a,this._groundMesh.material.set("color",Ga.parseColor(i.get("color"))),this._groundMesh.scale.set(t.size[0],t.size[2],1)}},_triangulation:function(e,t,r){this._triangulationResults=[];for(var i=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0],a=e.coordinateSystem,o=t;o1?i:0,L[U][g]=A.points[V+2],l.set(n+U,L[U]),s?(I[0]=(A.points[V]*_[0]-v[0])/x,I[1]=(A.points[V+2]*_[g]-v[g])/x):(I[0]=(k?R:R+G)/x,I[1]=(L[U][m]*_[m]-v[m])/x),u.set(n+U,I)}for(Wh.sub(P,L[1],L[0]),Wh.sub(O,L[3],L[0]),Wh.cross(N,P,O),Wh.normalize(N,N),U=0;U<4;U++)h.set(n+U,N),f&&c.set(n+U,o);for(U=0;U<6;U++)p[3*a+U]=D[U]+n;n+=4,a+=2,R+=G}}return t.dirty(),{vertexOffset:n,triangleOffset:a}},_getRegionLinesInfo:function(e,t,r){var i=0,n=0;return t.getRegionModel(e).getModel("itemStyle").get("borderWidth")>0&&t.getRegionPolygonCoords(e).forEach((function(e){var t=e.exterior,a=e.interiors;i+=r.getPolylineVertexCount(t),n+=r.getPolylineTriangleCount(t);for(var o=0;othis._endIndex)){t-=this._startIndex;for(var i=this._vertexRangeOfDataIndex[2*t];i0},_displacementChanged:!0,_displacementScale:0,updateDisplacementHash:function(){var e=this.getDisplacementTexture(),t=this.getDisplacemenScale();this._displacementChanged=this._displacementTexture!==e||this._displacementScale!==t,this._displacementTexture=e,this._displacementScale=t},isDisplacementChanged:function(){return this._displacementChanged}});i.util.merge(lu.prototype,$a),i.util.merge(lu.prototype,eo),i.util.merge(lu.prototype,to),i.util.merge(lu.prototype,rh);const hu=lu;var uu=Math.PI,cu=Math.sin,du=Math.cos,fu=Math.tan,pu=Math.asin,mu=Math.atan2,gu=uu/180,_u=23.4397*gu;function vu(e,t){return mu(cu(e)*du(_u)-fu(t)*cu(_u),du(e))}function yu(e,t,r){return mu(cu(e),du(e)*cu(t)-fu(r)*du(t))}function xu(e,t,r){return pu(cu(t)*cu(r)+du(t)*du(r)*du(e))}var bu={};bu.getPosition=function(e,t,r){var i=gu*-r,n=gu*t,a=function(e){return function(e){return e.valueOf()/864e5-.5+2440588}(e)-2451545}(e),o=function(e){var t,r,i=(r=function(e){return gu*(357.5291+.98560028*e)}(e))+gu*(1.9148*cu(r)+.02*cu(2*r)+3e-4*cu(3*r))+102.9372*gu+uu;return{dec:(t=i,pu(cu(0)*du(_u)+du(0)*cu(_u)*cu(t))),ra:vu(i,0)}}(a),s=function(e,t){return gu*(280.16+360.9856235*e)-t}(a,i)-o.ra;return{azimuth:yu(s,n,o.dec),altitude:xu(s,n,o.dec)}};const wu=bu;Ga.Shader.import(Pa),Ga.Shader.import("@export ecgl.atmosphere.vertex\nattribute vec3 position: POSITION;\nattribute vec3 normal : NORMAL;\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 normalMatrix : WORLDINVERSETRANSPOSE;\n\nvarying vec3 v_Normal;\n\nvoid main() {\n v_Normal = normalize((normalMatrix * vec4(normal, 0.0)).xyz);\n gl_Position = worldViewProjection * vec4(position, 1.0);\n}\n@end\n\n\n@export ecgl.atmosphere.fragment\nuniform mat4 viewTranspose: VIEWTRANSPOSE;\nuniform float glowPower;\nuniform vec3 glowColor;\n\nvarying vec3 v_Normal;\n\nvoid main() {\n float intensity = pow(1.0 - dot(v_Normal, (viewTranspose * vec4(0.0, 0.0, 1.0, 0.0)).xyz), glowPower);\n gl_FragColor = vec4(glowColor, intensity * intensity);\n}\n@end");const Tu=i.ComponentView.extend({type:"globe",__ecgl__:!0,_displacementScale:0,init:function(e,t){this.groupGL=new Ga.Node,this._sphereGeometry=new Ga.SphereGeometry({widthSegments:200,heightSegments:100,dynamic:!0}),this._overlayGeometry=new Ga.SphereGeometry({widthSegments:80,heightSegments:40}),this._planeGeometry=new Ga.PlaneGeometry,this._earthMesh=new Ga.Mesh({renderNormal:!0}),this._atmosphereMesh=new Ga.Mesh,this._atmosphereGeometry=new Ga.SphereGeometry({widthSegments:80,heightSegments:40}),this._atmosphereMaterial=new Ga.Material({shader:new Ga.Shader(Ga.Shader.source("ecgl.atmosphere.vertex"),Ga.Shader.source("ecgl.atmosphere.fragment")),transparent:!0}),this._atmosphereMesh.geometry=this._atmosphereGeometry,this._atmosphereMesh.material=this._atmosphereMaterial,this._atmosphereMesh.frontFace=Ga.Mesh.CW,this._lightRoot=new Ga.Node,this._sceneHelper=new Xo,this._sceneHelper.initLight(this._lightRoot),this.groupGL.add(this._atmosphereMesh),this.groupGL.add(this._earthMesh),this._control=new Ro({zr:t.getZr()}),this._control.init(),this._layerMeshes={}},render:function(e,t,r){var i=e.coordinateSystem,n=e.get("shading");i.viewGL.add(this._lightRoot),e.get("show")?i.viewGL.add(this.groupGL):i.viewGL.remove(this.groupGL),this._sceneHelper.setScene(i.viewGL.scene),i.viewGL.setPostEffect(e.getModel("postEffect"),r),i.viewGL.setTemporalSuperSampling(e.getModel("temporalSuperSampling"));var a=this._earthMesh;a.geometry=this._sphereGeometry;var o="ecgl."+n;a.material&&a.material.shader.name===o||(a.material=Ga.createMaterial(o)),Ga.setMaterialFromModel(n,a.material,e,r),["roughnessMap","metalnessMap","detailMap","normalMap"].forEach((function(e){var t=a.material.get(e);t&&(t.flipY=!1)})),a.material.set("color",Ga.parseColor(e.get("baseColor")));var s=.99*i.radius;if(a.scale.set(s,s,s),e.get("atmosphere.show")){a.material.define("both","ATMOSPHERE_ENABLED"),this._atmosphereMesh.invisible=!1,this._atmosphereMaterial.setUniforms({glowPower:e.get("atmosphere.glowPower")||6,glowColor:e.get("atmosphere.color")||"#ffffff"}),a.material.setUniforms({glowPower:e.get("atmosphere.innerGlowPower")||2,glowColor:e.get("atmosphere.color")||"#ffffff"});var l=e.get("atmosphere.offset")||5;this._atmosphereMesh.scale.set(s+l,s+l,s+l)}else a.material.undefine("both","ATMOSPHERE_ENABLED"),this._atmosphereMesh.invisible=!0;var h=a.material.setTextureImage("diffuseMap",e.get("baseTexture"),r,{flipY:!1,anisotropic:8});h&&h.surface&&h.surface.attachToMesh(a);var u=a.material.setTextureImage("bumpMap",e.get("heightTexture"),r,{flipY:!1,anisotropic:8});u&&u.surface&&u.surface.attachToMesh(a),a.material[e.get("postEffect.enable")?"define":"undefine"]("fragment","SRGB_DECODE"),this._updateLight(e,r),this._displaceVertices(e,r),this._updateViewControl(e,r),this._updateLayers(e,r)},afterRender:function(e,t,r,i){var n=i.renderer;this._sceneHelper.updateAmbientCubemap(n,e,r),this._sceneHelper.updateSkybox(n,e,r)},_updateLayers:function(e,t){var r=e.coordinateSystem,n=e.get("layers"),a=r.radius,o=[],s=[],l=[],h=[];i.util.each(n,(function(e){var n=new i.Model(e),u=n.get("type"),c=Ga.loadTexture(n.get("texture"),t,{flipY:!1,anisotropic:8});if(c.surface&&c.surface.attachToMesh(this._earthMesh),"blend"===u){var d=n.get("blendTo"),f=Mn(n.get("intensity"),1);"emission"===d?(l.push(c),h.push(f)):(o.push(c),s.push(f))}else{var p=n.get("id"),m=this._layerMeshes[p];m||(m=this._layerMeshes[p]=new Ga.Mesh({geometry:this._overlayGeometry,castShadow:!1,ignorePicking:!0})),"lambert"===n.get("shading")?(m.material=m.__lambertMaterial||new Ga.Material({autoUpdateTextureStatus:!1,shader:Ga.createShader("ecgl.lambert"),transparent:!0,depthMask:!1}),m.__lambertMaterial=m.material):(m.material=m.__colorMaterial||new Ga.Material({autoUpdateTextureStatus:!1,shader:Ga.createShader("ecgl.color"),transparent:!0,depthMask:!1}),m.__colorMaterial=m.material),m.material.enableTexture("diffuseMap");var g=n.get("distance"),_=a+(null==g?r.radius/100:g);m.scale.set(_,_,_),a=_;var v=this._blankTexture||(this._blankTexture=Ga.createBlankTexture("rgba(255, 255, 255, 0)"));m.material.set("diffuseMap",v),Ga.loadTexture(n.get("texture"),t,{flipY:!1,anisotropic:8},(function(e){e.surface&&e.surface.attachToMesh(m),m.material.set("diffuseMap",e),t.getZr().refresh()})),n.get("show")?this.groupGL.add(m):this.groupGL.remove(m)}}),this);var u=this._earthMesh.material;u.define("fragment","LAYER_DIFFUSEMAP_COUNT",o.length),u.define("fragment","LAYER_EMISSIVEMAP_COUNT",l.length),u.set("layerDiffuseMap",o),u.set("layerDiffuseIntensity",s),u.set("layerEmissiveMap",l),u.set("layerEmissionIntensity",h);var c=e.getModel("debug.wireframe");if(c.get("show")){u.define("both","WIREFRAME_TRIANGLE");var d=Ga.parseColor(c.get("lineStyle.color")||"rgba(0,0,0,0.5)"),f=Mn(c.get("lineStyle.width"),1);u.set("wireframeLineWidth",f),u.set("wireframeLineColor",d)}else u.undefine("both","WIREFRAME_TRIANGLE")},_updateViewControl:function(e,t){var r=e.coordinateSystem,i=e.getModel("viewControl"),n=(r.viewGL.camera,this),a=this._control;a.setViewGL(r.viewGL);var o,s,l=i.get("targetCoord");null!=l&&(s=l[0]+90,o=l[1]),a.setFromViewControlModel(i,{baseDistance:r.radius,alpha:o,beta:s}),a.off("update"),a.on("update",(function(){t.dispatchAction({type:"globeChangeCamera",alpha:a.getAlpha(),beta:a.getBeta(),distance:a.getDistance()-r.radius,center:a.getCenter(),from:n.uid,globeId:e.id})}))},_displaceVertices:function(e,t){var r=e.get("displacementQuality"),i=e.get("debug.wireframe.show"),n=e.coordinateSystem;if(e.isDisplacementChanged()||r!==this._displacementQuality||i!==this._showDebugWireframe){this._displacementQuality=r,this._showDebugWireframe=i;var a=this._sphereGeometry,o={low:100,medium:200,high:400,ultra:800}[r]||200,s=o/2;(a.widthSegments!==o||i)&&(a.widthSegments=o,a.heightSegments=s,a.build()),this._doDisplaceVertices(a,n),i&&a.generateBarycentric()}},_doDisplaceVertices:function(e,t){var r=e.attributes.position.value,i=e.attributes.texcoord0.value,n=e.__originalPosition;n&&n.length===r.length||((n=new Float32Array(r.length)).set(r),e.__originalPosition=n);for(var a=t.displacementWidth,o=t.displacementHeight,s=t.displacementData,l=0;l50&&(a=1e3);var o=[];zu.perspective(o,Uu,this.width/this.height,1,a),this.viewGL.camera.projectionMatrix.setArray(o),this.viewGL.camera.decomposeProjectionMatrix(),o=zu.identity([]);var s=this.dataToPoint(this.center);zu.scale(o,o,[1,-1,1]),zu.translate(o,o,[0,0,-e]),zu.rotateX(o,o,t),zu.rotateZ(o,o,-this.bearing/180*Math.PI),zu.translate(o,o,[-s[0]*this.getScale()*Vu,-s[1]*this.getScale()*Vu,0]),this.viewGL.camera.viewMatrix.array=o;var l=[];zu.invert(l,o),this.viewGL.camera.worldTransform.array=l,this.viewGL.camera.decomposeWorldTransform();var h,u=Gu*this.getScale();if(this.altitudeExtent&&!isNaN(this.boxHeight)){var c=this.altitudeExtent[1]-this.altitudeExtent[0];h=this.boxHeight/c*this.getScale()/Math.pow(2,this._initialZoom-this.zoomOffset)}else h=u/(2*Math.PI*6378e3*Math.abs(Math.cos(this.center[1]*(Math.PI/180))))*this.altitudeScale*Vu;this.viewGL.rootNode.scale.set(this.getScale()*Vu,this.getScale()*Vu,h)}},getScale:function(){return Math.pow(2,this.zoom-this.zoomOffset)},projectOnTile:function(e,t){return this.projectOnTileWithScale(e,this.getScale()*Gu,t)},projectOnTileWithScale:function(e,t,r){var i=e[0],n=e[1]*ku/180,a=t*(i*ku/180+ku)/(2*ku),o=t*(ku-Math.log(Math.tan(ku/4+.5*n)))/(2*ku);return(r=r||[])[0]=a,r[1]=o,r},unprojectFromTile:function(e,t){return this.unprojectOnTileWithScale(e,this.getScale()*Gu,t)},unprojectOnTileWithScale:function(e,t,r){var i=e[0],n=e[1],a=i/t*(2*ku)-ku,o=2*(Math.atan(Math.exp(ku-n/t*(2*ku)))-ku/4);return(r=r||[])[0]=180*a/ku,r[1]=180*o/ku,r},dataToPoint:function(e,t){return(t=this.projectOnTileWithScale(e,Gu,t))[0]-=this._origin[0],t[1]-=this._origin[1],t[2]=isNaN(e[2])?0:e[2],isNaN(e[2])||(t[2]=e[2],this.altitudeExtent&&(t[2]-=this.altitudeExtent[0])),t}};const Wu=Hu;function ju(){Wu.apply(this,arguments)}function Xu(e,t,r){function i(e,t){var r=t.getWidth(),i=t.getHeight(),n=t.getDevicePixelRatio();this.viewGL.setViewport(0,0,r,i,n),this.width=r,this.height=i,this.altitudeScale=e.get("altitudeScale"),this.boxHeight=e.get("boxHeight")}function n(e,t){if("auto"!==this.model.get("boxHeight")){var r=[1/0,-1/0];e.eachSeries((function(e){if(e.coordinateSystem===this){var t=e.getData(),i=e.coordDimToDataDim("alt")[0];if(i){var n=t.getDataExtent(i,!0);r[0]=Math.min(r[0],n[0]),r[1]=Math.max(r[1],n[1])}}}),this),r&&isFinite(r[1]-r[0])&&(this.altitudeExtent=r)}}return{dimensions:t.prototype.dimensions,create:function(a,o){var s=[];return a.eachComponent(e,(function(e){var r=e.__viewGL;r||(r=e.__viewGL=new Ul).setRootNode(new Ga.Node);var a=new t;a.viewGL=e.__viewGL,a.resize=i,a.resize(e,o),s.push(a),e.coordinateSystem=a,a.model=e,a.update=n})),a.eachSeries((function(t){if(t.get("coordinateSystem")===e){var r=t.getReferringComponents(e).models[0];if(r||(r=a.getComponent(e)),!r)throw new Error(e+' "'+Mn(t.get(e+"Index"),t.get(e+"Id"),0)+'" not found');t.coordinateSystem=r.coordinateSystem}})),r&&r(s,a,o),s}}}ju.prototype=new Wu,ju.prototype.constructor=ju,ju.prototype.type="mapbox3D";const qu=Xu("mapbox3D",ju,(function(e){e.forEach((function(e){e.setCameraOption(e.model.getMapboxCameraOption())}))}));(0,i.use)((function(e){e.registerComponentModel(Ou),e.registerComponentView(Bu),e.registerCoordinateSystem("mapbox3D",qu),e.registerAction({type:"mapbox3DChangeCamera",event:"mapbox3dcamerachanged",update:"mapbox3D:updateCamera"},(function(e,t){t.eachComponent({mainType:"mapbox3D",query:e},(function(t){t.setMapboxCameraOption(e)}))}))}));var Zu=["zoom","center","pitch","bearing"],Yu=i.ComponentModel.extend({type:"maptalks3D",layoutMode:"box",coordinateSystem:null,defaultOption:{zlevel:-10,urlTemplate:"http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png",attribution:'© OpenStreetMap contributors, © CARTO',center:[0,0],zoom:0,pitch:0,bearing:0,light:{main:{alpha:20,beta:30}},altitudeScale:1,boxHeight:"auto"},getMaptalksCameraOption:function(){var e=this;return Zu.reduce((function(t,r){return t[r]=e.get(r),t}),{})},setMaptalksCameraOption:function(e){null!=e&&Zu.forEach((function(t){null!=e[t]&&(this.option[t]=e[t])}),this)},getMaptalks:function(){return this._maptalks},setMaptalks:function(e){this._maptalks=e}});i.util.merge(Yu.prototype,eo),i.util.merge(Yu.prototype,to);const Ku=Yu;function Qu(e,t,r,i){if(this.id=e,this.zr=t,this.dom=document.createElement("div"),this.dom.style.cssText="position:absolute;left:0;right:0;top:0;bottom:0;",!maptalks)throw new Error("Maptalks library must be included. See https://maptalks.org");this._maptalks=new maptalks.Map(this.dom,{center:r,zoom:i,doubleClickZoom:!1,fog:!1}),this._initEvents()}Qu.prototype.setUnpainted=function(){},Qu.prototype.resize=function(){this._maptalks.checkSize()},Qu.prototype.getMaptalks=function(){return this._maptalks},Qu.prototype.clear=function(){},Qu.prototype.refresh=function(){this._maptalks.checkSize()};var Ju=["mousedown","mouseup","click","dblclick","mousemove","mousewheel","DOMMouseScroll","touchstart","touchend","touchmove","touchcancel"];Qu.prototype._initEvents=function(){var e=this.dom;this._handlers=this._handlers||{contextmenu:function(e){return e.preventDefault(),!1}},Ju.forEach((function(t){this._handlers[t]=function(r){var i={};for(var n in r)i[n]=r[n];i.bubbles=!1;var a=new r.constructor(r.type,i);"mousewheel"===t||"DOMMouseScroll"===t?e.dispatchEvent(a):e.firstElementChild.dispatchEvent(a)},this.zr.dom.addEventListener(t,this._handlers[t])}),this),this.zr.dom.addEventListener("contextmenu",this._handlers.contextmenu)},Qu.prototype.dispose=function(){Ju.forEach((function(e){this.zr.dom.removeEventListener(e,this._handlers[e])}),this),this._maptalks.remove()};const $u=Qu;Ga.Shader.import(Fu);const ec=i.ComponentView.extend({type:"maptalks3D",__ecgl__:!0,init:function(e,t){this._groundMesh=new Ga.Mesh({geometry:new Ga.PlaneGeometry,material:new Ga.Material({shader:new Ga.Shader({vertex:Ga.Shader.source("ecgl.displayShadow.vertex"),fragment:Ga.Shader.source("ecgl.displayShadow.fragment")}),depthMask:!1}),renderOrder:-100,culling:!1,castShadow:!1,$ignorePicking:!0,renderNormal:!0})},_initMaptalksLayer:function(e,t){var r=t.getZr();this._zrLayer=new $u("maptalks3D",r,e.get("center"),e.get("zoom")),r.painter.insertLayer(-1e3,this._zrLayer),this._lightRoot=new Ga.Node,this._sceneHelper=new Xo(this._lightRoot),this._sceneHelper.initLight(this._lightRoot);var i=this._zrLayer.getMaptalks(),n=this._dispatchInteractAction.bind(this,t,i);["zoomend","zooming","zoomstart","dragrotating","pitch","pitchend","movestart","moving","moveend","resize","touchstart","touchmove","touchend","animating"].forEach((function(e){i.on(e,n)}))},render:function(e,t,r){this._zrLayer||this._initMaptalksLayer(e,r);var i=this._zrLayer.getMaptalks(),n=e.get("urlTemplate"),a=i.getBaseLayer();n!==this._oldUrlTemplate&&(a?a.setOptions({urlTemplate:n,attribution:e.get("attribution")}):(a=new maptalks.TileLayer("maptalks-echarts-gl-baselayer",{urlTemplate:n,subdomains:["a","b","c"],attribution:e.get("attribution")}),i.setBaseLayer(a))),this._oldUrlTemplate=n,i.setCenter(e.get("center")),i.setZoom(e.get("zoom"),{animation:!1}),i.setPitch(e.get("pitch")),i.setBearing(e.get("bearing")),e.setMaptalks(i);var o=e.coordinateSystem;o.viewGL.scene.add(this._lightRoot),o.viewGL.add(this._groundMesh),this._updateGroundMesh(),this._sceneHelper.setScene(o.viewGL.scene),this._sceneHelper.updateLight(e),o.viewGL.setPostEffect(e.getModel("postEffect"),r),o.viewGL.setTemporalSuperSampling(e.getModel("temporalSuperSampling")),this._maptalks3DModel=e},afterRender:function(e,t,r,i){var n=i.renderer;this._sceneHelper.updateAmbientCubemap(n,e,r),this._sceneHelper.updateSkybox(n,e,r),e.coordinateSystem.viewGL.scene.traverse((function(e){e.material&&(e.material.define("fragment","NORMAL_UP_AXIS",2),e.material.define("fragment","NORMAL_FRONT_AXIS",1))}))},updateCamera:function(e,t,r,i){e.coordinateSystem.setCameraOption(i),this._updateGroundMesh(),r.getZr().refresh()},_dispatchInteractAction:function(e,t,r){var i;e.dispatchAction({type:"maptalks3DChangeCamera",pitch:t.getPitch(),zoom:(i=t.getResolution(),19-Math.log(i/tc)/Math.LN2+1),center:t.getCenter().toArray(),bearing:t.getBearing(),maptalks3DId:this._maptalks3DModel&&this._maptalks3DModel.id})},_updateGroundMesh:function(){if(this._maptalks3DModel){var e=this._maptalks3DModel.coordinateSystem,t=e.dataToPoint(e.center);this._groundMesh.position.set(t[0],t[1],-.001);var r=new Ga.Plane(new Ga.Vector3(0,0,1),0),i=e.viewGL.camera.castRay(new Ga.Vector2(-1,-1)),n=e.viewGL.camera.castRay(new Ga.Vector2(1,1)),a=i.intersectPlane(r),o=n.intersectPlane(r),s=a.dist(o)/e.viewGL.rootNode.scale.x;this._groundMesh.scale.set(s,s,1)}},dispose:function(e,t){this._zrLayer&&this._zrLayer.dispose(),t.getZr().painter.delLayer(-1e3)}}),tc=12756274*Math.PI/(256*Math.pow(2,20));function rc(){Wu.apply(this,arguments),this.maxPitch=85,this.zoomOffset=1}rc.prototype=new Wu,rc.prototype.constructor=rc,rc.prototype.type="maptalks3D";const ic=Xu("maptalks3D",rc,(function(e){e.forEach((function(e){e.setCameraOption(e.model.getMaptalksCameraOption())}))}));(0,i.use)((function(e){e.registerComponentModel(Ku),e.registerComponentView(ec),e.registerCoordinateSystem("maptalks3D",ic),e.registerAction({type:"maptalks3DChangeCamera",event:"maptalks3dcamerachanged",update:"maptalks3D:updateCamera"},(function(e,t){t.eachComponent({mainType:"maptalks3D",query:e},(function(t){t.setMaptalksCameraOption(e)}))}))}));var nc=Bo.vec3,ac=i.helper.dataStack.isDimensionStacked;function oc(e,t,r){for(var i=e.getDataExtent(t),n=e.getDataExtent(r),a=i[1]-i[0]||i[0],o=n[1]-n[0]||n[0],s=new Uint8Array(2500),l=0;l0&&d>0||c<0&&d<0)),m=["x","y","z"].map((function(t){return e.coordDimToDataDim(t)[0]})),g=ac(r,m[2]),_=g?r.getCalculationInfo("stackResultDimension"):m[2];r.each(m,(function(e,i,a,o){var s=r.get(_,o),l=g?s-a:p?0:f[0],h=t.dataToPoint([e,i,l]),u=t.dataToPoint([e,i,s]),c=nc.dist(h,u),d=[0,u[1]"+a.join("
")}(a):i.format.encodeHTML(i.format.addCommas(a)),s=n.getName(t),l=Uh(n,t);i.util.isObject(l)&&l.colorStops&&(l=(l.colorStops[0]||{}).color),l=l||"transparent";var h=i.format.getTooltipMarker(l),u=e.name;return"\0-"===u&&(u=""),u=u?i.format.encodeHTML(u)+(r?": ":"
"):"",r?h+u+o:u+h+(s?i.format.encodeHTML(s)+": "+o:o)}function fc(e,t,r){r=r||e.getSource();var n=t||i.getCoordinateSystemDimensions(e.get("coordinateSystem"))||["x","y","z"],a=i.helper.createDimensions(r,{dimensionsDefine:r.dimensionsDefine||e.get("dimensions"),encodeDefine:r.encodeDefine||e.get("encode"),coordDimensions:n.map((function(t){var r=e.getReferringComponents(t+"Axis3D").models[0];return{type:r&&"category"===r.get("type")?"ordinal":"float",name:t}}))});"cartesian3D"===e.get("coordinateSystem")&&a.forEach((function(t){if(n.indexOf(t.coordDim)>=0){var r=e.getReferringComponents(t.coordDim+"Axis3D").models[0];r&&"category"===r.get("type")&&(t.ordinalMeta=r.getOrdinalMeta())}}));var o=i.helper.dataStack.enableDataStack(e,a,{byIndex:!0,stackedCoordDimension:"z"}),s=new i.List(a,e);return s.setCalculationInfo(o),s.initData(r),s}var pc=i.SeriesModel.extend({type:"series.bar3D",dependencies:["globe"],visualStyleAccessPathvisu:"itemStyle",getInitialData:function(e,t){return fc(this)},getFormattedLabel:function(e,t,r,i){var n=cc.getFormattedLabel(this,e,t,r,i);return null==n&&(n=this.getData().get("z",e)),n},formatTooltip:function(e){return dc(this,e)},defaultOption:{coordinateSystem:"cartesian3D",globeIndex:0,grid3DIndex:0,zlevel:-10,bevelSize:0,bevelSmoothness:2,onGridPlane:"xy",shading:"color",minHeight:0,itemStyle:{opacity:1},label:{show:!1,distance:2,textStyle:{fontSize:14,color:"#000",backgroundColor:"rgba(255,255,255,0.7)",padding:3,borderRadius:3}},emphasis:{label:{show:!0}},animationDurationUpdate:500}});i.util.merge(pc.prototype,rh);const mc=pc;var gc,_c,vc,yc,xc,bc,wc,Tc,Sc=Bo.vec3,Mc=Bo.mat3,Ac=Vr.extend((function(){return{attributes:{position:new Vr.Attribute("position","float",3,"POSITION"),normal:new Vr.Attribute("normal","float",3,"NORMAL"),color:new Vr.Attribute("color","float",4,"COLOR"),prevPosition:new Vr.Attribute("prevPosition","float",3),prevNormal:new Vr.Attribute("prevNormal","float",3)},dynamic:!0,enableNormal:!1,bevelSize:1,bevelSegments:0,_dataIndices:null,_vertexOffset:0,_triangleOffset:0}}),{resetOffset:function(){this._vertexOffset=0,this._triangleOffset=0},setBarCount:function(e){var t=this.enableNormal,r=this.getBarVertexCount()*e,i=this.getBarTriangleCount()*e;this.vertexCount!==r&&(this.attributes.position.init(r),t?this.attributes.normal.init(r):this.attributes.normal.value=null,this.attributes.color.init(r)),this.triangleCount!==i&&(this.indices=r>65535?new Uint32Array(3*i):new Uint16Array(3*i),this._dataIndices=new Uint32Array(r))},getBarVertexCount:function(){var e=this.bevelSize>0?this.bevelSegments:0;return e>0?this._getBevelBarVertexCount(e):this.enableNormal?24:8},getBarTriangleCount:function(){var e=this.bevelSize>0?this.bevelSegments:0;return e>0?this._getBevelBarTriangleCount(e):12},_getBevelBarVertexCount:function(e){return 4*(e+1)*(e+1)*2},_getBevelBarTriangleCount:function(e){return(4*e+3+1)*(2*e+1)*2+4},setColor:function(e,t){for(var r=this.getBarVertexCount(),i=r*(e+1),n=r*e;n0&&this.bevelSegments>0)this._addBevelBar(e,c,m,g,this.bevelSize,this.bevelSegments,_);else{Sc.copy(n,c),Sc.normalize(n,n),Sc.cross(a,m,n),Sc.normalize(a,a),Sc.cross(i,n,a),Sc.normalize(a,a),Sc.negate(o,i),Sc.negate(s,n),Sc.negate(l,a),t(h[0],e,i,g[0]/2),t(h[0],h[0],a,g[2]/2),t(h[1],e,i,g[0]/2),t(h[1],h[1],l,g[2]/2),t(h[2],e,o,g[0]/2),t(h[2],h[2],l,g[2]/2),t(h[3],e,o,g[0]/2),t(h[3],h[3],a,g[2]/2),t(r,e,n,g[1]),t(h[4],r,i,g[0]/2),t(h[4],h[4],a,g[2]/2),t(h[5],r,i,g[0]/2),t(h[5],h[5],l,g[2]/2),t(h[6],r,o,g[0]/2),t(h[6],h[6],l,g[2]/2),t(h[7],r,o,g[0]/2),t(h[7],h[7],a,g[2]/2);var x=this.attributes;if(this.enableNormal){u[0]=i,u[1]=o,u[2]=n,u[3]=s,u[4]=a,u[5]=l;for(var b=this._vertexOffset,w=0;w0&&(f++,u[3]<.99&&(p=!0))}})),o.geometry.setBarCount(f);var m=r.getLayout("orient"),g=this._barIndexOfData=new Int32Array(r.count());f=0,r.each((function(e){if(r.hasValue(e)){var t=r.getItemLayout(e),i=t[0],n=t[1],o=t[2],s=4*e;u[0]=c[s++],u[1]=c[s++],u[2]=c[s++],u[3]=c[s++],u[3]>0&&(a._barMesh.geometry.addBar(i,n,m,o,u,e),g[e]=f++)}else g[e]=-1})),o.geometry.dirty(),o.geometry.updateBoundingBox();var _=o.material;_.transparent=p,_.depthMask=!p,o.geometry.sortTriangles=p,this._initHandler(e,t)},_initHandler:function(e,t){var r=e.getData(),i=this._barMesh,n="cartesian3D"===e.coordinateSystem.type;i.seriesIndex=e.seriesIndex;var a=-1;i.off("mousemove"),i.off("mouseout"),i.on("mousemove",(function(e){var o=i.geometry.getDataIndexOfVertex(e.triangle[0]);o!==a&&(this._downplay(a),this._highlight(o),this._labelsBuilder.updateLabels([o]),n&&t.dispatchAction({type:"grid3DShowAxisPointer",value:[r.get("x",o),r.get("y",o),r.get("z",o,!0)]})),a=o,i.dataIndex=o}),this),i.on("mouseout",(function(e){this._downplay(a),this._labelsBuilder.updateLabels(),a=-1,i.dataIndex=-1,n&&t.dispatchAction({type:"grid3DHideAxisPointer"})}),this)},_highlight:function(e){var t=this._data;if(t){var r=this._barIndexOfData[e];if(!(r<0)){var n=t.getItemModel(e).getModel("emphasis.itemStyle"),a=n.get("color"),o=n.get("opacity");if(null==a){var s=Uh(t,e);a=i.color.lift(s,-.4)}null==o&&(o=kh(t,e));var l=Ga.parseColor(a);l[3]*=o,this._barMesh.geometry.setColor(r,l),this._api.getZr().refresh()}}},_downplay:function(e){var t=this._data;if(t){var r=this._barIndexOfData[e];if(!(r<0)){var i=Uh(t,e),n=kh(t,e),a=Ga.parseColor(i);a[3]*=n,this._barMesh.geometry.setColor(r,a),this._api.getZr().refresh()}}},highlight:function(e,t,r,i){this._toggleStatus("highlight",e,t,r,i)},downplay:function(e,t,r,i){this._toggleStatus("downplay",e,t,r,i)},_toggleStatus:function(e,t,r,n,a){var o=t.getData(),s=An(o,a),l=this;null!=s?i.util.each(cc.normalizeToArray(s),(function(t){"highlight"===e?this._highlight(t):this._downplay(t)}),this):o.each((function(t){"highlight"===e?l._highlight(t):l._downplay(t)}))},remove:function(){this.groupGL.removeAll()},dispose:function(){this.groupGL.removeAll()}});(0,i.use)((function(e){e.registerChartView(Dc),e.registerSeriesModel(mc),uc(e),e.registerProcessor((function(e,t){e.eachSeriesByType("bar3d",(function(e){var t=e.getData();t.filterSelf((function(e){return t.hasValue(e)}))}))}))}));const Lc=i.SeriesModel.extend({type:"series.line3D",dependencies:["grid3D"],visualStyleAccessPath:"lineStyle",visualDrawType:"stroke",getInitialData:function(e,t){return fc(this)},formatTooltip:function(e){return dc(this,e)},defaultOption:{coordinateSystem:"cartesian3D",zlevel:-10,grid3DIndex:0,lineStyle:{width:2},animationDurationUpdate:500}});function Pc(e,t,r,i,n,a,o){if(0===n)return!1;var s,l=n;if(o>t+l&&o>i+l||oe+l&&a>r+l||a=0){var g=3*l,_=new vt(this._points[g],this._points[g+1],this._points[g+2]);a.push({dataIndex:l,point:_,pointWorld:_.clone(),target:this._line3DMesh,distance:this._camera.getWorldPosition().dist(_)})}},remove:function(){this.groupGL.removeAll()},dispose:function(){this.groupGL.removeAll()}});(0,i.use)((function(e){e.registerChartView(Nc),e.registerSeriesModel(Lc),e.registerLayout((function(e,t){e.eachSeriesByType("line3D",(function(e){var t=e.getData(),r=e.coordinateSystem;if(r){if("cartesian3D"!==r.type)return;var i=new Float32Array(3*t.count()),n=[],a=[],o=r.dimensions.map((function(t){return e.coordDimToDataDim(t)[0]}));r&&t.each(o,(function(e,t,o,s){n[0]=e,n[1]=t,n[2]=o,r.dataToPoint(n,a),i[3*s]=a[0],i[3*s+1]=a[1],i[3*s+2]=a[2]})),t.setLayout("points",i)}}))}))}));const Ic=i.SeriesModel.extend({type:"series.scatter3D",dependencies:["globe","grid3D","geo3D"],visualStyleAccessPath:"itemStyle",hasSymbolVisual:!0,getInitialData:function(e,t){return fc(this)},getFormattedLabel:function(e,t,r,i){var n=cc.getFormattedLabel(this,e,t,r,i);if(null==n){var a=this.getData(),o=a.dimensions[a.dimensions.length-1];n=a.get(o,e)}return n},formatTooltip:function(e){return dc(this,e)},defaultOption:{coordinateSystem:"cartesian3D",zlevel:-10,progressive:1e5,progressiveThreshold:1e5,grid3DIndex:0,globeIndex:0,symbol:"circle",symbolSize:10,blendMode:"source-over",label:{show:!1,position:"right",distance:5,textStyle:{fontSize:14,color:"#000",backgroundColor:"rgba(255,255,255,0.7)",padding:3,borderRadius:3}},itemStyle:{opacity:.8},emphasis:{label:{show:!0}},animationDurationUpdate:500}});function Rc(e,t,r){(t=t||document.createElement("canvas")).width=e,t.height=e;var i=t.getContext("2d");return r&&r(i),t}var Fc={getMarginByStyle:function(e){var t=e.minMargin||0,r=0;e.stroke&&"none"!==e.stroke&&(r=null==e.lineWidth?1:e.lineWidth);var i=e.shadowBlur||0,n=e.shadowOffsetX||0,a=e.shadowOffsetY||0,o={};return o.left=Math.max(r/2,-n+i,t),o.right=Math.max(r/2,n+i,t),o.top=Math.max(r/2,-a+i,t),o.bottom=Math.max(r/2,a+i,t),o},createSymbolSprite:function(e,t,r,n){var a=function(e,t,r,n){i.util.isArray(t)||(t=[t,t]);var a=Fc.getMarginByStyle(r,void 0),o=t[0]+a.left+a.right,s=t[1]+a.top+a.bottom,l=i.helper.createSymbol(e,0,0,t[0],t[1]),h=Math.max(o,s);l.x=a.left,l.y=a.top,o>s?l.y+=(h-s)/2:l.x+=(h-o)/2;var u=l.getBoundingRect();return l.x-=u.x,l.y-=u.y,l.setStyle(r),l.update(),l.__size=h,l}(e,t,r),o=Fc.getMarginByStyle(r);return{image:Rc(a.__size,n,(function(e){i.innerDrawElementOnCanvas(e,a)})),margin:o}},createSDFFromCanvas:function(e,t,r,i){return Rc(t,i,(function(t){var i=e.getContext("2d").getImageData(0,0,e.width,e.height);t.putImageData(function(e,t,r){var i=t.width,n=t.height,a=e.canvas.width,o=e.canvas.height,s=i/a,l=n/o;function h(e){return e<128?1:-1}function u(e,a){var o=1/0;e=Math.floor(e*s);for(var u=(a=Math.floor(a*l))*i+e,c=h(t.data[4*u]),d=Math.max(a-r,0);d=2e4},doSortVertices:function(e,t){var r=this.indices,i=zc.create();if(!r){r=this.indices=this.vertexCount>65535?new Uint32Array(this.vertexCount):new Uint16Array(this.vertexCount);for(var n=0;n.05);else for(n=0;n<3;n++)this._progressiveQuickSort(3*t+n);this.dirtyIndices()},_simpleSort:function(e){var t=this._zList,r=this.indices;function i(e,r){return t[r]-t[e]}e?Array.prototype.sort.call(r,i):Ih.sort(r,i,0,r.length-1)},_progressiveQuickSort:function(e){var t=this._zList,r=this.indices;this._quickSort=this._quickSort||new Ih,this._quickSort.step(r,(function(e,r){return t[r]-t[e]}),e)}};var Uc=Bo.vec4;Ga.Shader.import("@export ecgl.sdfSprite.vertex\n\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform float elapsedTime : 0;\n\nattribute vec3 position : POSITION;\n\n#ifdef VERTEX_SIZE\nattribute float size;\n#else\nuniform float u_Size;\n#endif\n\n#ifdef VERTEX_COLOR\nattribute vec4 a_FillColor: COLOR;\nvarying vec4 v_Color;\n#endif\n\n#ifdef VERTEX_ANIMATION\nattribute vec3 prevPosition;\nattribute float prevSize;\nuniform float percent : 1.0;\n#endif\n\n\n#ifdef POSITIONTEXTURE_ENABLED\nuniform sampler2D positionTexture;\n#endif\n\nvarying float v_Size;\n\nvoid main()\n{\n\n#ifdef POSITIONTEXTURE_ENABLED\n gl_Position = worldViewProjection * vec4(texture2D(positionTexture, position.xy).xy, -10.0, 1.0);\n#else\n\n #ifdef VERTEX_ANIMATION\n vec3 pos = mix(prevPosition, position, percent);\n #else\n vec3 pos = position;\n #endif\n gl_Position = worldViewProjection * vec4(pos, 1.0);\n#endif\n\n#ifdef VERTEX_SIZE\n#ifdef VERTEX_ANIMATION\n v_Size = mix(prevSize, size, percent);\n#else\n v_Size = size;\n#endif\n#else\n v_Size = u_Size;\n#endif\n\n#ifdef VERTEX_COLOR\n v_Color = a_FillColor;\n #endif\n\n gl_PointSize = v_Size;\n}\n\n@end\n\n@export ecgl.sdfSprite.fragment\n\nuniform vec4 color: [1, 1, 1, 1];\nuniform vec4 strokeColor: [1, 1, 1, 1];\nuniform float smoothing: 0.07;\n\nuniform float lineWidth: 0.0;\n\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n\nvarying float v_Size;\n\nuniform sampler2D sprite;\n\n@import clay.util.srgb\n\nvoid main()\n{\n gl_FragColor = color;\n\n vec4 _strokeColor = strokeColor;\n\n#ifdef VERTEX_COLOR\n gl_FragColor *= v_Color;\n #endif\n\n#ifdef SPRITE_ENABLED\n float d = texture2D(sprite, gl_PointCoord).r;\n gl_FragColor.a *= smoothstep(0.5 - smoothing, 0.5 + smoothing, d);\n\n if (lineWidth > 0.0) {\n float sLineWidth = lineWidth / 2.0;\n\n float outlineMaxValue0 = 0.5 + sLineWidth;\n float outlineMaxValue1 = 0.5 + sLineWidth + smoothing;\n float outlineMinValue0 = 0.5 - sLineWidth - smoothing;\n float outlineMinValue1 = 0.5 - sLineWidth;\n\n if (d <= outlineMaxValue1 && d >= outlineMinValue0) {\n float a = _strokeColor.a;\n if (d <= outlineMinValue1) {\n a = a * smoothstep(outlineMinValue0, outlineMinValue1, d);\n }\n else {\n a = a * smoothstep(outlineMaxValue1, outlineMaxValue0, d);\n }\n gl_FragColor.rgb = mix(gl_FragColor.rgb * gl_FragColor.a, _strokeColor.rgb, a);\n gl_FragColor.a = gl_FragColor.a * (1.0 - a) + a;\n }\n }\n#endif\n\n#ifdef SRGB_DECODE\n gl_FragColor = sRGBToLinear(gl_FragColor);\n#endif\n}\n@end");const kc=Ga.Mesh.extend((function(){var e=new Ga.Geometry({dynamic:!0,attributes:{color:new Ga.Geometry.Attribute("color","float",4,"COLOR"),position:new Ga.Geometry.Attribute("position","float",3,"POSITION"),size:new Ga.Geometry.Attribute("size","float",1),prevPosition:new Ga.Geometry.Attribute("prevPosition","float",3),prevSize:new Ga.Geometry.Attribute("prevSize","float",1)}});Object.assign(e,Gc);var t=new Ga.Material({shader:Ga.createShader("ecgl.sdfSprite"),transparent:!0,depthMask:!1});t.enableTexture("sprite"),t.define("both","VERTEX_COLOR"),t.define("both","VERTEX_SIZE");var r=new Ga.Texture2D({image:document.createElement("canvas"),flipY:!1});return t.set("sprite",r),e.pick=this._pick.bind(this),{geometry:e,material:t,mode:Ga.Mesh.POINTS,sizeScale:1}}),{_pick:function(e,t,r,i,n,a){var o=this._positionNDC;if(o)for(var s=r.viewport,l=2/s.width,h=2/s.height,u=this.geometry.vertexCount-1;u>=0;u--){var c,d=o[2*(c=this.geometry.indices?this.geometry.indices[u]:u)],f=o[2*c+1],p=this.geometry.attributes.size.get(c)/this.sizeScale/2;if(e>d-p*l&&ef-p*h&&t2?(p=this._updateSymbolSprite(e,d,u,c),s.enableTexture("sprite")):s.disableTexture("sprite"),h.position.init(n-i);var m=[];if(f){s.undefine("VERTEX_SIZE"),s.undefine("VERTEX_COLOR");var g=function(e){const t=e.getVisual("style");if(t)return t[e.getVisual("drawType")]}(o),_=function(e){return e.getVisual("style").opacity}(o);Ga.parseColor(g,m),m[3]*=_,s.set({color:m,u_Size:u.maxSize*this._sizeScale})}else s.set({color:[1,1,1,1]}),s.define("VERTEX_SIZE"),s.define("VERTEX_COLOR"),h.size.init(n-i),h.color.init(n-i),this._originalOpacity=new Float32Array(n-i);for(var v=o.getLayout("points"),y=h.position.value,x=0;x1?(o[0]=r.maxSize,o[1]=r.maxSize/r.aspect):(o[1]=r.maxSize,o[0]=r.maxSize*r.aspect),o[0]=o[0]||1,o[1]=o[1]||1,this._symbolType===r.type&&(a=o,(n=this._symbolSize)&&a&&n[0]===a[0]&&n[1]===a[1])&&this._lineWidth===t.lineWidth||(Bc.createSymbolSprite(r.type,o,{fill:"#fff",lineWidth:t.lineWidth,stroke:"transparent",shadowColor:"transparent",minMargin:Math.min(o[0]/2,10)},this._spriteImageCanvas),Bc.createSDFFromCanvas(this._spriteImageCanvas,Math.min(this._spriteImageCanvas.width,32),20,this._mesh.material.get("sprite").image),this._symbolType=r.type,this._symbolSize=o,this._lineWidth=t.lineWidth),this._spriteImageCanvas.width/r.maxSize*i},_updateMaterial:function(e,t){var r="lighter"===e.get("blendMode")?Ga.additiveBlend:null,i=this._mesh.material;i.blend=r,i.set("lineWidth",t.lineWidth/20);var n=Ga.parseColor(t.stroke);i.set("strokeColor",n),i.transparent=!0,i.depthMask=!1,i.depthTest=!this.is2D,i.sortVertices=!this.is2D},_updateLabelBuilder:function(e,t,r){var i=e.getData(),n=this._mesh.geometry,a=n.attributes.position.value,o=(t=this._startDataIndex,this._mesh.sizeScale);this._labelsBuilder.updateData(i,t,r),this._labelsBuilder.getLabelPosition=function(e,r,i){var n=3*(e-t);return[a[n],a[n+1],a[n+2]]},this._labelsBuilder.getLabelDistance=function(e,r,i){return n.attributes.size.get(e-t)/o/2+i},this._labelsBuilder.updateLabels()},_updateAnimation:function(e){Ga.updateVertexAnimation([["prevPosition","position"],["prevSize","size"]],this._prevMesh,this._mesh,e)},_updateHandler:function(e,t,r){var i,n=e.getData(),a=this._mesh,o=this,s=-1,l=e.coordinateSystem&&"cartesian3D"===e.coordinateSystem.type;l&&(i=e.coordinateSystem.model),a.seriesIndex=e.seriesIndex,a.off("mousemove"),a.off("mouseout"),a.on("mousemove",(function(t){var h=t.vertexIndex+o._startDataIndex;h!==s&&(this.highlightOnMouseover&&(this.downplay(n,s),this.highlight(n,h),this._labelsBuilder.updateLabels([h])),l&&r.dispatchAction({type:"grid3DShowAxisPointer",value:[n.get(e.coordDimToDataDim("x")[0],h),n.get(e.coordDimToDataDim("y")[0],h),n.get(e.coordDimToDataDim("z")[0],h)],grid3DIndex:i.componentIndex})),a.dataIndex=h,s=h}),this),a.on("mouseout",(function(e){var t=e.vertexIndex+o._startDataIndex;this.highlightOnMouseover&&(this.downplay(n,t),this._labelsBuilder.updateLabels()),s=-1,a.dataIndex=-1,l&&r.dispatchAction({type:"grid3DHideAxisPointer",grid3DIndex:i.componentIndex})}),this)},updateLayout:function(e,t,r){var i=e.getData();if(this._mesh){var n=this._mesh.geometry.attributes.position.value,a=i.getLayout("points");if(this.is2D)for(var o=0;othis._endDataIndex||tthis._endDataIndex||t 1.0 || v_Percent < 0.0) {\n discard;\n }\n\n float fade = v_Percent;\n\n#ifdef SRGB_DECODE\n gl_FragColor = sRGBToLinear(color * v_Color);\n#else\n gl_FragColor = color * v_Color;\n#endif\n\n @import ecgl.common.wireframe.fragmentMain\n\n if (v_Percent > (1.0 - v_SpotPercent)) {\n gl_FragColor.rgb *= spotIntensity;\n }\n\n gl_FragColor.a *= fade;\n}\n\n@end");const cd=Ga.Mesh.extend((function(){var e=new Ga.Material({shader:new Ga.Shader(Ga.Shader.source("ecgl.trail2.vertex"),Ga.Shader.source("ecgl.trail2.fragment")),transparent:!0,depthMask:!1}),t=new ko({dynamic:!0});return t.createAttribute("dist","float",1),t.createAttribute("distAll","float",1),t.createAttribute("start","float",1),{geometry:t,material:e,culling:!1,$ignorePicking:!0}}),{updateData:function(e,t,r){var i=e.hostModel,n=this.geometry,a=i.getModel("effect"),o=a.get("trailWidth")*t.getDevicePixelRatio(),s=a.get("trailLength"),l=i.get("effect.constantSpeed"),h=1e3*i.get("effect.period"),u=null!=l;u?this.material.set("speed",l/1e3):this.material.set("period",h),this.material[u?"define":"undefine"]("vertex","CONSTANT_SPEED");var c=i.get("polyline");n.trailLength=s,this.material.set("trailLength",s),n.resetOffset(),["position","positionPrev","positionNext"].forEach((function(e){n.attributes[e].value=r.attributes[e].value})),["dist","distAll","start","offset","color"].forEach((function(e){n.attributes[e].init(n.vertexCount)})),n.indices=r.indices;var d=[],f=a.get("trailColor"),p=a.get("trailOpacity"),m=null!=f,g=null!=p;this.updateWorldTransform();var _=this.worldTransform.x.len(),v=this.worldTransform.y.len(),y=this.worldTransform.z.len(),x=0,b=0;e.each((function(t){var i=e.getItemLayout(t),a=g?p:kh(e,t),s=Uh(e,t);null==a&&(a=1),(d=Ga.parseColor(m?f:s,d))[3]*=a;for(var l=c?r.getPolylineVertexCount(i):r.getCubicCurveVertexCount(i[0],i[1],i[2],i[3]),w=0,T=[],S=[],M=x;Mx&&(w+=ud.dist(T,S)),n.attributes.dist.set(M,w),ud.copy(S,T);b=Math.max(b,w);var A=Math.random()*(u?w:h);for(M=x;M0?1:-1)*o/2),n.attributes.color.set(M,d);x+=l})),this.material.set("spotSize",.1*b*s),this.material.set("spotIntensity",a.get("spotIntensity")),n.dirty()},setAnimationTime:function(e){this.material.set("time",e)}});Ga.Shader.import(hs);const dd=i.ChartView.extend({type:"lines3D",__ecgl__:!0,init:function(e,t){this.groupGL=new Ga.Node,this._meshLinesMaterial=new Ga.Material({shader:Ga.createShader("ecgl.meshLines3D"),transparent:!0,depthMask:!1}),this._linesMesh=new Ga.Mesh({geometry:new ko,material:this._meshLinesMaterial,$ignorePicking:!0}),this._trailMesh=new cd},render:function(e,t,r){this.groupGL.add(this._linesMesh);var i=e.coordinateSystem,n=e.getData();if(i&&i.viewGL){i.viewGL.add(this.groupGL),this._updateLines(e,t,r);var a=i.viewGL.isLinearSpace()?"define":"undefine";this._linesMesh.material[a]("fragment","SRGB_DECODE"),this._trailMesh.material[a]("fragment","SRGB_DECODE")}var o=this._trailMesh;if(o.stopAnimation(),e.get("effect.show")){this.groupGL.add(o),o.updateData(n,r,this._linesMesh.geometry),o.__time=o.__time||0;var s=36e5;this._curveEffectsAnimator=o.animate("",{loop:!0}).when(s,{__time:s}).during((function(){o.setAnimationTime(o.__time)})).start()}else this.groupGL.remove(o),this._curveEffectsAnimator=null;this._linesMesh.material.blend=this._trailMesh.material.blend="lighter"===e.get("blendMode")?Ga.additiveBlend:null},pauseEffect:function(){this._curveEffectsAnimator&&this._curveEffectsAnimator.pause()},resumeEffect:function(){this._curveEffectsAnimator&&this._curveEffectsAnimator.resume()},toggleEffect:function(){var e=this._curveEffectsAnimator;e&&(e.isPaused()?e.resume():e.pause())},_updateLines:function(e,t,r){var i=e.getData(),n=e.coordinateSystem,a=this._linesMesh.geometry,o=e.get("polyline");a.expandLine=!0;var s=function(e){return null!=e.radius?e.radius:null!=e.size?Math.max(e.size[0],e.size[1],e.size[2]):100}(n);a.segmentScale=s/20;var l="lineStyle.width".split("."),h=r.getDevicePixelRatio(),u=0;i.each((function(e){var t=i.getItemModel(e).get(l);null==t&&(t=1),i.setItemVisual(e,"lineWidth",t),u=Math.max(t,u)})),a.useNativeLine=!1;var c=0,d=0;i.each((function(e){var t=i.getItemLayout(e);o?(c+=a.getPolylineVertexCount(t),d+=a.getPolylineTriangleCount(t)):(c+=a.getCubicCurveVertexCount(t[0],t[1],t[2],t[3]),d+=a.getCubicCurveTriangleCount(t[0],t[1],t[2],t[3]))})),a.setVertexCount(c),a.setTriangleCount(d),a.resetOffset();var f=[];i.each((function(e){var t=i.getItemLayout(e),r=Uh(i,e),n=kh(i,e),s=i.getItemVisual(e,"lineWidth")*h;null==n&&(n=1),(f=Ga.parseColor(r,f))[3]*=n,o?a.addPolyline(t,f,s):a.addCubicCurve(t[0],t[1],t[2],t[3],f,s)})),a.dirty()},remove:function(){this.groupGL.removeAll()},dispose:function(){this.groupGL.removeAll()}});function fd(e,t){for(var r=[],i=0;i0;this._updateSurfaceMesh(this._surfaceMesh,e,u,f);var p=this._surfaceMesh.material;f?(p.define("WIREFRAME_QUAD"),p.set("wireframeLineWidth",d),p.set("wireframeLineColor",Ga.parseColor(c.get("lineStyle.color")))):p.undefine("WIREFRAME_QUAD"),this._initHandler(e,r),this._updateAnimation(e)},_updateAnimation:function(e){Ga.updateVertexAnimation([["prevPosition","position"],["prevNormal","normal"]],this._prevSurfaceMesh,this._surfaceMesh,e)},_createSurfaceMesh:function(){var e=new Ga.Mesh({geometry:new Ga.Geometry({dynamic:!0,sortTriangles:!0}),shadowDepthMaterial:new Ga.Material({shader:new Ga.Shader(Ga.Shader.source("ecgl.sm.depth.vertex"),Ga.Shader.source("ecgl.sm.depth.fragment"))}),culling:!1,renderOrder:10,renderNormal:!0});return e.geometry.createAttribute("barycentric","float",4),e.geometry.createAttribute("prevPosition","float",3),e.geometry.createAttribute("prevNormal","float",3),Object.assign(e.geometry,Gh),e},_initHandler:function(e,t){var r=e.getData(),i=this._surfaceMesh,n=e.coordinateSystem;i.seriesIndex=e.seriesIndex;var a=-1;i.off("mousemove"),i.off("mouseout"),i.on("mousemove",(function(e){var o=function(e,t){for(var r=1/0,n=-1,a=[],o=0;o=0){var s=[];i.geometry.attributes.position.get(o,s);for(var l=n.pointToData(s),h=1/0,u=-1,c=[],d=0;d65535?Uint32Array:Uint16Array)((p-1)*(m-1)*6),w=function(e,t,r){r[1]=e*m+t,r[0]=e*m+t+1,r[3]=(e+1)*m+t+1,r[2]=(e+1)*m+t},T=!1;if(l){var S=[],M=[],A=0;g?u.init(n.vertexCount):u.value=null;for(var E=[[],[],[]],C=[],D=[],L=yd.create(),P=function(e,t,r){var i=3*t;return r[0]=e[i],r[1]=e[i+1],r[2]=e[i+2],r},O=new Float32Array(o.length),N=new Float32Array(o.length/3*4),I=0;I0;){if(Math.floor(s/u)===s/u)return[u,s/u];u--}return[u=Math.floor(Math.sqrt(s)),u]},dispose:function(){this.groupGL.removeAll()},remove:function(){this.groupGL.removeAll()}});function bd(e,t){for(var r=[],i=0;i=0&&e.call(t,r[n],n)},e.prototype.eachEdge=function(e,t){for(var r=this.edges,i=r.length,n=0;n=0&&r[n].node1.dataIndex>=0&&r[n].node2.dataIndex>=0&&e.call(t,r[n],n)},e.prototype.breadthFirstTraverse=function(e,t,r,i){if(t instanceof Od||(t=this._nodesMap[Ld(t)]),t){for(var n="out"===r?"outEdges":"in"===r?"inEdges":"edges",a=0;a=0&&r.node2.dataIndex>=0})),n=0,a=i.length;n=0&&this[e][t].setItemVisual(this.dataIndex,r,i)},getVisual:function(r){return this[e][t].getItemVisual(this.dataIndex,r)},setLayout:function(r,i){this.dataIndex>=0&&this[e][t].setItemLayout(this.dataIndex,r,i)},getLayout:function(){return this[e][t].getItemLayout(this.dataIndex)},getGraphicEl:function(){return this[e][t].getItemGraphicEl(this.dataIndex)},getRawIndex:function(){return this[e][t].getRawIndex(this.dataIndex)}}}po(Od,Id("hostGraph","data")),po(Nd,Id("hostGraph","edgeData"));const Rd=Pd;var Fd=To();function Bd(e,t){if(Fd(this).mainData===this){var r=fo({},Fd(this).datas);r[this.dataType]=t,Vd(t,r,e)}else Hd(t,this.dataType,Fd(this).mainData,e);return t}function zd(e,t){return e.struct&&e.struct.update(),t}function Gd(e,t){return mo(Fd(t).datas,(function(r,i){r!==t&&Hd(r.cloneShallow(),i,t,e)})),t}function Ud(e){var t=Fd(this).mainData;return null==e||null==t?t:Fd(t).datas[e]}function kd(){var e=Fd(this).mainData;return null==e?[{data:e}]:go(_o(Fd(e).datas),(function(t){return{type:t,data:Fd(e).datas[t]}}))}function Vd(e,t,r){Fd(e).datas={},mo(t,(function(t,i){Hd(t,i,e,r)}))}function Hd(e,t,r,i){Fd(r).datas[t]=e,Fd(e).mainData=r,e.dataType=t,i.struct&&(e[i.structAttr]=i.struct,i.struct[i.datasAttr[t]]=e),e.getLinkedData=Ud,e.getLinkedDataAll=kd}var Wd=i.SeriesModel.extend({type:"series.graphGL",visualStyleAccessPath:"itemStyle",hasSymbolVisual:!0,init:function(e){Wd.superApply(this,"init",arguments),this.legendDataProvider=function(){return this._categoriesData},this._updateCategoriesData()},mergeOption:function(e){Wd.superApply(this,"mergeOption",arguments),this._updateCategoriesData()},getFormattedLabel:function(e,t,r,i){var n=cc.getFormattedLabel(this,e,t,r,i);if(null==n){var a=this.getData(),o=a.dimensions[a.dimensions.length-1];n=a.get(o,e)}return n},getInitialData:function(e,t){var r=e.edges||e.links||[],n=e.data||e.nodes||[],a=this;if(n&&r)return function(e,t,r,n,a){for(var o=new Rd(!0),s=0;s "+p)),c++)}var m=i.helper.createDimensions(e,{coordDimensions:["value"]});(l=new i.List(m,r)).initData(e);var g,_,v,y=new i.List(["value"],r);return y.initData(u,h),a&&a(l,y),_=(g={mainData:l,struct:o,structAttr:"graph",datas:{node:l,edge:y},datasAttr:{node:"data",edge:"edgeData"}}).mainData,(v=g.datas)||(v={main:_},g.datasAttr={main:"data"}),g.datas=g.mainData=null,Vd(_,v,g),mo(v,(function(e){mo(_.TRANSFERABLE_METHODS,(function(t){e.wrapMethod(t,vo(Bd,g))}))})),_.wrapMethod("cloneShallow",vo(Gd,g)),mo(_.CHANGABLE_METHODS,(function(e){_.wrapMethod(e,vo(zd,g))})),function(e,t){if(!e)throw new Error(void 0)}(v[_.dataType]===_),o.update(),o}(n,r,this,0,(function(e,r){e.wrapMethod("getItemModel",(function(e){const t=a._categoriesModels[e.getShallow("category")];return t&&(t.parentModel=e.parentModel,e.parentModel=t),e}));const i=t.getModel([]).getModel;function n(e,t){const r=i.call(this,e,t);return r.resolveParentPath=o,r}function o(e){if(e&&("label"===e[0]||"label"===e[1])){const t=e.slice();return"label"===e[0]?t[0]="edgeLabel":"label"===e[1]&&(t[1]="edgeLabel"),t}return e}r.wrapMethod("getItemModel",(function(e){return e.resolveParentPath=o,e.getModel=n,e}))})).data},getGraph:function(){return this.getData().graph},getEdgeData:function(){return this.getGraph().edgeData},getCategoriesData:function(){return this._categoriesData},formatTooltip:function(e,t,r){if("edge"===r){var n=this.getData(),a=this.getDataParams(e,r),o=n.graph.getEdgeByIndex(e),s=n.getName(o.node1.dataIndex),l=n.getName(o.node2.dataIndex),h=[];return null!=s&&h.push(s),null!=l&&h.push(l),h=i.format.encodeHTML(h.join(" > ")),a.value&&(h+=" : "+i.format.encodeHTML(a.value)),h}return Wd.superApply(this,"formatTooltip",arguments)},_updateCategoriesData:function(){var e=(this.option.categories||[]).map((function(e){return null!=e.value?e:Object.assign({value:0},e)})),t=new i.List(["value"],this);t.initData(e),this._categoriesData=t,this._categoriesModels=t.mapArray((function(e){return t.getItemModel(e,!0)}))},setView:function(e){null!=e.zoom&&(this.option.zoom=e.zoom),null!=e.offset&&(this.option.offset=e.offset)},setNodePosition:function(e){for(var t=0;t65535?this.indices instanceof Uint16Array&&(this.indices=new Uint32Array(this.indices)):this.indices instanceof Uint32Array&&(this.indices=new Uint16Array(this.indices)))},setTriangleCount:function(e){this.triangleCount!==e&&(this.indices=0===e?null:this.vertexCount>65535?new Uint32Array(3*e):new Uint16Array(3*e))},_getCubicCurveApproxStep:function(e,t,r,i){return 1/(Xd.dist(e,t)+Xd.dist(r,t)+Xd.dist(i,r)+1)*this.segmentScale},getCubicCurveVertexCount:function(e,t,r,i){var n=this._getCubicCurveApproxStep(e,t,r,i),a=Math.ceil(1/n);return this.useNativeLine?2*a:2*a+2},getCubicCurveTriangleCount:function(e,t,r,i){var n=this._getCubicCurveApproxStep(e,t,r,i),a=Math.ceil(1/n);return this.useNativeLine?0:2*a},getLineVertexCount:function(){return this.getPolylineVertexCount(qd)},getLineTriangleCount:function(){return this.getPolylineTriangleCount(qd)},getPolylineVertexCount:function(e){var t;return t="number"==typeof e?e:"number"!=typeof e[0]?e.length:e.length/2,this.useNativeLine?2*(t-1):2*(t-1)+2},getPolylineTriangleCount:function(e){var t;return t="number"==typeof e?e:"number"!=typeof e[0]?e.length:e.length/2,this.useNativeLine?0:2*(t-1)},addCubicCurve:function(e,t,r,i,n,a){null==a&&(a=1);var o=e[0],s=e[1],l=t[0],h=t[1],u=r[0],c=r[1],d=i[0],f=i[1],p=this._getCubicCurveApproxStep(e,t,r,i),m=p*p,g=m*p,_=3*p,v=3*m,y=6*m,x=6*g,b=o-2*l+u,w=s-2*h+c,T=3*(l-u)-o+d,S=3*(h-c)-s+f,M=o,A=s,E=(l-o)*_+b*v+T*g,C=(h-s)*_+w*v+S*g,D=b*y+T*x,L=w*y+S*x,P=T*x,O=S*x,N=0,I=0,R=Math.ceil(1/p),F=new Float32Array(3*(R+1)),B=(F=[],0);for(I=0;I1&&(M=E>0?Math.min(M,d):Math.max(M,d),A=C>0?Math.min(A,f):Math.max(A,f));this.addPolyline(F,n,a)},addLine:function(e,t,r,i){this.addPolyline([e,t],r,i)},addPolyline:function(){var e=Xd.create(),t=Xd.create(),r=Xd.create(),i=Xd.create(),n=[],a=[],o=[];return function(s,l,h,u,c){if(s.length){var d="number"!=typeof s[0];if(null==c&&(c=d?s.length:s.length/2),!(c<2)){null==u&&(u=0),null==h&&(h=1),this._itemVertexOffsets.push(this._vertexOffset);for(var f,p=d?"number"!=typeof l[0]:l.length/4===c,m=this.attributes.position,g=this.attributes.color,_=this.attributes.offset,v=this.attributes.normal,y=this.indices,x=this._vertexOffset,b=0;b1&&(m.copy(x,x-1),g.copy(x,x-1),x++);else{var S;if(b0){Xd.sub(e,n,o),Xd.sub(t,a,n),Xd.normalize(e,e),Xd.normalize(t,t),Xd.add(i,e,t),Xd.normalize(i,i);var M=h/2*Math.min(1/Xd.dot(e,i),2);r[0]=-i[1],r[1]=i[0],S=M}else Xd.sub(e,a,n),Xd.normalize(e,e),r[0]=-e[1],r[1]=e[0],S=h/2;else Xd.sub(e,n,o),Xd.normalize(e,e),r[0]=-e[1],r[1]=e[0],S=h/2;v.set(x,r),v.set(x+1,r),_.set(x,S),_.set(x+1,-S),Xd.copy(o,n),m.set(x,n),m.set(x+1,n),g.set(x,f),g.set(x+1,f),x+=2}if(this.useNativeLine)g.set(x,f),m.set(x,n),x++;else if(b>0){var A=3*this._faceOffset;(y=this.indices)[A]=x-4,y[A+1]=x-3,y[A+2]=x-2,y[A+3]=x-3,y[A+4]=x-1,y[A+5]=x-2,this._faceOffset+=2}}this._vertexOffset=x}}}}(),setItemColor:function(e,t){for(var r=this._itemVertexOffsets[e],i=e 0.0) {\n float factor = 0.0;\n if (preventOverlap) {\n float d = sqrt(d2);\n d = d - n0.w - n1.w;\n if (d > 0.0) {\n factor = scaling * n0.z * n1.z / (d * d);\n }\n else if (d < 0.0) {\n factor = scaling * 100.0 * n0.z * n1.z;\n }\n }\n else {\n factor = scaling * n0.z * n1.z / d2;\n }\n force += dir * factor;\n }\n }\n\n vec2 dir = gravityCenter - n0.xy;\n float d = 1.0;\n if (!strongGravityMode) {\n d = length(dir);\n }\n\n force += dir * n0.z * gravity / (d + 1.0);\n\n gl_FragColor = vec4(force, 0.0, 1.0);\n}\n@end\n\n@export ecgl.forceAtlas2.updateEdgeAttraction.vertex\n\nattribute vec2 node1;\nattribute vec2 node2;\nattribute float weight;\n\nuniform sampler2D positionTex;\nuniform float edgeWeightInfluence;\nuniform bool preventOverlap;\nuniform bool linLogMode;\n\nuniform vec2 windowSize: WINDOW_SIZE;\n\nvarying vec2 v_Force;\n\nvoid main() {\n\n vec4 n0 = texture2D(positionTex, node1);\n vec4 n1 = texture2D(positionTex, node2);\n\n vec2 dir = n1.xy - n0.xy;\n float d = length(dir);\n float w;\n if (edgeWeightInfluence == 0.0) {\n w = 1.0;\n }\n else if (edgeWeightInfluence == 1.0) {\n w = weight;\n }\n else {\n w = pow(weight, edgeWeightInfluence);\n }\n vec2 offset = vec2(1.0 / windowSize.x, 1.0 / windowSize.y);\n vec2 scale = vec2((windowSize.x - 1.0) / windowSize.x, (windowSize.y - 1.0) / windowSize.y);\n vec2 pos = node1 * scale * 2.0 - 1.0;\n gl_Position = vec4(pos + offset, 0.0, 1.0);\n gl_PointSize = 1.0;\n\n float factor;\n if (preventOverlap) {\n d = d - n1.w - n0.w;\n }\n if (d <= 0.0) {\n v_Force = vec2(0.0);\n return;\n }\n\n if (linLogMode) {\n factor = w * log(d) / d;\n }\n else {\n factor = w;\n }\n v_Force = dir * factor;\n}\n@end\n\n@export ecgl.forceAtlas2.updateEdgeAttraction.fragment\n\nvarying vec2 v_Force;\n\nvoid main() {\n gl_FragColor = vec4(v_Force, 0.0, 0.0);\n}\n@end\n\n@export ecgl.forceAtlas2.calcWeightedSum.vertex\n\nattribute vec2 node;\n\nvarying vec2 v_NodeUv;\n\nvoid main() {\n\n v_NodeUv = node;\n gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n gl_PointSize = 1.0;\n}\n@end\n\n@export ecgl.forceAtlas2.calcWeightedSum.fragment\n\nvarying vec2 v_NodeUv;\n\nuniform sampler2D positionTex;\nuniform sampler2D forceTex;\nuniform sampler2D forcePrevTex;\n\nvoid main() {\n vec2 force = texture2D(forceTex, v_NodeUv).rg;\n vec2 forcePrev = texture2D(forcePrevTex, v_NodeUv).rg;\n\n float mass = texture2D(positionTex, v_NodeUv).z;\n float swing = length(force - forcePrev) * mass;\n float traction = length(force + forcePrev) * 0.5 * mass;\n\n gl_FragColor = vec4(swing, traction, 0.0, 0.0);\n}\n@end\n\n@export ecgl.forceAtlas2.calcGlobalSpeed\n\nuniform sampler2D globalSpeedPrevTex;\nuniform sampler2D weightedSumTex;\nuniform float jitterTolerence;\n\nvoid main() {\n vec2 weightedSum = texture2D(weightedSumTex, vec2(0.5)).xy;\n float prevGlobalSpeed = texture2D(globalSpeedPrevTex, vec2(0.5)).x;\n float globalSpeed = jitterTolerence * jitterTolerence\n * weightedSum.y / weightedSum.x;\n if (prevGlobalSpeed > 0.0) {\n globalSpeed = min(globalSpeed / prevGlobalSpeed, 1.5) * prevGlobalSpeed;\n }\n gl_FragColor = vec4(globalSpeed, 0.0, 0.0, 1.0);\n}\n@end\n\n@export ecgl.forceAtlas2.updatePosition\n\nuniform sampler2D forceTex;\nuniform sampler2D forcePrevTex;\nuniform sampler2D positionTex;\nuniform sampler2D globalSpeedTex;\n\nvarying vec2 v_Texcoord;\n\nvoid main() {\n vec2 force = texture2D(forceTex, v_Texcoord).xy;\n vec2 forcePrev = texture2D(forcePrevTex, v_Texcoord).xy;\n vec4 node = texture2D(positionTex, v_Texcoord);\n\n float globalSpeed = texture2D(globalSpeedTex, vec2(0.5)).r;\n float swing = length(force - forcePrev);\n float speed = 0.1 * globalSpeed / (0.1 + globalSpeed * sqrt(swing));\n\n float df = length(force);\n if (df > 0.0) {\n speed = min(df * speed, 10.0) / df;\n\n gl_FragColor = vec4(node.xy + speed * force, node.zw);\n }\n else {\n gl_FragColor = node;\n }\n}\n@end\n\n@export ecgl.forceAtlas2.edges.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\n\nattribute vec2 node;\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n\nuniform sampler2D positionTex;\n\nvoid main()\n{\n gl_Position = worldViewProjection * vec4(\n texture2D(positionTex, node).xy, -10.0, 1.0\n );\n v_Color = a_Color;\n}\n@end\n\n@export ecgl.forceAtlas2.edges.fragment\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\nvarying vec4 v_Color;\nvoid main() {\n gl_FragColor = color * v_Color;\n}\n@end");var Kd={repulsionByDegree:!0,linLogMode:!1,strongGravityMode:!1,gravity:1,scaling:1,edgeWeightInfluence:1,jitterTolerence:.1,preventOverlap:!1,dissuadeHubs:!1,gravityCenter:null};function Qd(e){var t={type:Ga.Texture.FLOAT,minFilter:Ga.Texture.NEAREST,magFilter:Ga.Texture.NEAREST};this._positionSourceTex=new Ga.Texture2D(t),this._positionSourceTex.flipY=!1,this._positionTex=new Ga.Texture2D(t),this._positionPrevTex=new Ga.Texture2D(t),this._forceTex=new Ga.Texture2D(t),this._forcePrevTex=new Ga.Texture2D(t),this._weightedSumTex=new Ga.Texture2D(t),this._weightedSumTex.width=this._weightedSumTex.height=1,this._globalSpeedTex=new Ga.Texture2D(t),this._globalSpeedPrevTex=new Ga.Texture2D(t),this._globalSpeedTex.width=this._globalSpeedTex.height=1,this._globalSpeedPrevTex.width=this._globalSpeedPrevTex.height=1,this._nodeRepulsionPass=new pn({fragment:Ga.Shader.source("ecgl.forceAtlas2.updateNodeRepulsion")}),this._positionPass=new pn({fragment:Ga.Shader.source("ecgl.forceAtlas2.updatePosition")}),this._globalSpeedPass=new pn({fragment:Ga.Shader.source("ecgl.forceAtlas2.calcGlobalSpeed")}),this._copyPass=new pn({fragment:Ga.Shader.source("clay.compositor.output")});var r=function(e){e.blendEquation(e.FUNC_ADD),e.blendFunc(e.ONE,e.ONE)};this._edgeForceMesh=new Ga.Mesh({geometry:new Ga.Geometry({attributes:{node1:new Ga.Geometry.Attribute("node1","float",2),node2:new Ga.Geometry.Attribute("node2","float",2),weight:new Ga.Geometry.Attribute("weight","float",1)},dynamic:!0,mainAttribute:"node1"}),material:new Ga.Material({transparent:!0,shader:Ga.createShader("ecgl.forceAtlas2.updateEdgeAttraction"),blend:r,depthMask:!1,depthText:!1}),mode:Ga.Mesh.POINTS}),this._weightedSumMesh=new Ga.Mesh({geometry:new Ga.Geometry({attributes:{node:new Ga.Geometry.Attribute("node","float",2)},dynamic:!0,mainAttribute:"node"}),material:new Ga.Material({transparent:!0,shader:Ga.createShader("ecgl.forceAtlas2.calcWeightedSum"),blend:r,depthMask:!1,depthText:!1}),mode:Ga.Mesh.POINTS}),this._framebuffer=new zi({depthBuffer:!1}),this._dummyCamera=new Ga.OrthographicCamera({left:-1,right:1,top:1,bottom:-1,near:0,far:100}),this._globalSpeed=0}Qd.prototype.updateOption=function(e){for(var t in Kd)this[t]=Kd[t];var r=this._nodes.length;if(this.jitterTolerence=r>5e4?10:r>5e3?1:.1,this.scaling=r>100?2:10,e)for(var t in Kd)null!=e[t]&&(this[t]=e[t]);if(this.repulsionByDegree)for(var i=this._positionSourceTex.pixels,n=0;ne},Qd.prototype._swapTexture=function(){var e=this._positionPrevTex;this._positionPrevTex=this._positionTex,this._positionTex=e,e=this._forcePrevTex,this._forcePrevTex=this._forceTex,this._forceTex=e,e=this._globalSpeedPrevTex,this._globalSpeedPrevTex=this._globalSpeedTex,this._globalSpeedTex=e},Qd.prototype._initFromSource=function(e){this._framebuffer.attach(this._positionPrevTex),this._framebuffer.bind(e),this._copyPass.setUniform("texture",this._positionSourceTex),this._copyPass.render(e),e.gl.clearColor(0,0,0,0),this._framebuffer.attach(this._forcePrevTex),e.gl.clear(e.gl.COLOR_BUFFER_BIT),this._framebuffer.attach(this._globalSpeedPrevTex),e.gl.clear(e.gl.COLOR_BUFFER_BIT),this._framebuffer.unbind(e)},Qd.prototype._resize=function(e,t){["_positionSourceTex","_positionTex","_positionPrevTex","_forceTex","_forcePrevTex"].forEach((function(r){this[r].width=e,this[r].height=t,this[r].dirty()}),this)},Qd.prototype.dispose=function(e){this._framebuffer.dispose(e),this._copyPass.dispose(e),this._nodeRepulsionPass.dispose(e),this._positionPass.dispose(e),this._globalSpeedPass.dispose(e),this._edgeForceMesh.geometry.dispose(e),this._weightedSumMesh.geometry.dispose(e),this._positionSourceTex.dispose(e),this._positionTex.dispose(e),this._positionPrevTex.dispose(e),this._forceTex.dispose(e),this._forcePrevTex.dispose(e),this._weightedSumTex.dispose(e),this._globalSpeedTex.dispose(e),this._globalSpeedPrevTex.dispose(e)};const Jd=Qd;var $d=function(){var e=function(){return new Float32Array(2)},t=function(e,t){var r=t[0]-e[0],i=t[1]-e[1];return Math.sqrt(r*r+i*i)},r=function(e){var t=e[0],r=e[1];return Math.sqrt(t*t+r*r)},i=function(e,t,r,i){return e[0]=t[0]+r[0]*i,e[1]=t[1]+r[1]*i,e},n=function(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e},a=function(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e},o=function(e,t,r){return e[0]=t,e[1]=r,e};function s(){this.subRegions=[],this.nSubRegions=0,this.node=null,this.mass=0,this.centerOfMass=null,this.bbox=new Float32Array(4),this.size=0}var l=s.prototype;function h(){this.position=new Float32Array(2),this.force=e(),this.forcePrev=e(),this.mass=1,this.inDegree=0,this.outDegree=0}function u(e,t){this.source=e,this.target=t,this.weight=1}function c(){this.autoSettings=!0,this.barnesHutOptimize=!0,this.barnesHutTheta=1.5,this.repulsionByDegree=!0,this.linLogMode=!1,this.strongGravityMode=!1,this.gravity=1,this.scaling=1,this.edgeWeightInfluence=1,this.jitterTolerence=.1,this.preventOverlap=!1,this.dissuadeHubs=!1,this.rootRegion=new s,this.rootRegion.centerOfMass=e(),this.nodes=[],this.edges=[],this.bbox=new Float32Array(4),this.gravityCenter=null,this._massArr=null,this._swingingArr=null,this._sizeArr=null,this._globalSpeed=0}l.beforeUpdate=function(){for(var e=0;e=e&&this.bbox[1]<=t&&this.bbox[3]>=t},l.setBBox=function(e,t,r,i){this.bbox[0]=e,this.bbox[1]=t,this.bbox[2]=r,this.bbox[3]=i,this.size=(r-e+i-t)/2},l._newSubRegion=function(){var e=this.subRegions[this.nSubRegions];return e||(e=new s,this.subRegions[this.nSubRegions]=e),this.nSubRegions++,e},l._addNodeToSubRegion=function(e){var t=this.findSubRegion(e.position[0],e.position[1]),r=this.bbox;if(!t){var i=(r[0]+r[2])/2,n=(r[1]+r[3])/2,a=(r[2]-r[0])/2,o=(r[3]-r[1])/2,s=e.position[0]>=i?1:0,l=e.position[1]>=n?1:0;(t=this._newSubRegion()).setBBox(s*a+r[0],l*o+r[1],(s+1)*a+r[0],(l+1)*o+r[1])}t.addNode(e)},l._updateCenterOfMass=function(e){null==this.centerOfMass&&(this.centerOfMass=new Float32Array(2));var t=this.centerOfMass[0]*this.mass,r=this.centerOfMass[1]*this.mass;t+=e.position[0]*e.mass,r+=e.position[1]*e.mass,this.mass+=e.mass,this.centerOfMass[0]=t/this.mass,this.centerOfMass[1]=r/this.mass};var d=c.prototype;d.initNodes=function(e,t,r){var i=t.length;this.nodes.length=0;for(var n=void 0!==r,a=0;a0&&(this.strongGravityMode?this.applyNodeStrongGravity(c):this.applyNodeGravity(c))}for(h=0;h0&&(_=Math.min(_/this._globalSpeed,1.5)*this._globalSpeed),this._globalSpeed=_,h=0;h0&&(y=Math.min(x*y,10)/x,i(u.position,u.position,u.force,y))}},d.applyRegionToNodeRepulsion=function(){var t=e();return function(e,r){if(e.node)this.applyNodeToNodeRepulsion(e.node,r,!0);else{a(t,r.position,e.centerOfMass);var n=t[0]*t[0]+t[1]*t[1];if(n>this.barnesHutTheta*e.size*e.size){var o=this.scaling*r.mass*e.mass/n;i(r.force,r.force,t,o)}else for(var s=0;s0)s=this.scaling*e.mass*r.mass/(l*l);else{if(!(l<0))return;s=100*this.scaling*e.mass*r.mass}}else s=this.scaling*e.mass*r.mass/o;i(e.force,e.force,t,s),i(r.force,r.force,t,-s)}}}}(),d.applyEdgeAttraction=function(){var t=e();return function(e){var n=e.source,o=e.target;a(t,n.position,o.position);var s,l,h=r(t);s=0===this.edgeWeightInfluence?1:1===this.edgeWeightInfluence?e.weight:Math.pow(e.weight,this.edgeWeightInfluence),this.preventOverlap&&(h=h-n.size-o.size)<=0||(l=this.linLogMode?-s*Math.log(h+1)/(h+1):-s,i(n.force,n.force,t,l),i(o.force,o.force,t,-l))}}(),d.applyNodeGravity=function(){var t=e();return function(e){a(t,this.gravityCenter,e.position);var n=r(t);i(e.force,e.force,t,this.gravity*e.mass/(n+1))}}(),d.applyNodeStrongGravity=function(){var t=e();return function(e){a(t,this.gravityCenter,e.position),i(e.force,e.force,t,this.gravity*e.mass)}}(),d.updateBBox=function(){for(var e=1/0,t=1/0,r=-1/0,i=-1/0,n=0;n5e4?10:a>5e3?1:.1,t.scaling=a>100?2:10,t.barnesHutOptimize=a>1e3,e)for(var r in ef)null!=e[r]&&(t[r]=e[r]);if(!t.gravityCenter){for(var o=[1/0,1/0],s=[-1/0,-1/0],l=0;le},tf.prototype.getNodePosition=function(e,t){if(t||(t=new Float32Array(2*this._nodes.length)),this._positionArr)for(var r=0;r0?1.1:.9,a=Math.max(Math.min(this._zoom*n,this.maxZoom),this.minZoom);n=a/this._zoom;var o=this._convertPos(r,i),s=(o.x-this._dx)*(n-1),l=(o.y-this._dy)*(n-1);this._dx-=s,this._dy-=l,this._zoom=a,this._needsUpdate=!0}}},dispose:function(){var e=this.zr;e.off("mousedown",this._mouseDownHandler),e.off("mousemove",this._mouseMoveHandler),e.off("mouseup",this._mouseUpHandler),e.off("mousewheel",this._mouseWheelHandler),e.off("globalout",this._mouseUpHandler),e.animation.off("frame",this._update)}});var af=Bo.vec2;Ga.Shader.import("@export ecgl.lines2D.vertex\n\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\n\nattribute vec2 position: POSITION;\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n\n#ifdef POSITIONTEXTURE_ENABLED\nuniform sampler2D positionTexture;\n#endif\n\nvoid main()\n{\n gl_Position = worldViewProjection * vec4(position, -10.0, 1.0);\n\n v_Color = a_Color;\n}\n\n@end\n\n@export ecgl.lines2D.fragment\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\n\nvarying vec4 v_Color;\n\nvoid main()\n{\n gl_FragColor = color * v_Color;\n}\n@end\n\n\n@export ecgl.meshLines2D.vertex\n\nattribute vec2 position: POSITION;\nattribute vec2 normal;\nattribute float offset;\nattribute vec4 a_Color : COLOR;\n\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform vec4 viewport : VIEWPORT;\n\nvarying vec4 v_Color;\nvarying float v_Miter;\n\nvoid main()\n{\n vec4 p2 = worldViewProjection * vec4(position + normal, -10.0, 1.0);\n gl_Position = worldViewProjection * vec4(position, -10.0, 1.0);\n\n p2.xy /= p2.w;\n gl_Position.xy /= gl_Position.w;\n\n vec2 N = normalize(p2.xy - gl_Position.xy);\n gl_Position.xy += N * offset / viewport.zw * 2.0;\n\n gl_Position.xy *= gl_Position.w;\n\n v_Color = a_Color;\n}\n@end\n\n\n@export ecgl.meshLines2D.fragment\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\n\nvarying vec4 v_Color;\nvarying float v_Miter;\n\nvoid main()\n{\n gl_FragColor = color * v_Color;\n}\n\n@end");var of=1;const sf=i.ChartView.extend({type:"graphGL",__ecgl__:!0,init:function(e,t){this.groupGL=new Ga.Node,this.viewGL=new Ul("orthographic"),this.viewGL.camera.left=this.viewGL.camera.right=0,this.viewGL.add(this.groupGL),this._pointsBuilder=new Hc(!0,t),this._forceEdgesMesh=new Ga.Mesh({material:new Ga.Material({shader:Ga.createShader("ecgl.forceAtlas2.edges"),transparent:!0,depthMask:!1,depthTest:!1}),$ignorePicking:!0,geometry:new Ga.Geometry({attributes:{node:new Ga.Geometry.Attribute("node","float",2),color:new Ga.Geometry.Attribute("color","float",4,"COLOR")},dynamic:!0,mainAttribute:"node"}),renderOrder:-1,mode:Ga.Mesh.LINES}),this._edgesMesh=new Ga.Mesh({material:new Ga.Material({shader:Ga.createShader("ecgl.meshLines2D"),transparent:!0,depthMask:!1,depthTest:!1}),$ignorePicking:!0,geometry:new Yd({useNativeLine:!1,dynamic:!0}),renderOrder:-1,culling:!1}),this._layoutId=0,this._control=new nf({zr:t.getZr(),viewGL:this.viewGL}),this._control.setTarget(this.groupGL),this._control.init(),this._clickHandler=this._clickHandler.bind(this)},render:function(e,t,r){this.groupGL.add(this._pointsBuilder.rootNode),this._model=e,this._api=r,this._initLayout(e,t,r),this._pointsBuilder.update(e,t,r),this._forceLayoutInstance instanceof Jd||this.groupGL.remove(this._forceEdgesMesh),this._updateCamera(e,r),this._control.off("update"),this._control.on("update",(function(){r.dispatchAction({type:"graphGLRoam",seriesId:e.id,zoom:this._control.getZoom(),offset:this._control.getOffset()}),this._pointsBuilder.updateView(this.viewGL.camera)}),this),this._control.setZoom(Mn(e.get("zoom"),1)),this._control.setOffset(e.get("offset")||[0,0]);var i=this._pointsBuilder.getPointsMesh();if(i.off("mousemove",this._mousemoveHandler),i.off("mouseout",this._mouseOutHandler,this),r.getZr().off("click",this._clickHandler),this._pointsBuilder.highlightOnMouseover=!0,e.get("focusNodeAdjacency")){var n=e.get("focusNodeAdjacencyOn");"click"===n?r.getZr().on("click",this._clickHandler):"mouseover"===n&&(i.on("mousemove",this._mousemoveHandler,this),i.on("mouseout",this._mouseOutHandler,this),this._pointsBuilder.highlightOnMouseover=!1)}this._lastMouseOverDataIndex=-1},_clickHandler:function(e){if(!this._layouting){var t=this._pointsBuilder.getPointsMesh().dataIndex;t>=0?this._api.dispatchAction({type:"graphGLFocusNodeAdjacency",seriesId:this._model.id,dataIndex:t}):this._api.dispatchAction({type:"graphGLUnfocusNodeAdjacency",seriesId:this._model.id})}},_mousemoveHandler:function(e){if(!this._layouting){var t=this._pointsBuilder.getPointsMesh().dataIndex;t>=0?t!==this._lastMouseOverDataIndex&&this._api.dispatchAction({type:"graphGLFocusNodeAdjacency",seriesId:this._model.id,dataIndex:t}):this._mouseOutHandler(e),this._lastMouseOverDataIndex=t}},_mouseOutHandler:function(e){this._layouting||(this._api.dispatchAction({type:"graphGLUnfocusNodeAdjacency",seriesId:this._model.id}),this._lastMouseOverDataIndex=-1)},_updateForceEdgesGeometry:function(e,t){var r=this._forceEdgesMesh.geometry,i=t.getEdgeData(),n=0,a=this._forceLayoutInstance,o=2*i.count();r.attributes.node.init(o),r.attributes.color.init(o),i.each((function(t){var o=e[t];r.attributes.node.set(n,a.getNodeUV(o.node1)),r.attributes.node.set(n+1,a.getNodeUV(o.node2));var s=Uh(i,o.dataIndex),l=Ga.parseColor(s);l[3]*=Mn(kh(i,o.dataIndex),1),r.attributes.color.set(n,l),r.attributes.color.set(n+1,l),n+=2})),r.dirty()},_updateMeshLinesGeometry:function(){var e=this._model.getEdgeData(),t=this._edgesMesh.geometry,r=(e=this._model.getEdgeData(),this._model.getData().getLayout("points"));t.resetOffset(),t.setVertexCount(e.count()*t.getLineVertexCount()),t.setTriangleCount(e.count()*t.getLineTriangleCount());var i=[],n=[],a=["lineStyle","width"];this._originalEdgeColors=new Float32Array(4*e.count()),this._edgeIndicesMap=new Float32Array(e.count()),e.each((function(o){var s=e.graph.getEdgeByIndex(o),l=2*s.node1.dataIndex,h=2*s.node2.dataIndex;i[0]=r[l],i[1]=r[l+1],n[0]=r[h],n[1]=r[h+1];var u=Uh(e,s.dataIndex),c=Ga.parseColor(u);c[3]*=Mn(kh(e,s.dataIndex),1);var d=e.getItemModel(s.dataIndex),f=Mn(d.get(a),1)*this._api.getDevicePixelRatio();t.addLine(i,n,c,f);for(var p=0;p<4;p++)this._originalEdgeColors[4*s.dataIndex+p]=c[p];this._edgeIndicesMap[s.dataIndex]=o}),this),t.dirty()},_updateForceNodesGeometry:function(e){for(var t=this._pointsBuilder.getPointsMesh(),r=[],i=0;i=f&&(l._syncNodePosition(e),d=0),r.getZr().refresh(),Ua((function(){p(t)}))}))};Ua((function(){l._forceLayoutInstanceToDispose&&(l._forceLayoutInstanceToDispose.dispose(n.layer.renderer),l._forceLayoutInstanceToDispose=null),p(h)})),this._layouting=!0}}},stopLayout:function(e,t,r,i){i&&null!=i.from&&i.from!==this.uid||(this._layoutId=0,this.groupGL.remove(this._forceEdgesMesh),this.groupGL.add(this._edgesMesh),this._forceLayoutInstance&&this.viewGL.layer&&(i&&i.beforeLayout||(this._syncNodePosition(e),this._updateAfterLayout(e,t,r)),this._api.getZr().refresh(),this._layouting=!1))},_syncNodePosition:function(e){var t=this._forceLayoutInstance.getNodePosition(this.viewGL.layer.renderer);e.getData().setLayout("points",t),e.setNodePosition(t)},_updateAfterLayout:function(e,t,r){this._updateMeshLinesGeometry(),this._pointsBuilder.removePositionTexture(),this._pointsBuilder.updateLayout(e,t,r),this._pointsBuilder.updateView(this.viewGL.camera),this._pointsBuilder.updateLabels(),this._pointsBuilder.showLabels()},focusNodeAdjacency:function(e,t,r,i){var n=this._model.getData();this._downplayAll();var a=i.dataIndex,o=n.graph,s=[],l=o.getNodeByIndex(a);s.push(l),l.edges.forEach((function(e){e.dataIndex<0||(e.node1!==l&&s.push(e.node1),e.node2!==l&&s.push(e.node2))}),this),this._pointsBuilder.fadeOutAll(.05),this._fadeOutEdgesAll(.05),s.forEach((function(e){this._pointsBuilder.highlight(n,e.dataIndex)}),this),this._pointsBuilder.updateLabels(s.map((function(e){return e.dataIndex})));var h=[];l.edges.forEach((function(e){e.dataIndex>=0&&(this._highlightEdge(e.dataIndex),h.push(e))}),this),this._focusNodes=s,this._focusEdges=h},unfocusNodeAdjacency:function(e,t,r,i){this._downplayAll(),this._pointsBuilder.fadeInAll(),this._fadeInEdgesAll(),this._pointsBuilder.updateLabels()},_highlightEdge:function(e){var t=this._model.getEdgeData().getItemModel(e),r=Ga.parseColor(t.get("emphasis.lineStyle.color")||t.get("lineStyle.color")),i=Mn(t.get("emphasis.lineStyle.opacity"),t.get("lineStyle.opacity"),1);r[3]*=i,this._edgesMesh.geometry.setItemColor(this._edgeIndicesMap[e],r)},_downplayAll:function(){this._focusNodes&&this._focusNodes.forEach((function(e){this._pointsBuilder.downplay(this._model.getData(),e.dataIndex)}),this),this._focusEdges&&this._focusEdges.forEach((function(e){this._downplayEdge(e.dataIndex)}),this)},_downplayEdge:function(e){var t=this._getColor(e,[]);this._edgesMesh.geometry.setItemColor(this._edgeIndicesMap[e],t)},_setEdgeFade:(lf=[],function(e,t){this._getColor(e,lf),lf[3]*=t,this._edgesMesh.geometry.setItemColor(this._edgeIndicesMap[e],lf)}),_getColor:function(e,t){for(var r=0;r<4;r++)t[r]=this._originalEdgeColors[4*e+r];return t},_fadeOutEdgesAll:function(e){this._model.getData().graph.eachEdge((function(t){this._setEdgeFade(t.dataIndex,e)}),this)},_fadeInEdgesAll:function(){this._fadeOutEdgesAll(1)},_updateCamera:function(e,t){this.viewGL.setViewport(0,0,t.getWidth(),t.getHeight(),t.getDevicePixelRatio());for(var r=this.viewGL.camera,i=e.getData().getLayout("points"),n=af.create(1/0,1/0),a=af.create(-1/0,-1/0),o=[],s=0;sr.left&&hr.top)){var u=Math.max(a[0]-n[0],10),c=u/t.getWidth()*t.getHeight();u*=1.4,c*=1.4,n[0]-=.2*u,r.left=n[0],r.top=l-c/2,r.bottom=l+c/2,r.right=u+n[0],r.near=0,r.far=100}},dispose:function(){var e=this.viewGL.layer.renderer;this._forceLayoutInstance&&this._forceLayoutInstance.dispose(e),this.groupGL.removeAll(),this._layoutId=-1},remove:function(){this.groupGL.removeAll(),this._control.dispose()}});var lf;function hf(e){return e instanceof Array||(e=[e,e]),e}(0,i.use)((function(e){function t(){}e.registerChartView(sf),e.registerSeriesModel(jd),e.registerVisual((function(e){const t={};e.eachSeriesByType("graphGL",(function(e){var r=e.getCategoriesData(),n=e.getData(),a={};r.each((function(i){var n=r.getName(i);a["ec-"+n]=i;var o=r.getItemModel(i),s=o.getModel("itemStyle").getItemStyle();s.fill||(s.fill=e.getColorFromPalette(n,t)),r.setItemVisual(i,"style",s);var l=["symbol","symbolSize","symbolKeepAspect"];for(let e=0;e65535?new Uint32Array(3*i):new Uint16Array(3*i))},addLine:function(e){var t=this._vertexOffset;this.attributes.position.set(t,[e[0],e[1],1]),this.attributes.position.set(t+1,[e[0],e[1],-1]),this.attributes.position.set(t+2,[e[0],e[1],2]),this.attributes.position.set(t+3,[e[0],e[1],-2]),this.setTriangleIndices(this._faceOffset++,[t,t+1,t+2]),this.setTriangleIndices(this._faceOffset++,[t+1,t+2,t+3]),this._vertexOffset+=4}});Xe.import("@export ecgl.vfParticle.particle.fragment\n\nuniform sampler2D particleTexture;\nuniform sampler2D spawnTexture;\nuniform sampler2D velocityTexture;\n\nuniform float deltaTime;\nuniform float elapsedTime;\n\nuniform float speedScaling : 1.0;\n\nuniform vec2 textureSize;\nuniform vec4 region : [0, 0, 1, 1];\nuniform float firstFrameTime;\n\nvarying vec2 v_Texcoord;\n\n\nvoid main()\n{\n vec4 p = texture2D(particleTexture, v_Texcoord);\n bool spawn = false;\n if (p.w <= 0.0) {\n p = texture2D(spawnTexture, fract(v_Texcoord + elapsedTime / 10.0));\n p.w -= firstFrameTime;\n spawn = true;\n }\n vec2 v = texture2D(velocityTexture, fract(p.xy * region.zw + region.xy)).xy;\n v = (v - 0.5) * 2.0;\n p.z = length(v);\n p.xy += v * deltaTime / 10.0 * speedScaling;\n p.w -= deltaTime;\n\n if (spawn || p.xy != fract(p.xy)) {\n p.z = 0.0;\n }\n p.xy = fract(p.xy);\n\n gl_FragColor = p;\n}\n@end\n\n@export ecgl.vfParticle.renderPoints.vertex\n\n#define PI 3.1415926\n\nattribute vec2 texcoord : TEXCOORD_0;\n\nuniform sampler2D particleTexture;\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\n\nuniform float size : 1.0;\n\nvarying float v_Mag;\nvarying vec2 v_Uv;\n\nvoid main()\n{\n vec4 p = texture2D(particleTexture, texcoord);\n\n if (p.w > 0.0 && p.z > 1e-5) {\n gl_Position = worldViewProjection * vec4(p.xy * 2.0 - 1.0, 0.0, 1.0);\n }\n else {\n gl_Position = vec4(100000.0, 100000.0, 100000.0, 1.0);\n }\n\n v_Mag = p.z;\n v_Uv = p.xy;\n\n gl_PointSize = size;\n}\n\n@end\n\n@export ecgl.vfParticle.renderPoints.fragment\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\nuniform sampler2D gradientTexture;\nuniform sampler2D colorTexture;\nuniform sampler2D spriteTexture;\n\nvarying float v_Mag;\nvarying vec2 v_Uv;\n\nvoid main()\n{\n gl_FragColor = color;\n#ifdef SPRITETEXTURE_ENABLED\n gl_FragColor *= texture2D(spriteTexture, gl_PointCoord);\n if (color.a == 0.0) {\n discard;\n }\n#endif\n#ifdef GRADIENTTEXTURE_ENABLED\n gl_FragColor *= texture2D(gradientTexture, vec2(v_Mag, 0.5));\n#endif\n#ifdef COLORTEXTURE_ENABLED\n gl_FragColor *= texture2D(colorTexture, v_Uv);\n#endif\n}\n\n@end\n\n@export ecgl.vfParticle.renderLines.vertex\n\n#define PI 3.1415926\n\nattribute vec3 position : POSITION;\n\nuniform sampler2D particleTexture;\nuniform sampler2D prevParticleTexture;\n\nuniform float size : 1.0;\nuniform vec4 vp: VIEWPORT;\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\n\nvarying float v_Mag;\nvarying vec2 v_Uv;\n\n@import clay.util.rand\n\nvoid main()\n{\n vec4 p = texture2D(particleTexture, position.xy);\n vec4 p2 = texture2D(prevParticleTexture, position.xy);\n\n p.xy = p.xy * 2.0 - 1.0;\n p2.xy = p2.xy * 2.0 - 1.0;\n\n if (p.w > 0.0 && p.z > 1e-5) {\n vec2 dir = normalize(p.xy - p2.xy);\n vec2 norm = vec2(dir.y / vp.z, -dir.x / vp.w) * sign(position.z) * size;\n if (abs(position.z) == 2.0) {\n gl_Position = vec4(p.xy + norm, 0.0, 1.0);\n v_Uv = p.xy;\n v_Mag = p.z;\n }\n else {\n gl_Position = vec4(p2.xy + norm, 0.0, 1.0);\n v_Mag = p2.z;\n v_Uv = p2.xy;\n }\n gl_Position = worldViewProjection * gl_Position;\n }\n else {\n gl_Position = vec4(100000.0, 100000.0, 100000.0, 1.0);\n }\n}\n\n@end\n\n@export ecgl.vfParticle.renderLines.fragment\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\nuniform sampler2D gradientTexture;\nuniform sampler2D colorTexture;\n\nvarying float v_Mag;\nvarying vec2 v_Uv;\n\nvoid main()\n{\n gl_FragColor = color;\n #ifdef GRADIENTTEXTURE_ENABLED\n gl_FragColor *= texture2D(gradientTexture, vec2(v_Mag, 0.5));\n#endif\n#ifdef COLORTEXTURE_ENABLED\n gl_FragColor *= texture2D(colorTexture, v_Uv);\n#endif\n}\n\n@end\n");var df=function(){this.motionBlurFactor=.99,this.vectorFieldTexture=new Dr({type:wr.FLOAT,flipY:!1}),this.particleLife=[5,20],this._particleType="point",this._particleSize=1,this.particleColor=[1,1,1,1],this.particleSpeedScaling=1,this._thisFrameTexture=null,this._particlePass=null,this._spawnTexture=null,this._particleTexture0=null,this._particleTexture1=null,this._particlePointsMesh=null,this._surfaceFrameBuffer=null,this._elapsedTime=0,this._scene=null,this._camera=null,this._lastFrameTexture=null,this._supersampling=1,this._downsampleTextures=[],this._width=512,this._height=512,this.init()};df.prototype={constructor:df,init:function(){var e={type:wr.FLOAT,minFilter:wr.NEAREST,magFilter:wr.NEAREST,useMipmap:!1};this._spawnTexture=new Dr(e),this._particleTexture0=new Dr(e),this._particleTexture1=new Dr(e),this._frameBuffer=new zi({depthBuffer:!1}),this._particlePass=new pn({fragment:Xe.source("ecgl.vfParticle.particle.fragment")}),this._particlePass.setUniform("velocityTexture",this.vectorFieldTexture),this._particlePass.setUniform("spawnTexture",this._spawnTexture),this._downsamplePass=new pn({fragment:Xe.source("clay.compositor.downsample")});var t=new Sr({renderOrder:10,material:new le({shader:new Xe(Xe.source("ecgl.vfParticle.renderPoints.vertex"),Xe.source("ecgl.vfParticle.renderPoints.fragment"))}),mode:Sr.POINTS,geometry:new Vr({dynamic:!0,mainAttribute:"texcoord0"})}),r=new Sr({renderOrder:10,material:new le({shader:new Xe(Xe.source("ecgl.vfParticle.renderLines.vertex"),Xe.source("ecgl.vfParticle.renderLines.fragment"))}),geometry:new cf,culling:!1}),i=new Sr({material:new le({shader:new Xe(Xe.source("ecgl.color.vertex"),Xe.source("ecgl.color.fragment"))}),geometry:new ki});i.material.enableTexture("diffuseMap"),this._particlePointsMesh=t,this._particleLinesMesh=r,this._lastFrameFullQuadMesh=i,this._camera=new un,this._thisFrameTexture=new Dr,this._lastFrameTexture=new Dr},setParticleDensity:function(e,t){for(var r=new Float32Array(e*t*4),i=0,n=this.particleLife,a=0;a0?e[e.length-1]:this._lastFrameTexture},setRegion:function(e){this._particlePass.setUniform("region",e)},resize:function(e,t){this._lastFrameTexture.width=e*this._supersampling,this._lastFrameTexture.height=t*this._supersampling,this._thisFrameTexture.width=e*this._supersampling,this._thisFrameTexture.height=t*this._supersampling,this._width=e,this._height=t},setParticleSize:function(e){var t=this._getParticleMesh();if(e<=2)return t.material.disableTexture("spriteTexture"),void(t.material.transparent=!1);this._spriteTexture||(this._spriteTexture=new Dr),this._spriteTexture.image&&this._spriteTexture.image.width===e||(this._spriteTexture.image=function(e){var t=document.createElement("canvas");t.width=t.height=e;var r=t.getContext("2d");return r.fillStyle="#fff",r.arc(e/2,e/2,e/2,0,2*Math.PI),r.fill(),t}(e),this._spriteTexture.dirty()),t.material.transparent=!0,t.material.enableTexture("spriteTexture"),t.material.set("spriteTexture",this._spriteTexture),this._particleSize=e},setGradientTexture:function(e){var t=this._getParticleMesh().material;t[e?"enableTexture":"disableTexture"]("gradientTexture"),t.setUniform("gradientTexture",e)},setColorTextureImage:function(e,t){this._getParticleMesh().material.setTextureImage("colorTexture",e,t,{flipY:!0})},setParticleType:function(e){this._particleType=e},clearFrame:function(e){var t=this._frameBuffer;t.attach(this._lastFrameTexture),t.bind(e),e.gl.clear(e.gl.DEPTH_BUFFER_BIT|e.gl.COLOR_BUFFER_BIT),t.unbind(e)},setSupersampling:function(e){this._supersampling=e,this.resize(this._width,this._height)},_updateDownsampleTextures:function(e,t){for(var r=this._downsampleTextures,i=Math.max(Math.floor(Math.log(this._supersampling/t.getDevicePixelRatio())/Math.log(2)),0),n=2,a=this._width*this._supersampling,o=this._height*this._supersampling,s=0;s=359&&(n[0]>0&&(n[0]=0),a[0]1?(t.material.shader!==this._meshLinesShader&&t.material.attachShader(this._meshLinesShader),t.mode=Ga.Mesh.TRIANGLES):(t.material.shader!==this._nativeLinesShader&&t.material.attachShader(this._nativeLinesShader),t.mode=Ga.Mesh.LINES),r=r||0,i=i||n.count(),s.resetOffset();var u=0,c=0,d=[],f=[],p=[],m=[],g=[],_=.3,v=.7;function y(){f[0]=d[0]*v+m[0]*_-(d[1]-m[1])*a,f[1]=d[1]*v+m[1]*_-(m[0]-d[0])*a,p[0]=d[0]*_+m[0]*v-(d[1]-m[1])*a,p[1]=d[1]*_+m[1]*v-(m[0]-d[0])*a}if(o||0!==a)for(var x=r;x{t.exports=e}},r={};function i(e){if(r[e])return r[e].exports;var n=r[e]={exports:{}};return t[e](n,n.exports,i),n.exports}return i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i(501)})()}));
\ No newline at end of file
diff --git a/weibo_flask/static/assets/js/echarts.min.js b/weibo_flask/static/assets/js/echarts.min.js
new file mode 100644
index 0000000..acccd70
--- /dev/null
+++ b/weibo_flask/static/assets/js/echarts.min.js
@@ -0,0 +1,45 @@
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).echarts={})}(this,(function(t){"use strict";
+/*! *****************************************************************************
+ Copyright (c) Microsoft Corporation.
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
+ ***************************************************************************** */var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])})(t,n)};function n(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}var i=function(){return(i=Object.assign||function(t){for(var e,n=1,i=arguments.length;n18);a&&(n.weChat=!0);e.canvasSupported=!!document.createElement("canvas").getContext,e.svgSupported="undefined"!=typeof SVGRect,e.touchEventsSupported="ontouchstart"in window&&!n.ie&&!n.edge,e.pointerEventsSupported="onpointerdown"in window&&(n.edge||n.ie&&+n.version>=11),e.domSupported="undefined"!=typeof document;var s=document.documentElement.style;e.transform3dSupported=(n.ie&&"transition"in s||n.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in s)&&!("OTransition"in s),e.transformSupported=e.transform3dSupported||n.ie&&+n.version>=9}(navigator.userAgent,a);var s={"[object Function]":!0,"[object RegExp]":!0,"[object Date]":!0,"[object Error]":!0,"[object CanvasGradient]":!0,"[object CanvasPattern]":!0,"[object Image]":!0,"[object Canvas]":!0},l={"[object Int8Array]":!0,"[object Uint8Array]":!0,"[object Uint8ClampedArray]":!0,"[object Int16Array]":!0,"[object Uint16Array]":!0,"[object Int32Array]":!0,"[object Uint32Array]":!0,"[object Float32Array]":!0,"[object Float64Array]":!0},u=Object.prototype.toString,h=Array.prototype,c=h.forEach,p=h.filter,d=h.slice,f=h.map,g=function(){}.constructor,y=g?g.prototype:null,v={};function m(t,e){v[t]=e}var _=2311;function x(){return _++}function b(){for(var t=[],e=0;e>1)%2;a.style.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",i[s]+":0",r[l]+":0",i[1-s]+":auto",r[1-l]+":auto",""].join("!important;"),t.appendChild(a),n.push(a)}return n}(e,o),o,r);if(s)return s(t,n,i),!0}return!1}function Xt(t){return"CANVAS"===t.nodeName.toUpperCase()}var Zt="undefined"!=typeof window&&!!window.addEventListener,jt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,qt=[];function Kt(t,e,n,i){return n=n||{},i||!a.canvasSupported?$t(t,e,n):a.browser.firefox&&null!=e.layerX&&e.layerX!==e.offsetX?(n.zrX=e.layerX,n.zrY=e.layerY):null!=e.offsetX?(n.zrX=e.offsetX,n.zrY=e.offsetY):$t(t,e,n),n}function $t(t,e,n){if(a.domSupported&&t.getBoundingClientRect){var i=e.clientX,r=e.clientY;if(Xt(t)){var o=t.getBoundingClientRect();return n.zrX=i-o.left,void(n.zrY=r-o.top)}if(Yt(qt,t,i,r))return n.zrX=qt[0],void(n.zrY=qt[1])}n.zrX=n.zrY=0}function Jt(t){return t||window.event}function Qt(t,e,n){if(null!=(e=Jt(e)).zrX)return e;var i=e.type;if(i&&i.indexOf("touch")>=0){var r="touchend"!==i?e.targetTouches[0]:e.changedTouches[0];r&&Kt(t,r,e,n)}else{Kt(t,e,e,n);var o=function(t){var e=t.wheelDelta;if(e)return e;var n=t.deltaX,i=t.deltaY;if(null==n||null==i)return e;return 3*(0!==i?Math.abs(i):Math.abs(n))*(i>0?-1:i<0?1:n>0?-1:1)}(e);e.zrDelta=o?o/120:-(e.detail||0)/3}var a=e.button;return null==e.which&&void 0!==a&&jt.test(e.type)&&(e.which=1&a?1:2&a?3:4&a?2:0),e}function te(t,e,n,i){Zt?t.addEventListener(e,n,i):t.attachEvent("on"+e,n)}var ee=Zt?function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0}:function(t){t.returnValue=!1,t.cancelBubble=!0};function ne(t){return 2===t.which||3===t.which}var ie=function(){function t(){this._track=[]}return t.prototype.recognize=function(t,e,n){return this._doTrack(t,e,n),this._recognize(t)},t.prototype.clear=function(){return this._track.length=0,this},t.prototype._doTrack=function(t,e,n){var i=t.touches;if(i){for(var r={points:[],touches:[],target:e,event:t},o=0,a=i.length;o1&&r&&r.length>1){var a=re(r)/re(o);!isFinite(a)&&(a=1),e.pinchScale=a;var s=[((i=r)[0][0]+i[1][0])/2,(i[0][1]+i[1][1])/2];return e.pinchX=s[0],e.pinchY=s[1],{type:"pinch",target:t[0].target,event:e}}}}},ae="silent";function se(){ee(this.event)}var le=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.handler=null,e}return n(e,t),e.prototype.dispose=function(){},e.prototype.setCursor=function(){},e}(Ft),ue=function(t,e){this.x=t,this.y=e},he=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],ce=function(t){function e(e,n,i,r){var o=t.call(this)||this;return o._hovered=new ue(0,0),o.storage=e,o.painter=n,o.painterRoot=r,i=i||new le,o.proxy=null,o.setHandlerProxy(i),o._draggingMgr=new Vt(o),o}return n(e,t),e.prototype.setHandlerProxy=function(t){this.proxy&&this.proxy.dispose(),t&&(P(he,(function(e){t.on&&t.on(e,this[e],this)}),this),t.handler=this),this.proxy=t},e.prototype.mousemove=function(t){var e=t.zrX,n=t.zrY,i=de(this,e,n),r=this._hovered,o=r.target;o&&!o.__zr&&(o=(r=this.findHover(r.x,r.y)).target);var a=this._hovered=i?new ue(e,n):this.findHover(e,n),s=a.target,l=this.proxy;l.setCursor&&l.setCursor(s?s.cursor:"default"),o&&s!==o&&this.dispatchToElement(r,"mouseout",t),this.dispatchToElement(a,"mousemove",t),s&&s!==o&&this.dispatchToElement(a,"mouseover",t)},e.prototype.mouseout=function(t){var e=t.zrEventControl;"only_globalout"!==e&&this.dispatchToElement(this._hovered,"mouseout",t),"no_globalout"!==e&&this.trigger("globalout",{type:"globalout",event:t})},e.prototype.resize=function(){this._hovered=new ue(0,0)},e.prototype.dispatch=function(t,e){var n=this[t];n&&n.call(this,e)},e.prototype.dispose=function(){this.proxy.dispose(),this.storage=null,this.proxy=null,this.painter=null},e.prototype.setCursorStyle=function(t){var e=this.proxy;e.setCursor&&e.setCursor(t)},e.prototype.dispatchToElement=function(t,e,n){var i=(t=t||{}).target;if(!i||!i.silent){for(var r="on"+e,o=function(t,e,n){return{type:t,event:n,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:n.zrX,offsetY:n.zrY,gestureEvent:n.gestureEvent,pinchX:n.pinchX,pinchY:n.pinchY,pinchScale:n.pinchScale,wheelDelta:n.zrDelta,zrByTouch:n.zrByTouch,which:n.which,stop:se}}(e,t,n);i&&(i[r]&&(o.cancelBubble=!!i[r].call(i,o)),i.trigger(e,o),i=i.__hostTarget?i.__hostTarget:i.parent,!o.cancelBubble););o.cancelBubble||(this.trigger(e,o),this.painter&&this.painter.eachOtherLayer&&this.painter.eachOtherLayer((function(t){"function"==typeof t[r]&&t[r].call(t,o),t.trigger&&t.trigger(e,o)})))}},e.prototype.findHover=function(t,e,n){for(var i=this.storage.getDisplayList(),r=new ue(t,e),o=i.length-1;o>=0;o--){var a=void 0;if(i[o]!==n&&!i[o].ignore&&(a=pe(i[o],t,e))&&(!r.topTarget&&(r.topTarget=i[o]),a!==ae)){r.target=i[o];break}}return r},e.prototype.processGesture=function(t,e){this._gestureMgr||(this._gestureMgr=new ie);var n=this._gestureMgr;"start"===e&&n.clear();var i=n.recognize(t,this.findHover(t.zrX,t.zrY,null).target,this.proxy.dom);if("end"===e&&n.clear(),i){var r=i.type;t.gestureEvent=r;var o=new ue;o.target=i.target,this.dispatchToElement(o,r,i.event)}},e}(Ft);function pe(t,e,n){if(t[t.rectHover?"rectContain":"contain"](e,n)){for(var i=t,r=void 0,o=!1;i;){if(i.ignoreClip&&(o=!0),!o){var a=i.getClipPath();if(a&&!a.contain(e,n))return!1;i.silent&&(r=!0)}var s=i.__hostTarget;i=s||i.parent}return!r||ae}return!1}function de(t,e,n){var i=t.painter;return e<0||e>i.getWidth()||n<0||n>i.getHeight()}function fe(){return[1,0,0,1,0,0]}function ge(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}function ye(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function ve(t,e,n){var i=e[0]*n[0]+e[2]*n[1],r=e[1]*n[0]+e[3]*n[1],o=e[0]*n[2]+e[2]*n[3],a=e[1]*n[2]+e[3]*n[3],s=e[0]*n[4]+e[2]*n[5]+e[4],l=e[1]*n[4]+e[3]*n[5]+e[5];return t[0]=i,t[1]=r,t[2]=o,t[3]=a,t[4]=s,t[5]=l,t}function me(t,e,n){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4]+n[0],t[5]=e[5]+n[1],t}function _e(t,e,n){var i=e[0],r=e[2],o=e[4],a=e[1],s=e[3],l=e[5],u=Math.sin(n),h=Math.cos(n);return t[0]=i*h+a*u,t[1]=-i*u+a*h,t[2]=r*h+s*u,t[3]=-r*u+h*s,t[4]=h*o+u*l,t[5]=h*l-u*o,t}function xe(t,e,n){var i=n[0],r=n[1];return t[0]=e[0]*i,t[1]=e[1]*r,t[2]=e[2]*i,t[3]=e[3]*r,t[4]=e[4]*i,t[5]=e[5]*r,t}function be(t,e){var n=e[0],i=e[2],r=e[4],o=e[1],a=e[3],s=e[5],l=n*a-o*i;return l?(l=1/l,t[0]=a*l,t[1]=-o*l,t[2]=-i*l,t[3]=n*l,t[4]=(i*s-a*r)*l,t[5]=(o*r-n*s)*l,t):null}function we(t){var e=[1,0,0,1,0,0];return ye(e,t),e}P(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],(function(t){ce.prototype[t]=function(e){var n,i,r=e.zrX,o=e.zrY,a=de(this,r,o);if("mouseup"===t&&a||(i=(n=this.findHover(r,o)).target),"mousedown"===t)this._downEl=i,this._downPoint=[e.zrX,e.zrY],this._upEl=i;else if("mouseup"===t)this._upEl=i;else if("click"===t){if(this._downEl!==this._upEl||!this._downPoint||Lt(this._downPoint,[e.zrX,e.zrY])>4)return;this._downPoint=null}this.dispatchToElement(n,t,e)}}));var Se=Object.freeze({__proto__:null,create:fe,identity:ge,copy:ye,mul:ve,translate:me,rotate:_e,scale:xe,invert:be,clone:we}),Me=ge,Ie=5e-5;function Te(t){return t>Ie||t<-5e-5}var Ce=[],Ae=[],De=[1,0,0,1,0,0],Le=Math.abs,ke=function(){function t(){}return t.prototype.setPosition=function(t){this.x=t[0],this.y=t[1]},t.prototype.setScale=function(t){this.scaleX=t[0],this.scaleY=t[1]},t.prototype.setOrigin=function(t){this.originX=t[0],this.originY=t[1]},t.prototype.needLocalTransform=function(){return Te(this.rotation)||Te(this.x)||Te(this.y)||Te(this.scaleX-1)||Te(this.scaleY-1)},t.prototype.updateTransform=function(){var t=this.parent,e=t&&t.transform,n=this.needLocalTransform(),i=this.transform;n||e?(i=i||[1,0,0,1,0,0],n?this.getLocalTransform(i):Me(i),e&&(n?ve(i,t.transform,i):ye(i,t.transform)),this.transform=i,this._resolveGlobalScaleRatio(i)):i&&Me(i)},t.prototype._resolveGlobalScaleRatio=function(t){var e=this.globalScaleRatio;if(null!=e&&1!==e){this.getGlobalScale(Ce);var n=Ce[0]<0?-1:1,i=Ce[1]<0?-1:1,r=((Ce[0]-n)*e+n)/Ce[0]||0,o=((Ce[1]-i)*e+i)/Ce[1]||0;t[0]*=r,t[1]*=r,t[2]*=o,t[3]*=o}this.invTransform=this.invTransform||[1,0,0,1,0,0],be(this.invTransform,t)},t.prototype.getLocalTransform=function(e){return t.getLocalTransform(this,e)},t.prototype.getComputedTransform=function(){for(var t=this,e=[];t;)e.push(t),t=t.parent;for(;t=e.pop();)t.updateTransform();return this.transform},t.prototype.setLocalTransform=function(t){if(t){var e=t[0]*t[0]+t[1]*t[1],n=t[2]*t[2]+t[3]*t[3];Te(e-1)&&(e=Math.sqrt(e)),Te(n-1)&&(n=Math.sqrt(n)),t[0]<0&&(e=-e),t[3]<0&&(n=-n),this.rotation=Math.atan2(-t[1]/n,t[0]/e),e<0&&n<0&&(this.rotation+=Math.PI,e=-e,n=-n),this.x=t[4],this.y=t[5],this.scaleX=e,this.scaleY=n}},t.prototype.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(ve(Ae,t.invTransform,e),e=Ae);var n=this.originX,i=this.originY;(n||i)&&(De[4]=n,De[5]=i,ve(Ae,e,De),Ae[4]-=n,Ae[5]-=i,e=Ae),this.setLocalTransform(e)}},t.prototype.getGlobalScale=function(t){var e=this.transform;return t=t||[],e?(t[0]=Math.sqrt(e[0]*e[0]+e[1]*e[1]),t[1]=Math.sqrt(e[2]*e[2]+e[3]*e[3]),e[0]<0&&(t[0]=-t[0]),e[3]<0&&(t[1]=-t[1]),t):(t[0]=1,t[1]=1,t)},t.prototype.transformCoordToLocal=function(t,e){var n=[t,e],i=this.invTransform;return i&&Rt(n,n,i),n},t.prototype.transformCoordToGlobal=function(t,e){var n=[t,e],i=this.transform;return i&&Rt(n,n,i),n},t.prototype.getLineScale=function(){var t=this.transform;return t&&Le(t[0]-1)>1e-10&&Le(t[3]-1)>1e-10?Math.sqrt(Le(t[0]*t[3]-t[2]*t[1])):1},t.getLocalTransform=function(t,e){Me(e=e||[]);var n=t.originX||0,i=t.originY||0,r=t.scaleX,o=t.scaleY,a=t.rotation||0,s=t.x,l=t.y;return e[4]-=n,e[5]-=i,e[0]*=r,e[1]*=o,e[2]*=r,e[3]*=o,e[4]*=r,e[5]*=o,a&&_e(e,e,a),e[4]+=n,e[5]+=i,e[4]+=s,e[5]+=l,e},t.initDefaultProps=function(){var e=t.prototype;e.x=0,e.y=0,e.scaleX=1,e.scaleY=1,e.originX=0,e.originY=0,e.rotation=0,e.globalScaleRatio=1}(),t}(),Pe={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return.5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return 0===t?0:Math.pow(1024,t-1)},exponentialOut:function(t){return 1===t?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1)))},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,n=.1;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=.4*Math.asin(1/n)/(2*Math.PI),-n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4))},elasticOut:function(t){var e,n=.1;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=.4*Math.asin(1/n)/(2*Math.PI),n*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/.4)+1)},elasticInOut:function(t){var e,n=.1,i=.4;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=i*Math.asin(1/n)/(2*Math.PI),(t*=2)<1?n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*-.5:n*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?t*t*((e+1)*t-e)*.5:.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-Pe.bounceOut(1-t)},bounceOut:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return t<.5?.5*Pe.bounceIn(2*t):.5*Pe.bounceOut(2*t-1)+.5}},Oe=function(){function t(t){this._initialized=!1,this._startTime=0,this._pausedTime=0,this._paused=!1,this._life=t.life||1e3,this._delay=t.delay||0,this.loop=null!=t.loop&&t.loop,this.gap=t.gap||0,this.easing=t.easing||"linear",this.onframe=t.onframe,this.ondestroy=t.ondestroy,this.onrestart=t.onrestart}return t.prototype.step=function(t,e){if(this._initialized||(this._startTime=t+this._delay,this._initialized=!0),!this._paused){var n=(t-this._startTime-this._pausedTime)/this._life;n<0&&(n=0),n=Math.min(n,1);var i=this.easing,r="string"==typeof i?Pe[i]:i,o="function"==typeof r?r(n):n;if(this.onframe&&this.onframe(o),1===n){if(!this.loop)return!0;this._restart(t),this.onrestart&&this.onrestart()}return!1}this._pausedTime+=e},t.prototype._restart=function(t){var e=(t-this._startTime-this._pausedTime)%this._life;this._startTime=t-e+this.gap,this._pausedTime=0},t.prototype.pause=function(){this._paused=!0},t.prototype.resume=function(){this._paused=!1},t}(),Re=function(t){this.value=t},Ne=function(){function t(){this._len=0}return t.prototype.insert=function(t){var e=new Re(t);return this.insertEntry(e),e},t.prototype.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},t.prototype.remove=function(t){var e=t.prev,n=t.next;e?e.next=n:this.head=n,n?n.prev=e:this.tail=e,t.next=t.prev=null,this._len--},t.prototype.len=function(){return this._len},t.prototype.clear=function(){this.head=this.tail=null,this._len=0},t}(),Ee=function(){function t(t){this._list=new Ne,this._maxSize=10,this._map={},this._maxSize=t}return t.prototype.put=function(t,e){var n=this._list,i=this._map,r=null;if(null==i[t]){var o=n.len(),a=this._lastRemovedEntry;if(o>=this._maxSize&&o>0){var s=n.head;n.remove(s),delete i[s.key],r=s.value,this._lastRemovedEntry=s}a?a.value=e:a=new Re(e),a.key=t,n.insertEntry(a),i[t]=a}return r},t.prototype.get=function(t){var e=this._map[t],n=this._list;if(null!=e)return e!==n.tail&&(n.remove(e),n.insertEntry(e)),e.value},t.prototype.clear=function(){this._list.clear(),this._map={}},t.prototype.len=function(){return this._list.len()},t}(),ze={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function Be(t){return(t=Math.round(t))<0?0:t>255?255:t}function Ve(t){return t<0?0:t>1?1:t}function Fe(t){var e=t;return e.length&&"%"===e.charAt(e.length-1)?Be(parseFloat(e)/100*255):Be(parseInt(e,10))}function Ge(t){var e=t;return e.length&&"%"===e.charAt(e.length-1)?Ve(parseFloat(e)/100):Ve(parseFloat(e))}function He(t,e,n){return n<0?n+=1:n>1&&(n-=1),6*n<1?t+(e-t)*n*6:2*n<1?e:3*n<2?t+(e-t)*(2/3-n)*6:t}function We(t,e,n){return t+(e-t)*n}function Ue(t,e,n,i,r){return t[0]=e,t[1]=n,t[2]=i,t[3]=r,t}function Ye(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}var Xe=new Ee(20),Ze=null;function je(t,e){Ze&&Ye(Ze,e),Ze=Xe.put(t,Ze||e.slice())}function qe(t,e){if(t){e=e||[];var n=Xe.get(t);if(n)return Ye(e,n);var i=(t+="").replace(/ /g,"").toLowerCase();if(i in ze)return Ye(e,ze[i]),je(t,e),e;var r,o=i.length;if("#"===i.charAt(0))return 4===o||5===o?(r=parseInt(i.slice(1,4),16))>=0&&r<=4095?(Ue(e,(3840&r)>>4|(3840&r)>>8,240&r|(240&r)>>4,15&r|(15&r)<<4,5===o?parseInt(i.slice(4),16)/15:1),je(t,e),e):void Ue(e,0,0,0,1):7===o||9===o?(r=parseInt(i.slice(1,7),16))>=0&&r<=16777215?(Ue(e,(16711680&r)>>16,(65280&r)>>8,255&r,9===o?parseInt(i.slice(7),16)/255:1),je(t,e),e):void Ue(e,0,0,0,1):void 0;var a=i.indexOf("("),s=i.indexOf(")");if(-1!==a&&s+1===o){var l=i.substr(0,a),u=i.substr(a+1,s-(a+1)).split(","),h=1;switch(l){case"rgba":if(4!==u.length)return 3===u.length?Ue(e,+u[0],+u[1],+u[2],1):Ue(e,0,0,0,1);h=Ge(u.pop());case"rgb":return 3!==u.length?void Ue(e,0,0,0,1):(Ue(e,Fe(u[0]),Fe(u[1]),Fe(u[2]),h),je(t,e),e);case"hsla":return 4!==u.length?void Ue(e,0,0,0,1):(u[3]=Ge(u[3]),Ke(u,e),je(t,e),e);case"hsl":return 3!==u.length?void Ue(e,0,0,0,1):(Ke(u,e),je(t,e),e);default:return}}Ue(e,0,0,0,1)}}function Ke(t,e){var n=(parseFloat(t[0])%360+360)%360/360,i=Ge(t[1]),r=Ge(t[2]),o=r<=.5?r*(i+1):r+i-r*i,a=2*r-o;return Ue(e=e||[],Be(255*He(a,o,n+1/3)),Be(255*He(a,o,n)),Be(255*He(a,o,n-1/3)),1),4===t.length&&(e[3]=t[3]),e}function $e(t,e){var n=qe(t);if(n){for(var i=0;i<3;i++)n[i]=e<0?n[i]*(1-e)|0:(255-n[i])*e+n[i]|0,n[i]>255?n[i]=255:n[i]<0&&(n[i]=0);return an(n,4===n.length?"rgba":"rgb")}}function Je(t){var e=qe(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)}function Qe(t,e,n){if(e&&e.length&&t>=0&&t<=1){n=n||[];var i=t*(e.length-1),r=Math.floor(i),o=Math.ceil(i),a=e[r],s=e[o],l=i-r;return n[0]=Be(We(a[0],s[0],l)),n[1]=Be(We(a[1],s[1],l)),n[2]=Be(We(a[2],s[2],l)),n[3]=Ve(We(a[3],s[3],l)),n}}var tn=Qe;function en(t,e,n){if(e&&e.length&&t>=0&&t<=1){var i=t*(e.length-1),r=Math.floor(i),o=Math.ceil(i),a=qe(e[r]),s=qe(e[o]),l=i-r,u=an([Be(We(a[0],s[0],l)),Be(We(a[1],s[1],l)),Be(We(a[2],s[2],l)),Ve(We(a[3],s[3],l))],"rgba");return n?{color:u,leftIndex:r,rightIndex:o,value:i}:u}}var nn=en;function rn(t,e,n,i){var r=qe(t);if(t)return r=function(t){if(t){var e,n,i=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(i,r,o),s=Math.max(i,r,o),l=s-a,u=(s+a)/2;if(0===l)e=0,n=0;else{n=u<.5?l/(s+a):l/(2-s-a);var h=((s-i)/6+l/2)/l,c=((s-r)/6+l/2)/l,p=((s-o)/6+l/2)/l;i===s?e=p-c:r===s?e=1/3+h-p:o===s&&(e=2/3+c-h),e<0&&(e+=1),e>1&&(e-=1)}var d=[360*e,n,u];return null!=t[3]&&d.push(t[3]),d}}(r),null!=e&&(r[0]=function(t){return(t=Math.round(t))<0?0:t>360?360:t}(e)),null!=n&&(r[1]=Ge(n)),null!=i&&(r[2]=Ge(i)),an(Ke(r),"rgba")}function on(t,e){var n=qe(t);if(n&&null!=e)return n[3]=Ve(e),an(n,"rgba")}function an(t,e){if(t&&t.length){var n=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(n+=","+t[3]),e+"("+n+")"}}function sn(t,e){var n=qe(t);return n?(.299*n[0]+.587*n[1]+.114*n[2])*n[3]/255+(1-n[3])*e:0}var ln=Object.freeze({__proto__:null,parse:qe,lift:$e,toHex:Je,fastLerp:Qe,fastMapToColor:tn,lerp:en,mapToColor:nn,modifyHSL:rn,modifyAlpha:on,stringify:an,lum:sn,random:function(){return"rgb("+Math.round(255*Math.random())+","+Math.round(255*Math.random())+","+Math.round(255*Math.random())+")"}}),un=Array.prototype.slice;function hn(t,e,n){return(e-t)*n+t}function cn(t,e,n,i){for(var r=e.length,o=0;oa)i.length=a;else for(var s=o;s=2&&this.interpolable},t.prototype.getAdditiveTrack=function(){return this._additiveTrack},t.prototype.addKeyframe=function(t,e){t>=this.maxTime?this.maxTime=t:this._needsSort=!0;var n=this.keyframes,i=n.length;if(this.interpolable)if(k(e)){var r=function(t){return k(t&&t[0])?2:1}(e);if(i>0&&this.arrDim!==r)return void(this.interpolable=!1);if(1===r&&"number"!=typeof e[0]||2===r&&"number"!=typeof e[0][0])return void(this.interpolable=!1);if(i>0){var o=n[i-1];this._isAllValueEqual&&(1===r&&gn(e,o.value)||(this._isAllValueEqual=!1))}this.arrDim=r}else{if(this.arrDim>0)return void(this.interpolable=!1);if("string"==typeof e){var a=qe(e);a?(e=a,this.isValueColor=!0):this.interpolable=!1}else if("number"!=typeof e||isNaN(e))return void(this.interpolable=!1);if(this._isAllValueEqual&&i>0){o=n[i-1];(this.isValueColor&&!gn(o.value,e)||o.value!==e)&&(this._isAllValueEqual=!1)}}var s={time:t,value:e,percent:0};return this.keyframes.push(s),s},t.prototype.prepare=function(t){var e=this.keyframes;this._needsSort&&e.sort((function(t,e){return t.time-e.time}));for(var n=this.arrDim,i=e.length,r=e[i-1],o=0;o0&&o!==i-1&&fn(e[o].value,r.value,n);if(t&&this.needsAnimate()&&t.needsAnimate()&&n===t.arrDim&&this.isValueColor===t.isValueColor&&!t._finished){this._additiveTrack=t;var a=e[0].value;for(o=0;o=0&&!(o[n].percent<=e);n--);n=Math.min(n,a-2)}else{for(n=this._lastFrame;ne);n++);n=Math.min(n-1,a-2)}var h=o[n+1],c=o[n];if(c&&h){this._lastFrame=n,this._lastFramePercent=e;var p=h.percent-c.percent;if(0!==p){var d=(e-c.percent)/p,f=i?this._additiveValue:u?wn:t[s];if((l>0||u)&&!f&&(f=this._additiveValue=[]),this.useSpline){var g=o[n][r],y=o[0===n?n:n-1][r],v=o[n>a-2?a-1:n+1][r],m=o[n>a-3?a-1:n+2][r];if(l>0)1===l?vn(f,y,g,v,m,d,d*d,d*d*d):function(t,e,n,i,r,o,a,s){for(var l=e.length,u=e[0].length,h=0;h0)1===l?cn(f,c[r],h[r],d):function(t,e,n,i){for(var r=e.length,o=r&&e[0].length,a=0;a.5?e:t}(c[r],h[r],d),i?this._additiveValue=_:t[s]=_}i&&this._addToTarget(t)}}}},t.prototype._addToTarget=function(t){var e=this.arrDim,n=this.propName,i=this._additiveValue;0===e?this.isValueColor?(qe(t[n],wn),pn(wn,wn,i,1),t[n]=_n(wn)):t[n]=t[n]+i:1===e?pn(t[n],t[n],i,1):2===e&&dn(t[n],t[n],i,1)},t}(),Mn=function(){function t(t,e,n){this._tracks={},this._trackKeys=[],this._delay=0,this._maxTime=0,this._paused=!1,this._started=0,this._clip=null,this._target=t,this._loop=e,e&&n?b("Can' use additive animation on looped animation."):this._additiveAnimators=n}return t.prototype.getTarget=function(){return this._target},t.prototype.changeTarget=function(t){this._target=t},t.prototype.when=function(t,e){return this.whenWithKeys(t,e,z(e))},t.prototype.whenWithKeys=function(t,e,n){for(var i=this._tracks,r=0;r0)){this._started=1;for(var n=this,i=[],r=0;r1){var a=o.pop();r.addKeyframe(a.time,t[i]),r.prepare(r.getAdditiveTrack())}}}},t}(),In=function(){function t(t,e){this.x=t||0,this.y=e||0}return t.prototype.copy=function(t){return this.x=t.x,this.y=t.y,this},t.prototype.clone=function(){return new t(this.x,this.y)},t.prototype.set=function(t,e){return this.x=t,this.y=e,this},t.prototype.equal=function(t){return t.x===this.x&&t.y===this.y},t.prototype.add=function(t){return this.x+=t.x,this.y+=t.y,this},t.prototype.scale=function(t){this.x*=t,this.y*=t},t.prototype.scaleAndAdd=function(t,e){this.x+=t.x*e,this.y+=t.y*e},t.prototype.sub=function(t){return this.x-=t.x,this.y-=t.y,this},t.prototype.dot=function(t){return this.x*t.x+this.y*t.y},t.prototype.len=function(){return Math.sqrt(this.x*this.x+this.y*this.y)},t.prototype.lenSquare=function(){return this.x*this.x+this.y*this.y},t.prototype.normalize=function(){var t=this.len();return this.x/=t,this.y/=t,this},t.prototype.distance=function(t){var e=this.x-t.x,n=this.y-t.y;return Math.sqrt(e*e+n*n)},t.prototype.distanceSquare=function(t){var e=this.x-t.x,n=this.y-t.y;return e*e+n*n},t.prototype.negate=function(){return this.x=-this.x,this.y=-this.y,this},t.prototype.transform=function(t){if(t){var e=this.x,n=this.y;return this.x=t[0]*e+t[2]*n+t[4],this.y=t[1]*e+t[3]*n+t[5],this}},t.prototype.toArray=function(t){return t[0]=this.x,t[1]=this.y,t},t.prototype.fromArray=function(t){this.x=t[0],this.y=t[1]},t.set=function(t,e,n){t.x=e,t.y=n},t.copy=function(t,e){t.x=e.x,t.y=e.y},t.len=function(t){return Math.sqrt(t.x*t.x+t.y*t.y)},t.lenSquare=function(t){return t.x*t.x+t.y*t.y},t.dot=function(t,e){return t.x*e.x+t.y*e.y},t.add=function(t,e,n){t.x=e.x+n.x,t.y=e.y+n.y},t.sub=function(t,e,n){t.x=e.x-n.x,t.y=e.y-n.y},t.scale=function(t,e,n){t.x=e.x*n,t.y=e.y*n},t.scaleAndAdd=function(t,e,n,i){t.x=e.x+n.x*i,t.y=e.y+n.y*i},t.lerp=function(t,e,n,i){var r=1-i;t.x=r*e.x+i*n.x,t.y=r*e.y+i*n.y},t}(),Tn=Math.min,Cn=Math.max,An=new In,Dn=new In,Ln=new In,kn=new In,Pn=new In,On=new In,Rn=function(){function t(t,e,n,i){n<0&&isFinite(n)&&(t+=n,n=-n),i<0&&isFinite(i)&&(e+=i,i=-i),this.x=t,this.y=e,this.width=n,this.height=i}return t.prototype.union=function(t){var e=Tn(t.x,this.x),n=Tn(t.y,this.y);isFinite(this.x)&&isFinite(this.width)?this.width=Cn(t.x+t.width,this.x+this.width)-e:this.width=t.width,isFinite(this.y)&&isFinite(this.height)?this.height=Cn(t.y+t.height,this.y+this.height)-n:this.height=t.height,this.x=e,this.y=n},t.prototype.applyTransform=function(e){t.applyTransform(this,this,e)},t.prototype.calculateTransform=function(t){var e=this,n=t.width/e.width,i=t.height/e.height,r=[1,0,0,1,0,0];return me(r,r,[-e.x,-e.y]),xe(r,r,[n,i]),me(r,r,[t.x,t.y]),r},t.prototype.intersect=function(e,n){if(!e)return!1;e instanceof t||(e=t.create(e));var i=this,r=i.x,o=i.x+i.width,a=i.y,s=i.y+i.height,l=e.x,u=e.x+e.width,h=e.y,c=e.y+e.height,p=!(of&&(f=_,gf&&(f=x,v=n.x&&t<=n.x+n.width&&e>=n.y&&e<=n.y+n.height},t.prototype.clone=function(){return new t(this.x,this.y,this.width,this.height)},t.prototype.copy=function(e){t.copy(this,e)},t.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},t.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},t.prototype.isZero=function(){return 0===this.width||0===this.height},t.create=function(e){return new t(e.x,e.y,e.width,e.height)},t.copy=function(t,e){t.x=e.x,t.y=e.y,t.width=e.width,t.height=e.height},t.applyTransform=function(e,n,i){if(i){if(i[1]<1e-5&&i[1]>-1e-5&&i[2]<1e-5&&i[2]>-1e-5){var r=i[0],o=i[3],a=i[4],s=i[5];return e.x=n.x*r+a,e.y=n.y*o+s,e.width=n.width*r,e.height=n.height*o,e.width<0&&(e.x+=e.width,e.width=-e.width),void(e.height<0&&(e.y+=e.height,e.height=-e.height))}An.x=Ln.x=n.x,An.y=kn.y=n.y,Dn.x=kn.x=n.x+n.width,Dn.y=Ln.y=n.y+n.height,An.transform(i),kn.transform(i),Dn.transform(i),Ln.transform(i),e.x=Tn(An.x,Dn.x,Ln.x,kn.x),e.y=Tn(An.y,Dn.y,Ln.y,kn.y);var l=Cn(An.x,Dn.x,Ln.x,kn.x),u=Cn(An.y,Dn.y,Ln.y,kn.y);e.width=l-e.x,e.height=u-e.y}else e!==n&&t.copy(e,n)},t}(),Nn={},En="12px sans-serif";var zn={measureText:function(t,e){return xn||(xn=C().getContext("2d")),bn!==e&&(bn=xn.font=e||En),xn.measureText(t)}};function Bn(t,e){var n=Nn[e=e||En];n||(n=Nn[e]=new Ee(500));var i=n.get(t);return null==i&&(i=zn.measureText(t,e).width,n.put(t,i)),i}function Vn(t,e,n,i){var r=Bn(t,e),o=Wn(e),a=Gn(0,r,n),s=Hn(0,o,i);return new Rn(a,s,r,o)}function Fn(t,e,n,i){var r=((t||"")+"").split("\n");if(1===r.length)return Vn(r[0],e,n,i);for(var o=new Rn(0,0,0,0),a=0;a=0?parseFloat(t)/100*e:parseFloat(t):t}function Yn(t,e,n){var i=e.position||"inside",r=null!=e.distance?e.distance:5,o=n.height,a=n.width,s=o/2,l=n.x,u=n.y,h="left",c="top";if(i instanceof Array)l+=Un(i[0],n.width),u+=Un(i[1],n.height),h=null,c=null;else switch(i){case"left":l-=r,u+=s,h="right",c="middle";break;case"right":l+=r+a,u+=s,c="middle";break;case"top":l+=a/2,u-=r,h="center",c="bottom";break;case"bottom":l+=a/2,u+=o+r,h="center";break;case"inside":l+=a/2,u+=s,h="center",c="middle";break;case"insideLeft":l+=r,u+=s,c="middle";break;case"insideRight":l+=a-r,u+=s,h="right",c="middle";break;case"insideTop":l+=a/2,u+=r,h="center";break;case"insideBottom":l+=a/2,u+=o-r,h="center",c="bottom";break;case"insideTopLeft":l+=r,u+=r;break;case"insideTopRight":l+=a-r,u+=r,h="right";break;case"insideBottomLeft":l+=r,u+=o-r,c="bottom";break;case"insideBottomRight":l+=a-r,u+=o-r,h="right",c="bottom"}return(t=t||{}).x=l,t.y=u,t.align=h,t.verticalAlign=c,t}var Xn=1;"undefined"!=typeof window&&(Xn=Math.max(window.devicePixelRatio||window.screen&&window.screen.deviceXDPI/window.screen.logicalXDPI||1,1));var Zn=Xn,jn="#333",qn="#ccc",Kn="__zr_normal__",$n=["x","y","scaleX","scaleY","originX","originY","rotation","ignore"],Jn={x:!0,y:!0,scaleX:!0,scaleY:!0,originX:!0,originY:!0,rotation:!0,ignore:!1},Qn={},ti=new Rn(0,0,0,0),ei=function(){function t(t){this.id=x(),this.animators=[],this.currentStates=[],this.states={},this._init(t)}return t.prototype._init=function(t){this.attr(t)},t.prototype.drift=function(t,e,n){switch(this.draggable){case"horizontal":e=0;break;case"vertical":t=0}var i=this.transform;i||(i=this.transform=[1,0,0,1,0,0]),i[4]+=t,i[5]+=e,this.decomposeTransform(),this.markRedraw()},t.prototype.beforeUpdate=function(){},t.prototype.afterUpdate=function(){},t.prototype.update=function(){this.updateTransform(),this.__dirty&&this.updateInnerText()},t.prototype.updateInnerText=function(t){var e=this._textContent;if(e&&(!e.ignore||t)){this.textConfig||(this.textConfig={});var n=this.textConfig,i=n.local,r=e.attachedTransform,o=void 0,a=void 0,s=!1;r.parent=i?this:null;var l=!1;if(r.x=e.x,r.y=e.y,r.originX=e.originX,r.originY=e.originY,r.rotation=e.rotation,r.scaleX=e.scaleX,r.scaleY=e.scaleY,null!=n.position){var u=ti;n.layoutRect?u.copy(n.layoutRect):u.copy(this.getBoundingRect()),i||u.applyTransform(this.transform),this.calculateTextPosition?this.calculateTextPosition(Qn,n,u):Yn(Qn,n,u),r.x=Qn.x,r.y=Qn.y,o=Qn.align,a=Qn.verticalAlign;var h=n.origin;if(h&&null!=n.rotation){var c=void 0,p=void 0;"center"===h?(c=.5*u.width,p=.5*u.height):(c=Un(h[0],u.width),p=Un(h[1],u.height)),l=!0,r.originX=-r.x+c+(i?0:u.x),r.originY=-r.y+p+(i?0:u.y)}}null!=n.rotation&&(r.rotation=n.rotation);var d=n.offset;d&&(r.x+=d[0],r.y+=d[1],l||(r.originX=-d[0],r.originY=-d[1]));var f=null==n.inside?"string"==typeof n.position&&n.position.indexOf("inside")>=0:n.inside,g=this._innerTextDefaultStyle||(this._innerTextDefaultStyle={}),y=void 0,v=void 0,m=void 0;f&&this.canBeInsideText()?(y=n.insideFill,v=n.insideStroke,null!=y&&"auto"!==y||(y=this.getInsideTextFill()),null!=v&&"auto"!==v||(v=this.getInsideTextStroke(y),m=!0)):(y=n.outsideFill,v=n.outsideStroke,null!=y&&"auto"!==y||(y=this.getOutsideFill()),null!=v&&"auto"!==v||(v=this.getOutsideStroke(y),m=!0)),(y=y||"#000")===g.fill&&v===g.stroke&&m===g.autoStroke&&o===g.align&&a===g.verticalAlign||(s=!0,g.fill=y,g.stroke=v,g.autoStroke=m,g.align=o,g.verticalAlign=a,e.setDefaultTextStyle(g)),s&&e.dirtyStyle(),e.markRedraw()}},t.prototype.canBeInsideText=function(){return!0},t.prototype.getInsideTextFill=function(){return"#fff"},t.prototype.getInsideTextStroke=function(t){return"#000"},t.prototype.getOutsideFill=function(){return this.__zr&&this.__zr.isDarkMode()?qn:jn},t.prototype.getOutsideStroke=function(t){var e=this.__zr&&this.__zr.getBackgroundColor(),n="string"==typeof e&&qe(e);n||(n=[255,255,255,1]);for(var i=n[3],r=this.__zr.isDarkMode(),o=0;o<3;o++)n[o]=n[o]*i+(r?0:255)*(1-i);return n[3]=1,an(n,"rgba")},t.prototype.traverse=function(t,e){},t.prototype.attrKV=function(t,e){"textConfig"===t?this.setTextConfig(e):"textContent"===t?this.setTextContent(e):"clipPath"===t?this.setClipPath(e):"extra"===t?(this.extra=this.extra||{},I(this.extra,e)):this[t]=e},t.prototype.hide=function(){this.ignore=!0,this.markRedraw()},t.prototype.show=function(){this.ignore=!1,this.markRedraw()},t.prototype.attr=function(t,e){if("string"==typeof t)this.attrKV(t,e);else if(Y(t))for(var n=z(t),i=0;i0},t.prototype.getState=function(t){return this.states[t]},t.prototype.ensureState=function(t){var e=this.states;return e[t]||(e[t]={}),e[t]},t.prototype.clearStates=function(t){this.useState(Kn,!1,t)},t.prototype.useState=function(e,n,i){var r=e===Kn;if(this.hasState()||!r){var o=this.currentStates,a=this.stateTransition;if(!(A(o,e)>=0)||!n&&1!==o.length){var s;if(this.stateProxy&&!r&&(s=this.stateProxy(e)),s||(s=this.states&&this.states[e]),s||r){r||this.saveCurrentToNormalState(s);var l=!(!s||!s.hoverLayer);return l&&this._toggleHoverLayerFlag(!0),this._applyStateObj(e,s,this._normalState,n,!i&&!this.__inHover&&a&&a.duration>0,a),this._textContent&&this._textContent.useState(e,n),this._textGuide&&this._textGuide.useState(e,n),r?(this.currentStates=[],this._normalState={}):n?this.currentStates.push(e):this.currentStates=[e],this._updateAnimationTargets(),this.markRedraw(),!l&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~t.REDARAW_BIT),s}b("State "+e+" not exists.")}}},t.prototype.useStates=function(e,n){if(e.length){var i=[],r=this.currentStates,o=e.length,a=o===r.length;if(a)for(var s=0;s0,p),this._textContent&&this._textContent.useStates(e),this._textGuide&&this._textGuide.useStates(e),this._updateAnimationTargets(),this.currentStates=e.slice(),this.markRedraw(),!h&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~t.REDARAW_BIT)}else this.clearStates()},t.prototype._updateAnimationTargets=function(){for(var t=0;t=0){var n=this.currentStates.slice();n.splice(e,1),this.useStates(n)}},t.prototype.replaceState=function(t,e,n){var i=this.currentStates.slice(),r=A(i,t),o=A(i,e)>=0;r>=0?o?i.splice(r,1):i[r]=e:n&&!o&&i.push(e),this.useStates(i)},t.prototype.toggleState=function(t,e){e?this.useState(t,!0):this.removeState(t)},t.prototype._mergeStates=function(t){for(var e,n={},i=0;i=0&&e.splice(n,1)})),this.animators.push(t),n&&n.animation.addAnimator(t),n&&n.wakeUp()},t.prototype.updateDuringAnimation=function(t){this.markRedraw()},t.prototype.stopAnimation=function(t,e){for(var n=this.animators,i=n.length,r=[],o=0;o8)&&(r("position","_legacyPos","x","y"),r("scale","_legacyScale","scaleX","scaleY"),r("origin","_legacyOrigin","originX","originY"))}(),t}();function ni(t,e,n,i,r){var o=[];oi(t,"",t,e,n=n||{},i,o,r);var a=o.length,s=!1,l=n.done,u=n.aborted,h=function(){s=!0,--a<=0&&(s?l&&l():u&&u())},c=function(){--a<=0&&(s?l&&l():u&&u())};a||l&&l(),o.length>0&&n.during&&o[0].during((function(t,e){n.during(e)}));for(var p=0;p0||r.force&&!a.length){for(var m=t.animators,_=[],x=0;x=0;)r++;return r-e}function si(t,e,n,i,r){for(i===e&&i++;i>>1])<0?l=o:s=o+1;var u=i-s;switch(u){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;u>0;)t[s+u]=t[s+u-1],u--}t[s]=a}}function li(t,e,n,i,r,o){var a=0,s=0,l=1;if(o(t,e[n+r])>0){for(s=i-r;l0;)a=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),a+=r,l+=r}else{for(s=r+1;ls&&(l=s);var u=a;a=r-l,l=r-u}for(a++;a>>1);o(t,e[n+h])>0?a=h+1:l=h}return l}function ui(t,e,n,i,r,o){var a=0,s=0,l=1;if(o(t,e[n+r])<0){for(s=r+1;ls&&(l=s);var u=a;a=r-l,l=r-u}else{for(s=i-r;l=0;)a=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),a+=r,l+=r}for(a++;a>>1);o(t,e[n+h])<0?l=h:a=h+1}return l}function hi(t,e){var n,i,r=7,o=0;t.length;var a=[];function s(s){var l=n[s],u=i[s],h=n[s+1],c=i[s+1];i[s]=u+c,s===o-3&&(n[s+1]=n[s+2],i[s+1]=i[s+2]),o--;var p=ui(t[h],t,l,u,0,e);l+=p,0!==(u-=p)&&0!==(c=li(t[l+u-1],t,h,c,c-1,e))&&(u<=c?function(n,i,o,s){var l=0;for(l=0;l=7||d>=7);if(f)break;g<0&&(g=0),g+=2}if((r=g)<1&&(r=1),1===i){for(l=0;l=0;l--)t[d+l]=t[p+l];return void(t[c]=a[h])}var f=r;for(;;){var g=0,y=0,v=!1;do{if(e(a[h],t[u])<0){if(t[c--]=t[u--],g++,y=0,0==--i){v=!0;break}}else if(t[c--]=a[h--],y++,g=0,1==--s){v=!0;break}}while((g|y)=0;l--)t[d+l]=t[p+l];if(0===i){v=!0;break}}if(t[c--]=a[h--],1==--s){v=!0;break}if(0!==(y=s-li(t[u],a,0,s,s-1,e))){for(s-=y,d=(c-=y)+1,p=(h-=y)+1,l=0;l=7||y>=7);if(v)break;f<0&&(f=0),f+=2}(r=f)<1&&(r=1);if(1===s){for(d=(c-=i)+1,p=(u-=i)+1,l=i-1;l>=0;l--)t[d+l]=t[p+l];t[c]=a[h]}else{if(0===s)throw new Error;for(p=c-(s-1),l=0;l1;){var t=o-2;if(t>=1&&i[t-1]<=i[t]+i[t+1]||t>=2&&i[t-2]<=i[t]+i[t-1])i[t-1]i[t+1])break;s(t)}},forceMergeRuns:function(){for(;o>1;){var t=o-2;t>0&&i[t-1]=32;)e|=1&t,t>>=1;return t+e}(r);do{if((o=ai(t,n,i,e))s&&(l=s),si(t,n,n+l,n+o,e),o=l}a.pushRun(n,o),a.mergeRuns(),r-=o,n+=o}while(0!==r);a.forceMergeRuns()}}}var pi=!1;function di(){pi||(pi=!0,console.warn("z / z2 / zlevel of displayable is invalid, which may cause unexpected errors"))}function fi(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}var gi,yi,vi=function(){function t(){this._roots=[],this._displayList=[],this._displayListLen=0,this.displayableSortFunc=fi}return t.prototype.traverse=function(t,e){for(var n=0;n0&&(u.__clipPaths=[]),isNaN(u.z)&&(di(),u.z=0),isNaN(u.z2)&&(di(),u.z2=0),isNaN(u.zlevel)&&(di(),u.zlevel=0),this._displayList[this._displayListLen++]=u}var h=t.getDecalElement&&t.getDecalElement();h&&this._updateAndAddDisplayable(h,e,n);var c=t.getTextGuideLine();c&&this._updateAndAddDisplayable(c,e,n);var p=t.getTextContent();p&&this._updateAndAddDisplayable(p,e,n)}},t.prototype.addRoot=function(t){t.__zr&&t.__zr.storage===this||this._roots.push(t)},t.prototype.delRoot=function(t){if(t instanceof Array)for(var e=0,n=t.length;e=0&&this._roots.splice(i,1)}},t.prototype.delAllRoots=function(){this._roots=[],this._displayList=[],this._displayListLen=0},t.prototype.getRoots=function(){return this._roots},t.prototype.dispose=function(){this._displayList=null,this._roots=null},t}(),mi="undefined"!=typeof window&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(t){return setTimeout(t,16)},_i=function(t){function e(e){var n=t.call(this)||this;return n._running=!1,n._time=0,n._pausedTime=0,n._pauseStart=0,n._paused=!1,e=e||{},n.stage=e.stage||{},n.onframe=e.onframe||function(){},n}return n(e,t),e.prototype.addClip=function(t){t.animation&&this.removeClip(t),this._clipsHead?(this._clipsTail.next=t,t.prev=this._clipsTail,t.next=null,this._clipsTail=t):this._clipsHead=this._clipsTail=t,t.animation=this},e.prototype.addAnimator=function(t){t.animation=this;var e=t.getClip();e&&this.addClip(e)},e.prototype.removeClip=function(t){if(t.animation){var e=t.prev,n=t.next;e?e.next=n:this._clipsHead=n,n?n.prev=e:this._clipsTail=e,t.next=t.prev=t.animation=null}},e.prototype.removeAnimator=function(t){var e=t.getClip();e&&this.removeClip(e),t.animation=null},e.prototype.update=function(t){for(var e=(new Date).getTime()-this._pausedTime,n=e-this._time,i=this._clipsHead;i;){var r=i.next;i.step(e,n)?(i.ondestroy&&i.ondestroy(),this.removeClip(i),i=r):i=r}this._time=e,t||(this.onframe(n),this.trigger("frame",n),this.stage.update&&this.stage.update())},e.prototype._startLoop=function(){var t=this;this._running=!0,mi((function e(){t._running&&(mi(e),!t._paused&&t.update())}))},e.prototype.start=function(){this._running||(this._time=(new Date).getTime(),this._pausedTime=0,this._startLoop())},e.prototype.stop=function(){this._running=!1},e.prototype.pause=function(){this._paused||(this._pauseStart=(new Date).getTime(),this._paused=!0)},e.prototype.resume=function(){this._paused&&(this._pausedTime+=(new Date).getTime()-this._pauseStart,this._paused=!1)},e.prototype.clear=function(){for(var t=this._clipsHead;t;){var e=t.next;t.prev=t.next=t.animation=null,t=e}this._clipsHead=this._clipsTail=null},e.prototype.isFinished=function(){return null==this._clipsHead},e.prototype.animate=function(t,e){e=e||{},this.start();var n=new Mn(t,e.loop);return this.addAnimator(n),n},e}(Ft),xi=a.domSupported,bi=(yi={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},{mouse:gi=["click","dblclick","mousewheel","wheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],touch:["touchstart","touchend","touchmove"],pointer:O(gi,(function(t){var e=t.replace("mouse","pointer");return yi.hasOwnProperty(e)?e:t}))}),wi=["mousemove","mouseup"],Si=["pointermove","pointerup"],Mi=!1;function Ii(t){var e=t.pointerType;return"pen"===e||"touch"===e}function Ti(t){t&&(t.zrByTouch=!0)}function Ci(t,e){for(var n=e,i=!1;n&&9!==n.nodeType&&!(i=n.domBelongToZr||n!==e&&n===t.painterRoot);)n=n.parentNode;return i}var Ai=function(t,e){this.stopPropagation=ft,this.stopImmediatePropagation=ft,this.preventDefault=ft,this.type=e.type,this.target=this.currentTarget=t.dom,this.pointerType=e.pointerType,this.clientX=e.clientX,this.clientY=e.clientY},Di={mousedown:function(t){t=Qt(this.dom,t),this.__mayPointerCapture=[t.zrX,t.zrY],this.trigger("mousedown",t)},mousemove:function(t){t=Qt(this.dom,t);var e=this.__mayPointerCapture;!e||t.zrX===e[0]&&t.zrY===e[1]||this.__togglePointerCapture(!0),this.trigger("mousemove",t)},mouseup:function(t){t=Qt(this.dom,t),this.__togglePointerCapture(!1),this.trigger("mouseup",t)},mouseout:function(t){Ci(this,(t=Qt(this.dom,t)).toElement||t.relatedTarget)||(this.__pointerCapturing&&(t.zrEventControl="no_globalout"),this.trigger("mouseout",t))},wheel:function(t){Mi=!0,t=Qt(this.dom,t),this.trigger("mousewheel",t)},mousewheel:function(t){Mi||(t=Qt(this.dom,t),this.trigger("mousewheel",t))},touchstart:function(t){Ti(t=Qt(this.dom,t)),this.__lastTouchMoment=new Date,this.handler.processGesture(t,"start"),Di.mousemove.call(this,t),Di.mousedown.call(this,t)},touchmove:function(t){Ti(t=Qt(this.dom,t)),this.handler.processGesture(t,"change"),Di.mousemove.call(this,t)},touchend:function(t){Ti(t=Qt(this.dom,t)),this.handler.processGesture(t,"end"),Di.mouseup.call(this,t),+new Date-+this.__lastTouchMoment<300&&Di.click.call(this,t)},pointerdown:function(t){Di.mousedown.call(this,t)},pointermove:function(t){Ii(t)||Di.mousemove.call(this,t)},pointerup:function(t){Di.mouseup.call(this,t)},pointerout:function(t){Ii(t)||Di.mouseout.call(this,t)}};P(["click","dblclick","contextmenu"],(function(t){Di[t]=function(e){e=Qt(this.dom,e),this.trigger(t,e)}}));var Li={pointermove:function(t){Ii(t)||Li.mousemove.call(this,t)},pointerup:function(t){Li.mouseup.call(this,t)},mousemove:function(t){this.trigger("mousemove",t)},mouseup:function(t){var e=this.__pointerCapturing;this.__togglePointerCapture(!1),this.trigger("mouseup",t),e&&(t.zrEventControl="only_globalout",this.trigger("mouseout",t))}};function ki(t,e){var n=e.domHandlers;a.pointerEventsSupported?P(bi.pointer,(function(i){Oi(e,i,(function(e){n[i].call(t,e)}))})):(a.touchEventsSupported&&P(bi.touch,(function(i){Oi(e,i,(function(r){n[i].call(t,r),function(t){t.touching=!0,null!=t.touchTimer&&(clearTimeout(t.touchTimer),t.touchTimer=null),t.touchTimer=setTimeout((function(){t.touching=!1,t.touchTimer=null}),700)}(e)}))})),P(bi.mouse,(function(i){Oi(e,i,(function(r){r=Jt(r),e.touching||n[i].call(t,r)}))})))}function Pi(t,e){function n(n){Oi(e,n,(function(i){i=Jt(i),Ci(t,i.target)||(i=function(t,e){return Qt(t.dom,new Ai(t,e),!0)}(t,i),e.domHandlers[n].call(t,i))}),{capture:!0})}a.pointerEventsSupported?P(Si,n):a.touchEventsSupported||P(wi,n)}function Oi(t,e,n,i){t.mounted[e]=n,t.listenerOpts[e]=i,te(t.domTarget,e,n,i)}function Ri(t){var e,n,i,r,o=t.mounted;for(var a in o)o.hasOwnProperty(a)&&(e=t.domTarget,n=a,i=o[a],r=t.listenerOpts[a],Zt?e.removeEventListener(n,i,r):e.detachEvent("on"+n,i));t.mounted={}}var Ni=function(t,e){this.mounted={},this.listenerOpts={},this.touching=!1,this.domTarget=t,this.domHandlers=e},Ei=function(t){function e(e,n){var i=t.call(this)||this;return i.__pointerCapturing=!1,i.dom=e,i.painterRoot=n,i._localHandlerScope=new Ni(e,Di),xi&&(i._globalHandlerScope=new Ni(document,Li)),ki(i,i._localHandlerScope),i}return n(e,t),e.prototype.dispose=function(){Ri(this._localHandlerScope),xi&&Ri(this._globalHandlerScope)},e.prototype.setCursor=function(t){this.dom.style&&(this.dom.style.cursor=t||"default")},e.prototype.__togglePointerCapture=function(t){if(this.__mayPointerCapture=null,xi&&+this.__pointerCapturing^+t){this.__pointerCapturing=t;var e=this._globalHandlerScope;t?Pi(this,e):Ri(e)}},e}(Ft),zi=function(t){function e(e){var n=t.call(this)||this;return n.isGroup=!0,n._children=[],n.attr(e),n}return n(e,t),e.prototype.childrenRef=function(){return this._children},e.prototype.children=function(){return this._children.slice()},e.prototype.childAt=function(t){return this._children[t]},e.prototype.childOfName=function(t){for(var e=this._children,n=0;n=0&&(n.splice(i,0,t),this._doAdd(t))}return this},e.prototype.replaceAt=function(t,e){var n=this._children,i=n[e];if(t&&t!==this&&t.parent!==this&&t!==i){n[e]=t,i.parent=null;var r=this.__zr;r&&i.removeSelfFromZr(r),this._doAdd(t)}return this},e.prototype._doAdd=function(t){t.parent&&t.parent.remove(t),t.parent=this;var e=this.__zr;e&&e!==t.__zr&&t.addSelfToZr(e),e&&e.refresh()},e.prototype.remove=function(t){var e=this.__zr,n=this._children,i=A(n,t);return i<0||(n.splice(i,1),t.parent=null,e&&t.removeSelfFromZr(e),e&&e.refresh()),this},e.prototype.removeAll=function(){for(var t=this._children,e=this.__zr,n=0;n0&&(this._stillFrameAccum++,this._stillFrameAccum>this._sleepAfterStill&&this.animation.stop())},t.prototype.setSleepAfterStill=function(t){this._sleepAfterStill=t},t.prototype.wakeUp=function(){this.animation.start(),this._stillFrameAccum=0},t.prototype.addHover=function(t){},t.prototype.removeHover=function(t){},t.prototype.clearHover=function(){},t.prototype.refreshHover=function(){this._needsRefreshHover=!0},t.prototype.refreshHoverImmediately=function(){this._needsRefreshHover=!1,this.painter.refreshHover&&"canvas"===this.painter.getType()&&this.painter.refreshHover()},t.prototype.resize=function(t){t=t||{},this.painter.resize(t.width,t.height),this.handler.resize()},t.prototype.clearAnimation=function(){this.animation.clear()},t.prototype.getWidth=function(){return this.painter.getWidth()},t.prototype.getHeight=function(){return this.painter.getHeight()},t.prototype.pathToImage=function(t,e){if(this.painter.pathToImage)return this.painter.pathToImage(t,e)},t.prototype.setCursorStyle=function(t){this.handler.setCursorStyle(t)},t.prototype.findHover=function(t,e){return this.handler.findHover(t,e)},t.prototype.on=function(t,e,n){return this.handler.on(t,e,n),this},t.prototype.off=function(t,e){this.handler.off(t,e)},t.prototype.trigger=function(t,e){this.handler.trigger(t,e)},t.prototype.clear=function(){for(var t=this.storage.getRoots(),e=0;e0){if(t<=e[0])return n[0];if(t>=e[1])return n[1]}else{if(t>=e[0])return n[0];if(t<=e[1])return n[1]}else{if(t===e[0])return n[0];if(t===e[1])return n[1]}return(t-e[0])/r*o+n[0]}function Zi(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%"}return"string"==typeof t?(n=t,n.replace(/^\s+|\s+$/g,"")).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t;var n}function ji(t,e,n){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t=(+t).toFixed(e),n?t:+t}function qi(t){return t.sort((function(t,e){return t-e})),t}function Ki(t){if(t=+t,isNaN(t))return 0;for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}function $i(t){var e=t.toString(),n=e.indexOf("e");if(n>0){var i=+e.slice(n+1);return i<0?-i:0}var r=e.indexOf(".");return r<0?0:e.length-1-r}function Ji(t,e){var n=Math.log,i=Math.LN10,r=Math.floor(n(t[1]-t[0])/i),o=Math.round(n(Math.abs(e[1]-e[0]))/i),a=Math.min(Math.max(-r+o,0),20);return isFinite(a)?a:20}function Qi(t,e,n){if(!t[e])return 0;var i=R(t,(function(t,e){return t+(isNaN(e)?0:e)}),0);if(0===i)return 0;for(var r=Math.pow(10,n),o=O(t,(function(t){return(isNaN(t)?0:t)/i*r*100})),a=100*r,s=O(o,(function(t){return Math.floor(t)})),l=R(s,(function(t,e){return t+e}),0),u=O(o,(function(t,e){return t-s[e]}));lh&&(h=u[p],c=p);++s[c],u[c]=0,++l}return s[e]/r}var tr=9007199254740991;function er(t){var e=2*Math.PI;return(t%e+e)%e}function nr(t){return t>-1e-4&&t=10&&e++,e}function sr(t,e){var n=ar(t),i=Math.pow(10,n),r=t/i;return t=(e?r<1.5?1:r<2.5?2:r<4?3:r<7?5:10:r<1?1:r<2?2:r<3?3:r<5?5:10)*i,n>=-20?+t.toFixed(n<0?-n:0):t}function lr(t,e){var n=(t.length-1)*e+1,i=Math.floor(n),r=+t[i-1],o=n-i;return o?r+o*(t[i]-r):r}function ur(t){t.sort((function(t,e){return s(t,e,0)?-1:1}));for(var e=-1/0,n=1,i=0;i=0||r&&A(r,s)<0)){var l=n.getShallow(s,e);null!=l&&(o[t[a][0]]=l)}}return o}}var $r=Kr([["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]]),Jr=function(){function t(){}return t.prototype.getAreaStyle=function(t,e){return $r(this,t,e)},t}(),Qr=new Ee(50);function to(t){if("string"==typeof t){var e=Qr.get(t);return e&&e.image}return t}function eo(t,e,n,i,r){if(t){if("string"==typeof t){if(e&&e.__zrImageSrc===t||!n)return e;var o=Qr.get(t),a={hostEl:n,cb:i,cbPayload:r};return o?!io(e=o.image)&&o.pending.push(a):((e=new Image).onload=e.onerror=no,Qr.put(t,e.__cachedImgObj={image:e,pending:[a]}),e.src=e.__zrImageSrc=t),e}return t}return e}function no(){var t=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var e=0;e=a;l++)s-=a;var u=Bn(n,e);return u>s&&(n="",u=0),s=t-u,r.ellipsis=n,r.ellipsisWidth=u,r.contentWidth=s,r.containerWidth=t,r}function so(t,e){var n=e.containerWidth,i=e.font,r=e.contentWidth;if(!n)return"";var o=Bn(t,i);if(o<=n)return t;for(var a=0;;a++){if(o<=r||a>=e.maxIterations){t+=e.ellipsis;break}var s=0===a?lo(t,r,e.ascCharWidth,e.cnCharWidth):o>0?Math.floor(t.length*r/o):0;o=Bn(t=t.substr(0,s),i)}return""===t&&(t=e.placeholder),t}function lo(t,e,n,i){for(var r=0,o=0,a=t.length;o0&&f+i.accumWidth>i.width&&(o=e.split("\n"),c=!0),i.accumWidth=f}else{var g=yo(e,h,i.width,i.breakAll,i.accumWidth);i.accumWidth=g.accumWidth+d,a=g.linesWidths,o=g.lines}}else o=e.split("\n");for(var y=0;y=33&&e<=255}(t)||!!fo[t]}function yo(t,e,n,i,r){for(var o=[],a=[],s="",l="",u=0,h=0,c=0;cn:r+h+d>n)?h?(s||l)&&(f?(s||(s=l,l="",h=u=0),o.push(s),a.push(h-u),l+=p,s="",h=u+=d):(l&&(s+=l,h+=u,l="",u=0),o.push(s),a.push(h),s=p,h=d)):f?(o.push(l),a.push(u),l=p,u=d):(o.push(p),a.push(d)):(h+=d,f?(l+=p,u+=d):(l&&(s+=l,l="",u=0),s+=p))}else l&&(s+=l,h+=u),o.push(s),a.push(h),s="",l="",u=0,h=0}return o.length||s||(s=t,l="",u=0),l&&(s+=l),s&&(o.push(s),a.push(h)),1===o.length&&(h+=r),{accumWidth:h,lines:o,linesWidths:a}}var vo="__zr_style_"+Math.round(10*Math.random()),mo={shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"#000",opacity:1,blend:"source-over"},_o={style:{shadowBlur:!0,shadowOffsetX:!0,shadowOffsetY:!0,shadowColor:!0,opacity:!0}};mo[vo]=!0;var xo=["z","z2","invisible"],bo=function(t){function e(e){return t.call(this,e)||this}var i;return n(e,t),e.prototype._init=function(e){for(var n=z(e),i=0;i-1e-8&&tTo||t<-1e-8}function No(t,e,n,i,r){var o=1-r;return o*o*(o*t+3*r*e)+r*r*(r*i+3*o*n)}function Eo(t,e,n,i,r){var o=1-r;return 3*(((e-t)*o+2*(n-e)*r)*o+(i-n)*r*r)}function zo(t,e,n,i,r,o){var a=i+3*(e-n)-t,s=3*(n-2*e+t),l=3*(e-t),u=t-r,h=s*s-3*a*l,c=s*l-9*a*u,p=l*l-3*s*u,d=0;if(Oo(h)&&Oo(c)){if(Oo(s))o[0]=0;else(M=-l/s)>=0&&M<=1&&(o[d++]=M)}else{var f=c*c-4*h*p;if(Oo(f)){var g=c/h,y=-g/2;(M=-s/a+g)>=0&&M<=1&&(o[d++]=M),y>=0&&y<=1&&(o[d++]=y)}else if(f>0){var v=Io(f),m=h*s+1.5*a*(-c+v),_=h*s+1.5*a*(-c-v);(M=(-s-((m=m<0?-Mo(-m,Do):Mo(m,Do))+(_=_<0?-Mo(-_,Do):Mo(_,Do))))/(3*a))>=0&&M<=1&&(o[d++]=M)}else{var x=(2*h*s-3*a*c)/(2*Io(h*h*h)),b=Math.acos(x)/3,w=Io(h),S=Math.cos(b),M=(-s-2*w*S)/(3*a),I=(y=(-s+w*(S+Ao*Math.sin(b)))/(3*a),(-s+w*(S-Ao*Math.sin(b)))/(3*a));M>=0&&M<=1&&(o[d++]=M),y>=0&&y<=1&&(o[d++]=y),I>=0&&I<=1&&(o[d++]=I)}}return d}function Bo(t,e,n,i,r){var o=6*n-12*e+6*t,a=9*e+3*i-3*t-9*n,s=3*e-3*t,l=0;if(Oo(a)){if(Ro(o))(h=-s/o)>=0&&h<=1&&(r[l++]=h)}else{var u=o*o-4*a*s;if(Oo(u))r[0]=-o/(2*a);else if(u>0){var h,c=Io(u),p=(-o-c)/(2*a);(h=(-o+c)/(2*a))>=0&&h<=1&&(r[l++]=h),p>=0&&p<=1&&(r[l++]=p)}}return l}function Vo(t,e,n,i,r,o){var a=(e-t)*r+t,s=(n-e)*r+e,l=(i-n)*r+n,u=(s-a)*r+a,h=(l-s)*r+s,c=(h-u)*r+u;o[0]=t,o[1]=a,o[2]=u,o[3]=c,o[4]=c,o[5]=h,o[6]=l,o[7]=i}function Fo(t,e,n,i,r,o,a,s,l,u,h){var c,p,d,f,g,y=.005,v=1/0;Lo[0]=l,Lo[1]=u;for(var m=0;m<1;m+=.05)ko[0]=No(t,n,r,a,m),ko[1]=No(e,i,o,s,m),(f=Pt(Lo,ko))=0&&f=0&&y1e-4)return s[0]=t-n,s[1]=e-i,l[0]=t+n,void(l[1]=e+i);if(Qo[0]=$o(r)*n+t,Qo[1]=Ko(r)*i+e,ta[0]=$o(o)*n+t,ta[1]=Ko(o)*i+e,u(s,Qo,ta),h(l,Qo,ta),(r%=Jo)<0&&(r+=Jo),(o%=Jo)<0&&(o+=Jo),r>o&&!a?o+=Jo:rr&&(ea[0]=$o(d)*n+t,ea[1]=Ko(d)*i+e,u(s,ea,s),h(l,ea,l))}var ua={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},ha=[],ca=[],pa=[],da=[],fa=[],ga=[],ya=Math.min,va=Math.max,ma=Math.cos,_a=Math.sin,xa=Math.sqrt,ba=Math.abs,wa=Math.PI,Sa=2*wa,Ma="undefined"!=typeof Float32Array,Ia=[];function Ta(t){return Math.round(t/wa*1e8)/1e8%2*wa}function Ca(t,e){var n=Ta(t[0]);n<0&&(n+=Sa);var i=n-t[0],r=t[1];r+=i,!e&&r-n>=Sa?r=n+Sa:e&&n-r>=Sa?r=n-Sa:!e&&n>r?r=n+(Sa-Ta(n-r)):e&&n0&&(this._ux=ba(n/Zn/t)||0,this._uy=ba(n/Zn/e)||0)},t.prototype.setDPR=function(t){this.dpr=t},t.prototype.setContext=function(t){this._ctx=t},t.prototype.getContext=function(){return this._ctx},t.prototype.beginPath=function(){return this._ctx&&this._ctx.beginPath(),this.reset(),this},t.prototype.reset=function(){this._saveData&&(this._len=0),this._lineDash&&(this._lineDash=null,this._dashOffset=0),this._pathSegLen&&(this._pathSegLen=null,this._pathLen=0),this._version++},t.prototype.moveTo=function(t,e){return this.addData(ua.M,t,e),this._ctx&&this._ctx.moveTo(t,e),this._x0=t,this._y0=e,this._xi=t,this._yi=e,this},t.prototype.lineTo=function(t,e){var n=ba(t-this._xi)>this._ux||ba(e-this._yi)>this._uy||this._len<5;return this.addData(ua.L,t,e),this._ctx&&n&&(this._needsDash?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),n&&(this._xi=t,this._yi=e),this},t.prototype.bezierCurveTo=function(t,e,n,i,r,o){return this.addData(ua.C,t,e,n,i,r,o),this._ctx&&(this._needsDash?this._dashedBezierTo(t,e,n,i,r,o):this._ctx.bezierCurveTo(t,e,n,i,r,o)),this._xi=r,this._yi=o,this},t.prototype.quadraticCurveTo=function(t,e,n,i){return this.addData(ua.Q,t,e,n,i),this._ctx&&(this._needsDash?this._dashedQuadraticTo(t,e,n,i):this._ctx.quadraticCurveTo(t,e,n,i)),this._xi=n,this._yi=i,this},t.prototype.arc=function(t,e,n,i,r,o){Ia[0]=i,Ia[1]=r,Ca(Ia,o),i=Ia[0];var a=(r=Ia[1])-i;return this.addData(ua.A,t,e,n,n,i,a,0,o?0:1),this._ctx&&this._ctx.arc(t,e,n,i,r,o),this._xi=ma(r)*n+t,this._yi=_a(r)*n+e,this},t.prototype.arcTo=function(t,e,n,i,r){return this._ctx&&this._ctx.arcTo(t,e,n,i,r),this},t.prototype.rect=function(t,e,n,i){return this._ctx&&this._ctx.rect(t,e,n,i),this.addData(ua.R,t,e,n,i),this},t.prototype.closePath=function(){this.addData(ua.Z);var t=this._ctx,e=this._x0,n=this._y0;return t&&(this._needsDash&&this._dashedLineTo(e,n),t.closePath()),this._xi=e,this._yi=n,this},t.prototype.fill=function(t){t&&t.fill(),this.toStatic()},t.prototype.stroke=function(t){t&&t.stroke(),this.toStatic()},t.prototype.setLineDash=function(t){if(t instanceof Array){this._lineDash=t,this._dashIdx=0;for(var e=0,n=0;nu.length&&(this._expandData(),u=this.data);for(var h=0;h0&&d<=t||h<0&&d>=t||0===h&&(c>0&&f<=e||c<0&&f>=e);)d+=h*(n=o[i=this._dashIdx]),f+=c*n,this._dashIdx=(i+1)%g,h>0&&dl||c>0&&fu||a[i%2?"moveTo":"lineTo"](h>=0?ya(d,t):va(d,t),c>=0?ya(f,e):va(f,e));h=d-t,c=f-e,this._dashOffset=-xa(h*h+c*c)},t.prototype._dashedBezierTo=function(t,e,n,i,r,o){var a,s,l,u,h,c=this._ctx,p=this._dashSum,d=this._dashOffset,f=this._lineDash,g=this._xi,y=this._yi,v=0,m=this._dashIdx,_=f.length,x=0;for(d<0&&(d=p+d),d%=p,a=0;a<1;a+=.1)s=No(g,t,n,r,a+.1)-No(g,t,n,r,a),l=No(y,e,i,o,a+.1)-No(y,e,i,o,a),v+=xa(s*s+l*l);for(;m<_&&!((x+=f[m])>d);m++);for(a=(x-d)/v;a<=1;)u=No(g,t,n,r,a),h=No(y,e,i,o,a),m%2?c.moveTo(u,h):c.lineTo(u,h),a+=f[m]/v,m=(m+1)%_;m%2!=0&&c.lineTo(r,o),s=r-u,l=o-h,this._dashOffset=-xa(s*s+l*l)},t.prototype._dashedQuadraticTo=function(t,e,n,i){var r=n,o=i;n=(n+2*t)/3,i=(i+2*e)/3,t=(this._xi+2*t)/3,e=(this._yi+2*e)/3,this._dashedBezierTo(t,e,n,i,r,o)},t.prototype.toStatic=function(){if(this._saveData){var t=this.data;t instanceof Array&&(t.length=this._len,Ma&&this._len>11&&(this.data=new Float32Array(t)))}},t.prototype.getBoundingRect=function(){pa[0]=pa[1]=fa[0]=fa[1]=Number.MAX_VALUE,da[0]=da[1]=ga[0]=ga[1]=-Number.MAX_VALUE;var t,e=this.data,n=0,i=0,r=0,o=0;for(t=0;tn||ba(y)>i||c===e-1)&&(f=Math.sqrt(D*D+y*y),r=g,o=_);break;case ua.C:var v=t[c++],m=t[c++],_=(g=t[c++],t[c++]),x=t[c++],b=t[c++];f=Go(r,o,v,m,g,_,x,b,10),r=x,o=b;break;case ua.Q:f=Zo(r,o,v=t[c++],m=t[c++],g=t[c++],_=t[c++],10),r=g,o=_;break;case ua.A:var w=t[c++],S=t[c++],M=t[c++],I=t[c++],T=t[c++],C=t[c++],A=C+T;c+=1;t[c++];d&&(a=ma(T)*M+w,s=_a(T)*I+S),f=va(M,I)*ya(Sa,Math.abs(C)),r=ma(A)*M+w,o=_a(A)*I+S;break;case ua.R:a=r=t[c++],s=o=t[c++],f=2*t[c++]+2*t[c++];break;case ua.Z:var D=a-r;y=s-o;f=Math.sqrt(D*D+y*y),r=a,o=s}f>=0&&(l[h++]=f,u+=f)}return this._pathLen=u,u},t.prototype.rebuildPath=function(t,e){var n,i,r,o,a,s,l,u,h=this.data,c=this._ux,p=this._uy,d=this._len,f=e<1,g=0,y=0;if(!f||(this._pathSegLen||this._calculateLength(),l=this._pathSegLen,u=e*this._pathLen))t:for(var v=0;vc||ba(s-o)>p||v===d-1){if(f){if(g+(H=l[y++])>u){var x=(u-g)/H;t.lineTo(r*(1-x)+a*x,o*(1-x)+s*x);break t}g+=H}t.lineTo(a,s),r=a,o=s}break;case ua.C:var b=h[v++],w=h[v++],S=h[v++],M=h[v++],I=h[v++],T=h[v++];if(f){if(g+(H=l[y++])>u){Vo(r,b,S,I,x=(u-g)/H,ha),Vo(o,w,M,T,x,ca),t.bezierCurveTo(ha[1],ca[1],ha[2],ca[2],ha[3],ca[3]);break t}g+=H}t.bezierCurveTo(b,w,S,M,I,T),r=I,o=T;break;case ua.Q:b=h[v++],w=h[v++],S=h[v++],M=h[v++];if(f){if(g+(H=l[y++])>u){Yo(r,b,S,x=(u-g)/H,ha),Yo(o,w,M,x,ca),t.quadraticCurveTo(ha[1],ca[1],ha[2],ca[2]);break t}g+=H}t.quadraticCurveTo(b,w,S,M),r=S,o=M;break;case ua.A:var C=h[v++],A=h[v++],D=h[v++],L=h[v++],k=h[v++],P=h[v++],O=h[v++],R=!h[v++],N=D>L?D:L,E=ba(D-L)>.001,z=k+P,B=!1;if(f)g+(H=l[y++])>u&&(z=k+P*(u-g)/H,B=!0),g+=H;if(E&&t.ellipse?t.ellipse(C,A,D,L,O,k,z,R):t.arc(C,A,N,k,z,R),B)break t;_&&(n=ma(k)*D+C,i=_a(k)*L+A),r=ma(z)*D+C,o=_a(z)*L+A;break;case ua.R:n=r=h[v],i=o=h[v+1],a=h[v++],s=h[v++];var V=h[v++],F=h[v++];if(f){if(g+(H=l[y++])>u){var G=u-g;t.moveTo(a,s),t.lineTo(a+ya(G,V),s),(G-=V)>0&&t.lineTo(a+V,s+ya(G,F)),(G-=F)>0&&t.lineTo(a+va(V-G,0),s+F),(G-=V)>0&&t.lineTo(a,s+va(F-G,0));break t}g+=H}t.rect(a,s,V,F);break;case ua.Z:if(f){var H;if(g+(H=l[y++])>u){x=(u-g)/H;t.lineTo(r*(1-x)+n*x,o*(1-x)+i*x);break t}g+=H}t.closePath(),r=n,o=i}}},t.CMD=ua,t.initDefaultProps=function(){var e=t.prototype;e._saveData=!0,e._needsDash=!1,e._dashOffset=0,e._dashIdx=0,e._dashSum=0,e._ux=0,e._uy=0}(),t}();function Da(t,e,n,i,r,o,a){if(0===r)return!1;var s=r,l=0;if(a>e+s&&a>i+s||at+s&&o>n+s||oe+c&&h>i+c&&h>o+c&&h>s+c||ht+c&&u>n+c&&u>r+c&&u>a+c||ue+u&&l>i+u&&l>o+u||lt+u&&s>n+u&&s>r+u||sn||h+ur&&(r+=Ra);var p=Math.atan2(l,s);return p<0&&(p+=Ra),p>=i&&p<=r||p+Ra>=i&&p+Ra<=r}function Ea(t,e,n,i,r,o){if(o>e&&o>i||or?s:0}var za=Aa.CMD,Ba=2*Math.PI;var Va=[-1,-1,-1],Fa=[-1,-1];function Ga(t,e,n,i,r,o,a,s,l,u){if(u>e&&u>i&&u>o&&u>s||u1&&(h=void 0,h=Fa[0],Fa[0]=Fa[1],Fa[1]=h),f=No(e,i,o,s,Fa[0]),d>1&&(g=No(e,i,o,s,Fa[1]))),2===d?ve&&s>i&&s>o||s=0&&h<=1&&(r[l++]=h);else{var u=a*a-4*o*s;if(Oo(u))(h=-a/(2*o))>=0&&h<=1&&(r[l++]=h);else if(u>0){var h,c=Io(u),p=(-a-c)/(2*o);(h=(-a+c)/(2*o))>=0&&h<=1&&(r[l++]=h),p>=0&&p<=1&&(r[l++]=p)}}return l}(e,i,o,s,Va);if(0===l)return 0;var u=Uo(e,i,o);if(u>=0&&u<=1){for(var h=0,c=Ho(e,i,o,u),p=0;pn||s<-n)return 0;var l=Math.sqrt(n*n-s*s);Va[0]=-l,Va[1]=l;var u=Math.abs(i-r);if(u<1e-4)return 0;if(u>=Ba-1e-4){i=0,r=Ba;var h=o?1:-1;return a>=Va[0]+t&&a<=Va[1]+t?h:0}if(i>r){var c=i;i=r,r=c}i<0&&(i+=Ba,r+=Ba);for(var p=0,d=0;d<2;d++){var f=Va[d];if(f+t>a){var g=Math.atan2(s,f);h=o?1:-1;g<0&&(g=Ba+g),(g>=i&&g<=r||g+Ba>=i&&g+Ba<=r)&&(g>Math.PI/2&&g<1.5*Math.PI&&(h=-h),p+=h)}}return p}function Ua(t,e,n,i,r){for(var o,a,s,l,u=t.data,h=t.len(),c=0,p=0,d=0,f=0,g=0,y=0;y1&&(n||(c+=Ea(p,d,f,g,i,r))),m&&(f=p=u[y],g=d=u[y+1]),v){case za.M:p=f=u[y++],d=g=u[y++];break;case za.L:if(n){if(Da(p,d,u[y],u[y+1],e,i,r))return!0}else c+=Ea(p,d,u[y],u[y+1],i,r)||0;p=u[y++],d=u[y++];break;case za.C:if(n){if(La(p,d,u[y++],u[y++],u[y++],u[y++],u[y],u[y+1],e,i,r))return!0}else c+=Ga(p,d,u[y++],u[y++],u[y++],u[y++],u[y],u[y+1],i,r)||0;p=u[y++],d=u[y++];break;case za.Q:if(n){if(ka(p,d,u[y++],u[y++],u[y],u[y+1],e,i,r))return!0}else c+=Ha(p,d,u[y++],u[y++],u[y],u[y+1],i,r)||0;p=u[y++],d=u[y++];break;case za.A:var _=u[y++],x=u[y++],b=u[y++],w=u[y++],S=u[y++],M=u[y++];y+=1;var I=!!(1-u[y++]);o=Math.cos(S)*b+_,a=Math.sin(S)*w+x,m?(f=o,g=a):c+=Ea(p,d,o,a,i,r);var T=(i-_)*w/b+_;if(n){if(Na(_,x,w,S,S+M,I,e,T,r))return!0}else c+=Wa(_,x,w,S,S+M,I,T,r);p=Math.cos(S+M)*b+_,d=Math.sin(S+M)*w+x;break;case za.R:if(f=p=u[y++],g=d=u[y++],o=f+u[y++],a=g+u[y++],n){if(Da(f,g,o,g,e,i,r)||Da(o,g,o,a,e,i,r)||Da(o,a,f,a,e,i,r)||Da(f,a,f,g,e,i,r))return!0}else c+=Ea(o,g,o,a,i,r),c+=Ea(f,a,f,g,i,r);break;case za.Z:if(n){if(Da(p,d,f,g,e,i,r))return!0}else c+=Ea(p,d,f,g,i,r);p=f,d=g}}return n||(s=d,l=g,Math.abs(s-l)<1e-4)||(c+=Ea(p,d,f,g,i,r)||0),0!==c}var Ya=T({fill:"#000",stroke:null,strokePercent:1,fillOpacity:1,strokeOpacity:1,lineDashOffset:0,lineWidth:1,lineCap:"butt",miterLimit:10,strokeNoScale:!1,strokeFirst:!1},mo),Xa={style:T({fill:!0,stroke:!0,strokePercent:!0,fillOpacity:!0,strokeOpacity:!0,lineDashOffset:!0,lineWidth:!0,miterLimit:!0},_o.style)},Za=["x","y","rotation","scaleX","scaleY","originX","originY","invisible","culling","z","z2","zlevel","parent"],ja=function(t){function e(e){return t.call(this,e)||this}var i;return n(e,t),e.prototype.update=function(){var n=this;t.prototype.update.call(this);var i=this.style;if(i.decal){var r=this._decalEl=this._decalEl||new e;r.buildPath===e.prototype.buildPath&&(r.buildPath=function(t){n.buildPath(t,n.shape)}),r.silent=!0;var o=r.style;for(var a in i)o[a]!==i[a]&&(o[a]=i[a]);o.fill=i.fill?i.decal:null,o.decal=null,o.shadowColor=null,i.strokeFirst&&(o.stroke=null);for(var s=0;s.5?jn:e>.2?"#eee":qn}if(t)return qn}return jn},e.prototype.getInsideTextStroke=function(t){var e=this.style.fill;if(H(e)){var n=this.__zr;if(!(!n||!n.isDarkMode())===sn(t,0)<.4)return e}},e.prototype.buildPath=function(t,e,n){},e.prototype.pathUpdated=function(){this.__dirty&=~e.SHAPE_CHANGED_BIT},e.prototype.createPathProxy=function(){this.path=new Aa(!1)},e.prototype.hasStroke=function(){var t=this.style,e=t.stroke;return!(null==e||"none"===e||!(t.lineWidth>0))},e.prototype.hasFill=function(){var t=this.style.fill;return null!=t&&"none"!==t},e.prototype.getBoundingRect=function(){var t=this._rect,n=this.style,i=!t;if(i){var r=!1;this.path||(r=!0,this.createPathProxy());var o=this.path;(r||this.__dirty&e.SHAPE_CHANGED_BIT)&&(o.beginPath(),this.buildPath(o,this.shape,!1),this.pathUpdated()),t=o.getBoundingRect()}if(this._rect=t,this.hasStroke()&&this.path&&this.path.len()>0){var a=this._rectWithStroke||(this._rectWithStroke=t.clone());if(this.__dirty||i){a.copy(t);var s=n.strokeNoScale?this.getLineScale():1,l=n.lineWidth;if(!this.hasFill()){var u=this.strokeContainThreshold;l=Math.max(l,null==u?4:u)}s>1e-10&&(a.width+=l/s,a.height+=l/s,a.x-=l/s/2,a.y-=l/s/2)}return a}return t},e.prototype.contain=function(t,e){var n=this.transformCoordToLocal(t,e),i=this.getBoundingRect(),r=this.style;if(t=n[0],e=n[1],i.contain(t,e)){var o=this.path;if(this.hasStroke()){var a=r.lineWidth,s=r.strokeNoScale?this.getLineScale():1;if(s>1e-10&&(this.hasFill()||(a=Math.max(a,this.strokeContainThreshold)),function(t,e,n,i){return Ua(t,e,!0,n,i)}(o,a/s,t,e)))return!0}if(this.hasFill())return function(t,e,n){return Ua(t,0,!1,e,n)}(o,t,e)}return!1},e.prototype.dirtyShape=function(){this.__dirty|=e.SHAPE_CHANGED_BIT,this._rect&&(this._rect=null),this._decalEl&&this._decalEl.dirtyShape(),this.markRedraw()},e.prototype.dirty=function(){this.dirtyStyle(),this.dirtyShape()},e.prototype.animateShape=function(t){return this.animate("shape",t)},e.prototype.updateDuringAnimation=function(t){"style"===t?this.dirtyStyle():"shape"===t?this.dirtyShape():this.markRedraw()},e.prototype.attrKV=function(e,n){"shape"===e?this.setShape(n):t.prototype.attrKV.call(this,e,n)},e.prototype.setShape=function(t,e){var n=this.shape;return n||(n=this.shape={}),"string"==typeof t?n[t]=e:I(n,t),this.dirtyShape(),this},e.prototype.shapeChanged=function(){return!!(this.__dirty&e.SHAPE_CHANGED_BIT)},e.prototype.createStyle=function(t){return pt(Ya,t)},e.prototype._innerSaveToNormal=function(e){t.prototype._innerSaveToNormal.call(this,e);var n=this._normalState;e.shape&&!n.shape&&(n.shape=I({},this.shape))},e.prototype._applyStateObj=function(e,n,i,r,o,a){t.prototype._applyStateObj.call(this,e,n,i,r,o,a);var s,l=!(n&&r);if(n&&n.shape?o?r?s=n.shape:(s=I({},i.shape),I(s,n.shape)):(s=I({},r?this.shape:i.shape),I(s,n.shape)):l&&(s=i.shape),s)if(o){this.shape=I({},this.shape);for(var u={},h=z(s),c=0;c0},e.prototype.hasFill=function(){var t=this.style.fill;return null!=t&&"none"!==t},e.prototype.createStyle=function(t){return pt(qa,t)},e.prototype.setBoundingRect=function(t){this._rect=t},e.prototype.getBoundingRect=function(){var t=this.style;if(!this._rect){var e=t.text;null!=e?e+="":e="";var n=Fn(e,t.font,t.textAlign,t.textBaseline);if(n.x+=t.x||0,n.y+=t.y||0,this.hasStroke()){var i=t.lineWidth;n.x-=i/2,n.y-=i/2,n.width+=i,n.height+=i}this._rect=n}return this._rect},e.initDefaultProps=void(e.prototype.dirtyRectTolerance=10),e}(bo);Ka.prototype.type="tspan";var $a=T({x:0,y:0},mo),Ja={style:T({x:!0,y:!0,width:!0,height:!0,sx:!0,sy:!0,sWidth:!0,sHeight:!0},_o.style)};var Qa=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.createStyle=function(t){return pt($a,t)},e.prototype._getSize=function(t){var e=this.style,n=e[t];if(null!=n)return n;var i,r=(i=e.image)&&"string"!=typeof i&&i.width&&i.height?e.image:this.__image;if(!r)return 0;var o="width"===t?"height":"width",a=e[o];return null==a?r[t]:r[t]/r[o]*a},e.prototype.getWidth=function(){return this._getSize("width")},e.prototype.getHeight=function(){return this._getSize("height")},e.prototype.getAnimationStyleProps=function(){return Ja},e.prototype.getBoundingRect=function(){var t=this.style;return this._rect||(this._rect=new Rn(t.x||0,t.y||0,this.getWidth(),this.getHeight())),this._rect},e}(bo);Qa.prototype.type="image";var ts=Math.round;function es(t,e,n){if(e){var i=e.x1,r=e.x2,o=e.y1,a=e.y2;t.x1=i,t.x2=r,t.y1=o,t.y2=a;var s=n&&n.lineWidth;return s?(ts(2*i)===ts(2*r)&&(t.x1=t.x2=is(i,s,!0)),ts(2*o)===ts(2*a)&&(t.y1=t.y2=is(o,s,!0)),t):t}}function ns(t,e,n){if(e){var i=e.x,r=e.y,o=e.width,a=e.height;t.x=i,t.y=r,t.width=o,t.height=a;var s=n&&n.lineWidth;return s?(t.x=is(i,s,!0),t.y=is(r,s,!0),t.width=Math.max(is(i+o,s,!1)-t.x,0===o?0:1),t.height=Math.max(is(r+a,s,!1)-t.y,0===a?0:1),t):t}}function is(t,e,n){if(!e)return t;var i=ts(2*t);return(i+ts(e))%2==0?i/2:(i+(n?1:-1))/2}var rs=function(){this.x=0,this.y=0,this.width=0,this.height=0},os={},as=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultShape=function(){return new rs},e.prototype.buildPath=function(t,e){var n,i,r,o;if(this.subPixelOptimize){var a=ns(os,e,this.style);n=a.x,i=a.y,r=a.width,o=a.height,a.r=e.r,e=a}else n=e.x,i=e.y,r=e.width,o=e.height;e.r?function(t,e){var n,i,r,o,a,s=e.x,l=e.y,u=e.width,h=e.height,c=e.r;u<0&&(s+=u,u=-u),h<0&&(l+=h,h=-h),"number"==typeof c?n=i=r=o=c:c instanceof Array?1===c.length?n=i=r=o=c[0]:2===c.length?(n=r=c[0],i=o=c[1]):3===c.length?(n=c[0],i=o=c[1],r=c[2]):(n=c[0],i=c[1],r=c[2],o=c[3]):n=i=r=o=0,n+i>u&&(n*=u/(a=n+i),i*=u/a),r+o>u&&(r*=u/(a=r+o),o*=u/a),i+r>h&&(i*=h/(a=i+r),r*=h/a),n+o>h&&(n*=h/(a=n+o),o*=h/a),t.moveTo(s+n,l),t.lineTo(s+u-i,l),0!==i&&t.arc(s+u-i,l+i,i,-Math.PI/2,0),t.lineTo(s+u,l+h-r),0!==r&&t.arc(s+u-r,l+h-r,r,0,Math.PI/2),t.lineTo(s+o,l+h),0!==o&&t.arc(s+o,l+h-o,o,Math.PI/2,Math.PI),t.lineTo(s,l+n),0!==n&&t.arc(s+n,l+n,n,Math.PI,1.5*Math.PI)}(t,e):t.rect(n,i,r,o)},e.prototype.isZeroArea=function(){return!this.shape.width||!this.shape.height},e}(ja);as.prototype.type="rect";var ss={fill:"#000"},ls={style:T({fill:!0,stroke:!0,fillOpacity:!0,strokeOpacity:!0,lineWidth:!0,fontSize:!0,lineHeight:!0,width:!0,height:!0,textShadowColor:!0,textShadowBlur:!0,textShadowOffsetX:!0,textShadowOffsetY:!0,backgroundColor:!0,padding:!0,borderColor:!0,borderWidth:!0,borderRadius:!0},_o.style)},us=function(t){function e(e){var n=t.call(this)||this;return n.type="text",n._children=[],n._defaultStyle=ss,n.attr(e),n}return n(e,t),e.prototype.childrenRef=function(){return this._children},e.prototype.update=function(){this.styleChanged()&&this._updateSubTexts();for(var e=0;ep&&u){var d=Math.floor(p/l);n=n.slice(0,d)}var f=p,g=h;if(r&&(f+=r[0]+r[2],null!=g&&(g+=r[1]+r[3])),t&&a&&null!=g)for(var y=ao(h,o,e.ellipsis,{minChar:e.truncateMinChar,placeholder:e.placeholder}),v=0;v0,I=null!=t.width&&("truncate"===t.overflow||"break"===t.overflow||"breakAll"===t.overflow),T=i.calculatedLineHeight,C=0;Cl&&po(n,t.substring(l,u),e,s),po(n,i[2],e,s,i[1]),l=ro.lastIndex}lo){b>0?(m.tokens=m.tokens.slice(0,b),y(m,x,_),n.lines=n.lines.slice(0,v+1)):n.lines=n.lines.slice(0,v);break t}var C=w.width,A=null==C||"auto"===C;if("string"==typeof C&&"%"===C.charAt(C.length-1))P.percentWidth=C,h.push(P),P.contentWidth=Bn(P.text,I);else{if(A){var D=w.backgroundColor,L=D&&D.image;L&&io(L=to(L))&&(P.width=Math.max(P.width,L.width*T/L.height))}var k=f&&null!=r?r-x:null;null!=k&&k=0&&"right"===(C=_[T]).align;)this._placeToken(C,t,b,f,I,"right",y),w-=C.width,I-=C.width,T--;for(M+=(n-(M-d)-(g-I)-w)/2;S<=T;)C=_[S],this._placeToken(C,t,b,f,M+C.width/2,"center",y),M+=C.width,S++;f+=b}},e.prototype._placeToken=function(t,e,n,i,r,o,a){var s=e.rich[t.styleName]||{};s.text=t.text;var l=t.verticalAlign,u=i+n/2;"top"===l?u=i+t.height/2:"bottom"===l&&(u=i+n-t.height/2),!t.isLineHolder&&ys(s)&&this._renderBackground(s,e,"right"===o?r-t.width:"center"===o?r-t.width/2:r,u-t.height/2,t.width,t.height);var h=!!s.backgroundColor,c=t.textPadding;c&&(r=fs(r,o,c),u-=t.height/2-c[0]-t.innerHeight/2);var p=this._getOrCreateChild(Ka),d=p.createStyle();p.useStyle(d);var f=this._defaultStyle,g=!1,y=0,v=ds("fill"in s?s.fill:"fill"in e?e.fill:(g=!0,f.fill)),m=ds("stroke"in s?s.stroke:"stroke"in e?e.stroke:h||a||f.autoStroke&&!g?null:(y=2,f.stroke)),_=s.textShadowBlur>0||e.textShadowBlur>0;d.text=t.text,d.x=r,d.y=u,_&&(d.shadowBlur=s.textShadowBlur||e.textShadowBlur||0,d.shadowColor=s.textShadowColor||e.textShadowColor||"transparent",d.shadowOffsetX=s.textShadowOffsetX||e.textShadowOffsetX||0,d.shadowOffsetY=s.textShadowOffsetY||e.textShadowOffsetY||0),d.textAlign=o,d.textBaseline="middle",d.font=t.font||En,d.opacity=et(s.opacity,e.opacity,1),m&&(d.lineWidth=et(s.lineWidth,e.lineWidth,y),d.lineDash=tt(s.lineDash,e.lineDash),d.lineDashOffset=e.lineDashOffset||0,d.stroke=m),v&&(d.fill=v);var x=t.contentWidth,b=t.contentHeight;p.setBoundingRect(new Rn(Gn(d.x,x,d.textAlign),Hn(d.y,b,d.textBaseline),x,b))},e.prototype._renderBackground=function(t,e,n,i,r,o){var a,s,l,u=t.backgroundColor,h=t.borderWidth,c=t.borderColor,p=H(u),d=t.borderRadius,f=this;if(p||h&&c){(a=this._getOrCreateChild(as)).useStyle(a.createStyle()),a.style.fill=null;var g=a.shape;g.x=n,g.y=i,g.width=r,g.height=o,g.r=d,a.dirtyShape()}if(p)(l=a.style).fill=u||null,l.fillOpacity=tt(t.fillOpacity,1);else if(u&&u.image){(s=this._getOrCreateChild(Qa)).onload=function(){f.dirtyStyle()};var y=s.style;y.image=u.image,y.x=n,y.y=i,y.width=r,y.height=o}h&&c&&((l=a.style).lineWidth=h,l.stroke=c,l.strokeOpacity=tt(t.strokeOpacity,1),l.lineDash=t.borderDash,l.lineDashOffset=t.borderDashOffset||0,a.strokeContainThreshold=0,a.hasFill()&&a.hasStroke()&&(l.strokeFirst=!0,l.lineWidth*=2));var v=(a||s).style;v.shadowBlur=t.shadowBlur||0,v.shadowColor=t.shadowColor||"transparent",v.shadowOffsetX=t.shadowOffsetX||0,v.shadowOffsetY=t.shadowOffsetY||0,v.opacity=et(t.opacity,e.opacity,1)},e.makeFont=function(t){var e="";if(t.fontSize||t.fontFamily||t.fontWeight){var n="";n="string"!=typeof t.fontSize||-1===t.fontSize.indexOf("px")&&-1===t.fontSize.indexOf("rem")&&-1===t.fontSize.indexOf("em")?isNaN(+t.fontSize)?"12px":t.fontSize+"px":t.fontSize,e=[t.fontStyle,t.fontWeight,n,t.fontFamily||"sans-serif"].join(" ")}return e&&ot(e)||t.textFont||t.font},e}(bo),hs={left:!0,right:1,center:1},cs={top:1,bottom:1,middle:1};function ps(t){if(t){t.font=us.makeFont(t);var e=t.align;"middle"===e&&(e="center"),t.align=null==e||hs[e]?e:"left";var n=t.verticalAlign;"center"===n&&(n="middle"),t.verticalAlign=null==n||cs[n]?n:"top",t.padding&&(t.padding=it(t.padding))}}function ds(t,e){return null==t||e<=0||"transparent"===t||"none"===t?null:t.image||t.colorStops?"#000":t}function fs(t,e,n){return"right"===e?t-n[1]:"center"===e?t+n[3]/2-n[1]/2:t+n[3]}function gs(t){var e=t.text;return null!=e&&(e+=""),e}function ys(t){return!!(t.backgroundColor||t.borderWidth&&t.borderColor)}var vs=Lr(),ms=1,_s={},xs=Lr(),bs=["emphasis","blur","select"],ws=["normal","emphasis","blur","select"],Ss=10,Ms="highlight",Is="downplay",Ts="select",Cs="unselect",As="toggleSelect";function Ds(t){return null!=t&&"none"!==t}var Ls=new Ee(100);function ks(t){if("string"!=typeof t)return t;var e=Ls.get(t);return e||(e=$e(t,-.1),Ls.put(t,e)),e}function Ps(t,e,n){t.onHoverStateChange&&(t.hoverState||0)!==n&&t.onHoverStateChange(e),t.hoverState=n}function Os(t){Ps(t,"emphasis",2)}function Rs(t){2===t.hoverState&&Ps(t,"normal",0)}function Ns(t){Ps(t,"blur",1)}function Es(t){1===t.hoverState&&Ps(t,"normal",0)}function zs(t){t.selected=!0}function Bs(t){t.selected=!1}function Vs(t,e,n){e(t,n)}function Fs(t,e,n){Vs(t,e,n),t.isGroup&&t.traverse((function(t){Vs(t,e,n)}))}function Gs(t,e){switch(e){case"emphasis":t.hoverState=2;break;case"normal":t.hoverState=0;break;case"blur":t.hoverState=1;break;case"select":t.selected=!0}}function Hs(t,e){var n=this.states[t];if(this.style){if("emphasis"===t)return function(t,e,n,i){var r=n&&A(n,"select")>=0,o=!1;if(t instanceof ja){var a=xs(t),s=r&&a.selectFill||a.normalFill,l=r&&a.selectStroke||a.normalStroke;if(Ds(s)||Ds(l)){var u=(i=i||{}).style||{};!Ds(u.fill)&&Ds(s)?(o=!0,i=I({},i),(u=I({},u)).fill=ks(s)):!Ds(u.stroke)&&Ds(l)&&(o||(i=I({},i),u=I({},u)),u.stroke=ks(l)),i.style=u}}if(i&&null==i.z2){o||(i=I({},i));var h=t.z2EmphasisLift;i.z2=t.z2+(null!=h?h:Ss)}return i}(this,0,e,n);if("blur"===t)return function(t,e,n){var i=A(t.currentStates,e)>=0,r=t.style.opacity,o=i?null:function(t,e,n,i){for(var r=t.style,o={},a=0;a0){var o={dataIndex:r,seriesIndex:t.seriesIndex};null!=i&&(o.dataType=i),e.push(o)}}))})),e}function ol(t,e,n){hl(t,!0),Fs(t,Ws),al(t,e,n)}function al(t,e,n){var i=vs(t);null!=e?(i.focus=e,i.blurScope=n):i.focus&&(i.focus=null)}var sl=["emphasis","blur","select"],ll={itemStyle:"getItemStyle",lineStyle:"getLineStyle",areaStyle:"getAreaStyle"};function ul(t,e,n,i){n=n||"itemStyle";for(var r=0;r1&&(a*=ml(f),s*=ml(f));var g=(r===o?-1:1)*ml((a*a*(s*s)-a*a*(d*d)-s*s*(p*p))/(a*a*(d*d)+s*s*(p*p)))||0,y=g*a*d/s,v=g*-s*p/a,m=(t+n)/2+xl(c)*y-_l(c)*v,_=(e+i)/2+_l(c)*y+xl(c)*v,x=Ml([1,0],[(p-y)/a,(d-v)/s]),b=[(p-y)/a,(d-v)/s],w=[(-1*p-y)/a,(-1*d-v)/s],S=Ml(b,w);if(Sl(b,w)<=-1&&(S=bl),Sl(b,w)>=1&&(S=0),S<0){var M=Math.round(S/bl*1e6)/1e6;S=2*bl+M%2*bl}h.addData(u,m,_,a,s,x,S,c,o)}var Tl=/([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi,Cl=/-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g;var Al=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.applyTransform=function(t){},e}(ja);function Dl(t){return null!=t.setData}function Ll(t,e){var n=function(t){var e=new Aa;if(!t)return e;var n,i=0,r=0,o=i,a=r,s=Aa.CMD,l=t.match(Tl);if(!l)return e;for(var u=0;uL*L+k*k&&(M=T,I=C),{cx:M,cy:I,x01:-h,y01:-c,x11:M*(r/b-1),y11:I*(r/b-1)}}function jl(t,e){var n=Ul(e.r,0),i=Ul(e.r0||0,0),r=n>0;if(r||i>0){if(r||(n=i,i=0),i>n){var o=n;n=i,i=o}var a,s=!!e.clockwise,l=e.startAngle,u=e.endAngle;if(l===u)a=0;else{var h=[l,u];Ca(h,!s),a=Hl(h[0]-h[1])}var c=e.cx,p=e.cy,d=e.cornerRadius||0,f=e.innerCornerRadius||0;if(n>Xl)if(a>zl-Xl)t.moveTo(c+n*Vl(l),p+n*Bl(l)),t.arc(c,p,n,l,u,!s),i>Xl&&(t.moveTo(c+i*Vl(u),p+i*Bl(u)),t.arc(c,p,i,u,l,s));else{var g=Hl(n-i)/2,y=Yl(g,d),v=Yl(g,f),m=v,_=y,x=n*Vl(l),b=n*Bl(l),w=i*Vl(u),S=i*Bl(u),M=void 0,I=void 0,T=void 0,C=void 0;if((y>Xl||v>Xl)&&(M=n*Vl(u),I=n*Bl(u),T=i*Vl(l),C=i*Bl(l),aXl)if(_>Xl){var N=Zl(T,C,x,b,n,_,s),E=Zl(M,I,w,S,n,_,s);t.moveTo(c+N.cx+N.x01,p+N.cy+N.y01),_Xl&&a>Xl)if(m>Xl){N=Zl(w,S,M,I,i,-m,s),E=Zl(x,b,T,C,i,-m,s);t.lineTo(c+N.cx+N.x01,p+N.cy+N.y01),m=2){if(i&&"spline"!==i){var o=function(t,e,n,i){var r,o,a,s,l=[],u=[],h=[],c=[];if(i){a=[1/0,1/0],s=[-1/0,-1/0];for(var p=0,d=t.length;pn-2?n-1:l+1],d=t[l>n-3?n-1:l+2]);var f=u*u,g=u*f;i.push([Ql(h[0],c[0],p[0],d[0],u,f,g),Ql(h[1],c[1],p[1],d[1],u,f,g)])}return i}(r,n)),t.moveTo(r[0][0],r[0][1]);s=1;for(var c=r.length;s_u[1]){if(a=!1,r)return a;var u=Math.abs(_u[0]-mu[1]),h=Math.abs(mu[0]-_u[1]);Math.min(u,h)>i.len()&&(u0?l?e.animateFrom(n,{duration:f,delay:y||0,easing:g,done:o,force:!!o||!!a,scope:t,during:a}):e.animateTo(n,{duration:f,delay:y||0,easing:g,done:o,force:!!o||!!a,setToFinal:!0,scope:t,during:a}):(e.stopAnimation(),!l&&e.attr(n),o&&o())}else e.stopAnimation(),!l&&e.attr(n),a&&a(1),o&&o()}function Fu(t,e,n,i,r,o){Vu("update",t,e,n,i,r,o)}function Gu(t,e,n,i,r,o){Vu("init",t,e,n,i,r,o)}function Hu(t,e,n,i,r,o){Yu(t)||Vu("remove",t,e,n,i,r,o)}function Wu(t,e,n,i){t.removeTextContent(),t.removeTextGuideLine(),Hu(t,{style:{opacity:0}},e,n,i)}function Uu(t,e,n){function i(){t.parent&&t.parent.remove(t)}t.isGroup?t.traverse((function(t){t.isGroup||Wu(t,e,n,i)})):Wu(t,e,n,i)}function Yu(t){if(!t.__zr)return!0;for(var e=0;eMath.abs(o[1])?o[0]>0?"right":"left":o[1]>0?"bottom":"top"}function qu(t){return!t.isGroup}function Ku(t,e,n){if(t&&e){var i,r=(i={},t.traverse((function(t){qu(t)&&t.anid&&(i[t.anid]=t)})),i);e.traverse((function(t){if(qu(t)&&t.anid){var e=r[t.anid];if(e){var i=o(t);t.attr(o(e)),Fu(t,i,n,vs(t).dataIndex)}}}))}function o(t){var e={x:t.x,y:t.y,rotation:t.rotation};return function(t){return null!=t.shape}(t)&&(e.shape=I({},t.shape)),e}}function $u(t,e){return O(t,(function(t){var n=t[0];n=Iu(n,e.x),n=Tu(n,e.x+e.width);var i=t[1];return i=Iu(i,e.y),[n,i=Tu(i,e.y+e.height)]}))}function Ju(t,e){var n=Iu(t.x,e.x),i=Tu(t.x+t.width,e.x+e.width),r=Iu(t.y,e.y),o=Tu(t.y+t.height,e.y+e.height);if(i>=n&&o>=r)return{x:n,y:r,width:i-n,height:o-r}}function Qu(t,e,n){var i=I({rectHover:!0},e),r=i.style={strokeNoScale:!0};if(n=n||{x:-1,y:-1,width:2,height:2},t)return 0===t.indexOf("image://")?(r.image=t.slice(8),T(r,n),new Qa(i)):Ou(t.replace("path://",""),i,n,"center")}function th(t,e,n,i,r){for(var o=0,a=r[r.length-1];o