2020_08_21_150711_preset_data.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528
  1. <?php
  2. use App\Models\Config;
  3. use App\Models\Country;
  4. use App\Models\EmailFilter;
  5. use App\Models\Label;
  6. use App\Models\Level;
  7. use App\Models\Rule;
  8. use App\Models\SsConfig;
  9. use App\Models\User;
  10. use Illuminate\Database\Migrations\Migration;
  11. class PresetData extends Migration {
  12. /**
  13. * Run the migrations.
  14. *
  15. * @return void
  16. */
  17. public function up() {
  18. // 生成初始管理账号
  19. User::create([
  20. 'username' => '管理员',
  21. 'email' => 'test@test.com',
  22. 'password' => Hash::make('123456'),
  23. 'port' => 10000,
  24. 'passwd' => Str::random(),
  25. 'vmess_id' => Str::uuid(),
  26. 'is_admin' => 1
  27. ]);
  28. // 生成最初的等级
  29. Level::insert(['level' => 0, 'name' => 'Free']);
  30. for($i = 1; $i < 8; $i++){
  31. Level::insert(['level' => $i, 'name' => 'VIP-'.$i]);
  32. }
  33. // ss系列 加密方式
  34. SsConfig::insert(['name' => 'none', 'type' => 1, 'is_default' => 1]);
  35. SsConfig::insert(['name' => 'rc4-md5']);
  36. SsConfig::insert(['name' => 'aes-128-cfb']);
  37. SsConfig::insert(['name' => 'aes-192-cfb']);
  38. SsConfig::insert(['name' => 'aes-256-cfb']);
  39. SsConfig::insert(['name' => 'aes-128-ctr']);
  40. SsConfig::insert(['name' => 'aes-192-ctr']);
  41. SsConfig::insert(['name' => 'aes-256-ctr']);
  42. SsConfig::insert(['name' => 'aes-128-gcm']);
  43. SsConfig::insert(['name' => 'aes-192-gcm']);
  44. SsConfig::insert(['name' => 'aes-256-gcm']);
  45. SsConfig::insert(['name' => 'bf-cfb']);
  46. SsConfig::insert(['name' => 'cast5-cfb']);
  47. SsConfig::insert(['name' => 'des-cfb']);
  48. SsConfig::insert(['name' => 'salsa20']);
  49. SsConfig::insert(['name' => 'chacha20']);
  50. SsConfig::insert(['name' => 'chacha20-ietf']);
  51. SsConfig::insert(['name' => 'chacha20-ietf-poly1305']);
  52. // ss系列 协议
  53. SsConfig::insert(['name' => 'origin', 'type' => 2, 'is_default' => 1]);
  54. SsConfig::insert(['name' => 'auth_sha1_v4', 'type' => 2]);
  55. SsConfig::insert(['name' => 'auth_aes128_md5', 'type' => 2]);
  56. SsConfig::insert(['name' => 'auth_aes128_sha1', 'type' => 2]);
  57. SsConfig::insert(['name' => 'auth_chain_a', 'type' => 2]);
  58. SsConfig::insert(['name' => 'auth_chain_b', 'type' => 2]);
  59. SsConfig::insert(['name' => 'auth_chain_c', 'type' => 2]);
  60. SsConfig::insert(['name' => 'auth_chain_d', 'type' => 2]);
  61. SsConfig::insert(['name' => 'auth_chain_e', 'type' => 2]);
  62. SsConfig::insert(['name' => 'auth_chain_f', 'type' => 2]);
  63. // ss系列 混淆
  64. SsConfig::insert(['name' => 'plain', 'type' => 3, 'is_default' => 1]);
  65. SsConfig::insert(['name' => 'http_simple', 'type' => 3]);
  66. SsConfig::insert(['name' => 'http_post', 'type' => 3]);
  67. SsConfig::insert(['name' => 'tls1.2_ticket_auth', 'type' => 3]);
  68. SsConfig::insert(['name' => 'tls1.2_ticket_fastauth', 'type' => 3]);
  69. $configList = [
  70. 'is_rand_port',
  71. 'is_user_rand_port',
  72. 'invite_num',
  73. 'is_register',
  74. 'is_invite_register',
  75. 'website_name',
  76. 'is_reset_password',
  77. 'reset_password_times',
  78. 'website_url',
  79. 'referral_type',
  80. 'active_times',
  81. 'is_checkin',
  82. 'min_rand_traffic',
  83. 'max_rand_traffic',
  84. 'wechat_qrcode',
  85. 'alipay_qrcode',
  86. 'traffic_limit_time',
  87. 'referral_traffic',
  88. 'referral_percent',
  89. 'referral_money',
  90. 'referral_status',
  91. 'default_traffic',
  92. 'traffic_warning',
  93. 'traffic_warning_percent',
  94. 'expire_warning',
  95. 'expire_days',
  96. 'reset_traffic',
  97. 'default_days',
  98. 'subscribe_max',
  99. 'min_port',
  100. 'max_port',
  101. 'is_captcha',
  102. 'is_traffic_ban',
  103. 'traffic_ban_value',
  104. 'traffic_ban_time',
  105. 'is_clear_log',
  106. 'is_node_offline',
  107. 'webmaster_email',
  108. 'is_notification',
  109. 'server_chan_key',
  110. 'is_subscribe_ban',
  111. 'subscribe_ban_times',
  112. 'codepay_url',
  113. 'codepay_id',
  114. 'codepay_key',
  115. 'is_free_code',
  116. 'is_forbid_robot',
  117. 'subscribe_domain',
  118. 'auto_release_port',
  119. 'website_callback_url',
  120. 'web_api_url',
  121. 'v2ray_license',
  122. 'trojan_license',
  123. 'v2ray_tls_provider',
  124. 'website_analytics',
  125. 'website_customer_service',
  126. 'register_ip_limit',
  127. 'is_email_filtering',
  128. 'is_push_bear',
  129. 'push_bear_send_key',
  130. 'push_bear_qrcode',
  131. 'is_ban_status',
  132. 'is_namesilo',
  133. 'namesilo_key',
  134. 'website_logo',
  135. 'website_home_logo',
  136. 'nodes_detection',
  137. 'detection_check_times',
  138. 'is_forbid_china',
  139. 'is_forbid_oversea',
  140. 'AppStore_id',
  141. 'AppStore_password',
  142. 'is_activate_account',
  143. 'node_daily_report',
  144. 'mix_subscribe',
  145. 'rand_subscribe',
  146. 'is_custom_subscribe',
  147. 'is_AliPay',
  148. 'is_QQPay',
  149. 'is_WeChatPay',
  150. 'is_otherPay',
  151. 'alipay_private_key',
  152. 'alipay_public_key',
  153. 'alipay_transport',
  154. 'alipay_currency',
  155. 'bitpay_secret',
  156. 'f2fpay_app_id',
  157. 'f2fpay_private_key',
  158. 'f2fpay_public_key',
  159. 'website_security_code',
  160. 'subject_name',
  161. 'geetest_id',
  162. 'geetest_key',
  163. 'google_captcha_sitekey',
  164. 'google_captcha_secret',
  165. 'user_invite_days',
  166. 'admin_invite_days',
  167. 'offline_check_times',
  168. 'payjs_mch_id',
  169. 'payjs_key',
  170. 'maintenance_mode',
  171. 'maintenance_time',
  172. 'maintenance_content',
  173. 'bark_key',
  174. 'hcaptcha_secret',
  175. 'hcaptcha_sitekey',
  176. 'paypal_username',
  177. 'paypal_password',
  178. 'paypal_secret',
  179. 'paypal_certificate',
  180. 'paypal_app_id',
  181. 'redirect_url',
  182. 'epay_url',
  183. 'epay_mch_id',
  184. 'epay_key'
  185. ];
  186. foreach($configList as $config){
  187. Config::insert(['name' => $config]);
  188. }
  189. Config::whereName('invite_num')->update(['value' => 3]);
  190. Config::whereName('is_register')->update(['value' => 1]);
  191. Config::whereName('is_invite_register')->update(['value' => 2]);
  192. Config::whereName('website_name')->update(['value' => 'ProxyPanel']);
  193. Config::whereName('is_reset_password')->update(['value' => 1]);
  194. Config::whereName('reset_password_times')->update(['value' => 3]);
  195. Config::whereName('website_url')->update(['value' => 'https://demo.proxypanel.ml']);
  196. Config::whereName('active_times')->update(['value' => 3]);
  197. Config::whereName('is_checkin')->update(['value' => 1]);
  198. Config::whereName('min_rand_traffic')->update(['value' => 10]);
  199. Config::whereName('max_rand_traffic')->update(['value' => 500]);
  200. Config::whereName('traffic_limit_time')->update(['value' => 1440]);
  201. Config::whereName('referral_traffic')->update(['value' => 1024]);
  202. Config::whereName('referral_percent')->update(['value' => 0.2]);
  203. Config::whereName('referral_money')->update(['value' => 100]);
  204. Config::whereName('referral_status')->update(['value' => 1]);
  205. Config::whereName('default_traffic')->update(['value' => 1024]);
  206. Config::whereName('traffic_warning_percent')->update(['value' => 80]);
  207. Config::whereName('expire_days')->update(['value' => 15]);
  208. Config::whereName('reset_traffic')->update(['value' => 1]);
  209. Config::whereName('default_days')->update(['value' => 7]);
  210. Config::whereName('subscribe_max')->update(['value' => 3]);
  211. Config::whereName('min_port')->update(['value' => 10000]);
  212. Config::whereName('max_port')->update(['value' => 65535]);
  213. Config::whereName('is_traffic_ban')->update(['value' => 1]);
  214. Config::whereName('traffic_ban_value')->update(['value' => 10]);
  215. Config::whereName('traffic_ban_time')->update(['value' => 60]);
  216. Config::whereName('is_clear_log')->update(['value' => 1]);
  217. Config::whereName('is_subscribe_ban')->update(['value' => 1]);
  218. Config::whereName('subscribe_ban_times')->update(['value' => 20]);
  219. Config::whereName('auto_release_port')->update(['value' => 1]);
  220. Config::whereName('register_ip_limit')->update(['value' => 5]);
  221. Config::whereName('detection_check_times')->update(['value' => 3]);
  222. Config::whereName('alipay_transport')->update(['value' => 'http']);
  223. Config::whereName('alipay_currency')->update(['value' => 'USD']);
  224. Config::whereName('user_invite_days')->update(['value' => 7]);
  225. Config::whereName('admin_invite_days')->update(['value' => 7]);
  226. // 节点用标签
  227. $labelList = [
  228. 'Netflix',
  229. 'Hulu',
  230. 'HBO',
  231. 'Amazon Video',
  232. 'DisneyNow',
  233. 'BBC',
  234. 'Channel 4',
  235. 'Fox+',
  236. 'Happyon',
  237. 'AbemeTV',
  238. 'DMM',
  239. 'NicoNico',
  240. 'Pixiv',
  241. 'TVer',
  242. 'TVB',
  243. 'HBO Go',
  244. 'BiliBili港澳台',
  245. '動畫瘋',
  246. '四季線上影視',
  247. 'LINE TV',
  248. 'Youtube Premium',
  249. '中国视频网站',
  250. '网易云音乐',
  251. 'QQ音乐',
  252. 'DisneyPlus',
  253. 'Pandora',
  254. 'SoundCloud',
  255. 'Spotify',
  256. 'TIDAL',
  257. 'TikTok',
  258. 'Pornhub',
  259. 'Twitch'
  260. ];
  261. foreach($labelList as $label){
  262. Label::insert(['name' => $label]);
  263. }
  264. // 黑名单邮箱 过滤列表
  265. $blackEmailSuffixList = [
  266. 'chacuo.com',
  267. '1766258.com',
  268. '3202.com',
  269. '4057.com',
  270. '4059.com',
  271. 'a7996.com',
  272. 'bccto.me',
  273. 'bnuis.com',
  274. 'chaichuang.com',
  275. 'cr219.com',
  276. 'cuirushi.org',
  277. 'dawin.com',
  278. 'jiaxin8736.com',
  279. 'lakqs.com',
  280. 'urltc.com',
  281. '027168.com',
  282. '10minutemail.net',
  283. '11163.com',
  284. '1shivom.com',
  285. 'auoie.com',
  286. 'bareed.ws',
  287. 'bit-degree.com',
  288. 'cjpeg.com',
  289. 'cool.fr.nf',
  290. 'courriel.fr.nf',
  291. 'disbox.net',
  292. 'disbox.org',
  293. 'fidelium10.com',
  294. 'get365.pw',
  295. 'ggr.la',
  296. 'grr.la',
  297. 'guerrillamail.biz',
  298. 'guerrillamail.com',
  299. 'guerrillamail.de',
  300. 'guerrillamail.net',
  301. 'guerrillamail.org',
  302. 'guerrillamailblock.com',
  303. 'hubii-network.com',
  304. 'hurify1.com',
  305. 'itoup.com',
  306. 'jetable.fr.nf',
  307. 'jnpayy.com',
  308. 'juyouxi.com',
  309. 'mail.bccto.me',
  310. 'www.bccto.me',
  311. 'mega.zik.dj',
  312. 'moakt.co',
  313. 'moakt.ws',
  314. 'molms.com',
  315. 'moncourrier.fr.nf',
  316. 'monemail.fr.nf',
  317. 'monmail.fr.nf',
  318. 'nomail.xl.cx',
  319. 'nospam.ze.tc',
  320. 'pay-mon.com',
  321. 'poly-swarm.com',
  322. 'sgmh.online',
  323. 'sharklasers.com',
  324. 'shiftrpg.com',
  325. 'spam4.me',
  326. 'speed.1s.fr',
  327. 'tmail.ws',
  328. 'tmails.net',
  329. 'tmpmail.net',
  330. 'tmpmail.org',
  331. 'travala10.com',
  332. 'yopmail.com',
  333. 'yopmail.fr',
  334. 'yopmail.net',
  335. 'yuoia.com',
  336. 'zep-hyr.com',
  337. 'zippiex.com',
  338. 'lrc8.com',
  339. '1otc.com',
  340. 'emailna.co',
  341. 'mailinator.com',
  342. 'nbzmr.com',
  343. 'awsoo.com',
  344. 'zhcne.com',
  345. '0box.eu',
  346. 'contbay.com',
  347. 'damnthespam.com',
  348. 'kurzepost.de',
  349. 'objectmail.com',
  350. 'proxymail.eu',
  351. 'rcpt.at',
  352. 'trash-mail.at',
  353. 'trashmail.at',
  354. 'trashmail.com',
  355. 'trashmail.io',
  356. 'trashmail.me',
  357. 'trashmail.net',
  358. 'wegwerfmail.de',
  359. 'wegwerfmail.net',
  360. 'wegwerfmail.org',
  361. 'nwytg.net',
  362. 'despam.it',
  363. 'spambox.us',
  364. 'spam.la',
  365. 'mytrashmail.com',
  366. 'mt2014.com',
  367. 'mt2015.com',
  368. 'thankyou2010.com',
  369. 'trash2009.com',
  370. 'mt2009.com',
  371. 'trashymail.com',
  372. 'tempemail.net',
  373. 'slopsbox.com',
  374. 'mailnesia.com',
  375. 'ezehe.com',
  376. 'tempail.com',
  377. 'newairmail.com',
  378. 'temp-mail.org',
  379. 'linshiyouxiang.net',
  380. 'zwoho.com',
  381. 'mailboxy.fun',
  382. 'crypto-net.club',
  383. 'guerrillamail.info',
  384. 'pokemail.net',
  385. 'odmail.cn',
  386. 'hlooy.com',
  387. 'ozlaq.com',
  388. '666email.com',
  389. 'linshiyou.com',
  390. 'linshiyou.pl',
  391. 'woyao.pl',
  392. 'yaowo.pl'
  393. ];
  394. foreach($blackEmailSuffixList as $emailSuffix){
  395. EmailFilter::insert(['type' => 1, 'words' => $emailSuffix]);
  396. }
  397. // 白名单邮箱 过滤列表
  398. $whiteEmailSuffixList = [
  399. 'qq.com',
  400. '163.com',
  401. '126.com',
  402. '189.com',
  403. 'sohu.com',
  404. 'gmail.com',
  405. 'outlook.com',
  406. 'icloud.com'
  407. ];
  408. foreach($whiteEmailSuffixList as $emailSuffix){
  409. EmailFilter::insert(['type' => 2, 'words' => $emailSuffix]);
  410. }
  411. $countryList = [
  412. 'au' => '澳大利亚',
  413. 'br' => '巴西',
  414. 'ca' => '加拿大',
  415. 'ch' => '瑞士',
  416. 'cn' => '中国',
  417. 'de' => '德国',
  418. 'dk' => '丹麦',
  419. 'eg' => '埃及',
  420. 'fr' => '法国',
  421. 'gr' => '希腊',
  422. 'hk' => '香港',
  423. 'id' => '印度尼西亚',
  424. 'ie' => '爱尔兰',
  425. 'il' => '以色列',
  426. 'in' => '印度',
  427. 'iq' => '伊拉克',
  428. 'ir' => '伊朗',
  429. 'it' => '意大利',
  430. 'jp' => '日本',
  431. 'kr' => '韩国',
  432. 'mx' => '墨西哥',
  433. 'my' => '马来西亚',
  434. 'nl' => '荷兰',
  435. 'no' => '挪威',
  436. 'nz' => '纽西兰',
  437. 'ph' => '菲律宾',
  438. 'ru' => '俄罗斯',
  439. 'se' => '瑞典',
  440. 'sg' => '新加坡',
  441. 'th' => '泰国',
  442. 'tr' => '土耳其',
  443. 'tw' => '台湾',
  444. 'uk' => '英国',
  445. 'us' => '美国',
  446. 'vn' => '越南',
  447. 'pl' => '波兰',
  448. 'kz' => '哈萨克斯坦',
  449. 'ua' => '乌克兰',
  450. 'ro' => '罗马尼亚',
  451. 'ae' => '阿联酋',
  452. 'za' => '南非',
  453. 'mm' => '缅甸',
  454. 'is' => '冰岛',
  455. 'fi' => '芬兰',
  456. 'lu' => '卢森堡',
  457. 'be' => '比利时',
  458. 'bg' => '保加利亚',
  459. 'lt' => '立陶宛',
  460. 'co' => '哥伦比亚',
  461. 'mo' => '澳门',
  462. 'ke' => '肯尼亚',
  463. 'cz' => '捷克',
  464. 'md' => '摩尔多瓦',
  465. 'es' => '西班牙',
  466. 'pk' => '巴基斯坦',
  467. 'pt' => '葡萄牙',
  468. 'hu' => '匈牙利',
  469. 'ar' => '阿根廷'
  470. ];
  471. foreach($countryList as $code => $name){
  472. Country::insert(['code' => $code, 'name' => $name]);
  473. }
  474. // 审核规则
  475. $ruleList = [
  476. '360' => '(.*.||)(^360|0360|1360|3600|360safe|^so|qhimg|qhmsg|^yunpan|qihoo|qhcdn|qhupdate|360totalsecurity|360shouji|qihucdn|360kan|secmp).(cn|com|net)',
  477. '腾讯管家' => '(.guanjia.qq.com|qqpcmgr|QQPCMGR)',
  478. '金山毒霸' => '(.*.||)(rising|kingsoft|duba|xindubawukong|jinshanduba).(com|net|org)',
  479. '暗网相关' => '(.*.||)(netvigator|torproject).(cn|com|net|org)',
  480. '百度定位' => '(api|ps|sv|offnavi|newvector|ulog.imap|newloc|tracknavi)(.map|).(baidu|n.shifen).com',
  481. '法轮功类' => '(.*.||)(dafahao|minghui|dongtaiwang|dajiyuan|falundata|shenyun|tuidang|epochweekly|epochtimes|ntdtv|falundafa|wujieliulan|zhengjian).(org|com|net)',
  482. 'BT扩展名' => '(torrent|.torrent|peer_id=|info_hash|get_peers|find_node|BitTorrent|announce_peer|announce.php?passkey=)',
  483. '邮件滥发' => '((^.*@)(guerrillamail|guerrillamailblock|sharklasers|grr|pokemail|spam4|bccto|chacuo|027168).(info|biz|com|de|net|org|me|la)|Subject|HELO|SMTP)',
  484. '迅雷下载' => '(.?)(xunlei|sandai|Thunder|XLLiveUD)(.)',
  485. '大陆应用' => '(.*.||)(baidu|qq|163|189|10000|10010|10086|sohu|sogoucdn|sogou|uc|58|taobao|qpic|bilibili|hdslb|acgvideo|sina|douban|doubanio|xiaohongshu|sinaimg|weibo|xiaomi|youzanyun|meituan|dianping|biliapi|huawei|pinduoduo|cnzz).(org|com|net|cn)',
  486. '大陆银行' => '(.*.||)(icbc|ccb|boc|bankcomm|abchina|cmbchina|psbc|cebbank|cmbc|pingan|spdb|citicbank|cib|hxb|bankofbeijing|hsbank|tccb|4001961200|bosc|hkbchina|njcb|nbcb|lj-bank|bjrcb|jsbchina|gzcb|cqcbank|czbank|hzbank|srcb|cbhb|cqrcb|grcbank|qdccb|bocd|hrbcb|jlbank|bankofdl|qlbchina|dongguanbank|cscb|hebbank|drcbank|zzbank|bsb|xmccb|hljrcc|jxnxs|gsrcu|fjnx|sxnxs|gx966888|gx966888|zj96596|hnnxs|ahrcu|shanxinj|hainanbank|scrcu|gdrcu|hbxh|ynrcc|lnrcc|nmgnxs|hebnx|jlnls|js96008|hnnx|sdnxs).(org|com|net|cn)',
  487. '台湾银行' => '(.*.||)(firstbank|bot|cotabank|megabank|tcb-bank|landbank|hncb|bankchb|tbb|ktb|tcbbank|scsb|bop|sunnybank|kgibank|fubon|ctbcbank|cathaybk|eximbank|bok|ubot|feib|yuantabank|sinopac|esunbank|taishinbank|jihsunbank|entiebank|hwataibank|csc|skbank).(org|com|net|tw)',
  488. '大陆第三方支付' => '(.*.||)(alipay|baifubao|yeepay|99bill|95516|51credit|cmpay|tenpay|lakala|jdpay).(org|com|net|cn)',
  489. '台湾特供' => '(.*.||)(visa|mycard|mastercard|gov|gash|beanfun|bank|line).(org|com|net|cn|tw|jp|kr)',
  490. '涉政治类' => '(.*.||)(shenzhoufilm|secretchina|renminbao|aboluowang|mhradio|guangming|zhengwunet|soundofhope|yuanming|zhuichaguoji|fgmtv|xinsheng|shenyunperformingarts|epochweekly|tuidang|shenyun|falundata|bannedbook|pincong|rfi|mingjingnews|boxun|rfa|scmp|ogate|voachinese).(org|com|net|rocks|fr)',
  491. '流媒体' => '(.*.||)(youtube|googlevideo|hulu|netflix|nflxvideo|akamai|nflximg|hbo|mtv|bbc|tvb).(org|club|com|net|tv)',
  492. '测速类' => '(.*.||)(fast|speedtest).(org|com|net|cn)',
  493. '外汇交易类' => '(.*.||)(metatrader4|metatrader5|mql5).(org|com|net)'
  494. ];
  495. foreach($ruleList as $name => $pattern){
  496. Rule::insert(['type' => 1, 'name' => $name, 'pattern' => $pattern]);
  497. }
  498. }
  499. /**
  500. * Reverse the migrations.
  501. *
  502. * @return void
  503. */
  504. public function down() {
  505. echo 'plz run php artisan migrate:fresh'.PHP_EOL;
  506. echo '请运行 php artisan migrate:fresh'.PHP_EOL;
  507. }
  508. }