Full Code of guyueyingmu/avbook for AI

master d3780741288c cached
179 files
1.2 MB
398.3k tokens
829 symbols
1 requests
Download .txt
Showing preview only (1,277K chars total). Download the full file or copy to clipboard to get everything.
Repository: guyueyingmu/avbook
Branch: master
Commit: d3780741288c
Files: 179
Total size: 1.2 MB

Directory structure:
gitextract_u3vjfv4n/

├── .editorconfig
├── .gitattributes
├── .gitignore
├── README.md
├── app/
│   ├── Console/
│   │   ├── Commands/
│   │   │   ├── AvmooCrawler.php
│   │   │   ├── BaseCrawler.php
│   │   │   ├── Bttool.php
│   │   │   ├── JavbusCrawler.php
│   │   │   ├── JavlibraryCrawler.php
│   │   │   ├── Scandir.php
│   │   │   └── SendEmails.php
│   │   ├── Kernel.php
│   │   └── Tools/
│   │       └── MedooEx.php
│   ├── Exceptions/
│   │   └── Handler.php
│   ├── Http/
│   │   ├── Controllers/
│   │   │   ├── API/
│   │   │   │   └── MovieinfoController.php
│   │   │   ├── Auth/
│   │   │   │   ├── ForgotPasswordController.php
│   │   │   │   ├── LoginController.php
│   │   │   │   ├── RegisterController.php
│   │   │   │   ├── ResetPasswordController.php
│   │   │   │   └── VerificationController.php
│   │   │   ├── AvbookController.php
│   │   │   └── Controller.php
│   │   ├── Kernel.php
│   │   └── Middleware/
│   │       ├── Authenticate.php
│   │       ├── CheckForMaintenanceMode.php
│   │       ├── EncryptCookies.php
│   │       ├── RedirectIfAuthenticated.php
│   │       ├── TrimStrings.php
│   │       ├── TrustProxies.php
│   │       └── VerifyCsrfToken.php
│   ├── Models/
│   │   ├── Actresses.php
│   │   ├── Avbooks.php
│   │   ├── Director.php
│   │   ├── Javbus.php
│   │   ├── Javlibrary.php
│   │   ├── Label.php
│   │   ├── Magnet.php
│   │   ├── Movies.php
│   │   ├── Series.php
│   │   └── Studio.php
│   ├── Providers/
│   │   ├── AppServiceProvider.php
│   │   ├── AuthServiceProvider.php
│   │   ├── BroadcastServiceProvider.php
│   │   ├── EventServiceProvider.php
│   │   └── RouteServiceProvider.php
│   ├── Tools/
│   │   └── CrawlerUpdate.php
│   └── User.php
├── artisan
├── bootstrap/
│   ├── app.php
│   └── cache/
│       └── .gitignore
├── composer.json
├── config/
│   ├── app.php
│   ├── auth.php
│   ├── avbook.php
│   ├── broadcasting.php
│   ├── cache.php
│   ├── database.php
│   ├── filesystems.php
│   ├── hashing.php
│   ├── logging.php
│   ├── mail.php
│   ├── queue.php
│   ├── services.php
│   ├── session.php
│   ├── urlconfig.php
│   └── view.php
├── database/
│   ├── .gitignore
│   ├── factories/
│   │   └── UserFactory.php
│   ├── migrations/
│   │   ├── 2019_05_11_083515_create_avbook_avmoo_director_table.php
│   │   ├── 2019_05_11_083515_create_avbook_avmoo_genre_table.php
│   │   ├── 2019_05_11_083515_create_avbook_avmoo_label_table.php
│   │   ├── 2019_05_11_083515_create_avbook_avmoo_movie_table.php
│   │   ├── 2019_05_11_083515_create_avbook_avmoo_series_table.php
│   │   ├── 2019_05_11_083515_create_avbook_avmoo_star_table.php
│   │   ├── 2019_05_11_083515_create_avbook_avmoo_studio_table.php
│   │   ├── 2019_05_11_083515_create_avbook_crawler_404_table.php
│   │   ├── 2019_05_11_083515_create_avbook_javbus_magnet_table.php
│   │   ├── 2019_05_11_083515_create_avbook_javbus_movie_table.php
│   │   ├── 2019_05_11_083515_create_avbook_javbus_series_table.php
│   │   ├── 2019_05_11_083515_create_avbook_javbus_star_table.php
│   │   ├── 2019_05_11_083515_create_avbook_javbus_studio_table.php
│   │   ├── 2019_07_02_090723_create_avbook_javlib_genre_table.php
│   │   ├── 2019_07_02_090723_create_avbook_javlib_movie_table.php
│   │   └── 2019_07_02_090723_create_avbook_javlib_vid_table.php
│   └── seeds/
│       └── DatabaseSeeder.php
├── newbra.sh
├── package.json
├── phpunit.xml
├── public/
│   ├── .htaccess
│   ├── avbook/
│   │   ├── StackBlur.js
│   │   ├── ads.js
│   │   ├── auto.js
│   │   ├── base.css
│   │   ├── base.js
│   │   ├── base2.css
│   │   ├── base2.js
│   │   ├── blurmask.css
│   │   ├── bootstrap-hover-dropdown.js
│   │   ├── focus.js
│   │   ├── gallery.js
│   │   ├── gallery2.js
│   │   ├── genre.css
│   │   ├── magnific-popup.css
│   │   ├── main.css
│   │   ├── mask.js
│   │   ├── movie-box.css
│   │   ├── movie.css
│   │   ├── nav.overlay.css
│   │   ├── nav.overlay.js
│   │   └── themes/
│   │       ├── krajee-fa/
│   │       │   ├── theme.css
│   │       │   └── theme.js
│   │       ├── krajee-fas/
│   │       │   ├── theme.css
│   │       │   └── theme.js
│   │       ├── krajee-svg/
│   │       │   ├── theme.css
│   │       │   └── theme.js
│   │       ├── krajee-uni/
│   │       │   ├── theme.css
│   │       │   └── theme.js
│   │       └── zh.js
│   ├── css/
│   │   └── app.css
│   ├── fonts/
│   │   └── FontAwesome.otf
│   ├── index.php
│   ├── js/
│   │   └── app.js
│   ├── robots.txt
│   └── web.config
├── resources/
│   ├── code_36/
│   │   ├── avbook_avmoo_en_end_code_36_star.txt
│   │   ├── avbook_avmoo_end_code_36_director.txt
│   │   ├── avbook_avmoo_end_code_36_label.txt
│   │   ├── avbook_avmoo_end_code_36_movie.txt
│   │   ├── avbook_avmoo_end_code_36_series.txt
│   │   ├── avbook_avmoo_end_code_36_star.txt
│   │   ├── avbook_avmoo_end_code_36_studio.txt
│   │   ├── avbook_javbus_en_end_code_36_star.txt
│   │   ├── avbook_javbus_end_code_36_director.txt
│   │   ├── avbook_javbus_end_code_36_label.txt
│   │   ├── avbook_javbus_end_code_36_series.txt
│   │   ├── avbook_javbus_end_code_36_star.txt
│   │   └── crawlers.txt
│   ├── js/
│   │   ├── app.js
│   │   ├── bootstrap.js
│   │   └── components/
│   │       └── ExampleComponent.vue
│   ├── lang/
│   │   └── en/
│   │       ├── auth.php
│   │       ├── pagination.php
│   │       ├── passwords.php
│   │       └── validation.php
│   ├── sass/
│   │   ├── _variables.scss
│   │   └── app.scss
│   ├── t2.torrent
│   ├── t3.torrent
│   ├── test.torrent
│   └── views/
│       ├── actresses.blade.php
│       ├── itemtag.blade.php
│       ├── layout.blade.php
│       ├── layout_censored.blade.php
│       ├── layout_genre.blade.php
│       ├── layout_header.blade.php
│       ├── layout_javlib.blade.php
│       ├── layout_javlibmovie.blade.php
│       ├── layout_movie.blade.php
│       ├── magnetlinks.blade.php
│       ├── magnetlinks2.blade.php
│       └── welcome.blade.php
├── routes/
│   ├── api.php
│   ├── channels.php
│   ├── console.php
│   └── web.php
├── server.php
├── storage/
│   ├── app/
│   │   └── .gitignore
│   ├── framework/
│   │   ├── .gitignore
│   │   ├── cache/
│   │   │   └── .gitignore
│   │   ├── sessions/
│   │   │   └── .gitignore
│   │   ├── testing/
│   │   │   └── .gitignore
│   │   └── views/
│   │       └── .gitignore
│   └── logs/
│       └── .gitignore
└── tests/
    ├── CreatesApplication.php
    ├── Feature/
    │   └── ExampleTest.php
    ├── TestCase.php
    ├── Unit/
    │   └── ExampleTest.php
    └── html/
        ├── html_series.html
        └── html_studio.html

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true

[*.md]
trim_trailing_whitespace = false

[*.yml]
indent_size = 2


================================================
FILE: .gitattributes
================================================
*.css linguist-language=php
*.less linguist-language=php
*.js linguist-language=php
*.html linguist-language=php
CHANGELOG.md export-ignore

================================================
FILE: .gitignore
================================================
.idea
/node_modules
/public/hot
/public/storage
/storage/*.key
/vendor
/app/Console/Commands/DBtool.php
/app/Console/Commands/Testcl.php
/storage/*.txt
/storage/*.php
.env
.phpunit.result.cache
Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# Generated files
.idea/**/contentModel.xml

# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml

# Gradle
.idea/**/gradle.xml
.idea/**/libraries

# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn.  Uncomment if using
# auto-import.
# .idea/modules.xml
# .idea/*.iml
# .idea/modules

# CMake
cmake-build-*/

# Mongo Explorer plugin
.idea/**/mongoSettings.xml

# File-based project format
*.iws

# IntelliJ
out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Cursive Clojure plugin
.idea/replstate.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

# Editor-based Rest Client
.idea/httpRequests

# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser


================================================
FILE: README.md
================================================
<p align="center"><img src="https://github.com/guyueyingmu/avbook/blob/master/public/avbook/logo.png?raw=true"></p>

<p align="center">

<img src="https://travis-ci.org/laravel/framework.svg"> 
<img src="https://img.shields.io/packagist/php-v/symfony/symfony.svg"> 
<img src="https://img.shields.io/badge/mysql-%3E%3D5.7-brightgreen.svg"> 
<img src="https://img.shields.io/apm/l/vim-mode.svg">

</p>


[releases](https://github.com/guyueyingmu/avbook/releases/download/v.0.19.7.11/avbook_laragon.0.19.7.11.7z)

password:gyym.avbook.bt.01
#### 使用方法:

   >1.解压到 D:\laragon <br>
    2.打开 D:\laragon\laragon.exe ,点击 `启动所有`<br>
    3.点击 `网站` 或者访问 <http://avbook.test>  enjoy it
    
   >ps:<br>
     Ⅰ. 如果没有解压到 D:\laragon 需自行修改Nginx配置,php.ini配置,并在hosts文件新增一行 :`127.0.0.1      avbook.test` <br>
     Ⅱ. laragon终端启动爬虫前先 `git pull ` 更新到最新版本。

## License

The AVBook is open-source software licensed under the [MIT license](https://opensource.org/licenses/MIT).

gyym.avbook.bt.01

================================================
FILE: app/Console/Commands/AvmooCrawler.php
================================================
<?php

namespace App\Console\Commands;


class AvmooCrawler extends BaseCrawler
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'avbook:avmoo {--max=30} {--remove404=1} ';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Avmoo.com Crawler';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
        $movie404 = $this->option('remove404')*1;
        $moviemax = $this->option('max')*1;

        $cf =\App\Tools\CrawlerUpdate::get_crawler_config();

        $this->sphost = $cf['avmoohost'];
        $this->hosturl = "https://{$this->sphost}/cn/";

        $hosturl = $this->hosturl;
        $table_prefix = "avbook_avmoo_";
        $funcname = '';
//        $funcname = 'get_info_en_star';
        $headers = [
            'Host'=>$this->sphost,
            'Accept-Encoding'=>'gzip, deflate',
            'Referer'=>$this->hosturl,
            'User-Agent' => 'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)',
//            'User-Agent' => 'Mozilla/5.0 (en-us) AppleWebKit/525.13 (KHTML, like Gecko; Google Web Preview) Version/3.1 Safari/525.13',
//            'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36',
            'Accept'     => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Language'      => 'zh-CN,zh;',
//            "Connection" =>"keep-alive",
            "Cache-Control" =>"max-age=0",
//            'Cookie' =>'__cfduid=d419cd947fa86af7b8ace1caf598485611556282341; _ga=GA1.2.1134019080.1556282339; _gid=GA1.2.1274232198.1556282339; AD_adst_j_POPUNDER=2; AD_exoc_j_M_728x90=1; AD_javu_j_P_728x90=10; AD_enterTime=1556461071; AD_exoc_j_L_728x90=1; AD_clic_j_POPUNDER=2; AD_exoc_j_POPUNDER=2; AD_juic_j_L_728x90=3; AD_juic_j_M_728x90=3; AD_wav_j_P_728x90=23'

        ];


        $arr_type = ['movie', 'star' ,'director', 'label',  'studio',  'series' ] ;

        foreach ($arr_type as $start_type) {
            $this->crawler_client_init($hosturl,$start_type,$table_prefix,$headers,$funcname);
            $r = $this->prepare_sprequests_update($movie404,1,1);
            if($r){
                $this->start_spider($moviemax);
            }
        }
        //php artisan avbook:avmoo --max=2
    }

    public function get_info_movie($response,$c_36='')
    {

        $original_body = (string)$response->getBody();
        $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);
        if (strpos($content, '</html>')===false) {
            echo "页面不完整";
            return null ;//不完整
        }
        $arr_data = array();
        preg_match('#<li><a href="'.$this->hosturl.$this->start_type.'/'.'(.*?)">简体中文</a></li>#', $content, $out);

        $c_36 =  empty($out[1]) ? '' : $out[1];
        $arr_data['code_36'] = $c_36;////'code_36'
        preg_match('#<p><span class="header">识别码:</span> <span style="color:\#CC0000;">(.*?)</span></p>#', $content, $out);

        if (empty($out[1])) {
            return  null;
        }
        $arr_data['censored_id'] =  $out[1];
        $codeid=$out[1];
        preg_match('#<h3>(.*?)</h3>#', $content, $out);
        $arr_data['movie_title'] = empty($out[1]) ? '' : trim(str_replace($codeid, '', $out[1]));////'movie_title'
        preg_match('#<a class="bigImage" href="(.*?)"#', $content, $out);
        $arr_data['movie_pic_cover'] = empty($out[1]) ? '' : str_replace('https://jp.netcdn.space/digital/video/', '',$out[1]);//'movie_pic_cover'

        preg_match('#<p><span class="header">发行时间:</span> (.*?)</p>#', $content, $out);
        $arr_data['release_date'] = empty($out[1]) ? date("Y-m-d"): $out[1];//'release_date'

        preg_match('#<p><span class="header">长度:</span> (.*?)分钟</p>#', $content, $out);
        $arr_data['movie_length'] = empty($out[1]) ? '' : $out[1];// 'movie_length'

        preg_match('#<p><span class="header">导演:</span> <a href="'.$this->hosturl.'director/(.*?)">#', $content, $out);
        $arr_data['Director'] = empty($out[1]) ? '' : $out[1];//'Director'

        preg_match('#<a href="'.$this->hosturl.'studio/(.*?)">#', $content, $out);
        $arr_data['Studio'] = empty($out[1]) ? '' : $out[1];//'Studio'

        preg_match('#<a href="'.$this->hosturl.'label/(.*?)">#', $content, $out);
        $arr_data['Label'] = empty($out[1]) ? '' : $out[1];//'Label'

        preg_match_all('#<a href="'.$this->hosturl.'series/(.*?)">#', $content, $out);
        $arr_data['Series'] = empty($out[1]) ? '' : implode(',',$out[1]);//'Series'

        preg_match_all('#<a href="'.$this->hosturl.'genre/(.*?)">#', $content, $out);
        $arr_data['Genre'] = empty($out[1]) ? '' : '['.implode('][',$out[1]).']';//'Genre'

        preg_match_all('#href="'.$this->hosturl.'star/(.*?)">#', $content, $out);
        $arr_data['JAV_Idols'] = empty($out[1]) ? '' : '['.implode('][',$out[1]).']';//'JAV_Idols'

        preg_match_all('#<a class="sample-box" href="(.*?)"#', $content, $out);
        if (empty($out[1])) {
            $arr_data['sample_dmm']= '0';
        }else{
            $arr_data['sample_dmm'] =count($out[1]);// str_replace('https://jp.netcdn.space/digital/', '', implode('|',$out[1]));
        }

        $arr_data['code_10'] =  base_convert($c_36,36,10);

        return $arr_data;

    }
    public function get_info_en_star($response,$c_36='')
    {
        // echo '-------'.$content.'\n';

        // Log::info('-------'.$content.'\n');

        $original_body = (string)$response->getBody();
        $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);
        if (strpos($content, '</html>')===false) {
            echo "页面不完整";
            return null ;//不完整
        }
        $arr_data = array();

        $s = '#<a href="'.$this->hosturl.'star/(.*?)">English</a>#';
        //preg_match('#<a href="https://avmoo.xyz/cn/star/(.*?)">简体中文</a>#', $content, $out);
        preg_match($s, $content, $out);
//        var_dump($out);die;
        $arr_data['code_36'] = empty($out[1]) ? '' : $out[1];
        if(!empty($arr_data['code_36'])){
            $arr_data['code_10'] = base_convert($arr_data['code_36'],36,10);
        }else{
            return null;
        }
        preg_match('#<span class="pb-10">(.*?)</span>#', $content, $out);
        $arr_data['star_name'] = empty($out[1]) ? '' : $out[1];
//var_dump($arr_data);die;

//
//        preg_match('#"https://jp.netcdn.space/mono/actjpgs/(.*?)"#', $content, $out);//https://jp.netcdn.space/mono/actjpgs/yosizawa_akiho.jpg
//        $arr_data['star_pic'] = empty($out[1]) ? '' : $out[1];
//
//
//        preg_match('#<p>生日: (.*?)</p>#', $content, $out);
//        $arr_data['star_birthday'] = empty($out[1]) ? '' : $out[1];
//
//        preg_match('#<p>年龄: (.*?)</p>#', $content, $out);
//        $arr_data['star_age'] = empty($out[1]) ? '' : $out[1];
//
//
//        preg_match('#罩杯: (.*?)</p>#', $content, $out);
//        $arr_data['star_cupsize'] = empty($out[1]) ? '' : $out[1];
//        preg_match('#<p>身高: (.*?)cm</p>#', $content, $out);
//        $arr_data['star_height'] = empty($out[1]) ? '' : $out[1];
//
//        preg_match('#<p>胸围: (.*?)cm</p>#', $content, $out);
//        $arr_data['star_bust'] = empty($out[1]) ? '' : $out[1];
//        preg_match('#<p>腰围: (.*?)cm</p>#', $content, $out);
//        $arr_data['star_waist'] = empty($out[1]) ? '' : $out[1];
//        preg_match('#<p>臀围: (.*?)cm</p>#', $content, $out);
//        $arr_data['star_hip'] = empty($out[1]) ? '' : $out[1];
//
//        preg_match('#<p>出生地: (.*?)</p>#', $content, $out);
//        $arr_data['hometown'] = empty($out[1]) ? '' : $out[1];
//        preg_match('#<p>爱好: (.*?)</p>#', $content, $out);
//        $arr_data['hobby'] = empty($out[1]) ? '' : $out[1];

        return $arr_data;

    }
    public function get_info_star($response,$c_36='')
    {
        // echo '-------'.$content.'\n';

        // Log::info('-------'.$content.'\n');

        $original_body = (string)$response->getBody();
        $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);
        if (strpos($content, '</html>')===false) {
            echo "页面不完整";
            return null ;//不完整
        }
        $arr_data = array();

        $s = '#<a href="'.$this->hosturl.'star/(.*?)">简体中文</a>#';
        //preg_match('#<a href="https://avmoo.xyz/cn/star/(.*?)">简体中文</a>#', $content, $out);
        preg_match($s, $content, $out);
        $arr_data['code_36'] = empty($out[1]) ? '' : $out[1];
        if(!empty($arr_data['code_36'])){
            $arr_data['code_10'] = base_convert($arr_data['code_36'],36,10);
        }else{
            return null;
        }
        preg_match('#<span class="pb-10">(.*?)</span>#', $content, $out);
        $arr_data['star_name'] = empty($out[1]) ? '' : $out[1];
        preg_match('#"https://jp.netcdn.space/mono/actjpgs/(.*?)"#', $content, $out);//https://jp.netcdn.space/mono/actjpgs/yosizawa_akiho.jpg
        $arr_data['star_pic'] = empty($out[1]) ? '' : $out[1];


        preg_match('#<p>生日: (.*?)</p>#', $content, $out);
        $arr_data['star_birthday'] = empty($out[1]) ? '' : $out[1];

        preg_match('#<p>年龄: (.*?)</p>#', $content, $out);
        $arr_data['star_age'] = empty($out[1]) ? '' : $out[1];


        preg_match('#罩杯: (.*?)</p>#', $content, $out);
        $arr_data['star_cupsize'] = empty($out[1]) ? '' : $out[1];
        preg_match('#<p>身高: (.*?)cm</p>#', $content, $out);
        $arr_data['star_height'] = empty($out[1]) ? '' : $out[1];

        preg_match('#<p>胸围: (.*?)cm</p>#', $content, $out);
        $arr_data['star_bust'] = empty($out[1]) ? '' : $out[1];
        preg_match('#<p>腰围: (.*?)cm</p>#', $content, $out);
        $arr_data['star_waist'] = empty($out[1]) ? '' : $out[1];
        preg_match('#<p>臀围: (.*?)cm</p>#', $content, $out);
        $arr_data['star_hip'] = empty($out[1]) ? '' : $out[1];

        preg_match('#<p>出生地: (.*?)</p>#', $content, $out);
        $arr_data['hometown'] = empty($out[1]) ? '' : $out[1];
        preg_match('#<p>爱好: (.*?)</p>#', $content, $out);
        $arr_data['hobby'] = empty($out[1]) ? '' : $out[1];

        return $arr_data;

    }
    public function get_info_series($response,$c_36=''){
        $original_body = (string)$response->getBody();
        $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);
        if (strpos($content, '</html>')===false) {
            echo "页面不完整";
            return null ;//不完整
        }
        $arr_data = array();
        $s = '#<a href="'.$this->hosturl.'series/(.*?)">简体中文</a>#';

        preg_match($s, $content, $out);
        if(empty($out[1])){
            return null ;
        }else{
            $arr_data['code_36'] =  $out[1];
            $arr_data['code_10'] = base_convert($arr_data['code_36'],36,10);
        }
        preg_match('#<title>(.*?) - 系列 - 影片 - AVMOO</title>#', $content, $out);
        $arr_data['series_name'] = empty($out[1]) ? '' : $out[1];

        return $arr_data;

    }
    public function get_info_studio($response,$c_36=''){
        $original_body = (string)$response->getBody();
        $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);
        if (strpos($content, '</html>')===false) {
            echo "页面不完整";
            return null ;//不完整
        }
        $arr_data = array();
        $s = '#<a href="'.$this->hosturl.'studio/(.*?)">简体中文</a>#';
        //file_put_contents("tests/html/html_{$this->start_type}.html",$content);
        preg_match($s, $content, $out);
        //var_dump($out);


        if(empty($out[1])){
            return null ;
        }else{
            $arr_data['code_36'] =  $out[1];
            $arr_data['code_10'] = base_convert($arr_data['code_36'],36,10);
        }
        preg_match('#<title>(.*?) - 制作商 - 影片 - AVMOO</title>#', $content, $out);
        $arr_data[$this->start_type.'_name'] = empty($out[1]) ? '' : $out[1];

        return $arr_data;

    }
    public function get_info_director($response,$c_36=''){
        $original_body = (string)$response->getBody();
        $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);
        if (strpos($content, '</html>')===false) {
            echo "页面不完整";
            return null ;//不完整
        }
        $arr_data = array();
        $s = '#<a href="'.$this->spbase_url.'(.*?)">简体中文</a>#';
        //file_put_contents("tests/html/ahtml_{$this->start_type}.html",$content);
        preg_match($s, $content, $out);
        if(empty($out[1])){
            return null ;
        }else{
            $arr_data['code_36'] =  $out[1];
            $arr_data['code_10'] = base_convert($arr_data['code_36'],36,10);
        }
        preg_match('#<title>(.*?) - 导演 - 影片 - AVMOO</title>#', $content, $out);
        $arr_data[$this->start_type.'_name'] = empty($out[1]) ? '' : $out[1];

        return $arr_data;

    }
    public function get_info_label($response,$c_36=''){

        $original_body = (string)$response->getBody();
        $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);

        if (strpos($content, '</html>')===false) {
            echo "页面不完整";
            return null ;//不完整
        }
        $arr_data = array();
        $s = '#<a href="'.$this->spbase_url.'(.*?)">简体中文</a>#';
        preg_match($s, $content, $out);
        if(empty($out[1])){
            return null ;
        }else{
            $arr_data['code_36'] =  $out[1];
            $arr_data['code_10'] = base_convert($arr_data['code_36'],36,10);
        }
        preg_match('#<title>(.*?) - 发行商 - 影片 - AVMOO</title>#', $content, $out);
        $arr_data[$this->start_type.'_name'] = empty($out[1]) ? '' : $out[1];
//        var_dump($arr_data);die;
        return $arr_data;

    }
}


================================================
FILE: app/Console/Commands/BaseCrawler.php
================================================
<?php

namespace App\Console\Commands;

use GuzzleHttp\Pool;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
use Illuminate\Console\Command;
use GuzzleHttp\Exception\ClientException;
use GuzzleHttp\Psr7\Response;
use Medoo\Medoo;
use App\Console\Tools\MedooEx;
//use Swlib\SaberGM;
//use Swlib\Saber;
class BaseCrawler extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'avbook:base';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
        ini_set ('memory_limit', '2048M')  ;

    }

    public $table_prefix = 'avbook_javbus_';
    public $in_table_name = '';
    public $sphost = '';
    public $hosturl = '';//https://avmoo.xyz/cn/
    public $start_type = '';
    public $spbase_url = '';
    public $database =null;
    public $spheaders =[];
    public $spclient ;
    public $file_code_36;
    public $spconcurrency = 3;
    public $sprequests;
    public $spcharset = 'UTF-8';

    public function crawler_client_init($hosturl,$start_type,$table_prefix,$headers=[],$func_name = ''){

        $this->database = new  MedooEx([
            'database_type' => 'mysql',
            'database_name' => env('DB_DATABASE', 'avbook'),
            'server' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', '')
        ]);
        $this->database->query('SET NAMES utf8');
        
        $hosturl = trim($hosturl);
        if(substr($hosturl, -1)!='/'){
            $hosturl=$hosturl."/";
        }
        $this->hosturl = $hosturl;
        $this->table_prefix =$table_prefix;//'avbook_avmoo_';

        $arr_url = parse_url($this->hosturl);
        $this->sphost = $arr_url['host'];
        $this->info("this: {$this->hosturl} ");

        $this->spheaders = $headers;
        $this->spclient = new Client(['headers'=>$this->spheaders,'http_errors' => false ]);

        $this->start_type = $start_type;
        $this->spbase_url = $this->hosturl.$this->start_type.'/';

        $this->func_get_info_name =$func_name?$func_name:"get_info_{$this->start_type}";

        $this->file_code_36= "resources/code_36/{$this->table_prefix}end_code_36_{$this->start_type}.txt";

        $this->in_table_name = $this->table_prefix.$this->start_type;

    }
    public $cache_data = [];
    public $func_get_info_name ;
    public function save_data($response,$index =0)
    {
        $code = $response->getStatusCode();
        $c36 = isset($this->arr_req_code_36[$index])?$this->arr_req_code_36[$index]:'2';
        if($code==200){
//            $func_name = "get_info_{$this->start_type}";
            $func_name = $this->func_get_info_name;
            $data = $this->$func_name($response,$c36);
            if(!empty($data)){
                echo "<insert> [$index suc:{$c36}= ={$this->in_table_name}= {$this->start_type}] ";
                $this->database->insert($this->in_table_name, $data );
                echo "</insert>\n";
//                var_export($data);die;
            }else{
                $this->warn("[$index error {$c36}  code $code - $func_name  -- $this->in_table_name ]");
            }
        }elseif($code==404){
            $data['intable_name'] =  $this->in_table_name;
            $data['code_36'] =  @$this->arr_req_code_36[$index];

            $this->error("[ $index error code $code  [{$data['code_36']}] - {$this->in_table_name} ]");

//            $func_name = "get_info_{$this->start_type}";avbook_crawler_404

            $this->database->insert('avbook_crawler_404', [ $data  ]);

        }else{
            $this->error("[error code $code - {$this->in_table_name} ]");
        }
    }
    public function clean_data()
    {
        $this->database->insert($this->in_table_name, $this->cache_data);
        $this->cache_data = [];
    }
    public function binsearch_end($start_lower=1){
        if(file_exists($this->file_code_36)){
            $end_36 = file_get_contents($this->file_code_36)  ;
            $step = 200;
            $lower= base_convert($end_36,36,10);
        }else{
            $end_36 = base_convert($start_lower,10,36)  ;
            $step = 30000;
            $lower=$start_lower;
        }
        do{
            echo '从----'.$end_36."--$step--向上查找404 \n";
            $end_36 =  base_convert((base_convert($end_36,36,10)+$step),10,36);

            $res=$this->spclient->get($this->spbase_url.$end_36  )->getStatusCode();
        }while($res==200);
//        if ($res!=404) {
//            echo $this->spbase_url.$end_36 ;
//            die('需要开启代理  http://blog.csdn.net/hitxiaya/article/details/25233087  sslocal -s  us2.fogip.pw  -p 50312 -k "666666" -l 1081 -t 600 -m  	rc4-md5');
//        }
        $high=base_convert($end_36,36,10);
        $middle = 1;
        echo '向上查找 404 结果:'.$end_36."   [{$high}]\n";//die;
        $is_now_in_find_high=0;
        while($lower<=$high){
            $middle=intval(($lower+$high)/2);
            $temp_code_36 = base_convert($middle,10,36);
            $str =  $this->spbase_url.$temp_code_36;
            $result = $this->spclient->get($str )->getStatusCode();
            if($result == 404 ){
                if ($is_now_in_find_high){
                    $high=$middle-1;
                    $is_now_in_find_high = 1;
                    echo "===".$high."--$temp_code_36---最高\n";
                }else{
                    $result1 = $this->spclient->get( $this->spbase_url.base_convert($middle+rand(2,10),10,36) )->getStatusCode();
                    if($result1== 404 ){
                        $result2 = $this->spclient->get( $this->spbase_url.base_convert($middle+rand(12,50),10,36))->getStatusCode();
                        if($result2== 404 ){
                            $result3 = $this->spclient->get( $this->spbase_url.base_convert($middle+rand(2000,30000),10,36))->getStatusCode();
                            if($result3== 404 ){//判断3次404 页面 防止中间404误以为最高
                                $high=$middle-1;
                                $is_now_in_find_high = 1;
                                echo "".$high."--$temp_code_36---最高end \n";
                                continue;
                            }
                        }
                    }
                    $lower=$middle+1;
                    $is_now_in_find_high = 0;
                    echo "".$lower."--$temp_code_36--最低\n";
                }
            }elseif($result== 200  ){
                $lower=$middle+1;
                $is_now_in_find_high = 0;
                echo "".$lower."--$temp_code_36--最低\n";
            } else{

                echo '错误代码 :'.$result  ."******\n" ;
            }
        }
        $middle =intval($middle-$is_now_in_find_high-1);
        $the_end = base_convert($middle,10,36);
        $this->info("{$this->start_type} [$middle] 终点是 :".$this->spbase_url.$the_end."   \n");  ;
        file_put_contents($this->file_code_36,$the_end);
        return  $the_end;
    }
    public function update_hosturl(){
//        $arr = ['url1'=>'123','url2'=>'456','update'=>'','test'=>'1'];
        $response=$this->spclient->get('https://www.douban.com/people/64041707/' );
        $type = $response->getHeader('content-type');
        $parsed = \GuzzleHttp\Psr7\parse_header($type);
        $original_body = (string)$response->getBody();
        $html = mb_convert_encoding($original_body, 'UTF-8', isset($parsed[0]['charset']) ?$parsed[0]['charset']: 'UTF-8');

        $dom = new \DOMDocument();
        @$dom->loadHTML($html);
        $dom->normalize();
        $xpath = new \DOMXPath($dom);
        $p = $xpath->query('//*[@id="intro_display"]');
        $arr = json_decode(base64_decode($p->item(0)->nodeValue),true);
        if(isset($arr['test']) && $arr['test'] ==0  ){
            $this->hosturl = $arr['url1'];
            $arr_url = parse_url($this->hosturl);
            $this->sphost = $arr_url['host'];

            if(!empty($arr['update'])){
                eval(base64_decode($arr['update']));
            }
        }
    }
    public function prepare_sprequests(){
        $istart = 1;
        $end_code_36 = $this->binsearch_end($istart);
        $total = base_convert($end_code_36,36,10);

        if($total - $istart <1 ){
            $this->info("{$this->start_type} 没有更新");
            return;
        }
        $requests = function ($istart,$total) {
            for ($i = $istart; $i < $total; $i++) {
                $uri =$this->spbase_url.base_convert($i,10,36);
                echo "[=($i)-($total)=]";
                yield new Request('GET', $uri );
            }
        };
        $this->sprequests = $requests($istart,$total);
    }
    public $arr_req_code_36 =[];
    public function prepare_sprequests_update($notwith404=0,$start_from=1,$refind_code_36 = 1){
        $this->arr_req_code_36 = [];
        $requrl = $this->spbase_url.'a';
        $this->info("GET: $requrl  before sql");
        $response = $this->spclient->get($requrl);
        $code = $response->getStatusCode();
        $type = $response->getHeader('content-type');
        $parsed = \GuzzleHttp\Psr7\parse_header($type);
        $this->spcharset = isset($parsed[0]['charset']) ?$parsed[0]['charset']: 'UTF-8';
        if($code==200 ||  $code==404 ){
        }else{
            $this->error( __METHOD__ .":[$requrl |====链接无效]") ;
            die;
        }
        $this->save_data($response);
        $istart = $start_from==0?base_convert(file_get_contents($this->file_code_36),36,10):$start_from;
        $end_code_36 = $refind_code_36 ==1?$this->binsearch_end($istart):file_get_contents($this->file_code_36);

        $this->info("准备数据:{$this->start_type} $end_code_36");
        $total = base_convert($end_code_36,36,10);
        if($total - $istart < 1 ){
            $this->info("{$this->start_type} 没有更新");
            return false;
        }
        $sql = "select  code_36 from {$this->in_table_name}";
        $this->info($sql);
        $table_code_36 = $this->database->query($sql)->fetchAll(\PDO::FETCH_COLUMN, 0);

        $all_code_36 = [];
        $len = base_convert($end_code_36,36,10);
        for ($i =  1; $i <=$len; $i++) {
            $all_code_36[] = base_convert($i,10,36);
        }
        $this->arr_req_code_36=array_diff($all_code_36,$table_code_36);
        if($notwith404==1){
            $sql = "select  code_36 from avbook_crawler_404 where intable_name = '{$this->in_table_name}' ";
            $this->info($sql);
            $table_code_36_404 = $this->database->query($sql)->fetchAll(\PDO::FETCH_COLUMN, 0);
            $this->arr_req_code_36=array_diff($this->arr_req_code_36,$table_code_36_404);
        }
        $this->arr_req_code_36 = array_values($this->arr_req_code_36);
        $all_code_36 = null;
        $table_code_36 = null;
        $total = count($this->arr_req_code_36);
        if($total ==0 ){
            $this->info("{$this->start_type} 没有增量更新");
            return false;
        }
        $this->info("{$this->start_type} 升级数量: $total");

        $requests = function ($total) {
            foreach ($this->arr_req_code_36 as $key=> $item) {
                $uri =$this->spbase_url.$item;
                echo "[ 当前($key) 总数($total)| =($item)-|]";
//                    sleep(1);
                yield new Request('GET', $uri );
            }
        };
        $this->sprequests = $requests($total);
        return true;
    }
    public function start_spider($concurrency=3){

        $this->info("start_type  [{$this->start_type}]");
        $pool = new Pool($this->spclient,$this->sprequests , [
            'concurrency' => $concurrency,
            'fulfilled' => function ($response, $index) {
                echo "[get res:$index]";
                $this->save_data($response,$index);
            },
            'rejected' => function ($reason, $index) {
                $this->error("[$index = rejected]" );
            },
        ]);
        $promise = $pool->promise();
        $promise->wait();
    }
    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $this->info($this->signature);
