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 ================================================

[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
2.打开 D:\laragon\laragon.exe ,点击 `启动所有`
3.点击 `网站` 或者访问 enjoy it >ps:
Ⅰ. 如果没有解压到 D:\laragon 需自行修改Nginx配置,php.ini配置,并在hosts文件新增一行 :`127.0.0.1 avbook.test`
Ⅱ. 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 ================================================ 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, '')===false) { echo "页面不完整"; return null ;//不完整 } $arr_data = array(); preg_match('#
  • 简体中文
  • #', $content, $out); $c_36 = empty($out[1]) ? '' : $out[1]; $arr_data['code_36'] = $c_36;////'code_36' preg_match('#

    识别码: (.*?)

    #', $content, $out); if (empty($out[1])) { return null; } $arr_data['censored_id'] = $out[1]; $codeid=$out[1]; preg_match('#

    (.*?)

    #', $content, $out); $arr_data['movie_title'] = empty($out[1]) ? '' : trim(str_replace($codeid, '', $out[1]));////'movie_title' preg_match('#发行时间: (.*?)

    #', $content, $out); $arr_data['release_date'] = empty($out[1]) ? date("Y-m-d"): $out[1];//'release_date' preg_match('#

    长度: (.*?)分钟

    #', $content, $out); $arr_data['movie_length'] = empty($out[1]) ? '' : $out[1];// 'movie_length' preg_match('#

    导演: #', $content, $out); $arr_data['Director'] = empty($out[1]) ? '' : $out[1];//'Director' preg_match('##', $content, $out); $arr_data['Studio'] = empty($out[1]) ? '' : $out[1];//'Studio' preg_match('##', $content, $out); $arr_data['Label'] = empty($out[1]) ? '' : $out[1];//'Label' preg_match_all('##', $content, $out); $arr_data['Series'] = empty($out[1]) ? '' : implode(',',$out[1]);//'Series' preg_match_all('##', $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('#getBody(); $content = mb_convert_encoding($original_body, 'UTF-8', $this->spcharset); if (strpos($content, '')===false) { echo "页面不完整"; return null ;//不完整 } $arr_data = array(); $s = '#English#'; //preg_match('#简体中文#', $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('#(.*?)#', $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('#

    生日: (.*?)

    #', $content, $out); // $arr_data['star_birthday'] = empty($out[1]) ? '' : $out[1]; // // preg_match('#

    年龄: (.*?)

    #', $content, $out); // $arr_data['star_age'] = empty($out[1]) ? '' : $out[1]; // // // preg_match('#罩杯: (.*?)

    #', $content, $out); // $arr_data['star_cupsize'] = empty($out[1]) ? '' : $out[1]; // preg_match('#

    身高: (.*?)cm

    #', $content, $out); // $arr_data['star_height'] = empty($out[1]) ? '' : $out[1]; // // preg_match('#

    胸围: (.*?)cm

    #', $content, $out); // $arr_data['star_bust'] = empty($out[1]) ? '' : $out[1]; // preg_match('#

    腰围: (.*?)cm

    #', $content, $out); // $arr_data['star_waist'] = empty($out[1]) ? '' : $out[1]; // preg_match('#

    臀围: (.*?)cm

    #', $content, $out); // $arr_data['star_hip'] = empty($out[1]) ? '' : $out[1]; // // preg_match('#

    出生地: (.*?)

    #', $content, $out); // $arr_data['hometown'] = empty($out[1]) ? '' : $out[1]; // preg_match('#

    爱好: (.*?)

    #', $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, '')===false) { echo "页面不完整"; return null ;//不完整 } $arr_data = array(); $s = '#简体中文#'; //preg_match('#简体中文#', $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('#(.*?)#', $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('#

    生日: (.*?)

    #', $content, $out); $arr_data['star_birthday'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    年龄: (.*?)

    #', $content, $out); $arr_data['star_age'] = empty($out[1]) ? '' : $out[1]; preg_match('#罩杯: (.*?)

    #', $content, $out); $arr_data['star_cupsize'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    身高: (.*?)cm

    #', $content, $out); $arr_data['star_height'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    胸围: (.*?)cm

    #', $content, $out); $arr_data['star_bust'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    腰围: (.*?)cm

    #', $content, $out); $arr_data['star_waist'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    臀围: (.*?)cm

    #', $content, $out); $arr_data['star_hip'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    出生地: (.*?)

    #', $content, $out); $arr_data['hometown'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    爱好: (.*?)

    #', $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, '')===false) { echo "页面不完整"; return null ;//不完整 } $arr_data = array(); $s = '#简体中文#'; 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('#(.*?) - 系列 - 影片 - AVMOO#', $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, '')===false) { echo "页面不完整"; return null ;//不完整 } $arr_data = array(); $s = '#简体中文#'; //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('#(.*?) - 制作商 - 影片 - AVMOO#', $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, '')===false) { echo "页面不完整"; return null ;//不完整 } $arr_data = array(); $s = '#简体中文#'; //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('#(.*?) - 导演 - 影片 - AVMOO#', $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, '')===false) { echo "页面不完整"; return null ;//不完整 } $arr_data = array(); $s = '#简体中文#'; 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('#(.*?) - 发行商 - 影片 - AVMOO#', $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 ================================================ 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 " [$index suc:{$c36}= ={$this->in_table_name}= {$this->start_type}] "; $this->database->insert($this->in_table_name, $data ); echo "\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 ================================================ 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 ================================================ 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'); /* [2 suc:NKD-002= =avbook_javbus_movie= movie] [get res:4] [4 suc:NKD-004= =avbook_javbus_movie= movie] [get res:5] [5 suc:NKD-006= =avbook_javbus_movie= movie] [get res:0] [0 suc:AB-004= =avbook_javbus_movie= movie] [get res:1] [1 suc:NKD-001= =avbook_javbus_movie= movie] [get res:6] [6 suc:NKD-007= =avbook_javbus_movie= movie] [get res:3] [3 suc:NKD-003= =avbook_javbus_movie= movie] */ 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, '')===false) { echo "页面不完整"; return null ;//不完整 } $arr_data = array(); //English $s ='#English#';;// '#中文#'; 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('#(.*?)#', $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('#

    D.O.B: (.*?)

    #', $content, $out); $arr_data['star_birthday'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    Age: (.*?)

    #', $content, $out); $arr_data['star_age'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    Cup: (.*?)

    #', $content, $out); $arr_data['star_cupsize'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    Height: (.*?)cm

    #', $content, $out); $arr_data['star_height'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    Bust: (.*?)cm

    #', $content, $out); $arr_data['star_bust'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    Waist: (.*?)cm

    #', $content, $out); $arr_data['star_waist'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    Hips: (.*?)cm

    #', $content, $out); $arr_data['star_hip'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    Hometown: (.*?)

    #', $content, $out); $arr_data['hometown'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    Hobby: (.*?)

    #', $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, '')===false) { echo "页面不完整"; return null ;//不完整 } $arr_data = array(); $s = '#中文#'; 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('#(.*?)#', $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('#

    生日: (.*?)

    #', $content, $out); $arr_data['star_birthday'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    年齡: (.*?)

    #', $content, $out); $arr_data['star_age'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    罩杯: (.*?)

    #', $content, $out); $arr_data['star_cupsize'] = empty($out[1]) ? '' : $out[1]; preg_match('#身高: (.*?)cm

    #', $content, $out); $arr_data['star_height'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    胸圍: (.*?)cm

    #', $content, $out); $arr_data['star_bust'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    腰圍: (.*?)cm

    #', $content, $out); $arr_data['star_waist'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    臀圍: (.*?)cm

    #', $content, $out); $arr_data['star_hip'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    出生地: (.*?)

    #', $content, $out); $arr_data['hometown'] = empty($out[1]) ? '' : $out[1]; preg_match('#

    愛好: (.*?)

    #', $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, '')===false) { echo "页面不完整"; return null ;//不完整 } $arr_data = array(); $s = '#中文#'; 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('#(.*?) - 系列 - 影片#', $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, '')===false) { echo "页面不完整"; return null ;//不完整 } $arr_data = array(); $s = '#中文#'; // 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('#(.*?) - 製作商 - 影片#', $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('#[\s]*?(.*?)[\s]*?[\s\S]*?【複製連結網址】" href="magnet[\s\S]*?">[\s]*?(.*?)[\s]*?[\s\S]*?【複製連結網址】" href="magnet[\s\S]*?xt=urn:btih:(.*?)&[\s\S]*?">[\s]*?(.*?)[\s]*?#', $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('高清', "", $value); } if (strpos($value, $need_sub)) { $have_sub = 1; $value = str_replace('字幕', "", $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('#(.*?)#', $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('#

    識別碼: (.*?)#', $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('#

    (.*?)

    #', $content, $out); $arr_data['movie_title'] = empty($out[1]) ? '' : trim(str_replace($censored_id, '', $out[1]));////'movie_title' preg_match('#發行日期: (.*?)

    #', $content, $out); $arr_data['release_date'] = empty($out[1]) ? '' : $out[1];//'release_date' preg_match('#

    長度: (.*?)

    #', $content, $out); $arr_data['movie_length'] = empty($out[1]) ? '' : str_replace('分鐘', '', $out[1]);// 'movie_length' preg_match('#

    導演: #', $content, $out); $arr_data['Director'] = empty($out[1]) ? '' : $out[1];//'Director' preg_match('#

    製作商: #', $content, $out); $arr_data['Studio'] = empty($out[1]) ? '' : $out[1];//'Studio' preg_match('#

    發行商: #', $content, $out); $arr_data['Label'] = empty($out[1]) ? '' : $out[1];//'Label' preg_match_all('#

    系列: #', $content, $out); $arr_data['Series'] = empty($out[1]) ? '' : implode(',',$out[1]);//'Series' preg_match_all('##', $content, $out); $arr_data['Genre'] = empty($out[1]) ? '' : '['.implode('][',$out[1]).']';//'Genre' preg_match_all('#

    #', $content, $out); if (empty($out[1])) { preg_match_all('#
    #', $content, $out); $arr_data['Similar'] = empty($out[1]) ? '' : '['.implode('][',$out[1]).']';//Similar return $arr_data; } } ================================================ FILE: app/Console/Commands/JavlibraryCrawler.php ================================================ 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=(.*?)">(.*?)#', $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, '')===false) { $this->arr_req_rejected[] =$c36; $this->warn("$c36 页面不完整"); return; } preg_match('#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, '')===false) { $this->arr_req_rejected[] =$c36; $this->warn("$c36 页面不完整"); } preg_match_all('#
    #', $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, '')===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('#识别码:[\s]*?(.*?)#', $content, $out); $censored_id = empty($out[1]) ? '' : $out[1];////'censored_id' $arr_data['censored_id']=$censored_id; preg_match('#(.*?) - JAVLibrary#', $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('#发行日期:[\s]*?(.*?)#', $content, $out); $arr_data['release_date'] = empty($out[1]) ? '' : $out[1];//'release_date' preg_match('#长度:[\s]*?(.*?) 分钟#', $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('#\((.*?)\)#', $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 = '(.*?)'; preg_match("#$s#", $content, $out); $arr_data['userswanted'] = empty($out[1]) ? '' : $out[1];//'Director' preg_match('#href="userswatched.php\?v='.$code_36.'">(.*?)#', $content, $out); $arr_data['userswatched'] = empty($out[1]) ? '' : $out[1];//'Director' preg_match('#href="usersowned.php\?v='.$code_36.'">(.*?)#', $content, $out); $arr_data['usersowned'] = empty($out[1]) ? '' : $out[1];//'Director' $arr_data['comments'] = strpos($content,'空的列表')===false ? 1 : 0; return $arr_data; } } ================================================ FILE: app/Console/Commands/Scandir.php ================================================ '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 ================================================ 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 ================================================ $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 ================================================ 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 ''; } $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 "
     ggg";
    echo $tmp_result ;die;
                preg_match_all('#[\s]*?(.*?)[\s]*?[\s\S]*?【複製連結網址】" href="magnet[\s\S]*?">[\s]*?(.*?)[\s]*?[\s\S]*?【複製連結網址】" href="magnet[\s\S]*?xt=urn:btih:(.*?)&[\s\S]*?">[\s]*?(.*?)[\s]*?#', $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('高清', "", $value);
                        }
                        if (strpos($value, $need_sub)) {
                            $have_sub = 1;
                            $value = str_replace('字幕', "", $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
    ================================================
    middleware('guest');
        }
    }
    
    
    ================================================
    FILE: app/Http/Controllers/Auth/LoginController.php
    ================================================
    middleware('guest')->except('logout');
        }
    }
    
    
    ================================================
    FILE: app/Http/Controllers/Auth/RegisterController.php
    ================================================
    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
    ================================================
    middleware('guest');
        }
    }
    
    
    ================================================
    FILE: app/Http/Controllers/Auth/VerificationController.php
    ================================================
    middleware('auth');
            $this->middleware('signed')->only('verify');
            $this->middleware('throttle:6,1')->only('verify', 'resend');
        }
    }
    
    
    ================================================
    FILE: app/Http/Controllers/AvbookController.php
    ================================================
     '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 <===  || ===> ");
            }
    //        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 <===  || ===> ");
            }
            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
    ================================================
     [
                \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
    ================================================
    expectsJson()) {
                return route('login');
            }
        }
    }
    
    
    ================================================
    FILE: app/Http/Middleware/CheckForMaintenanceMode.php
    ================================================
    check()) {
                return redirect('/home');
            }
    
            return $next($request);
        }
    }
    
    
    ================================================
    FILE: app/Http/Middleware/TrimStrings.php
    ================================================
    hasOne('App\Models\Avbooks','censored_id','censored_id');
        }
    }
    
    
    ================================================
    FILE: app/Models/Label.php
    ================================================
    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
    ================================================
     'App\Policies\ModelPolicy',
        ];
    
        /**
         * Register any authentication / authorization services.
         *
         * @return void
         */
        public function boot()
        {
            $this->registerPolicies();
    
            //
        }
    }
    
    
    ================================================
    FILE: app/Providers/BroadcastServiceProvider.php
    ================================================
     [
                SendEmailVerificationNotification::class,
            ],
        ];
    
        /**
         * Register any events for your application.
         *
         * @return void
         */
        public function boot()
        {
            parent::boot();
    
            //
        }
    }
    
    
    ================================================
    FILE: app/Providers/RouteServiceProvider.php
    ================================================
    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
    ================================================
     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
    ================================================
     'datetime',
        ];
    }
    
    
    ================================================
    FILE: artisan
    ================================================
    #!/usr/bin/env php
    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
    ================================================
    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
    ================================================
     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
    ================================================
     [
            '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
    ================================================
     '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
    ================================================
     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
    ================================================
     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
    ================================================
     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
    ================================================
     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
    ================================================
     '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
    ================================================
     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
    ================================================
     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
    ================================================
     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
    ================================================
     [
            '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
    ================================================
     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),
    
        /*
        |--------------------------------------------------------------------------
        | HTTP Access Only
        |--------------------------------------------------------------------------
        |
        | Setting this value to true will prevent JavaScript from accessing the
        | value of the cookie and the cookie will only be accessible through
        | the HTTP protocol. You are free to modify this option if needed.
        |
        */
    
        'http_only' => true,
    
        /*
        |--------------------------------------------------------------------------
        | Same-Site Cookies
        |--------------------------------------------------------------------------
        |
        | This option determines how your cookies behave when cross-site requests
        | take place, and can be used to mitigate CSRF attacks. By default, we
        | do not enable this as other CSRF protection services are in place.
        |
        | Supported: "lax", "strict"
        |
        */
    
        'same_site' => null,
    
    ];
    
    
    ================================================
    FILE: config/urlconfig.php
    ================================================
    'avmoo.asia',
        'javbushost'=>'www.javbus.life',
        'javlibhost'=>'www.c32r.com',
        'btsourl' => 'https://btsow.pw/search/'
    ];
    
    
    ================================================
    FILE: config/view.php
    ================================================
     [
            resource_path('views'),
        ],
    
        /*
        |--------------------------------------------------------------------------
        | Compiled View Path
        |--------------------------------------------------------------------------
        |
        | This option determines where all the compiled Blade templates will be
        | stored for your application. Typically, this is within the storage
        | directory. However, as usual, you are free to change this value.
        |
        */
    
        'compiled' => env(
            'VIEW_COMPILED_PATH',
            realpath(storage_path('framework/views'))
        ),
    
    ];
    
    
    ================================================
    FILE: database/.gitignore
    ================================================
    *.sqlite
    
    
    ================================================
    FILE: database/factories/UserFactory.php
    ================================================
    define(User::class, function (Faker $faker) {
        return [
            'name' => $faker->name,
            'email' => $faker->unique()->safeEmail,
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
        ];
    });
    
    
    ================================================
    FILE: database/migrations/2019_05_11_083515_create_avbook_avmoo_director_table.php
    ================================================
    string('code_36', 5)->default('')->primary();
    			$table->string('director_name', 256)->nullable();
    			$table->integer('code_10')->nullable();
    		});
    	}
    
    
    	/**
    	 * Reverse the migrations.
    	 *
    	 * @return void
    	 */
    	public function down()
    	{
    		Schema::drop('avbook_avmoo_director');
    	}
    
    }
    
    
    ================================================
    FILE: database/migrations/2019_05_11_083515_create_avbook_avmoo_genre_table.php
    ================================================
    string('genre_code', 11)->default('')->primary();
    			$table->string('genre_dsce', 64)->nullable();
    		});
    	}
    
    
    	/**
    	 * Reverse the migrations.
    	 *
    	 * @return void
    	 */
    	public function down()
    	{
    		Schema::drop('avbook_avmoo_genre');
    	}
    
    }
    
    
    ================================================
    FILE: database/migrations/2019_05_11_083515_create_avbook_avmoo_label_table.php
    ================================================
    string('code_36', 5)->default('')->primary();
    			$table->string('label_name', 256)->nullable();
    			$table->integer('code_10')->nullable();
    		});
    	}
    
    
    	/**
    	 * Reverse the migrations.
    	 *
    	 * @return void
    	 */
    	public function down()
    	{
    		Schema::drop('avbook_avmoo_label');
    	}
    
    }
    
    
    ================================================
    FILE: database/migrations/2019_05_11_083515_create_avbook_avmoo_movie_table.php
    ================================================
    integer('code_10')->nullable();
    			$table->string('code_36', 6)->default('0')->primary();
    			$table->string('censored_id', 64)->default('')->index('censored_id')->comment('識別碼');
    			$table->string('movie_title', 512)->nullable();
    			$table->string('movie_pic_cover', 128)->nullable();
    			$table->string('release_date', 32)->nullable()->default('0000-00-00')->comment('發行日期');
    			$table->string('movie_length', 32)->nullable()->comment('長度');
    			$table->string('Director', 12)->nullable()->comment('導演');
    			$table->string('Studio', 12)->nullable()->comment('製作商');
    			$table->string('Label', 12)->nullable()->comment('發行商');
    			$table->string('Series', 256)->nullable()->comment('系列');
    			$table->string('Genre', 256)->nullable()->index('Genre')->comment('類別');
    			$table->string('JAV_Idols', 256)->nullable()->index('JAV_Idols')->comment('演員');
    			$table->integer('sample_dmm')->nullable();
    			$table->tinyinteger('have_mg')->nullable()->default(0);
    			$table->tinyinteger('have_file')->nullable()->default(0);
    			$table->tinyinteger('have_hd')->nullable()->default(0);
    			$table->tinyinteger('have_sub')->nullable()->default(0);
    			$table->tinyinteger('have_hdbtso')->nullable()->default(0);
    			$table->tinyinteger('have_mgbtso')->nullable()->default(0);
    			$table->tinyinteger('have_file2')->nullable()->default(0);
    			$table->tinyinteger('favorite')->nullable()->default(0)->comment('收藏');
    			$table->tinyinteger('wanted')->nullable()->default(0)->comment('想要');
    			$table->tinyinteger('watched')->nullable()->default(0)->comment('看过');
    			$table->tinyinteger('owned')->nullable()->default(0)->comment('已拥有');
    			$table->tinyinteger('visited')->nullable()->comment('浏览过');
    			$table->string('blogjav_img', 128)->nullable();
    			$table->dateTime('magnet_date')->nullable();
    		});
    	}
    
    
    	/**
    	 * Reverse the migrations.
    	 *
    	 * @return void
    	 */
    	public function down()
    	{
    		Schema::drop('avbook_avmoo_movie');
    	}
    
    }
    
    
    ================================================
    FILE: database/migrations/2019_05_11_083515_create_avbook_avmoo_series_table.php
    ================================================
    string('code_36', 10)->default('')->primary();
    			$table->string('series_name', 256)->nullable();
    			$table->integer('code_10')->unsigned()->nullable()->default(0);
    		});
    	}
    
    
    	/**
    	 * Reverse the migrations.
    	 *
    	 * @return void
    	 */
    	public function down()
    	{
    		Schema::drop('avbook_avmoo_series');
    	}
    
    }
    
    
    ================================================
    FILE: database/migrations/2019_05_11_083515_create_avbook_avmoo_star_table.php
    ================================================
    string('code_36', 5)->default('')->primary();
    			$table->string('star_name', 128)->nullable();
    			$table->string('star_birthday', 64)->nullable();
    			$table->integer('star_age')->nullable()->default(0);
    			$table->string('star_cupsize', 8)->nullable();
    			$table->integer('star_height')->nullable();
    			$table->integer('star_bust')->nullable();
    			$table->integer('star_waist')->nullable();
    			$table->integer('star_hip')->nullable();
    			$table->string('hometown', 128)->nullable();
    			$table->string('hobby', 512)->nullable()->comment('https://jp.netcdn.space/mono/actjpgs/');
    			$table->string('star_pic', 64)->nullable()->comment('https://jp.netcdn.space/mono/actjpgs/');
    			$table->integer('favorite')->nullable()->default(0);
    			$table->integer('file_num')->nullable();
    			$table->integer('code_10')->unsigned()->nullable();
    		});
    	}
    
    
    	/**
    	 * Reverse the migrations.
    	 *
    	 * @return void
    	 */
    	public function down()
    	{
    		Schema::drop('avbook_avmoo_star');
    	}
    
    }
    
    
    ================================================
    FILE: database/migrations/2019_05_11_083515_create_avbook_avmoo_studio_table.php
    ================================================
    string('code_36', 10)->default('')->primary();
    			$table->string('studio_name', 256)->nullable();
    			$table->integer('code_10')->unsigned()->nullable()->default(0);
    		});
    	}
    
    
    	/**
    	 * Reverse the migrations.
    	 *
    	 * @return void
    	 */
    	public function down()
    	{
    		Schema::drop('avbook_avmoo_studio');
    	}
    
    }
    
    
    ================================================
    FILE: database/migrations/2019_05_11_083515_create_avbook_crawler_404_table.php
    ================================================
    string('code_36', 12)->default('')->index('code_36');
    			$table->string('intable_name', 128);
    			$table->tinyinteger('checkdata')->nullable();
    			$table->primary(['intable_name','code_36']);
    		});
    	}
    
    
    	/**
    	 * Reverse the migrations.
    	 *
    	 * @return void
    	 */
    	public function down()
    	{
    		Schema::drop('avbook_crawler_404');
    	}
    
    }
    
    
    ================================================
    FILE: database/migrations/2019_05_11_083515_create_avbook_javbus_magnet_table.php
    ================================================
    string('magnet_xt', 64)->default('')->comment('magnet:?xt=urn:btih:');
    			$table->string('gid', 16)->default('0')->index('gid');
    			$table->string('censored_id', 64)->default('')->index('censored_id');
    			$table->string('magnet_name', 1024)->nullable();
    			$table->string('magnet_type', 32)->nullable();
    			$table->string('magnet_date', 32)->nullable();
    			$table->integer('have_hd')->nullable();
    			$table->integer('have_sub')->nullable()->comment('1');
    			$table->integer('have_down')->nullable()->index('have_down');
    			$table->primary(['magnet_xt','gid']);
    		});
    	}
    
    
    	/**
    	 * Reverse the migrations.
    	 *
    	 * @return void
    	 */
    	public function down()
    	{
    		Schema::drop('avbook_javbus_magnet');
    	}
    
    }
    
    
    ================================================
    FILE: database/migrations/2019_05_11_083515_create_avbook_javbus_movie_table.php
    ================================================
    string('censored_id', 64)->default('')->primary()->comment('識別碼');
    			$table->string('avmoo_code_36', 6)->nullable()->default('')->index('avmoo_code_36');
    			$table->string('movie_pic_cover', 128)->nullable()->comment('https://pics.javbus.info/cover/5trd_b.jpg');
    			$table->string('movie_title', 512)->nullable();
    			$table->string('release_date', 32)->nullable()->comment('發行日期');
    			$table->string('gid', 12)->default('0')->index('gid');
    			$table->string('movie_length', 32)->nullable()->comment('長度分鐘');
    			$table->string('Director', 12)->nullable()->comment('導演');
    			$table->string('Studio', 12)->nullable()->comment('製作商');
    			$table->string('Label', 12)->nullable()->comment('發行商');
    			$table->string('Series', 256)->nullable()->comment('系列');
    			$table->string('Genre', 256)->nullable()->comment('類別');
    			$table->string('JAV_Idols', 256)->nullable()->comment('演員');
    			$table->string('Similar', 128)->nullable()->comment('Similar Videos');
    			$table->integer('have_hd')->nullable();
    			$table->integer('have_sub')->nullable();
    			$table->integer('have_magnet')->nullable();
    			$table->string('Label_code', 5)->nullable();
    			$table->string('Series_code', 5)->nullable();
    			$table->string('sample_dmm', 128)->nullable()->default('0')->comment('https://pics.dmm.co.jp');
    			$table->dateTime('magnet_date')->nullable();
    		});
    	}
    
    
    	/**
    	 * Reverse the migrations.
    	 *
    	 * @return void
    	 */
    	public function down()
    	{
    		Schema::drop('avbook_javbus_movie');
    	}
    
    }
    
    
    ================================================
    FILE: database/migrations/2019_05_11_083515_create_avbook_javbus_series_table.php
    ================================================
    string('code_36', 10)->default('')->primary();
    			$table->string('series_name', 256)->nullable();
    			$table->integer('code_10')->unsigned()->nullable()->default(0);
    		});
    	}
    
    
    	/**
    	 * Reverse the migrations.
    	 *
    	 * @return void
    	 */
    	public function down()
    	{
    		Schema::drop('avbook_javbus_series');
    	}
    
    }
    
    
    ================================================
    FILE: database/migrations/2019_05_11_083515_create_avbook_javbus_star_table.php
    ================================================
    string('code_36', 5)->default('')->primary();
    			$table->string('star_name', 128)->nullable();
    			$table->string('star_birthday', 64)->nullable();
    			$table->integer('star_age')->nullable()->default(0);
    			$table->string('star_cupsize', 8)->nullable();
    			$table->integer('star_height')->nullable();
    			$table->integer('star_bust')->nullable();
    			$table->integer('star_waist')->nullable();
    			$table->integer('star_hip')->nullable();
    			$table->string('hometown', 128)->nullable();
    			$table->string('hobby', 512)->nullable()->comment('https://jp.netcdn.space/mono/actjpgs/');
    			$table->string('star_pic', 64)->nullable()->comment('https://jp.netcdn.space/mono/actjpgs/');
    			$table->integer('favorite')->nullable()->default(0);
    			$table->integer('file_num')->nullable();
    			$table->integer('code_10')->unsigned()->nullable();
    		});
    	}
    
    
    	/**
    	 * Reverse the migrations.
    	 *
    	 * @return void
    	 */
    	public function down()
    	{
    		Schema::drop('avbook_javbus_star');
    	}
    
    }
    
    
    ================================================
    FILE: database/migrations/2019_05_11_083515_create_avbook_javbus_studio_table.php
    ================================================
    string('code_36', 10)->default('')->primary();
    			$table->string('studio_name', 256)->nullable();
    			$table->integer('code_10')->unsigned()->nullable()->default(0);
    		});
    	}
    
    
    	/**
    	 * Reverse the migrations.
    	 *
    	 * @return void
    	 */
    	public function down()
    	{
    		Schema::drop('avbook_javbus_studio');
    	}
    
    }
    
    
    ================================================
    FILE: database/migrations/2019_07_02_090723_create_avbook_javlib_genre_table.php
    ================================================
    string('genre_code', 11)->primary();
    			$table->string('genre_dsce', 64)->nullable();
    			$table->integer('code_10')->nullable();
    			$table->integer('page_num')->nullable();
    			$table->integer('old_page_num')->nullable();
    		});
    	}
    
    
    	/**
    	 * Reverse the migrations.
    	 *
    	 * @return void
    	 */
    	public function down()
    	{
    		Schema::drop('avbook_javlib_genre');
    	}
    
    }
    
    
    ================================================
    FILE: database/migrations/2019_07_02_090723_create_avbook_javlib_movie_table.php
    ================================================
    bigInteger('code_10')->nullable();
    			$table->string('code_36', 12)->default('0')->primary();
    			$table->string('censored_id', 64)->nullable()->default('')->index('censored_id')->comment('識別碼');
    			$table->string('movie_title', 512)->nullable();
    			$table->string('movie_pic_cover', 128)->nullable()->comment('替换 域名  https://us.netcdn.space/');
    			$table->string('release_date', 16)->nullable()->default('0000-00-00')->comment('發行日期');
    			$table->string('movie_length', 32)->nullable()->comment('長度');
    			$table->string('Director', 12)->nullable()->comment('導演');
    			$table->string('Studio', 12)->nullable()->comment('製作商');
    			$table->string('Label', 12)->nullable()->comment('發行商');
    			$table->string('Series', 256)->nullable()->comment('系列');
    			$table->string('Genre', 256)->nullable()->comment('類別');
    			$table->string('JAV_Idols', 256)->nullable()->comment('演員');
    			$table->string('sample_dmm', 8192)->nullable();
    			$table->float('score', 4)->nullable();
    			$table->integer('userswanted')->nullable();
    			$table->integer('userswatched')->nullable();
    			$table->integer('usersowned')->nullable();
    			$table->boolean('comments')->nullable();
    		});
    	}
    
    
    	/**
    	 * Reverse the migrations.
    	 *
    	 * @return void
    	 */
    	public function down()
    	{
    		Schema::drop('avbook_javlib_movie');
    	}
    
    }
    
    
    ================================================
    FILE: database/migrations/2019_07_02_090723_create_avbook_javlib_vid_table.php
    ================================================
    string('vid', 12)->primary();
    		});
    	}
    
    
    	/**
    	 * Reverse the migrations.
    	 *
    	 * @return void
    	 */
    	public function down()
    	{
    		Schema::drop('avbook_javlib_vid');
    	}
    
    }
    
    
    ================================================
    FILE: database/seeds/DatabaseSeeder.php
    ================================================
    call(UsersTableSeeder::class);
        }
    }
    
    
    ================================================
    FILE: newbra.sh
    ================================================
    git checkout --orphan latest_branch  ;
    git add -A  ;
    git commit -am "commit m1"  ;
    git branch -D master   ;
    git branch -m master  ;
    git push -f origin master ;
    
    
    ================================================
    FILE: package.json
    ================================================
    {
        "private": true,
        "scripts": {
            "dev": "npm run development",
            "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
            "watch": "npm run development -- --watch",
            "watch-poll": "npm run watch -- --watch-poll",
            "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
            "prod": "npm run production",
            "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
        },
        "devDependencies": {
            "axios": "^0.18.1",
            "bootstrap": "^4.0.0",
            "cross-env": "^5.1",
            "jquery": "^3.2",
            "laravel-mix": "^4.0.7",
            "lodash": "^4.17.5",
            "popper.js": "^1.12",
            "resolve-url-loader": "^2.3.1",
            "sass": "^1.15.2",
            "sass-loader": "^7.1.0",
            "vue": "^2.5.17"
        },
        "dependencies": {
            "bootstrap-star-rating": "^4.0.4"
        }
    }
    
    
    ================================================
    FILE: phpunit.xml
    ================================================
    
    
        
            
                ./tests/Unit
            
    
            
                ./tests/Feature
            
        
        
            
                ./app
            
        
        
            
            
            
            
            
            
        
    
    
    
    ================================================
    FILE: public/.htaccess
    ================================================
    
        
            Options -MultiViews -Indexes
        
    
        RewriteEngine On
    
        # Handle Authorization Header
        RewriteCond %{HTTP:Authorization} .
        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    
        # Redirect Trailing Slashes If Not A Folder...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_URI} (.+)/$
        RewriteRule ^ %1 [L,R=301]
    
        # Handle Front Controller...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.php [L]
    
    
    
    ================================================
    FILE: public/avbook/StackBlur.js
    ================================================
    /*
    
    StackBlur - a fast almost Gaussian Blur For Canvas
    
    Version: 	0.5
    Author:		Mario Klingemann
    Contact: 	mario@quasimondo.com
    Website:	http://www.quasimondo.com/StackBlurForCanvas
    Twitter:	@quasimondo
    
    In case you find this class useful - especially in commercial projects -
    I am not totally unhappy for a small donation to my PayPal account
    mario@quasimondo.de
    
    Or support me on flattr: 
    https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript
    
    Copyright (c) 2010 Mario Klingemann
    
    Permission is hereby granted, free of charge, to any person
    obtaining a copy of this software and associated documentation
    files (the "Software"), to deal in the Software without
    restriction, including without limitation the rights to use,
    copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the
    Software is furnished to do so, subject to the following
    conditions:
    
    The above copyright notice and this permission notice shall be
    included in all copies or substantial portions of the Software.
    
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    OTHER DEALINGS IN THE SOFTWARE.
    */
    
    var mul_table = [
            512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,
            454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,
            482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,
            437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,
            497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,
            320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,
            446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,
            329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,
            505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,
            399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,
            324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,
            268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,
            451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,
            385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,
            332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,
            289,287,285,282,280,278,275,273,271,269,267,265,263,261,259];
            
       
    var shg_table = [
    	     9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 
    		17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 
    		19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20,
    		20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,
    		21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
    		21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 
    		22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
    		22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 
    		23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
    		23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
    		23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 
    		23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 
    		24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
    		24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
    		24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
    		24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24 ];
    
    function stackBlurImage( imageID, canvasID, radius, blurAlphaChannel )
    {
    			
     	var img = document.getElementById( imageID );
    	var w = img.naturalWidth;
        var h = img.naturalHeight;
           
    	var canvas = document.getElementById( canvasID );
          
        canvas.style.width  = w + "px";
        canvas.style.height = h + "px";
        canvas.width = w;
        canvas.height = h;
        
        var context = canvas.getContext("2d");
        context.clearRect( 0, 0, w, h );
        context.drawImage( img, 0, 0 );
    
    	if ( isNaN(radius) || radius < 1 ) return;
    	
    	if ( blurAlphaChannel )
    		stackBlurCanvasRGBA( canvasID, 0, 0, w, h, radius );
    	else 
    		stackBlurCanvasRGB( canvasID, 0, 0, w, h, radius );
    }
    
    
    function stackBlurCanvasRGBA( id, top_x, top_y, width, height, radius )
    {
    	if ( isNaN(radius) || radius < 1 ) return;
    	radius |= 0;
    	
    	var canvas  = document.getElementById( id );
    	var context = canvas.getContext("2d");
    	var imageData;
    	
    	try {
    	  try {
    		imageData = context.getImageData( top_x, top_y, width, height );
    	  } catch(e) {
    	  
    		// NOTE: this part is supposedly only needed if you want to work with local files
    		// so it might be okay to remove the whole try/catch block and just use
    		// imageData = context.getImageData( top_x, top_y, width, height );
    		try {
    			netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
    			imageData = context.getImageData( top_x, top_y, width, height );
    		} catch(e) {
    			alert("Cannot access local image");
    			throw new Error("unable to access local image data: " + e);
    			return;
    		}
    	  }
    	} catch(e) {
    	  alert("Cannot access image");
    	  throw new Error("unable to access image data: " + e);
    	}
    			
    	var pixels = imageData.data;
    			
    	var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, a_sum, 
    	r_out_sum, g_out_sum, b_out_sum, a_out_sum,
    	r_in_sum, g_in_sum, b_in_sum, a_in_sum, 
    	pr, pg, pb, pa, rbs;
    			
    	var div = radius + radius + 1;
    	var w4 = width << 2;
    	var widthMinus1  = width - 1;
    	var heightMinus1 = height - 1;
    	var radiusPlus1  = radius + 1;
    	var sumFactor = radiusPlus1 * ( radiusPlus1 + 1 ) / 2;
    	
    	var stackStart = new BlurStack();
    	var stack = stackStart;
    	for ( i = 1; i < div; i++ )
    	{
    		stack = stack.next = new BlurStack();
    		if ( i == radiusPlus1 ) var stackEnd = stack;
    	}
    	stack.next = stackStart;
    	var stackIn = null;
    	var stackOut = null;
    	
    	yw = yi = 0;
    	
    	var mul_sum = mul_table[radius];
    	var shg_sum = shg_table[radius];
    	
    	for ( y = 0; y < height; y++ )
    	{
    		r_in_sum = g_in_sum = b_in_sum = a_in_sum = r_sum = g_sum = b_sum = a_sum = 0;
    		
    		r_out_sum = radiusPlus1 * ( pr = pixels[yi] );
    		g_out_sum = radiusPlus1 * ( pg = pixels[yi+1] );
    		b_out_sum = radiusPlus1 * ( pb = pixels[yi+2] );
    		a_out_sum = radiusPlus1 * ( pa = pixels[yi+3] );
    		
    		r_sum += sumFactor * pr;
    		g_sum += sumFactor * pg;
    		b_sum += sumFactor * pb;
    		a_sum += sumFactor * pa;
    		
    		stack = stackStart;
    		
    		for( i = 0; i < radiusPlus1; i++ )
    		{
    			stack.r = pr;
    			stack.g = pg;
    			stack.b = pb;
    			stack.a = pa;
    			stack = stack.next;
    		}
    		
    		for( i = 1; i < radiusPlus1; i++ )
    		{
    			p = yi + (( widthMinus1 < i ? widthMinus1 : i ) << 2 );
    			r_sum += ( stack.r = ( pr = pixels[p])) * ( rbs = radiusPlus1 - i );
    			g_sum += ( stack.g = ( pg = pixels[p+1])) * rbs;
    			b_sum += ( stack.b = ( pb = pixels[p+2])) * rbs;
    			a_sum += ( stack.a = ( pa = pixels[p+3])) * rbs;
    			
    			r_in_sum += pr;
    			g_in_sum += pg;
    			b_in_sum += pb;
    			a_in_sum += pa;
    			
    			stack = stack.next;
    		}
    		
    		
    		stackIn = stackStart;
    		stackOut = stackEnd;
    		for ( x = 0; x < width; x++ )
    		{
    			pixels[yi+3] = pa = (a_sum * mul_sum) >> shg_sum;
    			if ( pa != 0 )
    			{
    				pa = 255 / pa;
    				pixels[yi]   = ((r_sum * mul_sum) >> shg_sum) * pa;
    				pixels[yi+1] = ((g_sum * mul_sum) >> shg_sum) * pa;
    				pixels[yi+2] = ((b_sum * mul_sum) >> shg_sum) * pa;
    			} else {
    				pixels[yi] = pixels[yi+1] = pixels[yi+2] = 0;
    			}
    			
    			r_sum -= r_out_sum;
    			g_sum -= g_out_sum;
    			b_sum -= b_out_sum;
    			a_sum -= a_out_sum;
    			
    			r_out_sum -= stackIn.r;
    			g_out_sum -= stackIn.g;
    			b_out_sum -= stackIn.b;
    			a_out_sum -= stackIn.a;
    			
    			p =  ( yw + ( ( p = x + radius + 1 ) < widthMinus1 ? p : widthMinus1 ) ) << 2;
    			
    			r_in_sum += ( stackIn.r = pixels[p]);
    			g_in_sum += ( stackIn.g = pixels[p+1]);
    			b_in_sum += ( stackIn.b = pixels[p+2]);
    			a_in_sum += ( stackIn.a = pixels[p+3]);
    			
    			r_sum += r_in_sum;
    			g_sum += g_in_sum;
    			b_sum += b_in_sum;
    			a_sum += a_in_sum;
    			
    			stackIn = stackIn.next;
    			
    			r_out_sum += ( pr = stackOut.r );
    			g_out_sum += ( pg = stackOut.g );
    			b_out_sum += ( pb = stackOut.b );
    			a_out_sum += ( pa = stackOut.a );
    			
    			r_in_sum -= pr;
    			g_in_sum -= pg;
    			b_in_sum -= pb;
    			a_in_sum -= pa;
    			
    			stackOut = stackOut.next;
    
    			yi += 4;
    		}
    		yw += width;
    	}
    
    	
    	for ( x = 0; x < width; x++ )
    	{
    		g_in_sum = b_in_sum = a_in_sum = r_in_sum = g_sum = b_sum = a_sum = r_sum = 0;
    		
    		yi = x << 2;
    		r_out_sum = radiusPlus1 * ( pr = pixels[yi]);
    		g_out_sum = radiusPlus1 * ( pg = pixels[yi+1]);
    		b_out_sum = radiusPlus1 * ( pb = pixels[yi+2]);
    		a_out_sum = radiusPlus1 * ( pa = pixels[yi+3]);
    		
    		r_sum += sumFactor * pr;
    		g_sum += sumFactor * pg;
    		b_sum += sumFactor * pb;
    		a_sum += sumFactor * pa;
    		
    		stack = stackStart;
    		
    		for( i = 0; i < radiusPlus1; i++ )
    		{
    			stack.r = pr;
    			stack.g = pg;
    			stack.b = pb;
    			stack.a = pa;
    			stack = stack.next;
    		}
    		
    		yp = width;
    		
    		for( i = 1; i <= radius; i++ )
    		{
    			yi = ( yp + x ) << 2;
    			
    			r_sum += ( stack.r = ( pr = pixels[yi])) * ( rbs = radiusPlus1 - i );
    			g_sum += ( stack.g = ( pg = pixels[yi+1])) * rbs;
    			b_sum += ( stack.b = ( pb = pixels[yi+2])) * rbs;
    			a_sum += ( stack.a = ( pa = pixels[yi+3])) * rbs;
    		   
    			r_in_sum += pr;
    			g_in_sum += pg;
    			b_in_sum += pb;
    			a_in_sum += pa;
    			
    			stack = stack.next;
    		
    			if( i < heightMinus1 )
    			{
    				yp += width;
    			}
    		}
    		
    		yi = x;
    		stackIn = stackStart;
    		stackOut = stackEnd;
    		for ( y = 0; y < height; y++ )
    		{
    			p = yi << 2;
    			pixels[p+3] = pa = (a_sum * mul_sum) >> shg_sum;
    			if ( pa > 0 )
    			{
    				pa = 255 / pa;
    				pixels[p]   = ((r_sum * mul_sum) >> shg_sum ) * pa;
    				pixels[p+1] = ((g_sum * mul_sum) >> shg_sum ) * pa;
    				pixels[p+2] = ((b_sum * mul_sum) >> shg_sum ) * pa;
    			} else {
    				pixels[p] = pixels[p+1] = pixels[p+2] = 0;
    			}
    			
    			r_sum -= r_out_sum;
    			g_sum -= g_out_sum;
    			b_sum -= b_out_sum;
    			a_sum -= a_out_sum;
    		   
    			r_out_sum -= stackIn.r;
    			g_out_sum -= stackIn.g;
    			b_out_sum -= stackIn.b;
    			a_out_sum -= stackIn.a;
    			
    			p = ( x + (( ( p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1 ) * width )) << 2;
    			
    			r_sum += ( r_in_sum += ( stackIn.r = pixels[p]));
    			g_sum += ( g_in_sum += ( stackIn.g = pixels[p+1]));
    			b_sum += ( b_in_sum += ( stackIn.b = pixels[p+2]));
    			a_sum += ( a_in_sum += ( stackIn.a = pixels[p+3]));
    		   
    			stackIn = stackIn.next;
    			
    			r_out_sum += ( pr = stackOut.r );
    			g_out_sum += ( pg = stackOut.g );
    			b_out_sum += ( pb = stackOut.b );
    			a_out_sum += ( pa = stackOut.a );
    			
    			r_in_sum -= pr;
    			g_in_sum -= pg;
    			b_in_sum -= pb;
    			a_in_sum -= pa;
    			
    			stackOut = stackOut.next;
    			
    			yi += width;
    		}
    	}
    	
    	context.putImageData( imageData, top_x, top_y );
    	
    }
    
    
    function stackBlurCanvasRGB( id, top_x, top_y, width, height, radius )
    {
    	if ( isNaN(radius) || radius < 1 ) return;
    	radius |= 0;
    	
    	var canvas  = document.getElementById( id );
    	var context = canvas.getContext("2d");
    	var imageData;
    	
    	try {
    	  try {
    		imageData = context.getImageData( top_x, top_y, width, height );
    	  } catch(e) {
    	  
    		// NOTE: this part is supposedly only needed if you want to work with local files
    		// so it might be okay to remove the whole try/catch block and just use
    		// imageData = context.getImageData( top_x, top_y, width, height );
    		try {
    			netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
    			imageData = context.getImageData( top_x, top_y, width, height );
    		} catch(e) {
    			alert("Cannot access local image");
    			throw new Error("unable to access local image data: " + e);
    			return;
    		}
    	  }
    	} catch(e) {
    	  alert("Cannot access image");
    	  throw new Error("unable to access image data: " + e);
    	}
    			
    	var pixels = imageData.data;
    			
    	var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum,
    	r_out_sum, g_out_sum, b_out_sum,
    	r_in_sum, g_in_sum, b_in_sum,
    	pr, pg, pb, rbs;
    			
    	var div = radius + radius + 1;
    	var w4 = width << 2;
    	var widthMinus1  = width - 1;
    	var heightMinus1 = height - 1;
    	var radiusPlus1  = radius + 1;
    	var sumFactor = radiusPlus1 * ( radiusPlus1 + 1 ) / 2;
    	
    	var stackStart = new BlurStack();
    	var stack = stackStart;
    	for ( i = 1; i < div; i++ )
    	{
    		stack = stack.next = new BlurStack();
    		if ( i == radiusPlus1 ) var stackEnd = stack;
    	}
    	stack.next = stackStart;
    	var stackIn = null;
    	var stackOut = null;
    	
    	yw = yi = 0;
    	
    	var mul_sum = mul_table[radius];
    	var shg_sum = shg_table[radius];
    	
    	for ( y = 0; y < height; y++ )
    	{
    		r_in_sum = g_in_sum = b_in_sum = r_sum = g_sum = b_sum = 0;
    		
    		r_out_sum = radiusPlus1 * ( pr = pixels[yi] );
    		g_out_sum = radiusPlus1 * ( pg = pixels[yi+1] );
    		b_out_sum = radiusPlus1 * ( pb = pixels[yi+2] );
    		
    		r_sum += sumFactor * pr;
    		g_sum += sumFactor * pg;
    		b_sum += sumFactor * pb;
    		
    		stack = stackStart;
    		
    		for( i = 0; i < radiusPlus1; i++ )
    		{
    			stack.r = pr;
    			stack.g = pg;
    			stack.b = pb;
    			stack = stack.next;
    		}
    		
    		for( i = 1; i < radiusPlus1; i++ )
    		{
    			p = yi + (( widthMinus1 < i ? widthMinus1 : i ) << 2 );
    			r_sum += ( stack.r = ( pr = pixels[p])) * ( rbs = radiusPlus1 - i );
    			g_sum += ( stack.g = ( pg = pixels[p+1])) * rbs;
    			b_sum += ( stack.b = ( pb = pixels[p+2])) * rbs;
    			
    			r_in_sum += pr;
    			g_in_sum += pg;
    			b_in_sum += pb;
    			
    			stack = stack.next;
    		}
    		
    		
    		stackIn = stackStart;
    		stackOut = stackEnd;
    		for ( x = 0; x < width; x++ )
    		{
    			pixels[yi]   = (r_sum * mul_sum) >> shg_sum;
    			pixels[yi+1] = (g_sum * mul_sum) >> shg_sum;
    			pixels[yi+2] = (b_sum * mul_sum) >> shg_sum;
    			
    			r_sum -= r_out_sum;
    			g_sum -= g_out_sum;
    			b_sum -= b_out_sum;
    			
    			r_out_sum -= stackIn.r;
    			g_out_sum -= stackIn.g;
    			b_out_sum -= stackIn.b;
    			
    			p =  ( yw + ( ( p = x + radius + 1 ) < widthMinus1 ? p : widthMinus1 ) ) << 2;
    			
    			r_in_sum += ( stackIn.r = pixels[p]);
    			g_in_sum += ( stackIn.g = pixels[p+1]);
    			b_in_sum += ( stackIn.b = pixels[p+2]);
    			
    			r_sum += r_in_sum;
    			g_sum += g_in_sum;
    			b_sum += b_in_sum;
    			
    			stackIn = stackIn.next;
    			
    			r_out_sum += ( pr = stackOut.r );
    			g_out_sum += ( pg = stackOut.g );
    			b_out_sum += ( pb = stackOut.b );
    			
    			r_in_sum -= pr;
    			g_in_sum -= pg;
    			b_in_sum -= pb;
    			
    			stackOut = stackOut.next;
    
    			yi += 4;
    		}
    		yw += width;
    	}
    
    	
    	for ( x = 0; x < width; x++ )
    	{
    		g_in_sum = b_in_sum = r_in_sum = g_sum = b_sum = r_sum = 0;
    		
    		yi = x << 2;
    		r_out_sum = radiusPlus1 * ( pr = pixels[yi]);
    		g_out_sum = radiusPlus1 * ( pg = pixels[yi+1]);
    		b_out_sum = radiusPlus1 * ( pb = pixels[yi+2]);
    		
    		r_sum += sumFactor * pr;
    		g_sum += sumFactor * pg;
    		b_sum += sumFactor * pb;
    		
    		stack = stackStart;
    		
    		for( i = 0; i < radiusPlus1; i++ )
    		{
    			stack.r = pr;
    			stack.g = pg;
    			stack.b = pb;
    			stack = stack.next;
    		}
    		
    		yp = width;
    		
    		for( i = 1; i <= radius; i++ )
    		{
    			yi = ( yp + x ) << 2;
    			
    			r_sum += ( stack.r = ( pr = pixels[yi])) * ( rbs = radiusPlus1 - i );
    			g_sum += ( stack.g = ( pg = pixels[yi+1])) * rbs;
    			b_sum += ( stack.b = ( pb = pixels[yi+2])) * rbs;
    			
    			r_in_sum += pr;
    			g_in_sum += pg;
    			b_in_sum += pb;
    			
    			stack = stack.next;
    		
    			if( i < heightMinus1 )
    			{
    				yp += width;
    			}
    		}
    		
    		yi = x;
    		stackIn = stackStart;
    		stackOut = stackEnd;
    		for ( y = 0; y < height; y++ )
    		{
    			p = yi << 2;
    			pixels[p]   = (r_sum * mul_sum) >> shg_sum;
    			pixels[p+1] = (g_sum * mul_sum) >> shg_sum;
    			pixels[p+2] = (b_sum * mul_sum) >> shg_sum;
    			
    			r_sum -= r_out_sum;
    			g_sum -= g_out_sum;
    			b_sum -= b_out_sum;
    			
    			r_out_sum -= stackIn.r;
    			g_out_sum -= stackIn.g;
    			b_out_sum -= stackIn.b;
    			
    			p = ( x + (( ( p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1 ) * width )) << 2;
    			
    			r_sum += ( r_in_sum += ( stackIn.r = pixels[p]));
    			g_sum += ( g_in_sum += ( stackIn.g = pixels[p+1]));
    			b_sum += ( b_in_sum += ( stackIn.b = pixels[p+2]));
    			
    			stackIn = stackIn.next;
    			
    			r_out_sum += ( pr = stackOut.r );
    			g_out_sum += ( pg = stackOut.g );
    			b_out_sum += ( pb = stackOut.b );
    			
    			r_in_sum -= pr;
    			g_in_sum -= pg;
    			b_in_sum -= pb;
    			
    			stackOut = stackOut.next;
    			
    			yi += width;
    		}
    	}
    	
    	context.putImageData( imageData, top_x, top_y );
    	
    }
    
    function BlurStack()
    {
    	this.r = 0;
    	this.g = 0;
    	this.b = 0;
    	this.a = 0;
    	this.next = null;
    }
    
    ================================================
    FILE: public/avbook/ads.js
    ================================================
    if(top===self) var p=document.URL; else var p=document.referrer;var dt=new Date().getTime();
    var exoDocumentProtocol = (document.location.protocol != "https:" && document.location.protocol != "http:") ? "https:" : document.location.protocol;
    if(typeof(ad_sub) == 'undefined') var ad_sub = "";
    if(typeof(ad_tags) == 'undefined') var ad_tags = "";
    var ad_type = ad_width + 'x' + ad_height;
    if(ad_width == '100%' && ad_height == '100%') ad_type = 'auto';
    var ad_screen_resolution = screen.width + 'x' + screen.height;
    document.write('');
    
    ================================================
    FILE: public/avbook/auto.js
    ================================================
    // ==UserScript==
    // @name         JAV老司机
    // @namespace    https://sleazyfork.org/zh-CN/users/85065
    // @version      1.0.0
    // @description  JAV老司机神器,支持javlibrary.com、javbus.com、avmo.pw、avso.pw等老司机站点。拥有JAV高清预览大图,JAV列表无限滚动自动加载,合成“挊”的自动获取JAV磁链接,一键自动115离线下载,优化成高效浏览的页面排版。
    // @author       Hobby
    
    // @require      http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.4.min.js
    // @require      http://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js
    // @resource     icon http://geekdream.com/image/115helper_icon_001.jpg
    
    // @include     https://www.javbus.com/*
    // @include     https://www.javbus2.com/*
    // @include     https://www.javbus3.com/*
    // @include     https://www.javbus5.com/*
    // @include     https://www.javbus.me/*
    // @match        http*://www.javbus.com/*
    
    // @match        http*://*avmo.pw/*
    // @match        http*://*avso.pw/*
    
    // @include     http*://*javlibrary.com/*
    // @include     http*://*5avlib.com/*
    // @include     http*://*look4lib.com/*
    // @include     http*://*javlib3.com/*
    // @include     http*://*javli6.com/*
    // @include     http*://*j8vlib.com/*
    // @include     http*://*j9lib.com/*
    
    // @match        http://115.com/*
    // @match        http*://avdb.la/movie/*
    
    // @run-at       document-idle
    // @grant        GM_xmlhttpRequest
    // @grant        GM_addStyle
    // @grant        GM_getValue
    // @grant        GM_setValue
    // @grant        GM_notification
    // @grant        GM_setClipboard
    // @grant        GM_getResourceURL
    
    // @connect      blogjav.net
    // @connect      pixhost.org
    // @connect      115.com
    // @connect      btso.pw
    // @connect      btdb.in
    
    // @copyright    hobby 2016-12-18
    
    // 大陆用户推荐Chrome + Tampermonkey(必须扩展) + XX-Net(代理) + Proxy SwitchyOmega(扩展)的环境下配合使用。
    
    // v1.0.0 支持javlibrary.com、javbus.com、avmo.pw、avso.pw等老司机站点,第一版发布。
    
    // ==/UserScript==
    /* jshint -W097 */
    (function() {
    	'use strict';
    	var jav_userID = 0; //115用户ID
    	//icon图标
    	var icon = GM_getResourceURL('icon');
    
    	var common = {
    		parsetext: function(text) {
    			var doc = null;
    			try {
    				doc = document.implementation.createHTMLDocument('');
    				doc.documentElement.innerHTML = text;
    				return doc;
    			}
    			catch (e) {
    				alert('parse error');
    			}
    		},
    		//方法: 通用chrome通知
    		notifiy:function (title, body, icon, click_url)
    		{
    
    			var notificationDetails = {
    				text: body,
    				title: title,
    				timeout: 10000,
    				image: icon,
    				onclick: function() {
    					window.open(click_url);
    				}
    			};
    			GM_notification(notificationDetails);
    		},
    		addAvImg:function(avid, func){
    			//异步请求搜索blogjav.net的番号
    			GM_xmlhttpRequest({
    				method: "GET",
    				//大图地址
    				url: 'http://blogjav.net/?s='+avid,
    				onload: function(result) {
    					var doc = common.parsetext(result.responseText);
    					var a = doc.getElementsByClassName('more-link')[0];
    					if (a) {
    						//异步请求调用内页详情的访问地址
    						GM_xmlhttpRequest({
    							method: "GET",
    							//大图地址
    							url: a.href,
    							headers:{
    								referrer:  "http://pixhost.org/" //绕过防盗图的关键
    							},
    							onload: function(XMLHttpRequest) {
    								var bodyStr = XMLHttpRequest.responseText;
    								var yixieBody = bodyStr.substring(bodyStr.search(/<\/span>/),bodyStr.search(/
    $('.socialmedia').remove(); GM_addStyle('#video_info{text-align: left;font: 14px Arial;min-width: 100px;max-width: 260px;}'); var tdE = $("td[style='vertical-align: top;']")[0]; $(tdE.parentElement).append(''); $('#hobby').append(main.cur_tab); } }, }; // 挊 var main_keys = Object.keys(main); //下面的不要出现 main.cur_tab = null; main.cur_vid = ''; // 第三方脚本调用 var thirdparty = { // 挊 offline_sites : { 115: { name: '115离线', url: 'http://115.com/?tab=offline&mode=wangpan', enable: true, }, }, // 挊 searchMagnetRun: function() { for (var i = 0; i < main_keys.length; i++) { var v = main[main_keys[i]]; //for javlibrary if($("#adultwarningprompt")[0] !== null){ //$("#adultwarningprompt input")[0].click(); } if (v.re.test(location.href)) { if (v.type === 0) { try { main.cur_vid = v.vid(); } catch (e) { main.cur_vid = ''; } if (main.cur_vid) { GM_addStyle([ '#nong-table-new{margin:10px auto;color:#666 !important;font-size:13px;text-align:center;background-color: #F2F2F2;}', '#nong-table-new th,#nong-table-new td{text-align: center;height:30px;background-color: #FFF;padding:0 1em 0;border: 1px solid #EFEFEF;}', '.jav-nong-row{text-align: center;height:30px;background-color: #FFF;padding:0 1em 0;border: 1px solid #EFEFEF;}', '.nong-copy{color:#08c !important;}', '.nong-offline{text-align: center;}', '#jav-nong-head a {margin-right: 5px;}', '.nong-offline-download{color: rgb(0, 180, 30) !important; margin-right: 4px !important;}', '.nong-offline-download:hover{color:red !important;}', ].join('')); main.cur_tab = thirdparty.magnet_table.full(); console.log('番号:', main.cur_vid); v.proc(); // console.log(main.cur_tab) var t = $('#jav-nong-head')[0].firstChild; t.firstChild.addEventListener('change', function(e) { console.log(e.target.value); GM_setValue('search_index', e.target.value); var s = $('#nong-table-new')[0]; s.parentElement.removeChild(s); thirdparty.searchMagnetRun(); }); thirdparty.search_engines.cur_engine(main.cur_vid, function(src, data) { if (data.length === 0) { $('#nong-table-new')[0].querySelectorAll('#notice')[0].textContent = 'No search result'; } else { thirdparty.magnet_table.updata_table(src, data, 'full'); /*display search url*/ var y = $('#jav-nong-head th')[1].firstChild; y.href = thirdparty.search_engines.full_url; } }); } } break; } } }, // 挊 search_engines : { switch_engine: function(i) { // var index = GM_getValue("search_index",0); GM_setValue('search_index', i); return i; }, cur_engine: function(kw, cb) { var z = this[GM_getValue('search_index', 0)]; if(!z){ alert("search engine not found"); } return z(kw, cb); }, parse_error:function(a){ alert("调用搜索引擎错误,可能需要更新,请向作者反馈。i="+ a); }, full_url: '', 0: function(kw, cb) { GM_xmlhttpRequest({ method: 'GET', url: 'https://btso.pw/search/' + kw, onload: function(result) { thirdparty.search_engines.full_url = result.finalUrl; var doc = common.parsetext(result.responseText); if (!doc) { thirdparty.search_engines.parse_error(GM_getValue('search_index')); } var data = []; var t = doc.getElementsByClassName('data-list')[0]; if (t) { var a = t.getElementsByTagName('a'); for (var i = 0; i < a.length; i++) { if (!a[i].className.match('btn')) { data.push({ 'title': a[i].title, 'maglink': 'magnet:?xt=urn:btih:' + a[i].outerHTML.replace(/.*hash\//, '').replace(/" .*\n.*\n.*\n.*/, ''), 'size': a[i].nextElementSibling.textContent, 'src': a[i].href, }); } } } cb(result.finalUrl, data); }, onerror: function(e) { console.log(e); } }); }, 1: function(kw, cb) { GM_xmlhttpRequest({ method: 'GET', url: 'https://btdb.in/q/' + kw + '/', onload: function(result) { thirdparty.search_engines.full_url = result.finalUrl; var doc = common.parsetext(result.responseText); if(!doc){ thirdparty.search_engines.parse_error(GM_getValue('search_index')); } var data = []; var elems = doc.getElementsByClassName('item-title'); for (var i = 0; i < elems.length; i++) { data.push({ 'title': elems[i].firstChild.title, 'maglink': elems[i].nextElementSibling.firstElementChild.href, 'size': elems[i].nextElementSibling.children[1].textContent, 'src': 'https://btdb.in' + elems[i].firstChild.getAttribute('href'), }); } console.log(data); cb(result.finalUrl, data); }, onerror: function(e) { console.log(e); } }); }, }, // 挊 magnet_table : { template: { create_head: function() { var a = document.createElement('tr'); a.className = 'jav-nong-row'; a.id = 'jav-nong-head'; var list = [ '标题', '大小', '操作', '离线下载' ]; for (var i = 0; i < list.length; i++) { var b = this.head.cloneNode(true); if (i === 0) { var select = document.createElement("select"); var ops = ["btio", "btdb"]; var cur_index = GM_getValue("search_index",0); for (var j = 0; j < ops.length; j++) { var op = document.createElement("option"); op.value = j.toString(); op.textContent = ops[j]; if (cur_index == j) { op.setAttribute("selected", "selected"); } select.appendChild(op); } b.removeChild(b.firstChild); b.appendChild(select); a.appendChild(b); continue; } b.firstChild.textContent = list[i]; a.appendChild(b); } // var select_box = this.create_select_box(); // a.firstChild.appendChild(select_box); return a; }, create_row: function(data) { var a = document.createElement('tr'); a.className = 'jav-nong-row'; a.setAttribute('maglink', data.maglink); var b = document.createElement('td'); var list = [ this.create_info(data.title, data.maglink), this.create_size(data.size, data.src), this.create_operation(data.maglink), this.create_offline() ]; for (var i = 0; i < list.length; i++) { var c = b.cloneNode(true); c.appendChild(list[i]); a.appendChild(c); } return a; }, create_loading: function() { var a = document.createElement('tr'); a.className = 'jav-nong-row'; var p = document.createElement('p'); p.textContent = 'Loading'; p.id = 'notice'; a.appendChild(p); return a; }, create_info: function(title, maglink) { var a = this.info.cloneNode(true); a.firstChild.textContent = title.length < 20 ? title : title.substr(0, 20) + '...'; a.firstChild.href = maglink; a.title = title; return a; }, create_size: function(size, src) { var a = this.size.cloneNode(true); a.textContent = size; a.href = src; return a; }, create_operation: function(maglink) { var a = this.operation.cloneNode(true); a.firstChild.href = maglink; return a; }, create_offline: function() { //有用 hobby var a = this.offline(); a.className = 'nong-offline'; return a; }, create_select_box: function() { var select_box = document.createElement('select'); select_box.id = 'nong-search-select'; select_box.setAttribute('title', '切换搜索结果'); var search_name = GM_getValue('search', default_search_name); for (var k in thirdparty.search_engines) { var o = document.createElement('option'); if (k == search_name) { o.setAttribute('selected', 'selected'); } o.setAttribute('value', k); o.textContent = k; select_box.appendChild(o); } return select_box; }, head: (function() { var a = document.createElement('th'); var b = document.createElement('a'); a.appendChild(b); return a; })(), info: (function() { var a = document.createElement('div'); var b = document.createElement('a'); b.textContent = 'name'; b.href = 'src'; a.appendChild(b); return a; })(), size: function() { var a = document.createElement('a'); a.textContent = 'size'; return a; }(), operation: (function() { var a = document.createElement('div'); var copy = document.createElement('a'); copy.className = 'nong-copy'; copy.textContent = '复制'; a.appendChild(copy); return a; })(), offline: function() { var a = document.createElement('div'); var b = document.createElement('a'); b.className = 'nong-offline-download'; b.target = '_blank'; //debugger; for (var k in thirdparty.offline_sites) { if (thirdparty.offline_sites[k].enable) { var c = b.cloneNode(true); c.href = thirdparty.offline_sites[k].url; c.textContent = thirdparty.offline_sites[k].name; a.appendChild(c); } } return a; }, }, create_empty_table: function() { //有用 hobby var a = document.createElement('table'); a.id = 'nong-table-new'; return a; }, updata_table: function(src, data, type) { if (type == 'full') { var tab = $('#nong-table-new')[0]; tab.removeChild(tab.querySelector("#notice").parentElement); for (var i = 0; i < data.length; i++) { tab.appendChild(thirdparty.magnet_table.template.create_row(data[i])); } } // else if(type =='mini'){ // } this.reg_event(); }, full: function(src, data) { var tab = this.create_empty_table(); tab.appendChild(thirdparty.magnet_table.template.create_head()); // for (var i = 0; i < data.length; i++) { // tab.appendChild(thirdparty.magnet_table.template.create_row(data[i])) // } var loading = thirdparty.magnet_table.template.create_loading(); tab.appendChild(loading); return tab; }, handle_event: function(event) { if (event.target.className == 'nong-copy') { event.target.innerHTML = '成功'; GM_setClipboard(event.target.href); setTimeout(function() { event.target.innerHTML = '复制'; }, 1000); event.preventDefault(); //阻止跳转 } else if (event.target.className == 'nong-offline-download') { var maglink = event.target.parentElement.parentElement.getAttribute('maglink') || event.target.parentElement.parentElement.parentElement.getAttribute('maglink'); GM_setValue('magnet', maglink); var token_url = 'http://115.com/?ct=offline&ac=space&_='; //获取115 token接口 GM_xmlhttpRequest({ method: 'GET', url: token_url + new Date().getTime(), onload: function (responseDetails) { if (responseDetails.responseText.indexOf('html') >= 0) { //未登录处理 common.notifiy("115还没有登录", '请先登录115账户后,再离线下载!', icon, 'http://115.com/?mode=login' ); return false; } var sign115 = JSON.parse(responseDetails.response).sign; var time115 = JSON.parse(responseDetails.response).time; console.log("uid="+ jav_userID+" sign:"+sign115+" time:"+ time115); console.log("rsp:"+responseDetails.response); GM_xmlhttpRequest({ method: 'POST', url: 'http://115.com/web/lixian/?ct=lixian&ac=add_task_url', //添加115离线任务接口 headers:{ "Content-Type":"application/x-www-form-urlencoded" }, data:"url="+encodeURIComponent(maglink)+"&uid="+ jav_userID + "&sign="+sign115+"&time="+time115, //uid=1034119 ,hobby的 onload: function (responseDetails) { var lxRs = JSON.parse(responseDetails.responseText); //离线结果 if (lxRs.state) { //离线任务添加成功 common.notifiy("115老司机自动开车", '离线任务添加成功', icon, 'http://115.com/?tab=offline&mode=wangpan' ); } else{ //离线任务添加失败 if(lxRs.errcode == '911'){ lxRs.error_msg = '你的帐号使用异常,需要在线手工重新验证即可正常使用。'; } common.notifiy("失败了", '请重新打开115,'+lxRs.error_msg, icon, 'http://115.com/?tab=offline&mode=wangpan' ); } console.log("sign:"+sign115+" time:"+ time115); console.log("磁链:"+maglink+" 下载结果:"+ lxRs.state+" 原因:"+lxRs.error_msg); console.log("rsp:"+responseDetails.response); } }); } }); event.preventDefault(); //阻止跳转 } }, reg_event: function() { //TODO target 处理 更精准 var list = [ '.nong-copy', '.nong-offline-download' ]; for (var i = 0; i < list.length; i++) { var a = document.querySelectorAll(list[i]); for (var u = 0; u < a.length; u++) { a[u].addEventListener('click', this.handle_event, false); } } // var b = document.querySelectorAll('#nong-search-select')[0]; // b.addEventListener('change', this.handle_event, false); }, }, // 登录115执行脚本,自动离线下载准备步骤 login115Run: function(){ jav_userID = GM_getValue('jav_user_id', 0); //115用户ID缓存 //获取115ID if (jav_userID === 0) { if (location.host.indexOf('115.com') >= 0) { if (typeof (window.wrappedJSObject.user_id) != 'undefined') { jav_userID = window.wrappedJSObject.user_id; GM_setValue('jav_user_id', jav_userID); alert('115登陆成功!'); return; } } else { //alert('请先登录115账户!'); common.notifiy("115还没有登录", '请先登录115账户后,再离线下载!', icon, 'http://115.com/?mode=login' ); GM_setValue('jav_user_id', 0); } } if (location.host.indexOf('115.com') >= 0) { /*if(location.href.indexOf('#115helper') < 0) { console.log("jav老司机:115.com, 不初始化."); return false; }*/ console.log('jav老司机:115.com,尝试获取userid.'); jav_userID = GM_getValue('jav_user_id', 0); //debugger; if(jav_userID !== 0) { console.log("jav老司机: 115账号:"+jav_userID+",无需初始化."); return false; } jav_userID = $.cookie("OOFL"); console.log("jav老司机: 115账号:"+jav_userID); if(!jav_userID) { console.log("jav老司机: 尚未登录115账号"); return false; }else{ console.log("jav老司机: 初始化成功"); common.notifiy('老司机自动开车', '登陆初始化成功,赶紧上车把!', icon, ""); GM_setValue('jav_user_id', jav_userID); } return false; } }, }; class Lock { constructor(d = false) { this.locked = d; } lock() { this.locked = true; } unlock() { this.locked = false; } } function fetchURL(url) { console.log(`fetchUrl = ${url}`); return fetch(url, { credentials: 'same-origin' }) .then((response) => { return response.text(); }) .then((html) => { return new DOMParser().parseFromString(html, 'text/html'); }) .then((doc) => { let $doc = $(doc); let nextHref; if($doc.find('a#next').length){ nextHref = $doc.find('a#next').attr('href'); } else if($doc.find('a[name="nextpage"]').length){ nextHref = $doc.find('a[name="nextpage"]').attr('href'); } // javlibrary else if($doc.find('a[class="page next"]').length){ nextHref = $doc.find('a[class="page next"]').attr('href'); } let nextURL = nextHref ? `${location.protocol}//${location.host}${nextHref}` : undefined; let elems = $doc.find('div#waterfall div.item'); if(!elems.length){ elems = $doc.find('div.videos div.video'); } return { nextURL, elems }; }); } function* fetchSync(urli) { let url = urli; do { yield new Promise((resolve, reject) => { if (mutex.locked) { reject(); } else { mutex.lock(); resolve(); } }).then(() => { return fetchURL(url).then(info => { url = info.nextURL; return info.elems; }); }).then(elems => { mutex.unlock(); return elems; }).catch((err) => { // Locked! }); } while (url); } function appendElems(arg) { let nextpage = pagegen.next(); if (!nextpage.done) { nextpage.value.then(elems => { /* show .avatar-box only in first page */ $('#waterfall').append((!arg) ? elems.slice(1) : elems); }); } return nextpage.done; } function xbottom(elem, limit) { return (elem.getBoundingClientRect().top - $(window).height()) < limit; } function end() { console.info('The End'); $(document).off('scroll'); $(document).off('wheel'); $(anchor).replaceWith($(`

    The End

    `)); } function scroll() { if (xbottom(anchor, 500) && appendElems()) { end(); } } function wheel() { if (xbottom(anchor, 1000) && appendElems()) { end(); } } function scrollInit($pages){ $(document).on('scroll', scroll); $(document).on('wheel', wheel); $pages.remove(); appendElems('first'); GM_addStyle([ '#waterfall {height: initial !important;width: initial !important;display: flex;flex-direction: row;flex-wrap: wrap;}', '#waterfall .item.item {osition: relative !important;top: initial !important;left: initial !important;float: none;flex: 20%;}', '#waterfall .movie-box,#waterfall .avatar-box {width: initial !important;display: flex;}', '#waterfall .movie-box .photo-frame {overflow: visible;}', ].join('')); } //$(document).ready(function() { //DOMContentLoaded //$(document).load(function() { //load thirdparty.login115Run(); GM_addStyle([ '.min{width:66px;min-height: 233px;height:auto;cursor: pointer;}', '.container {width: 100%;float: left;}', '.col-md-3 {float: left;max-width: 260px;}', '.col-md-9 {width: inherit;}', '.footer {padding: 20px 0;background: #1d1a18;float: left;}', '#nong-table-new {margin: initial !important;important;color: #666 !important;font-size: 13px;text-align: center;background-color: #F2F2F2;float: left;}', ].join('')); // 挊 if(GM_getValue('search_index',null) === null){ GM_setValue('search_index',0); } thirdparty.searchMagnetRun(); //获取所有番号影片链接的a元素 var a_array = $("div[class='item'] a"); for (var index = 0; index < a_array.length; index++) { var aEle = a_array[index]; $(aEle).attr("target","_blank"); } var AVID = ""; //获取番号影片详情页的番号 例如:https://avmo.pw/cn/movie/5rbn if($('.header').length ){ AVID = $('.header')[0].nextElementSibling.textContent; debugger; console.log("番号输出:"+AVID); common.addAvImg(AVID,function ($img) { var divEle = $("div[class='col-md-3 info']")[0]; if (divEle) { $(divEle.parentElement).append($img); $img.click(function(){ $(this).toggleClass('min'); if($(this).attr("class")){ this.parentElement.parentElement.scrollIntoView(); } }); //$img.load(function() { // console.log('load compeleted'); //}); } // http://www.javlibrary.com/cn/?v=javlilzo4e divEle = $("div[id='video_favorite_edit']")[0]; if (divEle) { $img.attr("style",""); $(divEle).after($img); $img.click(function(){ $(this).toggleClass('min'); if($(this).attr("class")){ this.parentElement.parentElement.scrollIntoView(); } }); } }); } // JAV列表 自动加载下一页 无限滚动加载 const pagegen = fetchSync(location.href); var anchor = $('.pagination')[0]; const mutex = new Lock(); var $pages = $('div#waterfall div.item'); var $pages2 = $('div.videos div.video'); // javbus.com、avmo.pw、avso.pw if ($pages.length) { scrollInit($pages); } // javlibrary else if ($pages2.length) { anchor = $('.page_selector')[0]; $pages2[0].parentElement.id = "waterfall"; scrollInit($pages2); } //}); })(); ================================================ FILE: public/avbook/base.css ================================================ a, a:focus { text-decoration: none!important; } body { background-color: #EEEEEB; padding-top: 50px; font-family: "Helvetica Neue", Helvetica, Arial, STHeiti-Light, STHeiti-Medium, "Microsoft YaHei","Microsoft JhengHei",STHeiti,MingLiu; } .mt10 { margin-top:10px; } .mb10 { margin-bottom:10px; } .mtb10 { margin-top:10px; margin-bottom:10px; } .mt20 { margin-top:20px; } .mb20 { margin-bottom:20px; } .mtb20 { margin-top:20px; margin-bottom:20px; } .mt30 { margin-top:30px; } .mb30 { margin-bottom:30px; } .mtb30 { margin-top:30px; margin-bottom:30px; } .mt40 { margin-top:40px; } .mb40 { margin-bottom:40px; } .mtb40 { margin-top:40px; margin-bottom:40px; } .pt5 { padding-top:5px; } .pt10 { padding-top:10px; } .pb10 { padding-bottom:10px; } .ptb10 { padding-top:10px; padding-bottom:10px; } .pt20 { padding-top:20px; } .pb20 { padding-bottom:20px; } .ptb20 { padding-top:20px; padding-bottom:20px; } .pt30 { padding-top:30px; } .pb30 { padding-bottom:30px; } .ptb30 { padding-top:30px; padding-bottom:30px; } .pt40 { padding-top:40px; } .pb40 { padding-bottom:40px; } .ptb40 { padding-top:40px; padding-bottom:40px; } .pagination a { color: #666 !important; } .pagination .active a { color: #FFF !important; border-color: #CC0000 !important; background-color: #CC0000 !important; } .top-bar .navbar-brand { margin-left: 0px!important; } .footer { padding: 20px 0px 20px 0px; color:#F6F2E6; background: #1D1A18; } .footer a, .footer a:focus { color: #F6F2E6; } .footer-bar { display:inline; position:fixed; z-index:500; bottom:15px; right:15px; left:15px; -moz-opacity: 0.60; -khtml-opacity: 0.60; opacity: 0.60; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=60); } .footer-bar-placeholder { height:70px; } .footer-bar .btn { padding: 10px 16px; line-height: 1.3333333; border-radius: 6px; } .flipx { -moz-transform:scaleX(-1); -webkit-transform:scaleX(-1); -o-transform:scaleX(-1); transform:scaleX(-1); filter:FlipH(); } .photo-info { word-wrap: break-word; display: block; padding: 10px; line-height: 22px; color: #333; background-color: #FAFAFA; border-top: 1px solid #F2F2F2; } @media screen and (max-width: 991px) { .navbar-form { width: 220px; } } .navbar-default { background-image: linear-gradient(to bottom,#EEEEEB 0,#FFF 100%); } @media screen and (max-width: 767px) { .navbar-default { background-color: #FEBE00; background-image: none; } } /*---------------------------------------*/ @media (max-width: 480px) { .hidden-xxs { display: none !important; } } @media (max-width: 320px) { .hidden-xxxs { display: none !important; } } /*---------------------------------------*/ /*Search Loading*/ #search-loading { position: fixed; width: 200px; height: 100px; z-index: 1000; left: 50%; top: 50%; margin-left: -100px; margin-top: -100px; opacity: 0.95; display: none; } .search-loading-box { width:200px; height:100px; -webkit-border-radius:8px; -moz-border-radius:8px; border-radius:8px; background-color:#333; filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#464646',endColorstr='#333333'); -webkit-box-shadow:3px 3px 3px rgba(0,0,0,.4); -moz-box-shadow:3px 3px 3px rgba(0,0,0,.4); box-shadow:3px 3px 3px rgba(0,0,0,.4); } .search-loading-text { font-family:Arial; font-size:16px; color:#FFF; text-decoration:none; font-weight:700; } /*Search Header*/ .mypointer { cursor: pointer; } .search-header { margin: 20px 20px 0 20px; padding:5px 5px 15px 5px; background-color:#FFF; -webkit-box-shadow:0 1px 3px rgba(0,0,0,.3); } /*Banners*/ .bn728-93 img { width:93%; height:auto; max-width:728px; } .bn728-100 img { width:100%; height:auto; max-width:728px; max-height:90px; } .bn300 img { width:300px; height:auto; } .bn960 { padding-top:5px; } .bn960 img { width:100%; height:auto; max-width:960px; } .ad-table { width:1440px; margin:10px auto 25px auto; } .ad-table td { padding: 10px 5px 0 5px; } .ad-list { margin: 10px 0; } /*Uncensored CSS*/ .photo-frame .m1000giri { margin-left: -50%; } .photo-frame .mpacopacomama{ margin-left: -20%; } .photo-frame .mcaribbeancom { margin-left: -30%; } .photo-frame .m1pondo { height:206px; } .photo-frame .mtokyohot { height:188px; } .photo-frame .mroselip { margin-left: -20%; } /*Member*/ .avatar { width:30px; height:30px; margin:-20px 0; border-radius: 50%; } .ml5 { margin-left:5px; } .mleft .btn-xs { margin-left:5px; } .starfav { margin-right: 15px; } .favicon .glyphicon { top:3px; } /*Custom*/ .item a:visited span { color:#999; } .genre-box a:visited { color:#999; } .genre-box label { display:block; max-width:none; margin-bottom:auto; font-weight:normal; } .btn-genre { margin: 20px 0; padding: 15px 0; } .alert-common { margin: 10px 20px 0 20px; } .container .alert-success { margin-top:10px; } .alert-page { margin: 40px 20px; } .alert-page h4 { font-weight:bold; } .error-page { padding:40px 0; text-align:center; font-size:24px; } .top20-margin { margin-top:20px; } .mh50 { max-height:50px; } .pleft { padding:10px 0 20px 25px; } .btn-mini-new { font-size:12px; -webkit-border-radius:3px; -moz-border-radius:3px; border-radius:3px; padding:0 6px; margin:1px 0; } .icon-new { background: url(../images/icon-new.png) no-repeat; width: 28px; height: 17px; position: absolute; right: 5px; top: 1px; z-index: 1; } ================================================ FILE: public/avbook/base.js ================================================ (function($) { $(document).ready(function() { if ($('body').height() > $(window).height()) { $("#prev, #next").hide(); } var show = function() { return $('body').height() - ($(window).height() + $(window).height() / 2); } $(function() { $(window).scroll(function() { if ($(this).scrollTop() > show()) { $("#prev, #next").show(); } else { $("#prev, #next").hide(); } }); }); }); })(jQuery); ================================================ FILE: public/avbook/base2.css ================================================ a, a:focus { text-decoration: none!important; } body { background-color: #EEEEEB; padding-top: 50px; font-family: "Helvetica Neue", Helvetica, Arial, STHeiti-Light, STHeiti-Medium, "Microsoft YaHei","Microsoft JhengHei",STHeiti,MingLiu; } .mt10 { margin-top:10px; } .mb10 { margin-bottom:10px; } .mtb10 { margin-top:10px; margin-bottom:10px; } .mt20 { margin-top:20px; } .mb20 { margin-bottom:20px; } .mtb20 { margin-top:20px; margin-bottom:20px; } .mt30 { margin-top:30px; } .mb30 { margin-bottom:30px; } .mtb30 { margin-top:30px; margin-bottom:30px; } .mt40 { margin-top:40px; } .mb40 { margin-bottom:40px; } .mtb40 { margin-top:40px; margin-bottom:40px; } .pt5 { padding-top:5px; } .pt10 { padding-top:10px; } .pb10 { padding-bottom:10px; } .ptb10 { padding-top:10px; padding-bottom:10px; } .pt20 { padding-top:20px; } .pb20 { padding-bottom:20px; } .ptb20 { padding-top:20px; padding-bottom:20px; } .pt30 { padding-top:30px; } .pb30 { padding-bottom:30px; } .ptb30 { padding-top:30px; padding-bottom:30px; } .pt40 { padding-top:40px; } .pb40 { padding-bottom:40px; } .ptb40 { padding-top:40px; padding-bottom:40px; } .pagination a { color: #666 !important; } .pagination .active a { color: #FFF !important; border-color: #CC0000 !important; background-color: #CC0000 !important; } .top-bar .navbar-brand { margin-left: 0px!important; } .footer { padding: 20px 0px 20px 0px; color:#F6F2E6; background: #1D1A18; } .footer a, .footer a:focus { color: #F6F2E6; } .footer-bar { display:inline; position:fixed; z-index:500; bottom:15px; right:15px; left:15px; -moz-opacity: 0.60; -khtml-opacity: 0.60; opacity: 0.60; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=60); } .footer-bar-placeholder { height:70px; } .footer-bar .btn { padding: 10px 16px; line-height: 1.3333333; border-radius: 6px; } .flipx { -moz-transform:scaleX(-1); -webkit-transform:scaleX(-1); -o-transform:scaleX(-1); transform:scaleX(-1); filter:FlipH(); } .photo-info { word-wrap: break-word; display: block; padding: 10px; line-height: 22px; color: #333; background-color: #FAFAFA; border-top: 1px solid #F2F2F2; } @media screen and (max-width: 991px) { .navbar-form { width: 220px; } } .navbar-default { background-image: linear-gradient(to bottom,#EEEEEB 0,#FFF 100%); } @media screen and (max-width: 767px) { .navbar-default { background-color: #FEBE00; background-image: none; } } /*---------------------------------------*/ @media (max-width: 480px) { .hidden-xxs { display: none !important; } } @media (max-width: 320px) { .hidden-xxxs { display: none !important; } } /*---------------------------------------*/ /*Search Loading*/ #search-loading { position: fixed; width: 200px; height: 100px; z-index: 1000; left: 50%; top: 50%; margin-left: -100px; margin-top: -100px; opacity: 0.95; display: none; } .search-loading-box { width:200px; height:100px; -webkit-border-radius:8px; -moz-border-radius:8px; border-radius:8px; background-color:#333; filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#464646',endColorstr='#333333'); -webkit-box-shadow:3px 3px 3px rgba(0,0,0,.4); -moz-box-shadow:3px 3px 3px rgba(0,0,0,.4); box-shadow:3px 3px 3px rgba(0,0,0,.4); } .search-loading-text { font-family:Arial; font-size:16px; color:#FFF; text-decoration:none; font-weight:700; } /*Search Header*/ .mypointer { cursor: pointer; } .search-header { margin: 20px 20px 0 20px; padding:5px 5px 15px 5px; background-color:#FFF; -webkit-box-shadow:0 1px 3px rgba(0,0,0,.3); } /*Banners*/ .bn728-93 img { width:93%; height:auto; max-width:728px; } .bn728-100 img { width:100%; height:auto; max-width:728px; max-height:90px; } .bn300 img { width:300px; height:auto; } .bn960 { padding-top:5px; } .bn960 img { width:100%; height:auto; max-width:960px; } .ad-table { width:1440px; margin:10px auto 25px auto; } .ad-table td { padding: 10px 5px 0 5px; } .ad-list { margin: 10px 0; } /*Uncensored CSS*/ .photo-frame .m1000giri { margin-left: -50%; } .photo-frame .mpacopacomama{ margin-left: -20%; } .photo-frame .mcaribbeancom { margin-left: -30%; } .photo-frame .m1pondo { height:206px; } .photo-frame .mtokyohot { height:188px; } .photo-frame .mroselip { margin-left: -20%; } /*Member*/ .avatar { width:30px; height:30px; margin:-20px 0; border-radius: 50%; } .ml5 { margin-left:5px; } .mleft .btn-xs { margin-left:5px; } .starfav { margin-right: 15px; } .favicon .glyphicon { top:3px; } /*Custom*/ .item a:visited span { color:#999; } .genre-box a:visited { color:#999; } .genre-box label { display:block; max-width:none; margin-bottom:auto; font-weight:normal; } .btn-genre { margin: 20px 0; padding: 15px 0; } .alert-common { margin: 10px 20px 0 20px; } .container .alert-success { margin-top:10px; } .alert-page { margin: 40px 20px; } .alert-page h4 { font-weight:bold; } .error-page { padding:40px 0; text-align:center; font-size:24px; } .top20-margin { margin-top:20px; } .mh50 { max-height:50px; } .pleft { padding:10px 0 20px 25px; } .btn-mini-new { font-size:12px; -webkit-border-radius:3px; -moz-border-radius:3px; border-radius:3px; padding:0 6px; margin:1px 0; } .icon-new { background: url(../images/icon-new.png) no-repeat; width: 28px; height: 17px; position: absolute; right: 5px; top: 1px; z-index: 1; } ================================================ FILE: public/avbook/base2.js ================================================ (function($) { $(document).ready(function() { if ($('body').height() > $(window).height()) { $("#prev, #next").hide(); } var show = function() { return $('body').height() - ($(window).height() + $(window).height() / 2); } $(function() { $(window).scroll(function() { if ($(this).scrollTop() > show()) { $("#prev, #next").show(); } else { $("#prev, #next").hide(); } }); }); }); })(jQuery); ================================================ FILE: public/avbook/blurmask.css ================================================ .blur { filter: url(blur.svg#blur); /* FireFox, Chrome, Opera */ -o-filter: blur(3px); -webkit-filter: blur(3px); /* Chrome, Opera */ -moz-filter: blur(3px); -ms-filter: blur(3px); filter: blur(3px); filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius=10, MakeShadow=false); /* IE6~IE9 */ } .blur6 { filter: url(blur.svg#blur); /* FireFox, Chrome, Opera */ -o-filter: blur(6px); -webkit-filter: blur(6px); /* Chrome, Opera */ -moz-filter: blur(6px); -ms-filter: blur(6px); filter: blur(6px); filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius=10, MakeShadow=false); /* IE6~IE9 */ } .blur10 { filter: url(blur.svg#blur); /* FireFox, Chrome, Opera */ -o-filter: blur(8px); -webkit-filter: blur(8px); /* Chrome, Opera */ -moz-filter: blur(8px); -ms-filter: blur(8px); filter: blur(8px); filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius=10, MakeShadow=false); /* IE6~IE9 */ } ================================================ FILE: public/avbook/bootstrap-hover-dropdown.js ================================================ !function(e,n){var o=e();e.fn.dropdownHover=function(t){return"ontouchstart"in document?this:(o=o.add(this.parent()),this.each(function(){function r(){d.parents(".navbar").find(".navbar-toggle").is(":visible")||(n.clearTimeout(a),n.clearTimeout(i),i=n.setTimeout(function(){o.find(":focus").blur(),v.instantlyCloseOthers===!0&&o.removeClass("open"),n.clearTimeout(i),d.attr("aria-expanded","true"),s.addClass("open"),d.trigger(h)},v.hoverDelay))}var a,i,d=e(this),s=d.parent(),u={delay:500,hoverDelay:0,instantlyCloseOthers:!0},l={delay:e(this).data("delay"),hoverDelay:e(this).data("hover-delay"),instantlyCloseOthers:e(this).data("close-others")},h="show.bs.dropdown",c="hide.bs.dropdown",v=e.extend(!0,{},u,t,l);s.hover(function(e){return s.hasClass("open")||d.is(e.target)?void r(e):!0},function(){n.clearTimeout(i),a=n.setTimeout(function(){d.attr("aria-expanded","false"),s.removeClass("open"),d.trigger(c)},v.delay)}),d.hover(function(e){return s.hasClass("open")||s.is(e.target)?void r(e):!0}),s.find(".dropdown-submenu").each(function(){var o,t=e(this);t.hover(function(){n.clearTimeout(o),t.children(".dropdown-menu").show(),t.siblings().children(".dropdown-menu").hide()},function(){var e=t.children(".dropdown-menu");o=n.setTimeout(function(){e.hide()},v.delay)})})}))},e(document).ready(function(){e('[data-hover="dropdown"]').dropdownHover()})}(jQuery,window); ================================================ FILE: public/avbook/focus.js ================================================ $(function(){ var inputEl = $("#search-input"),defVal = inputEl.val(); inputEl.bind({ focus: function() { var _this = $(this); if (_this.val() == info){ defVal = _this.val(); _this.val(''); } }, blur: function() { var _this = $(this); if (_this.val() == ''){ _this.val(defVal); } } }); }); $(document).ready(function(){ $("#search-input").keydown(function(e){ var e = e || event, keycode = e.which || e.keyCode; if (keycode==13) { searchs('search-input'); } }); $("#search-input-mobile").keydown(function(e){ var e = e || event, keycode = e.which || e.keyCode; if (keycode==13) { searchs('search-input-mobile'); } }); var prevpage=$("#pre").attr("href"); var nextpage=$("#next").attr("href"); $("body").keydown(function(event){ if(!$("#search-input").is(":focus")){ if(event.keyCode==37 && prevpage!=undefined ) location=prevpage; if(event.keyCode==39 && nextpage!=undefined ) location=nextpage; } }); }); $("#showmag,#cellshowmag").click(function(){ $.cookie("existmag", "mag",{expires:365,path:'/'}); location.reload() }); $("#showall,#cellshowall").click(function(){ $.cookie("existmag", "all",{expires:365,path:'/'}); location.reload() }); $("#showonline").click(function(){ $.cookie("existmag", "online",{expires:365,path:'/'}); location.reload() }); ================================================ FILE: public/avbook/gallery.js ================================================ $(document).ready(function() { if ($.cookie("starinfo") == "glyphicon glyphicon-minus") { $("#star-div").show(); } $('.star-show').click(function() { $("#star-toggle").toggleClass("glyphicon-minus glyphicon-plus"); $("#star-div").slideToggle(); $.cookie("starinfo", $("#star-toggle").attr("class"), { expires: 365, path: '/' }); }); $('#star-hide').click(function() { $("#star-toggle").toggleClass("glyphicon-minus glyphicon-plus"); $("#star-div").slideToggle(); $.cookie("starinfo", $("#star-toggle").attr("class"), { expires: 365, path: '/' }); }); $('#mag-submit-show').click(function() { $("#mag-submit-toggle").toggleClass("glyphicon-minus glyphicon-plus"); $("#mag-submit").slideToggle(); }); $('#mag-submit-hide').click(function() { $("#mag-submit-toggle").attr("class", "glyphicon glyphicon-plus"); $("#mag-submit").slideToggle(); }); }); $('#urad1').hover(function() { $('.left-urad1').stop().animate({ width: '55px' }, 300) }, function() { $('.left-urad1').stop().animate({ width: '-0' }, 300) }); $('#urad2').hover(function() { $('.left-urad2').stop().animate({ width: '55px' }, 300) }, function() { $('.left-urad2').stop().animate({ width: '-0' }, 300) }); function hoverdiv(e, starhover) { var left = e.clientX + "px"; var top = e.clientY + "px"; $("#" + starhover).css('left', left); $("#" + starhover).css('top', top); $("#" + starhover).css('position', 'fixed'); $("#" + starhover).toggle(); return false; } function checktxt() { var appendedInput = $("#appendedInputButton").val(); var e = "../uncledatoolsbyajax_newmg?gid=" + gid ; $.ajax({ url: e, data: {mgurl : appendedInput}, type: "GET", success: function(e) { window.location.href =window.location.href ; // $("#magneturlpost").html(e) } }); } function uncledatoolsbyajax(){ var t = "../uncledatoolsbyajax/" +gid +"/" ; $.ajax({ url: t, type: "GET", success: function(e) { $("#magnet-table").append(e) } }); } function uncledatoolsbyajax_nr(){ var t = "../uncledatoolsbyajax_nr/" +gid +"/"+ gidmg ; $.ajax({ url: t, type: "GET", success: function(e) { $("#magnet-table2").append(e) } }); } ================================================ FILE: public/avbook/gallery2.js ================================================ $(document).ready(function() { if ($.cookie("starinfo") == "glyphicon glyphicon-minus") { $("#star-div").show(); } $('.star-show').click(function() { $("#star-toggle").toggleClass("glyphicon-minus glyphicon-plus"); $("#star-div").slideToggle(); $.cookie("starinfo", $("#star-toggle").attr("class"), { expires: 365, path: '/' }); }); $('#star-hide').click(function() { $("#star-toggle").toggleClass("glyphicon-minus glyphicon-plus"); $("#star-div").slideToggle(); $.cookie("starinfo", $("#star-toggle").attr("class"), { expires: 365, path: '/' }); }); $('#mag-submit-show').click(function() { $("#mag-submit-toggle").toggleClass("glyphicon-minus glyphicon-plus"); $("#mag-submit").slideToggle(); }); $('#mag-submit-hide').click(function() { $("#mag-submit-toggle").attr("class", "glyphicon glyphicon-plus"); $("#mag-submit").slideToggle(); }); }); $('#urad1').hover(function() { $('.left-urad1').stop().animate({ width: '55px' }, 300) }, function() { $('.left-urad1').stop().animate({ width: '-0' }, 300) }); $('#urad2').hover(function() { $('.left-urad2').stop().animate({ width: '55px' }, 300) }, function() { $('.left-urad2').stop().animate({ width: '-0' }, 300) }); function hoverdiv(e, starhover) { var left = e.clientX + "px"; var top = e.clientY + "px"; $("#" + starhover).css('left', left); $("#" + starhover).css('top', top); $("#" + starhover).css('position', 'fixed'); $("#" + starhover).toggle(); return false; } function checktxt2() { var appendedInput = $("#appendedInputButton").val(); var e = "../ajax/toolsbyajax.php?gid=" + gid + "&lang=" + lang + "&uc=" + uc + "&ai=" + appendedInput + "&floor=" + Math.floor(Math.random() * 1e3 + 1); $.ajax({ url: e, type: "GET", success: function(e) { $("#magneturlpost").html(e) } }); } function uncledatoolsbyajax(){ var t = "../uncledatoolsbyajaxlw/" ; $.ajax({ url: t, type: "GET", success: function(e) { $("#magnet-table").append(e) } }); } $(function() { uncledatoolsbyajax() }) ================================================ FILE: public/avbook/genre.css ================================================ .genre-box a { display:block; color: #1D1A18; } .genre-box a:hover,.genre-box a:focus { color: #FFF; background-color:#CC0000; } @media screen and (min-width: 768px) { .genre-box { padding:20px 0px; margin: 15px 0px; background-color: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.3); -moz-box-shadow: 0 1px 3px rgba(0,0,0,.3); -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.3); } .genre-box a { padding-top: 15px; padding-bottom: 15px; } } @media screen and (max-width: 767px) { .genre-box { border-top: 1px solid #ddd; } .genre-box a { padding-top: 15px; padding-bottom: 15px; border-bottom: 1px solid #ddd; } .genre-box a:nth-of-type(even) { border-left: 1px solid #ddd; } } ================================================ FILE: public/avbook/magnific-popup.css ================================================ /* Magnific Popup CSS */ .mfp-bg { top: 0; left: 0; width: 100%; height: 100%; z-index: 1042; overflow: hidden; position: fixed; background: #0b0b0b; opacity: 0.8; filter: alpha(opacity=80); } .mfp-wrap { top: 0; left: 0; width: 100%; height: 100%; z-index: 1043; position: fixed; outline: none !important; -webkit-backface-visibility: hidden; } .mfp-container { text-align: center; position: absolute; width: 100%; height: 100%; left: 0; top: 0; padding: 0 8px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .mfp-container:before { content: ''; display: inline-block; height: 100%; vertical-align: middle; } .mfp-align-top .mfp-container:before { display: none; } .mfp-content { position: relative; display: inline-block; vertical-align: middle; margin: 0 auto; text-align: left; z-index: 1045; } .mfp-inline-holder .mfp-content, .mfp-ajax-holder .mfp-content { width: 100%; cursor: auto; } .mfp-ajax-cur { cursor: progress; } .mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close { cursor: -moz-zoom-out; cursor: -webkit-zoom-out; cursor: zoom-out; } .mfp-zoom { cursor: pointer; cursor: -webkit-zoom-in; cursor: -moz-zoom-in; cursor: zoom-in; } .mfp-auto-cursor .mfp-content { cursor: auto; } .mfp-close, .mfp-arrow, .mfp-preloader, .mfp-counter { -webkit-user-select: none; -moz-user-select: none; user-select: none; } .mfp-loading.mfp-figure { display: none; } .mfp-hide { display: none !important; } .mfp-preloader { color: #cccccc; position: absolute; top: 50%; width: auto; text-align: center; margin-top: -0.8em; left: 8px; right: 8px; z-index: 1044; } .mfp-preloader a { color: #cccccc; } .mfp-preloader a:hover { color: white; } .mfp-s-ready .mfp-preloader { display: none; } .mfp-s-error .mfp-content { display: none; } button.mfp-close, button.mfp-arrow { overflow: visible; cursor: pointer; background: transparent; border: 0; -webkit-appearance: none; display: block; outline: none; padding: 0; z-index: 1046; -webkit-box-shadow: none; box-shadow: none; } button::-moz-focus-inner { padding: 0; border: 0; } .mfp-close { width: 44px; height: 44px; line-height: 44px; position: absolute; right: 0; top: 0; text-decoration: none; text-align: center; opacity: 0.65; padding: 0 0 18px 10px; color: white; font-style: normal; font-size: 28px; font-family: Arial, Baskerville, monospace; } .mfp-close:hover, .mfp-close:focus { opacity: 1; } .mfp-close:active { top: 1px; } .mfp-close-btn-in .mfp-close { color: #333333; } .mfp-image-holder .mfp-close, .mfp-iframe-holder .mfp-close { color: white; right: -6px; text-align: right; padding-right: 6px; width: 100%; } .mfp-counter { position: absolute; top: 0; right: 0; color: #cccccc; font-size: 12px; line-height: 18px; } .mfp-arrow { position: absolute; opacity: 0.65; margin: 0; top: 50%; margin-top: -55px; padding: 0; width: 90px; height: 110px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } .mfp-arrow:active { margin-top: -54px; } .mfp-arrow:hover, .mfp-arrow:focus { opacity: 1; } .mfp-arrow:before, .mfp-arrow:after, .mfp-arrow .mfp-b, .mfp-arrow .mfp-a { content: ''; display: block; width: 0; height: 0; position: absolute; left: 0; top: 0; margin-top: 35px; margin-left: 35px; border: medium inset transparent; } .mfp-arrow:after, .mfp-arrow .mfp-a { border-top-width: 13px; border-bottom-width: 13px; top: 8px; } .mfp-arrow:before, .mfp-arrow .mfp-b { border-top-width: 21px; border-bottom-width: 21px; } .mfp-arrow-left { left: 0; } .mfp-arrow-left:after, .mfp-arrow-left .mfp-a { border-right: 17px solid white; margin-left: 31px; } .mfp-arrow-left:before, .mfp-arrow-left .mfp-b { margin-left: 25px; border-right: 27px solid #3f3f3f; } .mfp-arrow-right { right: 0; } .mfp-arrow-right:after, .mfp-arrow-right .mfp-a { border-left: 17px solid white; margin-left: 39px; } .mfp-arrow-right:before, .mfp-arrow-right .mfp-b { border-left: 27px solid #3f3f3f; } .mfp-iframe-holder { padding-top: 40px; padding-bottom: 40px; } .mfp-iframe-holder .mfp-content { line-height: 0; width: 100%; max-width: 900px; } .mfp-iframe-holder .mfp-close { top: -40px; } .mfp-iframe-scaler { width: 100%; height: 0; overflow: hidden; padding-top: 56.25%; } .mfp-iframe-scaler iframe { position: absolute; display: block; top: 0; left: 0; width: 100%; height: 100%; box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); background: black; } /* Main image in popup */ img.mfp-img { width: auto; max-width: 100%; height: auto; display: block; line-height: 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding: 40px 0 40px; margin: 0 auto; } /* The shadow behind the image */ .mfp-figure { line-height: 0; } .mfp-figure:after { content: ''; position: absolute; left: 0; top: 40px; bottom: 40px; display: block; right: 0; width: auto; height: auto; z-index: -1; box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); background: #444444; } .mfp-figure small { color: #bdbdbd; display: block; font-size: 12px; line-height: 14px; } .mfp-bottom-bar { margin-top: -36px; position: absolute; top: 100%; left: 0; width: 100%; cursor: auto; } .mfp-title { text-align: left; line-height: 18px; color: #f3f3f3; word-wrap: break-word; padding-right: 36px; } .mfp-image-holder .mfp-content { max-width: 100%; } .mfp-gallery .mfp-image-holder .mfp-figure { cursor: pointer; } @media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) { /** * Remove all paddings around the image on small screen */ .mfp-img-mobile .mfp-image-holder { padding-left: 0; padding-right: 0; } .mfp-img-mobile img.mfp-img { padding: 0; } .mfp-img-mobile .mfp-figure { /* The shadow behind the image */ } .mfp-img-mobile .mfp-figure:after { top: 0; bottom: 0; } .mfp-img-mobile .mfp-figure small { display: inline; margin-left: 5px; } .mfp-img-mobile .mfp-bottom-bar { background: rgba(0, 0, 0, 0.6); bottom: 0; margin: 0; top: auto; padding: 3px 5px; position: fixed; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .mfp-img-mobile .mfp-bottom-bar:empty { padding: 0; } .mfp-img-mobile .mfp-counter { right: 5px; top: 3px; } .mfp-img-mobile .mfp-close { top: 0; right: 0; width: 35px; height: 35px; line-height: 35px; background: rgba(0, 0, 0, 0.6); position: fixed; text-align: center; padding: 0; } } @media all and (max-width: 900px) { .mfp-arrow { -webkit-transform: scale(0.75); transform: scale(0.75); } .mfp-arrow-left { -webkit-transform-origin: 0; transform-origin: 0; } .mfp-arrow-right { -webkit-transform-origin: 100%; transform-origin: 100%; } .mfp-container { padding-left: 6px; padding-right: 6px; } } .mfp-ie7 .mfp-img { padding: 0; } .mfp-ie7 .mfp-bottom-bar { width: 600px; left: 50%; margin-left: -300px; margin-top: 5px; padding-bottom: 5px; } .mfp-ie7 .mfp-container { padding: 0; } .mfp-ie7 .mfp-content { padding-top: 44px; } .mfp-ie7 .mfp-close { top: 0; right: 0; padding-top: 0; } ================================================ FILE: public/avbook/main.css ================================================ #waterfall { margin: 10px auto; } #waterfall .item { float:left; } .avatar-box { display:block; background-color: #fff; overflow:hidden; margin: 10px; width: 167px; padding:0px; border:none; border-radius:0px; box-shadow: 0 1px 3px rgba(0,0,0,.3); -moz-box-shadow: 0 1px 3px rgba(0,0,0,.3); -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.3); } .avatar-box .photo-frame { margin:21px; } .avatar-box img { height: 125px; } .avatar-box span { font-weight:bold; text-align: center; display:block; } .movie-box { display:block; background-color: #fff; overflow:hidden; margin: 10px; width: 167px; padding:0px; border:none; border-radius:0px; box-shadow: 0 1px 3px rgba(0,0,0,.3); -moz-box-shadow: 0 1px 3px rgba(0,0,0,.3); -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.3); } .movie-box .photo-frame { overflow:hidden; height:200px; margin:10px; } .movie-box img { height: 200px; } @media screen and (max-width: 479px) { .movie-box .photo-frame, .avatar-box .photo-frame { margin:0px; } .avatar-box { width: 125px; } .avatar-box img { height: 125px; } .movie-box { width: 125px; } .movie-box .photo-frame { height: 178px; } .movie-box img { height: 178px; margin-left: -3px; } } .movie-box date { color:#CC0000; font-size:12px; } /*Custom*/ .item a:visited { color:#999; } .item-tag { white-space:nowrap; } ================================================ FILE: public/avbook/mask.js ================================================ var blurimg=0; var blurimgclass='blur'; // $(".hh3").addClass("blur"); if(blurimg){ $("img").addClass("blur"); $("h3").addClass("blur"); $(".hidden-xs").removeClass("blur"); $(".star_pic").removeClass("blur"); $(".bigImagesrc").addClass("blur6"); $('.screencap').click(function(){ if(blurimg){ } }) $('#sample-waterfall').click(function(){ if(blurimg){ $(".mfp-img ").addClass("blur10"); } $('.mfp-arrow ').click(function(){ if(blurimg){ $(".mfp-img ").addClass("blur10"); } }) }) var mybr=myBrowser(); if ("Chrome" == mybr||"FF" == mybr ) { }else{ $("html").html("不支持该类型浏览器,因为本人懒得做各种浏览器的css适配,请使用最新版谷歌浏览器或者火狐浏览器.关注微信公众号:guyueyingmu 获取新版本"); } } function myBrowser(){ var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var isOpera = userAgent.indexOf("Opera") > -1; if (isOpera) { return "Opera" }; //判断是否Opera浏览器 if (userAgent.indexOf("Firefox") > -1) { return "FF"; } //判断是否Firefox浏览器 if (userAgent.indexOf("Chrome") > -1){ return "Chrome"; } if (userAgent.indexOf("Safari") > -1) { return "Safari"; } //判断是否Safari浏览器 if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera) { return "IE"; }; //判断是否IE浏览器 } ================================================ FILE: public/avbook/movie-box.css ================================================ .movie-box { display:block; background-color: #fff; overflow:hidden; margin: 10px; width: 167px; padding:0px; border:none; border-radius:0px; box-shadow: 0 1px 3px rgba(0,0,0,.3); -moz-box-shadow: 0 1px 3px rgba(0,0,0,.3); -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.3); } .movie-box .photo-frame { overflow:hidden; height:200px; margin:10px; } .movie-box img { height: 200px; } @media screen and (max-width: 767px) { .movie-box .photo-frame, .avatar-box .photo-frame { margin:0px; } .avatar-box { width: 125px; } .avatar-box img { height: 125px; } .movie-box { width: 125px; } .movie-box .photo-frame { height: 178px; } .movie-box img { height: 178px; margin-left: -3px; } } ================================================ FILE: public/avbook/movie.css ================================================ .movie { margin: 0px; padding: 15px 0px; overflow: hidden; background-color: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.3); -moz-box-shadow: 0 1px 3px rgba(0,0,0,.3); -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.3); } .screencap { text-align: center; } @media screen and (min-width: 992px) { .screencap { border-right: 1px solid #E1E1E1; } } @media screen and (max-width: 992px) { .info { padding-top:15px; } } @media screen and (max-width: 480px) { .screencap { padding:0px; } .movie { padding:0px; } } .screencap img { width:100% } .info a { color:#333; } .info p { word-break:break-all; font-size:14px; line-height:25px; } .info .genre { margin-right: 10px; white-space:nowrap; } .info .header { font-weight:bold; font-size:14px; } .avatar-box .photo-frame { overflow:hidden; height:120px; margin:10px; } .sample-box .photo-frame { overflow:hidden; margin:10px; } .avatar-box { display:inline-block; background-color: #fff; overflow:hidden; margin: 5px; width: 140px; padding:0px; border:none; border-radius:0px; box-shadow: 0 1px 3px rgba(0,0,0,.3); -moz-box-shadow: 0 1px 3px rgba(0,0,0,.3); -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.3); } .avatar-box img { height: 120px; } .avatar-box span { font-weight:bold; text-align: center; word-wrap: break-word; display: block; padding: 10px; line-height: 22px; color: #333; background-color: #FAFAFA; border-top: 1px solid #F2F2F2; } .sample-box { display:inline-block; background-color: #fff; overflow:hidden; margin: 5px; width: 140px; padding:0px; border:none; border-radius:0px; box-shadow: 0 1px 3px rgba(0,0,0,.3); -moz-box-shadow: 0 1px 3px rgba(0,0,0,.3); -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.3); } .sample-box img { height: 90px; } @media screen and (max-width: 767px) { #avatar-waterfall, #sample-waterfall, #related-waterfall { text-align: center; } .avatar-box .photo-frame, .sample-box .photo-frame { margin:0px; } .avatar-box { width: 120px; } .avatar-box img { height: 120px; } .sample-box { width: 120px; } .sample-box img { height: 90px; } } /*Customized*/ .container h4 { margin-top:20px; } .star-box ul { margin: 0px; padding: 0px; } .star-box-common li { list-style-type: none; float: left; width: 120px; text-align: center; } .star-box-up li { margin: 0px; background-color: #fff; } .star-box-down li { margin: 7px 15px; background-color: #EEEEEB; box-shadow: 0 1px 3px rgba(0,0,0,.3); -moz-box-shadow: 0 1px 3px rgba(0,0,0,.3); -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.3); } .star-box img { width:100px; height:100px; margin:10px; } .star-box .star-name { padding:7px 0px 7px 0px; background-color: #FAFAFA; border-top: 1px solid #F2F2F2; } .idol-box { position:fixed; display:none; z-index:2; background-color: white; -moz-background-clip: padding; /* Firefox 3.6 */ -webkit-background-clip: padding; /* Safari 4? Chrome 6? */ background-clip: padding-box; /* Firefox 4, Safari 5, Opera 10, IE 9 */ border: 10px solid rgba(0,0,0,0.3); -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; padding: 0px; width: 140px; box-shadow: 0 5px 10px rgba(0,0,0,.3); -moz-box-shadow: 0 5px 10px rgba(0,0,0,.3); -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.3); } #star-div { display:none; } #mag-submit { display:none; } /*Your AD Slider*/ /*.label {*/ /*margin-left:5px;*/ /*position:absolute;*/ /*top:-2px;*/ /*}*/ .left-urad1, .left-urad2 { position:relative; display:inline-block; overflow: hidden; width:0; top:2px; font-weight:normal; font-size:13px; left:-3px; } h4 .glyphicon-envelope { font-weight:normal; font-size:12px; } ================================================ FILE: public/avbook/nav.overlay.css ================================================ /* Overlay style */ .overlay { position: fixed; z-index:999; width: 100%; height: 100%; top: 0; left: 0; background: rgba(47,50,56,0.9); } /* Overlay colors */ .color1 { background: rgba(0,0,0,0.9); } .color2 { background: rgba(26,188,156,0.9); } .color3 { background: rgba(44,62,80,0.9); } .color4 { background: rgba(211,84,0,0.9); } /* Menu style */ .overlay .col-xs-6 a { line-height:2; font-size: 24px; font-weight: 300; display: block; color: #fff; -webkit-transition: opacity 0.2s; transition: opacity 0.2s; } .overlay .col-xs-6 { margin:10px 0; } .overlay-close .glyphicon-remove { color:#fff; font-size: 24px; } /* Effects */ .overlay-contentscale { visibility: hidden; -webkit-transform: translateY(100%); transform: translateY(100%); -webkit-transition: -webkit-transform 0.5s, visibility 0s 0.5s; transition: transform 0.5s, visibility 0s 0.5s; } .overlay-contentscale.open { visibility: visible; -webkit-transform: translateY(0%); transform: translateY(0%); -webkit-transition: -webkit-transform 0.5s; transition: transform 0.5s; } @media screen and (max-height: 30.5em) { .overlay nav { height: 70%; font-size: 34px; } .overlay ul li { min-height: 34px; } } ================================================ FILE: public/avbook/nav.overlay.js ================================================ (function($) { var CBody = $('div.container'), TBtn = $('.trigger-overlay'), FScreen = $('div.overlay'), CBtn = $('.overlay .overlay-close'); function toggleFScreen() { if (FScreen.hasClass('open')) { FScreen.removeClass('open'); CBody.removeClass('overlay-open'); } else { FScreen.addClass('open'); CBody.addClass('overlay-open'); } } TBtn.on('click', toggleFScreen); CBtn.on('click', toggleFScreen); })(jQuery); ================================================ FILE: public/avbook/themes/krajee-fa/theme.css ================================================ /*! * Krajee Font Awesome Theme styling for bootstrap-star-rating. * This file must be loaded after 'star-rating.css'. * * @see http://github.com/kartik-v/bootstrap-star-rating * @author Kartik Visweswaran */ .theme-krajee-fa .star { font-size: 1.1em; } ================================================ FILE: public/avbook/themes/krajee-fa/theme.js ================================================ /*! * Krajee Font Awesome Theme configuration for bootstrap-star-rating. * This file must be loaded after 'star-rating.js'. * * @see http://github.com/kartik-v/bootstrap-star-rating * @author Kartik Visweswaran */ (function ($) { "use strict"; $.fn.ratingThemes['krajee-fa'] = { filledStar: '', emptyStar: '', clearButton: '' }; })(window.jQuery); ================================================ FILE: public/avbook/themes/krajee-fas/theme.css ================================================ /*! * Krajee Font Awesome Theme styling for bootstrap-star-rating. * This file must be loaded after 'star-rating.css'. * * @see http://github.com/kartik-v/bootstrap-star-rating * @author Kartik Visweswaran */ .theme-krajee-fas.rating-rtl.is-star .filled-stars { right: 0; } ================================================ FILE: public/avbook/themes/krajee-fas/theme.js ================================================ /*! * Krajee Font Awesome Theme configuration for bootstrap-star-rating. * This file must be loaded after 'star-rating.js'. * * @see http://github.com/kartik-v/bootstrap-star-rating * @author Kartik Visweswaran */ (function ($) { "use strict"; $.fn.ratingThemes['krajee-fas'] = { filledStar: '', emptyStar: '', clearButton: '' }; })(window.jQuery); ================================================ FILE: public/avbook/themes/krajee-svg/theme.css ================================================ /*! * Krajee SVG Theme styling for bootstrap-star-rating. * This file must be loaded after 'star-rating.css'. * * @see http://github.com/kartik-v/bootstrap-star-rating * @author Kartik Visweswaran */ .theme-krajee-svg .krajee-icon, .theme-krajee-svg .krajee-icon-clear { display: inline-block; width: 2rem; height: 2rem; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover; } .theme-krajee-svg .clear-rating, .theme-krajee-svg .rating-stars { font-size: 5px; } .theme-krajee-svg .krajee-icon-clear { background-image: url('data:image/svg+xml;charset=utf-8,%3Csvg%20id%3D%22svg2%22%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20158.81%20158.81%22%20version%3D%221.1%22%3E%0D%0A%3Cpath%20id%3D%22path4%22%20style%3D%22fill%3A%23aaa%22%20stroke-linejoin%3D%22round%22%20d%3D%22m155.06%2C79.438c0%2C41.799-33.885%2C75.684-75.684%2C75.684s-75.684-33.885-75.684-75.684%2C33.885-75.684%2C75.684-75.684%2C75.684%2C33.885%2C75.684%2C75.684z%22%20stroke%3D%22%23aaa%22%20stroke-linecap%3D%22round%22%20fill%3D%22none%22%2F%3E%0D%0A%3Cpath%20id%3D%22rect3139%22%20style%3D%22fill%3A%23fff%22%20d%3D%22m37.216%2C64.443v28.67h88.24v-28.67h-88.24z%22%2F%3E%0D%0A%3C%2Fsvg%3E'); } .theme-krajee-svg .filled-stars .krajee-icon-star { background-image: url('data:image/svg+xml;charset=utf-8,%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20width%3D%2232%22%20height%3D%2232%22%20viewBox%3D%220%200%2032%2032%22%3E%3Cpath%20fill%3D%22%23fde16d%22%20stroke%3D%22%23777777%22%20d%3D%22M20.6%2011l-4.6-10.5-4.6%2010.5h-10.8l7.8%207.9-3%2012.1%2010.6-6%2010.6%206-3-12.1%207.8-7.9z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E'); } .theme-krajee-svg.rating-xl .krajee-icon, .theme-krajee-svg.rating-xl .krajee-icon-clear { width: 3rem; height: 3rem; } .theme-krajee-svg.rating-lg .krajee-icon, .theme-krajee-svg.rating-lg .krajee-icon-clear { width: 2.5rem; height: 2.5rem; } .theme-krajee-svg.rating-md .krajee-icon, .theme-krajee-svg.rating-md .krajee-icon-clear { width: 2rem; height: 2rem; } .theme-krajee-svg.rating-sm .krajee-icon, .theme-krajee-svg.rating-sm .krajee-icon-clear { width: 1.5rem; height: 1.5rem; } .theme-krajee-svg.rating-xs .krajee-icon, .theme-krajee-svg.rating-xs .krajee-icon-clear { width: 1rem; height: 1rem; } .theme-krajee-svg .krajee-icon-clear:hover { background-image: url('data:image/svg+xml;charset=utf-8,%3Csvg%20id%3D%22svg2%22%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20158.81%20158.81%22%20version%3D%221.1%22%3E%0D%0A%3Cpath%20id%3D%22path4%22%20style%3D%22fill%3A%23843534%22%20stroke-linejoin%3D%22round%22%20d%3D%22m155.06%2C79.438c0%2C41.799-33.885%2C75.684-75.684%2C75.684s-75.684-33.885-75.684-75.684%2C33.885-75.684%2C75.684-75.684%2C75.684%2C33.885%2C75.684%2C75.684z%22%20stroke%3D%22%23843534%22%20stroke-linecap%3D%22round%22%20fill%3D%22none%22%2F%3E%0D%0A%3Cpath%20id%3D%22rect3139%22%20style%3D%22fill%3A%23fff%22%20d%3D%22m37.216%2C64.443v28.67h88.24v-28.67h-88.24z%22%2F%3E%0D%0A%3C%2Fsvg%3E'); } .theme-krajee-svg .empty-stars .krajee-icon-star { background-image: url('data:image/svg+xml;charset=utf-8,%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20width%3D%2232%22%20height%3D%2232%22%20viewBox%3D%220%200%2032%2032%22%3E%3Cpath%20fill%3D%22%23ffffff%22%20stroke%3D%22%23777777%22%20d%3D%22M20.6%2011l-4.6-10.5-4.6%2010.5h-10.8l7.8%207.9-3%2012.1%2010.6-6%2010.6%206-3-12.1%207.8-7.9z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E'); } .theme-krajee-svg .filled-stars .krajee-icon-heart { background-image: url('data:image/svg+xml;charset=utf-8,%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20fill%3D%22%23fde16d%22%20stroke%3D%22%23777777%22%20stroke-width%3D%220.04em%22%20d%3D%22M12%2021.35l-1.45-1.32c-5.15-4.67-8.55-7.75-8.55-11.53%200-3.08%202.42-5.5%205.5-5.5%201.74%200%203.41.81%204.5%202.09%201.09-1.28%202.76-2.09%204.5-2.09%203.08%200%205.5%202.42%205.5%205.5%200%203.78-3.4%206.86-8.55%2011.54l-1.45%201.31z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E'); } .theme-krajee-svg .empty-stars .krajee-icon-heart { background-image: url('data:image/svg+xml;charset=utf-8,%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20fill%3D%22%23ffffff%22%20stroke%3D%22%23777777%22%20stroke-width%3D%220.04em%22%20d%3D%22M12%2021.35l-1.45-1.32c-5.15-4.67-8.55-7.75-8.55-11.53%200-3.08%202.42-5.5%205.5-5.5%201.74%200%203.41.81%204.5%202.09%201.09-1.28%202.76-2.09%204.5-2.09%203.08%200%205.5%202.42%205.5%205.5%200%203.78-3.4%206.86-8.55%2011.54l-1.45%201.31z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E'); } .theme-krajee-svg.rating-rtl.is-heart .filled-stars { right: 0.02em; } .theme-krajee-svg.rating-rtl.is-heart .empty-stars { margin-right: 0.01em; } ================================================ FILE: public/avbook/themes/krajee-svg/theme.js ================================================ /*! * Krajee SVG Theme Configuration for bootstrap-star-rating. * This file must be loaded after 'star-rating.js'. * * @see http://github.com/kartik-v/bootstrap-star-rating * @author Kartik Visweswaran */ (function ($) { "use strict"; $.fn.ratingThemes['krajee-svg'] = { filledStar: '', emptyStar: '', clearButton: '' }; })(window.jQuery); ================================================ FILE: public/avbook/themes/krajee-uni/theme.css ================================================ /*! * Krajee Unicode Theme styling for bootstrap-star-rating. * This file must be loaded after 'star-rating.css'. * * @see http://github.com/kartik-v/bootstrap-star-rating * @author Kartik Visweswaran */ .theme-krajee-uni .star { font-size: 1.2em; line-height: 1; margin: 0; } .theme-krajee-uni .clear-rating { font-size: 1em; line-height: 1; } ================================================ FILE: public/avbook/themes/krajee-uni/theme.js ================================================ /*! * Krajee Unicode Theme configuration for bootstrap-star-rating. * This file must be loaded after 'star-rating.js'. * * @see http://github.com/kartik-v/bootstrap-star-rating * @author Kartik Visweswaran */ (function ($) { "use strict"; $.fn.ratingThemes['krajee-uni'] = { filledStar: '★', emptyStar: '☆', clearButton: '⊝' }; })(window.jQuery); ================================================ FILE: public/avbook/themes/zh.js ================================================ /*! * Star Rating Chinese Translations * * This file must be loaded after 'star-rating.js'. Patterns in braces '{}', or * any HTML markup tags in the messages must not be converted or translated. * * NOTE: this file must be saved in UTF-8 encoding. * * @see http://github.com/kartik-v/bootstrap-star-rating * @author Kartik Visweswaran * @author Freeman */ (function ($) { "use strict"; $.fn.ratingLocales['zh'] = { defaultCaption: '{rating} 星', starCaptions: { 0.5: '半星', 1: '一星', 1.5: '一星半', 2: '二星', 2.5: '二星半', 3: '三星', 3.5: '三星半', 4: '四星', 4.5: '四星半', 5: '五星' }, clearButtonTitle: '清除', clearCaption: '未评级' }; })(window.jQuery); ================================================ FILE: public/css/app.css ================================================ @import url(https://fonts.googleapis.com/css?family=Nunito); /*! * Bootstrap v4.1.3 (https://getbootstrap.com/) * Copyright 2011-2018 The Bootstrap Authors * Copyright 2011-2018 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */:root{--blue:#3490dc;--indigo:#6574cd;--purple:#9561e2;--pink:#f66d9b;--red:#e3342f;--orange:#f6993f;--yellow:#ffed4a;--green:#38c172;--teal:#4dc0b5;--cyan:#6cb2eb;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#3490dc;--secondary:#6c757d;--success:#38c172;--info:#6cb2eb;--warning:#ffed4a;--danger:#e3342f;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:"Nunito",sans-serif;--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Nunito,sans-serif;font-size:.9rem;font-weight:400;line-height:1.6;color:#212529;text-align:left;background-color:#f8fafc}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#3490dc;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#1d68a7;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.25rem}.h2,h2{font-size:1.8rem}.h3,h3{font-size:1.575rem}.h4,h4{font-size:1.35rem}.h5,h5{font-size:1.125rem}.h6,h6{font-size:.9rem}.lead{font-size:1.125rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.125rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014\A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#f8fafc;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#f66d9b;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:none}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:none}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:none}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:none}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:none}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#f8fafc}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#c6e0f5}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#b0d4f1}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c7eed8}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b3e8ca}.table-info,.table-info>td,.table-info>th{background-color:#d6e9f9}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#c0ddf6}.table-warning,.table-warning>td,.table-warning>th{background-color:#fffacc}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#fff8b3}.table-danger,.table-danger>td,.table-danger>th{background-color:#f7c6c5}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f4b0af}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#f8fafc;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#f8fafc;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.19rem + 2px);padding:.375rem .75rem;font-size:.9rem;line-height:1.6;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#a1cbef;outline:0;box-shadow:0 0 0 .2rem rgba(52,144,220,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.6}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.125rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.7875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.6;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.68125rem + 2px);padding:.25rem .5rem;font-size:.7875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(2.6875rem + 2px);padding:.5rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#38c172}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.7875rem;line-height:1.6;color:#fff;background-color:rgba(56,193,114,.9);border-radius:.25rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#38c172}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#38c172;box-shadow:0 0 0 .2rem rgba(56,193,114,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#38c172}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#38c172}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{background-color:#98e1b7}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{background-color:#5cd08d}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 1px #f8fafc,0 0 0 .2rem rgba(56,193,114,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#38c172}.custom-file-input.is-valid~.custom-file-label:after,.was-validated .custom-file-input:valid~.custom-file-label:after{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(56,193,114,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#e3342f}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.7875rem;line-height:1.6;color:#fff;background-color:rgba(227,52,47,.9);border-radius:.25rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#e3342f}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#e3342f;box-shadow:0 0 0 .2rem rgba(227,52,47,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#e3342f}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#e3342f}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{background-color:#f2a29f}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{background-color:#e9605c}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 1px #f8fafc,0 0 0 .2rem rgba(227,52,47,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#e3342f}.custom-file-input.is-invalid~.custom-file-label:after,.was-validated .custom-file-input:invalid~.custom-file-label:after{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(227,52,47,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:.9rem;line-height:1.6;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,144,220,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#3490dc;border-color:#3490dc}.btn-primary:hover{color:#fff;background-color:#227dc7;border-color:#2176bd}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(52,144,220,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#3490dc;border-color:#3490dc}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#2176bd;border-color:#1f6fb2}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,144,220,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#38c172;border-color:#38c172}.btn-success:hover{color:#fff;background-color:#2fa360;border-color:#2d995b}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(56,193,114,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#38c172;border-color:#38c172}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#2d995b;border-color:#2a9055}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(56,193,114,.5)}.btn-info{color:#212529;background-color:#6cb2eb;border-color:#6cb2eb}.btn-info:hover{color:#fff;background-color:#4aa0e6;border-color:#3f9ae5}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(108,178,235,.5)}.btn-info.disabled,.btn-info:disabled{color:#212529;background-color:#6cb2eb;border-color:#6cb2eb}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#3f9ae5;border-color:#3495e3}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,178,235,.5)}.btn-warning{color:#212529;background-color:#ffed4a;border-color:#ffed4a}.btn-warning:hover{color:#212529;background-color:#ffe924;border-color:#ffe817}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,237,74,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffed4a;border-color:#ffed4a}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#ffe817;border-color:#ffe70a}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,237,74,.5)}.btn-danger{color:#fff;background-color:#e3342f;border-color:#e3342f}.btn-danger:hover{color:#fff;background-color:#d0211c;border-color:#c51f1a}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(227,52,47,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#e3342f;border-color:#e3342f}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#c51f1a;border-color:#b91d19}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(227,52,47,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#3490dc;background-color:transparent;background-image:none;border-color:#3490dc}.btn-outline-primary:hover{color:#fff;background-color:#3490dc;border-color:#3490dc}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(52,144,220,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#3490dc;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#3490dc;border-color:#3490dc}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,144,220,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#38c172;background-color:transparent;background-image:none;border-color:#38c172}.btn-outline-success:hover{color:#fff;background-color:#38c172;border-color:#38c172}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(56,193,114,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#38c172;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#38c172;border-color:#38c172}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(56,193,114,.5)}.btn-outline-info{color:#6cb2eb;background-color:transparent;background-image:none;border-color:#6cb2eb}.btn-outline-info:hover{color:#212529;background-color:#6cb2eb;border-color:#6cb2eb}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(108,178,235,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#6cb2eb;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#212529;background-color:#6cb2eb;border-color:#6cb2eb}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,178,235,.5)}.btn-outline-warning{color:#ffed4a;background-color:transparent;background-image:none;border-color:#ffed4a}.btn-outline-warning:hover{color:#212529;background-color:#ffed4a;border-color:#ffed4a}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,237,74,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffed4a;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffed4a;border-color:#ffed4a}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,237,74,.5)}.btn-outline-danger{color:#e3342f;background-color:transparent;background-image:none;border-color:#e3342f}.btn-outline-danger:hover{color:#fff;background-color:#e3342f;border-color:#e3342f}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(227,52,47,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#e3342f;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#e3342f;border-color:#e3342f}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(227,52,47,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#3490dc;background-color:transparent}.btn-link:hover{color:#1d68a7;background-color:transparent}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline;border-color:transparent}.btn-link.focus,.btn-link:focus{box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.7875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:.9rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#3490dc}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.7875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:0 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group,.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:.9rem;font-weight:400;line-height:1.6;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{height:calc(2.6875rem + 2px);padding:.5rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{height:calc(1.68125rem + 2px);padding:.25rem .5rem;font-size:.7875rem;line-height:1.5;border-radius:.2rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.44rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;background-color:#3490dc}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #f8fafc,0 0 0 .2rem rgba(52,144,220,.25)}.custom-control-input:active~.custom-control-label:before{color:#fff;background-color:#cce3f6}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label:before{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.22rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background-repeat:no-repeat;background-position:50%;background-size:50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:before{background-color:#3490dc}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{background-color:#3490dc}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(52,144,220,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(52,144,220,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:before{background-color:#3490dc}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(52,144,220,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.19rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.6;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#a1cbef;outline:0;box-shadow:0 0 0 .2rem rgba(161,203,239,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.68125rem + 2px);font-size:75%}.custom-select-lg,.custom-select-sm{padding-top:.375rem;padding-bottom:.375rem}.custom-select-lg{height:calc(2.6875rem + 2px);font-size:125%}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(2.19rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#a1cbef;box-shadow:0 0 0 .2rem rgba(52,144,220,.25)}.custom-file-input:focus~.custom-file-label:after{border-color:#a1cbef}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-label{left:0;z-index:1;height:calc(2.19rem + 2px);background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.6;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:2.19rem;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #f8fafc,0 0 0 .2rem rgba(52,144,220,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #f8fafc,0 0 0 .2rem rgba(52,144,220,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #f8fafc,0 0 0 .2rem rgba(52,144,220,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#3490dc;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#cce3f6}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#3490dc;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#cce3f6}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#3490dc;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#cce3f6}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#f8fafc;border-color:#dee2e6 #dee2e6 #f8fafc}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#3490dc}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.32rem;padding-bottom:.32rem;margin-right:1rem;font-size:1.125rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.125rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child),.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;column-count:3;-webkit-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#3490dc;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#1d68a7;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(52,144,220,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#3490dc;border-color:#3490dc}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.125rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.7875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#3490dc}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#2176bd}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#38c172}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#2d995b}.badge-info{color:#212529;background-color:#6cb2eb}.badge-info[href]:focus,.badge-info[href]:hover{color:#212529;text-decoration:none;background-color:#3f9ae5}.badge-warning{color:#212529;background-color:#ffed4a}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#ffe817}.badge-danger{color:#fff;background-color:#e3342f}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#c51f1a}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3.85rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#1b4b72;background-color:#d6e9f8;border-color:#c6e0f5}.alert-primary hr{border-top-color:#b0d4f1}.alert-primary .alert-link{color:#113049}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#1d643b;background-color:#d7f3e3;border-color:#c7eed8}.alert-success hr{border-top-color:#b3e8ca}.alert-success .alert-link{color:#123c24}.alert-info{color:#385d7a;background-color:#e2f0fb;border-color:#d6e9f9}.alert-info hr{border-top-color:#c0ddf6}.alert-info .alert-link{color:#284257}.alert-warning{color:#857b26;background-color:#fffbdb;border-color:#fffacc}.alert-warning hr{border-top-color:#fff8b3}.alert-warning .alert-link{color:#5d561b}.alert-danger{color:#761b18;background-color:#f9d6d5;border-color:#f7c6c5}.alert-danger hr{border-top-color:#f4b0af}.alert-danger .alert-link{color:#4c110f}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.675rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#3490dc;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#3490dc;border-color:#3490dc}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#1b4b72;background-color:#c6e0f5}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#1b4b72;background-color:#b0d4f1}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#1b4b72;border-color:#1b4b72}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#1d643b;background-color:#c7eed8}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#1d643b;background-color:#b3e8ca}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#1d643b;border-color:#1d643b}.list-group-item-info{color:#385d7a;background-color:#d6e9f9}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#385d7a;background-color:#c0ddf6}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#385d7a;border-color:#385d7a}.list-group-item-warning{color:#857b26;background-color:#fffacc}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#857b26;background-color:#fff8b3}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#857b26;border-color:#857b26}.list-group-item-danger{color:#761b18;background-color:#f7c6c5}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#761b18;background-color:#f4b0af}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#761b18;border-color:#761b18}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.35rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-25%);transform:translateY(-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0);transform:translate(0)}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.6}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Nunito,sans-serif;font-style:normal;font-weight:400;line-height:1.6;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.7875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Nunito,sans-serif;font-style:normal;font-weight:400;line-height:1.6;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.7875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=top] .arrow:after,.bs-popover-auto[x-placement^=top] .arrow:before,.bs-popover-top .arrow:after,.bs-popover-top .arrow:before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow:before,.bs-popover-top .arrow:before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow:after,.bs-popover-top .arrow:after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow:after,.bs-popover-auto[x-placement^=right] .arrow:before,.bs-popover-right .arrow:after,.bs-popover-right .arrow:before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow:before,.bs-popover-right .arrow:before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow:after,.bs-popover-right .arrow:after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=bottom] .arrow:after,.bs-popover-auto[x-placement^=bottom] .arrow:before,.bs-popover-bottom .arrow:after,.bs-popover-bottom .arrow:before{border-width:0 .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow:before,.bs-popover-bottom .arrow:before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow:after,.bs-popover-bottom .arrow:after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow:after,.bs-popover-auto[x-placement^=left] .arrow:before,.bs-popover-left .arrow:after,.bs-popover-left .arrow:before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow:before,.bs-popover-left .arrow:before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow:after,.bs-popover-left .arrow:after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:.9rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item-next,.carousel-item-prev,.carousel-item.active{transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateZ(0);transform:translateZ(0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateZ(0);transform:translateZ(0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat 50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:hsla(0,0%,100%,.5)}.carousel-indicators li:before{top:-10px}.carousel-indicators li:after,.carousel-indicators li:before{position:absolute;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li:after{bottom:-10px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#3490dc!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#2176bd!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#38c172!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#2d995b!important}.bg-info{background-color:#6cb2eb!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#3f9ae5!important}.bg-warning{background-color:#ffed4a!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#ffe817!important}.bg-danger{background-color:#e3342f!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#c51f1a!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#3490dc!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#38c172!important}.border-info{border-color:#6cb2eb!important}.border-warning{border-color:#ffed4a!important}.border-danger{border-color:#e3342f!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#3490dc!important}a.text-primary:focus,a.text-primary:hover{color:#2176bd!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#38c172!important}a.text-success:focus,a.text-success:hover{color:#2d995b!important}.text-info{color:#6cb2eb!important}a.text-info:focus,a.text-info:hover{color:#3f9ae5!important}.text-warning{color:#ffed4a!important}a.text-warning:focus,a.text-warning:hover{color:#ffe817!important}.text-danger{color:#e3342f!important}a.text-danger:focus,a.text-danger:hover{color:#c51f1a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}.navbar-laravel{background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.04)} ================================================ FILE: public/index.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 simply require it | into the script here so that we don't have to worry about manual | loading any of our classes later on. It feels great to relax. | */ require __DIR__.'/../vendor/autoload.php'; /* |-------------------------------------------------------------------------- | Turn On The Lights |-------------------------------------------------------------------------- | | We need to illuminate PHP development, so let us turn on the lights. | This bootstraps the framework and gets it ready for use, then it | will load up this application so that we can run it and send | the responses back to the browser and delight our users. | */ $app = require_once __DIR__.'/../bootstrap/app.php'; /* |-------------------------------------------------------------------------- | Run The Application |-------------------------------------------------------------------------- | | Once we have the application, we can handle the incoming request | through the kernel, and send the associated response back to | the client's browser allowing them to enjoy the creative | and wonderful application we have prepared for them. | */ $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class); $response = $kernel->handle( $request = Illuminate\Http\Request::capture() ); $response->send(); $kernel->terminate($request, $response); ================================================ FILE: public/js/app.js ================================================ !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.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=11)}([function(e,t,n){"use strict";var r=n(5),i=n(19),o=Object.prototype.toString;function a(e){return"[object Array]"===o.call(e)}function s(e){return null!==e&&"object"==typeof e}function u(e){return"[object Function]"===o.call(e)}function c(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),a(e))for(var n=0,r=e.length;n=200&&e<300}};u.headers={common:{Accept:"application/json, text/plain, */*"}},r.forEach(["delete","get","head"],function(e){u.headers[e]={}}),r.forEach(["post","put","patch"],function(e){u.headers[e]=r.merge(o)}),e.exports=u}).call(this,n(6))},function(e,t,n){"use strict";n.r(t),function(e){for(var n="undefined"!=typeof window&&"undefined"!=typeof document,r=["Edge","Trident","Firefox"],i=0,o=0;o=0){i=1;break}var a=n&&window.Promise?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},i))}};function s(e){return e&&"[object Function]"==={}.toString.call(e)}function u(e,t){if(1!==e.nodeType)return[];var n=e.ownerDocument.defaultView.getComputedStyle(e,null);return t?n[t]:n}function c(e){return"HTML"===e.nodeName?e:e.parentNode||e.host}function l(e){if(!e)return document.body;switch(e.nodeName){case"HTML":case"BODY":return e.ownerDocument.body;case"#document":return e.body}var t=u(e),n=t.overflow,r=t.overflowX,i=t.overflowY;return/(auto|scroll|overlay)/.test(n+i+r)?e:l(c(e))}var f=n&&!(!window.MSInputMethodContext||!document.documentMode),p=n&&/MSIE 10/.test(navigator.userAgent);function d(e){return 11===e?f:10===e?p:f||p}function h(e){if(!e)return document.documentElement;for(var t=d(10)?document.body:null,n=e.offsetParent||null;n===t&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var r=n&&n.nodeName;return r&&"BODY"!==r&&"HTML"!==r?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===u(n,"position")?h(n):n:e?e.ownerDocument.documentElement:document.documentElement}function v(e){return null!==e.parentNode?v(e.parentNode):e}function g(e,t){if(!(e&&e.nodeType&&t&&t.nodeType))return document.documentElement;var n=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,r=n?e:t,i=n?t:e,o=document.createRange();o.setStart(r,0),o.setEnd(i,0);var a,s,u=o.commonAncestorContainer;if(e!==u&&t!==u||r.contains(i))return"BODY"===(s=(a=u).nodeName)||"HTML"!==s&&h(a.firstElementChild)!==a?h(u):u;var c=v(e);return c.host?g(c.host,t):g(e,v(t).host)}function m(e){var t="top"===(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top")?"scrollTop":"scrollLeft",n=e.nodeName;if("BODY"===n||"HTML"===n){var r=e.ownerDocument.documentElement;return(e.ownerDocument.scrollingElement||r)[t]}return e[t]}function y(e,t){var n="x"===t?"Left":"Top",r="Left"===n?"Right":"Bottom";return parseFloat(e["border"+n+"Width"],10)+parseFloat(e["border"+r+"Width"],10)}function _(e,t,n,r){return Math.max(t["offset"+e],t["scroll"+e],n["client"+e],n["offset"+e],n["scroll"+e],d(10)?parseInt(n["offset"+e])+parseInt(r["margin"+("Height"===e?"Top":"Left")])+parseInt(r["margin"+("Height"===e?"Bottom":"Right")]):0)}function b(e){var t=e.body,n=e.documentElement,r=d(10)&&getComputedStyle(n);return{height:_("Height",t,n,r),width:_("Width",t,n,r)}}var w=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},T=function(){function e(e,t){for(var n=0;n2&&void 0!==arguments[2]&&arguments[2],r=d(10),i="HTML"===t.nodeName,o=A(e),a=A(t),s=l(e),c=u(t),f=parseFloat(c.borderTopWidth,10),p=parseFloat(c.borderLeftWidth,10);n&&i&&(a.top=Math.max(a.top,0),a.left=Math.max(a.left,0));var h=C({top:o.top-a.top-f,left:o.left-a.left-p,width:o.width,height:o.height});if(h.marginTop=0,h.marginLeft=0,!r&&i){var v=parseFloat(c.marginTop,10),g=parseFloat(c.marginLeft,10);h.top-=f-v,h.bottom-=f-v,h.left-=p-g,h.right-=p-g,h.marginTop=v,h.marginLeft=g}return(r&&!n?t.contains(s):t===s&&"BODY"!==s.nodeName)&&(h=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=m(t,"top"),i=m(t,"left"),o=n?-1:1;return e.top+=r*o,e.bottom+=r*o,e.left+=i*o,e.right+=i*o,e}(h,t)),h}function O(e){if(!e||!e.parentElement||d())return document.documentElement;for(var t=e.parentElement;t&&"none"===u(t,"transform");)t=t.parentElement;return t||document.documentElement}function D(e,t,n,r){var i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o={top:0,left:0},a=i?O(e):g(e,t);if("viewport"===r)o=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.ownerDocument.documentElement,r=S(e,n),i=Math.max(n.clientWidth,window.innerWidth||0),o=Math.max(n.clientHeight,window.innerHeight||0),a=t?0:m(n),s=t?0:m(n,"left");return C({top:a-r.top+r.marginTop,left:s-r.left+r.marginLeft,width:i,height:o})}(a,i);else{var s=void 0;"scrollParent"===r?"BODY"===(s=l(c(t))).nodeName&&(s=e.ownerDocument.documentElement):s="window"===r?e.ownerDocument.documentElement:r;var f=S(s,a,i);if("HTML"!==s.nodeName||function e(t){var n=t.nodeName;return"BODY"!==n&&"HTML"!==n&&("fixed"===u(t,"position")||e(c(t)))}(a))o=f;else{var p=b(e.ownerDocument),d=p.height,h=p.width;o.top+=f.top-f.marginTop,o.bottom=d+f.top,o.left+=f.left-f.marginLeft,o.right=h+f.left}}var v="number"==typeof(n=n||0);return o.left+=v?n:n.left||0,o.top+=v?n:n.top||0,o.right-=v?n:n.right||0,o.bottom-=v?n:n.bottom||0,o}function I(e,t,n,r,i){var o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf("auto"))return e;var a=D(n,r,o,i),s={top:{width:a.width,height:t.top-a.top},right:{width:a.right-t.right,height:a.height},bottom:{width:a.width,height:a.bottom-t.bottom},left:{width:t.left-a.left,height:a.height}},u=Object.keys(s).map(function(e){return x({key:e},s[e],{area:(t=s[e],t.width*t.height)});var t}).sort(function(e,t){return t.area-e.area}),c=u.filter(function(e){var t=e.width,r=e.height;return t>=n.clientWidth&&r>=n.clientHeight}),l=c.length>0?c[0].key:u[0].key,f=e.split("-")[1];return l+(f?"-"+f:"")}function k(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return S(n,r?O(t):g(t,n),r)}function N(e){var t=e.ownerDocument.defaultView.getComputedStyle(e),n=parseFloat(t.marginTop||0)+parseFloat(t.marginBottom||0),r=parseFloat(t.marginLeft||0)+parseFloat(t.marginRight||0);return{width:e.offsetWidth+r,height:e.offsetHeight+n}}function L(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function j(e,t,n){n=n.split("-")[0];var r=N(e),i={width:r.width,height:r.height},o=-1!==["right","left"].indexOf(n),a=o?"top":"left",s=o?"left":"top",u=o?"height":"width",c=o?"width":"height";return i[a]=t[a]+t[u]/2-r[u]/2,i[s]=n===s?t[s]-r[c]:t[L(s)],i}function P(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function R(e,t,n){return(void 0===n?e:e.slice(0,function(e,t,n){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===n});var r=P(e,function(e){return e[t]===n});return e.indexOf(r)}(e,"name",n))).forEach(function(e){e.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=e.function||e.fn;e.enabled&&s(n)&&(t.offsets.popper=C(t.offsets.popper),t.offsets.reference=C(t.offsets.reference),t=n(t,e))}),t}function $(e,t){return e.some(function(e){var n=e.name;return e.enabled&&n===t})}function H(e){for(var t=[!1,"ms","Webkit","Moz","O"],n=e.charAt(0).toUpperCase()+e.slice(1),r=0;r1&&void 0!==arguments[1]&&arguments[1],n=K.indexOf(e),r=K.slice(n+1).concat(K.slice(0,n));return t?r.reverse():r}var X={FLIP:"flip",CLOCKWISE:"clockwise",COUNTERCLOCKWISE:"counterclockwise"};function Q(e,t,n,r){var i=[0,0],o=-1!==["right","left"].indexOf(r),a=e.split(/(\+|\-)/).map(function(e){return e.trim()}),s=a.indexOf(P(a,function(e){return-1!==e.search(/,|\s/)}));a[s]&&-1===a[s].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var u=/\s*,\s*|\s+/,c=-1!==s?[a.slice(0,s).concat([a[s].split(u)[0]]),[a[s].split(u)[1]].concat(a.slice(s+1))]:[a];return(c=c.map(function(e,r){var i=(1===r?!o:o)?"height":"width",a=!1;return e.reduce(function(e,t){return""===e[e.length-1]&&-1!==["+","-"].indexOf(t)?(e[e.length-1]=t,a=!0,e):a?(e[e.length-1]+=t,a=!1,e):e.concat(t)},[]).map(function(e){return function(e,t,n,r){var i=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),o=+i[1],a=i[2];if(!o)return e;if(0===a.indexOf("%")){var s=void 0;switch(a){case"%p":s=n;break;case"%":case"%r":default:s=r}return C(s)[t]/100*o}if("vh"===a||"vw"===a)return("vh"===a?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*o;return o}(e,i,t,n)})})).forEach(function(e,t){e.forEach(function(n,r){q(n)&&(i[t]+=n*("-"===e[r-1]?-1:1))})}),i}var Y={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,n=t.split("-")[0],r=t.split("-")[1];if(r){var i=e.offsets,o=i.reference,a=i.popper,s=-1!==["bottom","top"].indexOf(n),u=s?"left":"top",c=s?"width":"height",l={start:E({},u,o[u]),end:E({},u,o[u]+o[c]-a[c])};e.offsets.popper=x({},a,l[r])}return e}},offset:{order:200,enabled:!0,fn:function(e,t){var n=t.offset,r=e.placement,i=e.offsets,o=i.popper,a=i.reference,s=r.split("-")[0],u=void 0;return u=q(+n)?[+n,0]:Q(n,o,a,s),"left"===s?(o.top+=u[0],o.left-=u[1]):"right"===s?(o.top+=u[0],o.left+=u[1]):"top"===s?(o.left+=u[0],o.top-=u[1]):"bottom"===s&&(o.left+=u[0],o.top+=u[1]),e.popper=o,e},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var n=t.boundariesElement||h(e.instance.popper);e.instance.reference===n&&(n=h(n));var r=H("transform"),i=e.instance.popper.style,o=i.top,a=i.left,s=i[r];i.top="",i.left="",i[r]="";var u=D(e.instance.popper,e.instance.reference,t.padding,n,e.positionFixed);i.top=o,i.left=a,i[r]=s,t.boundaries=u;var c=t.priority,l=e.offsets.popper,f={primary:function(e){var n=l[e];return l[e]u[e]&&!t.escapeWithReference&&(r=Math.min(l[n],u[e]-("right"===e?l.width:l.height))),E({},n,r)}};return c.forEach(function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";l=x({},l,f[t](e))}),e.offsets.popper=l,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,r=t.reference,i=e.placement.split("-")[0],o=Math.floor,a=-1!==["top","bottom"].indexOf(i),s=a?"right":"bottom",u=a?"left":"top",c=a?"width":"height";return n[s]o(r[s])&&(e.offsets.popper[u]=o(r[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!V(e.instance.modifiers,"arrow","keepTogether"))return e;var r=t.element;if("string"==typeof r){if(!(r=e.instance.popper.querySelector(r)))return e}else if(!e.instance.popper.contains(r))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var i=e.placement.split("-")[0],o=e.offsets,a=o.popper,s=o.reference,c=-1!==["left","right"].indexOf(i),l=c?"height":"width",f=c?"Top":"Left",p=f.toLowerCase(),d=c?"left":"top",h=c?"bottom":"right",v=N(r)[l];s[h]-va[h]&&(e.offsets.popper[p]+=s[p]+v-a[h]),e.offsets.popper=C(e.offsets.popper);var g=s[p]+s[l]/2-v/2,m=u(e.instance.popper),y=parseFloat(m["margin"+f],10),_=parseFloat(m["border"+f+"Width"],10),b=g-e.offsets.popper[p]-y-_;return b=Math.max(Math.min(a[l]-v,b),0),e.arrowElement=r,e.offsets.arrow=(E(n={},p,Math.round(b)),E(n,d,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(e,t){if($(e.instance.modifiers,"inner"))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var n=D(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),r=e.placement.split("-")[0],i=L(r),o=e.placement.split("-")[1]||"",a=[];switch(t.behavior){case X.FLIP:a=[r,i];break;case X.CLOCKWISE:a=G(r);break;case X.COUNTERCLOCKWISE:a=G(r,!0);break;default:a=t.behavior}return a.forEach(function(s,u){if(r!==s||a.length===u+1)return e;r=e.placement.split("-")[0],i=L(r);var c=e.offsets.popper,l=e.offsets.reference,f=Math.floor,p="left"===r&&f(c.right)>f(l.left)||"right"===r&&f(c.left)f(l.top)||"bottom"===r&&f(c.top)f(n.right),v=f(c.top)f(n.bottom),m="left"===r&&d||"right"===r&&h||"top"===r&&v||"bottom"===r&&g,y=-1!==["top","bottom"].indexOf(r),_=!!t.flipVariations&&(y&&"start"===o&&d||y&&"end"===o&&h||!y&&"start"===o&&v||!y&&"end"===o&&g);(p||m||_)&&(e.flipped=!0,(p||m)&&(r=a[u+1]),_&&(o=function(e){return"end"===e?"start":"start"===e?"end":e}(o)),e.placement=r+(o?"-"+o:""),e.offsets.popper=x({},e.offsets.popper,j(e.instance.popper,e.offsets.reference,e.placement)),e=R(e.instance.modifiers,e,"flip"))}),e},behavior:"flip",padding:5,boundariesElement:"viewport"},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],r=e.offsets,i=r.popper,o=r.reference,a=-1!==["left","right"].indexOf(n),s=-1===["top","left"].indexOf(n);return i[a?"left":"top"]=o[n]-(s?i[a?"width":"height"]:0),e.placement=L(t),e.offsets.popper=C(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!V(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=P(e.instance.modifiers,function(e){return"preventOverflow"===e.name}).boundaries;if(t.bottomn.right||t.top>n.bottom||t.right2&&void 0!==arguments[2]?arguments[2]:{};w(this,e),this.scheduleUpdate=function(){return requestAnimationFrame(r.update)},this.update=a(this.update.bind(this)),this.options=x({},e.Defaults,i),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=t&&t.jquery?t[0]:t,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(x({},e.Defaults.modifiers,i.modifiers)).forEach(function(t){r.options.modifiers[t]=x({},e.Defaults.modifiers[t]||{},i.modifiers?i.modifiers[t]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return x({name:e},r.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(e){e.enabled&&s(e.onLoad)&&e.onLoad(r.reference,r.popper,r.options,e,r.state)}),this.update();var o=this.options.eventsEnabled;o&&this.enableEventListeners(),this.state.eventsEnabled=o}return T(e,[{key:"update",value:function(){return function(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=k(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=I(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=j(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",e=R(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}.call(this)}},{key:"destroy",value:function(){return function(){return this.state.isDestroyed=!0,$(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[H("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}.call(this)}},{key:"enableEventListeners",value:function(){return function(){this.state.eventsEnabled||(this.state=F(this.reference,this.options,this.state,this.scheduleUpdate))}.call(this)}},{key:"disableEventListeners",value:function(){return W.call(this)}}]),e}();J.Utils=("undefined"!=typeof window?window:e).PopperUtils,J.placements=z,J.Defaults=Y,t.default=J}.call(this,n(1))},function(e,t,n){var r;!function(t,n){"use strict";"object"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}:n(t)}("undefined"!=typeof window?window:this,function(n,i){"use strict";var o=[],a=n.document,s=Object.getPrototypeOf,u=o.slice,c=o.concat,l=o.push,f=o.indexOf,p={},d=p.toString,h=p.hasOwnProperty,v=h.toString,g=v.call(Object),m={},y=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},_=function(e){return null!=e&&e===e.window},b={type:!0,src:!0,noModule:!0};function w(e,t,n){var r,i=(t=t||a).createElement("script");if(i.text=e,n)for(r in b)n[r]&&(i[r]=n[r]);t.head.appendChild(i).parentNode.removeChild(i)}function T(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?p[d.call(e)]||"object":typeof e}var E=function(e,t){return new E.fn.init(e,t)},x=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function C(e){var t=!!e&&"length"in e&&e.length,n=T(e);return!y(e)&&!_(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}E.fn=E.prototype={jquery:"3.3.1",constructor:E,length:0,toArray:function(){return u.call(this)},get:function(e){return null==e?u.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=E.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return E.each(this,e)},map:function(e){return this.pushStack(E.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(u.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n+~]|"+R+")"+R+"*"),U=new RegExp("="+R+"*([^\\]'\"]*?)"+R+"*\\]","g"),V=new RegExp(M),z=new RegExp("^"+$+"$"),K={ID:new RegExp("^#("+$+")"),CLASS:new RegExp("^\\.("+$+")"),TAG:new RegExp("^("+$+"|[*])"),ATTR:new RegExp("^"+H),PSEUDO:new RegExp("^"+M),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+R+"*(even|odd|(([+-]|)(\\d*)n|)"+R+"*(?:([+-]|)"+R+"*(\\d+)|))"+R+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+R+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+R+"*((?:-\\d)?\\d*)"+R+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,Y=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,J=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+R+"?|("+R+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=ye(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{N.apply(D=L.call(w.childNodes),w.childNodes),D[w.childNodes.length].nodeType}catch(e){N={apply:D.length?function(e,t){k.apply(e,L.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function oe(e,t,r,i){var o,s,c,l,f,h,m,y=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,v)){if(11!==T&&(f=Y.exec(e)))if(o=f[1]){if(9===T){if(!(c=t.getElementById(o)))return r;if(c.id===o)return r.push(c),r}else if(y&&(c=y.getElementById(o))&&_(t,c)&&c.id===o)return r.push(c),r}else{if(f[2])return N.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return N.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!A[e+" "]&&(!g||!g.test(e))){if(1!==T)y=t,m=e;else if("object"!==t.nodeName.toLowerCase()){for((l=t.getAttribute("id"))?l=l.replace(te,ne):t.setAttribute("id",l=b),s=(h=a(e)).length;s--;)h[s]="#"+l+" "+me(h[s]);m=h.join(","),y=J.test(e)&&ve(t.parentNode)||t}if(m)try{return N.apply(r,y.querySelectorAll(m)),r}catch(e){}finally{l===b&&t.removeAttribute("id")}}}return u(e.replace(W,"$1"),t,r,i)}function ae(){var e=[];return function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ce(e,t){for(var n=e.split("|"),i=n.length;i--;)r.attrHandle[n[i]]=t}function le(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ve(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(h=(d=a).documentElement,v=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&v){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&v){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&v)return t.getElementsByClassName(e)},m=[],g=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]="+R+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||g.push("\\["+R+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||g.push("~="),e.querySelectorAll(":checked").length||g.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||g.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&g.push("name"+R+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(n.matchesSelector=Q.test(y=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=y.call(e,"*"),y.call(e,"[s!='']:x"),m.push("!=",M)}),g=g.length&&new RegExp(g.join("|")),m=m.length&&new RegExp(m.join("|")),t=Q.test(h.compareDocumentPosition),_=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},S=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&_(w,e)?-1:t===d||t.ownerDocument===w&&_(w,t)?1:l?j(l,e)-j(l,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:l?j(l,e)-j(l,t):0;if(i===o)return le(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?le(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(U,"='$1']"),n.matchesSelector&&v&&!A[t+" "]&&(!m||!m.test(t))&&(!g||!g.test(t)))try{var r=y.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),_(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&O.call(r.attrHandle,t.toLowerCase())?i(e,t,!v):void 0;return void 0!==o?o:n.attributes||!v?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,l=!n.sortStable&&e.slice(0),e.sort(S),f){for(;t=e[o++];)t===e[o]&&(i=r.push(o));for(;i--;)e.splice(r[i],1)}return l=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:K,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return K.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&V.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=x[e+" "];return t||(t=new RegExp("(^|"+R+")"+e+"("+R+"|$)"))&&x(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace(F," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,p,d,h,v=o!==a?"nextSibling":"previousSibling",g=t.parentNode,m=s&&t.nodeName.toLowerCase(),y=!u&&!s,_=!1;if(g){if(o){for(;v;){for(p=t;p=p[v];)if(s?p.nodeName.toLowerCase()===m:1===p.nodeType)return!1;h=v="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?g.firstChild:g.lastChild],a&&y){for(_=(d=(c=(l=(f=(p=g)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&c[1])&&c[2],p=d&&g.childNodes[d];p=++d&&p&&p[v]||(_=d=0)||h.pop();)if(1===p.nodeType&&++_&&p===t){l[e]=[T,d,_];break}}else if(y&&(_=d=(c=(l=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&c[1]),!1===_)for(;(p=++d&&p&&p[v]||(_=d=0)||h.pop())&&((s?p.nodeName.toLowerCase()!==m:1!==p.nodeType)||!++_||(y&&((l=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,_]),p!==t)););return(_-=i)===r||_%r==0&&_/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){for(var r,o=i(e,t),a=o.length;a--;)e[r=j(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[b]?se(function(e,t,n,i){for(var o,a=r(e,null,i,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return z.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=v?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return X.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,c=null!=t;s-1&&(o[c]=!(a[c]=f))}}else m=be(m===a?m.splice(h,m.length):m),i?i(null,a,m,u):N.apply(a,m)})}function Te(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,l=ye(function(e){return e===t},s,!0),f=ye(function(e){return j(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==c)||((t=n).nodeType?l(e,n,r):f(e,n,r));return t=null,i}];u1&&_e(p),u>1&&me(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(W,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,l){var f,h,g,m=0,y="0",_=o&&[],b=[],w=c,E=o||i&&r.find.TAG("*",l),x=T+=null==w?1:Math.random()||.1,C=E.length;for(l&&(c=a===d||a||l);y!==C&&null!=(f=E[y]);y++){if(i&&f){for(h=0,a||f.ownerDocument===d||(p(f),s=!v);g=e[h++];)if(g(f,a||d,s)){u.push(f);break}l&&(T=x)}n&&((f=!g&&f)&&m--,o&&_.push(f))}if(m+=y,n&&y!==m){for(h=0;g=t[h++];)g(_,b,a,s);if(o){if(m>0)for(;y--;)_[y]||b[y]||(b[y]=I.call(u));b=be(b)}N.apply(u,b),l&&!o&&b.length>0&&m+t.length>1&&oe.uniqueSort(u)}return l&&(T=x,c=w),_};return n?se(o):o}(o,i))).selector=e}return s},u=oe.select=function(e,t,n,i){var o,u,c,l,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(c=u[0]).type&&9===t.nodeType&&v&&r.relative[u[1].type]){if(!(t=(r.find.ID(c.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}for(o=K.needsContext.test(e)?0:u.length;o--&&(c=u[o],!r.relative[l=c.type]);)if((f=r.find[l])&&(i=f(c.matches[0].replace(Z,ee),J.test(u[0].type)&&ve(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&me(u)))return N.apply(n,i),n;break}}return(p||s(e,d))(i,t,!v,n,!t||J.test(e)&&ve(t.parentNode)||t),n},n.sortStable=b.split("").sort(S).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ce("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ce("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||ce(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(n);E.find=A,E.expr=A.selectors,E.expr[":"]=E.expr.pseudos,E.uniqueSort=E.unique=A.uniqueSort,E.text=A.getText,E.isXMLDoc=A.isXML,E.contains=A.contains,E.escapeSelector=A.escape;var S=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&E(e).is(n))break;r.push(e)}return r},O=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=E.expr.match.needsContext;function I(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var k=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function N(e,t,n){return y(t)?E.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?E.grep(e,function(e){return e===t!==n}):"string"!=typeof t?E.grep(e,function(e){return f.call(t,e)>-1!==n}):E.filter(t,e,n)}E.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?E.find.matchesSelector(r,e)?[r]:[]:E.find.matches(e,E.grep(t,function(e){return 1===e.nodeType}))},E.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(E(e).filter(function(){for(t=0;t1?E.uniqueSort(n):n},filter:function(e){return this.pushStack(N(this,e||[],!1))},not:function(e){return this.pushStack(N(this,e||[],!0))},is:function(e){return!!N(this,"string"==typeof e&&D.test(e)?E(e):e||[],!1).length}});var L,j=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||L,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:j.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:a,!0)),k.test(r[1])&&E.isPlainObject(t))for(r in t)y(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=a.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):y(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,L=E(a);var P=/^(?:parents|prev(?:Until|All))/,R={children:!0,contents:!0,next:!0,prev:!0};function $(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&E.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?E.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?f.call(E(e),this[0]):f.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(E.uniqueSort(E.merge(this.get(),E(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),E.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return S(e,"parentNode")},parentsUntil:function(e,t,n){return S(e,"parentNode",n)},next:function(e){return $(e,"nextSibling")},prev:function(e){return $(e,"previousSibling")},nextAll:function(e){return S(e,"nextSibling")},prevAll:function(e){return S(e,"previousSibling")},nextUntil:function(e,t,n){return S(e,"nextSibling",n)},prevUntil:function(e,t,n){return S(e,"previousSibling",n)},siblings:function(e){return O((e.parentNode||{}).firstChild,e)},children:function(e){return O(e.firstChild)},contents:function(e){return I(e,"iframe")?e.contentDocument:(I(e,"template")&&(e=e.content||e),E.merge([],e.childNodes))}},function(e,t){E.fn[e]=function(n,r){var i=E.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=E.filter(r,i)),this.length>1&&(R[e]||E.uniqueSort(i),P.test(e)&&i.reverse()),this.pushStack(i)}});var H=/[^\x20\t\r\n\f]+/g;function M(e){return e}function F(e){throw e}function W(e,t,n,r){var i;try{e&&y(i=e.promise)?i.call(e).done(t).fail(n):e&&y(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}E.Callbacks=function(e){e="string"==typeof e?function(e){var t={};return E.each(e.match(H)||[],function(e,n){t[n]=!0}),t}(e):E.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1)for(n=a.shift();++s-1;)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?E.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},E.extend({Deferred:function(e){var t=[["notify","progress",E.Callbacks("memory"),E.Callbacks("memory"),2],["resolve","done",E.Callbacks("once memory"),E.Callbacks("once memory"),0,"resolved"],["reject","fail",E.Callbacks("once memory"),E.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},catch:function(e){return i.then(null,e)},pipe:function(){var e=arguments;return E.Deferred(function(n){E.each(t,function(t,r){var i=y(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&y(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(e,r,i){var o=0;function a(e,t,r,i){return function(){var s=this,u=arguments,c=function(){var n,c;if(!(e=o&&(r!==F&&(s=void 0,u=[n]),t.rejectWith(s,u))}};e?l():(E.Deferred.getStackHook&&(l.stackTrace=E.Deferred.getStackHook()),n.setTimeout(l))}}return E.Deferred(function(n){t[0][3].add(a(0,n,y(i)?i:M,n.notifyWith)),t[1][3].add(a(0,n,y(e)?e:M)),t[2][3].add(a(0,n,y(r)?r:F))}).promise()},promise:function(e){return null!=e?E.extend(e,i):i}},o={};return E.each(t,function(e,n){var a=n[2],s=n[5];i[n[1]]=a.add,s&&a.add(function(){r=s},t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),a.add(n[3].fire),o[n[0]]=function(){return o[n[0]+"With"](this===o?void 0:this,arguments),this},o[n[0]+"With"]=a.fireWith}),i.promise(o),e&&e.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=u.call(arguments),o=E.Deferred(),a=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?u.call(arguments):n,--t||o.resolveWith(r,i)}};if(t<=1&&(W(e,o.done(a(n)).resolve,o.reject,!t),"pending"===o.state()||y(i[n]&&i[n].then)))return o.then();for(;n--;)W(i[n],a(n),o.reject);return o.promise()}});var q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;E.Deferred.exceptionHook=function(e,t){n.console&&n.console.warn&&e&&q.test(e.name)&&n.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},E.readyException=function(e){n.setTimeout(function(){throw e})};var B=E.Deferred();function U(){a.removeEventListener("DOMContentLoaded",U),n.removeEventListener("load",U),E.ready()}E.fn.ready=function(e){return B.then(e).catch(function(e){E.readyException(e)}),this},E.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--E.readyWait:E.isReady)||(E.isReady=!0,!0!==e&&--E.readyWait>0||B.resolveWith(a,[E]))}}),E.ready.then=B.then,"complete"===a.readyState||"loading"!==a.readyState&&!a.documentElement.doScroll?n.setTimeout(E.ready):(a.addEventListener("DOMContentLoaded",U),n.addEventListener("load",U));var V=function(e,t,n,r,i,o,a){var s=0,u=e.length,c=null==n;if("object"===T(n))for(s in i=!0,n)V(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,y(r)||(a=!0),c&&(a?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(E(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){Z.remove(this,e)})}}),E.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,E.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=E.queue(e,t),r=n.length,i=n.shift(),o=E._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){E.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:E.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),E.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ve={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ge(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&I(e,t)?E.merge([e],n):n}function me(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(c=E.contains(o.ownerDocument,o),a=ge(f.appendChild(o),"script"),c&&me(a),n)for(l=0;o=a[l++];)he.test(o.type||"")&&n.push(o);return f}ye=a.createDocumentFragment().appendChild(a.createElement("div")),(_e=a.createElement("input")).setAttribute("type","radio"),_e.setAttribute("checked","checked"),_e.setAttribute("name","t"),ye.appendChild(_e),m.checkClone=ye.cloneNode(!0).cloneNode(!0).lastChild.checked,ye.innerHTML="",m.noCloneChecked=!!ye.cloneNode(!0).lastChild.defaultValue;var Te=a.documentElement,Ee=/^key/,xe=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ae(){return!0}function Se(){return!1}function Oe(){try{return a.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return E().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=E.guid++)),e.each(function(){E.event.add(this,t,i,r,n)})}E.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,c,l,f,p,d,h,v,g=J.get(e);if(g)for(n.handler&&(n=(o=n).handler,i=o.selector),i&&E.find.matchesSelector(Te,i),n.guid||(n.guid=E.guid++),(u=g.events)||(u=g.events={}),(a=g.handle)||(a=g.handle=function(t){return void 0!==E&&E.event.triggered!==t.type?E.event.dispatch.apply(e,arguments):void 0}),c=(t=(t||"").match(H)||[""]).length;c--;)d=v=(s=Ce.exec(t[c])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=E.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=E.event.special[d]||{},l=E.extend({type:d,origType:v,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&E.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,l):p.push(l),E.event.global[d]=!0)},remove:function(e,t,n,r,i){var o,a,s,u,c,l,f,p,d,h,v,g=J.hasData(e)&&J.get(e);if(g&&(u=g.events)){for(c=(t=(t||"").match(H)||[""]).length;c--;)if(d=v=(s=Ce.exec(t[c])||[])[1],h=(s[2]||"").split(".").sort(),d){for(f=E.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;o--;)l=p[o],!i&&v!==l.origType||n&&n.guid!==l.guid||s&&!s.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(p.splice(o,1),l.selector&&p.delegateCount--,f.remove&&f.remove.call(e,l));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,g.handle)||E.removeEvent(e,d,g.handle),delete u[d])}else for(d in u)E.event.remove(e,d+t[c],n,r,!0);E.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=E.event.fix(e),u=new Array(arguments.length),c=(J.get(this,"events")||{})[s.type]||[],l=E.event.special[s.type]||{};for(u[0]=s,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||!0!==c.disabled)){for(o=[],a={},n=0;n-1:E.find(i,this,null,[c]).length),a[i]&&o.push(r);o.length&&s.push({elem:c,handlers:o})}return c=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,ke=/\s*$/g;function je(e,t){return I(e,"table")&&I(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function $e(e,t){var n,r,i,o,a,s,u,c;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),c=o.events))for(i in delete a.handle,a.events={},c)for(n=0,r=c[i].length;n1&&"string"==typeof h&&!m.checkClone&&Ne.test(h))return e.each(function(i){var o=e.eq(i);v&&(t[0]=h.call(this,i,o.html())),He(o,t,n,r)});if(p&&(o=(i=we(t,e[0].ownerDocument,!1,e,r)).firstChild,1===i.childNodes.length&&(i=o),o||r)){for(s=(a=E.map(ge(i,"script"),Pe)).length;f")},clone:function(e,t,n){var r,i,o,a,s,u,c,l=e.cloneNode(!0),f=E.contains(e.ownerDocument,e);if(!(m.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||E.isXMLDoc(e)))for(a=ge(l),r=0,i=(o=ge(e)).length;r0&&me(a,!f&&ge(e,"script")),l},cleanData:function(e){for(var t,n,r,i=E.event.special,o=0;void 0!==(n=e[o]);o++)if(Q(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?E.event.remove(n,r):E.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[Z.expando]&&(n[Z.expando]=void 0)}}}),E.fn.extend({detach:function(e){return Me(this,e,!0)},remove:function(e){return Me(this,e)},text:function(e){return V(this,function(e){return void 0===e?E.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(E.cleanData(ge(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return E.clone(this,e,t)})},html:function(e){return V(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ve[(de.exec(e)||["",""])[1].toLowerCase()]){e=E.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=We(e),i=Be(e,t,r),o="border-box"===E.css(e,"boxSizing",!1,r),a=o;if(Fe.test(i)){if(!n)return i;i="auto"}return a=a&&(m.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===E.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}E.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=ze.test(t),c=e.style;if(u||(t=Ye(s)),a=E.cssHooks[t]||E.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:c[t];"string"===(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n==n&&("number"===o&&(n+=i&&i[3]||(E.cssNumber[s]?"":"px")),m.clearCloneStyle||""!==n||0!==t.indexOf("background")||(c[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?c.setProperty(t,n):c[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return ze.test(t)||(t=Ye(s)),(a=E.cssHooks[t]||E.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),E.each(["height","width"],function(e,t){E.cssHooks[t]={get:function(e,n,r){if(n)return!Ve.test(E.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ke,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=We(e),a="border-box"===E.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&m.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=E.css(e,t)),Je(0,n,s)}}}),E.cssHooks.marginLeft=Ue(m.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),E.each({margin:"",padding:"",border:"Width"},function(e,t){E.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(E.cssHooks[e+t].set=Je)}),E.fn.extend({css:function(e,t){return V(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=We(e),i=t.length;a1)}}),E.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||E.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(E.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=E.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=E.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){E.fx.step[e.prop]?E.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[E.cssProps[e.prop]]&&!E.cssHooks[e.prop]?e.elem[e.prop]=e.now:E.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},E.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},E.fx=tt.prototype.init,E.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===a.hidden&&n.requestAnimationFrame?n.requestAnimationFrame(at):n.setTimeout(at,E.fx.interval),E.fx.tick())}function st(){return n.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){E.removeAttr(this,e)})}}),E.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?E.prop(e,t,n):(1===o&&E.isXMLDoc(e)||(i=E.attrHooks[t.toLowerCase()]||(E.expr.match.bool.test(t)?ft:void 0)),void 0!==n?null===n?void E.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=E.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!m.radioValue&&"radio"===t&&I(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(H);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),ft={set:function(e,t,n){return!1===t?E.removeAttr(e,n):e.setAttribute(n,n),n}},E.each(E.expr.match.bool.source.match(/\w+/g),function(e,t){var n=pt[t]||E.find.attr;pt[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=pt[a],pt[a]=i,i=null!=n(e,t,r)?a:null,pt[a]=o),i}});var dt=/^(?:input|select|textarea|button)$/i,ht=/^(?:a|area)$/i;function vt(e){return(e.match(H)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(H)||[]}E.fn.extend({prop:function(e,t){return V(this,E.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[E.propFix[e]||e]})}}),E.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&E.isXMLDoc(e)||(t=E.propFix[t]||t,i=E.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=E.find.attr(e,"tabindex");return t?parseInt(t,10):dt.test(e.nodeName)||ht.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),m.optSelected||(E.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),E.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){E.propFix[this.toLowerCase()]=this}),E.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(y(e))return this.each(function(t){E(this).addClass(e.call(this,t,gt(this)))});if((t=mt(e)).length)for(;n=this[u++];)if(i=gt(n),r=1===n.nodeType&&" "+vt(i)+" "){for(a=0;o=t[a++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(y(e))return this.each(function(t){E(this).removeClass(e.call(this,t,gt(this)))});if(!arguments.length)return this.attr("class","");if((t=mt(e)).length)for(;n=this[u++];)if(i=gt(n),r=1===n.nodeType&&" "+vt(i)+" "){for(a=0;o=t[a++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):y(e)?this.each(function(n){E(this).toggleClass(e.call(this,n,gt(this),t),t)}):this.each(function(){var t,i,o,a;if(r)for(i=0,o=E(this),a=mt(e);t=a[i++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==n||((t=gt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+vt(gt(n))+" ").indexOf(t)>-1)return!0;return!1}});var yt=/\r/g;E.fn.extend({val:function(e){var t,n,r,i=this[0];return arguments.length?(r=y(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,E(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=E.map(i,function(e){return null==e?"":e+""})),(t=E.valHooks[this.type]||E.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))})):i?(t=E.valHooks[i.type]||E.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(yt,""):null==n?"":n:void 0}}),E.extend({valHooks:{option:{get:function(e){var t=E.find.attr(e,"value");return null!=t?t:vt(E.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),E.each(["radio","checkbox"],function(){E.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=E.inArray(E(e).val(),t)>-1}},m.checkOn||(E.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),m.focusin="onfocusin"in n;var _t=/^(?:focusinfocus|focusoutblur)$/,bt=function(e){e.stopPropagation()};E.extend(E.event,{trigger:function(e,t,r,i){var o,s,u,c,l,f,p,d,v=[r||a],g=h.call(e,"type")?e.type:e,m=h.call(e,"namespace")?e.namespace.split("."):[];if(s=d=u=r=r||a,3!==r.nodeType&&8!==r.nodeType&&!_t.test(g+E.event.triggered)&&(g.indexOf(".")>-1&&(m=g.split("."),g=m.shift(),m.sort()),l=g.indexOf(":")<0&&"on"+g,(e=e[E.expando]?e:new E.Event(g,"object"==typeof e&&e)).isTrigger=i?2:3,e.namespace=m.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=r),t=null==t?[e]:E.makeArray(t,[e]),p=E.event.special[g]||{},i||!p.trigger||!1!==p.trigger.apply(r,t))){if(!i&&!p.noBubble&&!_(r)){for(c=p.delegateType||g,_t.test(c+g)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(r.ownerDocument||a)&&v.push(u.defaultView||u.parentWindow||n)}for(o=0;(s=v[o++])&&!e.isPropagationStopped();)d=s,e.type=o>1?c:p.bindType||g,(f=(J.get(s,"events")||{})[e.type]&&J.get(s,"handle"))&&f.apply(s,t),(f=l&&s[l])&&f.apply&&Q(s)&&(e.result=f.apply(s,t),!1===e.result&&e.preventDefault());return e.type=g,i||e.isDefaultPrevented()||p._default&&!1!==p._default.apply(v.pop(),t)||!Q(r)||l&&y(r[g])&&!_(r)&&((u=r[l])&&(r[l]=null),E.event.triggered=g,e.isPropagationStopped()&&d.addEventListener(g,bt),r[g](),e.isPropagationStopped()&&d.removeEventListener(g,bt),E.event.triggered=void 0,u&&(r[l]=u)),e.result}},simulate:function(e,t,n){var r=E.extend(new E.Event,n,{type:e,isSimulated:!0});E.event.trigger(r,null,t)}}),E.fn.extend({trigger:function(e,t){return this.each(function(){E.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return E.event.trigger(e,t,n,!0)}}),m.focusin||E.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){E.event.simulate(t,e.target,E.event.fix(e))};E.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var wt=n.location,Tt=Date.now(),Et=/\?/;E.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new n.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||E.error("Invalid XML: "+e),t};var xt=/\[\]$/,Ct=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,St=/^(?:input|select|textarea|keygen)/i;function Ot(e,t,n,r){var i;if(Array.isArray(t))E.each(t,function(t,i){n||xt.test(e)?r(e,i):Ot(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==T(t))r(e,t);else for(i in t)Ot(e+"["+i+"]",t[i],n,r)}E.param=function(e,t){var n,r=[],i=function(e,t){var n=y(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!E.isPlainObject(e))E.each(e,function(){i(this.name,this.value)});else for(n in e)Ot(n,e[n],t,i);return r.join("&")},E.fn.extend({serialize:function(){return E.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=E.prop(this,"elements");return e?E.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!E(this).is(":disabled")&&St.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=E(this).val();return null==n?null:Array.isArray(n)?E.map(n,function(e){return{name:t.name,value:e.replace(Ct,"\r\n")}}):{name:t.name,value:n.replace(Ct,"\r\n")}}).get()}});var Dt=/%20/g,It=/#.*$/,kt=/([?&])_=[^&]*/,Nt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,jt=/^\/\//,Pt={},Rt={},$t="*/".concat("*"),Ht=a.createElement("a");function Mt(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(H)||[];if(y(n))for(;r=o[i++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function Ft(e,t,n,r){var i={},o=e===Rt;function a(s){var u;return i[s]=!0,E.each(e[s]||[],function(e,s){var c=s(t,n,r);return"string"!=typeof c||o||i[c]?o?!(u=c):void 0:(t.dataTypes.unshift(c),a(c),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function Wt(e,t){var n,r,i=E.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&E.extend(!0,e,r),e}Ht.href=wt.href,E.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:wt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(wt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":E.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Wt(Wt(e,E.ajaxSettings),t):Wt(E.ajaxSettings,e)},ajaxPrefilter:Mt(Pt),ajaxTransport:Mt(Rt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var r,i,o,s,u,c,l,f,p,d,h=E.ajaxSetup({},t),v=h.context||h,g=h.context&&(v.nodeType||v.jquery)?E(v):E.event,m=E.Deferred(),y=E.Callbacks("once memory"),_=h.statusCode||{},b={},w={},T="canceled",x={readyState:0,getResponseHeader:function(e){var t;if(l){if(!s)for(s={};t=Nt.exec(o);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?o:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)x.always(e[x.status]);else for(t in e)_[t]=[_[t],e[t]];return this},abort:function(e){var t=e||T;return r&&r.abort(t),C(0,t),this}};if(m.promise(x),h.url=((e||h.url||wt.href)+"").replace(jt,wt.protocol+"//"),h.type=t.method||t.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(H)||[""],null==h.crossDomain){c=a.createElement("a");try{c.href=h.url,c.href=c.href,h.crossDomain=Ht.protocol+"//"+Ht.host!=c.protocol+"//"+c.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=E.param(h.data,h.traditional)),Ft(Pt,h,t,x),l)return x;for(p in(f=E.event&&h.global)&&0==E.active++&&E.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Lt.test(h.type),i=h.url.replace(It,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(Dt,"+")):(d=h.url.slice(i.length),h.data&&(h.processData||"string"==typeof h.data)&&(i+=(Et.test(i)?"&":"?")+h.data,delete h.data),!1===h.cache&&(i=i.replace(kt,"$1"),d=(Et.test(i)?"&":"?")+"_="+Tt+++d),h.url=i+d),h.ifModified&&(E.lastModified[i]&&x.setRequestHeader("If-Modified-Since",E.lastModified[i]),E.etag[i]&&x.setRequestHeader("If-None-Match",E.etag[i])),(h.data&&h.hasContent&&!1!==h.contentType||t.contentType)&&x.setRequestHeader("Content-Type",h.contentType),x.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]),h.headers)x.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(v,x,h)||l))return x.abort();if(T="abort",y.add(h.complete),x.done(h.success),x.fail(h.error),r=Ft(Rt,h,t,x)){if(x.readyState=1,f&&g.trigger("ajaxSend",[x,h]),l)return x;h.async&&h.timeout>0&&(u=n.setTimeout(function(){x.abort("timeout")},h.timeout));try{l=!1,r.send(b,C)}catch(e){if(l)throw e;C(-1,e)}}else C(-1,"No Transport");function C(e,t,a,s){var c,p,d,b,w,T=t;l||(l=!0,u&&n.clearTimeout(u),r=void 0,o=s||"",x.readyState=e>0?4:0,c=e>=200&&e<300||304===e,a&&(b=function(e,t,n){for(var r,i,o,a,s=e.contents,u=e.dataTypes;"*"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(h,x,a)),b=function(e,t,n,r){var i,o,a,s,u,c={},l=e.dataTypes.slice();if(l[1])for(a in e.converters)c[a.toLowerCase()]=e.converters[a];for(o=l.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=l.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=c[u+" "+o]||c["* "+o]))for(i in c)if((s=i.split(" "))[1]===o&&(a=c[u+" "+s[0]]||c["* "+s[0]])){!0===a?a=c[i]:!0!==c[i]&&(o=s[0],l.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(h,b,x,c),c?(h.ifModified&&((w=x.getResponseHeader("Last-Modified"))&&(E.lastModified[i]=w),(w=x.getResponseHeader("etag"))&&(E.etag[i]=w)),204===e||"HEAD"===h.type?T="nocontent":304===e?T="notmodified":(T=b.state,p=b.data,c=!(d=b.error))):(d=T,!e&&T||(T="error",e<0&&(e=0))),x.status=e,x.statusText=(t||T)+"",c?m.resolveWith(v,[p,T,x]):m.rejectWith(v,[x,T,d]),x.statusCode(_),_=void 0,f&&g.trigger(c?"ajaxSuccess":"ajaxError",[x,h,c?p:d]),y.fireWith(v,[x,T]),f&&(g.trigger("ajaxComplete",[x,h]),--E.active||E.event.trigger("ajaxStop")))}return x},getJSON:function(e,t,n){return E.get(e,t,n,"json")},getScript:function(e,t){return E.get(e,void 0,t,"script")}}),E.each(["get","post"],function(e,t){E[t]=function(e,n,r,i){return y(n)&&(i=i||r,r=n,n=void 0),E.ajax(E.extend({url:e,type:t,dataType:i,data:n,success:r},E.isPlainObject(e)&&e))}}),E._evalUrl=function(e){return E.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},E.fn.extend({wrapAll:function(e){var t;return this[0]&&(y(e)&&(e=e.call(this[0])),t=E(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return y(e)?this.each(function(t){E(this).wrapInner(e.call(this,t))}):this.each(function(){var t=E(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=y(e);return this.each(function(n){E(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){E(this).replaceWith(this.childNodes)}),this}}),E.expr.pseudos.hidden=function(e){return!E.expr.pseudos.visible(e)},E.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},E.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(e){}};var qt={0:200,1223:204},Bt=E.ajaxSettings.xhr();m.cors=!!Bt&&"withCredentials"in Bt,m.ajax=Bt=!!Bt,E.ajaxTransport(function(e){var t,r;if(m.cors||Bt&&!e.crossDomain)return{send:function(i,o){var a,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(a in e.xhrFields)s[a]=e.xhrFields[a];for(a in e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest"),i)s.setRequestHeader(a,i[a]);t=function(e){return function(){t&&(t=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(qt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=t(),r=s.onerror=s.ontimeout=t("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&n.setTimeout(function(){t&&r()})},t=t("abort");try{s.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}}),E.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),E.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return E.globalEval(e),e}}}),E.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),E.ajaxTransport("script",function(e){var t,n;if(e.crossDomain)return{send:function(r,i){t=E(" ================================================ FILE: resources/lang/en/auth.php ================================================ 'These credentials do not match our records.', 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', ]; ================================================ FILE: resources/lang/en/pagination.php ================================================ '« Previous', 'next' => 'Next »', ]; ================================================ FILE: resources/lang/en/passwords.php ================================================ 'Passwords must be at least eight characters and match the confirmation.', 'reset' => 'Your password has been reset!', 'sent' => 'We have e-mailed your password reset link!', 'token' => 'This password reset token is invalid.', 'user' => "We can't find a user with that e-mail address.", ]; ================================================ FILE: resources/lang/en/validation.php ================================================ 'The :attribute must be accepted.', 'active_url' => 'The :attribute is not a valid URL.', 'after' => 'The :attribute must be a date after :date.', 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', 'alpha' => 'The :attribute may only contain letters.', 'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.', 'alpha_num' => 'The :attribute may only contain letters and numbers.', 'array' => 'The :attribute must be an array.', 'before' => 'The :attribute must be a date before :date.', 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', 'between' => [ 'numeric' => 'The :attribute must be between :min and :max.', 'file' => 'The :attribute must be between :min and :max kilobytes.', 'string' => 'The :attribute must be between :min and :max characters.', 'array' => 'The :attribute must have between :min and :max items.', ], 'boolean' => 'The :attribute field must be true or false.', 'confirmed' => 'The :attribute confirmation does not match.', 'date' => 'The :attribute is not a valid date.', 'date_equals' => 'The :attribute must be a date equal to :date.', 'date_format' => 'The :attribute does not match the format :format.', 'different' => 'The :attribute and :other must be different.', 'digits' => 'The :attribute must be :digits digits.', 'digits_between' => 'The :attribute must be between :min and :max digits.', 'dimensions' => 'The :attribute has invalid image dimensions.', 'distinct' => 'The :attribute field has a duplicate value.', 'email' => 'The :attribute must be a valid email address.', 'exists' => 'The selected :attribute is invalid.', 'file' => 'The :attribute must be a file.', 'filled' => 'The :attribute field must have a value.', 'gt' => [ 'numeric' => 'The :attribute must be greater than :value.', 'file' => 'The :attribute must be greater than :value kilobytes.', 'string' => 'The :attribute must be greater than :value characters.', 'array' => 'The :attribute must have more than :value items.', ], 'gte' => [ 'numeric' => 'The :attribute must be greater than or equal :value.', 'file' => 'The :attribute must be greater than or equal :value kilobytes.', 'string' => 'The :attribute must be greater than or equal :value characters.', 'array' => 'The :attribute must have :value items or more.', ], 'image' => 'The :attribute must be an image.', 'in' => 'The selected :attribute is invalid.', 'in_array' => 'The :attribute field does not exist in :other.', 'integer' => 'The :attribute must be an integer.', 'ip' => 'The :attribute must be a valid IP address.', 'ipv4' => 'The :attribute must be a valid IPv4 address.', 'ipv6' => 'The :attribute must be a valid IPv6 address.', 'json' => 'The :attribute must be a valid JSON string.', 'lt' => [ 'numeric' => 'The :attribute must be less than :value.', 'file' => 'The :attribute must be less than :value kilobytes.', 'string' => 'The :attribute must be less than :value characters.', 'array' => 'The :attribute must have less than :value items.', ], 'lte' => [ 'numeric' => 'The :attribute must be less than or equal :value.', 'file' => 'The :attribute must be less than or equal :value kilobytes.', 'string' => 'The :attribute must be less than or equal :value characters.', 'array' => 'The :attribute must not have more than :value items.', ], 'max' => [ 'numeric' => 'The :attribute may not be greater than :max.', 'file' => 'The :attribute may not be greater than :max kilobytes.', 'string' => 'The :attribute may not be greater than :max characters.', 'array' => 'The :attribute may not have more than :max items.', ], 'mimes' => 'The :attribute must be a file of type: :values.', 'mimetypes' => 'The :attribute must be a file of type: :values.', 'min' => [ 'numeric' => 'The :attribute must be at least :min.', 'file' => 'The :attribute must be at least :min kilobytes.', 'string' => 'The :attribute must be at least :min characters.', 'array' => 'The :attribute must have at least :min items.', ], 'not_in' => 'The selected :attribute is invalid.', 'not_regex' => 'The :attribute format is invalid.', 'numeric' => 'The :attribute must be a number.', 'present' => 'The :attribute field must be present.', 'regex' => 'The :attribute format is invalid.', 'required' => 'The :attribute field is required.', 'required_if' => 'The :attribute field is required when :other is :value.', 'required_unless' => 'The :attribute field is required unless :other is in :values.', 'required_with' => 'The :attribute field is required when :values is present.', 'required_with_all' => 'The :attribute field is required when :values are present.', 'required_without' => 'The :attribute field is required when :values is not present.', 'required_without_all' => 'The :attribute field is required when none of :values are present.', 'same' => 'The :attribute and :other must match.', 'size' => [ 'numeric' => 'The :attribute must be :size.', 'file' => 'The :attribute must be :size kilobytes.', 'string' => 'The :attribute must be :size characters.', 'array' => 'The :attribute must contain :size items.', ], 'starts_with' => 'The :attribute must start with one of the following: :values', 'string' => 'The :attribute must be a string.', 'timezone' => 'The :attribute must be a valid zone.', 'unique' => 'The :attribute has already been taken.', 'uploaded' => 'The :attribute failed to upload.', 'url' => 'The :attribute format is invalid.', 'uuid' => 'The :attribute must be a valid UUID.', /* |-------------------------------------------------------------------------- | Custom Validation Language Lines |-------------------------------------------------------------------------- | | Here you may specify custom validation messages for attributes using the | convention "attribute.rule" to name the lines. This makes it quick to | specify a specific custom language line for a given attribute rule. | */ 'custom' => [ 'attribute-name' => [ 'rule-name' => 'custom-message', ], ], /* |-------------------------------------------------------------------------- | Custom Validation Attributes |-------------------------------------------------------------------------- | | The following language lines are used to swap our attribute placeholder | with something more reader friendly such as "E-Mail Address" instead | of "email". This simply helps us make our message more expressive. | */ 'attributes' => [], ]; ================================================ FILE: resources/sass/_variables.scss ================================================ // Body $body-bg: #f8fafc; // Typography $font-family-sans-serif: "Nunito", sans-serif; $font-size-base: 0.9rem; $line-height-base: 1.6; // Colors $blue: #3490dc; $indigo: #6574cd; $purple: #9561e2; $pink: #f66D9b; $red: #e3342f; $orange: #f6993f; $yellow: #ffed4a; $green: #38c172; $teal: #4dc0b5; $cyan: #6cb2eb; ================================================ FILE: resources/sass/app.scss ================================================ // Fonts @import url('https://fonts.googleapis.com/css?family=Nunito'); // Variables @import 'variables'; // Bootstrap @import '~bootstrap/scss/bootstrap'; .navbar-laravel { background-color: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04); } ================================================ FILE: resources/views/actresses.blade.php ================================================ @extends('layout') @section('content') @endsection ================================================ FILE: resources/views/itemtag.blade.php ================================================ 0): ?> ================================================ FILE: resources/views/layout.blade.php ================================================ @yield('title')
    搜尋中...
    @include('layout_header') @yield('content')

    Terms / Privacy / 2257 / / RTA / 廣告投放 / 聯絡我們 / 防屏蔽地址發布頁
    Copyright © 2013 JavBus. All Rights Reserved. All other trademarks and copyrights are the property of their respective holders. The reviews and comments expressed at or through this website are the opinions of the individual author and do not reflect the opinions or views of JavBus. JavBus is not responsible for the accuracy of any of the information supplied here.

    @yield('endscript') ================================================ FILE: resources/views/layout_censored.blade.php ================================================ @extends('layout') @section('title', ($title?$title:"AvBook 影片資料庫 - 磁力連結分享").' - 第'.($_GET['page'] ?? 1).'页') @section('navbar_right') @endsection @section('content')

    生日: {{$res_star['star_birthday']}}

    年龄:

    身高: cm

    罩杯:

    胸围: cm

    腰围: cm

    臀围: cm

    出生地:

    爱好:

    独自演出作品

    @endsection ================================================ FILE: resources/views/layout_genre.blade.php ================================================ @extends('layout') @section('navbar_right') @section('title', '有码类别') @endsection @section('content')
    {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{----}} {{--
    --}} {{--
    --}} {{--
    --}} {{--
    --}} {{----}} {{--
    --}} {{--
    永久域名:https://www.javbus.com
    --}} {{--
    防屏蔽地址:https://www.busjav.us
    防屏蔽地址:https://www.dmmbus.us
    防屏蔽地址:https://127.0.0.1
    --}} {{--
    --}} {{--
    --}}

    主題

    角色

    服裝

    體型

    行為

    玩法

    類別

    @endsection ================================================ FILE: resources/views/layout_header.blade.php ================================================ ================================================ FILE: resources/views/layout_javlib.blade.php ================================================ @extends('layout') @section('title', ($title?$title:"AvBook javlibrary - 高评价").' - 第'.($_GET['page'] ?? 1).'页') @section('navbar_right') @endsection @section('content')

    生日: {{$res_star['star_birthday']}}

    年龄:

    身高: cm

    罩杯:

    胸围: cm

    腰围: cm

    臀围: cm

    出生地:

    爱好:

    独自演出作品

    @endsection ================================================ FILE: resources/views/layout_javlibmovie.blade.php ================================================ @extends('layout') @section('title', $movie_info['censored_id'].$movie_info['movie_title']) @section('content') {{----}} {{----}} {{----}}
    s...
    {{--

    --}} @include('itemtag', ['movie_info' => $movie_info]) 已拥有'; } echo $sh .mb_substr( $movie_info['movie_title'], 0, 70) ?>

    识别码:

    上一页 | 下一页    

    磁力搜索:

    javbus:

    avmoo:

    @if ($movie_info['release_date']) 发行时间: @endif @if ( $movie_info['movie_length']) 长度:分钟

    @endif

    @if ($movie_info['Director'])

    导演:

    @endif @if ($movie_info['Studio'])

    制作商:

    @endif @if ($movie_info['Label'])

    发行商:

    @endif @if ($movie_info['Series'])

    系列:

    @endif

    类别: $val): ?>

    修改类别: $val): ?> " onclick="change_genre(this,'{{$key}}')" >{{$val}}

    修改状态: ['想要的','(没有资源 有资源无法下载)'],'watched'=>['已看过',''],'owned'=>['已拥有',''] ]; foreach($state_config as $key=>$val): ?> " onclick="change_state('{{$key}}','{{$newstate}}',this)" >{{$val[0]}} {{$movie_info['visited']}}

    演員:

      $val): ?> 暫無出演者資訊

    $val): ?>

    {{--

    樣品圖像

    --}}
    $val): ?>
    [已有文件]'; } echo $sh .$movie_info['censored_id'].' '. $movie_info['movie_title'] ?>

    磁力連結投稿 已拥有

    ×
    magnet地址:
    磁力名稱 檔案大小 分享日期

    同類影片



    @endsection ================================================ FILE: resources/views/layout_movie.blade.php ================================================ @extends('layout') @section('title', $movie_info['censored_id'].$movie_info['movie_title']) @section('content') {{----}} {{----}} {{----}}
    s...
    {{--

    --}} @include('itemtag', ['movie_info' => $movie_info]) 已拥有'; } echo $sh .mb_substr( $movie_info['movie_title'], 0, 70) ?>

    识别码:

    上一页 | 下一页    

    磁力搜索:

    javbus:

    avmoo:

    javlibrary:

    预告片: "> ">

    @if ($movie_info['release_date']) 发行时间: @endif @if ( $movie_info['movie_length']) 长度:分钟

    @endif

    @if ($movie_info['Director'])

    导演:

    @endif @if ($movie_info['Studio'])

    制作商:

    @endif @if ($movie_info['Label'])

    发行商:

    @endif @if ($movie_info['Series'])

    系列:

    @endif

    类别: $val): ?>

    修改类别: $val): ?> " onclick="change_genre(this,'{{$key}}')" >{{$val}}

    修改状态: ['想要的','(没有资源 有资源无法下载)'],'watched'=>['已看过',''],'owned'=>['已拥有',''] ]; foreach($state_config as $key=>$val): ?> " onclick="change_state('{{$key}}','{{$newstate}}',this)" >{{$val[0]}} {{$movie_info['visited']}}

    演員:

      $val): ?> 暫無出演者資訊

    $val): ?>

    {{--

    樣品圖像

    --}}
    $val): ?>
    [已有文件]'; } echo $sh .$movie_info['censored_id'].' '. $movie_info['movie_title'] ?>

    磁力連結投稿 已拥有

    ×
    magnet地址:
    磁力名稱 檔案大小 分享日期

    同類影片



    @endsection ================================================ FILE: resources/views/magnetlinks.blade.php ================================================ $val): ?> 高清 字幕 暫時沒有磁力連結 秋名山居民委员会 317599191一起寻找稀有资源 ================================================ FILE: resources/views/magnetlinks2.blade.php ================================================ 磁力名稱 1 檔案大小 分享日期 $val): ?> 高清 字幕 addto115无效 115会员 have file 取消标志 磁力名稱 btso 檔案大小 分享日期 $val): ?> 高清 字幕 addto 115无效 115会员 have file 待下 取消标志 ================================================ FILE: resources/views/welcome.blade.php ================================================ Laravel
    @if (Route::has('login')) @endif
    ================================================ FILE: routes/api.php ================================================ get('/user', function (Request $request) { // return $request->user(); //}); //Route::get('/addgenre', 'API\MovieinfoController@addgenre'); //Route::get('/magnetlinks', 'API\MovieinfoController@magnetlinks'); //Route::any('/test/{action}', function ($action) { // $class = App::make(\App\Http\Controllers\TestController::class); // return $class->$action(); //}); Route::any('/{action}', function (Request $request,$action) { $class = App::make(\App\Http\Controllers\API\MovieinfoController::class); return $class->$action($request); }); ================================================ FILE: routes/channels.php ================================================ id === (int) $id; }); ================================================ FILE: routes/console.php ================================================ comment(Inspiring::quote()); })->describe('Display an inspiring quote'); ================================================ FILE: routes/web.php ================================================ */ $uri = urldecode( parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) ); // This file allows us to emulate Apache's "mod_rewrite" functionality from the // built-in PHP web server. This provides a convenient way to test a Laravel // application without having installed a "real" web server software here. if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { return false; } require_once __DIR__.'/public/index.php'; ================================================ FILE: storage/app/.gitignore ================================================ * !public/ !.gitignore ================================================ FILE: storage/framework/.gitignore ================================================ config.php routes.php schedule-* compiled.php services.json events.scanned.php routes.scanned.php down ================================================ FILE: storage/framework/cache/.gitignore ================================================ * !data/ !.gitignore ================================================ FILE: storage/framework/sessions/.gitignore ================================================ * !.gitignore ================================================ FILE: storage/framework/testing/.gitignore ================================================ * !.gitignore ================================================ FILE: storage/framework/views/.gitignore ================================================ * !.gitignore ================================================ FILE: storage/logs/.gitignore ================================================ * !.gitignore ================================================ FILE: tests/CreatesApplication.php ================================================ make(Kernel::class)->bootstrap(); return $app; } } ================================================ FILE: tests/Feature/ExampleTest.php ================================================ get('/'); $response->assertStatus(200); } } ================================================ FILE: tests/TestCase.php ================================================ assertTrue(true); } } ================================================ FILE: tests/html/html_series.html ================================================ スプラッシュ○○ - 系列 - 影片
    搜尋中...

    Terms / Privacy / 2257 / RTA / 廣告投放 / 聯絡我們
    Copyright © 2013 JavBus. All Rights Reserved. All other trademarks and copyrights are the property of their respective holders. The reviews and comments expressed at or through this website are the opinions of the individual author and do not reflect the opinions or views of JavBus. JavBus is not responsible for the accuracy of any of the information supplied here.

    ================================================ FILE: tests/html/html_studio.html ================================================ 404 Page Not Found!
    搜尋中...

    404 Page Not Found!

    您進入的網址有誤,請重新輸入或回到 首頁.

    You are entering wrong url, please enter correct url or go back to Home Page.

    Terms / Privacy / 2257 / RTA / 廣告投放 / 聯絡我們
    Copyright © 2013 JavBus. All Rights Reserved. All other trademarks and copyrights are the property of their respective holders. The reviews and comments expressed at or through this website are the opinions of the individual author and do not reflect the opinions or views of JavBus. JavBus is not responsible for the accuracy of any of the information supplied here.