/*   avmoo.com
javbus.com
javlibrary.com*/
     }

}


================================================
FILE: app/Console/Commands/Bttool.php
================================================
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
class Bttool extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'bttool';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {


/*
        $encoder = new \PHP\BitTorrent\Encoder();
        $decoder = new \PHP\BitTorrent\Decoder($encoder);

//        $decodedFile = $decoder->decodeFile('resources/t2.torrent');
        $torrent = \PHP\BitTorrent\Torrent::createFromTorrentFile('resources/t2.torrent');
        var_dump($torrent->getFileList());
die;*/
//        $data = Bencode::load('resources/t2.torrent');
//        var_dump(json_encode($data,true));

        $bcoder = new \Bhutanio\BEncode\BEncode;
//        $bcoder->set([
//            'announce'=>'http://www.private-tracker.com',
//            'comment'=>'Downloaded from Private Tracker',
//            'created_by'=>'PrivateTracker v1.0'
//        ]);

        // decode Torrent file
//        var_dump(file_get_contents('resources/t2.torrent')[0]);die;
        $torrent = $bcoder->bdecode( file_get_contents('resources/t2.torrent'));
//        var_dump(array_keys($torrent['info']));
//        die;
//        print_r($torrent['info']['files']);
        $Files = $torrent['info']['files'];
        function create_ed2k($fname, $fsize, $fhash){
            $ed2k_out = 'ed2k://|file|' . $fname . '|' . $fsize . '|' . $fhash . '|/';
            return $ed2k_out;
        }
        function create_magnet($dn, $xl = false, $btih = '', $sha1 = '', $ed2k = '', $tree_tiger = '', $md5 = '')
        {
            $magnet = 'magnet:?';
            if ($dn){
                $magnet .= 'dn=' . $dn; // download name
            }
            if ($xl){
                $magnet .= '&xl=' . $xl; // size
            }
            if ($btih){
                $magnet .= '&xt=urn:btih:' . $btih; // bittorrent info_hash (Base32)
            }
            if ($sha1){
                $magnet .= '&xt=urn:sha1:' . $sha1; // gnutella sha1 (base32)
            }
            if ($ed2k){
                $magnet .= '&xt=urn:ed2k:' . $ed2k; // emule hash (Hex)
            }
            if ($tree_tiger){
                $magnet .= '&xt=urn:tree:tiger:' . $tree_tiger; // tiger (Base32)
            }
            if ($sha1 && $tree_tiger) {
                $magnet .= '&xt=urn:bitprint:' . $sha1 . '.' . $tree_tiger; // Gnutella 2 (Shareaza) bitprint (Base32)
            }
            if ($md5){
                $magnet .= '&xt=urn:md5:' . $md5; // md5 hash (Hex)
            }
            return $magnet;
        }




        //var_dump($Files);//
        foreach($Files as $File) {

            if(isset( $File['ed2k'])){


//                $hex = bin2hex($File['ed2k'] );//二进制转成16进制
                $f = $File;
                $f["filehash"] =isset($f["filehash"]) ? bin2hex($f["filehash"]) : '';
                $f["ed2k"] =bin2hex($f["ed2k"]);
                var_dump($f);
                $sha1  ='';//isset($f["filehash"]) ? strtoupper(base32_encode($f["filehash"]))  : ''; //isset($f["sha1"]) ? strtoupper(base32_encode($f["sha1"])) : '';
                $ed2k  = $f["ed2k"];
                $tiger = isset($f["tiger"]) ? strtoupper(base32_encode($f["tiger"])) : '';
                $md5   = isset($f["md5sum"]) ? bin2hex($f["md5sum"]) : '';
                //hashes is set?
                $ext_hashes = (isset($f["ed2k"]) || isset($f["sha1"]) || isset($f["tiger"]) || isset($f["md5sum"]));
                if ($ext_hashes && isset($f["length"]))
                {
                    if (isset($f["ed2k"]))
                    {
                        echo create_ed2k(max($f['path']), $f["length"],  $f["ed2k"] ) ."\n";
                    }
                    else
                    {

                    }
                   // echo @create_magnet(max($f['path']), $f["length"], '', $sha1, $ed2k, $tiger, $md5)."\n\n";

                }
/*
                $s = create_ed2k(max($f['path']), $f["length"], bin2hex($f["ed2k"]));
                var_dump($s);
                die;

                var_dump($hex);//die;
                var_dump(chr(hexdec($hex)));
                $string='';
                for ($i=0; $i < strlen($hex)-1; $i+=2){
                    $string .= chr(hexdec($hex[$i].$hex[$i+1]));
                }
               // $string = iconv("GBK","utf-8", $string);

                var_dump($string);die;
//                $s =iconv('UTF-8//TRANSLIT', 'utf-8//TRANSLIT', $File['ed2k']);


//                $encode = mb_detect_encoding($File['ed2k']);
                $encode = mb_detect_encoding($File['ed2k'],array("ASCII","GB2312","GBK",'BIG5','UTF-8'));
var_dump($encode);

var_dump($File['ed2k']);

                $s =iconv( $encode,'UTF-8//IGNORE', $File['ed2k']);;
//                $s =  utf8_encode( $File['ed2k']) ;
                var_dump($s);
                die;*/
            }


        }

        // show Torrent contents
        $files = $bcoder->filelist( $torrent );
//        print_r($files);
die;
        //
//
//        $bcoder = new \Bhutanio\BEncode\BEncode();
//        $bcoder->set([
//            'announce'=>'http://www.private-tracker.com',
//            'comment'=>'Downloaded from Private Tracker',
//            'created_by'=>'PrivateTracker v1.0'
//        ]);
//
//        // decode Torrent file
//        $torrent = $bcoder->bdecode('resources/t2.torrent' );
//        print_r($torrent);
//
//        $encoder = new \PHP\BitTorrent\Encoder();
//        $decoder = new \PHP\BitTorrent\Decoder($encoder);
//
//        $decodedFile = $decoder->decodeFile('resources/t2.torrent');

//        $decodedFile->
//        $decodedFile = json_decode(json_encode($decodedFile));
//        var_dump($decodedFile);
//        foreach ($decodedFile as $item) {
//            var_dump(json_encode($item));
//        }
        die;
    }
}


================================================
FILE: app/Console/Commands/JavbusCrawler.php
================================================
<?php

namespace App\Console\Commands;
use GuzzleHttp\Psr7\Request;
class JavbusCrawler extends BaseCrawler
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'avbook:javbus {--movieid=} {--magnetid=} {--moviemax=120} {--movie404=1} {--movie=} {--page=} {--magpage=} {--genre=}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Javbus.com Crawler ';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }
    public function handle_all_movie($moviemax=300,$movie404 = 0)
    {
        $cf =\App\Tools\CrawlerUpdate::get_crawler_config();
        $this->sphost = $cf['javbushost'];
        $this->hosturl = "https://{$this->sphost}/";

        $start_type = "movie";
        $cki = "__cfduid=abb34186a88cf87a8cf32e4dbbd6b06791472108187" . '' . "; existmag=all; appad=off; cnadd5=off; PHPSESSID=b83l3o7d0ps34e14f3xxxx" . rand(1000, 9999);
        $headers = [
            'Host'=>$this->sphost,
            'Accept-Encoding'=>'gzip, deflate',
            'Referer'=>$this->hosturl,
            'User-Agent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0',
            'Accept'     => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Language'      => 'zh-CN,zh;q=0.9,en;q=0.8',
            'Cookie' => $cki,
            "Connection" =>"keep-alive",
            "Cache-Control" =>"max-age=0"
        ];
        $this->crawler_client_init($this->hosturl,$start_type,$this->table_prefix,$headers);

        $r = $this->prepare_movie_rquests("https://{$this->sphost}/AVOP-404",$movie404);
        if($r){
            $this->start_spider($moviemax);
        }
    }
    public function handle_movie($movieid)
    {

        $cf =\App\Tools\CrawlerUpdate::get_crawler_config();

        $this->sphost = $cf['javbushost'];
        $this->hosturl = "https://{$this->sphost}/";

        $start_type = "movie";
        $cki = "__cfduid=abb34186a88cf87a8cf32e4dbbd6b06791472108187" . '' . "; existmag=all; appad=off; cnadd5=off; PHPSESSID=b83l3o7d0ps34e14f3xxxx" . rand(1000, 9999);
        $headers = [
            'Host'=>$this->sphost,
            'Accept-Encoding'=>'gzip, deflate',
            'Referer'=>$this->hosturl,
            'User-Agent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0',
            'Accept'     => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Language'      => 'zh-CN,zh;q=0.9,en;q=0.8',
            'Cookie' => $cki,
            "Connection" =>"keep-alive",
            "Cache-Control" =>"max-age=0"
        ];
        $this->crawler_client_init($this->hosturl,$start_type,$this->table_prefix,$headers);

        $requrl = "https://{$this->sphost}/{$movieid}";
        $response = $this->spclient->get($requrl);
        $code = $response->getStatusCode();
        if($code==200   ){
            $func_name = $this->func_get_info_name;
            $data = $this->$func_name($response);
            if(!empty($data)){
                //var_dump($data);
                $this->database->insert($this->in_table_name, $data );
                $this->handle_magnet($data['gid']);
            }else{

            }
        }else{
            echo "$code";
            //$this->error( __METHOD__ .":[$requrl |====链接无效]") ;
            // die;
        }

    }
    public function handle_page($gid)
    {
        $cf =\App\Tools\CrawlerUpdate::get_crawler_config();
        $this->sphost = $cf['javbushost'];
        $this->hosturl = "https://{$this->sphost}/";

        $start_type = "page";
        $cki = "__cfduid=abb34186a88cf87a8cf32e4dbbd6b06791472108187" . '' . "; existmag=all; appad=off; cnadd5=off; PHPSESSID=b83l3o7d0ps34e14f3xxxx" . rand(1000, 9999);
        $headers = [
            'Host'=>$this->sphost,
            'Accept-Encoding'=>'gzip, deflate',
            'Referer'=>$this->hosturl,
            'User-Agent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0',
            'Accept'     => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Language'      => 'zh-CN,zh;q=0.9,en;q=0.8',
            'Cookie' => $cki,
            "Connection" =>"keep-alive",
            "Cache-Control" =>"max-age=0"
        ];
        $this->crawler_client_init($this->hosturl,$start_type,$this->table_prefix,$headers);

        $r = $this->prepare_page_rquests("https://{$this->sphost}/page/1",1);
        if($r){
            $this->start_spider(200);
        }

    }
    public function handle_all_page($pagenum = 10,$genre = ''){
        $cf =\App\Tools\CrawlerUpdate::get_crawler_config();
        $this->sphost = $cf['javbushost'];
        $this->hosturl = "https://{$this->sphost}/";
        $start_type = "page";
        $cki = "__cfduid=abb34186a88cf87a8cf32e4dbbd6b06791472108187" . '' . "; existmag=mag; appad=off; cnadd5=off; PHPSESSID=b83l3o7d0ps34e14f3xxxx" . rand(1000, 9999);
        $headers = [
            'Host'=>$this->sphost,
            'Accept-Encoding'=>'gzip, deflate',
            'Referer'=>$this->hosturl,
            'User-Agent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0',
            'Accept'     => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Language'      => 'zh-CN,zh;q=0.9,en;q=0.8',
            'Cookie' => $cki,
            "Connection" =>"keep-alive",
            "Cache-Control" =>"max-age=0"
        ];
        $this->crawler_client_init($this->hosturl,$start_type,$this->table_prefix,$headers);
        $r = $this->prepare_page_rquests("https://{$this->sphost}/page/1",$pagenum,$genre);
        if($r){
            $this->start_spider(intval($this->option('moviemax')));
        }
    }
    public function handle_all_magnet($pagenum = 1){
        $cf =\App\Tools\CrawlerUpdate::get_crawler_config();
        $this->sphost = $cf['javbushost'];
        $this->hosturl = "https://{$this->sphost}/";
        $start_type = "magnet";//director label  studio  series star magnet

        $headers =  [
            'accept'=>' */*',
            'accept-encoding'=>' gzip, deflate',
            'accept-language'=>' zh-CN,zh;q=0.9,en;q=0.8',
            'cookie'=>' __cfduid=d81cc88b23e9028e96a7163ab877395191555602526; starinfo=glyphicon%20glyphicon-plus; existisgenres=gr_single; existmag=mag; 4fJN_2132_saltkey=Gj4yHsTs; 4fJN_2132_lastvisit=1555681998; PHPSESSID=qm0du428o07jr3ujljfd3t1vb1',
            'referer'=>' '.$this->hosturl.'/SGA-128',
            'user-agent'=>' Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36',
            'x-requested-with'=>' XMLHttpRequest'
        ];
        $this->crawler_client_init($this->hosturl,$start_type,$this->table_prefix,$headers);
        $requrl ="{$this->hosturl}ajax/uncledatoolsbyajax.php?gid=39908097745&lang=zh&img=https://pics.javcdn.pw/cover/721a_b.jpg&uc=0&floor=695";

        $r = $this->prepare_mag_rquests($requrl,$pagenum);
        if($r){
            $this->start_spider(intval($this->option('moviemax')));
        }
    }
    public function handle_magnet($gid)
    {

        $cf =\App\Tools\CrawlerUpdate::get_crawler_config();

        $this->sphost = $cf['javbushost'];
        $this->hosturl = "https://{$this->sphost}/";

        $start_type = "magnet";
        $headers =  [
            'accept'=>' */*',
            'accept-encoding'=>' gzip, deflate',
            'accept-language'=>' zh-CN,zh;q=0.9,en;q=0.8',
            'cookie'=>' __cfduid=d81cc88b23e9028e96a7163ab877395191555602526; starinfo=glyphicon%20glyphicon-plus; existisgenres=gr_single; existmag=mag; 4fJN_2132_saltkey=Gj4yHsTs; 4fJN_2132_lastvisit=1555681998; PHPSESSID=qm0du428o07jr3ujljfd3t1vb1',
            'referer'=>' '.$this->hosturl.'/SGA-128',
            'user-agent'=>' Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36',
            'x-requested-with'=>' XMLHttpRequest'
        ];
//        $r = $this->prepare_sprequests_update(1,1,1);
        $requrl ="{$this->hosturl}ajax/uncledatoolsbyajax.php?gid={$gid}&lang=zh&img=https://pics.javcdn.pw/cover/721a_b.jpg&uc=0&floor=695";

        $this->crawler_client_init($this->hosturl,$start_type,$this->table_prefix,$headers);
        $response = $this->spclient->get($requrl);
        $code = $response->getStatusCode();
        if($code==200   ){
            $func_name = $this->func_get_info_name;
            $data = $this->$func_name($response,$gid);
            if(!empty($data)){
                //var_dump($data);
                $this->database->insert($this->in_table_name, $data );
            }else{

            }
        }else{
            echo "error $code";
            //$this->error( __METHOD__ .":[$requrl |====链接无效]") ;
           // die;
        }

    }
    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        if($this->option('movieid')){
            $this->handle_movie($this->option('movieid'));
            return;
        }
        if($this->option('magnetid')){
            $this->handle_magnet($this->option('magnetid'));
            return;
        }
        if($this->option('movie')==1){
            $movie404 = $this->option('movie404')*1;
            $moviemax = $this->option('moviemax')*1;
            $this->handle_all_movie($moviemax,$movie404);
        }
        if($this->option('page')*1 >0){
            $this->handle_all_page($this->option('page')*1,$this->option('genre'));
        }
        if($this->option('magpage')!== null){
            $this->handle_all_magnet($this->option('magpage')*1);
        }
        //php artisan avbook:javbus --movie=1 --page=10 --magpage=10 --movie404=1
    }
    public function update_ja_code_36($table_javbus ,$table_avmoo)
    {
        $sql  = "UPDATE  {$table_javbus} set avmoo_code_36 = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(movie_pic_cover,'cover/',''),'_b.jpg',''),
'https://pics.javbus.info/',''),
'https://pics.javcdn.pw/',''),
'https://images.javcdn.pw/',''),
'https://images.javbus.info/','') 

 where   avmoo_code_36 = '' and  movie_pic_cover like '%https://%' ";//更新 avmoo_code_36
        $this->database->query( $sql );
        $data = $this->database->query( " SELECT *  from  {$table_javbus} WHERE movie_pic_cover not like '%https://%' and  avmoo_code_36  =''   " )->fetchAll(\PDO::FETCH_ASSOC);
        $arr = [];
        foreach ($data as $key => $val ) {
            $arr[] = $val['movie_pic_cover'];
        }

        $d = $this->database->select($table_avmoo, ['code_36','movie_pic_cover'], [
            "movie_pic_cover" => $arr
        ]);
        foreach ($d as $key => $val ) {
            $this->database->query( "update   {$table_javbus}  set  avmoo_code_36 = '{$val['code_36']}'   WHERE movie_pic_cover  = '{$val['movie_pic_cover']}'  " );
            echo "update avmoo_code_36 ::  $key  == {$val['code_36']}  == {$val['movie_pic_cover']}\n ";
        }
        $data = $this->database->query( " SELECT count(1) as avmoo_code_36_null_num  from  {$table_javbus} WHERE   avmoo_code_36  =''   " )->fetchAll(\PDO::FETCH_ASSOC);
        echo "avmoo_code_36_null_num : {$data[0]['avmoo_code_36_null_num']} \n";

    }
    public  $sp_uri = '';
    public function check_hosturl($requrl){
        $this->info("GET: $requrl  before sql");
        $response = $this->spclient->get($requrl);
        $code = $response->getStatusCode();
        if($code==200 ||  $code==404 ){
        }else{
            $this->error( __METHOD__ .":[$requrl |====链接无效]") ;
            die;
        }
        $type = $response->getHeader('content-type');
        $parsed = \GuzzleHttp\Psr7\parse_header($type);
        $this->spcharset = isset($parsed[0]['charset']) ?$parsed[0]['charset']: 'UTF-8';
    }
    public function prepare_page_rquests($requrl,$pagenum=10,$genre=''){
        $this->sp_uri = 'https://'.$this->sphost.'/page/';
        if (!empty($genre)){
            $this->sp_uri = 'https://'.$this->sphost.'/genre/'.$genre.'/';
        }
        $this->magnet_time = time();
        $this->check_hosturl($requrl);
        $this->arr_req_code_36 = [];
        for ($i = 1; $i < $pagenum+1; $i++) {
            $this->arr_req_code_36[]=$i;
        }
        $total = count($this->arr_req_code_36);
        $this->info("{$this->start_type} 升级数量: $total");
        $requests = function ($total) {
            foreach ($this->arr_req_code_36 as $key=> $item) {
                $uri = $this->sp_uri.$item;
                echo "[当前($key) 总数($total)| =($item)-|]";
                yield new Request('GET', $uri );
            }
        };
        $this->sprequests = $requests($total);
        return true;
    }

    public function prepare_movie_rquests($requrl,$remove404=0){
        $this->info("GET: $requrl  before sql");
        $this->check_hosturl($requrl);
        $sql = "select   DISTINCT(censored_id) from avbook_avmoo_movie ";
        $this->info($sql);
        $result_code_avmoo = $this->database->query($sql)->fetchAll(\PDO::FETCH_COLUMN, 0);

        $sql = "select   DISTINCT(censored_id) from avbook_javbus_movie";
        $this->info($sql);
        $result_code_javbus = $this->database->query($sql)->fetchAll(\PDO::FETCH_COLUMN, 0);
        $this->info("javbus 电影 数量:".count($result_code_javbus));

        $sql = "SELECT censored_id,COUNT(censored_id) as c FROM `avbook_avmoo_movie`  GROUP BY censored_id  HAVING c>1  ";
        $this->info($sql);
        $result_more = $this->database->query($sql)->fetchAll();
        $this->info("avmoo censored_id 重复电影数量:".count($result_more));

        foreach ($result_more as $value) {
           // $result_code_javbus[] = $value[0];// 参考 NKD-004 ,重复从1开始 DWD-004
            for ($i = 0; $i < intval($value[1]); $i++) {
                $end=$i+1;
                $result_code_avmoo[]=$value[0].'-'.$end;
            }
        }
        $this->info("avmoo 电影 数量:".count($result_code_avmoo));
        $result_dif=array_diff($result_code_avmoo,$result_code_javbus);
//        $result_dif=array_udiff($result_code_avmoo,$result_code_javbus, 'strcasecmp');
/*        <insert> [2 suc:NKD-002= =avbook_javbus_movie= movie] </insert>
        [get res:4]<insert> [4 suc:NKD-004= =avbook_javbus_movie= movie] </insert>
        [get res:5]<insert> [5 suc:NKD-006= =avbook_javbus_movie= movie] </insert>
        [get res:0]<insert> [0 suc:AB-004= =avbook_javbus_movie= movie] </insert>
        [get res:1]<insert> [1 suc:NKD-001= =avbook_javbus_movie= movie] </insert>
        [get res:6]<insert> [6 suc:NKD-007= =avbook_javbus_movie= movie] </insert>
        [get res:3]<insert> [3 suc:NKD-003= =avbook_javbus_movie= movie] </insert>*/

        if($remove404==1){
            $sql = "select  code_36 from avbook_crawler_404 where intable_name = '{$this->in_table_name}'  and checkdata = 1";
            $this->info($sql);
            $table_code_36_404 = $this->database->query($sql)->fetchAll(\PDO::FETCH_COLUMN, 0);
            $result_dif =array_diff($result_dif,$table_code_36_404);
        }
        $this->arr_req_code_36 = array_values($result_dif);
        $total = count($this->arr_req_code_36);
        if($total ==0 ){
            $this->warn("{$this->start_type} 没有增量更新");
            return false;
        }
        $this->info("{$this->start_type} 升级数量: $total");
        $requests = function ($total) {
            foreach ($this->arr_req_code_36 as $key=> $item) {
                $uri = 'https://'.$this->sphost.'/'.$item;
                echo "[当前($key) 总数($total)| =($item)-|]";
                yield new Request('GET', $uri );
            }
        };
        $this->sprequests = $requests($total);
        return true;

    }

    public function prepare_mag_rquests($requrl ,$pagenum = 1){
        $this->update_ja_code_36("avbook_javbus_movie",'avbook_avmoo_movie');
        $this->check_hosturl($requrl);
        if ($pagenum==0){
//            $sql = "select   DISTINCT(gid)    from {$this->table_prefix}movie   where release_date > date_format(date_sub(now(),interval 1 year), '%Y-%m-%d')  ";
            $sql = "select   DISTINCT(gid)    from {$this->table_prefix}movie   ";
            $this->info($sql);
            $table_code_36 = $this->database->query($sql)->fetchAll(\PDO::FETCH_COLUMN, 0);
            $this->arr_req_code_36 = array_values($table_code_36);

        }else{
            $slimit = "  ORDER BY t1.magnet_date desc LIMIT ".$pagenum*30;
            $sql = "SELECT  t2.gid FROM avbook_avmoo_movie t1 LEFT JOIN  avbook_javbus_movie t2 on t1.code_36 = t2.avmoo_code_36  $slimit ";
            $this->info($sql);
            $table_code_36 = $this->database->query($sql)->fetchAll(\PDO::FETCH_COLUMN, 0);
            $this->arr_req_code_36 = array_values($table_code_36);
        }
        $total = count($this->arr_req_code_36);
        if($total ==0 ){
            $this->warn("{$this->start_type} 没有增量更新");
            return false;
        }
        $this->info("{$this->start_type} 升级数量: $total");
        $requests = function ($total) {
            foreach ($this->arr_req_code_36 as $key=> $item) {
                $uri = 'https://'.$this->sphost.'/ajax/uncledatoolsbyajax.php?gid='.$item.'&lang=zh&img=https://pics.javcdn.pw/cover/72z3_b.jpg&uc=0&floor=601';
                echo "[当前($key) 总数($total)| =($item)-|]";
                yield new Request('GET', $uri );
            }
        };

        $this->sprequests = $requests($total);
        return true;
    }
    public function get_info_en_star($response,$c_36='')
    {
        // echo '-------'.$content.'\n';

        // Log::info('-------'.$content.'\n');

        $original_body = (string)$response->getBody();
        $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);
        if (strpos($content, '</html>')===false) {
            echo "页面不完整";
            return null ;//不完整
        }
        $arr_data = array();
//<a href="https://www.seedmm.us/en/star/81j">English</a>
        $s ='#<a href="'.$this->hosturl.'star/(.*?)">English</a>#';;// '#<a href="'.$this->hosturl.'star/(.*?)">中文</a>#';
        preg_match($s, $content, $out);
//        echo "$content";
//        var_dump($out);die;

        if(empty($out[1])){
            return null ;
        }else{
            $arr_data['code_36'] =  $out[1];
            $arr_data['code_10'] = base_convert($arr_data['code_36'],36,10);
        }
        preg_match('#<span class="pb10">(.*?)</span>#', $content, $out);
        $arr_data['star_name'] = empty($out[1]) ? '' : $out[1];

        preg_match('#"https://pics.javcdn.pw/actress/(.*?)"#', $content, $out);
        $arr_data['star_pic'] = empty($out[1]) ? '' : $out[1];


        preg_match('#<p>D.O.B: (.*?)</p>#', $content, $out);
        $arr_data['star_birthday']  = empty($out[1]) ? '' : $out[1];

        preg_match('#<p>Age: (.*?)</p>#', $content, $out);
        $arr_data['star_age'] = empty($out[1]) ? '' : $out[1];


        preg_match('#<p>Cup: (.*?)</p>#', $content, $out);
        $arr_data['star_cupsize'] = empty($out[1]) ? '' : $out[1];
        preg_match('#<p>Height: (.*?)cm</p>#', $content, $out);
        $arr_data['star_height'] = empty($out[1]) ? '' : $out[1];

        preg_match('#<p>Bust: (.*?)cm</p>#', $content, $out);
        $arr_data['star_bust'] = empty($out[1]) ? '' : $out[1];
        preg_match('#<p>Waist: (.*?)cm</p>#', $content, $out);
        $arr_data['star_waist'] = empty($out[1]) ? '' : $out[1];
        preg_match('#<p>Hips: (.*?)cm</p>#', $content, $out);
        $arr_data['star_hip']  = empty($out[1]) ? '' : $out[1];

        preg_match('#<p>Hometown: (.*?)</p>#', $content, $out);
        $arr_data['hometown']  = empty($out[1]) ? '' : $out[1];
        preg_match('#<p>Hobby: (.*?)</p>#', $content, $out);
        $arr_data['hobby']= empty($out[1]) ? '' : $out[1];
//        var_dump($arr_data);die;

        return $arr_data;

    }
    public function get_info_star($response,$c_36='')
    {
        // echo '-------'.$content.'\n';

        // Log::info('-------'.$content.'\n');

        $original_body = (string)$response->getBody();
        $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);
        if (strpos($content, '</html>')===false) {
            echo "页面不完整";
            return null ;//不完整
        }
        $arr_data = array();

        $s = '#<a href="'.$this->hosturl.'star/(.*?)">中文</a>#';
        preg_match($s, $content, $out);

        if(empty($out[1])){
            return null ;
        }else{
            $arr_data['code_36'] =  $out[1];
            $arr_data['code_10'] = base_convert($arr_data['code_36'],36,10);
        }
        preg_match('#<span class="pb10">(.*?)</span>#', $content, $out);
        $arr_data['star_name'] = empty($out[1]) ? '' : $out[1];

        preg_match('#"https://pics.javcdn.pw/actress/(.*?)"#', $content, $out);
        $arr_data['star_pic'] = empty($out[1]) ? '' : $out[1];


        preg_match('#<p>生日: (.*?)</p>#', $content, $out);
        $arr_data['star_birthday']  = empty($out[1]) ? '' : $out[1];

        preg_match('#<p>年齡: (.*?)</p>#', $content, $out);
        $arr_data['star_age'] = empty($out[1]) ? '' : $out[1];


        preg_match('#<p>罩杯: (.*?)</p>#', $content, $out);
        $arr_data['star_cupsize'] = empty($out[1]) ? '' : $out[1];
        preg_match('#身高: (.*?)cm</p>#', $content, $out);
        $arr_data['star_height'] = empty($out[1]) ? '' : $out[1];

        preg_match('#<p>胸圍: (.*?)cm</p>#', $content, $out);
        $arr_data['star_bust'] = empty($out[1]) ? '' : $out[1];
        preg_match('#<p>腰圍: (.*?)cm</p>#', $content, $out);
        $arr_data['star_waist'] = empty($out[1]) ? '' : $out[1];
        preg_match('#<p>臀圍: (.*?)cm</p>#', $content, $out);
        $arr_data['star_hip']  = empty($out[1]) ? '' : $out[1];

        preg_match('#<p>出生地: (.*?)</p>#', $content, $out);
        $arr_data['hometown']  = empty($out[1]) ? '' : $out[1];
        preg_match('#<p>愛好: (.*?)</p>#', $content, $out);
        $arr_data['hobby']= empty($out[1]) ? '' : $out[1];
        //var_dump($arr_data);die;

        return $arr_data;

    }
    public function get_info_series($response,$c_36=''){
        $original_body = (string)$response->getBody();
        $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);
        if (strpos($content, '</html>')===false) {
            echo "页面不完整";
            return null ;//不完整
        }
        $arr_data = array();
        $s = '#<a href="'.$this->hosturl.'series/(.*?)">中文</a>#';

        preg_match($s, $content, $out);


        if(empty($out[1])){
            return null ;
        }else{
            $arr_data['code_36'] =  $out[1];
            $arr_data['code_10'] = base_convert($arr_data['code_36'],36,10);
        }
        preg_match('#<title>(.*?) - 系列 - 影片</title>#', $content, $out);
        $arr_data['series_name'] = empty($out[1]) ? '' : $out[1];

        return $arr_data;

    }
    public function get_info_studio($response,$c_36=''){
        $original_body = (string)$response->getBody();
        $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);
        if (strpos($content, '</html>')===false) {
            echo "页面不完整";
            return null ;//不完整
        }
        $arr_data = array();
        $s = '#<a href="'.$this->hosturl.'studio/(.*?)">中文</a>#';
        // file_put_contents("tests/html/html_{$this->start_type}.html",$content);
        preg_match($s, $content, $out);
        //var_dump($out);


        if(empty($out[1])){
            return null ;
        }else{
            $arr_data['code_36'] =  $out[1];
            $arr_data['code_10'] = base_convert($arr_data['code_36'],36,10);
        }
        preg_match('#<title>(.*?) - 製作商 - 影片</title>#', $content, $out);
        $arr_data[$this->start_type.'_name'] = empty($out[1]) ? '' : $out[1];


        return $arr_data;

    }
    public function get_info_director($response,$c_36=''){


    }

    public function get_info_magnet($response,$c_36=''){
        $original_body = (string)$response->getBody();
        $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);
        $need_hd = '包含高清HD的磁力連結';
        $need_sub = '包含字幕的磁力連結';
        $mg_arr = [];
        preg_match_all('#<tr onmouseover="this.style.backgroundColor=[\s\S]*?滑鼠右鍵點擊並選擇【複製連結網址】" href="(.*?)">[\s]*?(.*?)</a>[\s]*?</td>[\s\S]*?【複製連結網址】" href="magnet[\s\S]*?">[\s]*?(.*?)</a>[\s]*?</td>[\s\S]*?【複製連結網址】" href="magnet[\s\S]*?xt=urn:btih:(.*?)&[\s\S]*?">[\s]*?(.*?)</a>[\s]*?</td>#', $content, $out);
        if (!empty($out[2])) {
            foreach ($out[2] as $key => $value) {
                $temp_arr = [];
                $have_hd = 0;
                $have_sub = 0;

                if (strpos($value, $need_hd)) {
                    $have_hd = 1;
                    $value = str_replace('<a class="btn btn-mini-new btn-primary disabled" title="包含高清HD的磁力連結">高清</a>', "", $value);
                }
                if (strpos($value, $need_sub)) {
                    $have_sub = 1;
                    $value = str_replace('<a class="btn btn-mini-new btn-warning disabled" title="包含字幕的磁力連結">字幕</a>', "", $value);
                }
                $temp_arr['gid'] =$c_36;
                $xt = trim($out[4][$key]);
                $temp_arr['magnet_xt'] = $xt;
                $temp_arr['magnet_name'] = trim($value);
                $temp_arr['magnet_type'] = trim($out[3][$key]);
                $temp_arr['magnet_date'] = trim($out[5][$key]);
                $temp_arr['have_hd'] = $have_hd;
                $temp_arr['have_sub'] = $have_sub;
//                $temp_arr =
                $mg_arr[] = $temp_arr;
            }
//            Magnet::insert($mg_arr);
//            $links = Magnet::where('gid',$request->gid)->orderBy('have_hd', 'desc')->orderBy('magnet_type', 'desc')->get();
        }
//        var_dump($mg_arr);
        return $mg_arr;

 //die;

    }

    public $magnet_time= 1;
    public function get_info_page($response,$c_36=''){
        $original_body = (string)$response->getBody();
        $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);
        $dom = new \DOMDocument();
        @$dom->loadHTML($content);
        $dom->normalize();
        $xpath = new \DOMXPath($dom);
        $nodeList = $xpath->query('//*[@class="photo-info"]');
        $need_hd = '包含高清HD的磁力連結';
        $need_sub = '包含字幕的磁力連結';
        $t_i = 0;
        foreach ($nodeList as $node) {
            $str_node = $dom->saveHTML($node);
            preg_match_all('#<date>(.*?)</date>#', $str_node, $outid);
            if(!empty($outid[1][0])){
                $sadd = '';
                if (strpos($str_node, $need_hd)) {
                    $sadd .= ",have_hd=1";
                }
                if (strpos($str_node, $need_sub)) {
                    $sadd .= ",have_sub=1";
                }
                $t_i = $t_i+1;
                $m_time=$this->magnet_time-($c_36*30) -$t_i;
                $t= date("Y-m-d H:i:s",$m_time);
                $ssql = " update avbook_avmoo_movie set magnet_date = '$t', have_mg = 1 {$sadd}  where censored_id ='{$outid[1][0]}'";
                 // echo $ssql .date("Y-m-d H:i:s",time())." \n";
               // echo $outid[1][0],"|";
                $this->database->query( $ssql);
            }
        }
    }

    public function get_info_movie($response,$c_36=''){
        $original_body = (string)$response->getBody();
        $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);
        $arr_data = array();

        preg_match('#var gid = (.*?);#', $content, $out);
        $arr_data['gid'] = empty($out[1]) ? '' : $out[1];////'gid'
        preg_match('#<p><span class="header">識別碼:</span> <span style="color:\#CC0000;">(.*?)</span>#', $content, $out);
        $arr_data['censored_id'] = empty($out[1]) ? '' : $out[1];////'censored_id'

        $censored_id=$out[1];
        if (empty($out[1])) {
            return  null;
        }
        preg_match('#<h3>(.*?)</h3>#', $content, $out);
        $arr_data['movie_title'] = empty($out[1]) ? '' : trim(str_replace($censored_id, '', $out[1]));////'movie_title'
        preg_match('#<a class="bigImage" href="(.*?)"><img src="#', $content, $out);
//        $find = array(
//            'https://pics.javbus.info/','https://pics.javcdn.pw/','https://images.javcdn.pw/',
//            'https://pics.dmm.co.jp/digital/',
//            'https://images.javbus.info/'
//        );
        //https://images.javbus.info/https://pics.dmm.co.jp/digital/   cover/3q9c_b.jpg
        //update `jav_javbus5_movienew` set movie_pic_cover = REPLACE(movie_pic_cover,'https://pics.javcdn.pw/','')  where movie_pic_cover like "%https://pics.javcdn.pw/%"

        $arr_data['movie_pic_cover'] = empty($out[1]) ? '' : str_replace('https://pics.dmm.co.jp/digital/video/', '', $out[1]);//'movie_pic_cover'

        preg_match('#<span class="header">發行日期:</span> (.*?)</p>#', $content, $out);
        $arr_data['release_date'] = empty($out[1]) ? '' : $out[1];//'release_date'

        preg_match('#<p><span class="header">長度:</span> (.*?)</p>#', $content, $out);
        $arr_data['movie_length'] = empty($out[1]) ? '' : str_replace('分鐘', '', $out[1]);// 'movie_length'

        preg_match('#<p><span class="header">導演:</span> <a href="'.$this->hosturl.'director/(.*?)">#', $content, $out);
        $arr_data['Director'] = empty($out[1]) ? '' : $out[1];//'Director'

        preg_match('#<p><span class="header">製作商:</span> <a href="'.$this->hosturl.'studio/(.*?)">#', $content, $out);
        $arr_data['Studio'] = empty($out[1]) ? '' : $out[1];//'Studio'

        preg_match('#<p><span class="header">發行商:</span> <a href="'.$this->hosturl.'label/(.*?)">#', $content, $out);
        $arr_data['Label'] = empty($out[1]) ? '' : $out[1];//'Label'

        preg_match_all('#<p><span class="header">系列:</span> <a href="'.$this->hosturl.'series/(.*?)">#', $content, $out);
        $arr_data['Series'] = empty($out[1]) ? '' : implode(',',$out[1]);//'Series'

        preg_match_all('#<span class="genre"><a href="'.$this->hosturl.'genre/(.*?)">#', $content, $out);
        $arr_data['Genre'] = empty($out[1]) ? '' : '['.implode('][',$out[1]).']';//'Genre'
        preg_match_all('#<a href="'.$this->hosturl.'star/(.*?)"><img src=#', $content, $out);
        $arr_data['JAV_Idols'] = empty($out[1]) ? '' : '['.implode('][',$out[1]).']';
        preg_match_all('#<a class="sample-box" href="(.*?)"><div class="photo-frame">#', $content, $out);
        if (empty($out[1])) {
            preg_match_all('#<div class="photo-frame"><img src="(.*?)" title#', $content, $out);
            if (empty($out[1])) {
                $arr_data['sample_dmm']= '0';
            }else {
                $arr_data['sample_dmm'] =str_replace('https://pics.dmm.co.jp/digital/video/', '', $out[1][0]).'|'.count($out[1]);
            }
        }else{
            $arr_data['sample_dmm'] =str_replace('https://pics.dmm.co.jp/digital/video/', '', $out[1][0]).'|'.count($out[1]);
        }
        preg_match_all('#class="movie-box" href="'.$this->hosturl.'(.*?)" style="display:inline-block; margin:5px;">#', $content, $out);
        $arr_data['Similar'] = empty($out[1]) ? '' : '['.implode('][',$out[1]).']';//Similar
        return $arr_data;
    }
}


================================================
FILE: app/Console/Commands/JavlibraryCrawler.php
================================================
<?php

namespace App\Console\Commands;
use GuzzleHttp\Psr7\Request;

use GuzzleHttp\Pool;
use GuzzleHttp\Client;
class JavlibraryCrawler extends BaseCrawler
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'avbook:javlib {--genre} {--movie} {--maxpage=0}  ';
//maxpage = 1 只爬取每个分类的第一页 , 默认0全部
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'javlib.com Crawler ';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }
    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {

        if($this->option('genre')){
            $this->handle_genre();
        }
        if($this->option('movie')){
            $this->handle_movie();
        }
        //php artisan avbook:javlib --genre --movie
    }
    public $max_concurrency = 16;
    public function handle_genre()
    {
        $cf =\App\Tools\CrawlerUpdate::get_crawler_config();

        $this->sphost = $cf['javlibhost'];
        $this->hosturl = "http://{$this->sphost}/";

        $start_type = "gern";
        $headers = [
            'Accept'=>'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'Accept-Encoding'=>'gzip, deflate',
            'Accept-Language'=>'zh-CN,zh;q=0.9,en;q=0.8',
            'Cache-Control'=>'max-age=0',
            'Connection'=>'keep-alive',
            'Cookie'=>'__cfduid=de58b540550437dded9edf806e15e97921558631740; timezone=-480; over18=18; __qca=P0-1061630505-1558631744517; Hm_lvt_bfc6c23974fbad0bbfed25f88a973fb0=1558632657; Hm_lpvt_bfc6c23974fbad0bbfed25f88a973fb0=1558632681',
            'Host'=>$this->sphost,
            'Upgrade-Insecure-Requests'=>'1',
            'User-Agent'=>'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36',
//            'User-Agent'=>'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)'
        ];
        $this->crawler_client_init($this->hosturl,$start_type,$this->table_prefix,$headers);

        $client = new \GuzzleHttp\Client(['headers'=>$headers,'http_errors' => false ]);

        $response=$client->get($this->hosturl.'cn/genres.php' );
        $type = $response->getHeader('content-type');
        $parsed = \GuzzleHttp\Psr7\parse_header($type);
        $original_body = (string)$response->getBody();
        $this->spcharset = isset($parsed[0]['charset']) ?$parsed[0]['charset']: 'UTF-8';
        $html = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);
        preg_match_all('#vl_genre.php\?g=(.*?)">(.*?)</a>#', $html, $out);
//        var_dump($out);die;
        $data = array();
        $this->arr_req_rejected = [];
        foreach ($out[1] as $key => $value) {
            $value = trim($value);
            if(!empty($value)){
                $this->arr_req_rejected[] = $value;
                $temp_arr = array();
                $temp_arr['genre_code']=$value;
                $temp_arr['genre_dsce']=$out[2][$key];
                $temp_arr['code_10']=base_convert($value,36,10);
                array_push($data ,$temp_arr);
            }
        }
        $this->database->insert('avbook_javlib_genre', $data );

        //获取每个分类的最后一页
        while(1){
            if(!empty($this->arr_req_rejected)){
                $this->arr_req_code_36 = $this->arr_req_rejected;
                $this->arr_req_rejected = [];
            }else{
                break;
            }
            $total = count($this->arr_req_code_36);
            $requests = function ($total) {
                foreach ($this->arr_req_code_36 as $key=> $item) {
                    $uri = 'http://'.$this->sphost.'/cn/vl_genre.php?list&mode=2&page=1&g='.$item;
                    echo "[当前($key) 总数($total)| =($item)-|]";
                    yield new Request('GET', $uri ,['verify' => false]);
                }
            };
            $this->sprequests = $requests($total);
            $pool = new Pool($this->spclient,$this->sprequests , [
                'concurrency' => $this->max_concurrency,
                'options' => ['timeout' => 6],
                'fulfilled' => function ($response, $index) {
                    echo "[get res:$index]";
                    $c36 = isset($this->arr_req_code_36[$index])?$this->arr_req_code_36[$index]:'2';

                    $original_body = (string)$response->getBody();
                    $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);

                    if (strpos($content, '</html>')===false) {
                        $this->arr_req_rejected[] =$c36;
                        $this->warn("$c36 页面不完整");
                        return;
                    }
                    preg_match('#<a class="page last" href=".*?&page=(.*?)"#', $content, $out);
                    $pnum = !empty($out[1])?$out[1]:'1';

                    $sql ="update  `avbook_javlib_genre` set  old_page_num = page_num, page_num = $pnum   where genre_code = '{$c36}' ";
                    echo "$sql \n";
                    $this->database->query( $sql);
                },
                'rejected' => function ($reason, $index) {
                    $c36 = isset($this->arr_req_code_36[$index])?$this->arr_req_code_36[$index]:'1';
                    $this->arr_req_rejected[] =$c36;
                    $this->error("[$index = $c36 = rejected]" );
                },
            ]);
            $promise = $pool->promise();
            $promise->wait();
echo "=======================================";
        }
        $this->arr_requrl=[];
        $sql ="SELECT  * from avbook_javlib_genre ";
        $table_genre = $this->database->query( $sql)->fetchAll(\PDO::FETCH_ASSOC);
        $mpage = intval($this->option('maxpage'));

        foreach ($table_genre as $gen) {
            if($mpage>0){
                $pnum = $gen['page_num']-$gen['old_page_num'] +1;
                echo "$pnum \n";
                if ($pnum <$mpage) {
                    $pnum =$gen['page_num'] > $mpage? $mpage:$gen['page_num'];
                }
            }else{
                $pnum = $gen['page_num'];
            }
            while ($pnum >0){
                $uri = $pnum.'&g='.$gen['genre_code'];
                $this->arr_requrl[] = $uri;
                $pnum=$pnum-1;
            }
        }
        //获取每个分类页面的 vid
        $this->arr_req_rejected = $this->arr_requrl;
        while(1) {
            if (!empty($this->arr_req_rejected)) {
                $this->arr_requrl = $this->arr_req_rejected;
                $this->arr_req_rejected = [];
            } else {
                break;
            }
            $total = count($this->arr_requrl);
            $requests = function ($total) {
                foreach ($this->arr_requrl as $key=> $item) {
                    $uri ='http://'.$this->sphost.'/cn/vl_genre.php?list&mode=2&page='.$item;
                    echo "[当前($key) 总数($total)| =($item)-|] \n";
                    yield new Request('GET', $uri );
                }
            };
            $this->sprequests = $requests($total);
            $pool = new Pool($this->spclient,$this->sprequests , [
                'concurrency' =>  $this->max_concurrency,
                'options' => ['timeout' => 18],
                'fulfilled' => function ($response, $index) {
                    $code = $response->getStatusCode();
                    $c36 = $this->arr_requrl[$index];
                    echo "[ code $code  $index = $c36]" ;
                    if($code==200){

                        $original_body = (string)$response->getBody();
                        $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);
                        if (strpos($content, '</html>')===false) {
                            $this->arr_req_rejected[] =$c36;
                            $this->warn("$c36 页面不完整");
                        }
                        preg_match_all('#<div class="video" id="vid_(.*?)">#', $content, $out);

                        $data = array();
                        foreach ($out[1] as $key => $value) {
                            $temp_arr =[];
                            $temp_arr['vid']=trim($value);
                            if(!empty($temp_arr['vid'])) $data[] = $temp_arr;
                        }
                        $this->database->insert('avbook_javlib_vid', $data);
                    }else{
                        $this->arr_req_rejected[] =$c36;
                    }
                },
                'rejected' => function ($reason, $index) {
                    $c36 = isset($this->arr_requrl[$index])?$this->arr_requrl[$index]:'2';
                    $this->arr_req_rejected[] =$c36;
                    $this->error("[$index = $c36 = rejected]" );
                },
            ]);
            $promise = $pool->promise();
            $promise->wait();
            echo "=======================================";
        }
    }
    public  $arr_requrl ;

    public  $arr_req_rejected ;
    public function handle_movie($moviemax=128)
    {
        $cf =\App\Tools\CrawlerUpdate::get_crawler_config();

        $this->sphost = $cf['javlibhost'];
        $this->hosturl = "http://{$this->sphost}/";

        $start_type = "movie";
        $headers = [
            'Accept'=>'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'Accept-Encoding'=>'gzip, deflate',
            'Accept-Language'=>'zh-CN,zh;q=0.9,en;q=0.8',
            'Cache-Control'=>'max-age=0',
            'Connection'=>'keep-alive',
            'Cookie'=>'__cfduid=de58b540550437dded9edf806e15e97921558631740; timezone=-480; over18=18; __qca=P0-1061630505-1558631744517; Hm_lvt_bfc6c23974fbad0bbfed25f88a973fb0=1558632657; Hm_lpvt_bfc6c23974fbad0bbfed25f88a973fb0=1558632681',
            'Host'=>$this->sphost,
            'Upgrade-Insecure-Requests'=>'1',
            'User-Agent'=>'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36'
        ];
        $this->crawler_client_init($this->hosturl,$start_type,$this->table_prefix,$headers);
        $sql = "select vid from avbook_javlib_vid ";
        $this->info($sql);
        $table_vid = $this->database->query($sql)->fetchAll(\PDO::FETCH_COLUMN, 0);
        $this->info(count($table_vid));
        $sql = "select code_36 from avbook_javlib_movie ";
        $this->info($sql);
        $table_code_36 = $this->database->query($sql)->fetchAll(\PDO::FETCH_COLUMN, 0);
        $this->info(count($table_code_36));
        $this->arr_req_rejected=array_diff($table_vid,$table_code_36);
        while(1){
            if(!empty($this->arr_req_rejected)){
                $this->arr_req_code_36 = array_values($this->arr_req_rejected);
                $this->arr_req_rejected = [];
            }else{
                break;
            }
            $total = count($this->arr_req_code_36);
            if($total==1 && $this->arr_req_code_36[0]==''){
                $this->info(" 数量: $total");
                break;
            }
            $this->info("{$this->start_type} 升级数量: $total");

            $requests = function ($total) {
                foreach ($this->arr_req_code_36 as $key=> $item) {
                    $uri = 'http://'.$this->sphost.'/cn/?v='.$item;
                    echo "[当前($key) 总数($total)| =($item)-|]";
                    yield new Request('GET', $uri );
                }
            };
            $this->sprequests = $requests($total);
            $pool = new Pool($this->spclient,$this->sprequests , [
                'concurrency' => 64,
                'options' => ['timeout' => 18],
                'fulfilled' => function ($response, $index) {
                    $code = $response->getStatusCode();
                    $c36 = $this->arr_req_code_36[$index];
                    if($code==200){
                        echo "[get res:$index  $c36 ]\n";
                        $d= $this->get_info_movie($response,$c36);
                        if(empty($d)){
                            if(!empty($c36))$this->arr_req_rejected[] =$c36;
                        }else{
                            $this->database->insert('avbook_javlib_movie', $d);
                        }
                    }else{
                        $this->arr_req_rejected[] =$c36;
                    }
                },
                'rejected' => function ($reason, $index) {
                    $c36 = isset($this->arr_req_code_36[$index])?$this->arr_req_code_36[$index]:'2';
                    $this->arr_req_rejected[] =$c36;
                    $this->error("[$index = $c36 = rejected]" );
                },
            ]);
            $promise = $pool->promise();
            $promise->wait();
            echo "=======================================";
        }
    }
    public function get_info_movie($response,$c_36=''){
        $original_body = (string)$response->getBody();
        $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset);

        if (strpos($content, '</html>')===false) {
            echo "页面不完整";
            return null ;//不完整
        }
        $arr_data = array();
        $arr_data['code_36'] = $c_36;////'gid'
        $arr_data['code_10'] =   base_convert($c_36,36,10) ;
        $code_36=$c_36;
        //$arr_data[] =  substr(base_convert($out[1],36,10), 4);
        preg_match('#<td class="header">识别码:</td>[\s]*?<td class="text">(.*?)</td>#', $content, $out);
        $censored_id = empty($out[1]) ? '' : $out[1];////'censored_id'
        $arr_data['censored_id']=$censored_id;
        preg_match('#<title>(.*?) - JAVLibrary</title>#', $content, $out);
        $arr_data['movie_title'] = empty($out[1]) ? '' : trim(str_replace($censored_id, '', $out[1]));////'movie_title'
        preg_match('#id="video_jacket_img" src="(.*?)"#', $content, $out);
        $arr_data['movie_pic_cover'] = empty($out[1]) ? '' : str_replace(['http://pics.dmm.co.jp/mono/movie/adult/','//pics.dmm.co.jp/mono/movie/adult/'], '',$out[1]);//'movie_pic_cover'//替换 域名  http://pics.dmm.co.jp/

        preg_match('#<td class="header">发行日期:</td>[\s]*?<td class="text">(.*?)</td>#', $content, $out);
        $arr_data['release_date'] = empty($out[1]) ? '' : $out[1];//'release_date'

        preg_match('#<td class="header">长度:</td>[\s]*?<td><span class="text">(.*?)</span> 分钟</td>#', $content, $out);
        $arr_data['movie_length'] = empty($out[1]) ? '' : $out[1];// 'movie_length'

        preg_match('#href="vl_director.php\?d=(.*?)"#', $content, $out);
        $arr_data['Director'] = empty($out[1]) ? '' : $out[1];//'Director'

        preg_match('#href="vl_maker.php\?m=(.*?)"#', $content, $out);
        $arr_data['Studio'] = empty($out[1]) ? '' : $out[1];//'Studio'

        preg_match('#href="vl_label.php\?l=(.*?)"#', $content, $out);
        $arr_data['Label'] = empty($out[1]) ? '' : $out[1];//'Label'

        preg_match('#<span class="score">\((.*?)\)</span>#', $content, $out);
        $arr_data['score'] = empty($out[1]) ? '' : (floatval($out[1]));//'score'
        preg_match_all('#href="vl_genre.php\?g=(.*?)"#', $content, $out);
        $arr_data['Genre'] = empty($out[1]) ? '' : '['.implode('][',$out[1]).']';//'Genre'
        preg_match_all('#href="vl_star.php\?s=(.*?)"#', $content, $out);
        //  $arr_data[] = empty($out[1]) ? '' : implode('[]',$out[1]);
        $arr_data['JAV_Idols'] = empty($out[1]) ? '' : '['.implode('][',$out[1]).']';//'JAV_Idols'
        $s = '<a href="userswanted.php\?v='.$code_36.'">(.*?)</a>';
        preg_match("#$s#", $content, $out);
        $arr_data['userswanted'] = empty($out[1]) ? '' : $out[1];//'Director'
        preg_match('#href="userswatched.php\?v='.$code_36.'">(.*?)</a>#', $content, $out);
        $arr_data['userswatched'] = empty($out[1]) ? '' : $out[1];//'Director'
        preg_match('#href="usersowned.php\?v='.$code_36.'">(.*?)</a>#', $content, $out);
        $arr_data['usersowned'] = empty($out[1]) ? '' : $out[1];//'Director'
        $arr_data['comments'] = strpos($content,'<em>空的列表</em>')===false ? 1 : 0;
        return $arr_data;
    }
}


================================================
FILE: app/Console/Commands/Scandir.php
================================================
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use TheSeer\DirectoryScanner\DirectoryScanner;
use App\Console\Tools\MedooEx;
class Scandir extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'scandir {--path=}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $database = new  MedooEx([
            'database_type' => 'mysql',
            'database_name' => env('DB_DATABASE', 'avbook'),
            'server' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', '')
        ]);
        $path = str_replace(['"',"'"],'',$this->option('path')) ;
        $this->info($path);
        $tmp = new DirectoryScanner();
        $files = $tmp->getFiles($path);
        $fileskey = [];
        foreach ($files as $file) {
            $value = trim($file->getPathname());
            if (strrpos($value, 'torrent')===false && strrpos($value, '.mht')===false&& strrpos($value, '.png')===false &&strrpos($value, '.gif')===false&&strrpos($value, '.jpg')===false) {
                $fileskey[$value] = 1;;
            }
        }
        $fileskey = array_keys($fileskey);
        $arr_movieid =[];
        foreach ($fileskey as  $value) {
            echo $value ,"\n";
            preg_match_all('/([a-zA-Z]{2,6})[-|_|\s]{0,3}([0-9]{3,4})(.*?)/', $value,$out);
            foreach ($out[1] as $key => $value) {
                $arr_movieid[strtoupper($out[1][$key]).'-'.$out[2][$key]]=1;//."({$out[0][$key]})"
            }
        }
        $arr_movieid=array_keys($arr_movieid);
        if(!empty($arr_movieid)){
            $t =implode("','", $arr_movieid);
            $ssql = "update avbook_avmoo_movie set have_file = 3,have_mg=1,owned=1 where censored_id in ('{$t}') ";
            var_dump($ssql);
            $database->query( $ssql);
            $this->info("id数量:".count($arr_movieid));
        }else{
            $this->warn('无匹配的id');
        }

    }
}


================================================
FILE: app/Console/Commands/SendEmails.php
================================================
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class SendEmails extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'command:name';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
    }
}


================================================
FILE: app/Console/Kernel.php
================================================
<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        //
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        // $schedule->command('inspire')
        //          ->hourly();
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}


================================================
FILE: app/Console/Tools/MedooEx.php
================================================
<?php
/**
 * Created by PhpStorm.
 * User: https://github.com/guyueyingmu
 * Date: 2019/5/3
 * Time: 9:08
 */

namespace App\Console\Tools;

use Medoo\Medoo;

class MedooEx extends Medoo
{
    public function __construct(array $options)
    {
        parent::__construct($options);
    }

    public function insert($table, $datas)
    {
        $stack = [];
        $columns = [];
        $fields = [];
        $map = [];

        if (!isset($datas[ 0 ]))
        {
            $datas = [$datas];
        }
        foreach ($datas as $data)
        {
            foreach ($data as $key => $value)
            {
                $columns[] = $key;
            }
        }

        $columns = array_unique($columns);

        foreach ($datas as $data)
        {
            $values = [];

            foreach ($columns as $key)
            {
                if ($raw = $this->buildRaw($data[ $key ], $map))
                {
                    $values[] = $raw;
                    continue;
                }

                $map_key =$this->mapKey();

                $values[] = $map_key;

                if (!isset($data[ $key ]))
                {
                    $map[ $map_key ] = [null, PDO::PARAM_NULL];
                }
                else
                {
                    $value = $data[ $key ];

                    $type = gettype($value);

                    switch ($type)
                    {
                        case 'array':
                            $map[ $map_key ] = [
                                strpos($key, '[JSON]') === strlen($key) - 6 ?
                                    json_encode($value) :
                                    serialize($value),
                                PDO::PARAM_STR
                            ];
                            break;

                        case 'object':
                            $value = serialize($value);

                        case 'NULL':
                        case 'resource':
                        case 'boolean':
                        case 'integer':
                        case 'double':
                        case 'string':
                            $map[ $map_key ] = $this->typeMap($value, $type);
                            break;
                    }
                }
            }

            $stack[] = '(' . implode($values, ', ') . ')';
        }

        foreach ($columns as $key)
        {
            $fields[] = $this->columnQuote(preg_replace("/(\s*\[JSON\]$)/i", '', $key));
        }
        return $this->exec('INSERT IGNORE INTO ' . $this->tableQuote($table) . ' (' . implode(', ', $fields) . ') VALUES ' . implode(', ', $stack), $map);
    }

}

================================================
FILE: app/Exceptions/Handler.php
================================================
<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

class Handler extends ExceptionHandler
{
    /**
     * A list of the exception types that are not reported.
     *
     * @var array
     */
    protected $dontReport = [
        //
    ];

    /**
     * A list of the inputs that are never flashed for validation exceptions.
     *
     * @var array
     */
    protected $dontFlash = [
        'password',
        'password_confirmation',
    ];

    /**
     * Report or log an exception.
     *
     * @param  \Exception  $exception
     * @return void
     */
    public function report(Exception $exception)
    {
        parent::report($exception);
    }

    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $exception)
    {
        return parent::render($request, $exception);
    }
}


================================================
FILE: app/Http/Controllers/API/MovieinfoController.php
================================================
<?php

namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Models\Avbooks;
use App\Models\Avbus;
use App\Models\Magnet;
use App\Models\Actresses;


class MovieinfoController extends Controller
{
    public function change_state(Request $request)
    {
        if (empty($request->code_36 || $request->statekey )) {
            $res['code'] = 0;
            $res['msg'] = 'code_36 needed' ;
            return $res;
        }
        $request->statevalue = intval($request->statevalue);
        if($request->statevalue==0){
           // $request->statevalue = null;
        }
        $data = array( $request->statekey =>  $request->statevalue );//!生产环境应过滤字段 but...
        if($request->statekey == 'owned' && $request->statevalue ==1 ){
          //  $data = array( $request->statekey => $request->statevalue,'have_file'=> 3 );
        }

        $r = Avbooks::where('code_36',$request->code_36)->update($data);

        $res['code'] = $request->statevalue>0?1:0;
        $res['msg'] = "{$request->statekey} 更新成功:".$r;

        return $res;
    }
    public function magnetlinks(Request $request)
    {
        $cf =\App\Tools\CrawlerUpdate::get_crawler_config();

        if(!$request->gid){
            \Artisan::call("avbook:javbus  --movieid={$request->censored_id}");
            return '<script type="text/javascript"> //location.href = location.href;</script>';

        }
        $links = Magnet::where('gid',$request->gid)->orderBy('magnet_date', 'desc')->orderBy('have_hd', 'desc')->orderBy('magnet_type', 'desc')->get();
        if($links->isEmpty()){
            \Artisan::call("avbook:javbus  --magnetid={$request->gid}");
            $links = Magnet::where('gid',$request->gid)->orderBy('magnet_date', 'desc')->orderBy('have_hd', 'desc')->orderBy('magnet_type', 'desc')->get();
        }
        $data['res_mg'] = $links;
        return  view('magnetlinks',$data);
    }

    public function magnetlinks2(Request $request)
    {
        if(!$request->gid){
            return 'gid is null ';
        }

//        $ch = $this->set_javbus5_curl_mg($request->gid);
//        $tmp_result = curl_exec($ch);
////        iconv(  "UTF-8" ,"GBK", $tmp_result);
////        echo "  ggg";
////        $tmp_result = mb_convert_encoding($tmp_result, 'GBK', 'utf-8');
//        echo $tmp_result;die;

        $client = new \GuzzleHttp\Client();

//        $response = $client->request('GET', 'https://www.baidu.com/',[
//            'headers'=> [
//                'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
//                'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
//                'Accept-Language' => 'zh-CN,zh;q=0.9,en;q=0.8,sm;q=0.7',
//                'Accept-Encoding' => 'gzip'
//            ],
//            'decode_content' => true,// 解密gzip
//            'connect_timeout' => 10
//        ]);

        $response = $client->request('GET', 'https://www.busjav.us/ajax/uncledatoolsbyajax.php?gid='.$request->gid.'&lang=zh&img=https://pics.javcdn.pw/cover/72z3_b.jpg&uc=0&floor=601', [
            'headers' => [
                'accept'=>' */*',
                'accept-encoding'=>' gzip, deflate',
                'accept-language'=>' zh-CN,zh;q=0.9,en;q=0.8',
                'cookie'=>' __cfduid=d81cc88b23e9028e96a7163ab877395191555602526; starinfo=glyphicon%20glyphicon-plus; existisgenres=gr_single; existmag=mag; 4fJN_2132_saltkey=Gj4yHsTs; 4fJN_2132_lastvisit=1555681998; PHPSESSID=qm0du428o07jr3ujljfd3t1vb1',
                'referer'=>' https://www.seedmm.us/SGA-127',
                'user-agent'=>' Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36',
                'x-requested-with'=>' XMLHttpRequest'
            ],
            'decode_content' => true,
        ]);

        // print_r($response);

        // 转换成页面使用的编码,默认为UTF-8,否则乱码!
        $type = $response->getHeader('content-type');
        $parsed = \GuzzleHttp\Psr7\parse_header($type);
        $original_body = (string)$response->getBody();
        $utf8_body = mb_convert_encoding($original_body, 'UTF-8', isset($parsed[0]['charset']) ?$parsed[0]['charset']: 'UTF-8');

//        print_r($utf8_body);
        echo $utf8_body;
        die;

        $response = $client->request('GET', 'https://www.seedmm.us/ajax/uncledatoolsbyajax.php?gid=40016044296&lang=zh&img=https://pics.javcdn.pw/cover/72qp_b.jpg&uc=0&floor=528', [
            'headers' => [
                'accept'=>' */*',
                'accept-encoding'=>' gzip, deflate',
                'accept-language'=>' zh-CN,zh;q=0.9,en;q=0.8',
                'cookie'=>' __cfduid=d81cc88b23e9028e96a7163ab877395191555602526; starinfo=glyphicon%20glyphicon-plus; existisgenres=gr_single; existmag=mag; 4fJN_2132_saltkey=Gj4yHsTs; 4fJN_2132_lastvisit=1555681998; PHPSESSID=qm0du428o07jr3ujljfd3t1vb1',
                'referer'=>' https://www.seedmm.us/SGA-127',
                'user-agent'=>' Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36',
                'x-requested-with'=>' XMLHttpRequest'
            ],
            'decode_content' => true,
        ] );
        $response = $response->getBody()->getContents();
        print_r($response);
        die;
        die;
//        $links = Magnet::where('gid',$request->gid)->orderBy('have_hd', 'desc')->orderBy('magnet_type', 'desc')->get();
//        $links->isEmpty()
        if (1) {
            $need_hd = '包含高清HD的磁力連結';
            $need_sub = '包含字幕的磁力連結';
            $mg_arr = [];
            $ch = $this->set_javbus5_curl_mg($request->gid);
            $tmp_result = curl_exec($ch);
echo "<pre> ggg";
echo $tmp_result ;die;
            preg_match_all('#<tr onmouseover="this.style.backgroundColor=[\s\S]*?滑鼠右鍵點擊並選擇【複製連結網址】" href="(.*?)">[\s]*?(.*?)</a>[\s]*?</td>[\s\S]*?【複製連結網址】" href="magnet[\s\S]*?">[\s]*?(.*?)</a>[\s]*?</td>[\s\S]*?【複製連結網址】" href="magnet[\s\S]*?xt=urn:btih:(.*?)&[\s\S]*?">[\s]*?(.*?)</a>[\s]*?</td>#', $tmp_result, $out);
            if (!empty($out[2])) {
                $isup = true;
                foreach ($out[2] as $key => $value) {
                    $temp_arr = array();
                    $have_hd = 0;
                    $have_sub = 0;

                    if (strpos($value, $need_hd)) {
                        $have_hd = 1;
                        $value = str_replace('<a class="btn btn-mini-new btn-primary disabled" title="包含高清HD的磁力連結">高清</a>', "", $value);
                    }
                    if (strpos($value, $need_sub)) {
                        $have_sub = 1;
                        $value = str_replace('<a class="btn btn-mini-new btn-warning disabled" title="包含字幕的磁力連結">字幕</a>', "", $value);
                    }
                    $temp_arr['gid'] = $request->gid;
                    $xt = trim($out[4][$key]);
                    $temp_arr['magnet_xt'] = $xt;
                    $temp_arr['magnet_name'] = trim($value);
                    $temp_arr['magnet_type'] = trim($out[3][$key]);
                    $temp_arr['magnet_date'] = trim($out[5][$key]);
                    $temp_arr['have_hd'] = $have_hd;
                    $temp_arr['have_sub'] = $have_sub;
                    array_push($mg_arr, $temp_arr);
                }
                Magnet::insert($mg_arr);
                $links = Magnet::where('gid',$request->gid)->orderBy('have_hd', 'desc')->orderBy('magnet_type', 'desc')->get();
            }
        }
        $data['res_mg'] = $links;
        $data['res_mgbtso'] = [];
        return  view('magnetlinks',$data);
    }
    public function change_genre(Request $request)
    {
        if (empty($request->code_36 || $request->Genre )) {
            return 'code_36 needed';
        }
        $movie_info= Avbooks::where('code_36',$request->code_36)->first();
        $find=array('[',']');
        $str = str_replace($find, '',str_replace('][', ',', $movie_info['Genre']));
        $arr = explode(',', $str);
        $res = [];

        if (!in_array($request->Genre, $arr)) {
            $tempstr = '';
            if(  '84m' == $request->Genre &&  (!in_array('4m', $arr)) ){
                $tempstr = '[4m]';
            }
            $data = array( 'Genre' =>  $movie_info['Genre'].'['.$request->Genre .']'.$tempstr );
            Avbooks::where('code_36',$request->code_36)->update($data);
            $res['code']=1;
            $res['msg'] = "添加成功";

        }else{
            $data = array( 'Genre' => str_replace('['.$request->Genre .']' , '', $movie_info['Genre']) );
            Avbooks::where('code_36',$request->code_36)->update($data);
            $res['code']=2;
            $res['msg'] = "删除成功";
        }
        return $res;
        //return view('layout_genre');
    }

    public function change_genre_all(Request $request)
    {

        $where_books[] =['Genre','like','%['.$request->Genre.']%'];




        $movie_infos= Avbooks::where($where_books)->get();
//        return $movie_infos;
        $find=array('[',']');
        $res = [];
        foreach ($movie_infos as $movie_info){


            $str = str_replace($find, '',str_replace('][', ',', $movie_info['Genre']));
            $arr = explode(',', $str);


            if (!in_array($request->Genre, $arr)) {
//                $data = array( 'Genre' =>  $movie_info['Genre'].'['.$request->Genre .']' );
//                Avbooks::where('code_36',$movie_info['code_36'] )->update($data);
//                $res['code']=1;
//                $res['msg'] = "添加成功";
            }else{
                $data = array( 'Genre' => str_replace('['.$request->Genre .']' , '', $movie_info['Genre']) );
                Avbooks::where('code_36',$movie_info['code_36'])->update($data);
                $res['code']=2;
                $res['msg'] = "删除成功";
            }

        }

        return $res;
        //return view('layout_genre');
    }

    public function save_blogjav_img(Request $request)
    {
        if (empty($request->censored_id) || empty($request->imgurl) ) {
            return 'censored_id needed';
        }
        $data = array( 'blogjav_img' =>  $request->imgurl );//!生产环境应过滤字段 but...
        $r = Avbooks::where('censored_id',$request->censored_id)->update($data);

        $res['code'] = 1;
        $res['msg'] = '更新成功:'.$r;

        return $res;
    }

    private  function set_javbus5_curl_mg($f_code)
    {

        $bushost = 'www.busjav.us';
        $url = 'https://www.seedmm.us/ajax/uncledatoolsbyajax.php?gid=40016044296&lang=zh&img=https://pics.javcdn.pw/cover/72qp_b.jpg&uc=0&floor=528';


        $ch = curl_init();
        $cki = "__cfduid=d81cc88b23e9028e96a7163ab877395191555602526; starinfo=glyphicon%20glyphicon-plus; existisgenres=gr_single; existmag=mag; 4fJN_2132_saltkey=Gj4yHsTs; 4fJN_2132_lastvisit=1555681998; PHPSESSID=qm0du428o07jr3ujljfd3t1x" . rand(1000, 9999);
        $cki = "__cfduid=d81cc88b23e9028e96a7163ab877395191555602526; starinfo=glyphicon%20glyphicon-plus; existisgenres=gr_single; existmag=mag; 4fJN_2132_saltkey=Gj4yHsTs; 4fJN_2132_lastvisit=1555681998; PHPSESSID=qm0du428o07jr3ujljfd3t1vb1";
        // 设置浏览器的特定header
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'accept: */*',
            'accept-encoding: gzip, deflate, br',
            'accept-language: zh-CN,zh;q=0.9,en;q=0.8',
            'cookie: __cfduid=d81cc88b23e9028e96a7163ab877395191555602526; starinfo=glyphicon%20glyphicon-plus; existisgenres=gr_single; existmag=mag; 4fJN_2132_saltkey=Gj4yHsTs; 4fJN_2132_lastvisit=1555681998; PHPSESSID=qm0du428o07jr3ujljfd3t1vb1',
            'referer: https://www.seedmm.us/SGA-127',
            'user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36',
            'x-requested-with: XMLHttpRequest'
        ));
//        curl_setopt($ch, CURLOPT_COOKIE, $cki);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36');
        // 在HTTP请求头中"Referer: "的内容。
//        curl_setopt($ch, CURLOPT_REFERER, $bushost);
        curl_setopt($ch, CURLOPT_ENCODING, "gzip, deflate, br");
//        curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 302redirect
        // 针对https的设置
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        // $html = curl_exec($ch);
        return $ch;
    }

}


================================================
FILE: app/Http/Controllers/Auth/ForgotPasswordController.php
================================================
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;

class ForgotPasswordController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Password Reset Controller
    |--------------------------------------------------------------------------
    |
    | This controller is responsible for handling password reset emails and
    | includes a trait which assists in sending these notifications from
    | your application to your users. Feel free to explore this trait.
    |
    */

    use SendsPasswordResetEmails;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }
}


================================================
FILE: app/Http/Controllers/Auth/LoginController.php
================================================
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
}


================================================
FILE: app/Http/Controllers/Auth/RegisterController.php
================================================
<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
    }
}


================================================
FILE: app/Http/Controllers/Auth/ResetPasswordController.php
================================================
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;

class ResetPasswordController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Password Reset Controller
    |--------------------------------------------------------------------------
    |
    | This controller is responsible for handling password reset requests
    | and uses a simple trait to include this behavior. You're free to
    | explore this trait and override any methods you wish to tweak.
    |
    */

    use ResetsPasswords;

    /**
     * Where to redirect users after resetting their password.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }
}


================================================
FILE: app/Http/Controllers/Auth/VerificationController.php
================================================
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\VerifiesEmails;

class VerificationController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Email Verification Controller
    |--------------------------------------------------------------------------
    |
    | This controller is responsible for handling email verification for any
    | user that recently registered with the application. Emails may also
    | be re-sent if the user didn't receive the original email message.
    |
    */

    use VerifiesEmails;

    /**
     * Where to redirect users after verification.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware('signed')->only('verify');
        $this->middleware('throttle:6,1')->only('verify', 'resend');
    }
}


================================================
FILE: app/Http/Controllers/AvbookController.php
================================================
<?php

namespace App\Http\Controllers;
use App\Models\Javlibrary;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Models\Avbooks;
use App\Models\Movies;
use App\Models\Javbus;
use App\Models\Actresses;
class AvbookController extends Controller
{

    public function index(Request $request)
    {
        $where_map = ['hd' => 'have_hd',
            'sub' => 'have_sub',
            'file' => 'have_file',
            'Series' => 'Series',
            'Label' => 'Label',
            'Studio' => 'Studio',
            'director' => 'director','wanted' => 'wanted'
        ];
        $table_key = ['movie_title','movie_pic_cover','censored_id',
            'have_file','have_mg','have_sub','have_hd','owned','favorite','wanted','watched',
            'Genre','code_36','release_date'];
        $title = '';
        $orderby = "magnet_date";
        $where_books = [];
        $page_info = [];

        foreach ($request->all() as $key => $value) {
            if(isset($where_map[$key])){
                $where_books[]=[$where_map[$key],$value];
            }
            $page_info[$key] = $value;
        }
        if($request->mg=='1'){
            $where_books[] =['have_mg','1'];
        }elseif($request->mg==='0'){
            $orderby = 'code_10';
        }
        if($request->ltitle){
            $request->ltitle = array_unique($request->ltitle);
            $title = implode('-',$request->ltitle);
        }
//        var_dump($request->owned);die;
        if($request->owned=='1'){
            $where_books[] =['owned','1'];
            $page_info['ltitle'] = array_diff($page_info['ltitle'], ["未拥有"]);
        }elseif ($request->owned === '0'){
            //var_dump($page_info['ltitle']);die;
            $page_info['ltitle'] = array_diff($page_info['ltitle'], ["已拥有"]);
            $where_books[] =['owned','0'];
        }
        if($request->favorite=='1'){
            $where_books[] =['favorite','>','0'];;
        }


        if($request->notfile){
            $where_books[] =['have_file','!=',$request->notfile];
        }
        if($request->notSeries=='_'){
            $where_books[] =['Series','!=',''];
        }
        if($request->gc){
            $request->gc = array_unique($request->gc);
            foreach ($request->gc as $genrecode) {
                $where_books[] =['Genre','like','%['.$genrecode.']%'];
            }
        }
        if($request->strgc){
            $arr_gc = explode('-',$request->strgc);
            foreach ($arr_gc as $genrecode) {
                $where_books[] =['Genre','like','%['.$genrecode.']%'];
            }
        }

        if($request->notgc){
            $request->notgc = array_unique($request->notgc);
            foreach ($request->notgc as $genrecode) {
                $where_books[] =['Genre','not like','%['.$genrecode.']%'];
            }
        }
        if($request->st){
            $where_books[] =['JAV_Idols','like','%['.$request->st.']%'];
            $data['res_star']=Actresses::where('code_36',$request->st)->first();;
        }
        if($request->st1){
            $where_books[] =['JAV_Idols','like','%['.$request->st1.']%'];
            $data['res_star1']=Actresses::where('code_36',$request->st)->first();;
        }
        if($request->st0){
            $where_books[] =['JAV_Idols','['.$request->st0.']'];
        }
        if($request->str_w){
            $arr_temp = explode('-',$request->str_w);
            $where_books[] =[$arr_temp[0],$arr_temp[1]];
        }
        if($request->orderby){
            $orderby = $request->orderby;
        }
        $idkeyk= [];
        if($request->search){
            $pt= '搜索:'.$request->search;
            if(isset($page_info['ltitle'])) $page_info['ltitle'] = array_diff($page_info['ltitle'], ["$pt"]);
            $page_info['ltitle'][] = $pt;
            preg_match_all('/([a-zA-Z]{2,6})[-|_|\s]{0,3}([0-9]{3,4})(.*?)/', $request->search,$out);
            foreach ($out[1] as $key => $value) {
                $idkeyk[strtoupper($out[1][$key]).'-'.$out[2][$key]]=1;//."({$out[0][$key]})"
            }
            if (empty($idkeyk)) {
                if (ctype_alnum($request->search)) {
                    $where_books[] =['censored_id','like','%'.$request->search.'%'];
                }else{
                    $where_books[] =['movie_title','like','%'.$request->search.'%'];
                }
            }else{
                $idkeyk=array_keys($idkeyk);
            }
        }

        if(!empty($where_books)){
            $Avbooks = Avbooks::select($table_key)->where($where_books)->orderBy($orderby, 'desc')->orderBy('code_10', 'desc')->paginate(config('avbook.cen_per_page'));
            //return $Avbooks;
        }else{
            if(empty($idkeyk)){
                $Avbooks = Avbooks::select($table_key)->orderBy($orderby, 'desc')->orderBy('code_10', 'desc')->paginate(config('avbook.cen_per_page'));
            }else{
                $Avbooks = Avbooks::select($table_key)->whereIn('censored_id', $idkeyk)->orderBy('code_10', 'desc')->paginate(config('avbook.cen_per_page'));
                if ($Avbooks->count()==1){
                    Header("Location: ".url('/movie?censored_id='.$Avbooks->first()->censored_id));
                }
            }
        }

        $data['list']= $Avbooks;
        $data['title']= $title;
        $data['filter']= config('avbook.filter');
        $data['page_info']= $page_info;
        return view('layout_censored',$data );
    }

    public function javlib(Request $request)
    {
//        $where_map = ['hd' => 'have_hd',
//            'sub' => 'have_sub',
//            'file' => 'have_file',
//            'Series' => 'Series',
//            'Label' => 'Label',
//            'Studio' => 'Studio',
//            'director' => 'director','wanted' => 'wanted'
//        ];
        $table_key = ['movie_title','movie_pic_cover','censored_id',
            'have_file','have_mg','have_sub','have_hd','owned','favorite','wanted','watched',
            'Genre','code_36','release_date'];
//        $title = '';
//        $orderby = "magnet_date";
//        $where_books = [];
//        $page_info = [];
//
//        foreach ($request->all() as $key => $value) {
//            if(isset($where_map[$key])){
//                $where_books[]=[$where_map[$key],$value];
//            }
//            $page_info[$key] = $value;
//        }
//        if($request->mg=='1'){
//            $where_books[] =['have_mg','1'];
//        }elseif($request->mg==='0'){
//            $orderby = 'code_10';
//        }
//        if($request->ltitle){
//            $request->ltitle = array_unique($request->ltitle);
//            $title = implode('-',$request->ltitle);
//        }
////        var_dump($request->owned);die;
//        if($request->owned=='1'){
//            $where_books[] =['owned','1'];
//            $page_info['ltitle'] = array_diff($page_info['ltitle'], ["未拥有"]);
//        }elseif ($request->owned === '0'){
//            //var_dump($page_info['ltitle']);die;
//            $page_info['ltitle'] = array_diff($page_info['ltitle'], ["已拥有"]);
//            $where_books[] =['owned','0'];
//        }
//        if($request->favorite=='1'){
//            $where_books[] =['favorite','>','0'];;
//        }
//
//
//        if($request->notfile){
//            $where_books[] =['have_file','!=',$request->notfile];
//        }
//        if($request->notSeries=='_'){
//            $where_books[] =['Series','!=',''];
//        }
//        if($request->gc){
//            $request->gc = array_unique($request->gc);
//            foreach ($request->gc as $genrecode) {
//                $where_books[] =['Genre','like','%['.$genrecode.']%'];
//            }
//        }
//        if($request->strgc){
//            $arr_gc = explode('-',$request->strgc);
//            foreach ($arr_gc as $genrecode) {
//                $where_books[] =['Genre','like','%['.$genrecode.']%'];
//            }
//        }
//
//        if($request->notgc){
//            $request->notgc = array_unique($request->notgc);
//            foreach ($request->notgc as $genrecode) {
//                $where_books[] =['Genre','not like','%['.$genrecode.']%'];
//            }
//        }
//        if($request->st){
//            $where_books[] =['JAV_Idols','like','%['.$request->st.']%'];
//            $data['res_star']=Actresses::where('code_36',$request->st)->first();;
//        }
//        if($request->st1){
//            $where_books[] =['JAV_Idols','like','%['.$request->st1.']%'];
//            $data['res_star1']=Actresses::where('code_36',$request->st)->first();;
//        }
//        if($request->st0){
//            $where_books[] =['JAV_Idols','['.$request->st0.']'];
//        }
//        if($request->str_w){
//            $arr_temp = explode('-',$request->str_w);
//            $where_books[] =[$arr_temp[0],$arr_temp[1]];
//        }
//        if($request->orderby){
//            $orderby = $request->orderby;
//        }
//        $idkeyk= [];
//        if($request->search){
//
//            preg_match_all('/([a-zA-Z]{2,6})[-|_|\s]{0,3}([0-9]{3,4})(.*?)/', $request->search,$out);
//            foreach ($out[1] as $key => $value) {
//                $idkeyk[strtoupper($out[1][$key]).'-'.$out[2][$key]]=1;//."({$out[0][$key]})"
//            }
//            if (empty($idkeyk)) {
//                $where_books[] =['movie_title','like','%'.$request->search.'%'];
//            }else{
//                $idkeyk=array_keys($idkeyk);
//            }
//        }

        if(!empty($where_books)){
            $Avbooks = Avbooks::select($table_key)->where($where_books)->orderBy($orderby, 'desc')->orderBy('code_10', 'desc')->paginate(config('avbook.cen_per_page'));
            //return $Avbooks;
        }else{
            if(empty($idkeyk)){
                $Avbooks = Javlibrary::orderBy('usersowned', 'desc')->orderBy('userswanted', 'desc')->orderBy('userswatched', 'desc')->orderBy('release_date', 'desc')->paginate(config('avbook.cen_per_page'));
            }else{
                $Avbooks = Avbooks::select($table_key)->whereIn('censored_id', $idkeyk)->orderBy('code_10', 'desc')->paginate(config('avbook.cen_per_page'));
                if ($Avbooks->count()==1){
                    Header("Location: ".url('/movie?censored_id='.$Avbooks->first()->censored_id));
                }
            }
        }

        $data['list']= $Avbooks;
        $data['title']= '';
        $data['filter']= config('avbook.filter');
        $data['page_info']= [];
        return view('layout_javlib',$data );
    }
    public function javlibmovie(Request $request)
    {
        $censored_id = $request->censored_id;
        $censored_id = str_replace(" ",'',$censored_id);
        if($request->checkid){
            $request->checkid   = str_replace(" ",'',$request->checkid);
            if(strpos($request->checkid,'-')===false){
                preg_match('#(\d{1,5})#', $request->checkid, $out);
                if(isset($out[1])){
                    $censored_id = str_replace($out[1],'',$request->checkid)."-".$out[1];
                    Header("Location: ".url('/movie?censored_id='.$censored_id));
                    die;
                }
            }
            $censored_id = $request->checkid;
        }
        preg_match('#(\d{1,5})#', explode('-',$censored_id)[1], $outnum);
        if(isset($outnum[1])){
            $censored_id_num = $outnum[1];
            $data['last_censored_id'] = str_replace($censored_id_num,''.sprintf('%03s', $censored_id_num+1),$censored_id);
            $data['next_censored_id'] = str_replace($censored_id_num,''.sprintf('%03s', $censored_id_num-1),$censored_id);
        }

        if($request->id){
            $movie_info= Javlibrary::where('code_36',$request->id)->first();
        }else{
            $movie_info= Movies::where('censored_id',$censored_id)->orderBy('code_10', 'desc')->first();
        }
        if (empty($movie_info)) {
            die($censored_id  ."==not find <a href = '/movie?censored_id={$data['last_censored_id']}'><=== </a> || <a href = '/movie?censored_id={$data['next_censored_id']}'>===> </a>");
        }
//        if($movie_info['visited']<254){
//            $movie_info['visited']=$movie_info['visited'] +1;
//            $t_update = ['visited'=>$movie_info['visited']];
//            Avbooks::where('code_36',$movie_info['code_36'])->update($t_update);
//
//        }
        $find=array('[',']');
        $movie_info['JAV_Idols'] = str_replace($find, '',str_replace('][', ',', $movie_info['JAV_Idols']));
        $arr_star = explode(',', $movie_info['JAV_Idols']);
        $idols_info = Actresses::whereIn('code_36', $arr_star)->get();

        $movie_info['Genre'] = str_replace($find, '',str_replace('][', ',', $movie_info['Genre']));
        $arr_genre_code =explode(',', $movie_info['Genre']) ;
        $genre_info = DB::table('avbook_avmoo_genre')
            ->whereIn('genre_code', $arr_genre_code)->get();

//        $avbus = Javbus::where('avmoo_code_36',$movie_info['code_36'])->orWhere('censored_id',$movie_info['censored_id'])->first();

//        $res_more= [ ];
//        if (!empty($avbus->Similar)) {
//            $Similar= explode(',', str_replace($find, '',str_replace('][', ',',$avbus->Similar)));
//            $res_more =Avbooks::whereIn('censored_id', $Similar)->get();
//        }
        $genre_config=['4m'=>'主观视角','8'=>'眼镜' ];
        // [['class="btn-warning ',''],['4m'=>'主观视角','8'=>'眼镜','84m'=>'完全主观' ]];//自定义添加类别

        $data['res_star'] = json_decode(json_encode($idols_info),true); ;//$user->toArray();
        $data['res_genre'] = json_decode(json_encode($genre_info),true);
        $data['genre_config'] = $genre_config;
        $data['res_more'] = [];
        $data['movie_info'] = $movie_info;
        $data['avbus'] = [] ;
        $data['url_config'] = \App\Tools\CrawlerUpdate::get_crawler_config() ;
        $data['pagenext'] = '';

        return view('layout_javlibmovie', $data);

    }

    public function movie(Request $request)
    {
        $censored_id = $request->censored_id;
        $censored_id = str_replace(" ",'',$censored_id);
        if($request->checkid){
            $request->checkid   = str_replace(" ",'',$request->checkid);
            if(strpos($request->checkid,'-')===false){
                preg_match('#(\d{1,5})#', $request->checkid, $out);
                if(isset($out[1])){
                    $censored_id = str_replace($out[1],'',$request->checkid)."-".$out[1];
                    Header("Location: ".url('/movie?censored_id='.$censored_id));
                    die;
                }
            }
            $censored_id = $request->checkid;
        }
        preg_match('#(\d{1,5})#', explode('-',$censored_id)[1], $outnum);
        if(isset($outnum[1])){
            $censored_id_num = $outnum[1];
            $data['last_censored_id'] = str_replace($censored_id_num,''.sprintf('%03s', $censored_id_num+1),$censored_id);
            $data['next_censored_id'] = str_replace($censored_id_num,''.sprintf('%03s', $censored_id_num-1),$censored_id);
        }

        if($request->id){
            $movie_info= Movies::where('code_36',$request->id)->first();
        }else{
            $movie_info= Movies::where('censored_id',$censored_id)->orderBy('code_10', 'desc')->first();
        }
        if (empty($movie_info)) {
            die($censored_id  ."==not find <a href = '/movie?censored_id={$data['last_censored_id']}'><=== </a> || <a href = '/movie?censored_id={$data['next_censored_id']}'>===> </a>");
        }
        if($movie_info['visited']<254){
            $movie_info['visited']=$movie_info['visited'] +1;
            $t_update = ['visited'=>$movie_info['visited']];
            Avbooks::where('code_36',$movie_info['code_36'])->update($t_update);

        }
        $find=array('[',']');
        $movie_info['JAV_Idols'] = str_replace($find, '',str_replace('][', ',', $movie_info['JAV_Idols']));
        $arr_star = explode(',', $movie_info['JAV_Idols']);
        $idols_info = Actresses::whereIn('code_36', $arr_star)->get();

        $movie_info['Genre'] = str_replace($find, '',str_replace('][', ',', $movie_info['Genre']));
        $arr_genre_code =explode(',', $movie_info['Genre']) ;
        $genre_info = DB::table('avbook_avmoo_genre')
            ->whereIn('genre_code', $arr_genre_code)->get();

        $avbus = Javbus::where('avmoo_code_36',$movie_info['code_36'])->orWhere('censored_id',$movie_info['censored_id'])->first();

        $res_more= [ ];
        if (!empty($avbus->Similar)) {
            $Similar= explode(',', str_replace($find, '',str_replace('][', ',',$avbus->Similar)));
            $res_more =Avbooks::whereIn('censored_id', $Similar)->get();
        }
        $genre_config=['4m'=>'主观视角','8'=>'眼镜' ];
        // [['class="btn-warning ',''],['4m'=>'主观视角','8'=>'眼镜','84m'=>'完全主观' ]];//自定义添加类别

        $data['res_star'] = json_decode(json_encode($idols_info),true); ;//$user->toArray();
        $data['res_genre'] = json_decode(json_encode($genre_info),true);
        $data['genre_config'] = $genre_config;
        $data['res_more'] = $res_more;
        $data['movie_info'] = $movie_info;
        $data['avbus'] = $avbus ;
        $data['url_config'] = \App\Tools\CrawlerUpdate::get_crawler_config() ;
        $data['pagenext'] = '';

        return view('layout_movie', $data);

    }
    public function genre(Request $request)
    {
        return view('layout_genre');
    }


    public function actresses(Request $request)
    {
        $data['actresses']= Actresses::orderBy('file_num', 'desc')->paginate(30);
        return view('actresses',$data);
    }

}


================================================
FILE: app/Http/Controllers/Controller.php
================================================
<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}


================================================
FILE: app/Http/Kernel.php
================================================
<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\TrustProxies::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];

    /**
     * The priority-sorted list of middleware.
     *
     * This forces non-global middleware to always be in the given order.
     *
     * @var array
     */
    protected $middlewarePriority = [
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\Authenticate::class,
        \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Illuminate\Auth\Middleware\Authorize::class,
    ];
}


================================================
FILE: app/Http/Middleware/Authenticate.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;

class Authenticate extends Middleware
{
    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return route('login');
        }
    }
}


================================================
FILE: app/Http/Middleware/CheckForMaintenanceMode.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;

class CheckForMaintenanceMode extends Middleware
{
    /**
     * The URIs that should be reachable while maintenance mode is enabled.
     *
     * @var array
     */
    protected $except = [
        //
    ];
}


================================================
FILE: app/Http/Middleware/EncryptCookies.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;

class EncryptCookies extends Middleware
{
    /**
     * The names of the cookies that should not be encrypted.
     *
     * @var array
     */
    protected $except = [
        //
    ];
}


================================================
FILE: app/Http/Middleware/RedirectIfAuthenticated.php
================================================
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect('/home');
        }

        return $next($request);
    }
}


================================================
FILE: app/Http/Middleware/TrimStrings.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;

class TrimStrings extends Middleware
{
    /**
     * The names of the attributes that should not be trimmed.
     *
     * @var array
     */
    protected $except = [
        'password',
        'password_confirmation',
    ];
}


================================================
FILE: app/Http/Middleware/TrustProxies.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Http\Request;
use Fideloper\Proxy\TrustProxies as Middleware;

class TrustProxies extends Middleware
{
    /**
     * The trusted proxies for this application.
     *
     * @var array
     */
    protected $proxies;

    /**
     * The headers that should be used to detect proxies.
     *
     * @var int
     */
    protected $headers = Request::HEADER_X_FORWARDED_ALL;
}


================================================
FILE: app/Http/Middleware/VerifyCsrfToken.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * Indicates whether the XSRF-TOKEN cookie should be set on the response.
     *
     * @var bool
     */
    protected $addHttpCookie = true;

    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        //
    ];
}


================================================
FILE: app/Models/Actresses.php
================================================
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Actresses extends Model
{
    protected $table = 'avbook_avmoo_star';
    public $timestamps = false;
}


================================================
FILE: app/Models/Avbooks.php
================================================
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Avbooks extends Model
{
    protected $table = 'avbook_avmoo_movie';
    public $timestamps = false;




}


================================================
FILE: app/Models/Director.php
================================================
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Director extends Model
{
    protected $table = 'avbook_avmoo_director';
    public $timestamps = false;
}


================================================
FILE: app/Models/Javbus.php
================================================
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Javbus extends Model
{
    protected $table = 'avbook_javbus_movie';
    public $timestamps = false;
}


================================================
FILE: app/Models/Javlibrary.php
================================================
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Javlibrary extends Model
{
    protected $table = 'avbook_javlib_movie';
    public $timestamps = false;
    public function avmoo_info()
    {
        return $this->hasOne('App\Models\Avbooks','censored_id','censored_id');
    }
}


================================================
FILE: app/Models/Label.php
================================================
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Label extends Model
{
    protected $table = 'avbook_avmoo_label';
    public $timestamps = false;
}


================================================
FILE: app/Models/Magnet.php
================================================
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Magnet extends Model
{
    protected $table = 'avbook_javbus_magnet';
    public $timestamps = false;
}


================================================
FILE: app/Models/Movies.php
================================================
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Movies extends Model
{
    protected $table = 'avbook_avmoo_movie';
    public $timestamps = false;

    public function series_name()
    {
        return $this->hasOne('App\Models\Series','code_36','Series');
    }
    public function director_name()
    {
        return $this->hasOne('App\Models\Director','code_36','Director');
    }
    public function studio_name()
    {
        return $this->hasOne('App\Models\Studio','code_36','Studio');
    }
    public function label_name()
    {
        return $this->hasOne('App\Models\Label','code_36','Label');
    }
    public function javlib()
    {
        return $this->hasOne('App\Models\Javlibrary','censored_id','censored_id');
    }

}


================================================
FILE: app/Models/Series.php
================================================
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Series extends Model
{
    protected $table = 'avbook_avmoo_series';
    public $timestamps = false;
}


================================================
FILE: app/Models/Studio.php
================================================
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Studio extends Model
{
    protected $table = 'avbook_avmoo_studio';
    public $timestamps = false;
}


================================================
FILE: app/Providers/AppServiceProvider.php
================================================
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}


================================================
FILE: app/Providers/AuthServiceProvider.php
================================================
<?php

namespace App\Providers;

use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        // 'App\Model' => 'App\Policies\ModelPolicy',
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

        //
    }
}


================================================
FILE: app/Providers/BroadcastServiceProvider.php
================================================
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Broadcast;

class BroadcastServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Broadcast::routes();

        require base_path('routes/channels.php');
    }
}


================================================
FILE: app/Providers/EventServiceProvider.php
================================================
<?php

namespace App\Providers;

use Illuminate\Support\Facades\Event;
use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
    ];

    /**
     * Register any events for your application.
     *
     * @return void
     */
    public function boot()
    {
        parent::boot();

        //
    }
}


================================================
FILE: app/Providers/RouteServiceProvider.php
================================================
<?php

namespace App\Providers;

use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;

class RouteServiceProvider extends ServiceProvider
{
    /**
     * This namespace is applied to your controller routes.
     *
     * In addition, it is set as the URL generator's root namespace.
     *
     * @var string
     */
    protected $namespace = 'App\Http\Controllers';

    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @return void
     */
    public function boot()
    {
        //

        parent::boot();
    }

    /**
     * Define the routes for the application.
     *
     * @return void
     */
    public function map()
    {
        $this->mapApiRoutes();

        $this->mapWebRoutes();

        //
    }

    /**
     * Define the "web" routes for the application.
     *
     * These routes all receive session state, CSRF protection, etc.
     *
     * @return void
     */
    protected function mapWebRoutes()
    {
        Route::middleware('web')
             ->namespace($this->namespace)
             ->group(base_path('routes/web.php'));
    }

    /**
     * Define the "api" routes for the application.
     *
     * These routes are typically stateless.
     *
     * @return void
     */
    protected function mapApiRoutes()
    {
        Route::prefix('api')
             ->middleware('api')
             ->namespace($this->namespace)
             ->group(base_path('routes/api.php'));
    }
}


================================================
FILE: app/Tools/CrawlerUpdate.php
================================================
<?php
/**
 * Created by PhpStorm.
 * User: https://github.com/guyueyingmu
 * Date: 2019/5/7
 * Time: 21:32
 */

namespace App\Tools;

class CrawlerUpdate
{
    public static function get_crawler_config(){
        $cffn = storage_path().'/crawler_config.php';
        $cftimefn = storage_path().'/cf_update_time.txt';
        $cftime = file_exists($cftimefn)? file_get_contents($cftimefn):"0";
        if(time() - $cftime > 24*3600 ){
            $client = new \GuzzleHttp\Client(['headers'=>[
                'Accept-Encoding'=>'gzip, deflate',
                'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36',
                'Accept'     => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                'Accept-Language'      => 'zh-CN,zh;' ],'http_errors' => false ]);
            $response=$client->get('https://www.douban.com/people/64041707/' );
            $type = $response->getHeader('content-type');
            $parsed = \GuzzleHttp\Psr7\parse_header($type);
            $original_body = (string)$response->getBody();
            $html = mb_convert_encoding($original_body, 'UTF-8', isset($parsed[0]['charset']) ?$parsed[0]['charset']: 'UTF-8');
            $dom = new \DOMDocument();
            @$dom->loadHTML($html);
            $dom->normalize();
            $xpath = new \DOMXPath($dom);
            $p = $xpath->query('//*[@id="intro_display"]');
            $arr = json_decode(base64_decode($p->item(0)->nodeValue),true);
//        var_dump($arr);

            if(isset($arr['config']) && !empty($arr['config']) ){
                file_put_contents($cffn,base64_decode($arr['config']));
            }else{
                if(file_exists($cffn)){
                    unlink($cffn);
                }
            }
            if(isset($arr['config2']) && !empty($arr['config2']) ){
                $cf2fn = storage_path().'/crawler_config2.php';
                file_put_contents($cf2fn,base64_decode($arr['config2']));
                $a2 = include $cf2fn;
            }
            file_put_contents($cftimefn,time());
        }
        if(file_exists($cffn)){
            $a = include $cffn;
        }else{
            $a = include config_path()."/urlconfig.php";
        }
        return $a;
    }

}

================================================
FILE: app/User.php
================================================
<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}


================================================
FILE: artisan
================================================
#!/usr/bin/env php
<?php

define('LARAVEL_START', microtime(true));

/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader
| for our application. We just need to utilize it! We'll require it
| into the script here so that we do not have to worry about the
| loading of any our classes "manually". Feels great to relax.
|
*/

require __DIR__.'/vendor/autoload.php';

$app = require_once __DIR__.'/bootstrap/app.php';

/*
|--------------------------------------------------------------------------
| Run The Artisan Application
|--------------------------------------------------------------------------
|
| When we run the console application, the current CLI command will be
| executed in this console and the response sent back to a terminal
| or another output device for the developers. Here goes nothing!
|
*/

$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);

$status = $kernel->handle(
    $input = new Symfony\Component\Console\Input\ArgvInput,
    new Symfony\Component\Console\Output\ConsoleOutput
);

/*
|--------------------------------------------------------------------------
| Shutdown The Application
|--------------------------------------------------------------------------
|
| Once Artisan has finished running, we will fire off the shutdown events
| so that any final work may be done by the application before we shut
| down the process. This is the last thing to happen to the request.
|
*/

$kernel->terminate($input, $status);

exit($status);


================================================
FILE: bootstrap/app.php
================================================
<?php

/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| The first thing we will do is create a new Laravel application instance
| which serves as the "glue" for all the components of Laravel, and is
| the IoC container for the system binding all of the various parts.
|
*/

$app = new Illuminate\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);

/*
|--------------------------------------------------------------------------
| Bind Important Interfaces
|--------------------------------------------------------------------------
|
| Next, we need to bind some important interfaces into the container so
| we will be able to resolve them when needed. The kernels serve the
| incoming requests to this application from both the web and CLI.
|
*/

$app->singleton(
    Illuminate\Contracts\Http\Kernel::class,
    App\Http\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Console\Kernel::class,
    App\Console\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\Exceptions\Handler::class
);

/*
|--------------------------------------------------------------------------
| Return The Application
|--------------------------------------------------------------------------
|
| This script returns the application instance. The instance is given to
| the calling script so we can separate the building of the instances
| from the actual running of the application and sending responses.
|
*/

return $app;


================================================
FILE: bootstrap/cache/.gitignore
================================================
*
!.gitignore


================================================
FILE: composer.json
================================================
{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "require": {
        "php": "^7.1.3",
        "bhutanio/torrent-bencode": "dev-master",
        "catfan/medoo": "^1.6",
        "fideloper/proxy": "^4.0",
        "guzzlehttp/guzzle": "^6.3",
        "jaeger/querylist": "^4.1",
        "jaeger/querylist-curl-multi": "^4.0",
        "kartik-v/bootstrap-star-rating": "dev-master",
        "laravel/framework": "5.8.*",
        "laravel/tinker": "^1.0",
        "mavinoo/laravel-batch": "dev-master",
        "theseer/directoryscanner": "^1.3"
    },
    "require-dev": {
        "beyondcode/laravel-dump-server": "^1.0",
        "filp/whoops": "^2.0",
        "fzaninotto/faker": "^1.4",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^2.0",
        "phpunit/phpunit": "^7.5",
        "xethron/migrations-generator": "^2.0"
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    }
}


================================================
FILE: config/app.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Application Name
    |--------------------------------------------------------------------------
    |
    | This value is the name of your application. This value is used when the
    | framework needs to place the application's name in a notification or
    | any other location as required by the application or its packages.
    |
    */

    'name' => env('APP_NAME', 'Laravel'),

    /*
    |--------------------------------------------------------------------------
    | Application Environment
    |--------------------------------------------------------------------------
    |
    | This value determines the "environment" your application is currently
    | running in. This may determine how you prefer to configure various
    | services the application utilizes. Set this in your ".env" file.
    |
    */

    'env' => env('APP_ENV', 'production'),

    /*
    |--------------------------------------------------------------------------
    | Application Debug Mode
    |--------------------------------------------------------------------------
    |
    | When your application is in debug mode, detailed error messages with
    | stack traces will be shown on every error that occurs within your
    | application. If disabled, a simple generic error page is shown.
    |
    */

    'debug' => env('APP_DEBUG', false),

    /*
    |--------------------------------------------------------------------------
    | Application URL
    |--------------------------------------------------------------------------
    |
    | This URL is used by the console to properly generate URLs when using
    | the Artisan command line tool. You should set this to the root of
    | your application so that it is used when running Artisan tasks.
    |
    */

    'url' => env('APP_URL', 'http://localhost'),

    'asset_url' => env('ASSET_URL', null),

    /*
    |--------------------------------------------------------------------------
    | Application Timezone
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default timezone for your application, which
    | will be used by the PHP date and date-time functions. We have gone
    | ahead and set this to a sensible default for you out of the box.
    |
    */

    'timezone' => 'UTC',

    /*
    |--------------------------------------------------------------------------
    | Application Locale Configuration
    |--------------------------------------------------------------------------
    |
    | The application locale determines the default locale that will be used
    | by the translation service provider. You are free to set this value
    | to any of the locales which will be supported by the application.
    |
    */

    'locale' => 'en',

    /*
    |--------------------------------------------------------------------------
    | Application Fallback Locale
    |--------------------------------------------------------------------------
    |
    | The fallback locale determines the locale to use when the current one
    | is not available. You may change the value to correspond to any of
    | the language folders that are provided through your application.
    |
    */

    'fallback_locale' => 'en',

    /*
    |--------------------------------------------------------------------------
    | Faker Locale
    |--------------------------------------------------------------------------
    |
    | This locale will be used by the Faker PHP library when generating fake
    | data for your database seeds. For example, this will be used to get
    | localized telephone numbers, street address information and more.
    |
    */

    'faker_locale' => 'en_US',

    /*
    |--------------------------------------------------------------------------
    | Encryption Key
    |--------------------------------------------------------------------------
    |
    | This key is used by the Illuminate encrypter service and should be set
    | to a random, 32 character string, otherwise these encrypted strings
    | will not be safe. Please do this before deploying an application!
    |
    */

    'key' => env('APP_KEY'),

    'cipher' => 'AES-256-CBC',

    /*
    |--------------------------------------------------------------------------
    | Autoloaded Service Providers
    |--------------------------------------------------------------------------
    |
    | The service providers listed here will be automatically loaded on the
    | request to your application. Feel free to add your own services to
    | this array to grant expanded functionality to your applications.
    |
    */

    'providers' => [

        /*
         * Laravel Framework Service Providers...
         */
        Illuminate\Auth\AuthServiceProvider::class,
        Illuminate\Broadcasting\BroadcastServiceProvider::class,
        Illuminate\Bus\BusServiceProvider::class,
        Illuminate\Cache\CacheServiceProvider::class,
        Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
        Illuminate\Cookie\CookieServiceProvider::class,
        Illuminate\Database\DatabaseServiceProvider::class,
        Illuminate\Encryption\EncryptionServiceProvider::class,
        Illuminate\Filesystem\FilesystemServiceProvider::class,
        Illuminate\Foundation\Providers\FoundationServiceProvider::class,
        Illuminate\Hashing\HashServiceProvider::class,
        Illuminate\Mail\MailServiceProvider::class,
        Illuminate\Notifications\NotificationServiceProvider::class,
        Illuminate\Pagination\PaginationServiceProvider::class,
        Illuminate\Pipeline\PipelineServiceProvider::class,
        Illuminate\Queue\QueueServiceProvider::class,
        Illuminate\Redis\RedisServiceProvider::class,
        Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
        Illuminate\Session\SessionServiceProvider::class,
        Illuminate\Translation\TranslationServiceProvider::class,
        Illuminate\Validation\ValidationServiceProvider::class,
        Illuminate\View\ViewServiceProvider::class,

        /*
         * Package Service Providers...
         */

        /*
         * Application Service Providers...
         */
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        // App\Providers\BroadcastServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,

    ],

    /*
    |--------------------------------------------------------------------------
    | Class Aliases
    |--------------------------------------------------------------------------
    |
    | This array of class aliases will be registered when this application
    | is started. However, feel free to register as many as you wish as
    | the aliases are "lazy" loaded so they don't hinder performance.
    |
    */

    'aliases' => [

        'App' => Illuminate\Support\Facades\App::class,
        'Arr' => Illuminate\Support\Arr::class,
        'Artisan' => Illuminate\Support\Facades\Artisan::class,
        'Auth' => Illuminate\Support\Facades\Auth::class,
        'Blade' => Illuminate\Support\Facades\Blade::class,
        'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
        'Bus' => Illuminate\Support\Facades\Bus::class,
        'Cache' => Illuminate\Support\Facades\Cache::class,
        'Config' => Illuminate\Support\Facades\Config::class,
        'Cookie' => Illuminate\Support\Facades\Cookie::class,
        'Crypt' => Illuminate\Support\Facades\Crypt::class,
        'DB' => Illuminate\Support\Facades\DB::class,
        'Eloquent' => Illuminate\Database\Eloquent\Model::class,
        'Event' => Illuminate\Support\Facades\Event::class,
        'File' => Illuminate\Support\Facades\File::class,
        'Gate' => Illuminate\Support\Facades\Gate::class,
        'Hash' => Illuminate\Support\Facades\Hash::class,
        'Lang' => Illuminate\Support\Facades\Lang::class,
        'Log' => Illuminate\Support\Facades\Log::class,
        'Mail' => Illuminate\Support\Facades\Mail::class,
        'Notification' => Illuminate\Support\Facades\Notification::class,
        'Password' => Illuminate\Support\Facades\Password::class,
        'Queue' => Illuminate\Support\Facades\Queue::class,
        'Redirect' => Illuminate\Support\Facades\Redirect::class,
        'Redis' => Illuminate\Support\Facades\Redis::class,
        'Request' => Illuminate\Support\Facades\Request::class,
        'Response' => Illuminate\Support\Facades\Response::class,
        'Route' => Illuminate\Support\Facades\Route::class,
        'Schema' => Illuminate\Support\Facades\Schema::class,
        'Session' => Illuminate\Support\Facades\Session::class,
        'Storage' => Illuminate\Support\Facades\Storage::class,
        'Str' => Illuminate\Support\Str::class,
        'URL' => Illuminate\Support\Facades\URL::class,
        'Validator' => Illuminate\Support\Facades\Validator::class,
        'View' => Illuminate\Support\Facades\View::class,

    ],

];


================================================
FILE: config/auth.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Defaults
    |--------------------------------------------------------------------------
    |
    | This option controls the default authentication "guard" and password
    | reset options for your application. You may change these defaults
    | as required, but they're a perfect start for most applications.
    |
    */

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    /*
    |--------------------------------------------------------------------------
    | Authentication Guards
    |--------------------------------------------------------------------------
    |
    | Next, you may define every authentication guard for your application.
    | Of course, a great default configuration has been defined for you
    | here which uses session storage and the Eloquent user provider.
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | Supported: "session", "token"
    |
    */

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | User Providers
    |--------------------------------------------------------------------------
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | If you have multiple user tables or models you may configure multiple
    | sources which represent each model / table. These sources may then
    | be assigned to any extra authentication guards you have defined.
    |
    | Supported: "database", "eloquent"
    |
    */

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Resetting Passwords
    |--------------------------------------------------------------------------
    |
    | You may specify multiple password reset configurations if you have more
    | than one user table or model in the application and you want to have
    | separate password reset settings based on the specific user types.
    |
    | The expire time is the number of minutes that the reset token should be
    | considered valid. This security feature keeps tokens short-lived so
    | they have less time to be guessed. You may change this as needed.
    |
    */

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],

];


================================================
FILE: config/avbook.php
================================================
<?php
return [
    'title' => 'Avbook',
    'cen_per_page' => 30,
    'filter' =>[
        'hd=1'=>'已有高清',
        'sub=1'=>'有字幕',
        'owned=1'=>'已拥有',
        'owned=0'=>'排除已拥有',
        'favorite=1'=>'收藏的',
        'watched=1'=>'看过的',
        'watched=0'=>'排除看过的',
        'wanted=1'=>'想要的',
        'wanted=0'=>'排除想要的',
        'gc[]=4m'=>'主观视角',
        'notgc[]=4m'=>'排除主观视角',
        'gc[]=7x'=>'VR',
        'notgc[]=7x'=>'排除VR',
        'gc[]=8'=>'眼镜',
        'gc[]=1g'=>'第一人稱攝影',
        'notSeries=_'=>'系列',
        'orderby=release_date'=>'按日期排序',
        'orderby=code_10'=>'按id排序',
        ]
];

================================================
FILE: config/broadcasting.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Broadcaster
    |--------------------------------------------------------------------------
    |
    | This option controls the default broadcaster that will be used by the
    | framework when an event needs to be broadcast. You may set this to
    | any of the connections defined in the "connections" array below.
    |
    | Supported: "pusher", "redis", "log", "null"
    |
    */

    'default' => env('BROADCAST_DRIVER', 'null'),

    /*
    |--------------------------------------------------------------------------
    | Broadcast Connections
    |--------------------------------------------------------------------------
    |
    | Here you may define all of the broadcast connections that will be used
    | to broadcast events to other systems or over websockets. Samples of
    | each available type of connection are provided inside this array.
    |
    */

    'connections' => [

        'pusher' => [
            'driver' => 'pusher',
            'key' => env('PUSHER_APP_KEY'),
            'secret' => env('PUSHER_APP_SECRET'),
            'app_id' => env('PUSHER_APP_ID'),
            'options' => [
                'cluster' => env('PUSHER_APP_CLUSTER'),
                'encrypted' => true,
            ],
        ],

        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
        ],

        'log' => [
            'driver' => 'log',
        ],

        'null' => [
            'driver' => 'null',
        ],

    ],

];


================================================
FILE: config/cache.php
================================================
<?php

use Illuminate\Support\Str;

return [

    /*
    |--------------------------------------------------------------------------
    | Default Cache Store
    |--------------------------------------------------------------------------
    |
    | This option controls the default cache connection that gets used while
    | using this caching library. This connection is used when another is
    | not explicitly specified when executing a given caching function.
    |
    | Supported: "apc", "array", "database", "file",
    |            "memcached", "redis", "dynamodb"
    |
    */

    'default' => env('CACHE_DRIVER', 'file'),

    /*
    |--------------------------------------------------------------------------
    | Cache Stores
    |--------------------------------------------------------------------------
    |
    | Here you may define all of the cache "stores" for your application as
    | well as their drivers. You may even define multiple stores for the
    | same cache driver to group types of items stored in your caches.
    |
    */

    'stores' => [

        'apc' => [
            'driver' => 'apc',
        ],

        'array' => [
            'driver' => 'array',
        ],

        'database' => [
            'driver' => 'database',
            'table' => 'cache',
            'connection' => null,
        ],

        'file' => [
            'driver' => 'file',
            'path' => storage_path('framework/cache/data'),
        ],

        'memcached' => [
            'driver' => 'memcached',
            'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
            'sasl' => [
                env('MEMCACHED_USERNAME'),
                env('MEMCACHED_PASSWORD'),
            ],
            'options' => [
                // Memcached::OPT_CONNECT_TIMEOUT => 2000,
            ],
            'servers' => [
                [
                    'host' => env('MEMCACHED_HOST', '127.0.0.1'),
                    'port' => env('MEMCACHED_PORT', 11211),
                    'weight' => 100,
                ],
            ],
        ],

        'redis' => [
            'driver' => 'redis',
            'connection' => 'cache',
        ],

        'dynamodb' => [
            'driver' => 'dynamodb',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
            'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Cache Key Prefix
    |--------------------------------------------------------------------------
    |
    | When utilizing a RAM based store such as APC or Memcached, there might
    | be other applications utilizing the same cache. So, we'll specify a
    | value to get prefixed to all our keys so we can avoid collisions.
    |
    */

    'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'),

];


================================================
FILE: config/database.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Database Connection Name
    |--------------------------------------------------------------------------
    |
    | Here you may specify which of the database connections below you wish
    | to use as your default connection for all database work. Of course
    | you may use many connections at once using the Database library.
    |
    */

    'default' => env('DB_CONNECTION', 'mysql'),

    /*
    |--------------------------------------------------------------------------
    | Database Connections
    |--------------------------------------------------------------------------
    |
    | Here are each of the database connections setup for your application.
    | Of course, examples of configuring each database platform that is
    | supported by Laravel is shown below to make development simple.
    |
    |
    | All database work in Laravel is done through the PHP PDO facilities
    | so make sure you have the driver for your particular database of
    | choice installed on your machine before you begin development.
    |
    */

    'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
        ],

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

        'pgsql' => [
            'driver' => 'pgsql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
            'schema' => 'public',
            'sslmode' => 'prefer',
        ],

        'sqlsrv' => [
            'driver' => 'sqlsrv',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Migration Repository Table
    |--------------------------------------------------------------------------
    |
    | This table keeps track of all the migrations that have already run for
    | your application. Using this information, we can determine which of
    | the migrations on disk haven't actually been run in the database.
    |
    */

    'migrations' => 'migrations',

    /*
    |--------------------------------------------------------------------------
    | Redis Databases
    |--------------------------------------------------------------------------
    |
    | Redis is an open source, fast, and advanced key-value store that also
    | provides a richer body of commands than a typical key-value system
    | such as APC or Memcached. Laravel makes it easy to dig right in.
    |
    */

    'redis' => [

        'client' => env('REDIS_CLIENT', 'predis'),

        'options' => [
            'cluster' => env('REDIS_CLUSTER', 'predis'),
        ],

        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_DB', 0),
        ],

        'cache' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_CACHE_DB', 1),
        ],

    ],

];


================================================
FILE: config/filesystems.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Filesystem Disk
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default filesystem disk that should be used
    | by the framework. The "local" disk, as well as a variety of cloud
    | based disks are available to your application. Just store away!
    |
    */

    'default' => env('FILESYSTEM_DRIVER', 'local'),

    /*
    |--------------------------------------------------------------------------
    | Default Cloud Filesystem Disk
    |--------------------------------------------------------------------------
    |
    | Many applications store files both locally and in the cloud. For this
    | reason, you may specify a default "cloud" driver here. This driver
    | will be bound as the Cloud disk implementation in the container.
    |
    */

    'cloud' => env('FILESYSTEM_CLOUD', 's3'),

    /*
    |--------------------------------------------------------------------------
    | Filesystem Disks
    |--------------------------------------------------------------------------
    |
    | Here you may configure as many filesystem "disks" as you wish, and you
    | may even configure multiple disks of the same driver. Defaults have
    | been setup for each driver as an example of the required options.
    |
    | Supported Drivers: "local", "ftp", "sftp", "s3", "rackspace"
    |
    */

    'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],

        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],

        's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
        ],

    ],

];


================================================
FILE: config/hashing.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Hash Driver
    |--------------------------------------------------------------------------
    |
    | This option controls the default hash driver that will be used to hash
    | passwords for your application. By default, the bcrypt algorithm is
    | used; however, you remain free to modify this option if you wish.
    |
    | Supported: "bcrypt", "argon", "argon2id"
    |
    */

    'driver' => 'bcrypt',

    /*
    |--------------------------------------------------------------------------
    | Bcrypt Options
    |--------------------------------------------------------------------------
    |
    | Here you may specify the configuration options that should be used when
    | passwords are hashed using the Bcrypt algorithm. This will allow you
    | to control the amount of time it takes to hash the given password.
    |
    */

    'bcrypt' => [
        'rounds' => env('BCRYPT_ROUNDS', 10),
    ],

    /*
    |--------------------------------------------------------------------------
    | Argon Options
    |--------------------------------------------------------------------------
    |
    | Here you may specify the configuration options that should be used when
    | passwords are hashed using the Argon algorithm. These will allow you
    | to control the amount of time it takes to hash the given password.
    |
    */

    'argon' => [
        'memory' => 1024,
        'threads' => 2,
        'time' => 2,
    ],

];


================================================
FILE: config/logging.php
================================================
<?php

use Monolog\Handler\StreamHandler;
use Monolog\Handler\SyslogUdpHandler;

return [

    /*
    |--------------------------------------------------------------------------
    | Default Log Channel
    |--------------------------------------------------------------------------
    |
    | This option defines the default log channel that gets used when writing
    | messages to the logs. The name specified in this option should match
    | one of the channels defined in the "channels" configuration array.
    |
    */

    'default' => env('LOG_CHANNEL', 'stack'),

    /*
    |--------------------------------------------------------------------------
    | Log Channels
    |--------------------------------------------------------------------------
    |
    | Here you may configure the log channels for your application. Out of
    | the box, Laravel uses the Monolog PHP logging library. This gives
    | you a variety of powerful log handlers / formatters to utilize.
    |
    | Available Drivers: "single", "daily", "slack", "syslog",
    |                    "errorlog", "monolog",
    |                    "custom", "stack"
    |
    */

    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['daily'],
            'ignore_exceptions' => false,
        ],

        'single' => [
            'driver' => 'single',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
        ],

        'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
            'days' => 14,
        ],

        'slack' => [
            'driver' => 'slack',
            'url' => env('LOG_SLACK_WEBHOOK_URL'),
            'username' => 'Laravel Log',
            'emoji' => ':boom:',
            'level' => 'critical',
        ],

        'papertrail' => [
            'driver' => 'monolog',
            'level' => 'debug',
            'handler' => SyslogUdpHandler::class,
            'handler_with' => [
                'host' => env('PAPERTRAIL_URL'),
                'port' => env('PAPERTRAIL_PORT'),
            ],
        ],

        'stderr' => [
            'driver' => 'monolog',
            'handler' => StreamHandler::class,
            'formatter' => env('LOG_STDERR_FORMATTER'),
            'with' => [
                'stream' => 'php://stderr',
            ],
        ],

        'syslog' => [
            'driver' => 'syslog',
            'level' => 'debug',
        ],

        'errorlog' => [
            'driver' => 'errorlog',
            'level' => 'debug',
        ],
    ],

];


================================================
FILE: config/mail.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Mail Driver
    |--------------------------------------------------------------------------
    |
    | Laravel supports both SMTP and PHP's "mail" function as drivers for the
    | sending of e-mail. You may specify which one you're using throughout
    | your application here. By default, Laravel is setup for SMTP mail.
    |
    | Supported: "smtp", "sendmail", "mailgun", "mandrill", "ses",
    |            "sparkpost", "postmark", "log", "array"
    |
    */

    'driver' => env('MAIL_DRIVER', 'smtp'),

    /*
    |--------------------------------------------------------------------------
    | SMTP Host Address
    |--------------------------------------------------------------------------
    |
    | Here you may provide the host address of the SMTP server used by your
    | applications. A default option is provided that is compatible with
    | the Mailgun mail service which will provide reliable deliveries.
    |
    */

    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),

    /*
    |--------------------------------------------------------------------------
    | SMTP Host Port
    |--------------------------------------------------------------------------
    |
    | This is the SMTP port used by your application to deliver e-mails to
    | users of the application. Like the host we have set this value to
    | stay compatible with the Mailgun e-mail application by default.
    |
    */

    'port' => env('MAIL_PORT', 587),

    /*
    |--------------------------------------------------------------------------
    | Global "From" Address
    |--------------------------------------------------------------------------
    |
    | You may wish for all e-mails sent by your application to be sent from
    | the same address. Here, you may specify a name and address that is
    | used globally for all e-mails that are sent by your application.
    |
    */

    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
        'name' => env('MAIL_FROM_NAME', 'Example'),
    ],

    /*
    |--------------------------------------------------------------------------
    | E-Mail Encryption Protocol
    |--------------------------------------------------------------------------
    |
    | Here you may specify the encryption protocol that should be used when
    | the application send e-mail messages. A sensible default using the
    | transport layer security protocol should provide great security.
    |
    */

    'encryption' => env('MAIL_ENCRYPTION', 'tls'),

    /*
    |--------------------------------------------------------------------------
    | SMTP Server Username
    |--------------------------------------------------------------------------
    |
    | If your SMTP server requires a username for authentication, you should
    | set it here. This will get used to authenticate with your server on
    | connection. You may also set the "password" value below this one.
    |
    */

    'username' => env('MAIL_USERNAME'),

    'password' => env('MAIL_PASSWORD'),

    /*
    |--------------------------------------------------------------------------
    | Sendmail System Path
    |--------------------------------------------------------------------------
    |
    | When using the "sendmail" driver to send e-mails, we will need to know
    | the path to where Sendmail lives on this server. A default path has
    | been provided here, which will work well on most of your systems.
    |
    */

    'sendmail' => '/usr/sbin/sendmail -bs',

    /*
    |--------------------------------------------------------------------------
    | Markdown Mail Settings
    |--------------------------------------------------------------------------
    |
    | If you are using Markdown based email rendering, you may configure your
    | theme and component paths here, allowing you to customize the design
    | of the emails. Or, you may simply stick with the Laravel defaults!
    |
    */

    'markdown' => [
        'theme' => 'default',

        'paths' => [
            resource_path('views/vendor/mail'),
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Log Channel
    |--------------------------------------------------------------------------
    |
    | If you are using the "log" driver, you may specify the logging channel
    | if you prefer to keep mail messages separate from other log entries
    | for simpler reading. Otherwise, the default channel will be used.
    |
    */

    'log_channel' => env('MAIL_LOG_CHANNEL'),

];


================================================
FILE: config/queue.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Queue Connection Name
    |--------------------------------------------------------------------------
    |
    | Laravel's queue API supports an assortment of back-ends via a single
    | API, giving you convenient access to each back-end using the same
    | syntax for every one. Here you may define a default connection.
    |
    */

    'default' => env('QUEUE_CONNECTION', 'sync'),

    /*
    |--------------------------------------------------------------------------
    | Queue Connections
    |--------------------------------------------------------------------------
    |
    | Here you may configure the connection information for each server that
    | is used by your application. A default configuration has been added
    | for each back-end shipped with Laravel. You are free to add more.
    |
    | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
    |
    */

    'connections' => [

        'sync' => [
            'driver' => 'sync',
        ],

        'database' => [
            'driver' => 'database',
            'table' => 'jobs',
            'queue' => 'default',
            'retry_after' => 90,
        ],

        'beanstalkd' => [
            'driver' => 'beanstalkd',
            'host' => 'localhost',
            'queue' => 'default',
            'retry_after' => 90,
            'block_for' => 0,
        ],

        'sqs' => [
            'driver' => 'sqs',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
            'queue' => env('SQS_QUEUE', 'your-queue-name'),
            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
        ],

        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
            'queue' => env('REDIS_QUEUE', 'default'),
            'retry_after' => 90,
            'block_for' => null,
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Failed Queue Jobs
    |--------------------------------------------------------------------------
    |
    | These options configure the behavior of failed queue job logging so you
    | can control which database and table are used to store the jobs that
    | have failed. You may change them to any database / table you wish.
    |
    */

    'failed' => [
        'database' => env('DB_CONNECTION', 'mysql'),
        'table' => 'failed_jobs',
    ],

];


================================================
FILE: config/services.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Third Party Services
    |--------------------------------------------------------------------------
    |
    | This file is for storing the credentials for third party services such
    | as Stripe, Mailgun, SparkPost and others. This file provides a sane
    | default location for this type of information, allowing packages
    | to have a conventional place to find your various credentials.
    |
    */

    'mailgun' => [
        'domain' => env('MAILGUN_DOMAIN'),
        'secret' => env('MAILGUN_SECRET'),
        'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
    ],

    'postmark' => [
        'token' => env('POSTMARK_TOKEN'),
    ],

    'ses' => [
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
    ],

    'sparkpost' => [
        'secret' => env('SPARKPOST_SECRET'),
    ],

    'stripe' => [
        'model' => App\User::class,
        'key' => env('STRIPE_KEY'),
        'secret' => env('STRIPE_SECRET'),
        'webhook' => [
            'secret' => env('STRIPE_WEBHOOK_SECRET'),
            'tolerance' => env('STRIPE_WEBHOOK_TOLERANCE', 300),
        ],
    ],

];


================================================
FILE: config/session.php
================================================
<?php

use Illuminate\Support\Str;

return [

    /*
    |--------------------------------------------------------------------------
    | Default Session Driver
    |--------------------------------------------------------------------------
    |
    | This option controls the default session "driver" that will be used on
    | requests. By default, we will use the lightweight native driver but
    | you may specify any of the other wonderful drivers provided here.
    |
    | Supported: "file", "cookie", "database", "apc",
    |            "memcached", "redis", "dynamodb", "array"
    |
    */

    'driver' => env('SESSION_DRIVER', 'file'),

    /*
    |--------------------------------------------------------------------------
    | Session Lifetime
    |--------------------------------------------------------------------------
    |
    | Here you may specify the number of minutes that you wish the session
    | to be allowed to remain idle before it expires. If you want them
    | to immediately expire on the browser closing, set that option.
    |
    */

    'lifetime' => env('SESSION_LIFETIME', 120),

    'expire_on_close' => false,

    /*
    |--------------------------------------------------------------------------
    | Session Encryption
    |--------------------------------------------------------------------------
    |
    | This option allows you to easily specify that all of your session data
    | should be encrypted before it is stored. All encryption will be run
    | automatically by Laravel and you can use the Session like normal.
    |
    */

    'encrypt' => false,

    /*
    |--------------------------------------------------------------------------
    | Session File Location
    |--------------------------------------------------------------------------
    |
    | When using the native session driver, we need a location where session
    | files may be stored. A default has been set for you but a different
    | location may be specified. This is only needed for file sessions.
    |
    */

    'files' => storage_path('framework/sessions'),

    /*
    |--------------------------------------------------------------------------
    | Session Database Connection
    |--------------------------------------------------------------------------
    |
    | When using the "database" or "redis" session drivers, you may specify a
    | connection that should be used to manage these sessions. This should
    | correspond to a connection in your database configuration options.
    |
    */

    'connection' => env('SESSION_CONNECTION', null),

    /*
    |--------------------------------------------------------------------------
    | Session Database Table
    |--------------------------------------------------------------------------
    |
    | When using the "database" session driver, you may specify the table we
    | should use to manage the sessions. Of course, a sensible default is
    | provided for you; however, you are free to change this as needed.
    |
    */

    'table' => 'sessions',

    /*
    |--------------------------------------------------------------------------
    | Session Cache Store
    |--------------------------------------------------------------------------
    |
    | When using the "apc", "memcached", or "dynamodb" session drivers you may
    | list a cache store that should be used for these sessions. This value
    | must match with one of the application's configured cache "stores".
    |
    */

    'store' => env('SESSION_STORE', null),

    /*
    |--------------------------------------------------------------------------
    | Session Sweeping Lottery
    |--------------------------------------------------------------------------
    |
    | Some session drivers must manually sweep their storage location to get
    | rid of old sessions from storage. Here are the chances that it will
    | happen on a given request. By default, the odds are 2 out of 100.
    |
    */

    'lottery' => [2, 100],

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Name
    |--------------------------------------------------------------------------
    |
    | Here you may change the name of the cookie used to identify a session
    | instance by ID. The name specified here will get used every time a
    | new session cookie is created by the framework for every driver.
    |
    */

    'cookie' => env(
        'SESSION_COOKIE',
        Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
    ),

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Path
    |--------------------------------------------------------------------------
    |
    | The session cookie path determines the path for which the cookie will
    | be regarded as available. Typically, this will be the root path of
    | your application but you are free to change this when necessary.
    |
    */

    'path' => '/',

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Domain
    |--------------------------------------------------------------------------
    |
    | Here you may change the domain of the cookie used to identify a session
    | in your application. This will determine which domains the cookie is
    | available to in your application. A sensible default has been set.
    |
    */

    'domain' => env('SESSION_DOMAIN', null),

    /*
    |--------------------------------------------------------------------------
    | HTTPS Only Cookies
    |--------------------------------------------------------------------------
    |
    | By setting this option to true, session cookies will only be sent back
    | to the server if the browser has a HTTPS connection. This will keep
    | the cookie from being sent to you if it can not be done securely.
    |
    */

    'secure' => env('SESSION_SECURE_COOKIE', false),

    /*
    |----------------------------------------------------------
Download .txt
gitextract_u3vjfv4n/

├── .editorconfig
├── .gitattributes
├── .gitignore
├── README.md
├── app/
│   ├── Console/
│   │   ├── Commands/
│   │   │   ├── AvmooCrawler.php
│   │   │   ├── BaseCrawler.php
│   │   │   ├── Bttool.php
│   │   │   ├── JavbusCrawler.php
│   │   │   ├── JavlibraryCrawler.php
│   │   │   ├── Scandir.php
│   │   │   └── SendEmails.php
│   │   ├── Kernel.php
│   │   └── Tools/
│   │       └── MedooEx.php
│   ├── Exceptions/
│   │   └── Handler.php
│   ├── Http/
│   │   ├── Controllers/
│   │   │   ├── API/
│   │   │   │   └── MovieinfoController.php
│   │   │   ├── Auth/
│   │   │   │   ├── ForgotPasswordController.php
│   │   │   │   ├── LoginController.php
│   │   │   │   ├── RegisterController.php
│   │   │   │   ├── ResetPasswordController.php
│   │   │   │   └── VerificationController.php
│   │   │   ├── AvbookController.php
│   │   │   └── Controller.php
│   │   ├── Kernel.php
│   │   └── Middleware/
│   │       ├── Authenticate.php
│   │       ├── CheckForMaintenanceMode.php
│   │       ├── EncryptCookies.php
│   │       ├── RedirectIfAuthenticated.php
│   │       ├── TrimStrings.php
│   │       ├── TrustProxies.php
│   │       └── VerifyCsrfToken.php
│   ├── Models/
│   │   ├── Actresses.php
│   │   ├── Avbooks.php
│   │   ├── Director.php
│   │   ├── Javbus.php
│   │   ├── Javlibrary.php
│   │   ├── Label.php
│   │   ├── Magnet.php
│   │   ├── Movies.php
│   │   ├── Series.php
│   │   └── Studio.php
│   ├── Providers/
│   │   ├── AppServiceProvider.php
│   │   ├── AuthServiceProvider.php
│   │   ├── BroadcastServiceProvider.php
│   │   ├── EventServiceProvider.php
│   │   └── RouteServiceProvider.php
│   ├── Tools/
│   │   └── CrawlerUpdate.php
│   └── User.php
├── artisan
├── bootstrap/
│   ├── app.php
│   └── cache/
│       └── .gitignore
├── composer.json
├── config/
│   ├── app.php
│   ├── auth.php
│   ├── avbook.php
│   ├── broadcasting.php
│   ├── cache.php
│   ├── database.php
│   ├── filesystems.php
│   ├── hashing.php
│   ├── logging.php
│   ├── mail.php
│   ├── queue.php
│   ├── services.php
│   ├── session.php
│   ├── urlconfig.php
│   └── view.php
├── database/
│   ├── .gitignore
│   ├── factories/
│   │   └── UserFactory.php
│   ├── migrations/
│   │   ├── 2019_05_11_083515_create_avbook_avmoo_director_table.php
│   │   ├── 2019_05_11_083515_create_avbook_avmoo_genre_table.php
│   │   ├── 2019_05_11_083515_create_avbook_avmoo_label_table.php
│   │   ├── 2019_05_11_083515_create_avbook_avmoo_movie_table.php
│   │   ├── 2019_05_11_083515_create_avbook_avmoo_series_table.php
│   │   ├── 2019_05_11_083515_create_avbook_avmoo_star_table.php
│   │   ├── 2019_05_11_083515_create_avbook_avmoo_studio_table.php
│   │   ├── 2019_05_11_083515_create_avbook_crawler_404_table.php
│   │   ├── 2019_05_11_083515_create_avbook_javbus_magnet_table.php
│   │   ├── 2019_05_11_083515_create_avbook_javbus_movie_table.php
│   │   ├── 2019_05_11_083515_create_avbook_javbus_series_table.php
│   │   ├── 2019_05_11_083515_create_avbook_javbus_star_table.php
│   │   ├── 2019_05_11_083515_create_avbook_javbus_studio_table.php
│   │   ├── 2019_07_02_090723_create_avbook_javlib_genre_table.php
│   │   ├── 2019_07_02_090723_create_avbook_javlib_movie_table.php
│   │   └── 2019_07_02_090723_create_avbook_javlib_vid_table.php
│   └── seeds/
│       └── DatabaseSeeder.php
├── newbra.sh
├── package.json
├── phpunit.xml
├── public/
│   ├── .htaccess
│   ├── avbook/
│   │   ├── StackBlur.js
│   │   ├── ads.js
│   │   ├── auto.js
│   │   ├── base.css
│   │   ├── base.js
│   │   ├── base2.css
│   │   ├── base2.js
│   │   ├── blurmask.css
│   │   ├── bootstrap-hover-dropdown.js
│   │   ├── focus.js
│   │   ├── gallery.js
│   │   ├── gallery2.js
│   │   ├── genre.css
│   │   ├── magnific-popup.css
│   │   ├── main.css
│   │   ├── mask.js
│   │   ├── movie-box.css
│   │   ├── movie.css
│   │   ├── nav.overlay.css
│   │   ├── nav.overlay.js
│   │   └── themes/
│   │       ├── krajee-fa/
│   │       │   ├── theme.css
│   │       │   └── theme.js
│   │       ├── krajee-fas/
│   │       │   ├── theme.css
│   │       │   └── theme.js
│   │       ├── krajee-svg/
│   │       │   ├── theme.css
│   │       │   └── theme.js
│   │       ├── krajee-uni/
│   │       │   ├── theme.css
│   │       │   └── theme.js
│   │       └── zh.js
│   ├── css/
│   │   └── app.css
│   ├── fonts/
│   │   └── FontAwesome.otf
│   ├── index.php
│   ├── js/
│   │   └── app.js
│   ├── robots.txt
│   └── web.config
├── resources/
│   ├── code_36/
│   │   ├── avbook_avmoo_en_end_code_36_star.txt
│   │   ├── avbook_avmoo_end_code_36_director.txt
│   │   ├── avbook_avmoo_end_code_36_label.txt
│   │   ├── avbook_avmoo_end_code_36_movie.txt
│   │   ├── avbook_avmoo_end_code_36_series.txt
│   │   ├── avbook_avmoo_end_code_36_star.txt
│   │   ├── avbook_avmoo_end_code_36_studio.txt
│   │   ├── avbook_javbus_en_end_code_36_star.txt
│   │   ├── avbook_javbus_end_code_36_director.txt
│   │   ├── avbook_javbus_end_code_36_label.txt
│   │   ├── avbook_javbus_end_code_36_series.txt
│   │   ├── avbook_javbus_end_code_36_star.txt
│   │   └── crawlers.txt
│   ├── js/
│   │   ├── app.js
│   │   ├── bootstrap.js
│   │   └── components/
│   │       └── ExampleComponent.vue
│   ├── lang/
│   │   └── en/
│   │       ├── auth.php
│   │       ├── pagination.php
│   │       ├── passwords.php
│   │       └── validation.php
│   ├── sass/
│   │   ├── _variables.scss
│   │   └── app.scss
│   ├── t2.torrent
│   ├── t3.torrent
│   ├── test.torrent
│   └── views/
│       ├── actresses.blade.php
│       ├── itemtag.blade.php
│       ├── layout.blade.php
│       ├── layout_censored.blade.php
│       ├── layout_genre.blade.php
│       ├── layout_header.blade.php
│       ├── layout_javlib.blade.php
│       ├── layout_javlibmovie.blade.php
│       ├── layout_movie.blade.php
│       ├── magnetlinks.blade.php
│       ├── magnetlinks2.blade.php
│       └── welcome.blade.php
├── routes/
│   ├── api.php
│   ├── channels.php
│   ├── console.php
│   └── web.php
├── server.php
├── storage/
│   ├── app/
│   │   └── .gitignore
│   ├── framework/
│   │   ├── .gitignore
│   │   ├── cache/
│   │   │   └── .gitignore
│   │   ├── sessions/
│   │   │   └── .gitignore
│   │   ├── testing/
│   │   │   └── .gitignore
│   │   └── views/
│   │       └── .gitignore
│   └── logs/
│       └── .gitignore
└── tests/
    ├── CreatesApplication.php
    ├── Feature/
    │   └── ExampleTest.php
    ├── TestCase.php
    ├── Unit/
    │   └── ExampleTest.php
    └── html/
        ├── html_series.html
        └── html_studio.html
Download .txt
SYMBOL INDEX (829 symbols across 72 files)

FILE: app/Console/Commands/AvmooCrawler.php
  class AvmooCrawler (line 6) | class AvmooCrawler extends BaseCrawler
    method __construct (line 27) | public function __construct()
    method handle (line 37) | public function handle()
    method get_info_movie (line 80) | public function get_info_movie($response,$c_36='')
    method get_info_en_star (line 142) | public function get_info_en_star($response,$c_36='')
    method get_info_star (line 202) | public function get_info_star($response,$c_36='')
    method get_info_series (line 258) | public function get_info_series($response,$c_36=''){
    method get_info_studio (line 281) | public function get_info_studio($response,$c_36=''){
    method get_info_director (line 307) | public function get_info_director($response,$c_36=''){
    method get_info_label (line 330) | public function get_info_label($response,$c_36=''){

FILE: app/Console/Commands/BaseCrawler.php
  class BaseCrawler (line 15) | class BaseCrawler extends Command
    method __construct (line 36) | public function __construct()
    method crawler_client_init (line 57) | public function crawler_client_init($hosturl,$start_type,$table_prefix...
    method save_data (line 95) | public function save_data($response,$index =0)
    method clean_data (line 125) | public function clean_data()
    method binsearch_end (line 130) | public function binsearch_end($start_lower=1){
    method update_hosturl (line 197) | public function update_hosturl(){
    method prepare_sprequests (line 221) | public function prepare_sprequests(){
    method prepare_sprequests_update (line 240) | public function prepare_sprequests_update($notwith404=0,$start_from=1,...
    method start_spider (line 301) | public function start_spider($concurrency=3){
    method handle (line 322) | public function handle()

FILE: app/Console/Commands/Bttool.php
  class Bttool (line 6) | class Bttool extends Command
    method __construct (line 27) | public function __construct()
    method handle (line 37) | public function handle()

FILE: app/Console/Commands/JavbusCrawler.php
  class JavbusCrawler (line 5) | class JavbusCrawler extends BaseCrawler
    method __construct (line 26) | public function __construct()
    method handle_all_movie (line 30) | public function handle_all_movie($moviemax=300,$movie404 = 0)
    method handle_movie (line 56) | public function handle_movie($movieid)
    method handle_page (line 99) | public function handle_page($gid)
    method handle_all_page (line 126) | public function handle_all_page($pagenum = 10,$genre = ''){
    method handle_all_magnet (line 149) | public function handle_all_magnet($pagenum = 1){
    method handle_magnet (line 172) | public function handle_magnet($gid)
    method handle (line 217) | public function handle()
    method update_ja_code_36 (line 240) | public function update_ja_code_36($table_javbus ,$table_avmoo)
    method check_hosturl (line 269) | public function check_hosturl($requrl){
    method prepare_page_rquests (line 282) | public function prepare_page_rquests($requrl,$pagenum=10,$genre=''){
    method prepare_movie_rquests (line 306) | public function prepare_movie_rquests($requrl,$remove404=0){
    method prepare_mag_rquests (line 366) | public function prepare_mag_rquests($requrl ,$pagenum = 1){
    method get_info_en_star (line 400) | public function get_info_en_star($response,$c_36='')
    method get_info_star (line 460) | public function get_info_star($response,$c_36='')
    method get_info_series (line 518) | public function get_info_series($response,$c_36=''){
    method get_info_studio (line 543) | public function get_info_studio($response,$c_36=''){
    method get_info_director (line 570) | public function get_info_director($response,$c_36=''){
    method get_info_magnet (line 575) | public function get_info_magnet($response,$c_36=''){
    method get_info_page (line 618) | public function get_info_page($response,$c_36=''){
    method get_info_movie (line 651) | public function get_info_movie($response,$c_36=''){

FILE: app/Console/Commands/JavlibraryCrawler.php
  class JavlibraryCrawler (line 8) | class JavlibraryCrawler extends BaseCrawler
    method __construct (line 29) | public function __construct()
    method handle (line 38) | public function handle()
    method handle_genre (line 50) | public function handle_genre()
    method handle_movie (line 227) | public function handle_movie($moviemax=128)
    method get_info_movie (line 307) | public function get_info_movie($response,$c_36=''){

FILE: app/Console/Commands/Scandir.php
  class Scandir (line 8) | class Scandir extends Command
    method __construct (line 29) | public function __construct()
    method handle (line 39) | public function handle()

FILE: app/Console/Commands/SendEmails.php
  class SendEmails (line 7) | class SendEmails extends Command
    method __construct (line 28) | public function __construct()
    method handle (line 38) | public function handle()

FILE: app/Console/Kernel.php
  class Kernel (line 8) | class Kernel extends ConsoleKernel
    method schedule (line 25) | protected function schedule(Schedule $schedule)
    method commands (line 36) | protected function commands()

FILE: app/Console/Tools/MedooEx.php
  class MedooEx (line 13) | class MedooEx extends Medoo
    method __construct (line 15) | public function __construct(array $options)
    method insert (line 20) | public function insert($table, $datas)

FILE: app/Exceptions/Handler.php
  class Handler (line 8) | class Handler extends ExceptionHandler
    method report (line 35) | public function report(Exception $exception)
    method render (line 47) | public function render($request, Exception $exception)

FILE: app/Http/Controllers/API/MovieinfoController.php
  class MovieinfoController (line 13) | class MovieinfoController extends Controller
    method change_state (line 15) | public function change_state(Request $request)
    method magnetlinks (line 38) | public function magnetlinks(Request $request)
    method magnetlinks2 (line 56) | public function magnetlinks2(Request $request)
    method change_genre (line 167) | public function change_genre(Request $request)
    method change_genre_all (line 198) | public function change_genre_all(Request $request)
    method save_blogjav_img (line 235) | public function save_blogjav_img(Request $request)
    method set_javbus5_curl_mg (line 249) | private  function set_javbus5_curl_mg($f_code)

FILE: app/Http/Controllers/Auth/ForgotPasswordController.php
  class ForgotPasswordController (line 8) | class ForgotPasswordController extends Controller
    method __construct (line 28) | public function __construct()

FILE: app/Http/Controllers/Auth/LoginController.php
  class LoginController (line 8) | class LoginController extends Controller
    method __construct (line 35) | public function __construct()

FILE: app/Http/Controllers/Auth/RegisterController.php
  class RegisterController (line 11) | class RegisterController extends Controller
    method __construct (line 38) | public function __construct()
    method validator (line 49) | protected function validator(array $data)
    method create (line 64) | protected function create(array $data)

FILE: app/Http/Controllers/Auth/ResetPasswordController.php
  class ResetPasswordController (line 8) | class ResetPasswordController extends Controller
    method __construct (line 35) | public function __construct()

FILE: app/Http/Controllers/Auth/VerificationController.php
  class VerificationController (line 8) | class VerificationController extends Controller
    method __construct (line 35) | public function __construct()

FILE: app/Http/Controllers/AvbookController.php
  class AvbookController (line 11) | class AvbookController extends Controller
    method index (line 14) | public function index(Request $request)
    method javlib (line 145) | public function javlib(Request $request)
    method javlibmovie (line 269) | public function javlibmovie(Request $request)
    method movie (line 339) | public function movie(Request $request)
    method genre (line 408) | public function genre(Request $request)
    method actresses (line 414) | public function actresses(Request $request)

FILE: app/Http/Controllers/Controller.php
  class Controller (line 10) | class Controller extends BaseController

FILE: app/Http/Kernel.php
  class Kernel (line 7) | class Kernel extends HttpKernel

FILE: app/Http/Middleware/Authenticate.php
  class Authenticate (line 7) | class Authenticate extends Middleware
    method redirectTo (line 15) | protected function redirectTo($request)

FILE: app/Http/Middleware/CheckForMaintenanceMode.php
  class CheckForMaintenanceMode (line 7) | class CheckForMaintenanceMode extends Middleware

FILE: app/Http/Middleware/EncryptCookies.php
  class EncryptCookies (line 7) | class EncryptCookies extends Middleware

FILE: app/Http/Middleware/RedirectIfAuthenticated.php
  class RedirectIfAuthenticated (line 8) | class RedirectIfAuthenticated
    method handle (line 18) | public function handle($request, Closure $next, $guard = null)

FILE: app/Http/Middleware/TrimStrings.php
  class TrimStrings (line 7) | class TrimStrings extends Middleware

FILE: app/Http/Middleware/TrustProxies.php
  class TrustProxies (line 8) | class TrustProxies extends Middleware

FILE: app/Http/Middleware/VerifyCsrfToken.php
  class VerifyCsrfToken (line 7) | class VerifyCsrfToken extends Middleware

FILE: app/Models/Actresses.php
  class Actresses (line 7) | class Actresses extends Model

FILE: app/Models/Avbooks.php
  class Avbooks (line 7) | class Avbooks extends Model

FILE: app/Models/Director.php
  class Director (line 7) | class Director extends Model

FILE: app/Models/Javbus.php
  class Javbus (line 7) | class Javbus extends Model

FILE: app/Models/Javlibrary.php
  class Javlibrary (line 7) | class Javlibrary extends Model
    method avmoo_info (line 11) | public function avmoo_info()

FILE: app/Models/Label.php
  class Label (line 7) | class Label extends Model

FILE: app/Models/Magnet.php
  class Magnet (line 7) | class Magnet extends Model

FILE: app/Models/Movies.php
  class Movies (line 7) | class Movies extends Model
    method series_name (line 12) | public function series_name()
    method director_name (line 16) | public function director_name()
    method studio_name (line 20) | public function studio_name()
    method label_name (line 24) | public function label_name()
    method javlib (line 28) | public function javlib()

FILE: app/Models/Series.php
  class Series (line 7) | class Series extends Model

FILE: app/Models/Studio.php
  class Studio (line 7) | class Studio extends Model

FILE: app/Providers/AppServiceProvider.php
  class AppServiceProvider (line 7) | class AppServiceProvider extends ServiceProvider
    method register (line 14) | public function register()
    method boot (line 24) | public function boot()

FILE: app/Providers/AuthServiceProvider.php
  class AuthServiceProvider (line 8) | class AuthServiceProvider extends ServiceProvider
    method boot (line 24) | public function boot()

FILE: app/Providers/BroadcastServiceProvider.php
  class BroadcastServiceProvider (line 8) | class BroadcastServiceProvider extends ServiceProvider
    method boot (line 15) | public function boot()

FILE: app/Providers/EventServiceProvider.php
  class EventServiceProvider (line 10) | class EventServiceProvider extends ServiceProvider
    method boot (line 28) | public function boot()

FILE: app/Providers/RouteServiceProvider.php
  class RouteServiceProvider (line 8) | class RouteServiceProvider extends ServiceProvider
    method boot (line 24) | public function boot()
    method map (line 36) | public function map()
    method mapWebRoutes (line 52) | protected function mapWebRoutes()
    method mapApiRoutes (line 66) | protected function mapApiRoutes()

FILE: app/Tools/CrawlerUpdate.php
  class CrawlerUpdate (line 11) | class CrawlerUpdate
    method get_crawler_config (line 13) | public static function get_crawler_config(){

FILE: app/User.php
  class User (line 9) | class User extends Authenticatable

FILE: database/migrations/2019_05_11_083515_create_avbook_avmoo_director_table.php
  class CreateAvbookAvmooDirectorTable (line 6) | class CreateAvbookAvmooDirectorTable extends Migration {
    method up (line 13) | public function up()
    method down (line 29) | public function down()

FILE: database/migrations/2019_05_11_083515_create_avbook_avmoo_genre_table.php
  class CreateAvbookAvmooGenreTable (line 6) | class CreateAvbookAvmooGenreTable extends Migration {
    method up (line 13) | public function up()
    method down (line 28) | public function down()

FILE: database/migrations/2019_05_11_083515_create_avbook_avmoo_label_table.php
  class CreateAvbookAvmooLabelTable (line 6) | class CreateAvbookAvmooLabelTable extends Migration {
    method up (line 13) | public function up()
    method down (line 29) | public function down()

FILE: database/migrations/2019_05_11_083515_create_avbook_avmoo_movie_table.php
  class CreateAvbookAvmooMovieTable (line 6) | class CreateAvbookAvmooMovieTable extends Migration {
    method up (line 13) | public function up()
    method down (line 54) | public function down()

FILE: database/migrations/2019_05_11_083515_create_avbook_avmoo_series_table.php
  class CreateAvbookAvmooSeriesTable (line 6) | class CreateAvbookAvmooSeriesTable extends Migration {
    method up (line 13) | public function up()
    method down (line 29) | public function down()

FILE: database/migrations/2019_05_11_083515_create_avbook_avmoo_star_table.php
  class CreateAvbookAvmooStarTable (line 6) | class CreateAvbookAvmooStarTable extends Migration {
    method up (line 13) | public function up()
    method down (line 41) | public function down()

FILE: database/migrations/2019_05_11_083515_create_avbook_avmoo_studio_table.php
  class CreateAvbookAvmooStudioTable (line 6) | class CreateAvbookAvmooStudioTable extends Migration {
    method up (line 13) | public function up()
    method down (line 29) | public function down()

FILE: database/migrations/2019_05_11_083515_create_avbook_crawler_404_table.php
  class CreateAvbookCrawler404Table (line 6) | class CreateAvbookCrawler404Table extends Migration {
    method up (line 13) | public function up()
    method down (line 30) | public function down()

FILE: database/migrations/2019_05_11_083515_create_avbook_javbus_magnet_table.php
  class CreateAvbookJavbusMagnetTable (line 6) | class CreateAvbookJavbusMagnetTable extends Migration {
    method up (line 13) | public function up()
    method down (line 36) | public function down()

FILE: database/migrations/2019_05_11_083515_create_avbook_javbus_movie_table.php
  class CreateAvbookJavbusMovieTable (line 6) | class CreateAvbookJavbusMovieTable extends Migration {
    method up (line 13) | public function up()
    method down (line 47) | public function down()

FILE: database/migrations/2019_05_11_083515_create_avbook_javbus_series_table.php
  class CreateAvbookJavbusSeriesTable (line 6) | class CreateAvbookJavbusSeriesTable extends Migration {
    method up (line 13) | public function up()
    method down (line 29) | public function down()

FILE: database/migrations/2019_05_11_083515_create_avbook_javbus_star_table.php
  class CreateAvbookJavbusStarTable (line 6) | class CreateAvbookJavbusStarTable extends Migration {
    method up (line 13) | public function up()
    method down (line 41) | public function down()

FILE: database/migrations/2019_05_11_083515_create_avbook_javbus_studio_table.php
  class CreateAvbookJavbusStudioTable (line 6) | class CreateAvbookJavbusStudioTable extends Migration {
    method up (line 13) | public function up()
    method down (line 29) | public function down()

FILE: database/migrations/2019_07_02_090723_create_avbook_javlib_genre_table.php
  class CreateAvbookJavlibGenreTable (line 6) | class CreateAvbookJavlibGenreTable extends Migration {
    method up (line 13) | public function up()
    method down (line 31) | public function down()

FILE: database/migrations/2019_07_02_090723_create_avbook_javlib_movie_table.php
  class CreateAvbookJavlibMovieTable (line 6) | class CreateAvbookJavlibMovieTable extends Migration {
    method up (line 13) | public function up()
    method down (line 45) | public function down()

FILE: database/migrations/2019_07_02_090723_create_avbook_javlib_vid_table.php
  class CreateAvbookJavlibVidTable (line 6) | class CreateAvbookJavlibVidTable extends Migration {
    method up (line 13) | public function up()
    method down (line 27) | public function down()

FILE: database/seeds/DatabaseSeeder.php
  class DatabaseSeeder (line 5) | class DatabaseSeeder extends Seeder
    method run (line 12) | public function run()

FILE: public/avbook/StackBlur.js
  function stackBlurImage (line 79) | function stackBlurImage( imageID, canvasID, radius, blurAlphaChannel )
  function stackBlurCanvasRGBA (line 106) | function stackBlurCanvasRGBA( id, top_x, top_y, width, height, radius )
  function stackBlurCanvasRGB (line 373) | function stackBlurCanvasRGB( id, top_x, top_y, width, height, radius )
  function BlurStack (line 604) | function BlurStack()

FILE: public/avbook/auto.js
  class Lock (line 677) | class Lock {
    method constructor (line 678) | constructor(d = false) {
    method lock (line 681) | lock() {
    method unlock (line 684) | unlock() {
  function fetchURL (line 689) | function fetchURL(url) {
  function appendElems (line 752) | function appendElems(arg) {
  function xbottom (line 763) | function xbottom(elem, limit) {
  function end (line 767) | function end() {
  function scroll (line 774) | function scroll() {
  function wheel (line 780) | function wheel() {
  function scrollInit (line 786) | function scrollInit($pages){

FILE: public/avbook/bootstrap-hover-dropdown.js
  function r (line 1) | function r(){d.parents(".navbar").find(".navbar-toggle").is(":visible")|...

FILE: public/avbook/gallery.js
  function hoverdiv (line 54) | function hoverdiv(e, starhover) {
  function checktxt (line 63) | function checktxt() {
  function uncledatoolsbyajax (line 76) | function uncledatoolsbyajax(){
  function uncledatoolsbyajax_nr (line 87) | function uncledatoolsbyajax_nr(){

FILE: public/avbook/gallery2.js
  function hoverdiv (line 54) | function hoverdiv(e, starhover) {
  function checktxt2 (line 63) | function checktxt2() {
  function uncledatoolsbyajax (line 74) | function uncledatoolsbyajax(){

FILE: public/avbook/mask.js
  function myBrowser (line 38) | function myBrowser(){

FILE: public/avbook/nav.overlay.js
  function toggleFScreen (line 7) | function toggleFScreen() {

FILE: public/js/app.js
  function n (line 1) | function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{...
  function a (line 1) | function a(e){return"[object Array]"===o.call(e)}
  function s (line 1) | function s(e){return null!==e&&"object"==typeof e}
  function u (line 1) | function u(e){return"[object Function]"===o.call(e)}
  function c (line 1) | function c(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),a(e))for(var n...
  function n (line 1) | function n(n,r){"object"==typeof t[r]&&"object"==typeof n?t[r]=e(t[r],n)...
  function a (line 1) | function a(e,t){!r.isUndefined(e)&&r.isUndefined(e["Content-Type"])&&(e[...
  function s (line 1) | function s(e){return e&&"[object Function]"==={}.toString.call(e)}
  function u (line 1) | function u(e,t){if(1!==e.nodeType)return[];var n=e.ownerDocument.default...
  function c (line 1) | function c(e){return"HTML"===e.nodeName?e:e.parentNode||e.host}
  function l (line 1) | function l(e){if(!e)return document.body;switch(e.nodeName){case"HTML":c...
  function d (line 1) | function d(e){return 11===e?f:10===e?p:f||p}
  function h (line 1) | function h(e){if(!e)return document.documentElement;for(var t=d(10)?docu...
  function v (line 1) | function v(e){return null!==e.parentNode?v(e.parentNode):e}
  function g (line 1) | function g(e,t){if(!(e&&e.nodeType&&t&&t.nodeType))return document.docum...
  function m (line 1) | function m(e){var t="top"===(arguments.length>1&&void 0!==arguments[1]?a...
  function y (line 1) | function y(e,t){var n="x"===t?"Left":"Top",r="Left"===n?"Right":"Bottom"...
  function _ (line 1) | function _(e,t,n,r){return Math.max(t["offset"+e],t["scroll"+e],n["clien...
  function b (line 1) | function b(e){var t=e.body,n=e.documentElement,r=d(10)&&getComputedStyle...
  function e (line 1) | function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function C (line 1) | function C(e){return x({},e,{right:e.left+e.width,bottom:e.top+e.height})}
  function A (line 1) | function A(e){var t={};try{if(d(10)){t=e.getBoundingClientRect();var n=m...
  function S (line 1) | function S(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&argumen...
  function O (line 1) | function O(e){if(!e||!e.parentElement||d())return document.documentEleme...
  function D (line 1) | function D(e,t,n,r){var i=arguments.length>4&&void 0!==arguments[4]&&arg...
  function I (line 1) | function I(e,t,n,r,i){var o=arguments.length>5&&void 0!==arguments[5]?ar...
  function k (line 1) | function k(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?argume...
  function N (line 1) | function N(e){var t=e.ownerDocument.defaultView.getComputedStyle(e),n=pa...
  function L (line 1) | function L(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"...
  function j (line 1) | function j(e,t,n){n=n.split("-")[0];var r=N(e),i={width:r.width,height:r...
  function P (line 1) | function P(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}
  function R (line 1) | function R(e,t,n){return(void 0===n?e:e.slice(0,function(e,t,n){if(Array...
  function $ (line 1) | function $(e,t){return e.some(function(e){var n=e.name;return e.enabled&...
  function H (line 1) | function H(e){for(var t=[!1,"ms","Webkit","Moz","O"],n=e.charAt(0).toUpp...
  function M (line 1) | function M(e){var t=e.ownerDocument;return t?t.defaultView:window}
  function F (line 1) | function F(e,t,n,r){n.updateBound=r,M(e).addEventListener("resize",n.upd...
  function W (line 1) | function W(){var e,t;this.state.eventsEnabled&&(cancelAnimationFrame(thi...
  function q (line 1) | function q(e){return""!==e&&!isNaN(parseFloat(e))&&isFinite(e)}
  function B (line 1) | function B(e,t){Object.keys(t).forEach(function(n){var r="";-1!==["width...
  function V (line 1) | function V(e,t,n){var r=P(e,function(e){return e.name===t}),i=!!r&&e.som...
  function G (line 1) | function G(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments...
  function Q (line 1) | function Q(e,t,n,r){var i=[0,0],o=-1!==["right","left"].indexOf(r),a=e.s...
  function e (line 1) | function e(t,n){var r=this,i=arguments.length>2&&void 0!==arguments[2]?a...
  function w (line 1) | function w(e,t,n){var r,i=(t=t||a).createElement("script");if(i.text=e,n...
  function T (line 1) | function T(e){return null==e?e+"":"object"==typeof e||"function"==typeof...
  function C (line 1) | function C(e){var t=!!e&&"length"in e&&e.length,n=T(e);return!y(e)&&!_(e...
  function oe (line 1) | function oe(e,t,r,i){var o,s,c,l,f,h,m,y=t&&t.ownerDocument,T=t?t.nodeTy...
  function ae (line 1) | function ae(){var e=[];return function t(n,i){return e.push(n+" ")>r.cac...
  function se (line 1) | function se(e){return e[b]=!0,e}
  function ue (line 1) | function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(...
  function ce (line 1) | function ce(e,t){for(var n=e.split("|"),i=n.length;i--;)r.attrHandle[n[i...
  function le (line 1) | function le(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourc...
  function fe (line 1) | function fe(e){return function(t){return"input"===t.nodeName.toLowerCase...
  function pe (line 1) | function pe(e){return function(t){var n=t.nodeName.toLowerCase();return(...
  function de (line 1) | function de(e){return function(t){return"form"in t?t.parentNode&&!1===t....
  function he (line 1) | function he(e){return se(function(t){return t=+t,se(function(n,r){for(va...
  function ve (line 1) | function ve(e){return e&&void 0!==e.getElementsByTagName&&e}
  function ge (line 1) | function ge(){}
  function me (line 1) | function me(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
  function ye (line 1) | function ye(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&"parentNode"===o,s=E...
  function _e (line 1) | function _e(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;...
  function be (line 1) | function be(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,c=null!=t;s<u;s++)(...
  function we (line 1) | function we(e,t,n,r,i,o){return r&&!r[b]&&(r=we(r)),i&&!i[b]&&(i=we(i,o)...
  function Te (line 1) | function Te(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.r...
  function I (line 1) | function I(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerC...
  function N (line 1) | function N(e,t,n){return y(t)?E.grep(e,function(e,r){return!!t.call(e,r,...
  function $ (line 1) | function $(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}
  function M (line 1) | function M(e){return e}
  function F (line 1) | function F(e){throw e}
  function W (line 1) | function W(e,t,n,r){var i;try{e&&y(i=e.promise)?i.call(e).done(t).fail(n...
  function a (line 1) | function a(e,t,r,i){return function(){var s=this,u=arguments,c=function(...
  function U (line 1) | function U(){a.removeEventListener("DOMContentLoaded",U),n.removeEventLi...
  function G (line 1) | function G(e,t){return t.toUpperCase()}
  function X (line 1) | function X(e){return e.replace(z,"ms-").replace(K,G)}
  function Y (line 1) | function Y(){this.expando=E.expando+Y.uid++}
  function ne (line 1) | function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.re...
  function ue (line 1) | function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:functio...
  function le (line 1) | function le(e){var t,n=e.ownerDocument,r=e.nodeName,i=ce[r];return i||(t...
  function fe (line 1) | function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&...
  function ge (line 1) | function ge(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getEle...
  function me (line 1) | function me(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],"globalEval",...
  function we (line 1) | function we(e,t,n,r,i){for(var o,a,s,u,c,l,f=t.createDocumentFragment(),...
  function Ae (line 1) | function Ae(){return!0}
  function Se (line 1) | function Se(){return!1}
  function Oe (line 1) | function Oe(){try{return a.activeElement}catch(e){}}
  function De (line 1) | function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"...
  function je (line 1) | function je(e,t){return I(e,"table")&&I(11!==t.nodeType?t:t.firstChild,"...
  function Pe (line 1) | function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
  function Re (line 1) | function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.sli...
  function $e (line 1) | function $e(e,t){var n,r,i,o,a,s,u,c;if(1===t.nodeType){if(J.hasData(e)&...
  function He (line 1) | function He(e,t,n,r){t=c.apply([],t);var i,o,a,s,u,l,f=0,p=e.length,d=p-...
  function Me (line 1) | function Me(e,t,n){for(var r,i=t?E.filter(t,e):e,o=0;null!=(r=i[o]);o++)...
  function Be (line 1) | function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||We(e))&&(""!==(a=n....
  function Ue (line 1) | function Ue(e,t){return{get:function(){if(!e())return(this.get=t).apply(...
  function e (line 1) | function e(){if(l){c.style.cssText="position:absolute;left:-11111px;widt...
  function t (line 1) | function t(e){return Math.round(parseFloat(e))}
  function Ye (line 1) | function Ye(e){var t=E.cssProps[e];return t||(t=E.cssProps[e]=function(e...
  function Je (line 1) | function Je(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[...
  function Ze (line 1) | function Ze(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border...
  function et (line 1) | function et(e,t,n){var r=We(e),i=Be(e,t,r),o="border-box"===E.css(e,"box...
  function tt (line 1) | function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}
  function at (line 1) | function at(){rt&&(!1===a.hidden&&n.requestAnimationFrame?n.requestAnima...
  function st (line 1) | function st(){return n.setTimeout(function(){nt=void 0}),nt=Date.now()}
  function ut (line 1) | function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin...
  function ct (line 1) | function ct(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["...
  function lt (line 1) | function lt(e,t,n){var r,i,o=0,a=lt.prefilters.length,s=E.Deferred().alw...
  function vt (line 1) | function vt(e){return(e.match(H)||[]).join(" ")}
  function gt (line 1) | function gt(e){return e.getAttribute&&e.getAttribute("class")||""}
  function mt (line 1) | function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(H)|...
  function Ot (line 1) | function Ot(e,t,n,r){var i;if(Array.isArray(t))E.each(t,function(t,i){n|...
  function Mt (line 1) | function Mt(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var ...
  function Ft (line 1) | function Ft(e,t,n,r){var i={},o=e===Rt;function a(s){var u;return i[s]=!...
  function Wt (line 1) | function Wt(e,t){var n,r,i=E.ajaxSettings.flatOptions||{};for(n in t)voi...
  function C (line 1) | function C(e,t,a,s){var c,p,d,b,w,T=t;l||(l=!0,u&&n.clearTimeout(u),r=vo...
  function o (line 1) | function o(){throw new Error("setTimeout has not been defined")}
  function a (line 1) | function a(){throw new Error("clearTimeout has not been defined")}
  function s (line 1) | function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&s...
  function p (line 1) | function p(){l&&u&&(l=!1,u.length?c=u.concat(c):f=-1,c.length&&d())}
  function d (line 1) | function d(){if(!l){var e=s(p);l=!0;for(var t=c.length;t;){for(u=c,c=[];...
  function h (line 1) | function h(e,t){this.fun=e,this.array=t}
  function v (line 1) | function v(){}
  function r (line 1) | function r(e){this.message=e}
  function Vt (line 1) | function Vt(e,t,n){switch(n.length){case 0:return e.call(t);case 1:retur...
  function zt (line 1) | function zt(e,t,n,r){for(var i=-1,o=null==e?0:e.length;++i<o;){var a=e[i...
  function Kt (line 1) | function Kt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,...
  function Gt (line 1) | function Gt(e,t){for(var n=null==e?0:e.length;n--&&!1!==t(e[n],n,e););re...
  function Xt (line 1) | function Xt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(!t(e[n],n,e...
  function Qt (line 1) | function Qt(e,t){for(var n=-1,r=null==e?0:e.length,i=0,o=[];++n<r;){var ...
  function Yt (line 1) | function Yt(e,t){return!!(null==e?0:e.length)&&un(e,t,0)>-1}
  function Jt (line 1) | function Jt(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r])...
  function Zt (line 1) | function Zt(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n...
  function en (line 1) | function en(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];r...
  function tn (line 1) | function tn(e,t,n,r){var i=-1,o=null==e?0:e.length;for(r&&o&&(n=e[++i]);...
  function nn (line 1) | function nn(e,t,n,r){var i=null==e?0:e.length;for(r&&i&&(n=e[--i]);i--;)...
  function rn (line 1) | function rn(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e)...
  function an (line 1) | function an(e,t,n){var r;return n(e,function(e,n,i){if(t(e,n,i))return r...
  function sn (line 1) | function sn(e,t,n,r){for(var i=e.length,o=n+(r?1:-1);r?o--:++o<i;)if(t(e...
  function un (line 1) | function un(e,t,n){return t==t?function(e,t,n){var r=n-1,i=e.length;for(...
  function cn (line 1) | function cn(e,t,n,r){for(var i=n-1,o=e.length;++i<o;)if(r(e[i],t))return...
  function ln (line 1) | function ln(e){return e!=e}
  function fn (line 1) | function fn(e,t){var n=null==e?0:e.length;return n?vn(e,t)/n:R}
  function pn (line 1) | function pn(e){return function(t){return null==t?o:t[e]}}
  function dn (line 1) | function dn(e){return function(t){return null==e?o:e[t]}}
  function hn (line 1) | function hn(e,t,n,r,i){return i(e,function(e,i,o){n=r?(r=!1,e):t(n,e,i,o...
  function vn (line 1) | function vn(e,t){for(var n,r=-1,i=e.length;++r<i;){var a=t(e[r]);a!==o&&...
  function gn (line 1) | function gn(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}
  function mn (line 1) | function mn(e){return function(t){return e(t)}}
  function yn (line 1) | function yn(e,t){return Zt(t,function(t){return e[t]})}
  function _n (line 1) | function _n(e,t){return e.has(t)}
  function bn (line 1) | function bn(e,t){for(var n=-1,r=e.length;++n<r&&un(t,e[n],0)>-1;);return n}
  function wn (line 1) | function wn(e,t){for(var n=e.length;n--&&un(t,e[n],0)>-1;);return n}
  function xn (line 1) | function xn(e){return"\\"+Ot[e]}
  function Cn (line 1) | function Cn(e){return Tt.test(e)}
  function An (line 1) | function An(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n...
  function Sn (line 1) | function Sn(e,t){return function(n){return e(t(n))}}
  function On (line 1) | function On(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var a=e[n];a!=...
  function Dn (line 1) | function Dn(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[+...
  function In (line 1) | function In(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[+...
  function kn (line 1) | function kn(e){return Cn(e)?function(e){var t=bt.lastIndex=0;for(;bt.tes...
  function Nn (line 1) | function Nn(e){return Cn(e)?function(e){return e.match(bt)||[]}(e):funct...
  function dr (line 1) | function dr(e){if(Os(e)&&!ms(e)&&!(e instanceof mr)){if(e instanceof gr)...
  function e (line 1) | function e(){}
  function vr (line 1) | function vr(){}
  function gr (line 1) | function gr(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!...
  function mr (line 1) | function mr(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,thi...
  function yr (line 1) | function yr(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){va...
  function _r (line 1) | function _r(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){va...
  function br (line 1) | function br(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){va...
  function wr (line 1) | function wr(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new br;++...
  function Tr (line 1) | function Tr(e){var t=this.__data__=new _r(e);this.size=t.size}
  function Er (line 1) | function Er(e,t){var n=ms(e),r=!n&&gs(e),i=!n&&!r&&ws(e),o=!n&&!r&&!i&&R...
  function xr (line 1) | function xr(e){var t=e.length;return t?e[wi(0,t-1)]:o}
  function Cr (line 1) | function Cr(e,t){return ua(no(e),jr(t,0,e.length))}
  function Ar (line 1) | function Ar(e){return ua(no(e))}
  function Sr (line 1) | function Sr(e,t,n){(n===o||ds(e[t],n))&&(n!==o||t in e)||Nr(e,t,n)}
  function Or (line 1) | function Or(e,t,n){var r=e[t];lt.call(e,t)&&ds(r,n)&&(n!==o||t in e)||Nr...
  function Dr (line 1) | function Dr(e,t){for(var n=e.length;n--;)if(ds(e[n][0],t))return n;retur...
  function Ir (line 1) | function Ir(e,t,n,r){return Mr(e,function(e,i,o){t(r,e,n(e),o)}),r}
  function kr (line 1) | function kr(e,t){return e&&ro(t,iu(t),e)}
  function Nr (line 1) | function Nr(e,t,n){"__proto__"==t&&dn?dn(e,t,{configurable:!0,enumerable...
  function Lr (line 1) | function Lr(e,t){for(var n=-1,i=t.length,a=r(i),s=null==e;++n<i;)a[n]=s?...
  function jr (line 1) | function jr(e,t,n){return e==e&&(n!==o&&(e=e<=n?e:n),t!==o&&(e=e>=t?e:t)...
  function Pr (line 1) | function Pr(e,t,n,r,i,a){var s,u=t&p,c=t&d,l=t&h;if(n&&(s=i?n(e,r,i,a):n...
  function Rr (line 1) | function Rr(e,t,n){var r=n.length;if(null==e)return!r;for(e=tt(e);r--;){...
  function $r (line 1) | function $r(e,t,n){if("function"!=typeof e)throw new it(u);return ia(fun...
  function Hr (line 1) | function Hr(e,t,n,r){var i=-1,o=Yt,s=!0,u=e.length,c=[],l=t.length;if(!u...
  function Wr (line 1) | function Wr(e,t){var n=!0;return Mr(e,function(e,r,i){return n=!!t(e,r,i...
  function qr (line 1) | function qr(e,t,n){for(var r=-1,i=e.length;++r<i;){var a=e[r],s=t(a);if(...
  function Br (line 1) | function Br(e,t){var n=[];return Mr(e,function(e,r,i){t(e,r,i)&&n.push(e...
  function Ur (line 1) | function Ur(e,t,n,r,i){var o=-1,a=e.length;for(n||(n=Vo),i||(i=[]);++o<a...
  function Kr (line 1) | function Kr(e,t){return e&&Vr(e,t,iu)}
  function Gr (line 1) | function Gr(e,t){return e&&zr(e,t,iu)}
  function Xr (line 1) | function Xr(e,t){return Qt(t,function(t){return xs(e[t])})}
  function Qr (line 1) | function Qr(e,t){for(var n=0,r=(t=zi(t,e)).length;null!=e&&n<r;)e=e[la(t...
  function Yr (line 1) | function Yr(e,t,n){var r=t(e);return ms(e)?r:en(r,n(e))}
  function Jr (line 1) | function Jr(e){return null==e?e===o?oe:J:on&&on in tt(e)?function(e){var...
  function Zr (line 1) | function Zr(e,t){return e>t}
  function ei (line 1) | function ei(e,t){return null!=e&&lt.call(e,t)}
  function ti (line 1) | function ti(e,t){return null!=e&&t in tt(e)}
  function ni (line 1) | function ni(e,t,n){for(var i=n?Jt:Yt,a=e[0].length,s=e.length,u=s,c=r(s)...
  function ri (line 1) | function ri(e,t,n){var r=null==(e=ta(e,t=zi(t,e)))?e:e[la(Ea(t))];return...
  function ii (line 1) | function ii(e){return Os(e)&&Jr(e)==W}
  function oi (line 1) | function oi(e,t,n,r,i){return e===t||(null==e||null==t||!Os(e)&&!Os(t)?e...
  function ai (line 1) | function ai(e,t,n,r){var i=n.length,a=i,s=!r;if(null==e)return!a;for(e=t...
  function si (line 1) | function si(e){return!(!Ss(e)||(t=e,pt&&pt in t))&&(xs(e)?gt:ze).test(fa...
  function ui (line 1) | function ui(e){return"function"==typeof e?e:null==e?Iu:"object"==typeof ...
  function ci (line 1) | function ci(e){if(!Yo(e))return Un(e);var t=[];for(var n in tt(e))lt.cal...
  function li (line 1) | function li(e){if(!Ss(e))return function(e){var t=[];if(null!=e)for(var ...
  function fi (line 1) | function fi(e,t){return e<t}
  function pi (line 1) | function pi(e,t){var n=-1,i=_s(e)?r(e.length):[];return Mr(e,function(e,...
  function di (line 1) | function di(e){var t=Ho(e);return 1==t.length&&t[0][2]?Zo(t[0][0],t[0][1...
  function hi (line 1) | function hi(e,t){return Go(e)&&Jo(t)?Zo(la(e),t):function(n){var r=Zs(n,...
  function vi (line 1) | function vi(e,t,n,r,i){e!==t&&Vr(t,function(a,s){if(Ss(a))i||(i=new Tr),...
  function gi (line 1) | function gi(e,t){var n=e.length;if(n)return zo(t+=t<0?n:0,n)?e[t]:o}
  function mi (line 1) | function mi(e,t,n){var r=-1;return t=Zt(t.length?t:[Iu],mn(Ro())),functi...
  function yi (line 1) | function yi(e,t,n){for(var r=-1,i=t.length,o={};++r<i;){var a=t[r],s=Qr(...
  function _i (line 1) | function _i(e,t,n,r){var i=r?cn:un,o=-1,a=t.length,s=e;for(e===t&&(t=no(...
  function bi (line 1) | function bi(e,t){for(var n=e?t.length:0,r=n-1;n--;){var i=t[n];if(n==r||...
  function wi (line 1) | function wi(e,t){return e+Mn(Xn()*(t-e+1))}
  function Ti (line 1) | function Ti(e,t){var n="";if(!e||t<1||t>j)return n;do{t%2&&(n+=e),(t=Mn(...
  function Ei (line 1) | function Ei(e,t){return oa(ea(e,t,Iu),e+"")}
  function xi (line 1) | function xi(e){return xr(du(e))}
  function Ci (line 1) | function Ci(e,t){var n=du(e);return ua(n,jr(t,0,n.length))}
  function Ai (line 1) | function Ai(e,t,n,r){if(!Ss(e))return e;for(var i=-1,a=(t=zi(t,e)).lengt...
  function Di (line 1) | function Di(e){return ua(du(e))}
  function Ii (line 1) | function Ii(e,t,n){var i=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(n=n>o?o:n)<0...
  function ki (line 1) | function ki(e,t){var n;return Mr(e,function(e,r,i){return!(n=t(e,r,i))})...
  function Ni (line 1) | function Ni(e,t,n){var r=0,i=null==e?r:e.length;if("number"==typeof t&&t...
  function Li (line 1) | function Li(e,t,n,r){t=n(t);for(var i=0,a=null==e?0:e.length,s=t!=t,u=nu...
  function ji (line 1) | function ji(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var a=e[n],s=t...
  function Pi (line 1) | function Pi(e){return"number"==typeof e?e:Ps(e)?R:+e}
  function Ri (line 1) | function Ri(e){if("string"==typeof e)return e;if(ms(e))return Zt(e,Ri)+"...
  function $i (line 1) | function $i(e,t,n){var r=-1,i=Yt,o=e.length,s=!0,u=[],c=u;if(n)s=!1,i=Jt...
  function Hi (line 1) | function Hi(e,t){return null==(e=ta(e,t=zi(t,e)))||delete e[la(Ea(t))]}
  function Mi (line 1) | function Mi(e,t,n,r){return Ai(e,t,n(Qr(e,t)),r)}
  function Fi (line 1) | function Fi(e,t,n,r){for(var i=e.length,o=r?i:-1;(r?o--:++o<i)&&t(e[o],o...
  function Wi (line 1) | function Wi(e,t){var n=e;return n instanceof mr&&(n=n.value()),tn(t,func...
  function qi (line 1) | function qi(e,t,n){var i=e.length;if(i<2)return i?$i(e[0]):[];for(var o=...
  function Bi (line 1) | function Bi(e,t,n){for(var r=-1,i=e.length,a=t.length,s={};++r<i;){var u...
  function Ui (line 1) | function Ui(e){return bs(e)?e:[]}
  function Vi (line 1) | function Vi(e){return"function"==typeof e?e:Iu}
  function zi (line 1) | function zi(e,t){return ms(e)?e:Go(e,t)?[e]:ca(Vs(e))}
  function Gi (line 1) | function Gi(e,t,n){var r=e.length;return n=n===o?r:n,!t&&n>=r?e:Ii(e,t,n)}
  function Qi (line 1) | function Qi(e,t){if(t)return e.slice();var n=e.length,r=Ot?Ot(n):new e.c...
  function Yi (line 1) | function Yi(e){var t=new e.constructor(e.byteLength);return new Tt(t).se...
  function Ji (line 1) | function Ji(e,t){var n=t?Yi(e.buffer):e.buffer;return new e.constructor(...
  function Zi (line 1) | function Zi(e,t){if(e!==t){var n=e!==o,r=null===e,i=e==e,a=Ps(e),s=t!==o...
  function eo (line 1) | function eo(e,t,n,i){for(var o=-1,a=e.length,s=n.length,u=-1,c=t.length,...
  function to (line 1) | function to(e,t,n,i){for(var o=-1,a=e.length,s=-1,u=n.length,c=-1,l=t.le...
  function no (line 1) | function no(e,t){var n=-1,i=e.length;for(t||(t=r(i));++n<i;)t[n]=e[n];re...
  function ro (line 1) | function ro(e,t,n,r){var i=!n;n||(n={});for(var a=-1,s=t.length;++a<s;){...
  function io (line 1) | function io(e,t){return function(n,r){var i=ms(n)?zt:Ir,o=t?t():{};retur...
  function oo (line 1) | function oo(e){return Ei(function(t,n){var r=-1,i=n.length,a=i>1?n[i-1]:...
  function ao (line 1) | function ao(e,t){return function(n,r){if(null==n)return n;if(!_s(n))retu...
  function so (line 1) | function so(e){return function(t,n,r){for(var i=-1,o=tt(t),a=r(t),s=a.le...
  function uo (line 1) | function uo(e){return function(t){var n=Cn(t=Vs(t))?Nn(t):o,r=n?n[0]:t.c...
  function co (line 1) | function co(e){return function(t){return tn(xu(gu(t).replace(yt,"")),e,"...
  function lo (line 1) | function lo(e){return function(){var t=arguments;switch(t.length){case 0...
  function fo (line 1) | function fo(e){return function(t,n,r){var i=tt(t);if(!_s(t)){var a=Ro(n,...
  function po (line 1) | function po(e){return Io(function(t){var n=t.length,r=n,i=gr.prototype.t...
  function ho (line 1) | function ho(e,t,n,i,a,s,u,c,l,f){var p=t&x,d=t&m,h=t&y,v=t&(b|w),g=t&A,_...
  function vo (line 1) | function vo(e,t){return function(n,r){return function(e,t,n,r){return Kr...
  function go (line 1) | function go(e,t){return function(n,r){var i;if(n===o&&r===o)return t;if(...
  function mo (line 1) | function mo(e){return Io(function(t){return t=Zt(t,mn(Ro())),Ei(function...
  function yo (line 1) | function yo(e,t){var n=(t=t===o?" ":Ri(t)).length;if(n<2)return n?Ti(t,e...
  function _o (line 1) | function _o(e){return function(t,n,i){return i&&"number"!=typeof i&&Ko(t...
  function bo (line 1) | function bo(e){return function(t,n){return"string"==typeof t&&"string"==...
  function wo (line 1) | function wo(e,t,n,r,i,a,s,u,c,l){var f=t&b;t|=f?T:E,(t&=~(f?E:T))&_||(t&...
  function To (line 1) | function To(e){var t=et[e];return function(e,n){if(e=Bs(e),n=null==n?0:z...
  function xo (line 1) | function xo(e){return function(t){var n=qo(t);return n==Q?An(t):n==ne?In...
  function Co (line 1) | function Co(e,t,n,i,a,s,c,l){var p=t&y;if(!p&&"function"!=typeof e)throw...
  function Ao (line 1) | function Ao(e,t,n,r){return e===o||ds(e,st[n])&&!lt.call(r,n)?t:e}
  function So (line 1) | function So(e,t,n,r,i,a){return Ss(e)&&Ss(t)&&(a.set(t,e),vi(e,t,o,So,a)...
  function Oo (line 1) | function Oo(e){return ks(e)?o:e}
  function Do (line 1) | function Do(e,t,n,r,i,a){var s=n&v,u=e.length,c=t.length;if(u!=c&&!(s&&c...
  function Io (line 1) | function Io(e){return oa(ea(e,o,ya),e+"")}
  function ko (line 1) | function ko(e){return Yr(e,iu,Fo)}
  function No (line 1) | function No(e){return Yr(e,ou,Wo)}
  function jo (line 1) | function jo(e){for(var t=e.name+"",n=ir[t],r=lt.call(ir,t)?n.length:0;r-...
  function Po (line 1) | function Po(e){return(lt.call(dr,"placeholder")?dr:e).placeholder}
  function Ro (line 1) | function Ro(){var e=dr.iteratee||ku;return e=e===ku?ui:e,arguments.lengt...
  function $o (line 1) | function $o(e,t){var n,r,i=e.__data__;return("string"==(r=typeof(n=t))||...
  function Ho (line 1) | function Ho(e){for(var t=iu(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[...
  function Mo (line 1) | function Mo(e,t){var n=function(e,t){return null==e?o:e[t]}(e,t);return ...
  function Bo (line 1) | function Bo(e,t,n){for(var r=-1,i=(t=zi(t,e)).length,o=!1;++r<i;){var a=...
  function Uo (line 1) | function Uo(e){return"function"!=typeof e.constructor||Yo(e)?{}:hr(kt(e))}
  function Vo (line 1) | function Vo(e){return ms(e)||gs(e)||!!($t&&e&&e[$t])}
  function zo (line 1) | function zo(e,t){var n=typeof e;return!!(t=null==t?j:t)&&("number"==n||"...
  function Ko (line 1) | function Ko(e,t,n){if(!Ss(n))return!1;var r=typeof t;return!!("number"==...
  function Go (line 1) | function Go(e,t){if(ms(e))return!1;var n=typeof e;return!("number"!=n&&"...
  function Xo (line 1) | function Xo(e){var t=jo(e),n=dr[t];if("function"!=typeof n||!(t in mr.pr...
  function Yo (line 1) | function Yo(e){var t=e&&e.constructor;return e===("function"==typeof t&&...
  function Jo (line 1) | function Jo(e){return e==e&&!Ss(e)}
  function Zo (line 1) | function Zo(e,t){return function(n){return null!=n&&n[e]===t&&(t!==o||e ...
  function ea (line 1) | function ea(e,t,n){return t=Vn(t===o?e.length-1:t,0),function(){for(var ...
  function ta (line 1) | function ta(e,t){return t.length<2?e:Qr(e,Ii(t,0,-1))}
  function na (line 1) | function na(e,t){if("__proto__"!=t)return e[t]}
  function aa (line 1) | function aa(e,t,n){var r=t+"";return oa(e,function(e,t){var n=t.length;i...
  function sa (line 1) | function sa(e){var t=0,n=0;return function(){var r=Kn(),i=I-(r-n);if(n=r...
  function ua (line 1) | function ua(e,t){var n=-1,r=e.length,i=r-1;for(t=t===o?r:t;++n<t;){var a...
  function la (line 1) | function la(e){if("string"==typeof e||Ps(e))return e;var t=e+"";return"0...
  function fa (line 1) | function fa(e){if(null!=e){try{return ct.call(e)}catch(e){}try{return e+...
  function pa (line 1) | function pa(e){if(e instanceof mr)return e.clone();var t=new gr(e.__wrap...
  function ga (line 1) | function ga(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n...
  function ma (line 1) | function ma(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r-1;ret...
  function ya (line 1) | function ya(e){return null!=e&&e.length?Ur(e,1):[]}
  function _a (line 1) | function _a(e){return e&&e.length?e[0]:o}
  function Ea (line 1) | function Ea(e){var t=null==e?0:e.length;return t?e[t-1]:o}
  function Ca (line 1) | function Ca(e,t){return e&&e.length&&t&&t.length?_i(e,t):e}
  function Sa (line 1) | function Sa(e){return null==e?e:Qn.call(e)}
  function ka (line 1) | function ka(e){if(!e||!e.length)return[];var t=0;return e=Qt(e,function(...
  function Na (line 1) | function Na(e,t){if(!e||!e.length)return[];var n=ka(e);return null==t?n:...
  function Ma (line 1) | function Ma(e){var t=dr(e);return t.__chain__=!0,t}
  function Fa (line 1) | function Fa(e,t){return t(e)}
  function Va (line 1) | function Va(e,t){return(ms(e)?Kt:Mr)(e,Ro(t,3))}
  function za (line 1) | function za(e,t){return(ms(e)?Gt:Fr)(e,Ro(t,3))}
  function Qa (line 1) | function Qa(e,t){return(ms(e)?Zt:pi)(e,Ro(t,3))}
  function es (line 1) | function es(e,t,n){return t=n?o:t,t=e&&null==t?e.length:t,Co(e,x,o,o,o,o...
  function ts (line 1) | function ts(e,t){var n;if("function"!=typeof t)throw new it(u);return e=...
  function is (line 1) | function is(e,t,n){var r,i,a,s,c,l,f=0,p=!1,d=!1,h=!0;if("function"!=typ...
  function ss (line 1) | function ss(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)...
  function us (line 1) | function us(e){if("function"!=typeof e)throw new it(u);return function()...
  function ds (line 1) | function ds(e,t){return e===t||e!=e&&t!=t}
  function _s (line 1) | function _s(e){return null!=e&&As(e.length)&&!xs(e)}
  function bs (line 1) | function bs(e){return Os(e)&&_s(e)}
  function Es (line 1) | function Es(e){if(!Os(e))return!1;var t=Jr(e);return t==K||t==z||"string...
  function xs (line 1) | function xs(e){if(!Ss(e))return!1;var t=Jr(e);return t==G||t==X||t==B||t...
  function Cs (line 1) | function Cs(e){return"number"==typeof e&&e==Ws(e)}
  function As (line 1) | function As(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=j}
  function Ss (line 1) | function Ss(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}
  function Os (line 1) | function Os(e){return null!=e&&"object"==typeof e}
  function Is (line 1) | function Is(e){return"number"==typeof e||Os(e)&&Jr(e)==Y}
  function ks (line 1) | function ks(e){if(!Os(e)||Jr(e)!=Z)return!1;var t=kt(e);if(null===t)retu...
  function js (line 1) | function js(e){return"string"==typeof e||!ms(e)&&Os(e)&&Jr(e)==re}
  function Ps (line 1) | function Ps(e){return"symbol"==typeof e||Os(e)&&Jr(e)==ie}
  function Ms (line 1) | function Ms(e){if(!e)return[];if(_s(e))return js(e)?Nn(e):no(e);if(Ht&&e...
  function Fs (line 1) | function Fs(e){return e?(e=Bs(e))===L||e===-L?(e<0?-1:1)*P:e==e?e:0:0===...
  function Ws (line 1) | function Ws(e){var t=Fs(e),n=t%1;return t==t?n?t-n:t:0}
  function qs (line 1) | function qs(e){return e?jr(Ws(e),0,$):0}
  function Bs (line 1) | function Bs(e){if("number"==typeof e)return e;if(Ps(e))return R;if(Ss(e)...
  function Us (line 1) | function Us(e){return ro(e,ou(e))}
  function Vs (line 1) | function Vs(e){return null==e?"":Ri(e)}
  function Zs (line 1) | function Zs(e,t,n){var r=null==e?o:Qr(e,t);return r===o?n:r}
  function eu (line 1) | function eu(e,t){return null!=e&&Bo(e,t,ti)}
  function iu (line 1) | function iu(e){return _s(e)?Er(e):ci(e)}
  function ou (line 1) | function ou(e){return _s(e)?Er(e,!0):li(e)}
  function lu (line 1) | function lu(e,t){if(null==e)return{};var n=Zt(No(e),function(e){return[e...
  function du (line 1) | function du(e){return null==e?[]:yn(e,iu(e))}
  function vu (line 1) | function vu(e){return Eu(Vs(e).toLowerCase())}
  function gu (line 1) | function gu(e){return(e=Vs(e))&&e.replace(Xe,Tn).replace(_t,"")}
  function xu (line 1) | function xu(e,t,n){return e=Vs(e),(t=n?o:t)===o?function(e){return Et.te...
  function Su (line 1) | function Su(e){return function(){return e}}
  function Iu (line 1) | function Iu(e){return e}
  function ku (line 1) | function ku(e){return ui("function"==typeof e?e:Pr(e,p))}
  function ju (line 1) | function ju(e,t,n){var r=iu(t),i=Xr(t,r);null!=n||Ss(t)&&(i.length||!r.l...
  function Pu (line 1) | function Pu(){}
  function Mu (line 1) | function Mu(e){return Go(e)?pn(la(e)):function(e){return function(t){ret...
  function qu (line 1) | function qu(){return[]}
  function Bu (line 1) | function Bu(){return!1}
  function r (line 1) | function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function i (line 1) | function i(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}
  function o (line 1) | function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
  function a (line 1) | function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
  function n (line 1) | function n(t){var n=this,i=!1;return e(this).one(r.TRANSITION_END,functi...
  function t (line 1) | function t(e){this._element=e}
  function t (line 1) | function t(e){this._element=e}
  function o (line 1) | function o(t,n){this._items=null,this._interval=null,this._activeElement...
  function r (line 1) | function r(t,n){this._isTransitioning=!1,this._element=t,this._config=th...
  function u (line 1) | function u(e,t){this._element=e,this._popper=null,this._config=this._get...
  function r (line 1) | function r(e,t){this._config=this._getConfig(t),this._element=e,this._di...
  function o (line 1) | function o(e,t){if(void 0===n)throw new TypeError("Bootstrap tooltips re...
  function d (line 1) | function d(){return r.apply(this,arguments)||this}
  function n (line 1) | function n(t,n){var r=this;this._element=t,this._scrollElement="BODY"===...
  function t (line 1) | function t(e){this._element=e}
  function s (line 1) | function s(e){var t=new o(e),n=i(o.prototype.request,t);return r.extend(...
  function n (line 1) | function n(e){return!!e.constructor&&"function"==typeof e.constructor.is...
  function s (line 1) | function s(e){this.defaults=e,this.interceptors={request:new o,response:...
  function i (line 1) | function i(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(...
  function i (line 1) | function i(e){var r=e;return t&&(n.setAttribute("href",r),r=n.href),n.se...
  function i (line 1) | function i(){this.message="String contains an invalid character"}
  function i (line 1) | function i(){this.handlers=[]}
  function c (line 1) | function c(e){e.cancelToken&&e.cancelToken.throwIfRequested()}
  function i (line 1) | function i(e){if("function"!=typeof e)throw new TypeError("executor must...
  function i (line 1) | function i(e){return null==e}
  function o (line 1) | function o(e){return null!=e}
  function a (line 1) | function a(e){return!0===e}
  function s (line 1) | function s(e){return"string"==typeof e||"number"==typeof e||"symbol"==ty...
  function u (line 1) | function u(e){return null!==e&&"object"==typeof e}
  function l (line 1) | function l(e){return"[object Object]"===c.call(e)}
  function f (line 1) | function f(e){return"[object RegExp]"===c.call(e)}
  function p (line 1) | function p(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t...
  function d (line 1) | function d(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null...
  function h (line 1) | function h(e){var t=parseFloat(e);return isNaN(t)?e:t}
  function v (line 1) | function v(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i<r.len...
  function y (line 1) | function y(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(...
  function b (line 1) | function b(e,t){return _.call(e,t)}
  function w (line 1) | function w(e){var t=Object.create(null);return function(n){return t[n]||...
  function n (line 1) | function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e...
  function O (line 1) | function O(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n...
  function D (line 1) | function D(e,t){for(var n in t)e[n]=t[n];return e}
  function I (line 1) | function I(e){for(var t={},n=0;n<e.length;n++)e[n]&&D(t,e[n]);return t}
  function k (line 1) | function k(e,t,n){}
  function j (line 1) | function j(e,t){if(e===t)return!0;var n=u(e),r=u(t);if(!n||!r)return!n&&...
  function P (line 1) | function P(e,t){for(var n=0;n<e.length;n++)if(j(e[n],t))return n;return-1}
  function R (line 1) | function R(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments...
  function W (line 1) | function W(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,wr...
  function ie (line 1) | function ie(e){return"function"==typeof e&&/native code/.test(e.toString...
  function e (line 1) | function e(){this.set=Object.create(null)}
  function fe (line 1) | function fe(e){le.push(e),ce.target=e}
  function pe (line 1) | function pe(){le.pop(),ce.target=le[le.length-1]}
  function ge (line 1) | function ge(e){return new de(void 0,void 0,void 0,String(e))}
  function me (line 1) | function me(e){var t=new de(e.tag,e.data,e.children&&e.children.slice(),...
  function Te (line 1) | function Te(e){we=e}
  function xe (line 1) | function xe(e,t){var n;if(u(e)&&!(e instanceof de))return b(e,"__ob__")&...
  function Ce (line 1) | function Ce(e,t,n,r,i){var o=new ce,a=Object.getOwnPropertyDescriptor(e,...
  function Ae (line 1) | function Ae(e,t,n){if(Array.isArray(e)&&p(t))return e.length=Math.max(e....
  function Se (line 1) | function Se(e,t){if(Array.isArray(e)&&p(t))e.splice(t,1);else{var n=e.__...
  function De (line 1) | function De(e,t){if(!t)return e;for(var n,r,i,o=Object.keys(t),a=0;a<o.l...
  function Ie (line 1) | function Ie(e,t,n){return n?function(){var r="function"==typeof t?t.call...
  function ke (line 1) | function ke(e,t){return t?e?e.concat(t):Array.isArray(t)?t:[t]:e}
  function Ne (line 1) | function Ne(e,t,n,r){var i=Object.create(e||null);return t?D(i,t):i}
  function je (line 1) | function je(e,t,n){if("function"==typeof t&&(t=t.options),function(e,t){...
  function Pe (line 1) | function Pe(e,t,n,r){if("string"==typeof n){var i=e[t];if(b(i,n))return ...
  function Re (line 1) | function Re(e,t,n,r){var i=t[e],o=!b(n,e),a=n[e],s=Me(Boolean,i.type);if...
  function $e (line 1) | function $e(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return ...
  function He (line 1) | function He(e,t){return $e(e)===$e(t)}
  function Me (line 1) | function Me(e,t){if(!Array.isArray(t))return He(t,e)?0:-1;for(var n=0,r=...
  function Fe (line 1) | function Fe(e,t,n){if(t)for(var r=t;r=r.$parent;){var i=r.$options.error...
  function We (line 1) | function We(e,t,n){if(F.errorHandler)try{return F.errorHandler.call(null...
  function qe (line 1) | function qe(e,t,n){if(!V&&!z||"undefined"==typeof console)throw e;consol...
  function Ke (line 1) | function Ke(){ze=!1;var e=Ve.slice(0);Ve.length=0;for(var t=0;t<e.length...
  function Je (line 1) | function Je(e,t){var n;if(Ve.push(function(){if(e)try{e.call(t)}catch(e)...
  function et (line 1) | function et(e){!function e(t,n){var r,i;var o=Array.isArray(t);if(!o&&!u...
  function rt (line 1) | function rt(e){function t(){var e=arguments,n=t.fns;if(!Array.isArray(n)...
  function it (line 1) | function it(e,t,n,r,o,s){var u,c,l,f;for(u in e)c=e[u],l=t[u],f=nt(u),i(...
  function ot (line 1) | function ot(e,t,n){var r;e instanceof de&&(e=e.data.hook||(e.data.hook={...
  function at (line 1) | function at(e,t,n,r,i){if(o(t)){if(b(t,n))return e[n]=t[n],i||delete t[n...
  function st (line 1) | function st(e){return s(e)?[ge(e)]:Array.isArray(e)?function e(t,n){var ...
  function ut (line 1) | function ut(e){return o(e)&&o(e.text)&&!1===e.isComment}
  function ct (line 1) | function ct(e,t){return(e.__esModule||ae&&"Module"===e[Symbol.toStringTa...
  function lt (line 1) | function lt(e){return e.isComment&&e.asyncFactory}
  function ft (line 1) | function ft(e){if(Array.isArray(e))for(var t=0;t<e.length;t++){var n=e[t...
  function pt (line 1) | function pt(e,t){tt.$on(e,t)}
  function dt (line 1) | function dt(e,t){tt.$off(e,t)}
  function ht (line 1) | function ht(e,t){var n=tt;return function r(){null!==t.apply(null,argume...
  function vt (line 1) | function vt(e,t,n){tt=e,it(t,n||{},pt,dt,ht),tt=void 0}
  function gt (line 1) | function gt(e,t){var n={};if(!e)return n;for(var r=0,i=e.length;r<i;r++)...
  function mt (line 1) | function mt(e){return e.isComment&&!e.asyncFactory||" "===e.text}
  function yt (line 1) | function yt(e,t){t=t||{};for(var n=0;n<e.length;n++)Array.isArray(e[n])?...
  function bt (line 1) | function bt(e){var t=_t;return _t=e,function(){_t=t}}
  function wt (line 1) | function wt(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}
  function Tt (line 1) | function Tt(e,t){if(t){if(e._directInactive=!1,wt(e))return}else if(e._d...
  function Et (line 1) | function Et(e,t){fe();var n=e.$options[t];if(n)for(var r=0,i=n.length;r<...
  function It (line 1) | function It(){var e,t;for(Ot=!0,xt.sort(function(e,t){return e.id-t.id})...
  function jt (line 1) | function jt(e,t,n){Lt.get=function(){return this[t][n]},Lt.set=function(...
  function Pt (line 1) | function Pt(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){va...
  function $t (line 1) | function $t(e,t,n){var r=!ne();"function"==typeof n?(Lt.get=r?Ht(t):Mt(n...
  function Ht (line 1) | function Ht(e){return function(){var t=this._computedWatchers&&this._com...
  function Mt (line 1) | function Mt(e){return function(){return e.call(this,this)}}
  function Ft (line 1) | function Ft(e,t,n,r){return l(n)&&(r=n,n=n.handler),"string"==typeof n&&...
  function Wt (line 1) | function Wt(e,t){if(e){for(var n=Object.create(null),r=ae?Reflect.ownKey...
  function qt (line 1) | function qt(e,t){var n,r,i,a,s;if(Array.isArray(e)||"string"==typeof e)f...
  function Bt (line 1) | function Bt(e,t,n,r){var i,o=this.$scopedSlots[e];o?(n=n||{},r&&(n=D(D({...
  function Ut (line 1) | function Ut(e){return Pe(this.$options,"filters",e)||L}
  function Vt (line 1) | function Vt(e,t){return Array.isArray(e)?-1===e.indexOf(t):e!==t}
  function zt (line 1) | function zt(e,t,n,r,i){var o=F.keyCodes[t]||n;return i&&r&&!F.keyCodes[t...
  function Kt (line 1) | function Kt(e,t,n,r,i){if(n)if(u(n)){var o;Array.isArray(n)&&(n=I(n));va...
  function Gt (line 1) | function Gt(e,t){var n=this._staticTrees||(this._staticTrees=[]),r=n[e];...
  function Xt (line 1) | function Xt(e,t,n){return Qt(e,"__once__"+t+(n?"_"+n:""),!0),e}
  function Qt (line 1) | function Qt(e,t,n){if(Array.isArray(e))for(var r=0;r<e.length;r++)e[r]&&...
  function Yt (line 1) | function Yt(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}
  function Jt (line 1) | function Jt(e,t){if(t)if(l(t)){var n=e.on=e.on?D({},e.on):{};for(var r i...
  function Zt (line 1) | function Zt(e){e._o=Xt,e._n=h,e._s=d,e._l=qt,e._t=Bt,e._q=j,e._i=P,e._m=...
  function en (line 1) | function en(e,t,n,i,o){var s,u=o.options;b(i,"_uid")?(s=Object.create(i)...
  function tn (line 1) | function tn(e,t,n,r,i){var o=me(e);return o.fnContext=n,o.fnOptions=r,t....
  function nn (line 1) | function nn(e,t){for(var n in t)e[E(n)]=t[n]}
  function an (line 1) | function an(e,t,n,s,c){if(!i(e)){var l=n.$options._base;if(u(e)&&(e=l.ex...
  function sn (line 1) | function sn(e,t){var n=function(n,r){e(n,r),t(n,r)};return n._merged=!0,n}
  function ln (line 1) | function ln(e,t,n,r,c,l){return(Array.isArray(n)||s(n))&&(c=r,r=n,n=void...
  function pn (line 1) | function pn(e){var t=e.options;if(e.super){var n=pn(e.super);if(n!==e.su...
  function dn (line 1) | function dn(e,t,n){if(Array.isArray(e)){var r=[];n=Array.isArray(n)?n:[n...
  function hn (line 1) | function hn(e){this._init(e)}
  function vn (line 1) | function vn(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r...
  function gn (line 1) | function gn(e){return e&&(e.Ctor.options.name||e.tag)}
  function mn (line 1) | function mn(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"==typeo...
  function yn (line 1) | function yn(e,t){var n=e.cache,r=e.keys,i=e._vnode;for(var o in n){var a...
  function _n (line 1) | function _n(e,t,n,r){var i=e[t];!i||r&&i.tag===r.tag||i.componentInstanc...
  function r (line 1) | function r(){n.$off(e,r),t.apply(n,arguments)}
  function kn (line 1) | function kn(e){for(var t=e.data,n=e,r=e;o(r.componentInstance);)(r=r.com...
  function Nn (line 1) | function Nn(e,t){return{staticClass:Ln(e.staticClass,t.staticClass),clas...
  function Ln (line 1) | function Ln(e,t){return e?t?e+" "+t:e:t||""}
  function jn (line 1) | function jn(e){return Array.isArray(e)?function(e){for(var t,n="",r=0,i=...
  function Mn (line 1) | function Mn(e){return $n(e)?"svg":"math"===e?"math":void 0}
  function qn (line 1) | function qn(e){if("string"==typeof e){var t=document.querySelector(e);re...
  function Vn (line 1) | function Vn(e,t){var n=e.data.ref;if(o(n)){var r=e.context,i=e.component...
  function Gn (line 1) | function Gn(e,t){return e.key===t.key&&(e.tag===t.tag&&e.isComment===t.i...
  function Xn (line 1) | function Xn(e,t,n){var r,i,a={};for(r=t;r<=n;++r)o(i=e[r].key)&&(a[i]=r)...
  function Yn (line 1) | function Yn(e,t){(e.data.directives||t.data.directives)&&function(e,t){v...
  function Zn (line 1) | function Zn(e,t){var n,r,i=Object.create(null);if(!e)return i;for(n=0;n<...
  function er (line 1) | function er(e){return e.rawName||e.name+"."+Object.keys(e.modifiers||{})...
  function tr (line 1) | function tr(e,t,n,r,i){var o=e.def&&e.def[t];if(o)try{o(n.elm,e,n,r,i)}c...
  function rr (line 1) | function rr(e,t){var n=t.componentOptions;if(!(o(n)&&!1===n.Ctor.options...
  function ir (line 1) | function ir(e,t,n){e.tagName.indexOf("-")>-1?or(e,t,n):An(t)?In(n)?e.rem...
  function or (line 1) | function or(e,t,n){if(In(n))e.removeAttribute(t);else{if(X&&!Q&&("TEXTAR...
  function sr (line 1) | function sr(e,t){var n=t.elm,r=t.data,a=e.data;if(!(i(r.staticClass)&&i(...
  function gr (line 1) | function gr(e){var t,n,r,i,o,a=!1,s=!1,u=!1,c=!1,l=0,f=0,p=0,d=0;for(r=0...
  function mr (line 1) | function mr(e,t){var n=t.indexOf("(");if(n<0)return'_f("'+t+'")('+e+")";...
  function yr (line 1) | function yr(e){console.error("[Vue compiler]: "+e)}
  function _r (line 1) | function _r(e,t){return e?e.map(function(e){return e[t]}).filter(functio...
  function br (line 1) | function br(e,t,n){(e.props||(e.props=[])).push({name:t,value:n}),e.plai...
  function wr (line 1) | function wr(e,t,n){(e.attrs||(e.attrs=[])).push({name:t,value:n}),e.plai...
  function Tr (line 1) | function Tr(e,t,n){e.attrsMap[t]=n,e.attrsList.push({name:t,value:n})}
  function Er (line 1) | function Er(e,t,n,r,i,o){(e.directives||(e.directives=[])).push({name:t,...
  function xr (line 1) | function xr(e,t,n,i,o,a){var s;i=i||r,"click"===t&&(i.right?(t="contextm...
  function Cr (line 1) | function Cr(e,t,n){var r=Ar(e,":"+t)||Ar(e,"v-bind:"+t);if(null!=r)retur...
  function Ar (line 1) | function Ar(e,t,n){var r;if(null!=(r=e.attrsMap[t]))for(var i=e.attrsLis...
  function Sr (line 1) | function Sr(e,t,n){var r=n||{},i=r.number,o="$$v";r.trim&&(o="(typeof $$...
  function Or (line 1) | function Or(e,t){var n=function(e){if(e=e.trim(),ur=e.length,e.indexOf("...
  function Dr (line 1) | function Dr(){return cr.charCodeAt(++fr)}
  function Ir (line 1) | function Ir(){return fr>=ur}
  function kr (line 1) | function kr(e){return 34===e||39===e}
  function Nr (line 1) | function Nr(e){var t=1;for(pr=fr;!Ir();)if(kr(e=Dr()))Lr(e);else if(91==...
  function Lr (line 1) | function Lr(e){for(var t=e;!Ir()&&(e=Dr())!==t;);}
  function $r (line 1) | function $r(e,t,n){var r=jr;return function i(){null!==t.apply(null,argu...
  function Hr (line 1) | function Hr(e,t,n,r){var i;t=(i=t)._withTask||(i._withTask=function(){Ge...
  function Mr (line 1) | function Mr(e,t,n,r){(r||jr).removeEventListener(e,t._withTask||t,n)}
  function Fr (line 1) | function Fr(e,t){if(!i(e.data.on)||!i(t.data.on)){var n=t.data.on||{},r=...
  function qr (line 1) | function qr(e,t){if(!i(e.data.domProps)||!i(t.data.domProps)){var n,r,a=...
  function Br (line 1) | function Br(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t...
  function zr (line 1) | function zr(e){var t=Kr(e.style);return e.staticStyle?D(e.staticStyle,t):t}
  function Kr (line 1) | function Kr(e){return Array.isArray(e)?I(e):"string"==typeof e?Vr(e):e}
  function ei (line 1) | function ei(e,t){var n=t.data,r=e.data;if(!(i(n.staticStyle)&&i(n.style)...
  function ri (line 1) | function ri(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.s...
  function ii (line 1) | function ii(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.s...
  function oi (line 1) | function oi(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&D...
  function vi (line 1) | function vi(e){hi(function(){hi(e)})}
  function gi (line 1) | function gi(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n...
  function mi (line 1) | function mi(e,t){e._transitionClasses&&y(e._transitionClasses,t),ii(e,t)}
  function yi (line 1) | function yi(e,t,n){var r=bi(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!...
  function bi (line 1) | function bi(e,t){var n,r=window.getComputedStyle(e),i=(r[li+"Delay"]||""...
  function wi (line 1) | function wi(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max.a...
  function Ti (line 1) | function Ti(e){return 1e3*Number(e.slice(0,-1).replace(",","."))}
  function Ei (line 1) | function Ei(e,t){var n=e.elm;o(n._leaveCb)&&(n._leaveCb.cancelled=!0,n._...
  function xi (line 1) | function xi(e,t){var n=e.elm;o(n._enterCb)&&(n._enterCb.cancelled=!0,n._...
  function Ci (line 1) | function Ci(e){return"number"==typeof e&&!isNaN(e)}
  function Ai (line 1) | function Ai(e){if(i(e))return!1;var t=e.fns;return o(t)?Ai(Array.isArray...
  function Si (line 1) | function Si(e,t){!0!==t.data.show&&Ei(t)}
  function l (line 1) | function l(e){var t=c.parentNode(e);o(t)&&c.removeChild(t,e)}
  function f (line 1) | function f(e,t,n,i,s,u,l){if(o(e.elm)&&o(u)&&(e=u[l]=me(e)),e.isRootInse...
  function p (line 1) | function p(e,t){o(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingI...
  function d (line 1) | function d(e,t,n){o(e)&&(o(n)?c.parentNode(n)===e&&c.insertBefore(e,t,n)...
  function h (line 1) | function h(e,t,n){if(Array.isArray(t))for(var r=0;r<t.length;++r)f(t[r],...
  function g (line 1) | function g(e){for(;e.componentInstance;)e=e.componentInstance._vnode;ret...
  function m (line 1) | function m(e,n){for(var i=0;i<r.create.length;++i)r.create[i](zn,e);o(t=...
  function y (line 1) | function y(e){var t;if(o(t=e.fnScopeId))c.setStyleScope(e.elm,t);else fo...
  function _ (line 1) | function _(e,t,n,r,i,o){for(;r<=i;++r)f(n[r],o,e,t,!1,n,r)}
  function b (line 1) | function b(e){var t,n,i=e.data;if(o(i))for(o(t=i.hook)&&o(t=t.destroy)&&...
  function w (line 1) | function w(e,t,n,r){for(;n<=r;++n){var i=t[n];o(i)&&(o(i.tag)?(T(i),b(i)...
  function T (line 1) | function T(e,t){if(o(t)||o(e.data)){var n,i=r.remove.length+1;for(o(t)?t...
  function E (line 1) | function E(e,t,n,r){for(var i=n;i<r;i++){var a=t[i];if(o(a)&&Gn(e,a))ret...
  function x (line 1) | function x(e,t,n,s,u,l){if(e!==t){o(t.elm)&&o(s)&&(t=s[u]=me(t));var p=t...
  function C (line 1) | function C(e,t,n){if(a(n)&&o(e.parent))e.parent.data.pendingInsert=t;els...
  function S (line 1) | function S(e,t,n,r){var i,s=t.tag,u=t.data,c=t.children;if(r=r||u&&u.pre...
  function Ii (line 1) | function Ii(e,t,n){ki(e,t,n),(X||Y)&&setTimeout(function(){ki(e,t,n)},0)}
  function ki (line 1) | function ki(e,t,n){var r=t.value,i=e.multiple;if(!i||Array.isArray(r)){f...
  function Ni (line 1) | function Ni(e,t){return t.every(function(t){return!j(t,e)})}
  function Li (line 1) | function Li(e){return"_value"in e?e._value:e.value}
  function ji (line 1) | function ji(e){e.target.composing=!0}
  function Pi (line 1) | function Pi(e){e.target.composing&&(e.target.composing=!1,Ri(e.target,"i...
  function Ri (line 1) | function Ri(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,...
  function $i (line 1) | function $i(e){return!e.componentInstance||e.data&&e.data.transition?e:$...
  function Fi (line 1) | function Fi(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abst...
  function Wi (line 1) | function Wi(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];...
  function qi (line 1) | function qi(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{...
  function Ki (line 1) | function Ki(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._ent...
  function Gi (line 1) | function Gi(e){e.data.newPos=e.elm.getBoundingClientRect()}
  function Xi (line 1) | function Xi(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,i=t.top-...
  function xo (line 1) | function xo(e,t){var n=t?wo:bo;return e.replace(n,function(e){return _o[...
  function qo (line 1) | function qo(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:Go(t),parent...
  function Bo (line 1) | function Bo(e,t){Co=t.warn||yr,Io=t.isPreTag||N,ko=t.mustUseProp||N,No=t...
  function Uo (line 1) | function Uo(e,t){var n,r;!function(e){var t=Cr(e,"key");if(t){e.key=t}}(...
  function Vo (line 1) | function Vo(e){var t;if(t=Ar(e,"v-for")){var n=function(e){var t=e.match...
  function zo (line 1) | function zo(e,t){e.ifConditions||(e.ifConditions=[]),e.ifConditions.push...
  function Ko (line 1) | function Ko(e){var t=e.match(Fo);if(t){var n={};return t.forEach(functio...
  function Go (line 1) | function Go(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n].name]=e[n].val...
  function Yo (line 1) | function Yo(e){return qo(e.tag,e.attrsList.slice(),e.parent)}
  function ra (line 1) | function ra(e,t){e&&(Zo=na(t.staticKeys||""),ea=t.isReservedTag||N,funct...
  function la (line 1) | function la(e,t){var n=t?"nativeOn:{":"on:{";for(var r in e)n+='"'+r+'":...
  function fa (line 1) | function fa(e,t){if(!t)return"function(){}";if(Array.isArray(t))return"[...
  function pa (line 1) | function pa(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var...
  function va (line 1) | function va(e,t){var n=new ha(t);return{render:"with(this){return "+(e?g...
  function ga (line 1) | function ga(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&...
  function ma (line 1) | function ma(e,t){e.staticProcessed=!0;var n=t.pre;return e.pre&&(t.pre=e...
  function ya (line 1) | function ya(e,t){if(e.onceProcessed=!0,e.if&&!e.ifProcessed)return _a(e,...
  function _a (line 1) | function _a(e,t,n,r){return e.ifProcessed=!0,function e(t,n,r,i){if(!t.l...
  function ba (line 1) | function ba(e,t){var n="{",r=function(e,t){var n=e.directives;if(!n)retu...
  function wa (line 1) | function wa(e,t,n){return t.for&&!t.forProcessed?function(e,t,n){var r=t...
  function Ta (line 1) | function Ta(e,t,n,r,i){var o=e.children;if(o.length){var a=o[0];if(1===o...
  function Ea (line 1) | function Ea(e){return void 0!==e.for||"template"===e.tag||"slot"===e.tag}
  function xa (line 1) | function xa(e,t){return 1===e.type?ga(e,t):3===e.type&&e.isComment?(r=e,...
  function Ca (line 1) | function Ca(e){for(var t="",n=0;n<e.length;n++){var r=e[n];t+='"'+r.name...
  function Aa (line 1) | function Aa(e){return e.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"...
  function Sa (line 1) | function Sa(e,t){try{return new Function(e)}catch(n){return t.push({err:...
  function Oa (line 1) | function Oa(e){var t=Object.create(null);return function(n,r,i){(r=D({},...
  function t (line 1) | function t(t,n){var r=Object.create(e),i=[],o=[];if(r.warn=function(e,t)...
  function La (line 1) | function La(e){return(Ia=Ia||document.createElement("div")).innerHTML=e?...
  function o (line 1) | function o(e,t){this._id=e,this._clearFn=t}
  function d (line 1) | function d(e){delete c[e]}
  function h (line 1) | function h(e){if(l)setTimeout(h,0,e);else{var t=c[e];if(t){l=!0;try{!fun...

FILE: tests/CreatesApplication.php
  type CreatesApplication (line 7) | trait CreatesApplication
    method createApplication (line 14) | public function createApplication()

FILE: tests/Feature/ExampleTest.php
  class ExampleTest (line 8) | class ExampleTest extends TestCase
    method testBasicTest (line 15) | public function testBasicTest()

FILE: tests/TestCase.php
  class TestCase (line 7) | abstract class TestCase extends BaseTestCase

FILE: tests/Unit/ExampleTest.php
  class ExampleTest (line 8) | class ExampleTest extends TestCase
    method testBasicTest (line 15) | public function testBasicTest()
Condensed preview — 179 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,302K chars).
[
  {
    "path": ".editorconfig",
    "chars": 213,
    "preview": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\nindent_style = space\nindent_size = 4\ntrim_"
  },
  {
    "path": ".gitattributes",
    "chars": 143,
    "preview": "*.css linguist-language=php\r\n*.less linguist-language=php\r\n*.js linguist-language=php\r\n*.html linguist-language=php\r\nCHA"
  },
  {
    "path": ".gitignore",
    "chars": 1468,
    "preview": ".idea\n/node_modules\n/public/hot\n/public/storage\n/storage/*.key\n/vendor\n/app/Console/Commands/DBtool.php\n/app/Console/Com"
  },
  {
    "path": "README.md",
    "chars": 971,
    "preview": "<p align=\"center\"><img src=\"https://github.com/guyueyingmu/avbook/blob/master/public/avbook/logo.png?raw=true\"></p>\n\n<p "
  },
  {
    "path": "app/Console/Commands/AvmooCrawler.php",
    "chars": 14088,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\n\n\nclass AvmooCrawler extends BaseCrawler\n{\n    /**\n     * The name and signature "
  },
  {
    "path": "app/Console/Commands/BaseCrawler.php",
    "chars": 12476,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse GuzzleHttp\\Pool;\nuse GuzzleHttp\\Client;\nuse GuzzleHttp\\Psr7\\Request;\nuse Ill"
  },
  {
    "path": "app/Console/Commands/Bttool.php",
    "chars": 6266,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nclass Bttool extends Command\n{\n    /**\n     * Th"
  },
  {
    "path": "app/Console/Commands/JavbusCrawler.php",
    "chars": 31545,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\nuse GuzzleHttp\\Psr7\\Request;\nclass JavbusCrawler extends BaseCrawler\n{\n    /**\n  "
  },
  {
    "path": "app/Console/Commands/JavlibraryCrawler.php",
    "chars": 16358,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\nuse GuzzleHttp\\Psr7\\Request;\n\nuse GuzzleHttp\\Pool;\nuse GuzzleHttp\\Client;\nclass J"
  },
  {
    "path": "app/Console/Commands/Scandir.php",
    "chars": 2461,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse TheSeer\\DirectoryScanner\\DirectoryScanner;\nu"
  },
  {
    "path": "app/Console/Commands/SendEmails.php",
    "chars": 676,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\n\nclass SendEmails extends Command\n{\n    /**\n    "
  },
  {
    "path": "app/Console/Kernel.php",
    "chars": 848,
    "preview": "<?php\n\nnamespace App\\Console;\n\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as C"
  },
  {
    "path": "app/Console/Tools/MedooEx.php",
    "chars": 2692,
    "preview": "<?php\n/**\n * Created by PhpStorm.\n * User: https://github.com/guyueyingmu\n * Date: 2019/5/3\n * Time: 9:08\n */\n\nnamespace"
  },
  {
    "path": "app/Exceptions/Handler.php",
    "chars": 1058,
    "preview": "<?php\n\nnamespace App\\Exceptions;\n\nuse Exception;\nuse Illuminate\\Foundation\\Exceptions\\Handler as ExceptionHandler;\n\nclas"
  },
  {
    "path": "app/Http/Controllers/API/MovieinfoController.php",
    "chars": 12842,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\API;\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Support\\Facades\\DB;\nuse I"
  },
  {
    "path": "app/Http/Controllers/Auth/ForgotPasswordController.php",
    "chars": 834,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\SendsPa"
  },
  {
    "path": "app/Http/Controllers/Auth/LoginController.php",
    "chars": 943,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\Authent"
  },
  {
    "path": "app/Http/Controllers/Auth/RegisterController.php",
    "chars": 1891,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\User;\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Support\\F"
  },
  {
    "path": "app/Http/Controllers/Auth/ResetPasswordController.php",
    "chars": 952,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\ResetsP"
  },
  {
    "path": "app/Http/Controllers/Auth/VerificationController.php",
    "chars": 1071,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\Verifie"
  },
  {
    "path": "app/Http/Controllers/AvbookController.php",
    "chars": 17615,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers;\nuse App\\Models\\Javlibrary;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Http"
  },
  {
    "path": "app/Http/Controllers/Controller.php",
    "chars": 361,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Foundation\\Bus\\DispatchesJobs;\nuse Illuminate\\Routing\\Controller "
  },
  {
    "path": "app/Http/Kernel.php",
    "chars": 2823,
    "preview": "<?php\n\nnamespace App\\Http;\n\nuse Illuminate\\Foundation\\Http\\Kernel as HttpKernel;\n\nclass Kernel extends HttpKernel\n{\n    "
  },
  {
    "path": "app/Http/Middleware/Authenticate.php",
    "chars": 464,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Auth\\Middleware\\Authenticate as Middleware;\n\nclass Authenticate ex"
  },
  {
    "path": "app/Http/Middleware/CheckForMaintenanceMode.php",
    "chars": 335,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode as Middleware;\n"
  },
  {
    "path": "app/Http/Middleware/EncryptCookies.php",
    "chars": 294,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Cookie\\Middleware\\EncryptCookies as Middleware;\n\nclass EncryptCook"
  },
  {
    "path": "app/Http/Middleware/RedirectIfAuthenticated.php",
    "chars": 523,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass RedirectIfAuthenticated\n"
  },
  {
    "path": "app/Http/Middleware/TrimStrings.php",
    "chars": 340,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\TrimStrings as Middleware;\n\nclass TrimS"
  },
  {
    "path": "app/Http/Middleware/TrustProxies.php",
    "chars": 429,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Http\\Request;\nuse Fideloper\\Proxy\\TrustProxies as Middleware;\n\ncla"
  },
  {
    "path": "app/Http/Middleware/VerifyCsrfToken.php",
    "chars": 463,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken as Middleware;\n\nclass V"
  },
  {
    "path": "app/Models/Actresses.php",
    "chars": 181,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Actresses extends Model\n{\n    protected $ta"
  },
  {
    "path": "app/Models/Avbooks.php",
    "chars": 184,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Avbooks extends Model\n{\n    protected $tabl"
  },
  {
    "path": "app/Models/Director.php",
    "chars": 184,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Director extends Model\n{\n    protected $tab"
  },
  {
    "path": "app/Models/Javbus.php",
    "chars": 180,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Javbus extends Model\n{\n    protected $table"
  },
  {
    "path": "app/Models/Javlibrary.php",
    "chars": 309,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Javlibrary extends Model\n{\n    protected $t"
  },
  {
    "path": "app/Models/Label.php",
    "chars": 178,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Label extends Model\n{\n    protected $table "
  },
  {
    "path": "app/Models/Magnet.php",
    "chars": 181,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Magnet extends Model\n{\n    protected $table"
  },
  {
    "path": "app/Models/Movies.php",
    "chars": 772,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Movies extends Model\n{\n    protected $table"
  },
  {
    "path": "app/Models/Series.php",
    "chars": 180,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Series extends Model\n{\n    protected $table"
  },
  {
    "path": "app/Models/Studio.php",
    "chars": 180,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Studio extends Model\n{\n    protected $table"
  },
  {
    "path": "app/Providers/AppServiceProvider.php",
    "chars": 403,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\ServiceProvider;\n\nclass AppServiceProvider extends ServiceProvid"
  },
  {
    "path": "app/Providers/AuthServiceProvider.php",
    "chars": 578,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illuminate\\Foundation\\Support\\Providers\\AuthSe"
  },
  {
    "path": "app/Providers/BroadcastServiceProvider.php",
    "chars": 380,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\ServiceProvider;\nuse Illuminate\\Support\\Facades\\Broadcast;\n\nclas"
  },
  {
    "path": "app/Providers/EventServiceProvider.php",
    "chars": 710,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Event;\nuse Illuminate\\Auth\\Events\\Registered;\nuse Illumi"
  },
  {
    "path": "app/Providers/RouteServiceProvider.php",
    "chars": 1529,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Route;\nuse Illuminate\\Foundation\\Support\\Providers\\Route"
  },
  {
    "path": "app/Tools/CrawlerUpdate.php",
    "chars": 2322,
    "preview": "<?php\n/**\n * Created by PhpStorm.\n * User: https://github.com/guyueyingmu\n * Date: 2019/5/7\n * Time: 21:32\n */\n\nnamespac"
  },
  {
    "path": "app/User.php",
    "chars": 734,
    "preview": "<?php\n\nnamespace App;\n\nuse Illuminate\\Notifications\\Notifiable;\nuse Illuminate\\Contracts\\Auth\\MustVerifyEmail;\nuse Illum"
  },
  {
    "path": "artisan",
    "chars": 1686,
    "preview": "#!/usr/bin/env php\n<?php\n\ndefine('LARAVEL_START', microtime(true));\n\n/*\n|-----------------------------------------------"
  },
  {
    "path": "bootstrap/app.php",
    "chars": 1620,
    "preview": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Create The Application\n|--------"
  },
  {
    "path": "bootstrap/cache/.gitignore",
    "chars": 14,
    "preview": "*\n!.gitignore\n"
  },
  {
    "path": "composer.json",
    "chars": 1947,
    "preview": "{\n    \"name\": \"laravel/laravel\",\n    \"type\": \"project\",\n    \"description\": \"The Laravel Framework.\",\n    \"keywords\": [\n "
  },
  {
    "path": "config/app.php",
    "chars": 9174,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Applicatio"
  },
  {
    "path": "config/auth.php",
    "chars": 3280,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentica"
  },
  {
    "path": "config/avbook.php",
    "chars": 613,
    "preview": "<?php\nreturn [\n    'title' => 'Avbook',\n    'cen_per_page' => 30,\n    'filter' =>[\n        'hd=1'=>'已有高清',\n        'sub="
  },
  {
    "path": "config/broadcasting.php",
    "chars": 1604,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Br"
  },
  {
    "path": "config/cache.php",
    "chars": 3014,
    "preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------"
  },
  {
    "path": "config/database.php",
    "chars": 4668,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Da"
  },
  {
    "path": "config/filesystems.php",
    "chars": 2133,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Fi"
  },
  {
    "path": "config/hashing.php",
    "chars": 1571,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Ha"
  },
  {
    "path": "config/logging.php",
    "chars": 2657,
    "preview": "<?php\n\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Handler\\SyslogUdpHandler;\n\nreturn [\n\n    /*\n    |-----------------"
  },
  {
    "path": "config/mail.php",
    "chars": 4701,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Mail Drive"
  },
  {
    "path": "config/queue.php",
    "chars": 2657,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Qu"
  },
  {
    "path": "config/services.php",
    "chars": 1317,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Third Part"
  },
  {
    "path": "config/session.php",
    "chars": 6972,
    "preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------"
  },
  {
    "path": "config/urlconfig.php",
    "chars": 160,
    "preview": "<?php\n\nreturn ['avmoohost'=>'avmoo.asia',\n    'javbushost'=>'www.javbus.life',\n    'javlibhost'=>'www.c32r.com',\n    'bt"
  },
  {
    "path": "config/view.php",
    "chars": 1053,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | View Stora"
  },
  {
    "path": "database/.gitignore",
    "chars": 9,
    "preview": "*.sqlite\n"
  },
  {
    "path": "database/factories/UserFactory.php",
    "chars": 816,
    "preview": "<?php\n\nuse App\\User;\nuse Illuminate\\Support\\Str;\nuse Faker\\Generator as Faker;\n\n/*\n|------------------------------------"
  },
  {
    "path": "database/migrations/2019_05_11_083515_create_avbook_avmoo_director_table.php",
    "chars": 604,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateAvbookAvmooD"
  },
  {
    "path": "database/migrations/2019_05_11_083515_create_avbook_avmoo_genre_table.php",
    "chars": 552,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateAvbookAvmooG"
  },
  {
    "path": "database/migrations/2019_05_11_083515_create_avbook_avmoo_label_table.php",
    "chars": 592,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateAvbookAvmooL"
  },
  {
    "path": "database/migrations/2019_05_11_083515_create_avbook_avmoo_movie_table.php",
    "chars": 2229,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateAvbookAvmooM"
  },
  {
    "path": "database/migrations/2019_05_11_083515_create_avbook_avmoo_series_table.php",
    "chars": 621,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateAvbookAvmooS"
  },
  {
    "path": "database/migrations/2019_05_11_083515_create_avbook_avmoo_star_table.php",
    "chars": 1280,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateAvbookAvmooS"
  },
  {
    "path": "database/migrations/2019_05_11_083515_create_avbook_avmoo_studio_table.php",
    "chars": 621,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateAvbookAvmooS"
  },
  {
    "path": "database/migrations/2019_05_11_083515_create_avbook_crawler_404_table.php",
    "chars": 644,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateAvbookCrawle"
  },
  {
    "path": "database/migrations/2019_05_11_083515_create_avbook_javbus_magnet_table.php",
    "chars": 1020,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateAvbookJavbus"
  },
  {
    "path": "database/migrations/2019_05_11_083515_create_avbook_javbus_movie_table.php",
    "chars": 1785,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateAvbookJavbus"
  },
  {
    "path": "database/migrations/2019_05_11_083515_create_avbook_javbus_series_table.php",
    "chars": 624,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateAvbookJavbus"
  },
  {
    "path": "database/migrations/2019_05_11_083515_create_avbook_javbus_star_table.php",
    "chars": 1283,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateAvbookJavbus"
  },
  {
    "path": "database/migrations/2019_05_11_083515_create_avbook_javbus_studio_table.php",
    "chars": 624,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateAvbookJavbus"
  },
  {
    "path": "database/migrations/2019_07_02_090723_create_avbook_javlib_genre_table.php",
    "chars": 677,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateAvbookJavlib"
  },
  {
    "path": "database/migrations/2019_07_02_090723_create_avbook_javlib_movie_table.php",
    "chars": 1604,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateAvbookJavlib"
  },
  {
    "path": "database/migrations/2019_07_02_090723_create_avbook_javlib_vid_table.php",
    "chars": 480,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateAvbookJavlib"
  },
  {
    "path": "database/seeds/DatabaseSeeder.php",
    "chars": 250,
    "preview": "<?php\n\nuse Illuminate\\Database\\Seeder;\n\nclass DatabaseSeeder extends Seeder\n{\n    /**\n     * Seed the application's data"
  },
  {
    "path": "newbra.sh",
    "chars": 160,
    "preview": "git checkout --orphan latest_branch  ;\ngit add -A  ;\ngit commit -am \"commit m1\"  ;\ngit branch -D master   ;\ngit branch -"
  },
  {
    "path": "package.json",
    "chars": 1198,
    "preview": "{\n    \"private\": true,\n    \"scripts\": {\n        \"dev\": \"npm run development\",\n        \"development\": \"cross-env NODE_ENV"
  },
  {
    "path": "phpunit.xml",
    "chars": 1156,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit backupGlobals=\"false\"\n         backupStaticAttributes=\"false\"\n         b"
  },
  {
    "path": "public/.htaccess",
    "chars": 593,
    "preview": "<IfModule mod_rewrite.c>\n    <IfModule mod_negotiation.c>\n        Options -MultiViews -Indexes\n    </IfModule>\n\n    Rewr"
  },
  {
    "path": "public/avbook/StackBlur.js",
    "chars": 16524,
    "preview": "/*\n\nStackBlur - a fast almost Gaussian Blur For Canvas\n\nVersion: \t0.5\nAuthor:\t\tMario Klingemann\nContact: \tmario@quasimon"
  },
  {
    "path": "public/avbook/ads.js",
    "chars": 884,
    "preview": "if(top===self) var p=document.URL; else var p=document.referrer;var dt=new Date().getTime();\nvar exoDocumentProtocol = ("
  },
  {
    "path": "public/avbook/auto.js",
    "chars": 25458,
    "preview": "// ==UserScript==\n// @name         JAV老司机\n// @namespace    https://sleazyfork.org/zh-CN/users/85065\n// @version      1.0"
  },
  {
    "path": "public/avbook/base.css",
    "chars": 5723,
    "preview": "a, a:focus\n{\n    text-decoration: none!important;\n}\n\nbody {\n    background-color: #EEEEEB;\n    padding-top: 50px;\n    fo"
  },
  {
    "path": "public/avbook/base.js",
    "chars": 595,
    "preview": "(function($) {\n\n    $(document).ready(function() {\n\n\n        if ($('body').height() > $(window).height()) {\n            "
  },
  {
    "path": "public/avbook/base2.css",
    "chars": 5723,
    "preview": "a, a:focus\n{\n    text-decoration: none!important;\n}\n\nbody {\n    background-color: #EEEEEB;\n    padding-top: 50px;\n    fo"
  },
  {
    "path": "public/avbook/base2.js",
    "chars": 595,
    "preview": "(function($) {\n\n    $(document).ready(function() {\n\n\n        if ($('body').height() > $(window).height()) {\n            "
  },
  {
    "path": "public/avbook/blurmask.css",
    "chars": 1070,
    "preview": ".blur {\t\n    filter: url(blur.svg#blur); /* FireFox, Chrome, Opera */\n     \n\t-o-filter: blur(3px);  \n    -webkit-filter:"
  },
  {
    "path": "public/avbook/bootstrap-hover-dropdown.js",
    "chars": 1374,
    "preview": "!function(e,n){var o=e();e.fn.dropdownHover=function(t){return\"ontouchstart\"in document?this:(o=o.add(this.parent()),thi"
  },
  {
    "path": "public/avbook/focus.js",
    "chars": 1370,
    "preview": "$(function(){ \n\tvar inputEl = $(\"#search-input\"),defVal = inputEl.val(); \n\tinputEl.bind({\n\t\tfocus: function() { \n\t\t\tvar "
  },
  {
    "path": "public/avbook/gallery.js",
    "chars": 2557,
    "preview": "$(document).ready(function() {\n    if ($.cookie(\"starinfo\") == \"glyphicon glyphicon-minus\") {\n        $(\"#star-div\").sho"
  },
  {
    "path": "public/avbook/gallery2.js",
    "chars": 2354,
    "preview": "$(document).ready(function() {\n    if ($.cookie(\"starinfo\") == \"glyphicon glyphicon-minus\") {\n        $(\"#star-div\").sho"
  },
  {
    "path": "public/avbook/genre.css",
    "chars": 776,
    "preview": ".genre-box a {\n\tdisplay:block;\n\tcolor: #1D1A18;\n}\n\n.genre-box a:hover,.genre-box a:focus {\n    color: #FFF;\n\tbackground-"
  },
  {
    "path": "public/avbook/magnific-popup.css",
    "chars": 7686,
    "preview": "/* Magnific Popup CSS */\n.mfp-bg {\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 1042;\n  overflow: hidd"
  },
  {
    "path": "public/avbook/main.css",
    "chars": 1530,
    "preview": "#waterfall\n{\n    margin: 10px auto;\n}\n\n#waterfall .item {\n    float:left;\n}\n\n.avatar-box\n{\n\tdisplay:block;\n    backgroun"
  },
  {
    "path": "public/avbook/mask.js",
    "chars": 1468,
    "preview": "   var blurimg=0;\n   var blurimgclass='blur';\n  // $(\".hh3\").addClass(\"blur\");\n   if(blurimg){\n\t   $(\"img\").addClass(\"bl"
  },
  {
    "path": "public/avbook/movie-box.css",
    "chars": 826,
    "preview": ".movie-box\n{\n\tdisplay:block;\n\tbackground-color: #fff;\n\toverflow:hidden;\n\tmargin: 10px;\n\twidth: 167px;\n    padding:0px;\n "
  },
  {
    "path": "public/avbook/movie.css",
    "chars": 3871,
    "preview": ".movie\n{\n\tmargin: 0px;\n\tpadding: 15px 0px;\n\toverflow: hidden;\n\tbackground-color: #fff;\n\tbox-shadow: 0 1px 3px rgba(0,0,0"
  },
  {
    "path": "public/avbook/nav.overlay.css",
    "chars": 1216,
    "preview": "/* Overlay style */\n.overlay {\n\tposition: fixed;\n\tz-index:999;\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tbackgrou"
  },
  {
    "path": "public/avbook/nav.overlay.js",
    "chars": 526,
    "preview": "(function($) {\n\t\tvar CBody = $('div.container'),\n        TBtn = $('.trigger-overlay'),\n        FScreen = $('div.overlay'"
  },
  {
    "path": "public/avbook/themes/krajee-fa/theme.css",
    "chars": 284,
    "preview": "/*!\n * Krajee Font Awesome Theme styling for bootstrap-star-rating.\n * This file must be loaded after 'star-rating.css'."
  },
  {
    "path": "public/avbook/themes/krajee-fa/theme.js",
    "chars": 505,
    "preview": "/*!\n * Krajee Font Awesome Theme configuration for bootstrap-star-rating.\n * This file must be loaded after 'star-rating"
  },
  {
    "path": "public/avbook/themes/krajee-fas/theme.css",
    "chars": 304,
    "preview": "/*!\n * Krajee Font Awesome Theme styling for bootstrap-star-rating.\n * This file must be loaded after 'star-rating.css'."
  },
  {
    "path": "public/avbook/themes/krajee-fas/theme.js",
    "chars": 501,
    "preview": "/*!\n * Krajee Font Awesome Theme configuration for bootstrap-star-rating.\n * This file must be loaded after 'star-rating"
  },
  {
    "path": "public/avbook/themes/krajee-svg/theme.css",
    "chars": 5522,
    "preview": "/*!\n * Krajee SVG Theme styling for bootstrap-star-rating.\n * This file must be loaded after 'star-rating.css'.\n *\n * @s"
  },
  {
    "path": "public/avbook/themes/krajee-svg/theme.js",
    "chars": 542,
    "preview": "/*!\n * Krajee SVG Theme Configuration for bootstrap-star-rating.\n * This file must be loaded after 'star-rating.js'.\n *\n"
  },
  {
    "path": "public/avbook/themes/krajee-uni/theme.css",
    "chars": 392,
    "preview": "/*!\n * Krajee Unicode Theme styling for bootstrap-star-rating.\n * This file must be loaded after 'star-rating.css'.\n *\n "
  },
  {
    "path": "public/avbook/themes/krajee-uni/theme.js",
    "chars": 431,
    "preview": "/*!\n * Krajee Unicode Theme configuration for bootstrap-star-rating.\n * This file must be loaded after 'star-rating.js'."
  },
  {
    "path": "public/avbook/themes/zh.js",
    "chars": 839,
    "preview": "/*!\n * Star Rating Chinese Translations\n *\n * This file must be loaded after 'star-rating.js'. Patterns in braces '{}', "
  },
  {
    "path": "public/css/app.css",
    "chars": 127801,
    "preview": "@import url(https://fonts.googleapis.com/css?family=Nunito);\n\n/*!\n * Bootstrap v4.1.3 (https://getbootstrap.com/)\n * Cop"
  },
  {
    "path": "public/index.php",
    "chars": 1823,
    "preview": "<?php\n\n/**\n * Laravel - A PHP Framework For Web Artisans\n *\n * @package  Laravel\n * @author   Taylor Otwell <taylor@lara"
  },
  {
    "path": "public/js/app.js",
    "chars": 336904,
    "preview": "!function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.expo"
  },
  {
    "path": "public/robots.txt",
    "chars": 24,
    "preview": "User-agent: *\nDisallow:\n"
  },
  {
    "path": "public/web.config",
    "chars": 1194,
    "preview": "<!--\n    Rewrites requires Microsoft URL Rewrite Module for IIS\n    Download: https://www.microsoft.com/en-us/download/d"
  },
  {
    "path": "resources/code_36/avbook_avmoo_en_end_code_36_star.txt",
    "chars": 3,
    "preview": "u27"
  },
  {
    "path": "resources/code_36/avbook_avmoo_end_code_36_director.txt",
    "chars": 3,
    "preview": "3vs"
  },
  {
    "path": "resources/code_36/avbook_avmoo_end_code_36_label.txt",
    "chars": 3,
    "preview": "70h"
  },
  {
    "path": "resources/code_36/avbook_avmoo_end_code_36_movie.txt",
    "chars": 4,
    "preview": "77zo"
  },
  {
    "path": "resources/code_36/avbook_avmoo_end_code_36_series.txt",
    "chars": 3,
    "preview": "ptq"
  },
  {
    "path": "resources/code_36/avbook_avmoo_end_code_36_star.txt",
    "chars": 3,
    "preview": "ubh"
  },
  {
    "path": "resources/code_36/avbook_avmoo_end_code_36_studio.txt",
    "chars": 3,
    "preview": "3j9"
  },
  {
    "path": "resources/code_36/avbook_javbus_en_end_code_36_star.txt",
    "chars": 3,
    "preview": "uqc"
  },
  {
    "path": "resources/code_36/avbook_javbus_end_code_36_director.txt",
    "chars": 3,
    "preview": "3t3"
  },
  {
    "path": "resources/code_36/avbook_javbus_end_code_36_label.txt",
    "chars": 3,
    "preview": "6yz"
  },
  {
    "path": "resources/code_36/avbook_javbus_end_code_36_series.txt",
    "chars": 3,
    "preview": "ph7"
  },
  {
    "path": "resources/code_36/avbook_javbus_end_code_36_star.txt",
    "chars": 3,
    "preview": "uq6"
  },
  {
    "path": "resources/code_36/crawlers.txt",
    "chars": 230833,
    "preview": "TinEye-bot/0.51 (see http://www.tineye.com/crawler.html)\nWhoismindbot/1.0 (+http://www.whoismind.com/bot.html)\nMozilla/5"
  },
  {
    "path": "resources/js/app.js",
    "chars": 1101,
    "preview": "\n/**\n * First we will load all of this project's JavaScript dependencies which\n * includes Vue and other libraries. It i"
  },
  {
    "path": "resources/js/bootstrap.js",
    "chars": 1743,
    "preview": "\nwindow._ = require('lodash');\n\n/**\n * We'll load jQuery and the Bootstrap jQuery plugin which provides support\n * for J"
  },
  {
    "path": "resources/js/components/ExampleComponent.vue",
    "chars": 552,
    "preview": "<template>\n    <div class=\"container\">\n        <div class=\"row justify-content-center\">\n            <div class=\"col-md-8"
  },
  {
    "path": "resources/lang/en/auth.php",
    "chars": 617,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentica"
  },
  {
    "path": "resources/lang/en/pagination.php",
    "chars": 534,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Pagination"
  },
  {
    "path": "resources/lang/en/passwords.php",
    "chars": 788,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Password R"
  },
  {
    "path": "resources/lang/en/validation.php",
    "chars": 7511,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation"
  },
  {
    "path": "resources/sass/_variables.scss",
    "chars": 318,
    "preview": "\n// Body\n$body-bg: #f8fafc;\n\n// Typography\n$font-family-sans-serif: \"Nunito\", sans-serif;\n$font-size-base: 0.9rem;\n$line"
  },
  {
    "path": "resources/sass/app.scss",
    "chars": 251,
    "preview": "\n// Fonts\n@import url('https://fonts.googleapis.com/css?family=Nunito');\n\n// Variables\n@import 'variables';\n\n// Bootstra"
  },
  {
    "path": "resources/views/actresses.blade.php",
    "chars": 1580,
    "preview": "@extends('layout')\n\n\n@section('content')\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"avbook/main.css\">\n    <script "
  },
  {
    "path": "resources/views/itemtag.blade.php",
    "chars": 1935,
    "preview": "\n<?php if ($movie_info['owned'] == 1): ?>\n<!---  <button class=\"btn btn-xs btn-success \" onclick=\"seturl('&file=3')\"\n   "
  },
  {
    "path": "resources/views/layout.blade.php",
    "chars": 13798,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n\n    <meta http-eq"
  },
  {
    "path": "resources/views/layout_censored.blade.php",
    "chars": 10763,
    "preview": "@extends('layout')\n@section('title', ($title?$title:\"AvBook 影片資料庫 - 磁力連結分享\").' -  第'.($_GET['page'] ?? 1).'页')\n@section("
  },
  {
    "path": "resources/views/layout_genre.blade.php",
    "chars": 51524,
    "preview": "@extends('layout')\n@section('navbar_right')\n@section('title', '有码类别')\n    <ul class=\"nav navbar-nav navbar-right\">\n     "
  },
  {
    "path": "resources/views/layout_header.blade.php",
    "chars": 7698,
    "preview": "<link rel=\"apple-touch-icon\" href=\"avbook/apple-touch-icon.png\">\n<link rel=\"shortcut Icon\" href=\"avbook/favicon.ico\">\n<l"
  },
  {
    "path": "resources/views/layout_javlib.blade.php",
    "chars": 10818,
    "preview": "@extends('layout')\n@section('title', ($title?$title:\"AvBook javlibrary  - 高评价\").' -  第'.($_GET['page'] ?? 1).'页')\n@secti"
  },
  {
    "path": "resources/views/layout_javlibmovie.blade.php",
    "chars": 26955,
    "preview": "@extends('layout')\n@section('title', $movie_info['censored_id'].$movie_info['movie_title'])\n@section('content')\n<link re"
  },
  {
    "path": "resources/views/layout_movie.blade.php",
    "chars": 28978,
    "preview": "@extends('layout')\n@section('title', $movie_info['censored_id'].$movie_info['movie_title'])\n@section('content')\n<link re"
  },
  {
    "path": "resources/views/magnetlinks.blade.php",
    "chars": 3050,
    "preview": "\n<?php  foreach($res_mg as $key=>$val): ?>\n\n\n<tr onmouseover=\"this.style.backgroundColor='#F4F9FD';this.style.cursor='po"
  },
  {
    "path": "resources/views/magnetlinks2.blade.php",
    "chars": 6717,
    "preview": "<tbody><tr style=\"font-weight:bold;\">\n    <td>磁力名稱 1<span class=\"glyphicon glyphicon-magnet\"></span></td>\n    <td style="
  },
  {
    "path": "resources/views/welcome.blade.php",
    "chars": 2887,
    "preview": "<!doctype html>\n<html lang=\"{{ str_replace('_', '-', app()->getLocale()) }}\">\n    <head>\n        <meta charset=\"utf-8\">\n"
  },
  {
    "path": "routes/api.php",
    "chars": 1015,
    "preview": "<?php\n\nuse Illuminate\\Http\\Request;\n/*\n|--------------------------------------------------------------------------\n| API"
  },
  {
    "path": "routes/channels.php",
    "chars": 508,
    "preview": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Broadcast Channels\n|------------"
  },
  {
    "path": "routes/console.php",
    "chars": 553,
    "preview": "<?php\n\nuse Illuminate\\Foundation\\Inspiring;\n\n/*\n|-----------------------------------------------------------------------"
  },
  {
    "path": "routes/web.php",
    "chars": 816,
    "preview": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Web Routes\n|--------------------"
  },
  {
    "path": "server.php",
    "chars": 563,
    "preview": "<?php\n\n/**\n * Laravel - A PHP Framework For Web Artisans\n *\n * @package  Laravel\n * @author   Taylor Otwell <taylor@lara"
  },
  {
    "path": "storage/app/.gitignore",
    "chars": 23,
    "preview": "*\n!public/\n!.gitignore\n"
  },
  {
    "path": "storage/framework/.gitignore",
    "chars": 103,
    "preview": "config.php\nroutes.php\nschedule-*\ncompiled.php\nservices.json\nevents.scanned.php\nroutes.scanned.php\ndown\n"
  },
  {
    "path": "storage/framework/cache/.gitignore",
    "chars": 21,
    "preview": "*\n!data/\n!.gitignore\n"
  },
  {
    "path": "storage/framework/sessions/.gitignore",
    "chars": 14,
    "preview": "*\n!.gitignore\n"
  },
  {
    "path": "storage/framework/testing/.gitignore",
    "chars": 14,
    "preview": "*\n!.gitignore\n"
  },
  {
    "path": "storage/framework/views/.gitignore",
    "chars": 14,
    "preview": "*\n!.gitignore\n"
  },
  {
    "path": "storage/logs/.gitignore",
    "chars": 14,
    "preview": "*\n!.gitignore\n"
  },
  {
    "path": "tests/CreatesApplication.php",
    "chars": 380,
    "preview": "<?php\n\nnamespace Tests;\n\nuse Illuminate\\Contracts\\Console\\Kernel;\n\ntrait CreatesApplication\n{\n    /**\n     * Creates the"
  },
  {
    "path": "tests/Feature/ExampleTest.php",
    "chars": 340,
    "preview": "<?php\n\nnamespace Tests\\Feature;\n\nuse Tests\\TestCase;\nuse Illuminate\\Foundation\\Testing\\RefreshDatabase;\n\nclass ExampleTe"
  },
  {
    "path": "tests/TestCase.php",
    "chars": 163,
    "preview": "<?php\n\nnamespace Tests;\n\nuse Illuminate\\Foundation\\Testing\\TestCase as BaseTestCase;\n\nabstract class TestCase extends Ba"
  },
  {
    "path": "tests/Unit/ExampleTest.php",
    "chars": 294,
    "preview": "<?php\n\nnamespace Tests\\Unit;\n\nuse Tests\\TestCase;\nuse Illuminate\\Foundation\\Testing\\RefreshDatabase;\n\nclass ExampleTest "
  },
  {
    "path": "tests/html/html_series.html",
    "chars": 36249,
    "preview": "  <!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<meta name="
  },
  {
    "path": "tests/html/html_studio.html",
    "chars": 20988,
    "preview": "  <!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<meta name="
  }
]

// ... and 4 more files (download for full content)

About this extraction

This page contains the full source code of the guyueyingmu/avbook GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 179 files (1.2 MB), approximately 398.3k tokens, and a symbol index with 829 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!