[{"content":" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 #!\/usr\/bin\/env python &#34;&#34;&#34; Whisper \u8bed\u97f3\u8bc6\u522b - \u751f\u6210 ASS \u5b57\u5e55\u6587\u4ef6 &#34;&#34;&#34; from faster_whisper import WhisperModel def format_ass_time(seconds): &#34;&#34;&#34;\u8f6c\u6362\u4e3a ASS \u65f6\u95f4\u683c\u5f0f\uff1aH:MM:SS.CC&#34;&#34;&#34; hours = int(seconds \/\/ 3600) minutes = int((seconds % 3600) \/\/ 60) secs = int(seconds % 60) centisecs = int((seconds % 1) * 100) return f&#34;{hours}:{minutes:02d}:{secs:02d}.{centisecs:02d}&#34; def transcribe(audio_file, output_file=None): &#34;&#34;&#34;\u8f6c\u5f55\u97f3\u9891\u5e76\u751f\u6210 ASS \u5b57\u5e55&#34;&#34;&#34; model = WhisperModel(&#34;tiny&#34;, device=&#34;cpu&#34;, compute_type=&#34;int8&#34;) segments, info = model.transcribe( audio_file, language=&#34;zh&#34;, word_timestamps=True ) # ASS \u6587\u4ef6\u5934 ass_header = &#34;&#34;&#34;[Script Info] Title: Whisper Subtitle ScriptType: v4.00+ WrapStyle: 0 PlayResX: 1920 PlayResY: 1080 [V4+ Styles] Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding Style: Default,Arial,48,&amp;H00FFFFFF,&amp;H000000FF,&amp;H00000000,&amp;H80000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,20,1 [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text &#34;&#34;&#34; # \u751f\u6210\u5b57\u5e55\u4e8b\u4ef6 events = [] for segment in segments: start = format_ass_time(segment.start) end = format_ass_time(segment.end) text = segment.text.strip().replace(&#34;\\n&#34;, &#34;\\\\N&#34;) events.append(f&#34;Dialogue: 0,{start},{end},Default,,0,0,0,,{text}&#34;) result = ass_header + &#34;\\n&#34;.join(events) # \u4fdd\u5b58\u5230\u6587\u4ef6 if output_file: with open(output_file, &#34;w&#34;, encoding=&#34;utf-8-sig&#34;) as f: # utf-8-sig for ASS f.write(result) print(f&#34;\u2705 \u5b57\u5e55\u5df2\u4fdd\u5b58: {output_file}&#34;) return result # \u4f7f\u7528\u793a\u4f8b if __name__ == &#34;__main__&#34;: audio_file = &#34;audio\/test_zh.wav&#34; output_file = &#34;audio\/test_zh.ass&#34; print(transcribe(audio_file, output_file)) ","permalink":"https:\/\/my.rongyiapi.com\/posts\/whisper-%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB---%E7%94%9F%E6%88%90-ass-%E5%AD%97%E5%B9%95%E6%96%87%E4%BB%B6\/","summary":"<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a class=\"lnlinks\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a class=\"lnlinks\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a class=\"lnlinks\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a class=\"lnlinks\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a class=\"lnlinks\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a class=\"lnlinks\" href=\"#hl-0-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a class=\"lnlinks\" href=\"#hl-0-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-13\"><a class=\"lnlinks\" href=\"#hl-0-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-14\"><a class=\"lnlinks\" href=\"#hl-0-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-15\"><a class=\"lnlinks\" href=\"#hl-0-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-16\"><a class=\"lnlinks\" href=\"#hl-0-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-17\"><a class=\"lnlinks\" href=\"#hl-0-17\">17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-18\"><a class=\"lnlinks\" href=\"#hl-0-18\">18<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-19\"><a class=\"lnlinks\" href=\"#hl-0-19\">19<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-20\"><a class=\"lnlinks\" href=\"#hl-0-20\">20<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-21\"><a class=\"lnlinks\" href=\"#hl-0-21\">21<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-22\"><a class=\"lnlinks\" href=\"#hl-0-22\">22<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-23\"><a class=\"lnlinks\" href=\"#hl-0-23\">23<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-24\"><a class=\"lnlinks\" href=\"#hl-0-24\">24<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-25\"><a class=\"lnlinks\" href=\"#hl-0-25\">25<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-26\"><a class=\"lnlinks\" href=\"#hl-0-26\">26<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-27\"><a class=\"lnlinks\" href=\"#hl-0-27\">27<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-28\"><a class=\"lnlinks\" href=\"#hl-0-28\">28<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-29\"><a class=\"lnlinks\" href=\"#hl-0-29\">29<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-30\"><a class=\"lnlinks\" href=\"#hl-0-30\">30<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-31\"><a class=\"lnlinks\" href=\"#hl-0-31\">31<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-32\"><a class=\"lnlinks\" href=\"#hl-0-32\">32<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-33\"><a class=\"lnlinks\" href=\"#hl-0-33\">33<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-34\"><a class=\"lnlinks\" href=\"#hl-0-34\">34<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-35\"><a class=\"lnlinks\" href=\"#hl-0-35\">35<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-36\"><a class=\"lnlinks\" href=\"#hl-0-36\">36<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-37\"><a class=\"lnlinks\" href=\"#hl-0-37\">37<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-38\"><a class=\"lnlinks\" href=\"#hl-0-38\">38<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-39\"><a class=\"lnlinks\" href=\"#hl-0-39\">39<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-40\"><a class=\"lnlinks\" href=\"#hl-0-40\">40<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-41\"><a class=\"lnlinks\" href=\"#hl-0-41\">41<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-42\"><a class=\"lnlinks\" href=\"#hl-0-42\">42<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-43\"><a class=\"lnlinks\" href=\"#hl-0-43\">43<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-44\"><a class=\"lnlinks\" href=\"#hl-0-44\">44<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-45\"><a class=\"lnlinks\" href=\"#hl-0-45\">45<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-46\"><a class=\"lnlinks\" href=\"#hl-0-46\">46<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-47\"><a class=\"lnlinks\" href=\"#hl-0-47\">47<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-48\"><a class=\"lnlinks\" href=\"#hl-0-48\">48<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-49\"><a class=\"lnlinks\" href=\"#hl-0-49\">49<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-50\"><a class=\"lnlinks\" href=\"#hl-0-50\">50<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-51\"><a class=\"lnlinks\" href=\"#hl-0-51\">51<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-52\"><a class=\"lnlinks\" href=\"#hl-0-52\">52<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-53\"><a class=\"lnlinks\" href=\"#hl-0-53\">53<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-54\"><a class=\"lnlinks\" href=\"#hl-0-54\">54<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-55\"><a class=\"lnlinks\" href=\"#hl-0-55\">55<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-56\"><a class=\"lnlinks\" href=\"#hl-0-56\">56<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-57\"><a class=\"lnlinks\" href=\"#hl-0-57\">57<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-58\"><a class=\"lnlinks\" href=\"#hl-0-58\">58<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-59\"><a class=\"lnlinks\" href=\"#hl-0-59\">59<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-60\"><a class=\"lnlinks\" href=\"#hl-0-60\">60<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-61\"><a class=\"lnlinks\" href=\"#hl-0-61\">61<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-62\"><a class=\"lnlinks\" href=\"#hl-0-62\">62<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-63\"><a class=\"lnlinks\" href=\"#hl-0-63\">63<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-64\"><a class=\"lnlinks\" href=\"#hl-0-64\">64<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-65\"><a class=\"lnlinks\" href=\"#hl-0-65\">65<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-66\"><a class=\"lnlinks\" href=\"#hl-0-66\">66<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"ch\">#!\/usr\/bin\/env python<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">&#34;&#34;&#34;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">Whisper \u8bed\u97f3\u8bc6\u522b - \u751f\u6210 ASS \u5b57\u5e55\u6587\u4ef6\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">&#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">faster_whisper<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">WhisperModel<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">format_ass_time<\/span><span class=\"p\">(<\/span><span class=\"n\">seconds<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s2\">&#34;&#34;&#34;\u8f6c\u6362\u4e3a ASS \u65f6\u95f4\u683c\u5f0f\uff1aH:MM:SS.CC&#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">hours<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">int<\/span><span class=\"p\">(<\/span><span class=\"n\">seconds<\/span> <span class=\"o\">\/\/<\/span> <span class=\"mi\">3600<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">minutes<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">int<\/span><span class=\"p\">((<\/span><span class=\"n\">seconds<\/span> <span class=\"o\">%<\/span> <span class=\"mi\">3600<\/span><span class=\"p\">)<\/span> <span class=\"o\">\/\/<\/span> <span class=\"mi\">60<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">secs<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">int<\/span><span class=\"p\">(<\/span><span class=\"n\">seconds<\/span> <span class=\"o\">%<\/span> <span class=\"mi\">60<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">centisecs<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">int<\/span><span class=\"p\">((<\/span><span class=\"n\">seconds<\/span> <span class=\"o\">%<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">100<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"sa\">f<\/span><span class=\"s2\">&#34;<\/span><span class=\"si\">{<\/span><span class=\"n\">hours<\/span><span class=\"si\">}<\/span><span class=\"s2\">:<\/span><span class=\"si\">{<\/span><span class=\"n\">minutes<\/span><span class=\"si\">:<\/span><span class=\"s2\">02d<\/span><span class=\"si\">}<\/span><span class=\"s2\">:<\/span><span class=\"si\">{<\/span><span class=\"n\">secs<\/span><span class=\"si\">:<\/span><span class=\"s2\">02d<\/span><span class=\"si\">}<\/span><span class=\"s2\">.<\/span><span class=\"si\">{<\/span><span class=\"n\">centisecs<\/span><span class=\"si\">:<\/span><span class=\"s2\">02d<\/span><span class=\"si\">}<\/span><span class=\"s2\">&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">transcribe<\/span><span class=\"p\">(<\/span><span class=\"n\">audio_file<\/span><span class=\"p\">,<\/span> <span class=\"n\">output_file<\/span><span class=\"o\">=<\/span><span class=\"kc\">None<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s2\">&#34;&#34;&#34;\u8f6c\u5f55\u97f3\u9891\u5e76\u751f\u6210 ASS \u5b57\u5e55&#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">model<\/span> <span class=\"o\">=<\/span> <span class=\"n\">WhisperModel<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;tiny&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">device<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;cpu&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">compute_type<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;int8&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">segments<\/span><span class=\"p\">,<\/span> <span class=\"n\">info<\/span> <span class=\"o\">=<\/span> <span class=\"n\">model<\/span><span class=\"o\">.<\/span><span class=\"n\">transcribe<\/span><span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">audio_file<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">language<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;zh&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">word_timestamps<\/span><span class=\"o\">=<\/span><span class=\"kc\">True<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"c1\"># ASS \u6587\u4ef6\u5934<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">ass_header<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;&#34;&#34;[Script Info]\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">Title: Whisper Subtitle\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">ScriptType: v4.00+\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">WrapStyle: 0\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">PlayResX: 1920\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">PlayResY: 1080\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">[V4+ Styles]\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">Style: Default,Arial,48,&amp;H00FFFFFF,&amp;H000000FF,&amp;H00000000,&amp;H80000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,20,1\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">[Events]\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">&#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"c1\"># \u751f\u6210\u5b57\u5e55\u4e8b\u4ef6<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">events<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">for<\/span> <span class=\"n\">segment<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">segments<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">start<\/span> <span class=\"o\">=<\/span> <span class=\"n\">format_ass_time<\/span><span class=\"p\">(<\/span><span class=\"n\">segment<\/span><span class=\"o\">.<\/span><span class=\"n\">start<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">end<\/span> <span class=\"o\">=<\/span> <span class=\"n\">format_ass_time<\/span><span class=\"p\">(<\/span><span class=\"n\">segment<\/span><span class=\"o\">.<\/span><span class=\"n\">end<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">segment<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span><span class=\"o\">.<\/span><span class=\"n\">strip<\/span><span class=\"p\">()<\/span><span class=\"o\">.<\/span><span class=\"n\">replace<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;<\/span><span class=\"se\">\\\\<\/span><span class=\"s2\">N&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">events<\/span><span class=\"o\">.<\/span><span class=\"n\">append<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"s2\">&#34;Dialogue: 0,<\/span><span class=\"si\">{<\/span><span class=\"n\">start<\/span><span class=\"si\">}<\/span><span class=\"s2\">,<\/span><span class=\"si\">{<\/span><span class=\"n\">end<\/span><span class=\"si\">}<\/span><span class=\"s2\">,Default,,0,0,0,,<\/span><span class=\"si\">{<\/span><span class=\"n\">text<\/span><span class=\"si\">}<\/span><span class=\"s2\">&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">result<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ass_header<\/span> <span class=\"o\">+<\/span> <span class=\"s2\">&#34;<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">&#34;<\/span><span class=\"o\">.<\/span><span class=\"n\">join<\/span><span class=\"p\">(<\/span><span class=\"n\">events<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"c1\"># \u4fdd\u5b58\u5230\u6587\u4ef6<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">if<\/span> <span class=\"n\">output_file<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">with<\/span> <span class=\"nb\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">output_file<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;w&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">encoding<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;utf-8-sig&#34;<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">f<\/span><span class=\"p\">:<\/span>  <span class=\"c1\"># utf-8-sig for ASS<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">f<\/span><span class=\"o\">.<\/span><span class=\"n\">write<\/span><span class=\"p\">(<\/span><span class=\"n\">result<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"s2\">&#34;\u2705 \u5b57\u5e55\u5df2\u4fdd\u5b58: <\/span><span class=\"si\">{<\/span><span class=\"n\">output_file<\/span><span class=\"si\">}<\/span><span class=\"s2\">&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"n\">result<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u4f7f\u7528\u793a\u4f8b<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"vm\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;__main__&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">audio_file<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;audio\/test_zh.wav&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">output_file<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;audio\/test_zh.ass&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">transcribe<\/span><span class=\"p\">(<\/span><span class=\"n\">audio_file<\/span><span class=\"p\">,<\/span> <span class=\"n\">output_file<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>","title":"Whisper \u8bed\u97f3\u8bc6\u522b - \u751f\u6210 ASS \u5b57\u5e55\u6587\u4ef6"},{"content":"API \u5f00\u53d1\u89c4\u8303 \u57fa\u672c\u539f\u5219 RESTful \u8bbe\u8ba1\uff0c\u65e0\u72b6\u6001 \u7edf\u4e00\u4f7f\u7528 JSON \u683c\u5f0f \u8def\u7531\u524d\u7f00\uff1a\/api\/v1 \u8ba4\u8bc1\u65b9\u5f0f\uff1aAuthorization: Bearer &lt;token&gt; HTTP\u72b6\u6001\u7801\u7edf\u4e00\u4e3a200 \u8def\u7531\u89c4\u8303 \u8d44\u6e90\u540d\u4f7f\u7528\u590d\u6570\uff1a\/users\u3001\/user_profiles HTTP \u65b9\u6cd5\u5bf9\u5e94\u64cd\u4f5c\uff1a GET - \u67e5\u8be2 POST - \u521b\u5efa PUT\/PATCH - \u66f4\u65b0 DELETE - \u5220\u9664 \u7edf\u4e00\u54cd\u5e94\u683c\u5f0f 1 2 3 4 5 6 7 { &#34;code&#34;: 200, &#34;message&#34;: &#34;\u64cd\u4f5c\u6210\u529f&#34;, &#34;data&#34;: {}, &#34;meta&#34;: {}, \/\/ \u5206\u9875\u65f6\u4f7f\u7528 &#34;errors&#34;: {} \/\/ \u9a8c\u8bc1\u5931\u8d25\u65f6\u4f7f\u7528 } code\u4e3a\u4e1a\u52a1\u72b6\u6001\u7801 \u4e1a\u52a1\u7801 \u8bf4\u660e 200 \u6210\u529f 400 \u8bf7\u6c42\u9519\u8bef 401 \u9a8c\u8bc1\u5931\u8d25 401 \u672a\u8ba4\u8bc1 403 \u65e0\u6743\u9650 404 \u672a\u627e\u5230 429 \u8bf7\u6c42\u8fc7\u9891 500 \u670d\u52a1\u5668\u9519\u8bef \u54cd\u5e94\u793a\u4f8b \u6210\u529f\u54cd\u5e94\n1 2 3 4 5 6 7 8 { &#34;code&#34;: 200, &#34;message&#34;: &#34;\u83b7\u53d6\u6210\u529f&#34;, &#34;data&#34;: { &#34;id&#34;: 1, &#34;name&#34;: &#34;John Doe&#34; } } \u9a8c\u8bc1\u5931\u8d25\n1 2 3 4 5 6 7 8 { &#34;code&#34;: 401, &#34;message&#34;: &#34;\u9a8c\u8bc1\u5931\u8d25&#34;, &#34;errors&#34;: { &#34;name&#34;: [&#34;\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a&#34;], &#34;password&#34;: [&#34;\u5bc6\u7801\u81f3\u5c118\u4f4d&#34;] } } \u5206\u9875\u54cd\u5e94\n1 2 3 4 5 6 7 8 9 10 11 { &#34;code&#34;: 200, &#34;message&#34;: &#34;\u83b7\u53d6\u6210\u529f&#34;, &#34;data&#34;: [...], &#34;meta&#34;: { &#34;current_page&#34;: 1, &#34;last_page&#34;: 5, &#34;per_page&#34;: 10, &#34;total&#34;: 50 } } ","permalink":"https:\/\/my.rongyiapi.com\/posts\/api-%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83\/","summary":"<h1 id=\"api-\u5f00\u53d1\u89c4\u8303\">API \u5f00\u53d1\u89c4\u8303<\/h1>\n<h2 id=\"\u57fa\u672c\u539f\u5219\">\u57fa\u672c\u539f\u5219<\/h2>\n<ul>\n<li>RESTful \u8bbe\u8ba1\uff0c\u65e0\u72b6\u6001<\/li>\n<li>\u7edf\u4e00\u4f7f\u7528 JSON \u683c\u5f0f<\/li>\n<li>\u8def\u7531\u524d\u7f00\uff1a<code>\/api\/v1<\/code><\/li>\n<li>\u8ba4\u8bc1\u65b9\u5f0f\uff1a<code>Authorization: Bearer &lt;token&gt;<\/code><\/li>\n<li>HTTP\u72b6\u6001\u7801\u7edf\u4e00\u4e3a200<\/li>\n<\/ul>\n<h2 id=\"\u8def\u7531\u89c4\u8303\">\u8def\u7531\u89c4\u8303<\/h2>\n<ul>\n<li>\u8d44\u6e90\u540d\u4f7f\u7528\u590d\u6570\uff1a<code>\/users<\/code>\u3001<code>\/user_profiles<\/code><\/li>\n<li>HTTP \u65b9\u6cd5\u5bf9\u5e94\u64cd\u4f5c\uff1a\n<ul>\n<li><code>GET<\/code> - \u67e5\u8be2<\/li>\n<li><code>POST<\/code> - \u521b\u5efa<\/li>\n<li><code>PUT\/PATCH<\/code> - \u66f4\u65b0<\/li>\n<li><code>DELETE<\/code> - \u5220\u9664<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2 id=\"\u7edf\u4e00\u54cd\u5e94\u683c\u5f0f\">\u7edf\u4e00\u54cd\u5e94\u683c\u5f0f<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\">4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\">5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a class=\"lnlinks\" href=\"#hl-0-6\">6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a class=\"lnlinks\" href=\"#hl-0-7\">7<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-json\" data-lang=\"json\"><span class=\"line\"><span class=\"cl\"><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"nt\">&#34;code&#34;<\/span><span class=\"p\">:<\/span> <span class=\"mi\">200<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"nt\">&#34;message&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;\u64cd\u4f5c\u6210\u529f&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"nt\">&#34;data&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"nt\">&#34;meta&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{},<\/span>     <span class=\"c1\">\/\/ \u5206\u9875\u65f6\u4f7f\u7528\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>  <span class=\"nt\">&#34;errors&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{}<\/span>    <span class=\"c1\">\/\/ \u9a8c\u8bc1\u5931\u8d25\u65f6\u4f7f\u7528\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"code\u4e3a\u4e1a\u52a1\u72b6\u6001\u7801\">code\u4e3a\u4e1a\u52a1\u72b6\u6001\u7801<\/h2>\n<table>\n  <thead>\n      <tr>\n          <th style=\"text-align: left\">\u4e1a\u52a1\u7801<\/th>\n          <th style=\"text-align: left\">\u8bf4\u660e<\/th>\n      <\/tr>\n  <\/thead>\n  <tbody>\n      <tr>\n          <td style=\"text-align: left\">200<\/td>\n          <td style=\"text-align: left\">\u6210\u529f<\/td>\n      <\/tr>\n      <tr>\n          <td style=\"text-align: left\">400<\/td>\n          <td style=\"text-align: left\">\u8bf7\u6c42\u9519\u8bef<\/td>\n      <\/tr>\n      <tr>\n          <td style=\"text-align: left\">401<\/td>\n          <td style=\"text-align: left\">\u9a8c\u8bc1\u5931\u8d25<\/td>\n      <\/tr>\n      <tr>\n          <td style=\"text-align: left\">401<\/td>\n          <td style=\"text-align: left\">\u672a\u8ba4\u8bc1<\/td>\n      <\/tr>\n      <tr>\n          <td style=\"text-align: left\">403<\/td>\n          <td style=\"text-align: left\">\u65e0\u6743\u9650<\/td>\n      <\/tr>\n      <tr>\n          <td style=\"text-align: left\">404<\/td>\n          <td style=\"text-align: left\">\u672a\u627e\u5230<\/td>\n      <\/tr>\n      <tr>\n          <td style=\"text-align: left\">429<\/td>\n          <td style=\"text-align: left\">\u8bf7\u6c42\u8fc7\u9891<\/td>\n      <\/tr>\n      <tr>\n          <td style=\"text-align: left\">500<\/td>\n          <td style=\"text-align: left\">\u670d\u52a1\u5668\u9519\u8bef<\/td>\n      <\/tr>\n  <\/tbody>\n<\/table>\n<h2 id=\"\u54cd\u5e94\u793a\u4f8b\">\u54cd\u5e94\u793a\u4f8b<\/h2>\n<p><strong>\u6210\u529f\u54cd\u5e94<\/strong><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a class=\"lnlinks\" href=\"#hl-1-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-2\"><a class=\"lnlinks\" href=\"#hl-1-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-3\"><a class=\"lnlinks\" href=\"#hl-1-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-4\"><a class=\"lnlinks\" href=\"#hl-1-4\">4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-5\"><a class=\"lnlinks\" href=\"#hl-1-5\">5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-6\"><a class=\"lnlinks\" href=\"#hl-1-6\">6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-7\"><a class=\"lnlinks\" href=\"#hl-1-7\">7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-8\"><a class=\"lnlinks\" href=\"#hl-1-8\">8<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-json\" data-lang=\"json\"><span class=\"line\"><span class=\"cl\"><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"nt\">&#34;code&#34;<\/span><span class=\"p\">:<\/span> <span class=\"mi\">200<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"nt\">&#34;message&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;\u83b7\u53d6\u6210\u529f&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"nt\">&#34;data&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nt\">&#34;id&#34;<\/span><span class=\"p\">:<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nt\">&#34;name&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;John Doe&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>\u9a8c\u8bc1\u5931\u8d25<\/strong><\/p>","title":"API \u5f00\u53d1\u89c4\u8303"},{"content":" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 \/\/ ==UserScript== \/\/ @name AugmentCode\u81ea\u52a8\u6ce8\u518c \/\/ @namespace http:\/\/tampermonkey.net\/ \/\/ @version 0.1.1 \/\/ @description \u81ea\u52a8\u5b8c\u6210AugmentCode\u7684\u6ce8\u518c\u6d41\u7a0b \/\/ @author Your name \/\/ @match https:\/\/*.augmentcode.com\/* \/\/ @icon https:\/\/www.google.com\/s2\/favicons?sz=64&amp;domain=augmentcode.com \/\/ @grant GM_xmlhttpRequest \/\/ @grant GM_setValue \/\/ @grant GM_getValue \/\/ @grant GM_log \/\/ @connect tempmail.plus \/\/ ==\/UserScript== (function() { &#39;use strict&#39;; \/\/ \u4e3b\u90ae\u7bb1\u57df\u540d\u5e38\u91cf\uff0c\u7528\u4e8e\u751f\u6210\u6807\u51c6\u683c\u5f0f\u7684\u90ae\u7bb1\u5730\u5740 const EMAIL_DOMAIN = &#34;&#34;; \/** * \u4e34\u65f6\u90ae\u7bb1\u670d\u52a1\u914d\u7f6e * \u7528\u4e8e\u9700\u8981\u4e34\u65f6\u63a5\u6536\u9a8c\u8bc1\u90ae\u4ef6\u7684\u573a\u666f *\/ const TEMP_MAIL_CONFIG = { username: &#34;&#34;, \/\/ \u4e34\u65f6\u90ae\u7bb1\u7528\u6237\u540d emailExtension: &#34;@mailto.plus&#34;, \/\/ \u4e34\u65f6\u90ae\u7bb1\u6269\u5c55\u57df\u540d epin: &#34;&#34; \/\/ \u90ae\u7bb1\u8bbf\u95eePIN\u7801\uff0c\u7528\u4e8e\u767b\u5f55\u4e34\u65f6\u90ae\u7bb1 }; const FIRST_NAMES = [&#34;alex&#34;, &#34;emily&#34;, &#34;jason&#34;, &#34;olivia&#34;, &#34;ryan&#34;, &#34;sophia&#34;, &#34;thomas&#34;, &#34;isabella&#34;, &#34;william&#34;, &#34;mia&#34;, &#34;james&#34;, &#34;ava&#34;, &#34;noah&#34;, &#34;charlotte&#34;, &#34;ethan&#34;, &#34;amelia&#34;, &#34;jacob&#34;, &#34;evelyn&#34;, &#34;mason&#34;, &#34;abigail&#34;]; const LAST_NAMES = [&#34;taylor&#34;, &#34;anderson&#34;, &#34;thompson&#34;, &#34;jackson&#34;, &#34;white&#34;, &#34;harris&#34;, &#34;martin&#34;, &#34;thomas&#34;, &#34;lewis&#34;, &#34;clark&#34;, &#34;lee&#34;, &#34;walker&#34;, &#34;hall&#34;, &#34;young&#34;, &#34;allen&#34;, &#34;king&#34;, &#34;wright&#34;, &#34;scott&#34;, &#34;green&#34;, &#34;adams&#34;]; \/\/ \u989c\u8272\u914d\u7f6e const COLORS = { primary: &#39;#3498db&#39;, secondary: &#39;#2ecc71&#39;, danger: &#39;#e74c3c&#39;, warning: &#39;#f39c12&#39;, info: &#39;#34495e&#39;, light: &#39;#ecf0f1&#39;, dark: &#39;#2c3e50&#39;, background: &#39;rgba(30, 30, 30, 0.95)&#39; }; \/\/ \u65e5\u5fd7UI\u914d\u7f6e const LOG_UI_CONFIG = { position: { bottom: 40, left: 20 }, dimensions: { width: 320, maxHeight: 450 } }; \/\/ \u521b\u5efa\u65e5\u5fd7UI - \u4f4d\u7f6e\u6539\u5230\u5de6\u4e0b\u89d2\uff0c\u6837\u5f0f\u548c\u989c\u8272\u66f4\u65b0 function createLogUI() { const logContainer = document.createElement(&#39;div&#39;); logContainer.id = &#34;auto-register-log&#34;; logContainer.style.cssText = ` position: fixed; bottom: ${LOG_UI_CONFIG.position.bottom}px; left: ${LOG_UI_CONFIG.position.left}px; width: ${LOG_UI_CONFIG.dimensions.width}px; max-height: ${LOG_UI_CONFIG.dimensions.maxHeight}px; background: ${COLORS.background}; border-radius: 10px; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25); z-index: 10000; font-family: &#39;Segoe UI&#39;, Tahoma, Geneva, Verdana, sans-serif; overflow: hidden; display: flex; flex-direction: column; `; logContainer.innerHTML = ` &lt;div style=&#34; padding: 14px 16px; background: ${COLORS.primary}; color: white; font-weight: 600; display: flex; justify-content: space-between; align-items: center; border-bottom: 2px solid ${COLORS.secondary}; &#34;&gt; &lt;span&gt;\u81ea\u52a8\u6ce8\u518c\u52a9\u624b&lt;\/span&gt; &lt;div&gt; &lt;button id=&#34;auto-register-btn&#34; style=&#34; background: ${COLORS.secondary}; border: none; color: white; cursor: pointer; font-size: 13px; padding: 6px 12px; border-radius: 4px; margin-right: 8px; display: none; transition: all 0.2s ease; &#34;&gt;\u5f00\u59cb\u6ce8\u518c&lt;\/button&gt; &lt;button id=&#34;clear-log&#34; style=&#34; background: transparent; border: 1px solid rgba(255, 255, 255, 0.7); color: white; cursor: pointer; font-size: 13px; padding: 6px 12px; border-radius: 4px; transition: all 0.2s ease; &#34;&gt;\u6e05\u9664&lt;\/button&gt; &lt;button id=&#34;minimize-log&#34; style=&#34; background: transparent; border: none; color: white; cursor: pointer; font-size: 16px; padding: 6px 12px; margin-left: 8px; transition: all 0.2s ease; &#34;&gt;_&lt;\/button&gt; &lt;\/div&gt; &lt;\/div&gt; &lt;div style=&#34; padding: 8px 16px; background: ${COLORS.dark}; border-bottom: 1px solid ${COLORS.info}; font-size: 12px; color: ${COLORS.light}; display: flex; align-items: center; gap: 8px; &#34;&gt; &lt;span style=&#34;color: ${COLORS.secondary};&#34;&gt;\ud83d\udce2&lt;\/span&gt; &lt;span&gt;\u64cd\u4f5c\u63a7\u5236\u53f0&lt;\/span&gt; &lt;\/div&gt; &lt;div id=&#34;log-content&#34; style=&#34; padding: 16px; overflow-y: auto; max-height: calc(${LOG_UI_CONFIG.dimensions.maxHeight}px - 120px); font-size: 14px; color: ${COLORS.light}; line-height: 1.5; &#34;&gt;&lt;\/div&gt; `; document.body.appendChild(logContainer); \/\/ \u6700\u5c0f\u5316\u529f\u80fd let isMinimized = false; const logContent = document.getElementById(&#39;log-content&#39;); const minimizeBtn = document.getElementById(&#39;minimize-log&#39;); minimizeBtn.addEventListener(&#39;click&#39;, () =&gt; { isMinimized = !isMinimized; logContent.style.display = isMinimized ? &#39;none&#39; : &#39;block&#39;; minimizeBtn.textContent = isMinimized ? &#39;\u25a2&#39; : &#39;_&#39;; }); \/\/ \u6e05\u9664\u65e5\u5fd7\u529f\u80fd const clearBtn = document.getElementById(&#39;clear-log&#39;); clearBtn.addEventListener(&#39;click&#39;, () =&gt; { logContent.innerHTML = &#39;&#39;; log(&#39;\u65e5\u5fd7\u5df2\u6e05\u9664&#39;, &#39;info&#39;); }); \/\/ \u6ce8\u518c\u6309\u94ae\u60ac\u505c\u6548\u679c const registerBtn = document.getElementById(&#39;auto-register-btn&#39;); if (registerBtn) { registerBtn.addEventListener(&#39;mouseenter&#39;, () =&gt; { registerBtn.style.transform = &#39;scale(1.05)&#39;; }); registerBtn.addEventListener(&#39;mouseleave&#39;, () =&gt; { registerBtn.style.transform = &#39;scale(1)&#39;; }); } return { log: function(message, type = &#39;info&#39;) { const logEntry = document.createElement(&#39;div&#39;); logEntry.style.marginBottom = &#39;10px&#39;; logEntry.style.padding = &#39;12px&#39;; logEntry.style.borderRadius = &#39;6px&#39;; logEntry.style.wordBreak = &#39;break-all&#39;; logEntry.style.transition = &#39;all 0.3s ease&#39;; let bgColor, textColor; switch(type) { case &#39;success&#39;: bgColor = &#39;rgba(46, 204, 113, 0.2)&#39;; textColor = COLORS.secondary; break; case &#39;error&#39;: bgColor = &#39;rgba(231, 76, 60, 0.2)&#39;; textColor = COLORS.danger; break; case &#39;warning&#39;: bgColor = &#39;rgba(243, 156, 17, 0.2)&#39;; textColor = COLORS.warning; break; default: bgColor = &#39;rgba(255, 255, 255, 0.05)&#39;; textColor = COLORS.light; } logEntry.style.backgroundColor = bgColor; logEntry.style.color = textColor; const time = new Date().toLocaleTimeString([], { hour: &#39;2-digit&#39;, minute:&#39;2-digit&#39;, second:&#39;2-digit&#39; }); logEntry.textContent = `[${time}] ${message}`; logContent.appendChild(logEntry); logContent.scrollTop = logContent.scrollHeight; }, showRegisterButton: function() { const registerBtn = document.getElementById(&#39;auto-register-btn&#39;); if (registerBtn) { this.log(&#39;\u627e\u5230\u6ce8\u518c\u6309\u94ae\uff0c\u6b63\u5728\u663e\u793a...&#39;); registerBtn.style.display = &#39;inline-block&#39;; return registerBtn; } else { this.log(&#39;\u672a\u627e\u5230\u6ce8\u518c\u6309\u94ae\u5143\u7d20&#39;, &#39;error&#39;); return null; } } }; } \/\/ \u521b\u5efa\u5168\u5c40\u65e5\u5fd7\u5bf9\u8c61 const logger = createLogUI(); \/\/ \u751f\u6210\u968f\u673a\u90ae\u7bb1 function generateEmail() { const firstName = FIRST_NAMES[Math.floor(Math.random() * FIRST_NAMES.length)]; const lastName = LAST_NAMES[Math.floor(Math.random() * LAST_NAMES.length)]; const timestamp = Date.now().toString(36); \/\/ \u8f6c\u6362\u4e3a36\u8fdb\u5236\u4ee5\u7f29\u77ed\u957f\u5ea6 const randomNum = Math.floor(Math.random() * 10000).toString().padStart(4, &#39;0&#39;); \/\/ \u751f\u62104\u4f4d\u968f\u673a\u6570 const username = `${firstName}${lastName}${timestamp}${randomNum}`; return `${username}${EMAIL_DOMAIN}`; } \/\/ \u7b49\u5f85\u5143\u7d20\u51fa\u73b0 async function waitForElement(selector, timeout = 10000) { const startTime = Date.now(); while (Date.now() - startTime &lt; timeout) { const element = document.querySelector(selector); if (element) { return element; } await new Promise(resolve =&gt; setTimeout(resolve, 100)); } return null; } \/\/ \u4ece\u90ae\u4ef6\u6587\u672c\u4e2d\u63d0\u53d6\u9a8c\u8bc1\u7801 function extractVerificationCode(mailText) { const codeMatch = mailText.match(\/(?&lt;![a-zA-Z@.])\\b\\d{6}\\b\/); return codeMatch ? codeMatch[0] : null; } \/\/ \u5220\u9664\u90ae\u4ef6 async function deleteEmail(firstId) { return new Promise((resolve, reject) =&gt; { const deleteUrl = &#39;https:\/\/tempmail.plus\/api\/mails\/&#39;; const maxRetries = 5; let retryCount = 0; function tryDelete() { GM_xmlhttpRequest({ method: &#34;DELETE&#34;, url: deleteUrl, data: `email=${TEMP_MAIL_CONFIG.username}${TEMP_MAIL_CONFIG.emailExtension}&amp;first_id=${firstId}&amp;epin=${TEMP_MAIL_CONFIG.epin}`, headers: { &#34;Content-Type&#34;: &#34;application\/x-www-form-urlencoded&#34; }, onload: function(response) { try { const result = JSON.parse(response.responseText).result; if (result === true) { logger.log(&#34;\u90ae\u4ef6\u5220\u9664\u6210\u529f&#34;, &#39;success&#39;); resolve(true); return; } } catch (error) { logger.log(&#34;\u89e3\u6790\u5220\u9664\u54cd\u5e94\u5931\u8d25: &#34; + error, &#39;warning&#39;); } \/\/ \u5982\u679c\u8fd8\u6709\u91cd\u8bd5\u6b21\u6570\uff0c\u7ee7\u7eed\u5c1d\u8bd5 if (retryCount &lt; maxRetries - 1) { retryCount++; logger.log(`\u5220\u9664\u90ae\u4ef6\u5931\u8d25\uff0c\u6b63\u5728\u91cd\u8bd5 (${retryCount}\/${maxRetries})...`, &#39;warning&#39;); setTimeout(tryDelete, 500); } else { logger.log(&#34;\u5220\u9664\u90ae\u4ef6\u5931\u8d25\uff0c\u5df2\u8fbe\u5230\u6700\u5927\u91cd\u8bd5\u6b21\u6570&#34;, &#39;error&#39;); resolve(false); } }, onerror: function(error) { if (retryCount &lt; maxRetries - 1) { retryCount++; logger.log(`\u5220\u9664\u90ae\u4ef6\u51fa\u9519\uff0c\u6b63\u5728\u91cd\u8bd5 (${retryCount}\/${maxRetries})...`, &#39;warning&#39;); setTimeout(tryDelete, 500); } else { logger.log(&#34;\u5220\u9664\u90ae\u4ef6\u5931\u8d25: &#34; + error, &#39;error&#39;); resolve(false); } } }); } tryDelete(); }); } \/\/ \u83b7\u53d6\u6700\u65b0\u90ae\u4ef6\u4e2d\u7684\u9a8c\u8bc1\u7801 async function getLatestMailCode() { return new Promise((resolve, reject) =&gt; { const mailListUrl = `https:\/\/tempmail.plus\/api\/mails?email=${TEMP_MAIL_CONFIG.username}${TEMP_MAIL_CONFIG.emailExtension}&amp;limit=20&amp;epin=${TEMP_MAIL_CONFIG.epin}`; GM_xmlhttpRequest({ method: &#34;GET&#34;, url: mailListUrl, onload: async function(mailListResponse) { try { const mailListData = JSON.parse(mailListResponse.responseText); if (!mailListData.result || !mailListData.first_id) { resolve(null); return; } const firstId = mailListData.first_id; const mailDetailUrl = `https:\/\/tempmail.plus\/api\/mails\/${firstId}?email=${TEMP_MAIL_CONFIG.username}${TEMP_MAIL_CONFIG.emailExtension}&amp;epin=${TEMP_MAIL_CONFIG.epin}`; GM_xmlhttpRequest({ method: &#34;GET&#34;, url: mailDetailUrl, onload: async function(mailDetailResponse) { try { const mailDetailData = JSON.parse(mailDetailResponse.responseText); if (!mailDetailData.result) { resolve(null); return; } const mailText = mailDetailData.text || &#34;&#34;; const mailSubject = mailDetailData.subject || &#34;&#34;; logger.log(&#34;\u627e\u5230\u90ae\u4ef6\u4e3b\u9898: &#34; + mailSubject); const code = extractVerificationCode(mailText); \/\/ \u83b7\u53d6\u5230\u9a8c\u8bc1\u7801\u540e\uff0c\u5c1d\u8bd5\u5220\u9664\u90ae\u4ef6 if (code) { await deleteEmail(firstId); } resolve(code); } catch (error) { logger.log(&#34;\u89e3\u6790\u90ae\u4ef6\u8be6\u60c5\u5931\u8d25: &#34; + error, &#39;error&#39;); resolve(null); } }, onerror: function(error) { logger.log(&#34;\u83b7\u53d6\u90ae\u4ef6\u8be6\u60c5\u5931\u8d25: &#34; + error, &#39;error&#39;); resolve(null); } }); } catch (error) { logger.log(&#34;\u89e3\u6790\u90ae\u4ef6\u5217\u8868\u5931\u8d25: &#34; + error, &#39;error&#39;); resolve(null); } }, onerror: function(error) { logger.log(&#34;\u83b7\u53d6\u90ae\u4ef6\u5217\u8868\u5931\u8d25: &#34; + error, &#39;error&#39;); resolve(null); } }); }); } \/\/ \u83b7\u53d6\u9a8c\u8bc1\u7801\uff08\u5e26\u91cd\u8bd5\u673a\u5236\uff09 async function getVerificationCode(maxRetries = 5, retryInterval = 3000) { for (let attempt = 0; attempt &lt; maxRetries; attempt++) { logger.log(`\u5c1d\u8bd5\u83b7\u53d6\u9a8c\u8bc1\u7801 (\u7b2c ${attempt + 1}\/${maxRetries} \u6b21)...`); try { const code = await getLatestMailCode(); if (code) { logger.log(&#34;\u6210\u529f\u83b7\u53d6\u9a8c\u8bc1\u7801: &#34; + code, &#39;success&#39;); return code; } if (attempt &lt; maxRetries - 1) { logger.log(`\u672a\u83b7\u53d6\u5230\u9a8c\u8bc1\u7801\uff0c${retryInterval\/1000}\u79d2\u540e\u91cd\u8bd5...`, &#39;warning&#39;); await new Promise(resolve =&gt; setTimeout(resolve, retryInterval)); } } catch (error) { logger.log(&#34;\u83b7\u53d6\u9a8c\u8bc1\u7801\u51fa\u9519: &#34; + error, &#39;error&#39;); if (attempt &lt; maxRetries - 1) { await new Promise(resolve =&gt; setTimeout(resolve, retryInterval)); } } } throw new Error(`\u7ecf\u8fc7 ${maxRetries} \u6b21\u5c1d\u8bd5\u540e\u4ecd\u672a\u83b7\u53d6\u5230\u9a8c\u8bc1\u7801\u3002`); } \/\/ \u81ea\u52a8\u586b\u5199\u90ae\u7bb1\u5e76\u63d0\u4ea4 async function fillEmail() { const email = generateEmail(); logger.log(&#39;\u4f7f\u7528\u90ae\u7bb1: &#39; + email); const emailInput = await waitForElement(&#39;input[name=&#34;username&#34;]&#39;); if (!emailInput) { logger.log(&#39;\u672a\u627e\u5230\u90ae\u7bb1\u8f93\u5165\u6846&#39;, &#39;error&#39;); return false; } logger.log(&#39;\u627e\u5230\u90ae\u7bb1\u8f93\u5165\u6846\uff0c\u5f00\u59cb\u586b\u5199&#39;); \/\/ \u586b\u5199\u90ae\u7bb1 emailInput.value = email; emailInput.dispatchEvent(new Event(&#39;input&#39;, { bubbles: true })); \/\/ \u70b9\u51fb\u7ee7\u7eed\u6309\u94ae const continueBtn = await waitForElement(&#39;button[type=&#34;submit&#34;]&#39;); if (!continueBtn) { logger.log(&#39;\u672a\u627e\u5230\u7ee7\u7eed\u6309\u94ae&#39;, &#39;error&#39;); return false; } continueBtn.click(); return true; } \/\/ \u586b\u5199\u9a8c\u8bc1\u7801 async function fillVerificationCode() { const code = await getVerificationCode(); if (!code) { logger.log(&#39;\u672a\u80fd\u83b7\u53d6\u9a8c\u8bc1\u7801&#39;, &#39;error&#39;); return false; } const codeInput = await waitForElement(&#39;input[name=&#34;code&#34;]&#39;); if (!codeInput) { logger.log(&#39;\u672a\u627e\u5230\u9a8c\u8bc1\u7801\u8f93\u5165\u6846&#39;, &#39;error&#39;); return false; } \/\/ \u586b\u5199\u9a8c\u8bc1\u7801 codeInput.value = code; codeInput.dispatchEvent(new Event(&#39;input&#39;, { bubbles: true })); \/\/ \u70b9\u51fb\u7ee7\u7eed\u6309\u94ae const continueBtn = await waitForElement(&#39;button[type=&#34;submit&#34;]&#39;); if (!continueBtn) { logger.log(&#39;\u672a\u627e\u5230\u7ee7\u7eed\u6309\u94ae&#39;, &#39;error&#39;); return false; } continueBtn.click(); return true; } \/\/ \u540c\u610f\u670d\u52a1\u6761\u6b3e\u5e76\u5b8c\u6210\u6ce8\u518c async function completeRegistration() { const checkbox = await waitForElement(&#39;input[type=&#34;checkbox&#34;]&#39;); if (checkbox) { if (!checkbox.checked) { checkbox.click(); logger.log(&#39;\u5df2\u81ea\u52a8\u52fe\u9009\u670d\u52a1\u6761\u6b3e\u540c\u610f\u6846&#39;, &#39;success&#39;); } } else { logger.log(&#39;\u672a\u627e\u5230\u670d\u52a1\u6761\u6b3e\u590d\u9009\u6846&#39;, &#39;warning&#39;); } const signupBtn = await waitForElement(&#39;button:contains(&#34;Sign up&#34;)&#39;); if (!signupBtn) { logger.log(&#39;\u672a\u627e\u5230\u6ce8\u518c\u6309\u94ae&#39;, &#39;error&#39;); return false; } signupBtn.click(); logger.log(&#39;\u70b9\u51fb\u6ce8\u518c\u6309\u94ae&#39;, &#39;success&#39;); return true; } \/\/ \u4e3b\u51fd\u6570 async function main() { \/\/ \u53ea\u5728\u6ce8\u518c\u76f8\u5173\u9875\u9762\u8fd0\u884c if (!window.location.href.includes(&#39;login.augmentcode.com&#39;) &amp;&amp; !window.location.href.includes(&#39;auth.augmentcode.com&#39;)) { logger.log(&#39;\u5f53\u524d\u9875\u9762\u4e0d\u662f\u6ce8\u518c\u9875\u9762\uff0c\u811a\u672c\u4e0d\u6267\u884c&#39;, &#39;info&#39;); return; } logger.log(&#39;===== \u5f00\u59cb\u81ea\u52a8\u6ce8\u518c\u6d41\u7a0b =====&#39;, &#39;info&#39;); \/\/ \u68c0\u67e5\u5f53\u524d\u9875\u9762\u72b6\u6001 const emailInput = document.querySelector(&#39;input[name=&#34;username&#34;]&#39;); const codeInput = document.querySelector(&#39;input[name=&#34;code&#34;]&#39;); const termsCheckbox = document.querySelector(&#39;#terms-of-service-checkbox&#39;); if (emailInput) { logger.log(&#39;\u68c0\u6d4b\u5230\u90ae\u7bb1\u8f93\u5165\u9875\u9762&#39;); \/\/ \u663e\u793a\u6ce8\u518c\u6309\u94ae const registerButton = logger.showRegisterButton(); if (registerButton) { registerButton.addEventListener(&#39;click&#39;, async () =&gt; { try { registerButton.disabled = true; registerButton.textContent = &#39;\u5904\u7406\u4e2d...&#39;; registerButton.style.backgroundColor = COLORS.warning; if (await fillEmail()) { logger.log(&#39;\u90ae\u7bb1\u586b\u5199\u5b8c\u6210\uff0c\u8bf7\u7b49\u5f85\u9875\u9762\u8df3\u8f6c\u5230\u9a8c\u8bc1\u7801\u8f93\u5165...&#39;, &#39;success&#39;); } } catch (error) { logger.log(&#39;\u586b\u5199\u90ae\u7bb1\u8fc7\u7a0b\u51fa\u9519: &#39; + error, &#39;error&#39;); } finally { registerButton.disabled = false; registerButton.textContent = &#39;\u5f00\u59cb\u6ce8\u518c&#39;; registerButton.style.backgroundColor = COLORS.secondary; } }); } } else if (codeInput) { logger.log(&#39;\u68c0\u6d4b\u5230\u9a8c\u8bc1\u7801\u8f93\u5165\u9875\u9762\uff0c\u81ea\u52a8\u6267\u884c\u9a8c\u8bc1\u7801\u586b\u5199...&#39;); try { if (await fillVerificationCode()) { logger.log(&#39;\u9a8c\u8bc1\u7801\u586b\u5199\u5b8c\u6210\uff0c\u6b63\u5728\u5b8c\u6210\u6ce8\u518c...&#39;, &#39;success&#39;); await new Promise(resolve =&gt; setTimeout(resolve, 2000)); if (await completeRegistration()) { logger.log(&#39;===== \u6ce8\u518c\u6d41\u7a0b\u5b8c\u6210\uff01 =====&#39;, &#39;success&#39;); } } } catch (error) { logger.log(&#39;\u586b\u5199\u9a8c\u8bc1\u7801\u8fc7\u7a0b\u51fa\u9519: &#39; + error, &#39;error&#39;); } } else if (termsCheckbox) { logger.log(&#39;\u68c0\u6d4b\u5230\u670d\u52a1\u6761\u6b3e\u9875\u9762\uff0c\u81ea\u52a8\u52fe\u9009\u540c\u610f\u6846...&#39;); try { if (!termsCheckbox.checked) { termsCheckbox.click(); logger.log(&#39;\u5df2\u81ea\u52a8\u52fe\u9009\u670d\u52a1\u6761\u6b3e\u540c\u610f\u6846&#39;, &#39;success&#39;); } \/\/ \u67e5\u627e\u5e76\u70b9\u51fb\u6ce8\u518c\u6309\u94ae const signupBtn = await waitForElement(&#39;button[type=&#34;button&#34;]&#39;); if (signupBtn) { signupBtn.click(); logger.log(&#39;\u70b9\u51fb\u6ce8\u518c\u6309\u94ae\u5b8c\u6210&#39;, &#39;success&#39;); } } catch (error) { logger.log(&#39;\u52fe\u9009\u670d\u52a1\u6761\u6b3e\u8fc7\u7a0b\u51fa\u9519: &#39; + error, &#39;error&#39;); } } else { logger.log(&#39;\u65e0\u6cd5\u8bc6\u522b\u5f53\u524d\u9875\u9762\u72b6\u6001&#39;, &#39;warning&#39;); } } \/\/ \u542f\u52a8\u811a\u672c main().catch(error =&gt; logger.log(&#39;\u811a\u672c\u6267\u884c\u51fa\u9519: &#39; + error, &#39;error&#39;)); })(); ","permalink":"https:\/\/my.rongyiapi.com\/posts\/augmentcode%E8%87%AA%E5%8A%A8%E6%B3%A8%E5%86%8C\/","summary":"<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\">  1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\">  2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\">  3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\">  4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\">  5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a class=\"lnlinks\" href=\"#hl-0-6\">  6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a class=\"lnlinks\" href=\"#hl-0-7\">  7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a class=\"lnlinks\" href=\"#hl-0-8\">  8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a class=\"lnlinks\" href=\"#hl-0-9\">  9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a class=\"lnlinks\" href=\"#hl-0-10\"> 10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a class=\"lnlinks\" href=\"#hl-0-11\"> 11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a class=\"lnlinks\" href=\"#hl-0-12\"> 12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-13\"><a class=\"lnlinks\" href=\"#hl-0-13\"> 13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-14\"><a class=\"lnlinks\" href=\"#hl-0-14\"> 14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-15\"><a class=\"lnlinks\" href=\"#hl-0-15\"> 15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-16\"><a class=\"lnlinks\" href=\"#hl-0-16\"> 16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-17\"><a class=\"lnlinks\" href=\"#hl-0-17\"> 17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-18\"><a class=\"lnlinks\" href=\"#hl-0-18\"> 18<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-19\"><a class=\"lnlinks\" href=\"#hl-0-19\"> 19<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-20\"><a class=\"lnlinks\" href=\"#hl-0-20\"> 20<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-21\"><a class=\"lnlinks\" href=\"#hl-0-21\"> 21<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-22\"><a class=\"lnlinks\" href=\"#hl-0-22\"> 22<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-23\"><a class=\"lnlinks\" href=\"#hl-0-23\"> 23<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-24\"><a class=\"lnlinks\" href=\"#hl-0-24\"> 24<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-25\"><a class=\"lnlinks\" href=\"#hl-0-25\"> 25<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-26\"><a class=\"lnlinks\" href=\"#hl-0-26\"> 26<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-27\"><a class=\"lnlinks\" href=\"#hl-0-27\"> 27<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-28\"><a class=\"lnlinks\" href=\"#hl-0-28\"> 28<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-29\"><a class=\"lnlinks\" href=\"#hl-0-29\"> 29<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-30\"><a class=\"lnlinks\" href=\"#hl-0-30\"> 30<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-31\"><a class=\"lnlinks\" href=\"#hl-0-31\"> 31<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-32\"><a class=\"lnlinks\" href=\"#hl-0-32\"> 32<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-33\"><a class=\"lnlinks\" href=\"#hl-0-33\"> 33<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-34\"><a class=\"lnlinks\" href=\"#hl-0-34\"> 34<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-35\"><a class=\"lnlinks\" href=\"#hl-0-35\"> 35<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-36\"><a class=\"lnlinks\" href=\"#hl-0-36\"> 36<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-37\"><a class=\"lnlinks\" href=\"#hl-0-37\"> 37<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-38\"><a class=\"lnlinks\" href=\"#hl-0-38\"> 38<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-39\"><a class=\"lnlinks\" href=\"#hl-0-39\"> 39<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-40\"><a class=\"lnlinks\" href=\"#hl-0-40\"> 40<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-41\"><a class=\"lnlinks\" href=\"#hl-0-41\"> 41<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-42\"><a class=\"lnlinks\" href=\"#hl-0-42\"> 42<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-43\"><a class=\"lnlinks\" href=\"#hl-0-43\"> 43<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-44\"><a class=\"lnlinks\" href=\"#hl-0-44\"> 44<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-45\"><a class=\"lnlinks\" href=\"#hl-0-45\"> 45<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-46\"><a class=\"lnlinks\" href=\"#hl-0-46\"> 46<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-47\"><a class=\"lnlinks\" href=\"#hl-0-47\"> 47<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-48\"><a class=\"lnlinks\" href=\"#hl-0-48\"> 48<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-49\"><a class=\"lnlinks\" href=\"#hl-0-49\"> 49<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-50\"><a class=\"lnlinks\" href=\"#hl-0-50\"> 50<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-51\"><a class=\"lnlinks\" href=\"#hl-0-51\"> 51<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-52\"><a class=\"lnlinks\" href=\"#hl-0-52\"> 52<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-53\"><a class=\"lnlinks\" href=\"#hl-0-53\"> 53<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-54\"><a class=\"lnlinks\" href=\"#hl-0-54\"> 54<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-55\"><a class=\"lnlinks\" href=\"#hl-0-55\"> 55<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-56\"><a class=\"lnlinks\" href=\"#hl-0-56\"> 56<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-57\"><a class=\"lnlinks\" href=\"#hl-0-57\"> 57<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-58\"><a class=\"lnlinks\" href=\"#hl-0-58\"> 58<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-59\"><a class=\"lnlinks\" href=\"#hl-0-59\"> 59<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-60\"><a class=\"lnlinks\" href=\"#hl-0-60\"> 60<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-61\"><a class=\"lnlinks\" href=\"#hl-0-61\"> 61<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-62\"><a class=\"lnlinks\" href=\"#hl-0-62\"> 62<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-63\"><a class=\"lnlinks\" href=\"#hl-0-63\"> 63<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-64\"><a class=\"lnlinks\" href=\"#hl-0-64\"> 64<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-65\"><a class=\"lnlinks\" href=\"#hl-0-65\"> 65<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-66\"><a class=\"lnlinks\" href=\"#hl-0-66\"> 66<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-67\"><a class=\"lnlinks\" href=\"#hl-0-67\"> 67<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-68\"><a class=\"lnlinks\" href=\"#hl-0-68\"> 68<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-69\"><a class=\"lnlinks\" href=\"#hl-0-69\"> 69<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-70\"><a class=\"lnlinks\" href=\"#hl-0-70\"> 70<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-71\"><a class=\"lnlinks\" href=\"#hl-0-71\"> 71<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-72\"><a class=\"lnlinks\" href=\"#hl-0-72\"> 72<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-73\"><a class=\"lnlinks\" href=\"#hl-0-73\"> 73<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-74\"><a class=\"lnlinks\" href=\"#hl-0-74\"> 74<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-75\"><a class=\"lnlinks\" href=\"#hl-0-75\"> 75<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-76\"><a class=\"lnlinks\" href=\"#hl-0-76\"> 76<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-77\"><a class=\"lnlinks\" href=\"#hl-0-77\"> 77<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-78\"><a class=\"lnlinks\" href=\"#hl-0-78\"> 78<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-79\"><a class=\"lnlinks\" href=\"#hl-0-79\"> 79<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-80\"><a class=\"lnlinks\" href=\"#hl-0-80\"> 80<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-81\"><a class=\"lnlinks\" href=\"#hl-0-81\"> 81<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-82\"><a class=\"lnlinks\" href=\"#hl-0-82\"> 82<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-83\"><a class=\"lnlinks\" href=\"#hl-0-83\"> 83<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-84\"><a class=\"lnlinks\" href=\"#hl-0-84\"> 84<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-85\"><a class=\"lnlinks\" href=\"#hl-0-85\"> 85<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-86\"><a class=\"lnlinks\" href=\"#hl-0-86\"> 86<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-87\"><a class=\"lnlinks\" href=\"#hl-0-87\"> 87<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-88\"><a class=\"lnlinks\" href=\"#hl-0-88\"> 88<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-89\"><a class=\"lnlinks\" href=\"#hl-0-89\"> 89<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-90\"><a class=\"lnlinks\" href=\"#hl-0-90\"> 90<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-91\"><a class=\"lnlinks\" href=\"#hl-0-91\"> 91<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-92\"><a class=\"lnlinks\" href=\"#hl-0-92\"> 92<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-93\"><a class=\"lnlinks\" href=\"#hl-0-93\"> 93<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-94\"><a class=\"lnlinks\" href=\"#hl-0-94\"> 94<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-95\"><a class=\"lnlinks\" href=\"#hl-0-95\"> 95<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-96\"><a class=\"lnlinks\" href=\"#hl-0-96\"> 96<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-97\"><a class=\"lnlinks\" href=\"#hl-0-97\"> 97<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-98\"><a class=\"lnlinks\" href=\"#hl-0-98\"> 98<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-99\"><a class=\"lnlinks\" href=\"#hl-0-99\"> 99<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-100\"><a class=\"lnlinks\" href=\"#hl-0-100\">100<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-101\"><a class=\"lnlinks\" href=\"#hl-0-101\">101<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-102\"><a class=\"lnlinks\" href=\"#hl-0-102\">102<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-103\"><a class=\"lnlinks\" href=\"#hl-0-103\">103<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-104\"><a class=\"lnlinks\" href=\"#hl-0-104\">104<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-105\"><a class=\"lnlinks\" href=\"#hl-0-105\">105<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-106\"><a class=\"lnlinks\" href=\"#hl-0-106\">106<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-107\"><a class=\"lnlinks\" href=\"#hl-0-107\">107<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-108\"><a class=\"lnlinks\" href=\"#hl-0-108\">108<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-109\"><a class=\"lnlinks\" href=\"#hl-0-109\">109<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-110\"><a class=\"lnlinks\" href=\"#hl-0-110\">110<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-111\"><a class=\"lnlinks\" href=\"#hl-0-111\">111<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-112\"><a class=\"lnlinks\" href=\"#hl-0-112\">112<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-113\"><a class=\"lnlinks\" href=\"#hl-0-113\">113<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-114\"><a class=\"lnlinks\" href=\"#hl-0-114\">114<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-115\"><a class=\"lnlinks\" href=\"#hl-0-115\">115<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-116\"><a class=\"lnlinks\" href=\"#hl-0-116\">116<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-117\"><a class=\"lnlinks\" href=\"#hl-0-117\">117<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-118\"><a class=\"lnlinks\" href=\"#hl-0-118\">118<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-119\"><a class=\"lnlinks\" href=\"#hl-0-119\">119<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-120\"><a class=\"lnlinks\" href=\"#hl-0-120\">120<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-121\"><a class=\"lnlinks\" href=\"#hl-0-121\">121<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-122\"><a class=\"lnlinks\" href=\"#hl-0-122\">122<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-123\"><a class=\"lnlinks\" href=\"#hl-0-123\">123<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-124\"><a class=\"lnlinks\" href=\"#hl-0-124\">124<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-125\"><a class=\"lnlinks\" href=\"#hl-0-125\">125<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-126\"><a class=\"lnlinks\" href=\"#hl-0-126\">126<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-127\"><a class=\"lnlinks\" href=\"#hl-0-127\">127<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-128\"><a class=\"lnlinks\" href=\"#hl-0-128\">128<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-129\"><a class=\"lnlinks\" href=\"#hl-0-129\">129<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-130\"><a class=\"lnlinks\" href=\"#hl-0-130\">130<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-131\"><a class=\"lnlinks\" href=\"#hl-0-131\">131<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-132\"><a class=\"lnlinks\" href=\"#hl-0-132\">132<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-133\"><a class=\"lnlinks\" href=\"#hl-0-133\">133<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-134\"><a class=\"lnlinks\" href=\"#hl-0-134\">134<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-135\"><a class=\"lnlinks\" href=\"#hl-0-135\">135<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-136\"><a class=\"lnlinks\" href=\"#hl-0-136\">136<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-137\"><a class=\"lnlinks\" href=\"#hl-0-137\">137<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-138\"><a class=\"lnlinks\" href=\"#hl-0-138\">138<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-139\"><a class=\"lnlinks\" href=\"#hl-0-139\">139<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-140\"><a class=\"lnlinks\" href=\"#hl-0-140\">140<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-141\"><a class=\"lnlinks\" href=\"#hl-0-141\">141<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-142\"><a class=\"lnlinks\" href=\"#hl-0-142\">142<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-143\"><a class=\"lnlinks\" href=\"#hl-0-143\">143<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-144\"><a class=\"lnlinks\" href=\"#hl-0-144\">144<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-145\"><a class=\"lnlinks\" href=\"#hl-0-145\">145<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-146\"><a class=\"lnlinks\" href=\"#hl-0-146\">146<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-147\"><a class=\"lnlinks\" href=\"#hl-0-147\">147<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-148\"><a class=\"lnlinks\" href=\"#hl-0-148\">148<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-149\"><a class=\"lnlinks\" href=\"#hl-0-149\">149<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-150\"><a class=\"lnlinks\" href=\"#hl-0-150\">150<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-151\"><a class=\"lnlinks\" href=\"#hl-0-151\">151<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-152\"><a class=\"lnlinks\" href=\"#hl-0-152\">152<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-153\"><a class=\"lnlinks\" href=\"#hl-0-153\">153<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-154\"><a class=\"lnlinks\" href=\"#hl-0-154\">154<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-155\"><a class=\"lnlinks\" href=\"#hl-0-155\">155<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-156\"><a class=\"lnlinks\" href=\"#hl-0-156\">156<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-157\"><a class=\"lnlinks\" href=\"#hl-0-157\">157<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-158\"><a class=\"lnlinks\" href=\"#hl-0-158\">158<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-159\"><a class=\"lnlinks\" href=\"#hl-0-159\">159<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-160\"><a class=\"lnlinks\" href=\"#hl-0-160\">160<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-161\"><a class=\"lnlinks\" href=\"#hl-0-161\">161<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-162\"><a class=\"lnlinks\" href=\"#hl-0-162\">162<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-163\"><a class=\"lnlinks\" href=\"#hl-0-163\">163<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-164\"><a class=\"lnlinks\" href=\"#hl-0-164\">164<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-165\"><a class=\"lnlinks\" href=\"#hl-0-165\">165<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-166\"><a class=\"lnlinks\" href=\"#hl-0-166\">166<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-167\"><a class=\"lnlinks\" href=\"#hl-0-167\">167<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-168\"><a class=\"lnlinks\" href=\"#hl-0-168\">168<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-169\"><a class=\"lnlinks\" href=\"#hl-0-169\">169<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-170\"><a class=\"lnlinks\" href=\"#hl-0-170\">170<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-171\"><a class=\"lnlinks\" href=\"#hl-0-171\">171<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-172\"><a class=\"lnlinks\" href=\"#hl-0-172\">172<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-173\"><a class=\"lnlinks\" href=\"#hl-0-173\">173<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-174\"><a class=\"lnlinks\" href=\"#hl-0-174\">174<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-175\"><a class=\"lnlinks\" href=\"#hl-0-175\">175<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-176\"><a class=\"lnlinks\" href=\"#hl-0-176\">176<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-177\"><a class=\"lnlinks\" href=\"#hl-0-177\">177<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-178\"><a class=\"lnlinks\" href=\"#hl-0-178\">178<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-179\"><a class=\"lnlinks\" href=\"#hl-0-179\">179<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-180\"><a class=\"lnlinks\" href=\"#hl-0-180\">180<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-181\"><a class=\"lnlinks\" href=\"#hl-0-181\">181<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-182\"><a class=\"lnlinks\" href=\"#hl-0-182\">182<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-183\"><a class=\"lnlinks\" href=\"#hl-0-183\">183<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-184\"><a class=\"lnlinks\" href=\"#hl-0-184\">184<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-185\"><a class=\"lnlinks\" href=\"#hl-0-185\">185<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-186\"><a class=\"lnlinks\" href=\"#hl-0-186\">186<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-187\"><a class=\"lnlinks\" href=\"#hl-0-187\">187<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-188\"><a class=\"lnlinks\" href=\"#hl-0-188\">188<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-189\"><a class=\"lnlinks\" href=\"#hl-0-189\">189<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-190\"><a class=\"lnlinks\" href=\"#hl-0-190\">190<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-191\"><a class=\"lnlinks\" href=\"#hl-0-191\">191<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-192\"><a class=\"lnlinks\" href=\"#hl-0-192\">192<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-193\"><a class=\"lnlinks\" href=\"#hl-0-193\">193<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-194\"><a class=\"lnlinks\" href=\"#hl-0-194\">194<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-195\"><a class=\"lnlinks\" href=\"#hl-0-195\">195<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-196\"><a class=\"lnlinks\" href=\"#hl-0-196\">196<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-197\"><a class=\"lnlinks\" href=\"#hl-0-197\">197<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-198\"><a class=\"lnlinks\" href=\"#hl-0-198\">198<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-199\"><a class=\"lnlinks\" href=\"#hl-0-199\">199<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-200\"><a class=\"lnlinks\" href=\"#hl-0-200\">200<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-201\"><a class=\"lnlinks\" href=\"#hl-0-201\">201<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-202\"><a class=\"lnlinks\" href=\"#hl-0-202\">202<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-203\"><a class=\"lnlinks\" href=\"#hl-0-203\">203<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-204\"><a class=\"lnlinks\" href=\"#hl-0-204\">204<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-205\"><a class=\"lnlinks\" href=\"#hl-0-205\">205<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-206\"><a class=\"lnlinks\" href=\"#hl-0-206\">206<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-207\"><a class=\"lnlinks\" href=\"#hl-0-207\">207<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-208\"><a class=\"lnlinks\" href=\"#hl-0-208\">208<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-209\"><a class=\"lnlinks\" href=\"#hl-0-209\">209<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-210\"><a class=\"lnlinks\" href=\"#hl-0-210\">210<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-211\"><a class=\"lnlinks\" href=\"#hl-0-211\">211<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-212\"><a class=\"lnlinks\" href=\"#hl-0-212\">212<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-213\"><a class=\"lnlinks\" href=\"#hl-0-213\">213<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-214\"><a class=\"lnlinks\" href=\"#hl-0-214\">214<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-215\"><a class=\"lnlinks\" href=\"#hl-0-215\">215<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-216\"><a class=\"lnlinks\" href=\"#hl-0-216\">216<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-217\"><a class=\"lnlinks\" href=\"#hl-0-217\">217<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-218\"><a class=\"lnlinks\" href=\"#hl-0-218\">218<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-219\"><a class=\"lnlinks\" href=\"#hl-0-219\">219<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-220\"><a class=\"lnlinks\" href=\"#hl-0-220\">220<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-221\"><a class=\"lnlinks\" href=\"#hl-0-221\">221<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-222\"><a class=\"lnlinks\" href=\"#hl-0-222\">222<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-223\"><a class=\"lnlinks\" href=\"#hl-0-223\">223<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-224\"><a class=\"lnlinks\" href=\"#hl-0-224\">224<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-225\"><a class=\"lnlinks\" href=\"#hl-0-225\">225<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-226\"><a class=\"lnlinks\" href=\"#hl-0-226\">226<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-227\"><a class=\"lnlinks\" href=\"#hl-0-227\">227<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-228\"><a class=\"lnlinks\" href=\"#hl-0-228\">228<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-229\"><a class=\"lnlinks\" href=\"#hl-0-229\">229<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-230\"><a class=\"lnlinks\" href=\"#hl-0-230\">230<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-231\"><a class=\"lnlinks\" href=\"#hl-0-231\">231<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-232\"><a class=\"lnlinks\" href=\"#hl-0-232\">232<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-233\"><a class=\"lnlinks\" href=\"#hl-0-233\">233<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-234\"><a class=\"lnlinks\" href=\"#hl-0-234\">234<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-235\"><a class=\"lnlinks\" href=\"#hl-0-235\">235<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-236\"><a class=\"lnlinks\" href=\"#hl-0-236\">236<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-237\"><a class=\"lnlinks\" href=\"#hl-0-237\">237<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-238\"><a class=\"lnlinks\" href=\"#hl-0-238\">238<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-239\"><a class=\"lnlinks\" href=\"#hl-0-239\">239<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-240\"><a class=\"lnlinks\" href=\"#hl-0-240\">240<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-241\"><a class=\"lnlinks\" href=\"#hl-0-241\">241<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-242\"><a class=\"lnlinks\" href=\"#hl-0-242\">242<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-243\"><a class=\"lnlinks\" href=\"#hl-0-243\">243<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-244\"><a class=\"lnlinks\" href=\"#hl-0-244\">244<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-245\"><a class=\"lnlinks\" href=\"#hl-0-245\">245<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-246\"><a class=\"lnlinks\" href=\"#hl-0-246\">246<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-247\"><a class=\"lnlinks\" href=\"#hl-0-247\">247<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-248\"><a class=\"lnlinks\" href=\"#hl-0-248\">248<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-249\"><a class=\"lnlinks\" href=\"#hl-0-249\">249<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-250\"><a class=\"lnlinks\" href=\"#hl-0-250\">250<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-251\"><a class=\"lnlinks\" href=\"#hl-0-251\">251<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-252\"><a class=\"lnlinks\" href=\"#hl-0-252\">252<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-253\"><a class=\"lnlinks\" href=\"#hl-0-253\">253<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-254\"><a class=\"lnlinks\" href=\"#hl-0-254\">254<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-255\"><a class=\"lnlinks\" href=\"#hl-0-255\">255<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-256\"><a class=\"lnlinks\" href=\"#hl-0-256\">256<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-257\"><a class=\"lnlinks\" href=\"#hl-0-257\">257<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-258\"><a class=\"lnlinks\" href=\"#hl-0-258\">258<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-259\"><a class=\"lnlinks\" href=\"#hl-0-259\">259<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-260\"><a class=\"lnlinks\" href=\"#hl-0-260\">260<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-261\"><a class=\"lnlinks\" href=\"#hl-0-261\">261<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-262\"><a class=\"lnlinks\" href=\"#hl-0-262\">262<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-263\"><a class=\"lnlinks\" href=\"#hl-0-263\">263<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-264\"><a class=\"lnlinks\" href=\"#hl-0-264\">264<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-265\"><a class=\"lnlinks\" href=\"#hl-0-265\">265<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-266\"><a class=\"lnlinks\" href=\"#hl-0-266\">266<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-267\"><a class=\"lnlinks\" href=\"#hl-0-267\">267<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-268\"><a class=\"lnlinks\" href=\"#hl-0-268\">268<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-269\"><a class=\"lnlinks\" href=\"#hl-0-269\">269<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-270\"><a class=\"lnlinks\" href=\"#hl-0-270\">270<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-271\"><a class=\"lnlinks\" href=\"#hl-0-271\">271<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-272\"><a class=\"lnlinks\" href=\"#hl-0-272\">272<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-273\"><a class=\"lnlinks\" href=\"#hl-0-273\">273<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-274\"><a class=\"lnlinks\" href=\"#hl-0-274\">274<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-275\"><a class=\"lnlinks\" href=\"#hl-0-275\">275<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-276\"><a class=\"lnlinks\" href=\"#hl-0-276\">276<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-277\"><a class=\"lnlinks\" href=\"#hl-0-277\">277<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-278\"><a class=\"lnlinks\" href=\"#hl-0-278\">278<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-279\"><a class=\"lnlinks\" href=\"#hl-0-279\">279<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-280\"><a class=\"lnlinks\" href=\"#hl-0-280\">280<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-281\"><a class=\"lnlinks\" href=\"#hl-0-281\">281<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-282\"><a class=\"lnlinks\" href=\"#hl-0-282\">282<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-283\"><a class=\"lnlinks\" href=\"#hl-0-283\">283<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-284\"><a class=\"lnlinks\" href=\"#hl-0-284\">284<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-285\"><a class=\"lnlinks\" href=\"#hl-0-285\">285<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-286\"><a class=\"lnlinks\" href=\"#hl-0-286\">286<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-287\"><a class=\"lnlinks\" href=\"#hl-0-287\">287<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-288\"><a class=\"lnlinks\" href=\"#hl-0-288\">288<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-289\"><a class=\"lnlinks\" href=\"#hl-0-289\">289<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-290\"><a class=\"lnlinks\" href=\"#hl-0-290\">290<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-291\"><a class=\"lnlinks\" href=\"#hl-0-291\">291<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-292\"><a class=\"lnlinks\" href=\"#hl-0-292\">292<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-293\"><a class=\"lnlinks\" href=\"#hl-0-293\">293<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-294\"><a class=\"lnlinks\" href=\"#hl-0-294\">294<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-295\"><a class=\"lnlinks\" href=\"#hl-0-295\">295<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-296\"><a class=\"lnlinks\" href=\"#hl-0-296\">296<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-297\"><a class=\"lnlinks\" href=\"#hl-0-297\">297<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-298\"><a class=\"lnlinks\" href=\"#hl-0-298\">298<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-299\"><a class=\"lnlinks\" href=\"#hl-0-299\">299<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-300\"><a class=\"lnlinks\" href=\"#hl-0-300\">300<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-301\"><a class=\"lnlinks\" href=\"#hl-0-301\">301<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-302\"><a class=\"lnlinks\" href=\"#hl-0-302\">302<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-303\"><a class=\"lnlinks\" href=\"#hl-0-303\">303<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-304\"><a class=\"lnlinks\" href=\"#hl-0-304\">304<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-305\"><a class=\"lnlinks\" href=\"#hl-0-305\">305<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-306\"><a class=\"lnlinks\" href=\"#hl-0-306\">306<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-307\"><a class=\"lnlinks\" href=\"#hl-0-307\">307<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-308\"><a class=\"lnlinks\" href=\"#hl-0-308\">308<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-309\"><a class=\"lnlinks\" href=\"#hl-0-309\">309<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-310\"><a class=\"lnlinks\" href=\"#hl-0-310\">310<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-311\"><a class=\"lnlinks\" href=\"#hl-0-311\">311<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-312\"><a class=\"lnlinks\" href=\"#hl-0-312\">312<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-313\"><a class=\"lnlinks\" href=\"#hl-0-313\">313<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-314\"><a class=\"lnlinks\" href=\"#hl-0-314\">314<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-315\"><a class=\"lnlinks\" href=\"#hl-0-315\">315<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-316\"><a class=\"lnlinks\" href=\"#hl-0-316\">316<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-317\"><a class=\"lnlinks\" href=\"#hl-0-317\">317<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-318\"><a class=\"lnlinks\" href=\"#hl-0-318\">318<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-319\"><a class=\"lnlinks\" href=\"#hl-0-319\">319<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-320\"><a class=\"lnlinks\" href=\"#hl-0-320\">320<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-321\"><a class=\"lnlinks\" href=\"#hl-0-321\">321<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-322\"><a class=\"lnlinks\" href=\"#hl-0-322\">322<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-323\"><a class=\"lnlinks\" href=\"#hl-0-323\">323<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-324\"><a class=\"lnlinks\" href=\"#hl-0-324\">324<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-325\"><a class=\"lnlinks\" href=\"#hl-0-325\">325<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-326\"><a class=\"lnlinks\" href=\"#hl-0-326\">326<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-327\"><a class=\"lnlinks\" href=\"#hl-0-327\">327<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-328\"><a class=\"lnlinks\" href=\"#hl-0-328\">328<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-329\"><a class=\"lnlinks\" href=\"#hl-0-329\">329<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-330\"><a class=\"lnlinks\" href=\"#hl-0-330\">330<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-331\"><a class=\"lnlinks\" href=\"#hl-0-331\">331<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-332\"><a class=\"lnlinks\" href=\"#hl-0-332\">332<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-333\"><a class=\"lnlinks\" href=\"#hl-0-333\">333<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-334\"><a class=\"lnlinks\" href=\"#hl-0-334\">334<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-335\"><a class=\"lnlinks\" href=\"#hl-0-335\">335<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-336\"><a class=\"lnlinks\" href=\"#hl-0-336\">336<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-337\"><a class=\"lnlinks\" href=\"#hl-0-337\">337<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-338\"><a class=\"lnlinks\" href=\"#hl-0-338\">338<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-339\"><a class=\"lnlinks\" href=\"#hl-0-339\">339<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-340\"><a class=\"lnlinks\" href=\"#hl-0-340\">340<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-341\"><a class=\"lnlinks\" href=\"#hl-0-341\">341<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-342\"><a class=\"lnlinks\" href=\"#hl-0-342\">342<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-343\"><a class=\"lnlinks\" href=\"#hl-0-343\">343<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-344\"><a class=\"lnlinks\" href=\"#hl-0-344\">344<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-345\"><a class=\"lnlinks\" href=\"#hl-0-345\">345<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-346\"><a class=\"lnlinks\" href=\"#hl-0-346\">346<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-347\"><a class=\"lnlinks\" href=\"#hl-0-347\">347<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-348\"><a class=\"lnlinks\" href=\"#hl-0-348\">348<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-349\"><a class=\"lnlinks\" href=\"#hl-0-349\">349<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-350\"><a class=\"lnlinks\" href=\"#hl-0-350\">350<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-351\"><a class=\"lnlinks\" href=\"#hl-0-351\">351<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-352\"><a class=\"lnlinks\" href=\"#hl-0-352\">352<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-353\"><a class=\"lnlinks\" href=\"#hl-0-353\">353<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-354\"><a class=\"lnlinks\" href=\"#hl-0-354\">354<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-355\"><a class=\"lnlinks\" href=\"#hl-0-355\">355<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-356\"><a class=\"lnlinks\" href=\"#hl-0-356\">356<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-357\"><a class=\"lnlinks\" href=\"#hl-0-357\">357<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-358\"><a class=\"lnlinks\" href=\"#hl-0-358\">358<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-359\"><a class=\"lnlinks\" href=\"#hl-0-359\">359<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-360\"><a class=\"lnlinks\" href=\"#hl-0-360\">360<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-361\"><a class=\"lnlinks\" href=\"#hl-0-361\">361<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-362\"><a class=\"lnlinks\" href=\"#hl-0-362\">362<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-363\"><a class=\"lnlinks\" href=\"#hl-0-363\">363<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-364\"><a class=\"lnlinks\" href=\"#hl-0-364\">364<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-365\"><a class=\"lnlinks\" href=\"#hl-0-365\">365<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-366\"><a class=\"lnlinks\" href=\"#hl-0-366\">366<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-367\"><a class=\"lnlinks\" href=\"#hl-0-367\">367<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-368\"><a class=\"lnlinks\" href=\"#hl-0-368\">368<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-369\"><a class=\"lnlinks\" href=\"#hl-0-369\">369<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-370\"><a class=\"lnlinks\" href=\"#hl-0-370\">370<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-371\"><a class=\"lnlinks\" href=\"#hl-0-371\">371<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-372\"><a class=\"lnlinks\" href=\"#hl-0-372\">372<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-373\"><a class=\"lnlinks\" href=\"#hl-0-373\">373<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-374\"><a class=\"lnlinks\" href=\"#hl-0-374\">374<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-375\"><a class=\"lnlinks\" href=\"#hl-0-375\">375<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-376\"><a class=\"lnlinks\" href=\"#hl-0-376\">376<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-377\"><a class=\"lnlinks\" href=\"#hl-0-377\">377<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-378\"><a class=\"lnlinks\" href=\"#hl-0-378\">378<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-379\"><a class=\"lnlinks\" href=\"#hl-0-379\">379<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-380\"><a class=\"lnlinks\" href=\"#hl-0-380\">380<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-381\"><a class=\"lnlinks\" href=\"#hl-0-381\">381<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-382\"><a class=\"lnlinks\" href=\"#hl-0-382\">382<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-383\"><a class=\"lnlinks\" href=\"#hl-0-383\">383<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-384\"><a class=\"lnlinks\" href=\"#hl-0-384\">384<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-385\"><a class=\"lnlinks\" href=\"#hl-0-385\">385<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-386\"><a class=\"lnlinks\" href=\"#hl-0-386\">386<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-387\"><a class=\"lnlinks\" href=\"#hl-0-387\">387<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-388\"><a class=\"lnlinks\" href=\"#hl-0-388\">388<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-389\"><a class=\"lnlinks\" href=\"#hl-0-389\">389<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-390\"><a class=\"lnlinks\" href=\"#hl-0-390\">390<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-391\"><a class=\"lnlinks\" href=\"#hl-0-391\">391<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-392\"><a class=\"lnlinks\" href=\"#hl-0-392\">392<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-393\"><a class=\"lnlinks\" href=\"#hl-0-393\">393<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-394\"><a class=\"lnlinks\" href=\"#hl-0-394\">394<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-395\"><a class=\"lnlinks\" href=\"#hl-0-395\">395<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-396\"><a class=\"lnlinks\" href=\"#hl-0-396\">396<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-397\"><a class=\"lnlinks\" href=\"#hl-0-397\">397<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-398\"><a class=\"lnlinks\" href=\"#hl-0-398\">398<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-399\"><a class=\"lnlinks\" href=\"#hl-0-399\">399<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-400\"><a class=\"lnlinks\" href=\"#hl-0-400\">400<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-401\"><a class=\"lnlinks\" href=\"#hl-0-401\">401<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-402\"><a class=\"lnlinks\" href=\"#hl-0-402\">402<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-403\"><a class=\"lnlinks\" href=\"#hl-0-403\">403<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-404\"><a class=\"lnlinks\" href=\"#hl-0-404\">404<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-405\"><a class=\"lnlinks\" href=\"#hl-0-405\">405<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-406\"><a class=\"lnlinks\" href=\"#hl-0-406\">406<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-407\"><a class=\"lnlinks\" href=\"#hl-0-407\">407<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-408\"><a class=\"lnlinks\" href=\"#hl-0-408\">408<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-409\"><a class=\"lnlinks\" href=\"#hl-0-409\">409<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-410\"><a class=\"lnlinks\" href=\"#hl-0-410\">410<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-411\"><a class=\"lnlinks\" href=\"#hl-0-411\">411<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-412\"><a class=\"lnlinks\" href=\"#hl-0-412\">412<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-413\"><a class=\"lnlinks\" href=\"#hl-0-413\">413<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-414\"><a class=\"lnlinks\" href=\"#hl-0-414\">414<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-415\"><a class=\"lnlinks\" href=\"#hl-0-415\">415<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-416\"><a class=\"lnlinks\" href=\"#hl-0-416\">416<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-417\"><a class=\"lnlinks\" href=\"#hl-0-417\">417<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-418\"><a class=\"lnlinks\" href=\"#hl-0-418\">418<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-419\"><a class=\"lnlinks\" href=\"#hl-0-419\">419<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-420\"><a class=\"lnlinks\" href=\"#hl-0-420\">420<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-421\"><a class=\"lnlinks\" href=\"#hl-0-421\">421<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-422\"><a class=\"lnlinks\" href=\"#hl-0-422\">422<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-423\"><a class=\"lnlinks\" href=\"#hl-0-423\">423<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-424\"><a class=\"lnlinks\" href=\"#hl-0-424\">424<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-425\"><a class=\"lnlinks\" href=\"#hl-0-425\">425<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-426\"><a class=\"lnlinks\" href=\"#hl-0-426\">426<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-427\"><a class=\"lnlinks\" href=\"#hl-0-427\">427<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-428\"><a class=\"lnlinks\" href=\"#hl-0-428\">428<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-429\"><a class=\"lnlinks\" href=\"#hl-0-429\">429<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-430\"><a class=\"lnlinks\" href=\"#hl-0-430\">430<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-431\"><a class=\"lnlinks\" href=\"#hl-0-431\">431<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-432\"><a class=\"lnlinks\" href=\"#hl-0-432\">432<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-433\"><a class=\"lnlinks\" href=\"#hl-0-433\">433<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-434\"><a class=\"lnlinks\" href=\"#hl-0-434\">434<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-435\"><a class=\"lnlinks\" href=\"#hl-0-435\">435<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-436\"><a class=\"lnlinks\" href=\"#hl-0-436\">436<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-437\"><a class=\"lnlinks\" href=\"#hl-0-437\">437<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-438\"><a class=\"lnlinks\" href=\"#hl-0-438\">438<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-439\"><a class=\"lnlinks\" href=\"#hl-0-439\">439<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-440\"><a class=\"lnlinks\" href=\"#hl-0-440\">440<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-441\"><a class=\"lnlinks\" href=\"#hl-0-441\">441<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-442\"><a class=\"lnlinks\" href=\"#hl-0-442\">442<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-443\"><a class=\"lnlinks\" href=\"#hl-0-443\">443<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-444\"><a class=\"lnlinks\" href=\"#hl-0-444\">444<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-445\"><a class=\"lnlinks\" href=\"#hl-0-445\">445<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-446\"><a class=\"lnlinks\" href=\"#hl-0-446\">446<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-447\"><a class=\"lnlinks\" href=\"#hl-0-447\">447<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-448\"><a class=\"lnlinks\" href=\"#hl-0-448\">448<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-449\"><a class=\"lnlinks\" href=\"#hl-0-449\">449<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-450\"><a class=\"lnlinks\" href=\"#hl-0-450\">450<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-451\"><a class=\"lnlinks\" href=\"#hl-0-451\">451<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-452\"><a class=\"lnlinks\" href=\"#hl-0-452\">452<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-453\"><a class=\"lnlinks\" href=\"#hl-0-453\">453<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-454\"><a class=\"lnlinks\" href=\"#hl-0-454\">454<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-455\"><a class=\"lnlinks\" href=\"#hl-0-455\">455<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-456\"><a class=\"lnlinks\" href=\"#hl-0-456\">456<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-457\"><a class=\"lnlinks\" href=\"#hl-0-457\">457<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-458\"><a class=\"lnlinks\" href=\"#hl-0-458\">458<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-459\"><a class=\"lnlinks\" href=\"#hl-0-459\">459<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-460\"><a class=\"lnlinks\" href=\"#hl-0-460\">460<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-461\"><a class=\"lnlinks\" href=\"#hl-0-461\">461<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-462\"><a class=\"lnlinks\" href=\"#hl-0-462\">462<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-463\"><a class=\"lnlinks\" href=\"#hl-0-463\">463<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-464\"><a class=\"lnlinks\" href=\"#hl-0-464\">464<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-465\"><a class=\"lnlinks\" href=\"#hl-0-465\">465<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-466\"><a class=\"lnlinks\" href=\"#hl-0-466\">466<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-467\"><a class=\"lnlinks\" href=\"#hl-0-467\">467<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-468\"><a class=\"lnlinks\" href=\"#hl-0-468\">468<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-469\"><a class=\"lnlinks\" href=\"#hl-0-469\">469<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-470\"><a class=\"lnlinks\" href=\"#hl-0-470\">470<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-471\"><a class=\"lnlinks\" href=\"#hl-0-471\">471<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-472\"><a class=\"lnlinks\" href=\"#hl-0-472\">472<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-473\"><a class=\"lnlinks\" href=\"#hl-0-473\">473<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-474\"><a class=\"lnlinks\" href=\"#hl-0-474\">474<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-475\"><a class=\"lnlinks\" href=\"#hl-0-475\">475<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-476\"><a class=\"lnlinks\" href=\"#hl-0-476\">476<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-477\"><a class=\"lnlinks\" href=\"#hl-0-477\">477<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-478\"><a class=\"lnlinks\" href=\"#hl-0-478\">478<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-479\"><a class=\"lnlinks\" href=\"#hl-0-479\">479<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-480\"><a class=\"lnlinks\" href=\"#hl-0-480\">480<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-481\"><a class=\"lnlinks\" href=\"#hl-0-481\">481<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-482\"><a class=\"lnlinks\" href=\"#hl-0-482\">482<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-483\"><a class=\"lnlinks\" href=\"#hl-0-483\">483<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-484\"><a class=\"lnlinks\" href=\"#hl-0-484\">484<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-485\"><a class=\"lnlinks\" href=\"#hl-0-485\">485<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-486\"><a class=\"lnlinks\" href=\"#hl-0-486\">486<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-487\"><a class=\"lnlinks\" href=\"#hl-0-487\">487<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-488\"><a class=\"lnlinks\" href=\"#hl-0-488\">488<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-489\"><a class=\"lnlinks\" href=\"#hl-0-489\">489<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-490\"><a class=\"lnlinks\" href=\"#hl-0-490\">490<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-491\"><a class=\"lnlinks\" href=\"#hl-0-491\">491<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-492\"><a class=\"lnlinks\" href=\"#hl-0-492\">492<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-493\"><a class=\"lnlinks\" href=\"#hl-0-493\">493<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-494\"><a class=\"lnlinks\" href=\"#hl-0-494\">494<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-495\"><a class=\"lnlinks\" href=\"#hl-0-495\">495<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-496\"><a class=\"lnlinks\" href=\"#hl-0-496\">496<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-497\"><a class=\"lnlinks\" href=\"#hl-0-497\">497<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-498\"><a class=\"lnlinks\" href=\"#hl-0-498\">498<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-499\"><a class=\"lnlinks\" href=\"#hl-0-499\">499<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-500\"><a class=\"lnlinks\" href=\"#hl-0-500\">500<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-501\"><a class=\"lnlinks\" href=\"#hl-0-501\">501<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-502\"><a class=\"lnlinks\" href=\"#hl-0-502\">502<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-503\"><a class=\"lnlinks\" href=\"#hl-0-503\">503<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-504\"><a class=\"lnlinks\" href=\"#hl-0-504\">504<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-505\"><a class=\"lnlinks\" href=\"#hl-0-505\">505<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-506\"><a class=\"lnlinks\" href=\"#hl-0-506\">506<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-507\"><a class=\"lnlinks\" href=\"#hl-0-507\">507<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-508\"><a class=\"lnlinks\" href=\"#hl-0-508\">508<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-509\"><a class=\"lnlinks\" href=\"#hl-0-509\">509<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-510\"><a class=\"lnlinks\" href=\"#hl-0-510\">510<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-511\"><a class=\"lnlinks\" href=\"#hl-0-511\">511<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-512\"><a class=\"lnlinks\" href=\"#hl-0-512\">512<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-513\"><a class=\"lnlinks\" href=\"#hl-0-513\">513<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-514\"><a class=\"lnlinks\" href=\"#hl-0-514\">514<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-515\"><a class=\"lnlinks\" href=\"#hl-0-515\">515<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-516\"><a class=\"lnlinks\" href=\"#hl-0-516\">516<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-517\"><a class=\"lnlinks\" href=\"#hl-0-517\">517<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-518\"><a class=\"lnlinks\" href=\"#hl-0-518\">518<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-519\"><a class=\"lnlinks\" href=\"#hl-0-519\">519<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-520\"><a class=\"lnlinks\" href=\"#hl-0-520\">520<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-521\"><a class=\"lnlinks\" href=\"#hl-0-521\">521<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-522\"><a class=\"lnlinks\" href=\"#hl-0-522\">522<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-523\"><a class=\"lnlinks\" href=\"#hl-0-523\">523<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-524\"><a class=\"lnlinks\" href=\"#hl-0-524\">524<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-525\"><a class=\"lnlinks\" href=\"#hl-0-525\">525<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-526\"><a class=\"lnlinks\" href=\"#hl-0-526\">526<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-527\"><a class=\"lnlinks\" href=\"#hl-0-527\">527<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-528\"><a class=\"lnlinks\" href=\"#hl-0-528\">528<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-529\"><a class=\"lnlinks\" href=\"#hl-0-529\">529<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-530\"><a class=\"lnlinks\" href=\"#hl-0-530\">530<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-531\"><a class=\"lnlinks\" href=\"#hl-0-531\">531<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-532\"><a class=\"lnlinks\" href=\"#hl-0-532\">532<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-533\"><a class=\"lnlinks\" href=\"#hl-0-533\">533<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-534\"><a class=\"lnlinks\" href=\"#hl-0-534\">534<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-535\"><a class=\"lnlinks\" href=\"#hl-0-535\">535<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-536\"><a class=\"lnlinks\" href=\"#hl-0-536\">536<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-537\"><a class=\"lnlinks\" href=\"#hl-0-537\">537<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-538\"><a class=\"lnlinks\" href=\"#hl-0-538\">538<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-539\"><a class=\"lnlinks\" href=\"#hl-0-539\">539<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-540\"><a class=\"lnlinks\" href=\"#hl-0-540\">540<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-541\"><a class=\"lnlinks\" href=\"#hl-0-541\">541<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-542\"><a class=\"lnlinks\" href=\"#hl-0-542\">542<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-543\"><a class=\"lnlinks\" href=\"#hl-0-543\">543<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-544\"><a class=\"lnlinks\" href=\"#hl-0-544\">544<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-545\"><a class=\"lnlinks\" href=\"#hl-0-545\">545<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-546\"><a class=\"lnlinks\" href=\"#hl-0-546\">546<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-547\"><a class=\"lnlinks\" href=\"#hl-0-547\">547<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-548\"><a class=\"lnlinks\" href=\"#hl-0-548\">548<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-549\"><a class=\"lnlinks\" href=\"#hl-0-549\">549<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-550\"><a class=\"lnlinks\" href=\"#hl-0-550\">550<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-551\"><a class=\"lnlinks\" href=\"#hl-0-551\">551<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-552\"><a class=\"lnlinks\" href=\"#hl-0-552\">552<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-553\"><a class=\"lnlinks\" href=\"#hl-0-553\">553<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-554\"><a class=\"lnlinks\" href=\"#hl-0-554\">554<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-555\"><a class=\"lnlinks\" href=\"#hl-0-555\">555<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-556\"><a class=\"lnlinks\" href=\"#hl-0-556\">556<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-557\"><a class=\"lnlinks\" href=\"#hl-0-557\">557<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-558\"><a class=\"lnlinks\" href=\"#hl-0-558\">558<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-559\"><a class=\"lnlinks\" href=\"#hl-0-559\">559<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-560\"><a class=\"lnlinks\" href=\"#hl-0-560\">560<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-561\"><a class=\"lnlinks\" href=\"#hl-0-561\">561<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-562\"><a class=\"lnlinks\" href=\"#hl-0-562\">562<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-563\"><a class=\"lnlinks\" href=\"#hl-0-563\">563<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-564\"><a class=\"lnlinks\" href=\"#hl-0-564\">564<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-565\"><a class=\"lnlinks\" href=\"#hl-0-565\">565<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-566\"><a class=\"lnlinks\" href=\"#hl-0-566\">566<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-567\"><a class=\"lnlinks\" href=\"#hl-0-567\">567<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-gdscript3\" data-lang=\"gdscript3\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"o\">==<\/span><span class=\"n\">UserScript<\/span><span class=\"o\">==<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">name<\/span>         <span class=\"n\">AugmentCode\u81ea\u52a8\u6ce8\u518c<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">namespace<\/span>    <span class=\"n\">http<\/span><span class=\"p\">:<\/span><span class=\"o\">\/\/<\/span><span class=\"n\">tampermonkey<\/span><span class=\"o\">.<\/span><span class=\"n\">net<\/span><span class=\"o\">\/<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">version<\/span>      <span class=\"mf\">0.1<\/span><span class=\"o\">.<\/span><span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">description<\/span>  <span class=\"err\">\u81ea\u52a8\u5b8c\u6210<\/span><span class=\"n\">AugmentCode\u7684\u6ce8\u518c\u6d41\u7a0b<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">author<\/span>       <span class=\"n\">Your<\/span> <span class=\"n\">name<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">match<\/span>        <span class=\"n\">https<\/span><span class=\"p\">:<\/span><span class=\"o\">\/\/*.<\/span><span class=\"n\">augmentcode<\/span><span class=\"o\">.<\/span><span class=\"n\">com<\/span><span class=\"o\">\/*<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">icon<\/span>         <span class=\"n\">https<\/span><span class=\"p\">:<\/span><span class=\"o\">\/\/<\/span><span class=\"n\">www<\/span><span class=\"o\">.<\/span><span class=\"n\">google<\/span><span class=\"o\">.<\/span><span class=\"n\">com<\/span><span class=\"o\">\/<\/span><span class=\"n\">s2<\/span><span class=\"o\">\/<\/span><span class=\"n\">favicons<\/span><span class=\"err\">?<\/span><span class=\"n\">sz<\/span><span class=\"o\">=<\/span><span class=\"mi\">64<\/span><span class=\"o\">&amp;<\/span><span class=\"n\">domain<\/span><span class=\"o\">=<\/span><span class=\"n\">augmentcode<\/span><span class=\"o\">.<\/span><span class=\"n\">com<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">grant<\/span>        <span class=\"n\">GM_xmlhttpRequest<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">grant<\/span>        <span class=\"n\">GM_setValue<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">grant<\/span>        <span class=\"n\">GM_getValue<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">grant<\/span>        <span class=\"n\">GM_log<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">connect<\/span>      <span class=\"n\">tempmail<\/span><span class=\"o\">.<\/span><span class=\"n\">plus<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"o\">==\/<\/span><span class=\"n\">UserScript<\/span><span class=\"o\">==<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">(<\/span><span class=\"n\">function<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s1\">&#39;use strict&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u4e3b\u90ae\u7bb1\u57df\u540d\u5e38\u91cf\uff0c\u7528\u4e8e\u751f\u6210\u6807\u51c6\u683c\u5f0f\u7684\u90ae\u7bb1\u5730\u5740<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">const<\/span> <span class=\"n\">EMAIL_DOMAIN<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/**<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">*<\/span> <span class=\"err\">\u4e34\u65f6\u90ae\u7bb1\u670d\u52a1\u914d\u7f6e<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">*<\/span> <span class=\"err\">\u7528\u4e8e\u9700\u8981\u4e34\u65f6\u63a5\u6536\u9a8c\u8bc1\u90ae\u4ef6\u7684\u573a\u666f<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">*\/<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">const<\/span> <span class=\"n\">TEMP_MAIL_CONFIG<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">username<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;&#34;<\/span><span class=\"p\">,<\/span>          <span class=\"o\">\/\/<\/span> <span class=\"err\">\u4e34\u65f6\u90ae\u7bb1\u7528\u6237\u540d<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">emailExtension<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;@mailto.plus&#34;<\/span><span class=\"p\">,<\/span> <span class=\"o\">\/\/<\/span> <span class=\"err\">\u4e34\u65f6\u90ae\u7bb1\u6269\u5c55\u57df\u540d<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">epin<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;&#34;<\/span>             <span class=\"o\">\/\/<\/span> <span class=\"err\">\u90ae\u7bb1\u8bbf\u95ee<\/span><span class=\"n\">PIN\u7801<\/span><span class=\"err\">\uff0c\u7528\u4e8e\u767b\u5f55\u4e34\u65f6\u90ae\u7bb1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">const<\/span> <span class=\"n\">FIRST_NAMES<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"s2\">&#34;alex&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;emily&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;jason&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;olivia&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;ryan&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;sophia&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;thomas&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;isabella&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;william&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;mia&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;james&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;ava&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;noah&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;charlotte&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;ethan&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;amelia&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;jacob&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;evelyn&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;mason&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;abigail&#34;<\/span><span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">const<\/span> <span class=\"n\">LAST_NAMES<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"s2\">&#34;taylor&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;anderson&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;thompson&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;jackson&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;white&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;harris&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;martin&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;thomas&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;lewis&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;clark&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;lee&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;walker&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;hall&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;young&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;allen&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;king&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;wright&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;scott&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;green&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;adams&#34;<\/span><span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u989c\u8272\u914d\u7f6e<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">const<\/span> <span class=\"n\">COLORS<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">primary<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;#3498db&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">secondary<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;#2ecc71&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">danger<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;#e74c3c&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">warning<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;#f39c12&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">info<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;#34495e&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">light<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;#ecf0f1&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">dark<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;#2c3e50&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">background<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;rgba(30, 30, 30, 0.95)&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u65e5\u5fd7<\/span><span class=\"n\">UI\u914d\u7f6e<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">const<\/span> <span class=\"n\">LOG_UI_CONFIG<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">position<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">bottom<\/span><span class=\"p\">:<\/span> <span class=\"mi\">40<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">left<\/span><span class=\"p\">:<\/span> <span class=\"mi\">20<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">dimensions<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">width<\/span><span class=\"p\">:<\/span> <span class=\"mi\">320<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">maxHeight<\/span><span class=\"p\">:<\/span> <span class=\"mi\">450<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u521b\u5efa\u65e5\u5fd7<\/span><span class=\"n\">UI<\/span> <span class=\"o\">-<\/span> <span class=\"err\">\u4f4d\u7f6e\u6539\u5230\u5de6\u4e0b\u89d2\uff0c\u6837\u5f0f\u548c\u989c\u8272\u66f4\u65b0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">function<\/span> <span class=\"n\">createLogUI<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">logContainer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">createElement<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;div&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">logContainer<\/span><span class=\"o\">.<\/span><span class=\"n\">id<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;auto-register-log&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">logContainer<\/span><span class=\"o\">.<\/span><span class=\"n\">style<\/span><span class=\"o\">.<\/span><span class=\"n\">cssText<\/span> <span class=\"o\">=<\/span> <span class=\"err\">`<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">position<\/span><span class=\"p\">:<\/span> <span class=\"n\">fixed<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">bottom<\/span><span class=\"p\">:<\/span> <span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">LOG_UI_CONFIG<\/span><span class=\"o\">.<\/span><span class=\"n\">position<\/span><span class=\"o\">.<\/span><span class=\"n\">bottom<\/span><span class=\"p\">}<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">left<\/span><span class=\"p\">:<\/span> <span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">LOG_UI_CONFIG<\/span><span class=\"o\">.<\/span><span class=\"n\">position<\/span><span class=\"o\">.<\/span><span class=\"n\">left<\/span><span class=\"p\">}<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">width<\/span><span class=\"p\">:<\/span> <span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">LOG_UI_CONFIG<\/span><span class=\"o\">.<\/span><span class=\"n\">dimensions<\/span><span class=\"o\">.<\/span><span class=\"n\">width<\/span><span class=\"p\">}<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nb\">max<\/span><span class=\"o\">-<\/span><span class=\"n\">height<\/span><span class=\"p\">:<\/span> <span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">LOG_UI_CONFIG<\/span><span class=\"o\">.<\/span><span class=\"n\">dimensions<\/span><span class=\"o\">.<\/span><span class=\"n\">maxHeight<\/span><span class=\"p\">}<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">background<\/span><span class=\"p\">:<\/span> <span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">COLORS<\/span><span class=\"o\">.<\/span><span class=\"n\">background<\/span><span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">border<\/span><span class=\"o\">-<\/span><span class=\"n\">radius<\/span><span class=\"p\">:<\/span> <span class=\"mi\">10<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">box<\/span><span class=\"o\">-<\/span><span class=\"n\">shadow<\/span><span class=\"p\">:<\/span> <span class=\"mi\">0<\/span> <span class=\"mi\">8<\/span><span class=\"n\">px<\/span> <span class=\"mi\">24<\/span><span class=\"n\">px<\/span> <span class=\"n\">rgba<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"mf\">0.25<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">z<\/span><span class=\"o\">-<\/span><span class=\"n\">index<\/span><span class=\"p\">:<\/span> <span class=\"mi\">10000<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">font<\/span><span class=\"o\">-<\/span><span class=\"n\">family<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;Segoe UI&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">Tahoma<\/span><span class=\"p\">,<\/span> <span class=\"n\">Geneva<\/span><span class=\"p\">,<\/span> <span class=\"n\">Verdana<\/span><span class=\"p\">,<\/span> <span class=\"n\">sans<\/span><span class=\"o\">-<\/span><span class=\"n\">serif<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">overflow<\/span><span class=\"p\">:<\/span> <span class=\"n\">hidden<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">display<\/span><span class=\"p\">:<\/span> <span class=\"n\">flex<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">flex<\/span><span class=\"o\">-<\/span><span class=\"n\">direction<\/span><span class=\"p\">:<\/span> <span class=\"n\">column<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"err\">`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">logContainer<\/span><span class=\"o\">.<\/span><span class=\"n\">innerHTML<\/span> <span class=\"o\">=<\/span> <span class=\"err\">`<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"o\">&lt;<\/span><span class=\"n\">div<\/span> <span class=\"n\">style<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">padding<\/span><span class=\"p\">:<\/span> <span class=\"mi\">14<\/span><span class=\"n\">px<\/span> <span class=\"mi\">16<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">background<\/span><span class=\"p\">:<\/span> <span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">COLORS<\/span><span class=\"o\">.<\/span><span class=\"n\">primary<\/span><span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">color<\/span><span class=\"p\">:<\/span> <span class=\"n\">white<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">font<\/span><span class=\"o\">-<\/span><span class=\"n\">weight<\/span><span class=\"p\">:<\/span> <span class=\"mi\">600<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">display<\/span><span class=\"p\">:<\/span> <span class=\"n\">flex<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">justify<\/span><span class=\"o\">-<\/span><span class=\"n\">content<\/span><span class=\"p\">:<\/span> <span class=\"n\">space<\/span><span class=\"o\">-<\/span><span class=\"n\">between<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">align<\/span><span class=\"o\">-<\/span><span class=\"n\">items<\/span><span class=\"p\">:<\/span> <span class=\"n\">center<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">border<\/span><span class=\"o\">-<\/span><span class=\"n\">bottom<\/span><span class=\"p\">:<\/span> <span class=\"mi\">2<\/span><span class=\"n\">px<\/span> <span class=\"n\">solid<\/span> <span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">COLORS<\/span><span class=\"o\">.<\/span><span class=\"n\">secondary<\/span><span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"s2\">&#34;&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"o\">&lt;<\/span><span class=\"n\">span<\/span><span class=\"o\">&gt;<\/span><span class=\"err\">\u81ea\u52a8\u6ce8\u518c\u52a9\u624b<\/span><span class=\"o\">&lt;\/<\/span><span class=\"n\">span<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"o\">&lt;<\/span><span class=\"n\">div<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"o\">&lt;<\/span><span class=\"n\">button<\/span> <span class=\"n\">id<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;auto-register-btn&#34;<\/span> <span class=\"n\">style<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">background<\/span><span class=\"p\">:<\/span> <span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">COLORS<\/span><span class=\"o\">.<\/span><span class=\"n\">secondary<\/span><span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">border<\/span><span class=\"p\">:<\/span> <span class=\"n\">none<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">color<\/span><span class=\"p\">:<\/span> <span class=\"n\">white<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">cursor<\/span><span class=\"p\">:<\/span> <span class=\"n\">pointer<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">font<\/span><span class=\"o\">-<\/span><span class=\"n\">size<\/span><span class=\"p\">:<\/span> <span class=\"mi\">13<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">padding<\/span><span class=\"p\">:<\/span> <span class=\"mi\">6<\/span><span class=\"n\">px<\/span> <span class=\"mi\">12<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">border<\/span><span class=\"o\">-<\/span><span class=\"n\">radius<\/span><span class=\"p\">:<\/span> <span class=\"mi\">4<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">margin<\/span><span class=\"o\">-<\/span><span class=\"n\">right<\/span><span class=\"p\">:<\/span> <span class=\"mi\">8<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">display<\/span><span class=\"p\">:<\/span> <span class=\"n\">none<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">transition<\/span><span class=\"p\">:<\/span> <span class=\"n\">all<\/span> <span class=\"mf\">0.2<\/span><span class=\"n\">s<\/span> <span class=\"nb\">ease<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"s2\">&#34;&gt;\u5f00\u59cb\u6ce8\u518c&lt;\/button&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"o\">&lt;<\/span><span class=\"n\">button<\/span> <span class=\"n\">id<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;clear-log&#34;<\/span> <span class=\"n\">style<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">background<\/span><span class=\"p\">:<\/span> <span class=\"n\">transparent<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">border<\/span><span class=\"p\">:<\/span> <span class=\"mi\">1<\/span><span class=\"n\">px<\/span> <span class=\"n\">solid<\/span> <span class=\"n\">rgba<\/span><span class=\"p\">(<\/span><span class=\"mi\">255<\/span><span class=\"p\">,<\/span> <span class=\"mi\">255<\/span><span class=\"p\">,<\/span> <span class=\"mi\">255<\/span><span class=\"p\">,<\/span> <span class=\"mf\">0.7<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">color<\/span><span class=\"p\">:<\/span> <span class=\"n\">white<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">cursor<\/span><span class=\"p\">:<\/span> <span class=\"n\">pointer<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">font<\/span><span class=\"o\">-<\/span><span class=\"n\">size<\/span><span class=\"p\">:<\/span> <span class=\"mi\">13<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">padding<\/span><span class=\"p\">:<\/span> <span class=\"mi\">6<\/span><span class=\"n\">px<\/span> <span class=\"mi\">12<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">border<\/span><span class=\"o\">-<\/span><span class=\"n\">radius<\/span><span class=\"p\">:<\/span> <span class=\"mi\">4<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">transition<\/span><span class=\"p\">:<\/span> <span class=\"n\">all<\/span> <span class=\"mf\">0.2<\/span><span class=\"n\">s<\/span> <span class=\"nb\">ease<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"s2\">&#34;&gt;\u6e05\u9664&lt;\/button&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"o\">&lt;<\/span><span class=\"n\">button<\/span> <span class=\"n\">id<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;minimize-log&#34;<\/span> <span class=\"n\">style<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">background<\/span><span class=\"p\">:<\/span> <span class=\"n\">transparent<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">border<\/span><span class=\"p\">:<\/span> <span class=\"n\">none<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">color<\/span><span class=\"p\">:<\/span> <span class=\"n\">white<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">cursor<\/span><span class=\"p\">:<\/span> <span class=\"n\">pointer<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">font<\/span><span class=\"o\">-<\/span><span class=\"n\">size<\/span><span class=\"p\">:<\/span> <span class=\"mi\">16<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">padding<\/span><span class=\"p\">:<\/span> <span class=\"mi\">6<\/span><span class=\"n\">px<\/span> <span class=\"mi\">12<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">margin<\/span><span class=\"o\">-<\/span><span class=\"n\">left<\/span><span class=\"p\">:<\/span> <span class=\"mi\">8<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">transition<\/span><span class=\"p\">:<\/span> <span class=\"n\">all<\/span> <span class=\"mf\">0.2<\/span><span class=\"n\">s<\/span> <span class=\"nb\">ease<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"s2\">&#34;&gt;_&lt;\/button&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"o\">&lt;\/<\/span><span class=\"n\">div<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"o\">&lt;\/<\/span><span class=\"n\">div<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"o\">&lt;<\/span><span class=\"n\">div<\/span> <span class=\"n\">style<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">padding<\/span><span class=\"p\">:<\/span> <span class=\"mi\">8<\/span><span class=\"n\">px<\/span> <span class=\"mi\">16<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">background<\/span><span class=\"p\">:<\/span> <span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">COLORS<\/span><span class=\"o\">.<\/span><span class=\"n\">dark<\/span><span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">border<\/span><span class=\"o\">-<\/span><span class=\"n\">bottom<\/span><span class=\"p\">:<\/span> <span class=\"mi\">1<\/span><span class=\"n\">px<\/span> <span class=\"n\">solid<\/span> <span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">COLORS<\/span><span class=\"o\">.<\/span><span class=\"n\">info<\/span><span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">font<\/span><span class=\"o\">-<\/span><span class=\"n\">size<\/span><span class=\"p\">:<\/span> <span class=\"mi\">12<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">color<\/span><span class=\"p\">:<\/span> <span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">COLORS<\/span><span class=\"o\">.<\/span><span class=\"n\">light<\/span><span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">display<\/span><span class=\"p\">:<\/span> <span class=\"n\">flex<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">align<\/span><span class=\"o\">-<\/span><span class=\"n\">items<\/span><span class=\"p\">:<\/span> <span class=\"n\">center<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">gap<\/span><span class=\"p\">:<\/span> <span class=\"mi\">8<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"s2\">&#34;&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"o\">&lt;<\/span><span class=\"n\">span<\/span> <span class=\"n\">style<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;color: ${COLORS.secondary};&#34;<\/span><span class=\"o\">&gt;<\/span><span class=\"err\">\ud83d\udce2<\/span><span class=\"o\">&lt;\/<\/span><span class=\"n\">span<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"o\">&lt;<\/span><span class=\"n\">span<\/span><span class=\"o\">&gt;<\/span><span class=\"err\">\u64cd\u4f5c\u63a7\u5236\u53f0<\/span><span class=\"o\">&lt;\/<\/span><span class=\"n\">span<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"o\">&lt;\/<\/span><span class=\"n\">div<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"o\">&lt;<\/span><span class=\"n\">div<\/span> <span class=\"n\">id<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;log-content&#34;<\/span> <span class=\"n\">style<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">padding<\/span><span class=\"p\">:<\/span> <span class=\"mi\">16<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">overflow<\/span><span class=\"o\">-<\/span><span class=\"n\">y<\/span><span class=\"p\">:<\/span> <span class=\"n\">auto<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"nb\">max<\/span><span class=\"o\">-<\/span><span class=\"n\">height<\/span><span class=\"p\">:<\/span> <span class=\"n\">calc<\/span><span class=\"p\">(<\/span><span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">LOG_UI_CONFIG<\/span><span class=\"o\">.<\/span><span class=\"n\">dimensions<\/span><span class=\"o\">.<\/span><span class=\"n\">maxHeight<\/span><span class=\"p\">}<\/span><span class=\"n\">px<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">120<\/span><span class=\"n\">px<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">font<\/span><span class=\"o\">-<\/span><span class=\"n\">size<\/span><span class=\"p\">:<\/span> <span class=\"mi\">14<\/span><span class=\"n\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">color<\/span><span class=\"p\">:<\/span> <span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">COLORS<\/span><span class=\"o\">.<\/span><span class=\"n\">light<\/span><span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">line<\/span><span class=\"o\">-<\/span><span class=\"n\">height<\/span><span class=\"p\">:<\/span> <span class=\"mf\">1.5<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"s2\">&#34;&gt;&lt;\/div&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"err\">`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">body<\/span><span class=\"o\">.<\/span><span class=\"n\">appendChild<\/span><span class=\"p\">(<\/span><span class=\"n\">logContainer<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"o\">\/\/<\/span> <span class=\"err\">\u6700\u5c0f\u5316\u529f\u80fd<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">let<\/span> <span class=\"n\">isMinimized<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">false<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">logContent<\/span> <span class=\"o\">=<\/span> <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">getElementById<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;log-content&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">minimizeBtn<\/span> <span class=\"o\">=<\/span> <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">getElementById<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;minimize-log&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">minimizeBtn<\/span><span class=\"o\">.<\/span><span class=\"n\">addEventListener<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;click&#39;<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">isMinimized<\/span> <span class=\"o\">=<\/span> <span class=\"o\">!<\/span><span class=\"n\">isMinimized<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">logContent<\/span><span class=\"o\">.<\/span><span class=\"n\">style<\/span><span class=\"o\">.<\/span><span class=\"n\">display<\/span> <span class=\"o\">=<\/span> <span class=\"n\">isMinimized<\/span> <span class=\"err\">?<\/span> <span class=\"s1\">&#39;none&#39;<\/span> <span class=\"p\">:<\/span> <span class=\"s1\">&#39;block&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">minimizeBtn<\/span><span class=\"o\">.<\/span><span class=\"n\">textContent<\/span> <span class=\"o\">=<\/span> <span class=\"n\">isMinimized<\/span> <span class=\"err\">?<\/span> <span class=\"s1\">&#39;\u25a2&#39;<\/span> <span class=\"p\">:<\/span> <span class=\"s1\">&#39;_&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"o\">\/\/<\/span> <span class=\"err\">\u6e05\u9664\u65e5\u5fd7\u529f\u80fd<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">clearBtn<\/span> <span class=\"o\">=<\/span> <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">getElementById<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;clear-log&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">clearBtn<\/span><span class=\"o\">.<\/span><span class=\"n\">addEventListener<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;click&#39;<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">logContent<\/span><span class=\"o\">.<\/span><span class=\"n\">innerHTML<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nb\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u65e5\u5fd7\u5df2\u6e05\u9664&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;info&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"o\">\/\/<\/span> <span class=\"err\">\u6ce8\u518c\u6309\u94ae\u60ac\u505c\u6548\u679c<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">registerBtn<\/span> <span class=\"o\">=<\/span> <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">getElementById<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;auto-register-btn&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">registerBtn<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">registerBtn<\/span><span class=\"o\">.<\/span><span class=\"n\">addEventListener<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;mouseenter&#39;<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">registerBtn<\/span><span class=\"o\">.<\/span><span class=\"n\">style<\/span><span class=\"o\">.<\/span><span class=\"n\">transform<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;scale(1.05)&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">registerBtn<\/span><span class=\"o\">.<\/span><span class=\"n\">addEventListener<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;mouseleave&#39;<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">registerBtn<\/span><span class=\"o\">.<\/span><span class=\"n\">style<\/span><span class=\"o\">.<\/span><span class=\"n\">transform<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;scale(1)&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nb\">log<\/span><span class=\"p\">:<\/span> <span class=\"n\">function<\/span><span class=\"p\">(<\/span><span class=\"n\">message<\/span><span class=\"p\">,<\/span> <span class=\"n\">type<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;info&#39;<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"k\">const<\/span> <span class=\"n\">logEntry<\/span> <span class=\"o\">=<\/span> <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">createElement<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;div&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">logEntry<\/span><span class=\"o\">.<\/span><span class=\"n\">style<\/span><span class=\"o\">.<\/span><span class=\"n\">marginBottom<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;10px&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">logEntry<\/span><span class=\"o\">.<\/span><span class=\"n\">style<\/span><span class=\"o\">.<\/span><span class=\"n\">padding<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;12px&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">logEntry<\/span><span class=\"o\">.<\/span><span class=\"n\">style<\/span><span class=\"o\">.<\/span><span class=\"n\">borderRadius<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;6px&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">logEntry<\/span><span class=\"o\">.<\/span><span class=\"n\">style<\/span><span class=\"o\">.<\/span><span class=\"n\">wordBreak<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;break-all&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">logEntry<\/span><span class=\"o\">.<\/span><span class=\"n\">style<\/span><span class=\"o\">.<\/span><span class=\"n\">transition<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;all 0.3s ease&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">let<\/span> <span class=\"n\">bgColor<\/span><span class=\"p\">,<\/span> <span class=\"n\">textColor<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"k\">switch<\/span><span class=\"p\">(<\/span><span class=\"n\">type<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"k\">case<\/span> <span class=\"s1\">&#39;success&#39;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">bgColor<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;rgba(46, 204, 113, 0.2)&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">textColor<\/span> <span class=\"o\">=<\/span> <span class=\"n\">COLORS<\/span><span class=\"o\">.<\/span><span class=\"n\">secondary<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"k\">break<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"k\">case<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">bgColor<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;rgba(231, 76, 60, 0.2)&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">textColor<\/span> <span class=\"o\">=<\/span> <span class=\"n\">COLORS<\/span><span class=\"o\">.<\/span><span class=\"n\">danger<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"k\">break<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"k\">case<\/span> <span class=\"s1\">&#39;warning&#39;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">bgColor<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;rgba(243, 156, 17, 0.2)&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">textColor<\/span> <span class=\"o\">=<\/span> <span class=\"n\">COLORS<\/span><span class=\"o\">.<\/span><span class=\"n\">warning<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"k\">break<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">default<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">bgColor<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;rgba(255, 255, 255, 0.05)&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">textColor<\/span> <span class=\"o\">=<\/span> <span class=\"n\">COLORS<\/span><span class=\"o\">.<\/span><span class=\"n\">light<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">logEntry<\/span><span class=\"o\">.<\/span><span class=\"n\">style<\/span><span class=\"o\">.<\/span><span class=\"n\">backgroundColor<\/span> <span class=\"o\">=<\/span> <span class=\"n\">bgColor<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">logEntry<\/span><span class=\"o\">.<\/span><span class=\"n\">style<\/span><span class=\"o\">.<\/span><span class=\"n\">color<\/span> <span class=\"o\">=<\/span> <span class=\"n\">textColor<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"k\">const<\/span> <span class=\"n\">time<\/span> <span class=\"o\">=<\/span> <span class=\"n\">new<\/span> <span class=\"n\">Date<\/span><span class=\"p\">()<\/span><span class=\"o\">.<\/span><span class=\"n\">toLocaleTimeString<\/span><span class=\"p\">([],<\/span> <span class=\"p\">{<\/span> <span class=\"n\">hour<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;2-digit&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">minute<\/span><span class=\"p\">:<\/span><span class=\"s1\">&#39;2-digit&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">second<\/span><span class=\"p\">:<\/span><span class=\"s1\">&#39;2-digit&#39;<\/span> <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">logEntry<\/span><span class=\"o\">.<\/span><span class=\"n\">textContent<\/span> <span class=\"o\">=<\/span> <span class=\"err\">`<\/span><span class=\"p\">[<\/span><span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">time<\/span><span class=\"p\">}]<\/span> <span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">message<\/span><span class=\"p\">}<\/span><span class=\"err\">`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">logContent<\/span><span class=\"o\">.<\/span><span class=\"n\">appendChild<\/span><span class=\"p\">(<\/span><span class=\"n\">logEntry<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">logContent<\/span><span class=\"o\">.<\/span><span class=\"n\">scrollTop<\/span> <span class=\"o\">=<\/span> <span class=\"n\">logContent<\/span><span class=\"o\">.<\/span><span class=\"n\">scrollHeight<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">showRegisterButton<\/span><span class=\"p\">:<\/span> <span class=\"n\">function<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"k\">const<\/span> <span class=\"n\">registerBtn<\/span> <span class=\"o\">=<\/span> <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">getElementById<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;auto-register-btn&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">registerBtn<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">this<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u627e\u5230\u6ce8\u518c\u6309\u94ae\uff0c\u6b63\u5728\u663e\u793a...&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">registerBtn<\/span><span class=\"o\">.<\/span><span class=\"n\">style<\/span><span class=\"o\">.<\/span><span class=\"n\">display<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;inline-block&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"k\">return<\/span> <span class=\"n\">registerBtn<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">this<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u672a\u627e\u5230\u6ce8\u518c\u6309\u94ae\u5143\u7d20&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"k\">return<\/span> <span class=\"n\">null<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u521b\u5efa\u5168\u5c40\u65e5\u5fd7\u5bf9\u8c61<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">const<\/span> <span class=\"n\">logger<\/span> <span class=\"o\">=<\/span> <span class=\"n\">createLogUI<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u751f\u6210\u968f\u673a\u90ae\u7bb1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">function<\/span> <span class=\"n\">generateEmail<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">firstName<\/span> <span class=\"o\">=<\/span> <span class=\"n\">FIRST_NAMES<\/span><span class=\"p\">[<\/span><span class=\"n\">Math<\/span><span class=\"o\">.<\/span><span class=\"n\">floor<\/span><span class=\"p\">(<\/span><span class=\"n\">Math<\/span><span class=\"o\">.<\/span><span class=\"n\">random<\/span><span class=\"p\">()<\/span> <span class=\"o\">*<\/span> <span class=\"n\">FIRST_NAMES<\/span><span class=\"o\">.<\/span><span class=\"n\">length<\/span><span class=\"p\">)];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">lastName<\/span> <span class=\"o\">=<\/span> <span class=\"n\">LAST_NAMES<\/span><span class=\"p\">[<\/span><span class=\"n\">Math<\/span><span class=\"o\">.<\/span><span class=\"n\">floor<\/span><span class=\"p\">(<\/span><span class=\"n\">Math<\/span><span class=\"o\">.<\/span><span class=\"n\">random<\/span><span class=\"p\">()<\/span> <span class=\"o\">*<\/span> <span class=\"n\">LAST_NAMES<\/span><span class=\"o\">.<\/span><span class=\"n\">length<\/span><span class=\"p\">)];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">timestamp<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Date<\/span><span class=\"o\">.<\/span><span class=\"n\">now<\/span><span class=\"p\">()<\/span><span class=\"o\">.<\/span><span class=\"n\">toString<\/span><span class=\"p\">(<\/span><span class=\"mi\">36<\/span><span class=\"p\">);<\/span> <span class=\"o\">\/\/<\/span> <span class=\"err\">\u8f6c\u6362\u4e3a<\/span><span class=\"mi\">36<\/span><span class=\"err\">\u8fdb\u5236\u4ee5\u7f29\u77ed\u957f\u5ea6<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">randomNum<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Math<\/span><span class=\"o\">.<\/span><span class=\"n\">floor<\/span><span class=\"p\">(<\/span><span class=\"n\">Math<\/span><span class=\"o\">.<\/span><span class=\"n\">random<\/span><span class=\"p\">()<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">10000<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">toString<\/span><span class=\"p\">()<\/span><span class=\"o\">.<\/span><span class=\"n\">padStart<\/span><span class=\"p\">(<\/span><span class=\"mi\">4<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;0&#39;<\/span><span class=\"p\">);<\/span> <span class=\"o\">\/\/<\/span> <span class=\"err\">\u751f\u6210<\/span><span class=\"mi\">4<\/span><span class=\"err\">\u4f4d\u968f\u673a\u6570<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">username<\/span> <span class=\"o\">=<\/span> <span class=\"err\">`<\/span><span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">firstName<\/span><span class=\"p\">}<\/span><span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">lastName<\/span><span class=\"p\">}<\/span><span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">timestamp<\/span><span class=\"p\">}<\/span><span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">randomNum<\/span><span class=\"p\">}<\/span><span class=\"err\">`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"err\">`<\/span><span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">username<\/span><span class=\"p\">}<\/span><span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">EMAIL_DOMAIN<\/span><span class=\"p\">}<\/span><span class=\"err\">`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u7b49\u5f85\u5143\u7d20\u51fa\u73b0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">async<\/span> <span class=\"n\">function<\/span> <span class=\"n\">waitForElement<\/span><span class=\"p\">(<\/span><span class=\"n\">selector<\/span><span class=\"p\">,<\/span> <span class=\"n\">timeout<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">10000<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">startTime<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Date<\/span><span class=\"o\">.<\/span><span class=\"n\">now<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">while<\/span> <span class=\"p\">(<\/span><span class=\"n\">Date<\/span><span class=\"o\">.<\/span><span class=\"n\">now<\/span><span class=\"p\">()<\/span> <span class=\"o\">-<\/span> <span class=\"n\">startTime<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">timeout<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">const<\/span> <span class=\"n\">element<\/span> <span class=\"o\">=<\/span> <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">querySelector<\/span><span class=\"p\">(<\/span><span class=\"n\">selector<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">element<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"k\">return<\/span> <span class=\"n\">element<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">await<\/span> <span class=\"n\">new<\/span> <span class=\"n\">Promise<\/span><span class=\"p\">(<\/span><span class=\"n\">resolve<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"n\">setTimeout<\/span><span class=\"p\">(<\/span><span class=\"n\">resolve<\/span><span class=\"p\">,<\/span> <span class=\"mi\">100<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"n\">null<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u4ece\u90ae\u4ef6\u6587\u672c\u4e2d\u63d0\u53d6\u9a8c\u8bc1\u7801<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">function<\/span> <span class=\"n\">extractVerificationCode<\/span><span class=\"p\">(<\/span><span class=\"n\">mailText<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">codeMatch<\/span> <span class=\"o\">=<\/span> <span class=\"n\">mailText<\/span><span class=\"o\">.<\/span><span class=\"n\">match<\/span><span class=\"p\">(<\/span><span class=\"o\">\/<\/span><span class=\"p\">(<\/span><span class=\"err\">?<\/span><span class=\"o\">&lt;!<\/span><span class=\"p\">[<\/span><span class=\"n\">a<\/span><span class=\"o\">-<\/span><span class=\"n\">zA<\/span><span class=\"o\">-<\/span><span class=\"n\">Z<\/span><span class=\"err\">@<\/span><span class=\"o\">.<\/span><span class=\"p\">])<\/span>\\<span class=\"n\">b<\/span>\\<span class=\"n\">d<\/span><span class=\"p\">{<\/span><span class=\"mi\">6<\/span><span class=\"p\">}<\/span>\\<span class=\"n\">b<\/span><span class=\"o\">\/<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"n\">codeMatch<\/span> <span class=\"err\">?<\/span> <span class=\"n\">codeMatch<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span> <span class=\"p\">:<\/span> <span class=\"n\">null<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u5220\u9664\u90ae\u4ef6<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">async<\/span> <span class=\"n\">function<\/span> <span class=\"n\">deleteEmail<\/span><span class=\"p\">(<\/span><span class=\"n\">firstId<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"n\">new<\/span> <span class=\"n\">Promise<\/span><span class=\"p\">((<\/span><span class=\"n\">resolve<\/span><span class=\"p\">,<\/span> <span class=\"n\">reject<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">const<\/span> <span class=\"n\">deleteUrl<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;https:\/\/tempmail.plus\/api\/mails\/&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">const<\/span> <span class=\"n\">maxRetries<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">5<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">let<\/span> <span class=\"n\">retryCount<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">function<\/span> <span class=\"n\">tryDelete<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">GM_xmlhttpRequest<\/span><span class=\"p\">({<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">method<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;DELETE&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">url<\/span><span class=\"p\">:<\/span> <span class=\"n\">deleteUrl<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">data<\/span><span class=\"p\">:<\/span> <span class=\"err\">`<\/span><span class=\"n\">email<\/span><span class=\"o\">=$<\/span><span class=\"p\">{<\/span><span class=\"n\">TEMP_MAIL_CONFIG<\/span><span class=\"o\">.<\/span><span class=\"n\">username<\/span><span class=\"p\">}<\/span><span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">TEMP_MAIL_CONFIG<\/span><span class=\"o\">.<\/span><span class=\"n\">emailExtension<\/span><span class=\"p\">}<\/span><span class=\"o\">&amp;<\/span><span class=\"n\">first_id<\/span><span class=\"o\">=$<\/span><span class=\"p\">{<\/span><span class=\"n\">firstId<\/span><span class=\"p\">}<\/span><span class=\"o\">&amp;<\/span><span class=\"n\">epin<\/span><span class=\"o\">=$<\/span><span class=\"p\">{<\/span><span class=\"n\">TEMP_MAIL_CONFIG<\/span><span class=\"o\">.<\/span><span class=\"n\">epin<\/span><span class=\"p\">}<\/span><span class=\"err\">`<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">headers<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"s2\">&#34;Content-Type&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;application\/x-www-form-urlencoded&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">onload<\/span><span class=\"p\">:<\/span> <span class=\"n\">function<\/span><span class=\"p\">(<\/span><span class=\"n\">response<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">try<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"k\">const<\/span> <span class=\"n\">result<\/span> <span class=\"o\">=<\/span> <span class=\"n\">JSON<\/span><span class=\"o\">.<\/span><span class=\"n\">parse<\/span><span class=\"p\">(<\/span><span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">responseText<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">result<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">result<\/span> <span class=\"o\">===<\/span> <span class=\"bp\">true<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u90ae\u4ef6\u5220\u9664\u6210\u529f&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;success&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                <span class=\"n\">resolve<\/span><span class=\"p\">(<\/span><span class=\"bp\">true<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"p\">}<\/span> <span class=\"n\">catch<\/span> <span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u89e3\u6790\u5220\u9664\u54cd\u5e94\u5931\u8d25: &#34;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;warning&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"o\">\/\/<\/span> <span class=\"err\">\u5982\u679c\u8fd8\u6709\u91cd\u8bd5\u6b21\u6570\uff0c\u7ee7\u7eed\u5c1d\u8bd5<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">retryCount<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">maxRetries<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"n\">retryCount<\/span><span class=\"o\">++<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"err\">`\u5220\u9664\u90ae\u4ef6\u5931\u8d25\uff0c\u6b63\u5728\u91cd\u8bd5<\/span> <span class=\"p\">(<\/span><span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">retryCount<\/span><span class=\"p\">}<\/span><span class=\"o\">\/$<\/span><span class=\"p\">{<\/span><span class=\"n\">maxRetries<\/span><span class=\"p\">})<\/span><span class=\"o\">...<\/span><span class=\"err\">`<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;warning&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"n\">setTimeout<\/span><span class=\"p\">(<\/span><span class=\"n\">tryDelete<\/span><span class=\"p\">,<\/span> <span class=\"mi\">500<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u5220\u9664\u90ae\u4ef6\u5931\u8d25\uff0c\u5df2\u8fbe\u5230\u6700\u5927\u91cd\u8bd5\u6b21\u6570&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"n\">resolve<\/span><span class=\"p\">(<\/span><span class=\"bp\">false<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">onerror<\/span><span class=\"p\">:<\/span> <span class=\"n\">function<\/span><span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">retryCount<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">maxRetries<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"n\">retryCount<\/span><span class=\"o\">++<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"err\">`\u5220\u9664\u90ae\u4ef6\u51fa\u9519\uff0c\u6b63\u5728\u91cd\u8bd5<\/span> <span class=\"p\">(<\/span><span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">retryCount<\/span><span class=\"p\">}<\/span><span class=\"o\">\/$<\/span><span class=\"p\">{<\/span><span class=\"n\">maxRetries<\/span><span class=\"p\">})<\/span><span class=\"o\">...<\/span><span class=\"err\">`<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;warning&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"n\">setTimeout<\/span><span class=\"p\">(<\/span><span class=\"n\">tryDelete<\/span><span class=\"p\">,<\/span> <span class=\"mi\">500<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u5220\u9664\u90ae\u4ef6\u5931\u8d25: &#34;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"n\">resolve<\/span><span class=\"p\">(<\/span><span class=\"bp\">false<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">tryDelete<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u83b7\u53d6\u6700\u65b0\u90ae\u4ef6\u4e2d\u7684\u9a8c\u8bc1\u7801<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">async<\/span> <span class=\"n\">function<\/span> <span class=\"n\">getLatestMailCode<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"n\">new<\/span> <span class=\"n\">Promise<\/span><span class=\"p\">((<\/span><span class=\"n\">resolve<\/span><span class=\"p\">,<\/span> <span class=\"n\">reject<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">const<\/span> <span class=\"n\">mailListUrl<\/span> <span class=\"o\">=<\/span> <span class=\"err\">`<\/span><span class=\"n\">https<\/span><span class=\"p\">:<\/span><span class=\"o\">\/\/<\/span><span class=\"n\">tempmail<\/span><span class=\"o\">.<\/span><span class=\"n\">plus<\/span><span class=\"o\">\/<\/span><span class=\"n\">api<\/span><span class=\"o\">\/<\/span><span class=\"n\">mails<\/span><span class=\"err\">?<\/span><span class=\"n\">email<\/span><span class=\"o\">=$<\/span><span class=\"p\">{<\/span><span class=\"n\">TEMP_MAIL_CONFIG<\/span><span class=\"o\">.<\/span><span class=\"n\">username<\/span><span class=\"p\">}<\/span><span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">TEMP_MAIL_CONFIG<\/span><span class=\"o\">.<\/span><span class=\"n\">emailExtension<\/span><span class=\"p\">}<\/span><span class=\"o\">&amp;<\/span><span class=\"n\">limit<\/span><span class=\"o\">=<\/span><span class=\"mi\">20<\/span><span class=\"o\">&amp;<\/span><span class=\"n\">epin<\/span><span class=\"o\">=$<\/span><span class=\"p\">{<\/span><span class=\"n\">TEMP_MAIL_CONFIG<\/span><span class=\"o\">.<\/span><span class=\"n\">epin<\/span><span class=\"p\">}<\/span><span class=\"err\">`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">GM_xmlhttpRequest<\/span><span class=\"p\">({<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">method<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;GET&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">url<\/span><span class=\"p\">:<\/span> <span class=\"n\">mailListUrl<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">onload<\/span><span class=\"p\">:<\/span> <span class=\"n\">async<\/span> <span class=\"n\">function<\/span><span class=\"p\">(<\/span><span class=\"n\">mailListResponse<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">try<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"k\">const<\/span> <span class=\"n\">mailListData<\/span> <span class=\"o\">=<\/span> <span class=\"n\">JSON<\/span><span class=\"o\">.<\/span><span class=\"n\">parse<\/span><span class=\"p\">(<\/span><span class=\"n\">mailListResponse<\/span><span class=\"o\">.<\/span><span class=\"n\">responseText<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">mailListData<\/span><span class=\"o\">.<\/span><span class=\"n\">result<\/span> <span class=\"o\">||<\/span> <span class=\"o\">!<\/span><span class=\"n\">mailListData<\/span><span class=\"o\">.<\/span><span class=\"n\">first_id<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"n\">resolve<\/span><span class=\"p\">(<\/span><span class=\"n\">null<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"k\">const<\/span> <span class=\"n\">firstId<\/span> <span class=\"o\">=<\/span> <span class=\"n\">mailListData<\/span><span class=\"o\">.<\/span><span class=\"n\">first_id<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"k\">const<\/span> <span class=\"n\">mailDetailUrl<\/span> <span class=\"o\">=<\/span> <span class=\"err\">`<\/span><span class=\"n\">https<\/span><span class=\"p\">:<\/span><span class=\"o\">\/\/<\/span><span class=\"n\">tempmail<\/span><span class=\"o\">.<\/span><span class=\"n\">plus<\/span><span class=\"o\">\/<\/span><span class=\"n\">api<\/span><span class=\"o\">\/<\/span><span class=\"n\">mails<\/span><span class=\"o\">\/$<\/span><span class=\"p\">{<\/span><span class=\"n\">firstId<\/span><span class=\"p\">}<\/span><span class=\"err\">?<\/span><span class=\"n\">email<\/span><span class=\"o\">=$<\/span><span class=\"p\">{<\/span><span class=\"n\">TEMP_MAIL_CONFIG<\/span><span class=\"o\">.<\/span><span class=\"n\">username<\/span><span class=\"p\">}<\/span><span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">TEMP_MAIL_CONFIG<\/span><span class=\"o\">.<\/span><span class=\"n\">emailExtension<\/span><span class=\"p\">}<\/span><span class=\"o\">&amp;<\/span><span class=\"n\">epin<\/span><span class=\"o\">=$<\/span><span class=\"p\">{<\/span><span class=\"n\">TEMP_MAIL_CONFIG<\/span><span class=\"o\">.<\/span><span class=\"n\">epin<\/span><span class=\"p\">}<\/span><span class=\"err\">`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">GM_xmlhttpRequest<\/span><span class=\"p\">({<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"n\">method<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;GET&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"n\">url<\/span><span class=\"p\">:<\/span> <span class=\"n\">mailDetailUrl<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"n\">onload<\/span><span class=\"p\">:<\/span> <span class=\"n\">async<\/span> <span class=\"n\">function<\/span><span class=\"p\">(<\/span><span class=\"n\">mailDetailResponse<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                <span class=\"n\">try<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                    <span class=\"k\">const<\/span> <span class=\"n\">mailDetailData<\/span> <span class=\"o\">=<\/span> <span class=\"n\">JSON<\/span><span class=\"o\">.<\/span><span class=\"n\">parse<\/span><span class=\"p\">(<\/span><span class=\"n\">mailDetailResponse<\/span><span class=\"o\">.<\/span><span class=\"n\">responseText<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">mailDetailData<\/span><span class=\"o\">.<\/span><span class=\"n\">result<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                        <span class=\"n\">resolve<\/span><span class=\"p\">(<\/span><span class=\"n\">null<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                        <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                    <span class=\"k\">const<\/span> <span class=\"n\">mailText<\/span> <span class=\"o\">=<\/span> <span class=\"n\">mailDetailData<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span> <span class=\"o\">||<\/span> <span class=\"s2\">&#34;&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                    <span class=\"k\">const<\/span> <span class=\"n\">mailSubject<\/span> <span class=\"o\">=<\/span> <span class=\"n\">mailDetailData<\/span><span class=\"o\">.<\/span><span class=\"n\">subject<\/span> <span class=\"o\">||<\/span> <span class=\"s2\">&#34;&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                    <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u627e\u5230\u90ae\u4ef6\u4e3b\u9898: &#34;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">mailSubject<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                    <span class=\"k\">const<\/span> <span class=\"n\">code<\/span> <span class=\"o\">=<\/span> <span class=\"n\">extractVerificationCode<\/span><span class=\"p\">(<\/span><span class=\"n\">mailText<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u83b7\u53d6\u5230\u9a8c\u8bc1\u7801\u540e\uff0c\u5c1d\u8bd5\u5220\u9664\u90ae\u4ef6<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">code<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                        <span class=\"n\">await<\/span> <span class=\"n\">deleteEmail<\/span><span class=\"p\">(<\/span><span class=\"n\">firstId<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                    <span class=\"n\">resolve<\/span><span class=\"p\">(<\/span><span class=\"n\">code<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                <span class=\"p\">}<\/span> <span class=\"n\">catch<\/span> <span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                    <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u89e3\u6790\u90ae\u4ef6\u8be6\u60c5\u5931\u8d25: &#34;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                    <span class=\"n\">resolve<\/span><span class=\"p\">(<\/span><span class=\"n\">null<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"n\">onerror<\/span><span class=\"p\">:<\/span> <span class=\"n\">function<\/span><span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u83b7\u53d6\u90ae\u4ef6\u8be6\u60c5\u5931\u8d25: &#34;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                <span class=\"n\">resolve<\/span><span class=\"p\">(<\/span><span class=\"n\">null<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"p\">}<\/span> <span class=\"n\">catch<\/span> <span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u89e3\u6790\u90ae\u4ef6\u5217\u8868\u5931\u8d25: &#34;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">resolve<\/span><span class=\"p\">(<\/span><span class=\"n\">null<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">onerror<\/span><span class=\"p\">:<\/span> <span class=\"n\">function<\/span><span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u83b7\u53d6\u90ae\u4ef6\u5217\u8868\u5931\u8d25: &#34;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">resolve<\/span><span class=\"p\">(<\/span><span class=\"n\">null<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u83b7\u53d6\u9a8c\u8bc1\u7801\uff08\u5e26\u91cd\u8bd5\u673a\u5236\uff09<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">async<\/span> <span class=\"n\">function<\/span> <span class=\"n\">getVerificationCode<\/span><span class=\"p\">(<\/span><span class=\"n\">maxRetries<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">5<\/span><span class=\"p\">,<\/span> <span class=\"n\">retryInterval<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">3000<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"n\">let<\/span> <span class=\"n\">attempt<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"n\">attempt<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">maxRetries<\/span><span class=\"p\">;<\/span> <span class=\"n\">attempt<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"err\">`\u5c1d\u8bd5\u83b7\u53d6\u9a8c\u8bc1\u7801<\/span> <span class=\"p\">(<\/span><span class=\"err\">\u7b2c<\/span> <span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">attempt<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">}<\/span><span class=\"o\">\/$<\/span><span class=\"p\">{<\/span><span class=\"n\">maxRetries<\/span><span class=\"p\">}<\/span> <span class=\"err\">\u6b21<\/span><span class=\"p\">)<\/span><span class=\"o\">...<\/span><span class=\"err\">`<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">try<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"k\">const<\/span> <span class=\"n\">code<\/span> <span class=\"o\">=<\/span> <span class=\"n\">await<\/span> <span class=\"n\">getLatestMailCode<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">code<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u6210\u529f\u83b7\u53d6\u9a8c\u8bc1\u7801: &#34;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">code<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;success&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"k\">return<\/span> <span class=\"n\">code<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">attempt<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">maxRetries<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"err\">`\u672a\u83b7\u53d6\u5230\u9a8c\u8bc1\u7801\uff0c<\/span><span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">retryInterval<\/span><span class=\"o\">\/<\/span><span class=\"mi\">1000<\/span><span class=\"p\">}<\/span><span class=\"err\">\u79d2\u540e\u91cd\u8bd5<\/span><span class=\"o\">...<\/span><span class=\"err\">`<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;warning&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">await<\/span> <span class=\"n\">new<\/span> <span class=\"n\">Promise<\/span><span class=\"p\">(<\/span><span class=\"n\">resolve<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"n\">setTimeout<\/span><span class=\"p\">(<\/span><span class=\"n\">resolve<\/span><span class=\"p\">,<\/span> <span class=\"n\">retryInterval<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">}<\/span> <span class=\"n\">catch<\/span> <span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u83b7\u53d6\u9a8c\u8bc1\u7801\u51fa\u9519: &#34;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">attempt<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">maxRetries<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">await<\/span> <span class=\"n\">new<\/span> <span class=\"n\">Promise<\/span><span class=\"p\">(<\/span><span class=\"n\">resolve<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"n\">setTimeout<\/span><span class=\"p\">(<\/span><span class=\"n\">resolve<\/span><span class=\"p\">,<\/span> <span class=\"n\">retryInterval<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">throw<\/span> <span class=\"n\">new<\/span> <span class=\"n\">Error<\/span><span class=\"p\">(<\/span><span class=\"err\">`\u7ecf\u8fc7<\/span> <span class=\"o\">$<\/span><span class=\"p\">{<\/span><span class=\"n\">maxRetries<\/span><span class=\"p\">}<\/span> <span class=\"err\">\u6b21\u5c1d\u8bd5\u540e\u4ecd\u672a\u83b7\u53d6\u5230\u9a8c\u8bc1\u7801\u3002`<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u81ea\u52a8\u586b\u5199\u90ae\u7bb1\u5e76\u63d0\u4ea4<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">async<\/span> <span class=\"n\">function<\/span> <span class=\"n\">fillEmail<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">email<\/span> <span class=\"o\">=<\/span> <span class=\"n\">generateEmail<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u4f7f\u7528\u90ae\u7bb1: &#39;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">email<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">emailInput<\/span> <span class=\"o\">=<\/span> <span class=\"n\">await<\/span> <span class=\"n\">waitForElement<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;input[name=&#34;username&#34;]&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">emailInput<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u672a\u627e\u5230\u90ae\u7bb1\u8f93\u5165\u6846&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">return<\/span> <span class=\"bp\">false<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u627e\u5230\u90ae\u7bb1\u8f93\u5165\u6846\uff0c\u5f00\u59cb\u586b\u5199&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"o\">\/\/<\/span> <span class=\"err\">\u586b\u5199\u90ae\u7bb1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">emailInput<\/span><span class=\"o\">.<\/span><span class=\"n\">value<\/span> <span class=\"o\">=<\/span> <span class=\"n\">email<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">emailInput<\/span><span class=\"o\">.<\/span><span class=\"n\">dispatchEvent<\/span><span class=\"p\">(<\/span><span class=\"n\">new<\/span> <span class=\"n\">Event<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;input&#39;<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"n\">bubbles<\/span><span class=\"p\">:<\/span> <span class=\"bp\">true<\/span> <span class=\"p\">}));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"o\">\/\/<\/span> <span class=\"err\">\u70b9\u51fb\u7ee7\u7eed\u6309\u94ae<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">continueBtn<\/span> <span class=\"o\">=<\/span> <span class=\"n\">await<\/span> <span class=\"n\">waitForElement<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;button[type=&#34;submit&#34;]&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">continueBtn<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u672a\u627e\u5230\u7ee7\u7eed\u6309\u94ae&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">return<\/span> <span class=\"bp\">false<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">continueBtn<\/span><span class=\"o\">.<\/span><span class=\"n\">click<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"bp\">true<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u586b\u5199\u9a8c\u8bc1\u7801<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">async<\/span> <span class=\"n\">function<\/span> <span class=\"n\">fillVerificationCode<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">code<\/span> <span class=\"o\">=<\/span> <span class=\"n\">await<\/span> <span class=\"n\">getVerificationCode<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">code<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u672a\u80fd\u83b7\u53d6\u9a8c\u8bc1\u7801&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">return<\/span> <span class=\"bp\">false<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">codeInput<\/span> <span class=\"o\">=<\/span> <span class=\"n\">await<\/span> <span class=\"n\">waitForElement<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;input[name=&#34;code&#34;]&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">codeInput<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u672a\u627e\u5230\u9a8c\u8bc1\u7801\u8f93\u5165\u6846&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">return<\/span> <span class=\"bp\">false<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"o\">\/\/<\/span> <span class=\"err\">\u586b\u5199\u9a8c\u8bc1\u7801<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">codeInput<\/span><span class=\"o\">.<\/span><span class=\"n\">value<\/span> <span class=\"o\">=<\/span> <span class=\"n\">code<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">codeInput<\/span><span class=\"o\">.<\/span><span class=\"n\">dispatchEvent<\/span><span class=\"p\">(<\/span><span class=\"n\">new<\/span> <span class=\"n\">Event<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;input&#39;<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"n\">bubbles<\/span><span class=\"p\">:<\/span> <span class=\"bp\">true<\/span> <span class=\"p\">}));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"o\">\/\/<\/span> <span class=\"err\">\u70b9\u51fb\u7ee7\u7eed\u6309\u94ae<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">continueBtn<\/span> <span class=\"o\">=<\/span> <span class=\"n\">await<\/span> <span class=\"n\">waitForElement<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;button[type=&#34;submit&#34;]&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">continueBtn<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u672a\u627e\u5230\u7ee7\u7eed\u6309\u94ae&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">return<\/span> <span class=\"bp\">false<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">continueBtn<\/span><span class=\"o\">.<\/span><span class=\"n\">click<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"bp\">true<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u540c\u610f\u670d\u52a1\u6761\u6b3e\u5e76\u5b8c\u6210\u6ce8\u518c<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">async<\/span> <span class=\"n\">function<\/span> <span class=\"n\">completeRegistration<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">checkbox<\/span> <span class=\"o\">=<\/span> <span class=\"n\">await<\/span> <span class=\"n\">waitForElement<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;input[type=&#34;checkbox&#34;]&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">checkbox<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">checkbox<\/span><span class=\"o\">.<\/span><span class=\"n\">checked<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">checkbox<\/span><span class=\"o\">.<\/span><span class=\"n\">click<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u5df2\u81ea\u52a8\u52fe\u9009\u670d\u52a1\u6761\u6b3e\u540c\u610f\u6846&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;success&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u672a\u627e\u5230\u670d\u52a1\u6761\u6b3e\u590d\u9009\u6846&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;warning&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">signupBtn<\/span> <span class=\"o\">=<\/span> <span class=\"n\">await<\/span> <span class=\"n\">waitForElement<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;button:contains(&#34;Sign up&#34;)&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">signupBtn<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u672a\u627e\u5230\u6ce8\u518c\u6309\u94ae&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">return<\/span> <span class=\"bp\">false<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">signupBtn<\/span><span class=\"o\">.<\/span><span class=\"n\">click<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u70b9\u51fb\u6ce8\u518c\u6309\u94ae&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;success&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"bp\">true<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u4e3b\u51fd\u6570<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">async<\/span> <span class=\"n\">function<\/span> <span class=\"n\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"o\">\/\/<\/span> <span class=\"err\">\u53ea\u5728\u6ce8\u518c\u76f8\u5173\u9875\u9762\u8fd0\u884c<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">window<\/span><span class=\"o\">.<\/span><span class=\"n\">location<\/span><span class=\"o\">.<\/span><span class=\"n\">href<\/span><span class=\"o\">.<\/span><span class=\"n\">includes<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;login.augmentcode.com&#39;<\/span><span class=\"p\">)<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"o\">!<\/span><span class=\"n\">window<\/span><span class=\"o\">.<\/span><span class=\"n\">location<\/span><span class=\"o\">.<\/span><span class=\"n\">href<\/span><span class=\"o\">.<\/span><span class=\"n\">includes<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;auth.augmentcode.com&#39;<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u5f53\u524d\u9875\u9762\u4e0d\u662f\u6ce8\u518c\u9875\u9762\uff0c\u811a\u672c\u4e0d\u6267\u884c&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;info&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;===== \u5f00\u59cb\u81ea\u52a8\u6ce8\u518c\u6d41\u7a0b =====&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;info&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"o\">\/\/<\/span> <span class=\"err\">\u68c0\u67e5\u5f53\u524d\u9875\u9762\u72b6\u6001<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">emailInput<\/span> <span class=\"o\">=<\/span> <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">querySelector<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;input[name=&#34;username&#34;]&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">codeInput<\/span> <span class=\"o\">=<\/span> <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">querySelector<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;input[name=&#34;code&#34;]&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">const<\/span> <span class=\"n\">termsCheckbox<\/span> <span class=\"o\">=<\/span> <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">querySelector<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;#terms-of-service-checkbox&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">emailInput<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u68c0\u6d4b\u5230\u90ae\u7bb1\u8f93\u5165\u9875\u9762&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"o\">\/\/<\/span> <span class=\"err\">\u663e\u793a\u6ce8\u518c\u6309\u94ae<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">const<\/span> <span class=\"n\">registerButton<\/span> <span class=\"o\">=<\/span> <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">showRegisterButton<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">registerButton<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">registerButton<\/span><span class=\"o\">.<\/span><span class=\"n\">addEventListener<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;click&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">async<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">try<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">registerButton<\/span><span class=\"o\">.<\/span><span class=\"n\">disabled<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">true<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">registerButton<\/span><span class=\"o\">.<\/span><span class=\"n\">textContent<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;\u5904\u7406\u4e2d...&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">registerButton<\/span><span class=\"o\">.<\/span><span class=\"n\">style<\/span><span class=\"o\">.<\/span><span class=\"n\">backgroundColor<\/span> <span class=\"o\">=<\/span> <span class=\"n\">COLORS<\/span><span class=\"o\">.<\/span><span class=\"n\">warning<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">await<\/span> <span class=\"n\">fillEmail<\/span><span class=\"p\">())<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u90ae\u7bb1\u586b\u5199\u5b8c\u6210\uff0c\u8bf7\u7b49\u5f85\u9875\u9762\u8df3\u8f6c\u5230\u9a8c\u8bc1\u7801\u8f93\u5165...&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;success&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"p\">}<\/span> <span class=\"n\">catch<\/span> <span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u586b\u5199\u90ae\u7bb1\u8fc7\u7a0b\u51fa\u9519: &#39;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"p\">}<\/span> <span class=\"n\">finally<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">registerButton<\/span><span class=\"o\">.<\/span><span class=\"n\">disabled<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">false<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">registerButton<\/span><span class=\"o\">.<\/span><span class=\"n\">textContent<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;\u5f00\u59cb\u6ce8\u518c&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">registerButton<\/span><span class=\"o\">.<\/span><span class=\"n\">style<\/span><span class=\"o\">.<\/span><span class=\"n\">backgroundColor<\/span> <span class=\"o\">=<\/span> <span class=\"n\">COLORS<\/span><span class=\"o\">.<\/span><span class=\"n\">secondary<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">codeInput<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u68c0\u6d4b\u5230\u9a8c\u8bc1\u7801\u8f93\u5165\u9875\u9762\uff0c\u81ea\u52a8\u6267\u884c\u9a8c\u8bc1\u7801\u586b\u5199...&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">try<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">await<\/span> <span class=\"n\">fillVerificationCode<\/span><span class=\"p\">())<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u9a8c\u8bc1\u7801\u586b\u5199\u5b8c\u6210\uff0c\u6b63\u5728\u5b8c\u6210\u6ce8\u518c...&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;success&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">await<\/span> <span class=\"n\">new<\/span> <span class=\"n\">Promise<\/span><span class=\"p\">(<\/span><span class=\"n\">resolve<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"n\">setTimeout<\/span><span class=\"p\">(<\/span><span class=\"n\">resolve<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2000<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">await<\/span> <span class=\"n\">completeRegistration<\/span><span class=\"p\">())<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;===== \u6ce8\u518c\u6d41\u7a0b\u5b8c\u6210\uff01 =====&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;success&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">}<\/span> <span class=\"n\">catch<\/span> <span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u586b\u5199\u9a8c\u8bc1\u7801\u8fc7\u7a0b\u51fa\u9519: &#39;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">termsCheckbox<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u68c0\u6d4b\u5230\u670d\u52a1\u6761\u6b3e\u9875\u9762\uff0c\u81ea\u52a8\u52fe\u9009\u540c\u610f\u6846...&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">try<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">termsCheckbox<\/span><span class=\"o\">.<\/span><span class=\"n\">checked<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">termsCheckbox<\/span><span class=\"o\">.<\/span><span class=\"n\">click<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u5df2\u81ea\u52a8\u52fe\u9009\u670d\u52a1\u6761\u6b3e\u540c\u610f\u6846&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;success&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"o\">\/\/<\/span> <span class=\"err\">\u67e5\u627e\u5e76\u70b9\u51fb\u6ce8\u518c\u6309\u94ae<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"k\">const<\/span> <span class=\"n\">signupBtn<\/span> <span class=\"o\">=<\/span> <span class=\"n\">await<\/span> <span class=\"n\">waitForElement<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;button[type=&#34;button&#34;]&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">signupBtn<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">signupBtn<\/span><span class=\"o\">.<\/span><span class=\"n\">click<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u70b9\u51fb\u6ce8\u518c\u6309\u94ae\u5b8c\u6210&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;success&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">}<\/span> <span class=\"n\">catch<\/span> <span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u52fe\u9009\u670d\u52a1\u6761\u6b3e\u8fc7\u7a0b\u51fa\u9519: &#39;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u65e0\u6cd5\u8bc6\u522b\u5f53\u524d\u9875\u9762\u72b6\u6001&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;warning&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u542f\u52a8\u811a\u672c<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">main<\/span><span class=\"p\">()<\/span><span class=\"o\">.<\/span><span class=\"n\">catch<\/span><span class=\"p\">(<\/span><span class=\"n\">error<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"n\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;\u811a\u672c\u6267\u884c\u51fa\u9519: &#39;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;error&#39;<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">})();<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>","title":"AugmentCode\u81ea\u52a8\u6ce8\u518c"},{"content":" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 \u7f51\u9875\u7ffb\u8bd1 (\u4ec5\u8f93\u51fa\u8bd1\u6587) \u60a8\u662f\u4e00\u4f4d\u4e13\u4e1a\u7684\u7ffb\u8bd1\u52a9\u624b\uff0c\u60a8\u7684\u4efb\u52a1\u662f\u5c06\u7f51\u9875\u5185\u5bb9\u51c6\u786e\u3001\u81ea\u7136\u3001\u4e14\u5bcc\u6709\u611f\u67d3\u529b\u5730\u7ffb\u8bd1\u6210\u76ee\u6807\u8bed\u8a00\u3002\u60a8\u5c24\u5176\u64c5\u957f\u6355\u6349\u539f\u6587\u7684\u60c5\u611f\u548c\u8bed\u6c14\uff0c\u5e76\u5c06\u5176\u81ea\u7136\u5730\u878d\u5165\u5230\u8bd1\u6587\u4e2d\u3002 \u7ffb\u8bd1\u8bf7\u6c42\u6307\u793a: \u8bf7\u5c06\u4ee5\u4e0b {{from}} \u6587\u672c\u7ffb\u8bd1\u6210 {{to}}\u3002 \u60a8\u7684\u8f93\u51fa\u5fc5\u987b\u4ec5\u5305\u542b\u8bd1\u6587\u672c\u8eab\uff0c\u8bf7\u52ff\u5305\u542b\u4efb\u4f55\u524d\u8a00\u3001\u89e3\u91ca\u6216\u5176\u4ed6\u975e\u8bd1\u6587\u5185\u5bb9\u3002 \u7ffb\u8bd1\u8981\u6c42 (\u8bf7\u4e25\u683c\u9075\u5b88): \u8bed\u8a00\u98ce\u683c: \u5730\u9053\u7684\u4e2d\u6587\u6bcd\u8bed\u8005\u65e5\u5e38\u53e3\u8bed\u98ce\u683c\uff0c\u8bd1\u6587 \u81ea\u7136\u6d41\u7545\uff0c\u907f\u514d\u4e66\u9762\u8bed\u548c\u673a\u5668\u7ffb\u8bd1\u75d5\u8ff9\u3002 \u8bed\u6c14\u60c5\u611f: \u7565\u5fae\u975e\u6b63\u5f0f\u7684\u8bed\u6c14\uff0c\u5145\u5206\u4f20\u8fbe\u539f\u6587\u7528\u6237\u7684 \u70ed\u60c5\u548c\u771f\u8bda\u7684\u8d5e\u8d4f \u4e4b\u60c5\u3002 \u8868\u8fbe\u6280\u5de7: \u5de7\u5999\u878d\u5165\u5730\u9053\u7684\u4e2d\u6587\u4fd7\u8bed\u548c\u53e3\u8bed\u5316\u8868\u8fbe (\u4f8b\u5982 \u201c\u538b\u69a8\u201d\u3001\u201c\u5fcd\u75db\u5272\u7231\u201d \u7b49\u98ce\u683c)\uff0c\u4f7f\u8bd1\u6587\u751f\u52a8\u6d3b\u6cfc\uff0c\u8d34\u8fd1\u771f\u5b9e\u5bf9\u8bdd\u3002 \u7ffb\u8bd1\u7b56\u7565: \u907f\u514d\u751f\u786c\u5b57\u9762\u76f4\u8bd1\uff0c\u7406\u89e3\u539f\u6587\u6838\u5fc3\u610f\u601d\u548c\u60c5\u611f\uff0c\u7528\u81ea\u7136\u6d41\u7545\u4e2d\u6587 \u91cd\u65b0\u7ec4\u7ec7\u8868\u8fbe (\u795e\u5f62\u517c\u5907)\u3002 **\u4e13\u6709\u540d\u8bcd\u5904\u7406:** \u5bf9\u4e8e\u82f1\u6587\u539f\u6587\u4e2d\u7684 **\u4ea7\u54c1\u540d\u79f0\u3001\u8f6f\u4ef6\u540d\u79f0\u3001\u6280\u672f\u672f\u8bed\u3001\u6a21\u578b\u540d\u79f0\u3001\u54c1\u724c\u540d\u79f0\u3001\u4ee3\u7801\u6807\u8bc6\u7b26\u6216\u7279\u5b9a\u82f1\u6587\u7f29\u5199** \u7b49\u4e13\u6709\u540d\u8bcd\uff08\u4f8b\u5982 &#34;Cursor&#34;, &#34;Gemini-2.5-pro-exp&#34;, &#34;VS Code&#34;, &#34;API&#34;, &#34;GPT-4&#34;\uff09\uff0c**\u5fc5\u987b\u4fdd\u7559\u5176\u539f\u59cb\u82f1\u6587\u5f62\u5f0f\uff0c\u4e0d\u8fdb\u884c\u7ffb\u8bd1**\u3002\u8bf7\u5c06\u8fd9\u4e9b\u82f1\u6587\u672f\u8bed\u81ea\u7136\u5730\u5d4c\u5165\u5230\u6d41\u7545\u7684\u4e2d\u6587\u8bd1\u6587\u4e2d\u3002 * **\u91cd\u8981\u793a\u4f8b:** \u5982\u679c\u539f\u6587\u662f &#34;Add Gemini-2.5-pro-exp to Cursor&#34;\uff0c\u4e00\u4e2a\u597d\u7684\u7ffb\u8bd1\u5e94\u8be5\u662f\u50cf \u201c\u5feb\u628a Gemini-2.5-pro-exp \u52a0\u5230 Cursor \u91cc\u8bd5\u8bd5\uff01\u201d \u6216 \u201c\u63a8\u8350\u5c06 Gemini-2.5-pro-exp \u96c6\u6210\u5230 Cursor \u4e2d\u201d\uff0c**\u7edd\u4e0d\u80fd** \u7ffb\u8bd1 &#34;Cursor&#34; \u6216 &#34;Gemini-2.5-pro-exp&#34;\u3002 \u8bd1\u6587\u76ee\u6807: \u9ad8\u5ea6\u81ea\u7136\u5730\u9053\u7684\u4e2d\u6587\u53e3\u8bed\u8bd1\u6587\uff0c\u5982\u540c\u771f\u8bda\u7528\u6237\u70ed\u60c5\u63a8\u8350\uff0c\u800c\u975e\u673a\u5668\u7ffb\u8bd1\u3002 \u53ef\u9009\u7f51\u9875\u4e0a\u4e0b\u6587\u4fe1\u606f (\u5982\u6709\uff0c\u8bf7\u53c2\u8003\u4ee5\u63d0\u5347\u7ffb\u8bd1\u8d28\u91cf): {{title_prompt}} (\u7f51\u9875\u6807\u9898\uff0c\u4f8b\u5982: \u201c\u7f51\u9875\u6807\u9898: Cursor \u7528\u6237\u8bc4\u4ef7\u201d) {{summary_prompt}} (\u7f51\u9875\u4e0a\u4e0b\u6587\u6458\u8981\uff0c\u4f8b\u5982: \u201c\u7f51\u9875\u6458\u8981: \u672c\u6587\u603b\u7ed3\u7528\u6237\u5bf9 Cursor \u7f16\u8f91\u5668\u7684\u6b63\u9762\u8bc4\u4ef7\u2026\u201d) {{terms_prompt}} (\u76f8\u5173\u4e13\u4e1a\u672f\u8bed\uff0c\u4f8b\u5982: \u201c\u4e13\u4e1a\u672f\u8bed: IDE, \u4ee3\u7801\u7f16\u8f91\u5668, AI \u52a9\u624b\u2026\u201d) \u5f85\u7ffb\u8bd1\u7684\u6587\u672c\u5185\u5bb9: {{text}} \u8bf7\u52a1\u5fc5\u53ea\u8fd4\u56de\u9ad8\u8d28\u91cf\u3001\u5730\u9053\u7684\u4e2d\u6587\u53e3\u8bed\u5316\u8bd1\u6587\uff01 1 **\u4e13\u6709\u540d\u8bcd\u5904\u7406:** \u5bf9\u4e8e\u82f1\u6587\u539f\u6587\u4e2d\u7684 **\u4ea7\u54c1\u540d\u79f0\u3001\u8f6f\u4ef6\u540d\u79f0\u3001\u6280\u672f\u672f\u8bed\u3001\u6a21\u578b\u540d\u79f0\u3001\u54c1\u724c\u540d\u79f0\u3001\u4ee3\u7801\u6807\u8bc6\u7b26\u6216\u7279\u5b9a\u82f1\u6587\u7f29\u5199** \u7b49\u4e13\u6709\u540d\u8bcd\uff08\u4f8b\u5982 &#34;Cursor&#34;, &#34;Gemini-2.5-pro-exp&#34;, &#34;VS Code&#34;, &#34;API&#34;, &#34;GPT-4&#34;\uff09\uff0c**\u5fc5\u987b\u4fdd\u7559\u5176\u539f\u59cb\u82f1\u6587\u5f62\u5f0f\uff0c\u4e0d\u8fdb\u884c\u7ffb\u8bd1**\u3002\u8bf7\u5c06\u8fd9\u4e9b\u82f1\u6587\u672f\u8bed\u81ea\u7136\u5730\u5d4c\u5165\u5230\u6d41\u7545\u7684\u4e2d\u6587\u8bd1\u6587\u4e2d\u3002 * **\u91cd\u8981\u793a\u4f8b:** \u5982\u679c\u539f\u6587\u662f &#34;Add Gemini-2.5-pro-exp to Cursor&#34;\uff0c\u4e00\u4e2a\u597d\u7684\u7ffb\u8bd1\u5e94\u8be5\u662f\u50cf \u201c\u5feb\u628a Gemini-2.5-pro-exp \u52a0\u5230 Cursor \u91cc\u8bd5\u8bd5\uff01\u201d \u6216 \u201c\u63a8\u8350\u5c06 Gemini-2.5-pro-exp \u96c6\u6210\u5230 Cursor \u4e2d\u201d\uff0c**\u7edd\u4e0d\u80fd** \u7ffb\u8bd1 &#34;Cursor&#34; \u6216 &#34;Gemini-2.5-pro-exp&#34;\u3002 \u9488\u5bf9\u6c89\u6d78\u5f0fMultiple Prompt\u7684\u9009\u9879,\u9700\u8981\u5355\u72ec\u4f18\u5316\u5904\u7406\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \u4f60\u73b0\u5728\u662f\u4e00\u4e2a\u4e13\u4e1a\u7684\u7ffb\u8bd1\u52a9\u624b. **\u6838\u5fc3\u4efb\u52a1:** \u8bf7\u5c06\u63d0\u4f9b\u7684\u7f51\u9875\u5185\u5bb9\u4ece {{from}} \u8bed\u8a00\u51c6\u786e\u3001\u81ea\u7136\u3001\u4e14\u5bcc\u6709\u611f\u67d3\u529b\u5730\u7ffb\u8bd1\u6210 {{to}} \u8bed\u8a00\u3002\u60a8\u7684\u8bd1\u6587\u5e94\u5145\u5206\u6355\u6349\u539f\u6587\u7684\u60c5\u611f\u548c\u8bed\u6c14\u3002 **\u7ffb\u8bd1\u5185\u5bb9\u8981\u6c42 (\u8bf7\u5e94\u7528\u4e8e {{imt_trans_field}} \u5b57\u6bb5\u5185\u7684\u8bd1\u6587):** \u8bf7\u786e\u4fdd\u6240\u6709\u8bd1\u6587\u6bb5\u843d\u90fd\u7b26\u5408\u4ee5\u4e0b\u6807\u51c6\uff1a 1. **\u8bed\u8a00\u98ce\u683c:** \u5730\u9053\u7684\u4e2d\u6587\u6bcd\u8bed\u8005\u65e5\u5e38\u53e3\u8bed\u98ce\u683c\uff0c\u8bd1\u6587\u81ea\u7136\u6d41\u7545\uff0c\u907f\u514d\u4e66\u9762\u8bed\u548c\u673a\u5668\u7ffb\u8bd1\u75d5\u8ff9\u3002 2. **\u8bed\u6c14\u60c5\u611f:** \u7565\u5fae\u975e\u6b63\u5f0f\u7684\u8bed\u6c14\uff0c\u5145\u5206\u4f20\u8fbe\u539f\u6587\u7528\u6237\u7684\u70ed\u60c5\u548c\u771f\u8bda\u7684\u8d5e\u8d4f\u4e4b\u60c5\u3002 3. **\u8868\u8fbe\u6280\u5de7:** \u5de7\u5999\u878d\u5165\u5730\u9053\u7684\u4e2d\u6587\u4fd7\u8bed\u548c\u53e3\u8bed\u5316\u8868\u8fbe (\u4f8b\u5982 &#34;\u538b\u69a8&#34;\u3001&#34;\u5fcd\u75db\u5272\u7231&#34; \u7b49\u98ce\u683c)\uff0c\u4f7f\u8bd1\u6587\u751f\u52a8\u6d3b\u6cfc\uff0c\u8d34\u8fd1\u771f\u5b9e\u5bf9\u8bdd\uff0c\u4f46\u9700\u6ce8\u610f\u9002\u5ea6\u4e0e\u4e0a\u4e0b\u6587\u5339\u914d\u3002 4. **\u7ffb\u8bd1\u7b56\u7565:** \u907f\u514d\u751f\u786c\u5b57\u9762\u76f4\u8bd1\uff0c\u7406\u89e3\u539f\u6587\u6838\u5fc3\u610f\u601d\u548c\u60c5\u611f\uff0c\u7528\u81ea\u7136\u6d41\u7545\u4e2d\u6587\u91cd\u65b0\u7ec4\u7ec7\u8868\u8fbe (\u795e\u5f62\u517c\u5907)\u3002 5. **\u8bd1\u6587\u76ee\u6807:** \u4ea7\u751f\u9ad8\u5ea6\u81ea\u7136\u5730\u9053\u7684\u4e2d\u6587\u53e3\u8bed\u8bd1\u6587\uff0c\u5982\u540c\u771f\u8bda\u7528\u6237\u70ed\u60c5\u63a8\u8350\uff0c\u800c\u975e\u673a\u5668\u7ffb\u8bd1\u3002 **\u91cd\u8981** {{yaml}} \u662f\u6211\u4eec\u7528 yaml \u683c\u5f0f\u5305\u88c5\u7684\u6bb5\u843d\u5185\u5bb9,\u8981\u4fdd\u8bc1\u7ed3\u679c\u91cc\u7684\u6bcf\u4e00\u9879\u90fd\u5fc5\u987b\u5305\u542b &#39;{{imt_trans_field}}&#39; \u5b57\u6bb5\u3002 \u5b57\u5e55\u7ffb\u8bd1\u63d0\u793a\u8bcd\n1 2 3 4 5 6 7 8 9 10 11 \u5c06\u4ee5\u4e0bYAML\u4e2d {{imt_sub_source_field}} \u5b57\u6bb5\u7684 {{from}} \u6587\u672c\u7ffb\u8bd1\u4e3a {{to}}\uff0c\u5e76\u5c06\u7ed3\u679c\u586b\u5165 {{imt_sub_trans_field}} \u5b57\u6bb5\u3002 \u7ffb\u8bd1\u8981\u6c42\uff1a 1. \u98ce\u683c: \u81ea\u7136\u6d41\u7545\u7684\u4e2d\u6587\u53e3\u8bed\u3002\u542c\u8d77\u6765\u50cf\u4e00\u4e2a\u5730\u9053\u7684\u4e2d\u56fd\u4eba\u4f1a\u8bf4\u7684\u8bdd\uff0c\u907f\u514d\u4e66\u9762\u8bed\u548c\u660e\u663e\u7684\u7ffb\u8bd1\u75d5\u8ff9\u3002 2. \u8bed\u6c14: \u51c6\u786e\u6355\u6349\u5e76\u4f20\u8fbe\u539f\u6587\u7684\u8bed\u6c14\u548c\u60c5\u611f\uff08\u4f8b\u5982\uff1a\u601d\u8003\u3001\u611f\u6168\u3001\u575a\u5b9a\u3001\u5e7d\u9ed8\u7b49\uff09\u3002\u8bd1\u6587\u5e94 \u7b80\u6d01\u3001\u81ea\u7136\u3001\u6709\u5206\u91cf\uff0c\u80fd\u5f15\u8d77\u5171\u9e23\u3002 3. \u8868\u8fbe: \u4f18\u5148\u4f7f\u7528\u5730\u9053\u3001\u5e38\u7528\u7684\u4e2d\u6587\u8868\u8fbe\u65b9\u5f0f\u3002\u7406\u89e3\u539f\u6587\u6838\u5fc3\u610f\u601d\u540e\uff0c\u7528\u6700\u8d34\u5207\u81ea\u7136\u7684\u4e2d\u6587\u53bb\u91cd\u8ff0\u3002\u6070\u5f53\u4f7f\u7528\u7b26\u5408\u8bed\u5883\u548c\u4eba\u7269\u8eab\u4efd\u7684\u53e3\u8bed\u5316\u8868\u8fbe\uff08\u5982\u4f8b\uff1a\u201c\u8981\u4e48...\u8981\u4e48...\u201d\u8fd9\u79cd\u81ea\u7136\u7ed3\u6784\uff09\uff0c\u4f7f\u8bd1\u6587\u751f\u52a8\uff0c\u4f46\u907f\u514d\u4e3a\u4e86\u53e3\u8bed\u5316\u800c\u53e3\u8bed\u5316\uff0c\u4e0d\u751f\u786c\u6dfb\u52a0\u4e0d\u5fc5\u8981\u7684\u4fd7\u8bed\u6216\u7f51\u7edc\u7528\u8bed\u3002 4. \u7b56\u7565: \u610f\u5408\u795e\u4f1a\u3002\u6df1\u5165\u7406\u89e3\u539f\u6587\u7684\u5185\u5728\u903b\u8f91\u548c\u60c5\u611f\u8272\u5f69\uff0c\u8fdb\u884c\u521b\u9020\u6027\u7684\u91cd\u7ec4\u8868\u8fbe\uff0c\u8ffd\u6c42\u795e\u4f3c\u800c\u975e\u5f62\u4f3c\uff0c\u907f\u514d\u9010\u5b57\u786c\u8bd1\u3002 \u8f93\u51fa\u683c\u5f0f\uff1a \u4e25\u683c\u4fdd\u6301 \u539f\u59cbYAML\u7ed3\u6784\u3002 \u4ec5\u8f93\u51fa \u5305\u542b\u8bd1\u6587\u7684\u5b8c\u6574YAML\u5185\u5bb9\u3002 YAML\u5185\u5bb9\uff1a {{yaml}} ","permalink":"https:\/\/my.rongyiapi.com\/posts\/%E6%B2%89%E6%B5%B8%E5%BC%8F%E7%BF%BB%E8%AF%91%E6%8F%92%E4%BB%B6%E5%9C%B0%E9%81%93%E4%B8%AD%E6%96%87%E7%BF%BB%E8%AF%91%E6%8F%90%E7%A4%BA%E8%AF%8D\/","summary":"<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a class=\"lnlinks\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a class=\"lnlinks\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a class=\"lnlinks\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a class=\"lnlinks\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a class=\"lnlinks\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a class=\"lnlinks\" href=\"#hl-0-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a class=\"lnlinks\" href=\"#hl-0-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-13\"><a class=\"lnlinks\" href=\"#hl-0-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-14\"><a class=\"lnlinks\" href=\"#hl-0-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-15\"><a class=\"lnlinks\" href=\"#hl-0-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-16\"><a class=\"lnlinks\" href=\"#hl-0-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-17\"><a class=\"lnlinks\" href=\"#hl-0-17\">17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-18\"><a class=\"lnlinks\" href=\"#hl-0-18\">18<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-19\"><a class=\"lnlinks\" href=\"#hl-0-19\">19<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-20\"><a class=\"lnlinks\" href=\"#hl-0-20\">20<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">\u7f51\u9875\u7ffb\u8bd1 (\u4ec5\u8f93\u51fa\u8bd1\u6587)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u60a8\u662f\u4e00\u4f4d\u4e13\u4e1a\u7684\u7ffb\u8bd1\u52a9\u624b\uff0c\u60a8\u7684\u4efb\u52a1\u662f\u5c06\u7f51\u9875\u5185\u5bb9\u51c6\u786e\u3001\u81ea\u7136\u3001\u4e14\u5bcc\u6709\u611f\u67d3\u529b\u5730\u7ffb\u8bd1\u6210\u76ee\u6807\u8bed\u8a00\u3002\u60a8\u5c24\u5176\u64c5\u957f\u6355\u6349\u539f\u6587\u7684\u60c5\u611f\u548c\u8bed\u6c14\uff0c\u5e76\u5c06\u5176\u81ea\u7136\u5730\u878d\u5165\u5230\u8bd1\u6587\u4e2d\u3002\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u7ffb\u8bd1\u8bf7\u6c42\u6307\u793a:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u8bf7\u5c06\u4ee5\u4e0b {{from}} \u6587\u672c\u7ffb\u8bd1\u6210 {{to}}\u3002 \u60a8\u7684\u8f93\u51fa\u5fc5\u987b\u4ec5\u5305\u542b\u8bd1\u6587\u672c\u8eab\uff0c\u8bf7\u52ff\u5305\u542b\u4efb\u4f55\u524d\u8a00\u3001\u89e3\u91ca\u6216\u5176\u4ed6\u975e\u8bd1\u6587\u5185\u5bb9\u3002\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u7ffb\u8bd1\u8981\u6c42 (\u8bf7\u4e25\u683c\u9075\u5b88):\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    \u8bed\u8a00\u98ce\u683c: \u5730\u9053\u7684\u4e2d\u6587\u6bcd\u8bed\u8005\u65e5\u5e38\u53e3\u8bed\u98ce\u683c\uff0c\u8bd1\u6587 \u81ea\u7136\u6d41\u7545\uff0c\u907f\u514d\u4e66\u9762\u8bed\u548c\u673a\u5668\u7ffb\u8bd1\u75d5\u8ff9\u3002\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    \u8bed\u6c14\u60c5\u611f: \u7565\u5fae\u975e\u6b63\u5f0f\u7684\u8bed\u6c14\uff0c\u5145\u5206\u4f20\u8fbe\u539f\u6587\u7528\u6237\u7684 \u70ed\u60c5\u548c\u771f\u8bda\u7684\u8d5e\u8d4f \u4e4b\u60c5\u3002\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    \u8868\u8fbe\u6280\u5de7: \u5de7\u5999\u878d\u5165\u5730\u9053\u7684\u4e2d\u6587\u4fd7\u8bed\u548c\u53e3\u8bed\u5316\u8868\u8fbe (\u4f8b\u5982 \u201c\u538b\u69a8\u201d\u3001\u201c\u5fcd\u75db\u5272\u7231\u201d \u7b49\u98ce\u683c)\uff0c\u4f7f\u8bd1\u6587\u751f\u52a8\u6d3b\u6cfc\uff0c\u8d34\u8fd1\u771f\u5b9e\u5bf9\u8bdd\u3002\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    \u7ffb\u8bd1\u7b56\u7565: \u907f\u514d\u751f\u786c\u5b57\u9762\u76f4\u8bd1\uff0c\u7406\u89e3\u539f\u6587\u6838\u5fc3\u610f\u601d\u548c\u60c5\u611f\uff0c\u7528\u81ea\u7136\u6d41\u7545\u4e2d\u6587 \u91cd\u65b0\u7ec4\u7ec7\u8868\u8fbe (\u795e\u5f62\u517c\u5907)\u3002\n<\/span><\/span><span class=\"line\"><span class=\"cl\">**\u4e13\u6709\u540d\u8bcd\u5904\u7406:** \u5bf9\u4e8e\u82f1\u6587\u539f\u6587\u4e2d\u7684 **\u4ea7\u54c1\u540d\u79f0\u3001\u8f6f\u4ef6\u540d\u79f0\u3001\u6280\u672f\u672f\u8bed\u3001\u6a21\u578b\u540d\u79f0\u3001\u54c1\u724c\u540d\u79f0\u3001\u4ee3\u7801\u6807\u8bc6\u7b26\u6216\u7279\u5b9a\u82f1\u6587\u7f29\u5199** \u7b49\u4e13\u6709\u540d\u8bcd\uff08\u4f8b\u5982 &#34;Cursor&#34;, &#34;Gemini-2.5-pro-exp&#34;, &#34;VS Code&#34;, &#34;API&#34;, &#34;GPT-4&#34;\uff09\uff0c**\u5fc5\u987b\u4fdd\u7559\u5176\u539f\u59cb\u82f1\u6587\u5f62\u5f0f\uff0c\u4e0d\u8fdb\u884c\u7ffb\u8bd1**\u3002\u8bf7\u5c06\u8fd9\u4e9b\u82f1\u6587\u672f\u8bed\u81ea\u7136\u5730\u5d4c\u5165\u5230\u6d41\u7545\u7684\u4e2d\u6587\u8bd1\u6587\u4e2d\u3002 * **\u91cd\u8981\u793a\u4f8b:** \u5982\u679c\u539f\u6587\u662f &#34;Add Gemini-2.5-pro-exp to Cursor&#34;\uff0c\u4e00\u4e2a\u597d\u7684\u7ffb\u8bd1\u5e94\u8be5\u662f\u50cf \u201c\u5feb\u628a Gemini-2.5-pro-exp \u52a0\u5230 Cursor \u91cc\u8bd5\u8bd5\uff01\u201d \u6216 \u201c\u63a8\u8350\u5c06 Gemini-2.5-pro-exp \u96c6\u6210\u5230 Cursor \u4e2d\u201d\uff0c**\u7edd\u4e0d\u80fd** \u7ffb\u8bd1 &#34;Cursor&#34; \u6216 &#34;Gemini-2.5-pro-exp&#34;\u3002\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    \u8bd1\u6587\u76ee\u6807: \u9ad8\u5ea6\u81ea\u7136\u5730\u9053\u7684\u4e2d\u6587\u53e3\u8bed\u8bd1\u6587\uff0c\u5982\u540c\u771f\u8bda\u7528\u6237\u70ed\u60c5\u63a8\u8350\uff0c\u800c\u975e\u673a\u5668\u7ffb\u8bd1\u3002\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    \u53ef\u9009\u7f51\u9875\u4e0a\u4e0b\u6587\u4fe1\u606f (\u5982\u6709\uff0c\u8bf7\u53c2\u8003\u4ee5\u63d0\u5347\u7ffb\u8bd1\u8d28\u91cf):\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    {{title_prompt}} (\u7f51\u9875\u6807\u9898\uff0c\u4f8b\u5982: \u201c\u7f51\u9875\u6807\u9898: Cursor \u7528\u6237\u8bc4\u4ef7\u201d)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    {{summary_prompt}} (\u7f51\u9875\u4e0a\u4e0b\u6587\u6458\u8981\uff0c\u4f8b\u5982: \u201c\u7f51\u9875\u6458\u8981: \u672c\u6587\u603b\u7ed3\u7528\u6237\u5bf9 Cursor \u7f16\u8f91\u5668\u7684\u6b63\u9762\u8bc4\u4ef7\u2026\u201d)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    {{terms_prompt}} (\u76f8\u5173\u4e13\u4e1a\u672f\u8bed\uff0c\u4f8b\u5982: \u201c\u4e13\u4e1a\u672f\u8bed: IDE, \u4ee3\u7801\u7f16\u8f91\u5668, AI \u52a9\u624b\u2026\u201d)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u5f85\u7ffb\u8bd1\u7684\u6587\u672c\u5185\u5bb9:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">{{text}}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u8bf7\u52a1\u5fc5\u53ea\u8fd4\u56de\u9ad8\u8d28\u91cf\u3001\u5730\u9053\u7684\u4e2d\u6587\u53e3\u8bed\u5316\u8bd1\u6587\uff01\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><!-- raw HTML omitted -->\n<!-- raw HTML omitted -->\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a class=\"lnlinks\" href=\"#hl-1-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">**\u4e13\u6709\u540d\u8bcd\u5904\u7406:** \u5bf9\u4e8e\u82f1\u6587\u539f\u6587\u4e2d\u7684 **\u4ea7\u54c1\u540d\u79f0\u3001\u8f6f\u4ef6\u540d\u79f0\u3001\u6280\u672f\u672f\u8bed\u3001\u6a21\u578b\u540d\u79f0\u3001\u54c1\u724c\u540d\u79f0\u3001\u4ee3\u7801\u6807\u8bc6\u7b26\u6216\u7279\u5b9a\u82f1\u6587\u7f29\u5199** \u7b49\u4e13\u6709\u540d\u8bcd\uff08\u4f8b\u5982 &#34;Cursor&#34;, &#34;Gemini-2.5-pro-exp&#34;, &#34;VS Code&#34;, &#34;API&#34;, &#34;GPT-4&#34;\uff09\uff0c**\u5fc5\u987b\u4fdd\u7559\u5176\u539f\u59cb\u82f1\u6587\u5f62\u5f0f\uff0c\u4e0d\u8fdb\u884c\u7ffb\u8bd1**\u3002\u8bf7\u5c06\u8fd9\u4e9b\u82f1\u6587\u672f\u8bed\u81ea\u7136\u5730\u5d4c\u5165\u5230\u6d41\u7545\u7684\u4e2d\u6587\u8bd1\u6587\u4e2d\u3002 * **\u91cd\u8981\u793a\u4f8b:** \u5982\u679c\u539f\u6587\u662f &#34;Add Gemini-2.5-pro-exp to Cursor&#34;\uff0c\u4e00\u4e2a\u597d\u7684\u7ffb\u8bd1\u5e94\u8be5\u662f\u50cf \u201c\u5feb\u628a Gemini-2.5-pro-exp \u52a0\u5230 Cursor \u91cc\u8bd5\u8bd5\uff01\u201d \u6216 \u201c\u63a8\u8350\u5c06 Gemini-2.5-pro-exp \u96c6\u6210\u5230 Cursor \u4e2d\u201d\uff0c**\u7edd\u4e0d\u80fd** \u7ffb\u8bd1 &#34;Cursor&#34; \u6216 &#34;Gemini-2.5-pro-exp&#34;\u3002\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u9488\u5bf9\u6c89\u6d78\u5f0fMultiple Prompt\u7684\u9009\u9879,\u9700\u8981\u5355\u72ec\u4f18\u5316\u5904\u7406<\/p>","title":"\u6c89\u6d78\u5f0f\u7ffb\u8bd1\u63d2\u4ef6\u5730\u9053\u4e2d\u6587\u7ffb\u8bd1\u63d0\u793a\u8bcd"},{"content":" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 \/\/ ==UserScript== \/\/ @name \u5141\u8bb8\u8f93\u5165\u6846\u7c98\u8d34\u5185\u5bb9 \/\/ @namespace http:\/\/tampermonkey.net\/ \/\/ @version 0.1 \/\/ @description \u5728\u6240\u6709\u7f51\u9875\u4e0a\u5141\u8bb8\u8f93\u5165\u6846\u7c98\u8d34\u5185\u5bb9 \/\/ @author \u60a8\u7684\u540d\u5b57 \/\/ @match https:\/\/*\/* \/\/ @grant none \/\/ ==\/UserScript== (function() { &#39;use strict&#39;; \/\/ \u65b9\u6cd5 1: \u79fb\u9664 oncopy, oncut, onpaste \u4e8b\u4ef6 document.body.setAttribute(&#39;oncopy&#39;, &#39;&#39;); document.body.setAttribute(&#39;oncut&#39;, &#39;&#39;); document.body.setAttribute(&#39;onpaste&#39;, &#39;&#39;); \/\/ \u65b9\u6cd5 2: \u79fb\u9664\u6240\u6709\u5143\u7d20\u7684\u4e8b\u4ef6\u76d1\u542c\u5668 const removeEventListeners = (el) =&gt; { el.removeAttribute(&#39;onpaste&#39;); el.removeAttribute(&#39;oncopy&#39;); el.removeAttribute(&#39;oncut&#39;); }; \/\/ \u904d\u5386\u6240\u6709\u5143\u7d20 const allElements = document.querySelectorAll(&#39;*&#39;); allElements.forEach(el =&gt; removeEventListeners(el)); \/\/ \u65b9\u6cd5 3: \u4f7f\u7528\u4e8b\u4ef6\u6355\u83b7\u9636\u6bb5\u6765\u8986\u76d6\u4e8b\u4ef6 document.addEventListener(&#39;copy&#39;, (e) =&gt; { e.stopPropagation(); }, true); document.addEventListener(&#39;paste&#39;, (e) =&gt; { e.stopPropagation(); }, true); document.addEventListener(&#39;cut&#39;, (e) =&gt; { e.stopPropagation(); }, true); \/\/ \u65b9\u6cd5 4: \u66f4\u6539\u6837\u5f0f\uff0c\u5c1d\u8bd5\u89e3\u9664\u9650\u5236 const styles = `*:not(input):not(textarea) { -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; }`; const styleSheet = document.createElement(&#34;style&#34;); styleSheet.type = &#34;text\/css&#34;; styleSheet.innerText = styles; document.head.appendChild(styleSheet); \/\/ \u65b9\u6cd5 5: \u89e3\u9664\u53ef\u80fd\u88ab\u8bbe\u7f6e\u7684\u53ea\u8bfb\u5c5e\u6027 const inputs = document.querySelectorAll(&#39;input, textarea&#39;); inputs.forEach(input =&gt; { input.removeAttribute(&#39;readonly&#39;); input.removeAttribute(&#39;disabled&#39;); }); \/\/ \u65b9\u6cd5 6: \u4f7f\u7528\u5b9a\u65f6\u5668\u4e0d\u65ad\u5c1d\u8bd5\u89e3\u9664\u9650\u5236 setInterval(() =&gt; { allElements.forEach(el =&gt; removeEventListeners(el)); inputs.forEach(input =&gt; { input.removeAttribute(&#39;readonly&#39;); input.removeAttribute(&#39;disabled&#39;); }); }, 1000); \/\/ \u6bcf\u79d2\u5c1d\u8bd5\u4e00\u6b21 })(); ","permalink":"https:\/\/my.rongyiapi.com\/posts\/%E6%B2%B9%E7%8C%B4-%E5%85%81%E8%AE%B8%E8%BE%93%E5%85%A5%E6%A1%86%E7%B2%98%E8%B4%B4%E5%86%85%E5%AE%B9\/","summary":"<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a class=\"lnlinks\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a class=\"lnlinks\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a class=\"lnlinks\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a class=\"lnlinks\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a class=\"lnlinks\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a class=\"lnlinks\" href=\"#hl-0-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a class=\"lnlinks\" href=\"#hl-0-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-13\"><a class=\"lnlinks\" href=\"#hl-0-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-14\"><a class=\"lnlinks\" href=\"#hl-0-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-15\"><a class=\"lnlinks\" href=\"#hl-0-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-16\"><a class=\"lnlinks\" href=\"#hl-0-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-17\"><a class=\"lnlinks\" href=\"#hl-0-17\">17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-18\"><a class=\"lnlinks\" href=\"#hl-0-18\">18<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-19\"><a class=\"lnlinks\" href=\"#hl-0-19\">19<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-20\"><a class=\"lnlinks\" href=\"#hl-0-20\">20<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-21\"><a class=\"lnlinks\" href=\"#hl-0-21\">21<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-22\"><a class=\"lnlinks\" href=\"#hl-0-22\">22<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-23\"><a class=\"lnlinks\" href=\"#hl-0-23\">23<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-24\"><a class=\"lnlinks\" href=\"#hl-0-24\">24<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-25\"><a class=\"lnlinks\" href=\"#hl-0-25\">25<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-26\"><a class=\"lnlinks\" href=\"#hl-0-26\">26<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-27\"><a class=\"lnlinks\" href=\"#hl-0-27\">27<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-28\"><a class=\"lnlinks\" href=\"#hl-0-28\">28<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-29\"><a class=\"lnlinks\" href=\"#hl-0-29\">29<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-30\"><a class=\"lnlinks\" href=\"#hl-0-30\">30<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-31\"><a class=\"lnlinks\" href=\"#hl-0-31\">31<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-32\"><a class=\"lnlinks\" href=\"#hl-0-32\">32<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-33\"><a class=\"lnlinks\" href=\"#hl-0-33\">33<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-34\"><a class=\"lnlinks\" href=\"#hl-0-34\">34<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-35\"><a class=\"lnlinks\" href=\"#hl-0-35\">35<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-36\"><a class=\"lnlinks\" href=\"#hl-0-36\">36<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-37\"><a class=\"lnlinks\" href=\"#hl-0-37\">37<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-38\"><a class=\"lnlinks\" href=\"#hl-0-38\">38<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-39\"><a class=\"lnlinks\" href=\"#hl-0-39\">39<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-40\"><a class=\"lnlinks\" href=\"#hl-0-40\">40<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-41\"><a class=\"lnlinks\" href=\"#hl-0-41\">41<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-42\"><a class=\"lnlinks\" href=\"#hl-0-42\">42<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-43\"><a class=\"lnlinks\" href=\"#hl-0-43\">43<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-44\"><a class=\"lnlinks\" href=\"#hl-0-44\">44<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-45\"><a class=\"lnlinks\" href=\"#hl-0-45\">45<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-46\"><a class=\"lnlinks\" href=\"#hl-0-46\">46<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-47\"><a class=\"lnlinks\" href=\"#hl-0-47\">47<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-48\"><a class=\"lnlinks\" href=\"#hl-0-48\">48<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-49\"><a class=\"lnlinks\" href=\"#hl-0-49\">49<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-50\"><a class=\"lnlinks\" href=\"#hl-0-50\">50<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-51\"><a class=\"lnlinks\" href=\"#hl-0-51\">51<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-52\"><a class=\"lnlinks\" href=\"#hl-0-52\">52<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-53\"><a class=\"lnlinks\" href=\"#hl-0-53\">53<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-54\"><a class=\"lnlinks\" href=\"#hl-0-54\">54<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-55\"><a class=\"lnlinks\" href=\"#hl-0-55\">55<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-56\"><a class=\"lnlinks\" href=\"#hl-0-56\">56<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-57\"><a class=\"lnlinks\" href=\"#hl-0-57\">57<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-58\"><a class=\"lnlinks\" href=\"#hl-0-58\">58<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-59\"><a class=\"lnlinks\" href=\"#hl-0-59\">59<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-60\"><a class=\"lnlinks\" href=\"#hl-0-60\">60<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-61\"><a class=\"lnlinks\" href=\"#hl-0-61\">61<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-62\"><a class=\"lnlinks\" href=\"#hl-0-62\">62<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-63\"><a class=\"lnlinks\" href=\"#hl-0-63\">63<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-64\"><a class=\"lnlinks\" href=\"#hl-0-64\">64<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-gdscript3\" data-lang=\"gdscript3\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"o\">==<\/span><span class=\"n\">UserScript<\/span><span class=\"o\">==<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">name<\/span>         <span class=\"err\">\u5141\u8bb8\u8f93\u5165\u6846\u7c98\u8d34\u5185\u5bb9<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">namespace<\/span>    <span class=\"n\">http<\/span><span class=\"p\">:<\/span><span class=\"o\">\/\/<\/span><span class=\"n\">tampermonkey<\/span><span class=\"o\">.<\/span><span class=\"n\">net<\/span><span class=\"o\">\/<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">version<\/span>      <span class=\"mf\">0.1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">description<\/span>  <span class=\"err\">\u5728\u6240\u6709\u7f51\u9875\u4e0a\u5141\u8bb8\u8f93\u5165\u6846\u7c98\u8d34\u5185\u5bb9<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">author<\/span>       <span class=\"err\">\u60a8\u7684\u540d\u5b57<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">match<\/span>        <span class=\"n\">https<\/span><span class=\"p\">:<\/span><span class=\"o\">\/\/*\/*<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"err\">@<\/span><span class=\"n\">grant<\/span>        <span class=\"n\">none<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span> <span class=\"o\">==\/<\/span><span class=\"n\">UserScript<\/span><span class=\"o\">==<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">(<\/span><span class=\"n\">function<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s1\">&#39;use strict&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u65b9\u6cd5<\/span> <span class=\"mi\">1<\/span><span class=\"p\">:<\/span> <span class=\"err\">\u79fb\u9664<\/span> <span class=\"n\">oncopy<\/span><span class=\"p\">,<\/span> <span class=\"n\">oncut<\/span><span class=\"p\">,<\/span> <span class=\"n\">onpaste<\/span> <span class=\"err\">\u4e8b\u4ef6<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">body<\/span><span class=\"o\">.<\/span><span class=\"n\">setAttribute<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;oncopy&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">body<\/span><span class=\"o\">.<\/span><span class=\"n\">setAttribute<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;oncut&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">body<\/span><span class=\"o\">.<\/span><span class=\"n\">setAttribute<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;onpaste&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u65b9\u6cd5<\/span> <span class=\"mi\">2<\/span><span class=\"p\">:<\/span> <span class=\"err\">\u79fb\u9664\u6240\u6709\u5143\u7d20\u7684\u4e8b\u4ef6\u76d1\u542c\u5668<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">const<\/span> <span class=\"n\">removeEventListeners<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"n\">el<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">el<\/span><span class=\"o\">.<\/span><span class=\"n\">removeAttribute<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;onpaste&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">el<\/span><span class=\"o\">.<\/span><span class=\"n\">removeAttribute<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;oncopy&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">el<\/span><span class=\"o\">.<\/span><span class=\"n\">removeAttribute<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;oncut&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u904d\u5386\u6240\u6709\u5143\u7d20<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">const<\/span> <span class=\"n\">allElements<\/span> <span class=\"o\">=<\/span> <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">querySelectorAll<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;*&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">allElements<\/span><span class=\"o\">.<\/span><span class=\"n\">forEach<\/span><span class=\"p\">(<\/span><span class=\"n\">el<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"n\">removeEventListeners<\/span><span class=\"p\">(<\/span><span class=\"n\">el<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u65b9\u6cd5<\/span> <span class=\"mi\">3<\/span><span class=\"p\">:<\/span> <span class=\"err\">\u4f7f\u7528\u4e8b\u4ef6\u6355\u83b7\u9636\u6bb5\u6765\u8986\u76d6\u4e8b\u4ef6<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">addEventListener<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;copy&#39;<\/span><span class=\"p\">,<\/span> <span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span> <span class=\"n\">e<\/span><span class=\"o\">.<\/span><span class=\"n\">stopPropagation<\/span><span class=\"p\">();<\/span> <span class=\"p\">},<\/span> <span class=\"bp\">true<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">addEventListener<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;paste&#39;<\/span><span class=\"p\">,<\/span> <span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span> <span class=\"n\">e<\/span><span class=\"o\">.<\/span><span class=\"n\">stopPropagation<\/span><span class=\"p\">();<\/span> <span class=\"p\">},<\/span> <span class=\"bp\">true<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">addEventListener<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;cut&#39;<\/span><span class=\"p\">,<\/span> <span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span> <span class=\"n\">e<\/span><span class=\"o\">.<\/span><span class=\"n\">stopPropagation<\/span><span class=\"p\">();<\/span> <span class=\"p\">},<\/span> <span class=\"bp\">true<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u65b9\u6cd5<\/span> <span class=\"mi\">4<\/span><span class=\"p\">:<\/span> <span class=\"err\">\u66f4\u6539\u6837\u5f0f\uff0c\u5c1d\u8bd5\u89e3\u9664\u9650\u5236<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">const<\/span> <span class=\"n\">styles<\/span> <span class=\"o\">=<\/span> <span class=\"err\">`<\/span><span class=\"o\">*<\/span><span class=\"p\">:<\/span><span class=\"ow\">not<\/span><span class=\"p\">(<\/span><span class=\"n\">input<\/span><span class=\"p\">):<\/span><span class=\"ow\">not<\/span><span class=\"p\">(<\/span><span class=\"n\">textarea<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"o\">-<\/span><span class=\"n\">webkit<\/span><span class=\"o\">-<\/span><span class=\"n\">user<\/span><span class=\"o\">-<\/span><span class=\"n\">select<\/span><span class=\"p\">:<\/span> <span class=\"n\">text<\/span> <span class=\"o\">!<\/span><span class=\"n\">important<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"o\">-<\/span><span class=\"n\">moz<\/span><span class=\"o\">-<\/span><span class=\"n\">user<\/span><span class=\"o\">-<\/span><span class=\"n\">select<\/span><span class=\"p\">:<\/span> <span class=\"n\">text<\/span> <span class=\"o\">!<\/span><span class=\"n\">important<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"o\">-<\/span><span class=\"n\">ms<\/span><span class=\"o\">-<\/span><span class=\"n\">user<\/span><span class=\"o\">-<\/span><span class=\"n\">select<\/span><span class=\"p\">:<\/span> <span class=\"n\">text<\/span> <span class=\"o\">!<\/span><span class=\"n\">important<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">user<\/span><span class=\"o\">-<\/span><span class=\"n\">select<\/span><span class=\"p\">:<\/span> <span class=\"n\">text<\/span> <span class=\"o\">!<\/span><span class=\"n\">important<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span><span class=\"err\">`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">const<\/span> <span class=\"n\">styleSheet<\/span> <span class=\"o\">=<\/span> <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">createElement<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;style&#34;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">styleSheet<\/span><span class=\"o\">.<\/span><span class=\"n\">type<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;text\/css&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">styleSheet<\/span><span class=\"o\">.<\/span><span class=\"n\">innerText<\/span> <span class=\"o\">=<\/span> <span class=\"n\">styles<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">head<\/span><span class=\"o\">.<\/span><span class=\"n\">appendChild<\/span><span class=\"p\">(<\/span><span class=\"n\">styleSheet<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u65b9\u6cd5<\/span> <span class=\"mi\">5<\/span><span class=\"p\">:<\/span> <span class=\"err\">\u89e3\u9664\u53ef\u80fd\u88ab\u8bbe\u7f6e\u7684\u53ea\u8bfb\u5c5e\u6027<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">const<\/span> <span class=\"n\">inputs<\/span> <span class=\"o\">=<\/span> <span class=\"n\">document<\/span><span class=\"o\">.<\/span><span class=\"n\">querySelectorAll<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;input, textarea&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">inputs<\/span><span class=\"o\">.<\/span><span class=\"n\">forEach<\/span><span class=\"p\">(<\/span><span class=\"n\">input<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">input<\/span><span class=\"o\">.<\/span><span class=\"n\">removeAttribute<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;readonly&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">input<\/span><span class=\"o\">.<\/span><span class=\"n\">removeAttribute<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;disabled&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">\/\/<\/span> <span class=\"err\">\u65b9\u6cd5<\/span> <span class=\"mi\">6<\/span><span class=\"p\">:<\/span> <span class=\"err\">\u4f7f\u7528\u5b9a\u65f6\u5668\u4e0d\u65ad\u5c1d\u8bd5\u89e3\u9664\u9650\u5236<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">setInterval<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">allElements<\/span><span class=\"o\">.<\/span><span class=\"n\">forEach<\/span><span class=\"p\">(<\/span><span class=\"n\">el<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"n\">removeEventListeners<\/span><span class=\"p\">(<\/span><span class=\"n\">el<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">inputs<\/span><span class=\"o\">.<\/span><span class=\"n\">forEach<\/span><span class=\"p\">(<\/span><span class=\"n\">input<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">input<\/span><span class=\"o\">.<\/span><span class=\"n\">removeAttribute<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;readonly&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">input<\/span><span class=\"o\">.<\/span><span class=\"n\">removeAttribute<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;disabled&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">},<\/span> <span class=\"mi\">1000<\/span><span class=\"p\">);<\/span> <span class=\"o\">\/\/<\/span> <span class=\"err\">\u6bcf\u79d2\u5c1d\u8bd5\u4e00\u6b21<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">})();<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>","title":"\u6cb9\u7334 \u5141\u8bb8\u8f93\u5165\u6846\u7c98\u8d34\u5185\u5bb9"},{"content":" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 &#34;&#34;&#34; FastMCP\u56fe\u7247\u5de5\u5177\u793a\u4f8b \u8fd9\u4e2a\u793a\u4f8b\u6f14\u793a\u5982\u4f55\u5728FastMCP\u4e2d\u521b\u5efa\u8fd4\u56de\u56fe\u50cf\u7684\u5de5\u5177 &#34;&#34;&#34; from fastmcp import FastMCP, Image from typing import Optional, List, Dict, Any from PIL import Image as PILImage from PIL import ImageDraw, ImageFont import os import io import base64 # \u521b\u5efaFastMCP\u5b9e\u4f8b mcp = FastMCP(name=&#34;\u56fe\u7247\u5904\u7406\u670d\u52a1&#34;) @mcp.tool() def image_to_base64(image_path: str) -&gt; Image: &#34;&#34;&#34; \u8bfb\u53d6\u6307\u5b9a\u8def\u5f84\u7684\u56fe\u7247\uff0c\u5e76\u8fd4\u56de\u4e00\u4e2a\u8868\u793a\u8be5\u56fe\u7247\u7684 fastmcp.Image \u5bf9\u8c61\uff0c\u4f7f\u7528\u5176\u539f\u59cb\u6570\u636e\u548c\u68c0\u6d4b\u5230\u7684\u683c\u5f0f\u3002 Args: image_path: \u56fe\u7247\u6587\u4ef6\u7684\u8def\u5f84\u3002 &#34;&#34;&#34; if not os.path.exists(image_path): raise FileNotFoundError(f&#34;\u56fe\u7247\u6587\u4ef6 &#39;{image_path}&#39; \u4e0d\u5b58\u5728&#34;) # Open with PIL to get format, then read raw data pil_img = PILImage.open(image_path) # Use PIL&#39;s detected format, defaulting to PNG if not found (as in resize_image) # Format should be lowercase for fastmcp.Image constructor based on generate_image example (format=&#34;png&#34;) img_format = (pil_img.format or &#34;PNG&#34;).lower() with open(image_path, &#34;rb&#34;) as f: image_data = f.read() # The old mime_type and base64_str logic is no longer needed here for constructor # \u8fd4\u56de fastmcp.Image \u5bf9\u8c61\uff0c\u4f7f\u7528\u539f\u59cb\u56fe\u50cf\u6570\u636e\u548c\u683c\u5f0f return Image(data=image_data, format=img_format) if __name__ == &#34;__main__&#34;: print(&#34;\\n\u542f\u52a8FastMCP\u56fe\u7247\u5904\u7406\u670d\u52a1\u5668...&#34;) mcp.run() ","permalink":"https:\/\/my.rongyiapi.com\/posts\/python--mcp%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%94%E5%9B%9E%E5%9B%BE%E7%89%87%E4%BE%8B%E5%AD%90\/","summary":"<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a class=\"lnlinks\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a class=\"lnlinks\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a class=\"lnlinks\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a class=\"lnlinks\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a class=\"lnlinks\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a class=\"lnlinks\" href=\"#hl-0-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a class=\"lnlinks\" href=\"#hl-0-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-13\"><a class=\"lnlinks\" href=\"#hl-0-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-14\"><a class=\"lnlinks\" href=\"#hl-0-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-15\"><a class=\"lnlinks\" href=\"#hl-0-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-16\"><a class=\"lnlinks\" href=\"#hl-0-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-17\"><a class=\"lnlinks\" href=\"#hl-0-17\">17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-18\"><a class=\"lnlinks\" href=\"#hl-0-18\">18<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-19\"><a class=\"lnlinks\" href=\"#hl-0-19\">19<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-20\"><a class=\"lnlinks\" href=\"#hl-0-20\">20<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-21\"><a class=\"lnlinks\" href=\"#hl-0-21\">21<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-22\"><a class=\"lnlinks\" href=\"#hl-0-22\">22<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-23\"><a class=\"lnlinks\" href=\"#hl-0-23\">23<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-24\"><a class=\"lnlinks\" href=\"#hl-0-24\">24<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-25\"><a class=\"lnlinks\" href=\"#hl-0-25\">25<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-26\"><a class=\"lnlinks\" href=\"#hl-0-26\">26<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-27\"><a class=\"lnlinks\" href=\"#hl-0-27\">27<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-28\"><a class=\"lnlinks\" href=\"#hl-0-28\">28<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-29\"><a class=\"lnlinks\" href=\"#hl-0-29\">29<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-30\"><a class=\"lnlinks\" href=\"#hl-0-30\">30<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-31\"><a class=\"lnlinks\" href=\"#hl-0-31\">31<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-32\"><a class=\"lnlinks\" href=\"#hl-0-32\">32<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-33\"><a class=\"lnlinks\" href=\"#hl-0-33\">33<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-34\"><a class=\"lnlinks\" href=\"#hl-0-34\">34<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-35\"><a class=\"lnlinks\" href=\"#hl-0-35\">35<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-36\"><a class=\"lnlinks\" href=\"#hl-0-36\">36<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-37\"><a class=\"lnlinks\" href=\"#hl-0-37\">37<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-38\"><a class=\"lnlinks\" href=\"#hl-0-38\">38<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-39\"><a class=\"lnlinks\" href=\"#hl-0-39\">39<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-40\"><a class=\"lnlinks\" href=\"#hl-0-40\">40<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-41\"><a class=\"lnlinks\" href=\"#hl-0-41\">41<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-42\"><a class=\"lnlinks\" href=\"#hl-0-42\">42<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-43\"><a class=\"lnlinks\" href=\"#hl-0-43\">43<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-44\"><a class=\"lnlinks\" href=\"#hl-0-44\">44<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-gdscript3\" data-lang=\"gdscript3\"><span class=\"line\"><span class=\"cl\"><span class=\"s2\">&#34;&#34;&#34;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">FastMCP\u56fe\u7247\u5de5\u5177\u793a\u4f8b\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">\u8fd9\u4e2a\u793a\u4f8b\u6f14\u793a\u5982\u4f55\u5728FastMCP\u4e2d\u521b\u5efa\u8fd4\u56de\u56fe\u50cf\u7684\u5de5\u5177\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">&#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">from<\/span> <span class=\"n\">fastmcp<\/span> <span class=\"n\">import<\/span> <span class=\"n\">FastMCP<\/span><span class=\"p\">,<\/span> <span class=\"ne\">Image<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">from<\/span> <span class=\"n\">typing<\/span> <span class=\"n\">import<\/span> <span class=\"n\">Optional<\/span><span class=\"p\">,<\/span> <span class=\"n\">List<\/span><span class=\"p\">,<\/span> <span class=\"n\">Dict<\/span><span class=\"p\">,<\/span> <span class=\"n\">Any<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">from<\/span> <span class=\"n\">PIL<\/span> <span class=\"n\">import<\/span> <span class=\"ne\">Image<\/span> <span class=\"n\">as<\/span> <span class=\"n\">PILImage<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">from<\/span> <span class=\"n\">PIL<\/span> <span class=\"n\">import<\/span> <span class=\"n\">ImageDraw<\/span><span class=\"p\">,<\/span> <span class=\"n\">ImageFont<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">import<\/span> <span class=\"n\">os<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">import<\/span> <span class=\"n\">io<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">import<\/span> <span class=\"n\">base64<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u521b\u5efaFastMCP\u5b9e\u4f8b<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">mcp<\/span> <span class=\"o\">=<\/span> <span class=\"n\">FastMCP<\/span><span class=\"p\">(<\/span><span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;\u56fe\u7247\u5904\u7406\u670d\u52a1&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\">@<\/span><span class=\"n\">mcp<\/span><span class=\"o\">.<\/span><span class=\"k\">tool<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">image_to_base64<\/span><span class=\"p\">(<\/span><span class=\"n\">image_path<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"ne\">Image<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s2\">&#34;&#34;&#34;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">    \u8bfb\u53d6\u6307\u5b9a\u8def\u5f84\u7684\u56fe\u7247\uff0c\u5e76\u8fd4\u56de\u4e00\u4e2a\u8868\u793a\u8be5\u56fe\u7247\u7684 fastmcp.Image \u5bf9\u8c61\uff0c\u4f7f\u7528\u5176\u539f\u59cb\u6570\u636e\u548c\u68c0\u6d4b\u5230\u7684\u683c\u5f0f\u3002\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">    Args:\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">        image_path: \u56fe\u7247\u6587\u4ef6\u7684\u8def\u5f84\u3002\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">    &#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">if<\/span> <span class=\"ow\">not<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">path<\/span><span class=\"o\">.<\/span><span class=\"n\">exists<\/span><span class=\"p\">(<\/span><span class=\"n\">image_path<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">raise<\/span> <span class=\"n\">FileNotFoundError<\/span><span class=\"p\">(<\/span><span class=\"n\">f<\/span><span class=\"s2\">&#34;\u56fe\u7247\u6587\u4ef6 &#39;{image_path}&#39; \u4e0d\u5b58\u5728&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"c1\"># Open with PIL to get format, then read raw data<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">pil_img<\/span> <span class=\"o\">=<\/span> <span class=\"n\">PILImage<\/span><span class=\"o\">.<\/span><span class=\"n\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">image_path<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"c1\"># Use PIL&#39;s detected format, defaulting to PNG if not found (as in resize_image)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"c1\"># Format should be lowercase for fastmcp.Image constructor based on generate_image example (format=&#34;png&#34;)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">img_format<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"n\">pil_img<\/span><span class=\"o\">.<\/span><span class=\"n\">format<\/span> <span class=\"ow\">or<\/span> <span class=\"s2\">&#34;PNG&#34;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">lower<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">with<\/span> <span class=\"n\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">image_path<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;rb&#34;<\/span><span class=\"p\">)<\/span> <span class=\"n\">as<\/span> <span class=\"n\">f<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">image_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">f<\/span><span class=\"o\">.<\/span><span class=\"n\">read<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"c1\"># The old mime_type and base64_str logic is no longer needed here for constructor<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"c1\"># \u8fd4\u56de fastmcp.Image \u5bf9\u8c61\uff0c\u4f7f\u7528\u539f\u59cb\u56fe\u50cf\u6570\u636e\u548c\u683c\u5f0f<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"ne\">Image<\/span><span class=\"p\">(<\/span><span class=\"n\">data<\/span><span class=\"o\">=<\/span><span class=\"n\">image_data<\/span><span class=\"p\">,<\/span> <span class=\"n\">format<\/span><span class=\"o\">=<\/span><span class=\"n\">img_format<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> \n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"n\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;__main__&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">\u542f\u52a8FastMCP\u56fe\u7247\u5904\u7406\u670d\u52a1\u5668...&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">mcp<\/span><span class=\"o\">.<\/span><span class=\"n\">run<\/span><span class=\"p\">()<\/span> \n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>","title":"python  mcp\u670d\u52a1\u5668\u8fd4\u56de\u56fe\u7247\u4f8b\u5b50"},{"content":"https:\/\/chalk.ist\/ \u6548\u679c\u86ee\u60ca\u8273\u7684 ","permalink":"https:\/\/my.rongyiapi.com\/posts\/%E5%88%86%E4%BA%AB%E4%BB%A3%E7%A0%81%E7%9A%84%E7%BE%8E%E5%8C%96%E5%B7%A5%E5%85%B7\/","summary":"<p><a href=\"https:\/\/chalk.ist\/\">https:\/\/chalk.ist\/<\/a>\n\u6548\u679c\u86ee\u60ca\u8273\u7684\n<img loading=\"lazy\" src=\"https:\/\/github.com\/user-attachments\/assets\/32c07c2f-2ab9-4ee5-8139-6f83b6b4f988\" alt=\"image\"  \/>\n<\/p>","title":"\u5206\u4eab\u4ee3\u7801\u7684\u7f8e\u5316\u5de5\u5177"},{"content":"\u6700\u8fd1\u5728\u90e8\u7f72vite\u7684\u9759\u6001\u9879\u76ee\u9700\u8981\u7528\u5230apache\ndocker-compose.yaml\n1 2 3 4 5 6 7 8 9 10 11 services: apache: image: httpd:latest container_name: apache_container ports: - &#34;8888:80&#34; volumes: - \/Users\/ll\/Desktop\/2024\/vite-vue-mks\/dist:\/usr\/local\/apache2\/htdocs - .\/httpd.conf:\/usr\/local\/apache2\/conf\/httpd.conf restart: always command: \/bin\/bash -c &#34;cat \/usr\/local\/apache2\/conf\/httpd.conf &amp;&amp; httpd-foreground&#34; httpd.conf\n1 2 3 4 5 6 7 8 9 # \u5305\u542b\u539f\u59cb\u914d\u7f6e Include conf\/original\/httpd.conf LoadModule rewrite_module modules\/mod_rewrite.so # \u542f\u7528 .htaccess &lt;Directory &#34;\/usr\/local\/apache2\/htdocs&#34;&gt; AllowOverride All Require all granted &lt;\/Directory&gt; ","permalink":"https:\/\/my.rongyiapi.com\/posts\/docker%E5%90%AF%E5%8A%A8apache%E9%9D%99%E6%80%81%E6%9C%8D%E5%8A%A1%E5%99%A8\/","summary":"<p>\u6700\u8fd1\u5728\u90e8\u7f72vite\u7684\u9759\u6001\u9879\u76ee\u9700\u8981\u7528\u5230apache<\/p>\n<p>docker-compose.yaml<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a class=\"lnlinks\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a class=\"lnlinks\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a class=\"lnlinks\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a class=\"lnlinks\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a class=\"lnlinks\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a class=\"lnlinks\" href=\"#hl-0-11\">11<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">services:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  apache:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    image: httpd:latest\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    container_name: apache_container\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    ports:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - &#34;8888:80&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    volumes:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - \/Users\/ll\/Desktop\/2024\/vite-vue-mks\/dist:\/usr\/local\/apache2\/htdocs\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - .\/httpd.conf:\/usr\/local\/apache2\/conf\/httpd.conf\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    restart: always\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    command: \/bin\/bash -c &#34;cat \/usr\/local\/apache2\/conf\/httpd.conf &amp;&amp; httpd-foreground&#34;\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>httpd.conf<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a class=\"lnlinks\" href=\"#hl-1-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-2\"><a class=\"lnlinks\" href=\"#hl-1-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-3\"><a class=\"lnlinks\" href=\"#hl-1-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-4\"><a class=\"lnlinks\" href=\"#hl-1-4\">4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-5\"><a class=\"lnlinks\" href=\"#hl-1-5\">5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-6\"><a class=\"lnlinks\" href=\"#hl-1-6\">6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-7\"><a class=\"lnlinks\" href=\"#hl-1-7\">7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-8\"><a class=\"lnlinks\" href=\"#hl-1-8\">8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-9\"><a class=\"lnlinks\" href=\"#hl-1-9\">9<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\"># \u5305\u542b\u539f\u59cb\u914d\u7f6e\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Include conf\/original\/httpd.conf\n<\/span><\/span><span class=\"line\"><span class=\"cl\">LoadModule rewrite_module modules\/mod_rewrite.so\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># \u542f\u7528 .htaccess\n<\/span><\/span><span class=\"line\"><span class=\"cl\">&lt;Directory &#34;\/usr\/local\/apache2\/htdocs&#34;&gt;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    AllowOverride All\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    Require all granted\n<\/span><\/span><span class=\"line\"><span class=\"cl\">&lt;\/Directory&gt;\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>","title":"docker\u542f\u52a8apache\u9759\u6001\u670d\u52a1\u5668"},{"content":"\u7528\u4e0b\u9762\u8fd9\u4e2a\u4e1c\u897f\u5207\u4e00\u4e0b\u5730\u533a\u5c31\u80fd\u7528\u4e86\nApp Store Region\nhttps:\/\/www.icloud.com\/shortcuts\/e5b5ec353fd14f828d063daf767de20f\n","permalink":"https:\/\/my.rongyiapi.com\/posts\/testflight-%E4%BC%9A%E5%BC%B9%E5%87%BA-%E6%89%80%E8%AF%B7%E6%B1%82%E7%9A%84-app-%E4%B8%8D%E5%8F%AF%E7%94%A8%E6%88%96%E8%80%85%E4%B8%8D%E5%AD%98%E5%9C%A8-%E7%9A%84%E6%8F%90%E7%A4%BA%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95\/","summary":"<p>\u7528\u4e0b\u9762\u8fd9\u4e2a\u4e1c\u897f\u5207\u4e00\u4e0b\u5730\u533a\u5c31\u80fd\u7528\u4e86<\/p>\n<p>App Store Region<\/p>\n<p><a href=\"https:\/\/www.icloud.com\/shortcuts\/e5b5ec353fd14f828d063daf767de20f\">https:\/\/www.icloud.com\/shortcuts\/e5b5ec353fd14f828d063daf767de20f<\/a><\/p>","title":"TestFlight \u4f1a\u5f39\u51fa \u201c\u6240\u8bf7\u6c42\u7684 App \u4e0d\u53ef\u7528\u6216\u8005\u4e0d\u5b58\u5728\u201d \u7684\u63d0\u793a\u89e3\u51b3\u529e\u6cd5"},{"content":"\u62c9\u53d6\u6700\u65b0\u955c\u50cf\u91cd\u65b0\u90e8\u7f72 \u5efa\u7acb\u6587\u4ef6 run.sh\n1 2 3 docker-compose pull docker-compose down docker-compose up -d --build \u67e5\u770b\u65e5\u5fd7 1 docker-compose logs -f --tail 100 ","permalink":"https:\/\/my.rongyiapi.com\/posts\/docker-compose%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4\/","summary":"<h3 id=\"\u62c9\u53d6\u6700\u65b0\u955c\u50cf\u91cd\u65b0\u90e8\u7f72\">\u62c9\u53d6\u6700\u65b0\u955c\u50cf\u91cd\u65b0\u90e8\u7f72<\/h3>\n<p>\u5efa\u7acb\u6587\u4ef6 run.sh<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\">3<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">docker-compose pull\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker-compose down\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker-compose up -d --build\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u67e5\u770b\u65e5\u5fd7\">\u67e5\u770b\u65e5\u5fd7<\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a class=\"lnlinks\" href=\"#hl-1-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">docker-compose logs -f --tail 100\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>","title":"docker-compose\u5e38\u7528\u547d\u4ee4"},{"content":"\u6cb9\u7334\u811a\u672c\u7684\u4e2d\u7ea7\u6559\u7a0b\uff1a\u62e6\u622a\u548c\u4fee\u6539\u7f51\u9875\u7684\u5c0f\u6280\u5de7 \u8fd9\u662f\u6cb9\u7334\u811a\u672c\u4e2d\u62e6\u622a\u548c\u4fee\u6539\u7f51\u9875\u7684\u4e00\u4e9b\u5c0f\u6280\u5de7\u3002\u8fd9\u4e9b\u5185\u5bb9\u53ef\u80fd\u5f88\u591a\u4eba\u90fd\u77e5\u9053\uff0c\u4f46\u662f\u5bf9\u4e8e\u4e00\u4e9b\u4eba\u6765\u8bf4\u53ef\u80fd\u4ecd\u7136\u6709\u7528\uff0c\u6240\u4ee5\u6211\u5728\u8fd9\u91cc\u5206\u4eab\u7ed9\u5927\u5bb6\u3002\n\u5f53\u7279\u5b9a\u5143\u7d20\u6dfb\u52a0\u5230 DOM \u65f6\u89e6\u53d1\u811a\u672c \u4f7f\u7528 setInterval \u5b9a\u671f\u68c0\u67e5\u5143\u7d20\u4e0d\u662f\u4e00\u4e2a\u597d\u4e3b\u610f\uff0c\u56e0\u4e3a\u5b83\u5e76\u4e0d\u9ad8\u6548\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u6027\u80fd\u95ee\u9898\u3002\n\u901a\u8fc7\u4f7f\u7528 MutationObserver \uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u7279\u5b9a\u5143\u7d20\u6dfb\u52a0\u5230 DOM \u65f6\u89e6\u53d1\u811a\u672c\u3002\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 function wait_for_element(selector, callback) { const observer = new MutationObserver((mutationsList, observer) =&gt; { for (const mutation of mutationsList) { if (mutation.type === &#39;childList&#39;) { const elements = document.querySelectorAll(selector); if (elements.length &gt; 0) { observer.disconnect(); callback(elements); } } \/\/ Filter desired elements by `mutation.addedNodes` here } }); observer.observe(document.body, {childList: true, subtree: true}); } \u62e6\u622a fetch \u8bf7\u6c42 \u8981\u62e6\u622a fetch \u8bf7\u6c42\uff0c\u6211\u4eec\u53ef\u4ee5\u8986\u76d6 window.fetch \u51fd\u6570\u3002\u4ee5\u4e0b\u662f\u5982\u4f55\u62e6\u622a fetch \u8bf7\u6c42\u7684\u793a\u4f8b\uff1a\n1 2 3 4 5 6 const originalFetch = window.fetch; window.fetch = function(input, init) { console.log(&#39;fetch request:&#39;, input, init); \/\/ Modify the input or init object here return originalFetch.apply(this, arguments); }; \u4f60\u53ef\u4ee5\u7528\u7c7b\u4f3c\u7684\u65b9\u5f0f\u62e6\u622a\u4efb\u4f55\u8bf7\u6c42\uff0c\u6bd4\u5982 XMLHttpRequest\uff0cJQuery.ajax\u3002\n\u4fee\u6539 fetch \u54cd\u5e94\u7684\u53e6\u4e00\u79cd\u65b9\u6cd5\u662f\u8986\u76d6 Response.prototype.json \u65b9\u6cd5\uff1a\n1 2 3 4 5 6 7 8 9 const json = Response.prototype.json; Response.prototype.json = function () { return json.call(this).then((data) =&gt; resolve(this.url, data)); }; function resolve(url, data) { console.log(&#39;fetch response:&#39;, url, data); return data; } \u4e0e\u7b2c\u4e00\u79cd\u65b9\u6cd5\u76f8\u6bd4\uff0c\u8fd9\u79cd\u65b9\u6cd5\u66f4\u9ad8\u6548\uff0c\u56e0\u4e3a\u5b83\u53ea\u4fee\u6539\u4e86 Response.prototype.json \u65b9\u6cd5\u3002\n\u62e6\u622a\u51fd\u6570 call \u5982\u679c\u6211\u4eec\u65e0\u6cd5\u76f4\u63a5\u8bbf\u95ee\u51fd\u6570\uff08\u4f8b\u5982\uff0c\u51fd\u6570\u5728\u4e0d\u540c\u7684\u4f5c\u7528\u57df\u4e2d\uff09\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8986\u76d6 Function.prototype.call \u65b9\u6cd5\u6765\u62e6\u622a\u4efb\u4f55 function.call()\uff1a\n1 2 3 4 5 6 7 const originalCall = Function.prototype.call; Function.prototype.call = function(thisArg,...args) { if (this.name === &#39;foo&#39;) { console.log(&#39;function call:&#39;, this, thisArg, args); } return originalCall.apply(this, arguments); }; \u5f53\u7f51\u7ad9\u4f7f\u7528 Webpack \u7b49\u6253\u5305\u5de5\u5177\u65f6\uff0c\u8fd9\u7279\u522b\u6709\u7528\u3002\u4f7f\u7528\u65f6\u8981\u5c0f\u5fc3\uff0c\u4ee5\u907f\u514d\u65e0\u9650\u9012\u5f52\u548c\u6027\u80fd\u95ee\u9898\u3002\n\u6ce8\u5165\u5230 shadow DOM Shadow DOM \u662f\u4e00\u79cd\u5c01\u88c5 Web \u7ec4\u4ef6\u7684\u6837\u5f0f\u548c\u7ed3\u6784\u7684\u65b9\u6cd5\u3002\u6211\u4eec\u65e0\u6cd5\u76f4\u63a5\u4ece\u7236\u6587\u6863\u8bbf\u95ee shadow DOM\u3002\u5728 devtools \u4e2d\u770b\u8d77\u6765\u50cf\u8fd9\u6837\uff1a\n1 2 3 4 &lt;my-element&gt; #shadow-root (close) &lt;p&gt;Hello, World!&lt;\/p&gt; &lt;\/my-element&gt; \u8981\u5c06\u811a\u672c\u6ce8\u5165\u5230 shadow DOM \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u8986\u76d6 attachShadow \u65b9\u6cd5\uff0c\u5c06\u811a\u672c\u6ce8\u5165\u5230 shadow root \u4e2d\u3002\u4ee5\u4e0b\u662f\u5982\u4f55\u5c06\u811a\u672c\u6ce8\u5165\u5230 shadow DOM \u7684\u793a\u4f8b\uff1a\n1 2 3 4 5 6 7 8 Element.prototype._attachShadow = Element.prototype.attachShadow; Element.prototype.attachShadow = function(init) { const shadowRoot = this._attachShadow(init); const script = document.createElement(&#39;script&#39;); script.textContent = &#39;console.log(&#34;Injected script&#34;)&#39;; shadowRoot.appendChild(script); return shadowRoot; }; \u5176\u5b9e\u8fd9\u548c\u4e0a\u9762\u7684\u51e0\u4e2a\u4f8b\u5b50\u7c7b\u4f3c\uff0c\u4f7f\u7528\u4e86\u4e00\u79cd\u79f0\u4e3a\u201cmonkey patch\u201d\u7684\u6280\u5de7\u3002\n\u8986\u76d6\u53d8\u91cf \u8981\u8986\u76d6\u53d8\u91cf\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 Object.defineProperty \u5b9a\u4e49\u4e00\u4e2a\u5177\u6709 getter \u548c setter \u7684\u5c5e\u6027\u3002\u4ee5\u4e0b\u662f\u5982\u4f55\u8986\u76d6\u53d8\u91cf\u7684\u793a\u4f8b\uff1a\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 let __bad_variable = 42; Object.defineProperty(window, &#39;bad_variable&#39;, { get: function() { return __bad_variable; }, set: function(value) { console.log(&#39;variable wanna change to:&#39;, value); __bad_variable = -value; } }); console.log(bad_variable); \/\/ 42 bad_variable = 100; \/\/ variable wanna change to: 100 console.log(bad_variable); \/\/ -100 \u62e6\u622a canvas \u7ed8\u56fe\u547d\u4ee4 \u8981\u62e6\u622a canvas \u7ed8\u56fe\u547d\u4ee4\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 Proxy \u8986\u76d6 CanvasRenderingContext2D.prototype \u7684\u6240\u6709\u65b9\u6cd5\uff1a\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 function proxy_all_methods(obj, handler) { const descriptors = Object.getOwnPropertyDescriptors(obj); for (const key in descriptors) { if (typeof descriptors[key].value === &#39;function&#39;) { obj[key] = new Proxy(descriptors[key].value, handler); } } } proxy_all_methods(CanvasRenderingContext2D.prototype, { apply: function(target, thisArg, args) { console.log(&#39;canvas drawing:&#39;, target.name, args); return target.apply(thisArg, args); } }); \/\/ Example: const canvas = document.createElement(&#39;canvas&#39;); const ctx = canvas.getContext(&#39;2d&#39;); ctx.fillStyle =&#39;red&#39;; ctx.fillRect(10, 10, 100, 100); \u603b\u7ed3 \u5728\u672c\u6559\u7a0b\u4e2d\uff0c\u6211\u4eec\u5b66\u4e60\u4e86\u4e00\u4e9b\u4f7f\u7528\u6cb9\u7334\u811a\u672c\u62e6\u622a\u548c\u4fee\u6539\u7f51\u9875\u7684\u6280\u672f\u3002\u8fd9\u4e9b\u6280\u672f\u5bf9\u4e8e\u8c03\u8bd5\u3001\u6d4b\u8bd5\u6216\u4fee\u6539\u7f51\u9875\u53ef\u80fd\u5f88\u6709\u7528\u3002\u4ec5\u4f9b\u6559\u80b2\u76ee\u7684\u6216\u4e2a\u4eba\u4f7f\u7528\u3002\n\u9644\u5f55 \u4ee5\u4e0b\u662f\u4e00\u4e9b\u53ef\u4ee5\u5728\u6cb9\u7334\u811a\u672c\u4e2d\u4f7f\u7528\u7684\u4ee3\u7801\u7247\u6bb5\uff1a\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 const range = (start, stop, step = 1) =&gt; Array(Math.ceil((stop - start) \/ step)).fill(start).map((x, y) =&gt; x + y * step); const randint = (min, max) =&gt; Math.floor(Math.random() * (max - min) + min); const char2int = c =&gt; c.charCodeAt(); const int2char = i =&gt; String.fromCharCode(i); const crange = (start, stop, rclose = 0) =&gt; range(char2int(start), char2int(stop) + rclose).map(int2char); Math.factorial = x =&gt; Math.factorial[x] ||= x? x * Math.factorial(--x) : ++x; const $ = (s) =&gt; document.querySelector(s); const $$ = (s) =&gt; [...document.querySelectorAll(s)]; String.prototype.reverse = function() { return [...this].reverse().join(&#39;&#39;); } String.prototype.splitn = function(n, tail = true) { return this.match(RegExp(tail? `.{1,${n}}` : `.{${n}}`, &#39;g&#39;)); } Array.prototype.sum = function() { return this.reduce((s, a) =&gt; s + a, 0); } Array.prototype.transpose = function() { return this.map((row, i) =&gt; row.map((_, j) =&gt; this[j][i])); } reshape = (a, dim, i = 0, d = 0) =&gt; dim[d]? Array(dim[d]).fill().map((_, j) =&gt; reshape(a, dim, i * dim[d] + j, d + 1)) : a[i]; string = a =&gt; Array.isArray(a)? `[${a.map(string).join(&#39;,&#39;)}]` : a; Array.prototype.shuffle = function() { let array = [...this]; for (let i = array.length - 1; i &gt; 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; } return array; } const sleep = (ms) =&gt; new Promise(r =&gt; setTimeout(r, ms)); const element = (html) =&gt; { const t = document.createElement(&#39;template&#39;); t.innerHTML = html.trim(); return t.content.firstChild; } function on(elem, event, func) { return elem.addEventListener(event, func, false); } function off(elem, event, func) { return elem.removeEventListener(event, func, false); } const download = function(content, filename, mimetype = &#39;application\/octet-stream&#39;) { var a = document.createElement(&#39;a&#39;); a.href = URL.createObjectURL(new Blob([content],{ type: mimetype })); a.download = filename; document.body.appendChild(a); a.click(); document.body.removeChild(a); } new URLSearchParams(location.search).get(&#39;key&#39;); \u5927\u5bb6\u6709\u4ec0\u4e48\u6cb9\u7334\u811a\u672c\u7684\u5947\u6280\u6deb\u5de7\uff0c\u4e5f\u53ef\u4ee5\u5206\u4eab\u4e00\u4e0b\u3002\n","permalink":"https:\/\/my.rongyiapi.com\/posts\/%E6%B2%B9%E7%8C%B4%E8%84%9A%E6%9C%AC%E7%9A%84%E4%B8%AD%E7%BA%A7%E6%95%99%E7%A8%8B%E6%8B%A6%E6%88%AA%E5%92%8C%E4%BF%AE%E6%94%B9%E7%BD%91%E9%A1%B5%E7%9A%84%E5%B0%8F%E6%8A%80%E5%B7%A7\/","summary":"<h1 id=\"\u6cb9\u7334\u811a\u672c\u7684\u4e2d\u7ea7\u6559\u7a0b\u62e6\u622a\u548c\u4fee\u6539\u7f51\u9875\u7684\u5c0f\u6280\u5de7\">\u6cb9\u7334\u811a\u672c\u7684\u4e2d\u7ea7\u6559\u7a0b\uff1a\u62e6\u622a\u548c\u4fee\u6539\u7f51\u9875\u7684\u5c0f\u6280\u5de7<\/h1>\n<p>\u8fd9\u662f\u6cb9\u7334\u811a\u672c\u4e2d\u62e6\u622a\u548c\u4fee\u6539\u7f51\u9875\u7684\u4e00\u4e9b\u5c0f\u6280\u5de7\u3002\u8fd9\u4e9b\u5185\u5bb9\u53ef\u80fd\u5f88\u591a\u4eba\u90fd\u77e5\u9053\uff0c\u4f46\u662f\u5bf9\u4e8e\u4e00\u4e9b\u4eba\u6765\u8bf4\u53ef\u80fd\u4ecd\u7136\u6709\u7528\uff0c\u6240\u4ee5\u6211\u5728\u8fd9\u91cc\u5206\u4eab\u7ed9\u5927\u5bb6\u3002<\/p>\n<h2 id=\"\u5f53\u7279\u5b9a\u5143\u7d20\u6dfb\u52a0\u5230-dom-\u65f6\u89e6\u53d1\u811a\u672c\">\u5f53\u7279\u5b9a\u5143\u7d20\u6dfb\u52a0\u5230 DOM \u65f6\u89e6\u53d1\u811a\u672c<\/h2>\n<p>\u4f7f\u7528 <code>setInterval<\/code> \u5b9a\u671f\u68c0\u67e5\u5143\u7d20\u4e0d\u662f\u4e00\u4e2a\u597d\u4e3b\u610f\uff0c\u56e0\u4e3a\u5b83\u5e76\u4e0d\u9ad8\u6548\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u6027\u80fd\u95ee\u9898\u3002<\/p>\n<p>\u901a\u8fc7\u4f7f\u7528 <code>MutationObserver<\/code> \uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u7279\u5b9a\u5143\u7d20\u6dfb\u52a0\u5230 DOM \u65f6\u89e6\u53d1\u811a\u672c\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a class=\"lnlinks\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a class=\"lnlinks\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a class=\"lnlinks\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a class=\"lnlinks\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a class=\"lnlinks\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a class=\"lnlinks\" href=\"#hl-0-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a class=\"lnlinks\" href=\"#hl-0-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-13\"><a class=\"lnlinks\" href=\"#hl-0-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-14\"><a class=\"lnlinks\" href=\"#hl-0-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-15\"><a class=\"lnlinks\" href=\"#hl-0-15\">15<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-javascript\" data-lang=\"javascript\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">function<\/span> <span class=\"nx\">wait_for_element<\/span><span class=\"p\">(<\/span><span class=\"nx\">selector<\/span><span class=\"p\">,<\/span> <span class=\"nx\">callback<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"kr\">const<\/span> <span class=\"nx\">observer<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">MutationObserver<\/span><span class=\"p\">((<\/span><span class=\"nx\">mutationsList<\/span><span class=\"p\">,<\/span> <span class=\"nx\">observer<\/span><span class=\"p\">)<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"kr\">const<\/span> <span class=\"nx\">mutation<\/span> <span class=\"k\">of<\/span> <span class=\"nx\">mutationsList<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">mutation<\/span><span class=\"p\">.<\/span><span class=\"nx\">type<\/span> <span class=\"o\">===<\/span> <span class=\"s1\">&#39;childList&#39;<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"kr\">const<\/span> <span class=\"nx\">elements<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">querySelectorAll<\/span><span class=\"p\">(<\/span><span class=\"nx\">selector<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">elements<\/span><span class=\"p\">.<\/span><span class=\"nx\">length<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"nx\">observer<\/span><span class=\"p\">.<\/span><span class=\"nx\">disconnect<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"nx\">callback<\/span><span class=\"p\">(<\/span><span class=\"nx\">elements<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"c1\">\/\/ Filter desired elements by `mutation.addedNodes` here\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">observer<\/span><span class=\"p\">.<\/span><span class=\"nx\">observe<\/span><span class=\"p\">(<\/span><span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">body<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span><span class=\"nx\">childList<\/span><span class=\"o\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span> <span class=\"nx\">subtree<\/span><span class=\"o\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u62e6\u622a-fetch-\u8bf7\u6c42\">\u62e6\u622a fetch \u8bf7\u6c42<\/h2>\n<p>\u8981\u62e6\u622a fetch \u8bf7\u6c42\uff0c\u6211\u4eec\u53ef\u4ee5\u8986\u76d6 <code>window.fetch<\/code> \u51fd\u6570\u3002\u4ee5\u4e0b\u662f\u5982\u4f55\u62e6\u622a fetch \u8bf7\u6c42\u7684\u793a\u4f8b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a class=\"lnlinks\" href=\"#hl-1-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-2\"><a class=\"lnlinks\" href=\"#hl-1-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-3\"><a class=\"lnlinks\" href=\"#hl-1-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-4\"><a class=\"lnlinks\" href=\"#hl-1-4\">4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-5\"><a class=\"lnlinks\" href=\"#hl-1-5\">5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-6\"><a class=\"lnlinks\" href=\"#hl-1-6\">6<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-javascript\" data-lang=\"javascript\"><span class=\"line\"><span class=\"cl\"><span class=\"kr\">const<\/span> <span class=\"nx\">originalFetch<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">window<\/span><span class=\"p\">.<\/span><span class=\"nx\">fetch<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">window<\/span><span class=\"p\">.<\/span><span class=\"nx\">fetch<\/span> <span class=\"o\">=<\/span> <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">input<\/span><span class=\"p\">,<\/span> <span class=\"nx\">init<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;fetch request:&#39;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">input<\/span><span class=\"p\">,<\/span> <span class=\"nx\">init<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"c1\">\/\/ Modify the input or init object here\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>    <span class=\"k\">return<\/span> <span class=\"nx\">originalFetch<\/span><span class=\"p\">.<\/span><span class=\"nx\">apply<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">,<\/span> <span class=\"nx\">arguments<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">};<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4f60\u53ef\u4ee5\u7528\u7c7b\u4f3c\u7684\u65b9\u5f0f\u62e6\u622a\u4efb\u4f55\u8bf7\u6c42\uff0c\u6bd4\u5982 <code>XMLHttpRequest<\/code>\uff0c<code>JQuery.ajax<\/code>\u3002<\/p>","title":"\u6cb9\u7334\u811a\u672c\u7684\u4e2d\u7ea7\u6559\u7a0b\uff1a\u62e6\u622a\u548c\u4fee\u6539\u7f51\u9875\u7684\u5c0f\u6280\u5de7"},{"content":"\u672c\u5730\u5927\u6a21\u578b\u7684\u804a\u5929 UI \u6536\u96c6 UI \u96c6\u5408 Open-webui: open-webui\/open-webui: User-friendly WebUI for LLMs (Formerly Ollama WebUI) (github.com) Chatbox: Chatbox LM Studio: LM Studio - Discover, download, and run local LLMs AnythingLLM : AnythingLLM | The ultimate AI business intelligence tool (useanything.com) \u5b89\u88c5 open-webui \u4ee5\u4e0b\u662f\u4f7f\u7528 Docker \u5b89\u88c5 open-webui \u7684\u6b65\u9aa4\uff1a\n1 docker run -d -p 3009:8080 --add-host=host.docker.internal:host-gateway -v open-webui:\/app\/backend\/data --name open-webui --restart always ghcr.io\/open-webui\/open-webui:main \u5176\u4ed6\u76f8\u5173\u8d44\u6e90 Chatbox: \u4e00\u4e2a\u7b80\u5355\u6613\u7528\u7684\u804a\u5929\u5de5\u5177\uff0c\u652f\u6301\u591a\u79cd\u804a\u5929\u529f\u80fd\uff0c\u9002\u7528\u4e8e\u4e2a\u4eba\u548c\u56e2\u961f\u4f7f\u7528\u3002Chatbox LM Studio: \u4e00\u4e2a\u53d1\u73b0\u3001\u4e0b\u8f7d\u548c\u8fd0\u884c\u672c\u5730\u5927\u6a21\u578b\u7684\u5e73\u53f0\uff0c\u63d0\u4f9b\u7528\u6237\u53cb\u597d\u7684\u754c\u9762\u3002LM Studio AnythingLLM: \u4e00\u4e2a\u7075\u6d3b\u7684 LLM \u5e73\u53f0\uff0c\u652f\u6301\u591a\u79cd\u5927\u6a21\u578b\u7684\u672c\u5730\u8fd0\u884c\u3002 \u5de5\u4f5c\u6d41\u7c7b \u6b22\u8fce\u4f7f\u7528 Dify | \u4e2d\u6587 | Dify https:\/\/github.com\/sugarforever\/chat-ollama\/blob\/main\/README.zh-Hans.md#%E5%85%B3%E7%B3%BB%E6%95%B0%E6%8D%AE\n","permalink":"https:\/\/my.rongyiapi.com\/posts\/%E6%9C%AC%E5%9C%B0%E5%A4%A7%E6%A8%A1%E5%9E%8B%E7%9A%84%E8%81%8A%E5%A4%A9-ui-%E6%94%B6%E9%9B%86\/","summary":"<h1 id=\"\u672c\u5730\u5927\u6a21\u578b\u7684\u804a\u5929-ui-\u6536\u96c6\">\u672c\u5730\u5927\u6a21\u578b\u7684\u804a\u5929 UI \u6536\u96c6<\/h1>\n<h2 id=\"ui-\u96c6\u5408\">UI \u96c6\u5408<\/h2>\n<ul>\n<li><strong>Open-webui:<\/strong> <a href=\"https:\/\/github.com\/open-webui\/open-webui\">open-webui\/open-webui: User-friendly WebUI for LLMs (Formerly Ollama WebUI) (github.com)<\/a><\/li>\n<li><strong>Chatbox:<\/strong> <a href=\"https:\/\/chatboxai.app\/\">Chatbox<\/a><\/li>\n<li><strong>LM Studio:<\/strong> <a href=\"https:\/\/lmstudio.ai\/\">LM Studio - Discover, download, and run local LLMs<\/a><\/li>\n<li><strong>AnythingLLM :<\/strong> <a href=\"https:\/\/useanything.com\/\">AnythingLLM | The ultimate AI business intelligence tool (useanything.com)<\/a><\/li>\n<\/ul>\n<h2 id=\"\u5b89\u88c5-open-webui\">\u5b89\u88c5 open-webui<\/h2>\n<p>\u4ee5\u4e0b\u662f\u4f7f\u7528 Docker \u5b89\u88c5 open-webui \u7684\u6b65\u9aa4\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">docker run -d -p 3009:8080 --add-host<span class=\"o\">=<\/span>host.docker.internal:host-gateway -v open-webui:\/app\/backend\/data --name open-webui --restart always ghcr.io\/open-webui\/open-webui:main\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u5176\u4ed6\u76f8\u5173\u8d44\u6e90\">\u5176\u4ed6\u76f8\u5173\u8d44\u6e90<\/h2>\n<ul>\n<li><strong>Chatbox:<\/strong> \u4e00\u4e2a\u7b80\u5355\u6613\u7528\u7684\u804a\u5929\u5de5\u5177\uff0c\u652f\u6301\u591a\u79cd\u804a\u5929\u529f\u80fd\uff0c\u9002\u7528\u4e8e\u4e2a\u4eba\u548c\u56e2\u961f\u4f7f\u7528\u3002<a href=\"https:\/\/chatboxai.app\/\">Chatbox<\/a><\/li>\n<li><strong>LM Studio:<\/strong> \u4e00\u4e2a\u53d1\u73b0\u3001\u4e0b\u8f7d\u548c\u8fd0\u884c\u672c\u5730\u5927\u6a21\u578b\u7684\u5e73\u53f0\uff0c\u63d0\u4f9b\u7528\u6237\u53cb\u597d\u7684\u754c\u9762\u3002<a href=\"https:\/\/lmstudio.ai\/\">LM Studio<\/a><\/li>\n<li><strong>AnythingLLM:<\/strong> \u4e00\u4e2a\u7075\u6d3b\u7684 LLM \u5e73\u53f0\uff0c\u652f\u6301\u591a\u79cd\u5927\u6a21\u578b\u7684\u672c\u5730\u8fd0\u884c\u3002<\/li>\n<\/ul>\n<hr>\n<h1 id=\"\u5de5\u4f5c\u6d41\u7c7b\">\u5de5\u4f5c\u6d41\u7c7b<\/h1>\n<p><a href=\"https:\/\/docs.dify.ai\/v\/zh-hans\">\u6b22\u8fce\u4f7f\u7528 Dify | \u4e2d\u6587 | Dify<\/a>\n<a href=\"https:\/\/github.com\/sugarforever\/chat-ollama\/blob\/main\/README.zh-Hans.md#%E5%85%B3%E7%B3%BB%E6%95%B0%E6%8D%AE\">https:\/\/github.com\/sugarforever\/chat-ollama\/blob\/main\/README.zh-Hans.md#%E5%85%B3%E7%B3%BB%E6%95%B0%E6%8D%AE<\/a><\/p>","title":"\u672c\u5730\u5927\u6a21\u578b\u7684\u804a\u5929 UI \u6536\u96c6"},{"content":"[toc]\nFastGPT \u4e0e Ollama \u7684\u5b89\u88c5\u4e0e\u914d\u7f6e\u6307\u5357 \u76f8\u5173\u77e5\u8bc6 FastGPT: \u5f00\u53d1\u4e0e\u90e8\u7f72\u6307\u5357 | FastGPT Ollama: Ollama M3E: uniem\/mteb-zh at main \u00b7 wangyuxinwhy\/uniem (github.com) Qwen: Qwen\u6a21\u578b\u4ecb\u7ecd qwen2 (ollama.com) FastGPT \u5b89\u88c5\u6307\u5357 \u6b65\u9aa4\u4e00\uff1a\u5b89\u88c5 \u4f60\u53ef\u4ee5\u4f7f\u7528 Docker Compose \u5feb\u901f\u90e8\u7f72 FastGPT\u3002\n\u53c2\u8003\u6587\u6863\uff1aDocker Compose \u5feb\u901f\u90e8\u7f72 | FastGPT (fastai.site)\n\u53c2\u8003\u6e90\u7801\uff1aFastGPT\/files\/docker at main \u00b7 labring\/FastGPT (github.com)\n\u6b65\u9aa4\u4e8c\uff1a\u521b\u5efa\u6587\u4ef6\u5939\u5e76\u4e0b\u8f7d\u6587\u4ef6 \u521b\u5efa\u4e00\u4e2a\u6587\u4ef6\u5939\uff0c\u7528\u4e8e\u5b58\u653e\u4e0b\u8f7d\u7684\u6587\u4ef6\u3002\n\u4e0b\u8f7d\u4ee5\u4e0b\u4e24\u4e2a\u6587\u4ef6\u5e76\u653e\u5165\u521b\u5efa\u7684\u6587\u4ef6\u5939\u4e2d\uff1a\ndocker-compose-pgvector.yml config.json \u6b65\u9aa4\u4e09\uff1a\u542f\u52a8\u670d\u52a1 \u5728\u6587\u4ef6\u5939\u4e2d\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u542f\u52a8\u670d\u52a1\uff1a\n1 docker-compose up Ollama \u5b89\u88c5\u6307\u5357 \u6b65\u9aa4\u4e00\uff1a\u4e0b\u8f7d \u5728 Windows \u7cfb\u7edf\u4e0a\u4e0b\u8f7d\u5e76\u5b89\u88c5 Ollama\uff1aDownload Ollama on Windows\n\u6b65\u9aa4\u4e8c\uff1a\u5b89\u88c5\u6a21\u578b \u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u6765\u5b89\u88c5\u548c\u914d\u7f6e\u6a21\u578b\uff1a\n1 2 3 4 ollama run qwen2:7b ollama cp qwen2:7b gpt-3.5-turbo ollama pull milkey\/m3e ollama cp milkey\/m3e m3e \u6b65\u9aa4\u4e09\uff1a\u542f\u52a8\u670d\u52a1 \u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u542f\u52a8\u670d\u52a1\uff1a\n1 ollama serve \u670d\u52a1\u542f\u52a8\u540e\uff0c\u63a5\u53e3\u5730\u5740\u4e3a\uff1a\n1 http:\/\/127.0.0.1:11434 FastGPT \u914d\u7f6e \u914d\u7f6e M3E \u6a21\u578b \u5728\u914d\u7f6e\u6587\u4ef6\u4e2d\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\u6765\u914d\u7f6e M3E \u6a21\u578b\uff1a\n1 2 3 4 5 6 7 8 9 10 11 &#34;vectorModels&#34;: [ { &#34;model&#34;: &#34;m3e&#34;, &#34;name&#34;: &#34;M3E&#34;, &#34;inputPrice&#34;: 0, &#34;outputPrice&#34;: 0, &#34;defaultToken&#34;: 700, &#34;maxToken&#34;: 1800, &#34;weight&#34;: 100 } ] \u914d\u7f6e LLM \u6a21\u578b \u5728\u914d\u7f6e\u6587\u4ef6\u4e2d\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\u6765\u914d\u7f6e LLM \u6a21\u578b\uff1a\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 &#34;llmModels&#34;: [ { &#34;model&#34;: &#34;qwen2:7b&#34;, &#34;name&#34;: &#34;qwen2:7b&#34;, &#34;maxContext&#34;: 16000, &#34;avatar&#34;: &#34;\/imgs\/model\/openai.svg&#34;, &#34;maxResponse&#34;: 4000, &#34;quoteMaxToken&#34;: 13000, &#34;maxTemperature&#34;: 1.2, &#34;charsPointsPrice&#34;: 0, &#34;censor&#34;: false, &#34;vision&#34;: false, &#34;datasetProcess&#34;: true, &#34;usedInClassify&#34;: true, &#34;usedInExtractFields&#34;: true, &#34;usedInToolCall&#34;: true, &#34;usedInQueryExtension&#34;: true, &#34;toolChoice&#34;: true, &#34;functionCall&#34;: true, &#34;customCQPrompt&#34;: &#34;&#34;, &#34;customExtractPrompt&#34;: &#34;&#34;, &#34;defaultSystemChatPrompt&#34;: &#34;&#34;, &#34;defaultConfig&#34;: {} } ] One API \u914d\u7f6e \u8bbf\u95ee One API\n\u8d26\u6237\u5bc6\u7801\u4e3a\uff1aroot 123456\n\u914d\u7f6e\u597d FastGPT \u540e\uff0c\u5c31\u80fd\u4f7f\u7528\u4e86\u3002\nFastGPT \u4f7f\u7528 \u8bbf\u95ee FastGPT\n\u8d26\u6237\u5bc6\u7801\u4e3a\uff1aroot 1234\n\u6269\u5c55\u77e5\u8bc6 Ollama \u4e0b\u8f7d\u6a21\u578b FastGPT \u914d\u7f6e\u6587\u4ef6\u4ecb\u7ecd | FastGPT (fastai.site) ","permalink":"https:\/\/my.rongyiapi.com\/posts\/fastgpt-%E4%B8%8E-ollama-%E7%9A%84%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE%E6%8C%87%E5%8D%97\/","summary":"<p>[toc]<\/p>\n<h1 id=\"fastgpt-\u4e0e-ollama-\u7684\u5b89\u88c5\u4e0e\u914d\u7f6e\u6307\u5357\">FastGPT \u4e0e Ollama \u7684\u5b89\u88c5\u4e0e\u914d\u7f6e\u6307\u5357<\/h1>\n<h2 id=\"\u76f8\u5173\u77e5\u8bc6\">\u76f8\u5173\u77e5\u8bc6<\/h2>\n<ul>\n<li><strong>FastGPT:<\/strong> <a href=\"https:\/\/doc.fastgpt.in\/docs\/development\/\">\u5f00\u53d1\u4e0e\u90e8\u7f72\u6307\u5357 | FastGPT<\/a><\/li>\n<li><strong>Ollama:<\/strong> <a href=\"https:\/\/ollama.com\/\">Ollama<\/a><\/li>\n<li><strong>M3E:<\/strong> <a href=\"https:\/\/github.com\/wangyuxinwhy\/uniem\/tree\/main\/mteb-zh\">uniem\/mteb-zh at main \u00b7 wangyuxinwhy\/uniem (github.com)<\/a><\/li>\n<li><strong>Qwen:<\/strong> <a href=\"https:\/\/ollama.com\/library\/qwen2\">Qwen\u6a21\u578b\u4ecb\u7ecd qwen2 (ollama.com)<\/a><\/li>\n<\/ul>\n<h2 id=\"fastgpt\">FastGPT<\/h2>\n<h3 id=\"\u5b89\u88c5\u6307\u5357\">\u5b89\u88c5\u6307\u5357<\/h3>\n<h4 id=\"\u6b65\u9aa4\u4e00\u5b89\u88c5\">\u6b65\u9aa4\u4e00\uff1a\u5b89\u88c5<\/h4>\n<p>\u4f60\u53ef\u4ee5\u4f7f\u7528 Docker Compose \u5feb\u901f\u90e8\u7f72 FastGPT\u3002<\/p>\n<p>\u53c2\u8003\u6587\u6863\uff1a<a href=\"https:\/\/doc.fastai.site\/docs\/development\/docker\/\">Docker Compose \u5feb\u901f\u90e8\u7f72 | FastGPT (fastai.site)<\/a><\/p>\n<p>\u53c2\u8003\u6e90\u7801\uff1a<a href=\"https:\/\/github.com\/labring\/FastGPT\/tree\/main\/files\/docker\">FastGPT\/files\/docker at main \u00b7 labring\/FastGPT (github.com)<\/a><\/p>\n<h4 id=\"\u6b65\u9aa4\u4e8c\u521b\u5efa\u6587\u4ef6\u5939\u5e76\u4e0b\u8f7d\u6587\u4ef6\">\u6b65\u9aa4\u4e8c\uff1a\u521b\u5efa\u6587\u4ef6\u5939\u5e76\u4e0b\u8f7d\u6587\u4ef6<\/h4>\n<ol>\n<li>\n<p>\u521b\u5efa\u4e00\u4e2a\u6587\u4ef6\u5939\uff0c\u7528\u4e8e\u5b58\u653e\u4e0b\u8f7d\u7684\u6587\u4ef6\u3002<\/p>\n<\/li>\n<li>\n<p>\u4e0b\u8f7d\u4ee5\u4e0b\u4e24\u4e2a\u6587\u4ef6\u5e76\u653e\u5165\u521b\u5efa\u7684\u6587\u4ef6\u5939\u4e2d\uff1a<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/labring\/FastGPT\/blob\/main\/files\/docker\/docker-compose-pgvector.yml\" title=\"docker-compose-pgvector.yml\">docker-compose-pgvector.yml<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/labring\/FastGPT\/blob\/main\/projects\/app\/data\/config.json\">config.json<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h4 id=\"\u6b65\u9aa4\u4e09\u542f\u52a8\u670d\u52a1\">\u6b65\u9aa4\u4e09\uff1a\u542f\u52a8\u670d\u52a1<\/h4>\n<p>\u5728\u6587\u4ef6\u5939\u4e2d\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u542f\u52a8\u670d\u52a1\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">docker-compose up\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"ollama\">Ollama<\/h2>\n<h3 id=\"\u5b89\u88c5\u6307\u5357-1\">\u5b89\u88c5\u6307\u5357<\/h3>\n<h4 id=\"\u6b65\u9aa4\u4e00\u4e0b\u8f7d\">\u6b65\u9aa4\u4e00\uff1a\u4e0b\u8f7d<\/h4>\n<p>\u5728 Windows \u7cfb\u7edf\u4e0a\u4e0b\u8f7d\u5e76\u5b89\u88c5 Ollama\uff1a<a href=\"https:\/\/ollama.com\/download\">Download Ollama on Windows<\/a><\/p>\n<h4 id=\"\u6b65\u9aa4\u4e8c\u5b89\u88c5\u6a21\u578b\">\u6b65\u9aa4\u4e8c\uff1a\u5b89\u88c5\u6a21\u578b<\/h4>\n<p>\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u6765\u5b89\u88c5\u548c\u914d\u7f6e\u6a21\u578b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a class=\"lnlinks\" href=\"#hl-1-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-2\"><a class=\"lnlinks\" href=\"#hl-1-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-3\"><a class=\"lnlinks\" href=\"#hl-1-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-4\"><a class=\"lnlinks\" href=\"#hl-1-4\">4<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">ollama run qwen2:7b\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ollama cp qwen2:7b gpt-3.5-turbo\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ollama pull milkey\/m3e\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ollama cp milkey\/m3e m3e\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u6b65\u9aa4\u4e09\u542f\u52a8\u670d\u52a1-1\">\u6b65\u9aa4\u4e09\uff1a\u542f\u52a8\u670d\u52a1<\/h4>\n<p>\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u542f\u52a8\u670d\u52a1\uff1a<\/p>","title":"FastGPT \u4e0e Ollama \u7684\u5b89\u88c5\u4e0e\u914d\u7f6e\u6307\u5357"},{"content":"\u4e8c\u8fdb\u5236\u6587\u4ef6\u662f\u7528 &lsquo;CGO_ENABLED=0&rsquo; \u7f16\u8bd1\u7684\uff0cgo-sqlite3 \u9700\u8981 cgo \u624d\u80fd\u5de5\u4f5c\u3002\n1 brew install FiloSottile\/musl-cross\/musl-cross 1 2 3 env CC=x86_64-linux-musl-gcc CXX=x86_64-linux-musl-g++ GOARCH=amd64 GOOS=linux CGO_ENABLED=1 \\ go build -ldflags &#34;-linkmode external -extldflags -static&#34; \u5404\u79cd\u8d44\u6599\nhttps:\/\/github.com\/mattn\/go-sqlite3\/issues\/797\nhttps:\/\/titanwolf.org\/Network\/Articles\/Article?AID=70ceaf7f-fda5-46cb-a0cc-0cc347d1156c#gsc.tab=0\nhttps:\/\/stackoverflow.com\/questions\/59698483\/how-to-cross-compile-a-go-package-using-github-com-mattn-go-sqlite3-for-a-google\nhttps:\/\/blog.qiurank.com\/ \u8fd9\u4e2a\u535a\u5ba2\u5c06\u4e86cgo\nxgo\u6559\u7a0b https:\/\/www.bilibili.com\/video\/av40133443\/\nxgo\u7f16\u8bd1\u6559\u7a0b https:\/\/blog.csdn.net\/weixin_49393427\/article\/details\/114265359\nxgo ~\/Desktop\/goproject\/testfq\n\u5b89\u88c5xgo \u8fd9\u4e2a\u5305\u652f\u6301 mod\nhttps:\/\/github.com\/techknowlogick\/xgo\n1 2 docker pull techknowlogick\/xgo:latest go get src.techknowlogick.com\/xgo \u6b64\u65f6xgo\u7684\u53ef\u6267\u884c\u6587\u4ef6\u4f1a\u9ed8\u8ba4\u5b89\u88c5\u5728~\/go\/bin\/xgo\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\uff0c\u8fd9\u6837\u8f93\u5165xgo\u5c31\u53ef\u4ee5\u76f4\u63a5\u6267\u884c\n\u7f16\u8bd1 \u9879\u76ee\u8def\u5f84\u5728\n\/Users\/xxxx\/Desktop\/goproject\/testfq\n\u6240\u4ee5\u6539\u6210 ~\/Desktop\/goproject\/testfq\n1 xgo ~\/Desktop\/goproject\/testfq \u2014targets=linux\/amd64 \u53c2\u8003\u8d44\u6599 https:\/\/holmesian.org\/go-cross-compile-xgo\n","permalink":"https:\/\/my.rongyiapi.com\/posts\/go-cgo-%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91sqlite3\/","summary":"<p>\u4e8c\u8fdb\u5236\u6587\u4ef6\u662f\u7528 &lsquo;CGO_ENABLED=0&rsquo; \u7f16\u8bd1\u7684\uff0cgo-sqlite3 \u9700\u8981 cgo \u624d\u80fd\u5de5\u4f5c\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">brew install FiloSottile\/musl-cross\/musl-cross\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a class=\"lnlinks\" href=\"#hl-1-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-2\"><a class=\"lnlinks\" href=\"#hl-1-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-3\"><a class=\"lnlinks\" href=\"#hl-1-3\">3<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">env CC=x86_64-linux-musl-gcc CXX=x86_64-linux-musl-g++ GOARCH=amd64 GOOS=linux CGO_ENABLED=1 \\\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  go build -ldflags &#34;-linkmode external -extldflags -static&#34;\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5404\u79cd\u8d44\u6599<\/p>\n<p><a href=\"https:\/\/github.com\/mattn\/go-sqlite3\/issues\/797\">https:\/\/github.com\/mattn\/go-sqlite3\/issues\/797<\/a><\/p>\n<p><a href=\"https:\/\/titanwolf.org\/Network\/Articles\/Article?AID=70ceaf7f-fda5-46cb-a0cc-0cc347d1156c#gsc.tab=0\">https:\/\/titanwolf.org\/Network\/Articles\/Article?AID=70ceaf7f-fda5-46cb-a0cc-0cc347d1156c#gsc.tab=0<\/a><\/p>\n<p><a href=\"https:\/\/stackoverflow.com\/questions\/59698483\/how-to-cross-compile-a-go-package-using-github-com-mattn-go-sqlite3-for-a-google\">https:\/\/stackoverflow.com\/questions\/59698483\/how-to-cross-compile-a-go-package-using-github-com-mattn-go-sqlite3-for-a-google<\/a><\/p>\n<p><a href=\"https:\/\/blog.qiurank.com\/\">https:\/\/blog.qiurank.com\/<\/a>\n\u8fd9\u4e2a\u535a\u5ba2\u5c06\u4e86cgo<\/p>\n<p>xgo\u6559\u7a0b\n<a href=\"https:\/\/www.bilibili.com\/video\/av40133443\/\">https:\/\/www.bilibili.com\/video\/av40133443\/<\/a><\/p>\n<h1 id=\"xgo\u7f16\u8bd1\u6559\u7a0b\">xgo\u7f16\u8bd1\u6559\u7a0b<\/h1>\n<p><a href=\"https:\/\/blog.csdn.net\/weixin_49393427\/article\/details\/114265359\">https:\/\/blog.csdn.net\/weixin_49393427\/article\/details\/114265359<\/a><\/p>\n<p>xgo ~\/Desktop\/goproject\/testfq<\/p>\n<h1 id=\"\u5b89\u88c5xgo\">\u5b89\u88c5xgo<\/h1>\n<p>\u8fd9\u4e2a\u5305\u652f\u6301 mod<\/p>\n<p><a href=\"https:\/\/github.com\/techknowlogick\/xgo\">https:\/\/github.com\/techknowlogick\/xgo<\/a><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-2-1\"><a class=\"lnlinks\" href=\"#hl-2-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-2\"><a class=\"lnlinks\" href=\"#hl-2-2\">2<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">docker pull techknowlogick\/xgo:latest\n<\/span><\/span><span class=\"line\"><span class=\"cl\">go get src.techknowlogick.com\/xgo\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6b64\u65f6xgo\u7684\u53ef\u6267\u884c\u6587\u4ef6\u4f1a\u9ed8\u8ba4\u5b89\u88c5\u5728<code>~\/go\/bin\/xgo<\/code>\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\uff0c\u8fd9\u6837\u8f93\u5165xgo\u5c31\u53ef\u4ee5\u76f4\u63a5\u6267\u884c<\/p>\n<h1 id=\"\u7f16\u8bd1\">\u7f16\u8bd1<\/h1>\n<p>\u9879\u76ee\u8def\u5f84\u5728<\/p>\n<p>\/Users\/xxxx\/Desktop\/goproject\/testfq<\/p>\n<p>\u6240\u4ee5\u6539\u6210  ~\/Desktop\/goproject\/testfq<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-3-1\"><a class=\"lnlinks\" href=\"#hl-3-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">xgo ~\/Desktop\/goproject\/testfq \u2014targets=linux\/amd64\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h1 id=\"\u53c2\u8003\u8d44\u6599\">\u53c2\u8003\u8d44\u6599<\/h1>\n<p><a href=\"https:\/\/holmesian.org\/go-cross-compile-xgo\">https:\/\/holmesian.org\/go-cross-compile-xgo<\/a><\/p>","title":"go cgo \u4ea4\u53c9\u7f16\u8bd1sqlite3"},{"content":"Windows \u4e0b\u7f16\u8bd1Linux 64\u4f4d\u53ef\u6267\u884c\u7a0b\u5e8f\n1 2 3 4 SET GOOS=linux SET GOARCH=amd64 go build GOOS\uff1a\u76ee\u6807\u5e73\u53f0\uff08darwin\u3001freebsd\u3001linux\u3001windows\uff09\u00a0GOARCH\uff1a\u76ee\u6807\u5e73\u53f0\u7684\u4f53\u7cfb\u67b6\u6784\uff08386\u3001amd64\u3001arm\uff09\n\u4ea4\u53c9\u7f16\u8bd1\u4e0d\u652f\u6301 CGO\nwindow \u540e\u53f0\u65b9\u5f0f\u8fd0\u884c\n1 go build -ldflags &#34;-H=windowsgui&#34; \u7f16\u8bd1window\u8fd0\u884c\u7684\u7a0b\u5e8f 1 2 3 4 SET GOOS=windows SET GOARCH=amd64 go build \u7f16\u8bd1linux\u8fd0\u884c\u7684\u7a0b\u5e8f 1 2 3 4 SET GOOS=linux SET GOARCH=amd64 go build ","permalink":"https:\/\/my.rongyiapi.com\/posts\/go%E7%BC%96%E8%AF%91\/","summary":"<p>Windows \u4e0b\u7f16\u8bd1Linux 64\u4f4d\u53ef\u6267\u884c\u7a0b\u5e8f<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\">4<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">SET GOOS=linux\n<\/span><\/span><span class=\"line\"><span class=\"cl\">SET GOARCH=amd64\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">go build\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>GOOS\uff1a\u76ee\u6807\u5e73\u53f0\uff08darwin\u3001freebsd\u3001linux\u3001windows\uff09\u00a0<\/p>\n<p>GOARCH\uff1a\u76ee\u6807\u5e73\u53f0\u7684\u4f53\u7cfb<a href=\"http:\/\/lib.csdn.net\/base\/architecture\">\u67b6\u6784<\/a>\uff08386\u3001amd64\u3001arm\uff09<\/p>\n<p>\u4ea4\u53c9\u7f16\u8bd1\u4e0d\u652f\u6301 CGO<\/p>\n<p>window \u540e\u53f0\u65b9\u5f0f\u8fd0\u884c<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a class=\"lnlinks\" href=\"#hl-1-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">go build -ldflags &#34;-H=windowsgui&#34;\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h1 id=\"\u7f16\u8bd1window\u8fd0\u884c\u7684\u7a0b\u5e8f\">\u7f16\u8bd1window\u8fd0\u884c\u7684\u7a0b\u5e8f<\/h1>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-2-1\"><a class=\"lnlinks\" href=\"#hl-2-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-2\"><a class=\"lnlinks\" href=\"#hl-2-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-3\"><a class=\"lnlinks\" href=\"#hl-2-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-4\"><a class=\"lnlinks\" href=\"#hl-2-4\">4<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">SET GOOS=windows\n<\/span><\/span><span class=\"line\"><span class=\"cl\">SET GOARCH=amd64\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">go build\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h1 id=\"\u7f16\u8bd1linux\u8fd0\u884c\u7684\u7a0b\u5e8f\">\u7f16\u8bd1linux\u8fd0\u884c\u7684\u7a0b\u5e8f<\/h1>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-3-1\"><a class=\"lnlinks\" href=\"#hl-3-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-2\"><a class=\"lnlinks\" href=\"#hl-3-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-3\"><a class=\"lnlinks\" href=\"#hl-3-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-4\"><a class=\"lnlinks\" href=\"#hl-3-4\">4<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">SET GOOS=linux\n<\/span><\/span><span class=\"line\"><span class=\"cl\">SET GOARCH=amd64\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">go build\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>","title":"go\u7f16\u8bd1"},{"content":"\u5b66\u4e60gin\u6784\u5efa\u4e86\u4e00\u4e2a\u811a\u624b\u67b6 https:\/\/github.com\/duolabmeng6\/gin-laravel-demo\n\u6a21\u4efflaravel\u7684\u76ee\u5f55\u7ed3\u6784\u6784\u5efa\u7684gin\u5e94\u7528\n\u914d\u7f6e\u4e86config gorm redis\u7b49\n\u5b8c\u5584\u4e86gin\u7684\u65e5\u5fd7\u8bb0\u5f55\u670d\u52a1 \u53ef\u4ee5\u8bb0\u5f55\u8fd4\u56de\u7ed9\u5ba2\u6237\u7684\u5185\u5bb9\n","permalink":"https:\/\/my.rongyiapi.com\/posts\/%E5%AD%A6%E4%B9%A0gin%E6%9E%84%E5%BB%BA%E4%BA%86%E4%B8%80%E4%B8%AA%E8%84%9A%E6%89%8B%E6%9E%B6\/","summary":"<h1 id=\"\u5b66\u4e60gin\u6784\u5efa\u4e86\u4e00\u4e2a\u811a\u624b\u67b6\">\u5b66\u4e60gin\u6784\u5efa\u4e86\u4e00\u4e2a\u811a\u624b\u67b6<\/h1>\n<p><a href=\"https:\/\/github.com\/duolabmeng6\/gin-laravel-demo\">https:\/\/github.com\/duolabmeng6\/gin-laravel-demo<\/a><\/p>\n<p>\u6a21\u4efflaravel\u7684\u76ee\u5f55\u7ed3\u6784\u6784\u5efa\u7684gin\u5e94\u7528<\/p>\n<p>\u914d\u7f6e\u4e86config gorm redis\u7b49<\/p>\n<p>\u5b8c\u5584\u4e86gin\u7684\u65e5\u5fd7\u8bb0\u5f55\u670d\u52a1 \u53ef\u4ee5\u8bb0\u5f55\u8fd4\u56de\u7ed9\u5ba2\u6237\u7684\u5185\u5bb9<\/p>","title":"\u5b66\u4e60gin\u6784\u5efa\u4e86\u4e00\u4e2a\u811a\u624b\u67b6"},{"content":"\u4ecb\u7ecd \u6587\u6863 https:\/\/gin-gonic.com\/zh-cn\/docs\/\n\u76f4\u63a5\u5c31\u8dd1\u8d77\u6765\u4e86\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 ~~~ package main import ( &#34;net\/http&#34; &#34;github.com\/gin-gonic\/gin&#34; ) var db = make(map[string]string) func setupRouter() *gin.Engine { \/\/ Disable Console Color \/\/ gin.DisableConsoleColor() r := gin.Default() \/\/ Ping test r.GET(&#34;\/ping&#34;, func(c *gin.Context) { c.String(http.StatusOK, &#34;pong&#34;) }) \/\/ Get user value r.GET(&#34;\/user\/:name&#34;, func(c *gin.Context) { user := c.Params.ByName(&#34;name&#34;) value, ok := db[user] if ok { c.JSON(http.StatusOK, gin.H{&#34;user&#34;: user, &#34;value&#34;: value}) } else { c.JSON(http.StatusOK, gin.H{&#34;user&#34;: user, &#34;status&#34;: &#34;no value&#34;}) } }) \/\/ Authorized group (uses gin.BasicAuth() middleware) \/\/ Same than: \/\/ authorized := r.Group(&#34;\/&#34;) \/\/ authorized.Use(gin.BasicAuth(gin.Credentials{ \/\/ &#34;foo&#34;: &#34;bar&#34;, \/\/ &#34;manu&#34;: &#34;123&#34;, \/\/})) authorized := r.Group(&#34;\/&#34;, gin.BasicAuth(gin.Accounts{ &#34;foo&#34;: &#34;bar&#34;, \/\/ user:foo password:bar &#34;manu&#34;: &#34;123&#34;, \/\/ user:manu password:123 })) authorized.POST(&#34;admin&#34;, func(c *gin.Context) { user := c.MustGet(gin.AuthUserKey).(string) \/\/ Parse JSON var json struct { Value string `json:&#34;value&#34; binding:&#34;required&#34;` } if c.Bind(&amp;json) == nil { db[user] = json.Value c.JSON(http.StatusOK, gin.H{&#34;status&#34;: &#34;ok&#34;}) } }) return r } func main() { r := setupRouter() \/\/ Listen and Server in 0.0.0.0:8080 r.Run(&#34;:8080&#34;) } ~~~ ","permalink":"https:\/\/my.rongyiapi.com\/posts\/gin%E5%85%A5%E9%97%A8\/","summary":"<h1 id=\"\u4ecb\u7ecd\">\u4ecb\u7ecd<\/h1>\n<p>\u6587\u6863 <a href=\"https:\/\/gin-gonic.com\/zh-cn\/docs\/\">https:\/\/gin-gonic.com\/zh-cn\/docs\/<\/a><\/p>\n<p>\u76f4\u63a5\u5c31\u8dd1\u8d77\u6765\u4e86<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a class=\"lnlinks\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a class=\"lnlinks\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a class=\"lnlinks\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a class=\"lnlinks\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a class=\"lnlinks\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a class=\"lnlinks\" href=\"#hl-0-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a class=\"lnlinks\" href=\"#hl-0-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-13\"><a class=\"lnlinks\" href=\"#hl-0-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-14\"><a class=\"lnlinks\" href=\"#hl-0-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-15\"><a class=\"lnlinks\" href=\"#hl-0-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-16\"><a class=\"lnlinks\" href=\"#hl-0-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-17\"><a class=\"lnlinks\" href=\"#hl-0-17\">17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-18\"><a class=\"lnlinks\" href=\"#hl-0-18\">18<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-19\"><a class=\"lnlinks\" href=\"#hl-0-19\">19<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-20\"><a class=\"lnlinks\" href=\"#hl-0-20\">20<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-21\"><a class=\"lnlinks\" href=\"#hl-0-21\">21<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-22\"><a class=\"lnlinks\" href=\"#hl-0-22\">22<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-23\"><a class=\"lnlinks\" href=\"#hl-0-23\">23<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-24\"><a class=\"lnlinks\" href=\"#hl-0-24\">24<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-25\"><a class=\"lnlinks\" href=\"#hl-0-25\">25<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-26\"><a class=\"lnlinks\" href=\"#hl-0-26\">26<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-27\"><a class=\"lnlinks\" href=\"#hl-0-27\">27<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-28\"><a class=\"lnlinks\" href=\"#hl-0-28\">28<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-29\"><a class=\"lnlinks\" href=\"#hl-0-29\">29<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-30\"><a class=\"lnlinks\" href=\"#hl-0-30\">30<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-31\"><a class=\"lnlinks\" href=\"#hl-0-31\">31<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-32\"><a class=\"lnlinks\" href=\"#hl-0-32\">32<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-33\"><a class=\"lnlinks\" href=\"#hl-0-33\">33<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-34\"><a class=\"lnlinks\" href=\"#hl-0-34\">34<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-35\"><a class=\"lnlinks\" href=\"#hl-0-35\">35<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-36\"><a class=\"lnlinks\" href=\"#hl-0-36\">36<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-37\"><a class=\"lnlinks\" href=\"#hl-0-37\">37<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-38\"><a class=\"lnlinks\" href=\"#hl-0-38\">38<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-39\"><a class=\"lnlinks\" href=\"#hl-0-39\">39<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-40\"><a class=\"lnlinks\" href=\"#hl-0-40\">40<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-41\"><a class=\"lnlinks\" href=\"#hl-0-41\">41<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-42\"><a class=\"lnlinks\" href=\"#hl-0-42\">42<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-43\"><a class=\"lnlinks\" href=\"#hl-0-43\">43<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-44\"><a class=\"lnlinks\" href=\"#hl-0-44\">44<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-45\"><a class=\"lnlinks\" href=\"#hl-0-45\">45<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-46\"><a class=\"lnlinks\" href=\"#hl-0-46\">46<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-47\"><a class=\"lnlinks\" href=\"#hl-0-47\">47<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-48\"><a class=\"lnlinks\" href=\"#hl-0-48\">48<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-49\"><a class=\"lnlinks\" href=\"#hl-0-49\">49<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-50\"><a class=\"lnlinks\" href=\"#hl-0-50\">50<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-51\"><a class=\"lnlinks\" href=\"#hl-0-51\">51<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-52\"><a class=\"lnlinks\" href=\"#hl-0-52\">52<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-53\"><a class=\"lnlinks\" href=\"#hl-0-53\">53<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-54\"><a class=\"lnlinks\" href=\"#hl-0-54\">54<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-55\"><a class=\"lnlinks\" href=\"#hl-0-55\">55<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-56\"><a class=\"lnlinks\" href=\"#hl-0-56\">56<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-57\"><a class=\"lnlinks\" href=\"#hl-0-57\">57<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-58\"><a class=\"lnlinks\" href=\"#hl-0-58\">58<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-59\"><a class=\"lnlinks\" href=\"#hl-0-59\">59<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-60\"><a class=\"lnlinks\" href=\"#hl-0-60\">60<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-61\"><a class=\"lnlinks\" href=\"#hl-0-61\">61<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-62\"><a class=\"lnlinks\" href=\"#hl-0-62\">62<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-63\"><a class=\"lnlinks\" href=\"#hl-0-63\">63<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-64\"><a class=\"lnlinks\" href=\"#hl-0-64\">64<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-65\"><a class=\"lnlinks\" href=\"#hl-0-65\">65<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-66\"><a class=\"lnlinks\" href=\"#hl-0-66\">66<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-67\"><a class=\"lnlinks\" href=\"#hl-0-67\">67<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"p\">~~~<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">package<\/span> <span class=\"nx\">main<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">   <span class=\"s\">&#34;net\/http&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">   <span class=\"s\">&#34;github.com\/gin-gonic\/gin&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">db<\/span> <span class=\"p\">=<\/span> <span class=\"nb\">make<\/span><span class=\"p\">(<\/span><span class=\"kd\">map<\/span><span class=\"p\">[<\/span><span class=\"kt\">string<\/span><span class=\"p\">]<\/span><span class=\"kt\">string<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">setupRouter<\/span><span class=\"p\">()<\/span> <span class=\"o\">*<\/span><span class=\"nx\">gin<\/span><span class=\"p\">.<\/span><span class=\"nx\">Engine<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">   <span class=\"c1\">\/\/ Disable Console Color\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>   <span class=\"c1\">\/\/ gin.DisableConsoleColor()\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>   <span class=\"nx\">r<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">gin<\/span><span class=\"p\">.<\/span><span class=\"nf\">Default<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">   <span class=\"c1\">\/\/ Ping test\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>   <span class=\"nx\">r<\/span><span class=\"p\">.<\/span><span class=\"nf\">GET<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;\/ping&#34;<\/span><span class=\"p\">,<\/span> <span class=\"kd\">func<\/span><span class=\"p\">(<\/span><span class=\"nx\">c<\/span> <span class=\"o\">*<\/span><span class=\"nx\">gin<\/span><span class=\"p\">.<\/span><span class=\"nx\">Context<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"nx\">c<\/span><span class=\"p\">.<\/span><span class=\"nf\">String<\/span><span class=\"p\">(<\/span><span class=\"nx\">http<\/span><span class=\"p\">.<\/span><span class=\"nx\">StatusOK<\/span><span class=\"p\">,<\/span> <span class=\"s\">&#34;pong&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">   <span class=\"p\">})<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">   <span class=\"c1\">\/\/ Get user value\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>   <span class=\"nx\">r<\/span><span class=\"p\">.<\/span><span class=\"nf\">GET<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;\/user\/:name&#34;<\/span><span class=\"p\">,<\/span> <span class=\"kd\">func<\/span><span class=\"p\">(<\/span><span class=\"nx\">c<\/span> <span class=\"o\">*<\/span><span class=\"nx\">gin<\/span><span class=\"p\">.<\/span><span class=\"nx\">Context<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"nx\">user<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">c<\/span><span class=\"p\">.<\/span><span class=\"nx\">Params<\/span><span class=\"p\">.<\/span><span class=\"nf\">ByName<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;name&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"nx\">value<\/span><span class=\"p\">,<\/span> <span class=\"nx\">ok<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">db<\/span><span class=\"p\">[<\/span><span class=\"nx\">user<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"k\">if<\/span> <span class=\"nx\">ok<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">         <span class=\"nx\">c<\/span><span class=\"p\">.<\/span><span class=\"nf\">JSON<\/span><span class=\"p\">(<\/span><span class=\"nx\">http<\/span><span class=\"p\">.<\/span><span class=\"nx\">StatusOK<\/span><span class=\"p\">,<\/span> <span class=\"nx\">gin<\/span><span class=\"p\">.<\/span><span class=\"nx\">H<\/span><span class=\"p\">{<\/span><span class=\"s\">&#34;user&#34;<\/span><span class=\"p\">:<\/span> <span class=\"nx\">user<\/span><span class=\"p\">,<\/span> <span class=\"s\">&#34;value&#34;<\/span><span class=\"p\">:<\/span> <span class=\"nx\">value<\/span><span class=\"p\">})<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">         <span class=\"nx\">c<\/span><span class=\"p\">.<\/span><span class=\"nf\">JSON<\/span><span class=\"p\">(<\/span><span class=\"nx\">http<\/span><span class=\"p\">.<\/span><span class=\"nx\">StatusOK<\/span><span class=\"p\">,<\/span> <span class=\"nx\">gin<\/span><span class=\"p\">.<\/span><span class=\"nx\">H<\/span><span class=\"p\">{<\/span><span class=\"s\">&#34;user&#34;<\/span><span class=\"p\">:<\/span> <span class=\"nx\">user<\/span><span class=\"p\">,<\/span> <span class=\"s\">&#34;status&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s\">&#34;no value&#34;<\/span><span class=\"p\">})<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">   <span class=\"p\">})<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">   <span class=\"c1\">\/\/ Authorized group (uses gin.BasicAuth() middleware)\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>   <span class=\"c1\">\/\/ Same than:\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>   <span class=\"c1\">\/\/ authorized := r.Group(&#34;\/&#34;)\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>   <span class=\"c1\">\/\/ authorized.Use(gin.BasicAuth(gin.Credentials{\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>   <span class=\"c1\">\/\/   &#34;foo&#34;:  &#34;bar&#34;,\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>   <span class=\"c1\">\/\/   &#34;manu&#34;: &#34;123&#34;,\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>   <span class=\"c1\">\/\/}))\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>   <span class=\"nx\">authorized<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">r<\/span><span class=\"p\">.<\/span><span class=\"nf\">Group<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;\/&#34;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">gin<\/span><span class=\"p\">.<\/span><span class=\"nf\">BasicAuth<\/span><span class=\"p\">(<\/span><span class=\"nx\">gin<\/span><span class=\"p\">.<\/span><span class=\"nx\">Accounts<\/span><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"s\">&#34;foo&#34;<\/span><span class=\"p\">:<\/span>  <span class=\"s\">&#34;bar&#34;<\/span><span class=\"p\">,<\/span> <span class=\"c1\">\/\/ user:foo password:bar\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>      <span class=\"s\">&#34;manu&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s\">&#34;123&#34;<\/span><span class=\"p\">,<\/span> <span class=\"c1\">\/\/ user:manu password:123\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>   <span class=\"p\">}))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">   <span class=\"nx\">authorized<\/span><span class=\"p\">.<\/span><span class=\"nf\">POST<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;admin&#34;<\/span><span class=\"p\">,<\/span> <span class=\"kd\">func<\/span><span class=\"p\">(<\/span><span class=\"nx\">c<\/span> <span class=\"o\">*<\/span><span class=\"nx\">gin<\/span><span class=\"p\">.<\/span><span class=\"nx\">Context<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"nx\">user<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">c<\/span><span class=\"p\">.<\/span><span class=\"nf\">MustGet<\/span><span class=\"p\">(<\/span><span class=\"nx\">gin<\/span><span class=\"p\">.<\/span><span class=\"nx\">AuthUserKey<\/span><span class=\"p\">).(<\/span><span class=\"kt\">string<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"c1\">\/\/ Parse JSON\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>      <span class=\"kd\">var<\/span> <span class=\"nx\">json<\/span> <span class=\"kd\">struct<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">         <span class=\"nx\">Value<\/span> <span class=\"kt\">string<\/span> <span class=\"s\">`json:&#34;value&#34; binding:&#34;required&#34;`<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"k\">if<\/span> <span class=\"nx\">c<\/span><span class=\"p\">.<\/span><span class=\"nf\">Bind<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"nx\">json<\/span><span class=\"p\">)<\/span> <span class=\"o\">==<\/span> <span class=\"kc\">nil<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">         <span class=\"nx\">db<\/span><span class=\"p\">[<\/span><span class=\"nx\">user<\/span><span class=\"p\">]<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">json<\/span><span class=\"p\">.<\/span><span class=\"nx\">Value<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">         <span class=\"nx\">c<\/span><span class=\"p\">.<\/span><span class=\"nf\">JSON<\/span><span class=\"p\">(<\/span><span class=\"nx\">http<\/span><span class=\"p\">.<\/span><span class=\"nx\">StatusOK<\/span><span class=\"p\">,<\/span> <span class=\"nx\">gin<\/span><span class=\"p\">.<\/span><span class=\"nx\">H<\/span><span class=\"p\">{<\/span><span class=\"s\">&#34;status&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s\">&#34;ok&#34;<\/span><span class=\"p\">})<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">   <span class=\"p\">})<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">   <span class=\"k\">return<\/span> <span class=\"nx\">r<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">   <span class=\"nx\">r<\/span> <span class=\"o\">:=<\/span> <span class=\"nf\">setupRouter<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">   <span class=\"c1\">\/\/ Listen and Server in 0.0.0.0:8080\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>   <span class=\"nx\">r<\/span><span class=\"p\">.<\/span><span class=\"nf\">Run<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;:8080&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">~~~<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>","title":"gin\u5165\u95e8"},{"content":"Caddy \u914d\u7f6e\u81ea\u52a8\u914d\u7f6ehttps \u548c docker\u542f\u52a8ssh Caddyfile\n1 2 3 4 5 6 7 8 go.kenhong.com { root * \/srv encode { zstd gzip 9 } file_server } docker-compose.yml\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 version: &#39;3.2&#39; services: openssh-server: image: linuxserver\/openssh-server:latest container_name: openssh-server hostname: openssh-server #optional environment: - PUID=1000 - PGID=1000 - TZ=Asia\/Shanghai - SUDO_ACCESS=false #optional - PASSWORD_ACCESS=true #optional - USER_PASSWORD=${USER_PASSWORD} - USER_NAME=${USER_NAME} #optional volumes: - .\/config:\/config - .\/www:\/config\/www ports: - ${SSH_PORT}:2222 restart: unless-stopped caddy: image: caddy:2-alpine ports: - &#34;80:80&#34; - &#34;443:443&#34; - &#34;443:443\/udp&#34; volumes: - .\/Caddyfile:\/etc\/caddy\/Caddyfile - .\/www:\/srv - .\/caddy_data:\/data - .\/caddy_config:\/config ","permalink":"https:\/\/my.rongyiapi.com\/posts\/caddy-%E9%85%8D%E7%BD%AE%E8%87%AA%E5%8A%A8%E9%85%8D%E7%BD%AEhttps-%E5%92%8C-docker%E5%90%AF%E5%8A%A8ssh\/","summary":"<h1 id=\"caddy-\u914d\u7f6e\u81ea\u52a8\u914d\u7f6ehttps-\u548c-docker\u542f\u52a8ssh\">Caddy \u914d\u7f6e\u81ea\u52a8\u914d\u7f6ehttps \u548c docker\u542f\u52a8ssh<\/h1>\n<p>Caddyfile<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\">4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\">5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a class=\"lnlinks\" href=\"#hl-0-6\">6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a class=\"lnlinks\" href=\"#hl-0-7\">7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a class=\"lnlinks\" href=\"#hl-0-8\">8<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">go.kenhong.com {\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\troot * \/srv\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    encode {\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        zstd\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        gzip 9\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    }\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\tfile_server\n<\/span><\/span><span class=\"line\"><span class=\"cl\">}\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>docker-compose.yml<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a class=\"lnlinks\" href=\"#hl-1-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-2\"><a class=\"lnlinks\" href=\"#hl-1-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-3\"><a class=\"lnlinks\" href=\"#hl-1-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-4\"><a class=\"lnlinks\" href=\"#hl-1-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-5\"><a class=\"lnlinks\" href=\"#hl-1-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-6\"><a class=\"lnlinks\" href=\"#hl-1-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-7\"><a class=\"lnlinks\" href=\"#hl-1-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-8\"><a class=\"lnlinks\" href=\"#hl-1-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-9\"><a class=\"lnlinks\" href=\"#hl-1-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-10\"><a class=\"lnlinks\" href=\"#hl-1-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-11\"><a class=\"lnlinks\" href=\"#hl-1-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-12\"><a class=\"lnlinks\" href=\"#hl-1-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-13\"><a class=\"lnlinks\" href=\"#hl-1-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-14\"><a class=\"lnlinks\" href=\"#hl-1-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-15\"><a class=\"lnlinks\" href=\"#hl-1-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-16\"><a class=\"lnlinks\" href=\"#hl-1-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-17\"><a class=\"lnlinks\" href=\"#hl-1-17\">17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-18\"><a class=\"lnlinks\" href=\"#hl-1-18\">18<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-19\"><a class=\"lnlinks\" href=\"#hl-1-19\">19<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-20\"><a class=\"lnlinks\" href=\"#hl-1-20\">20<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-21\"><a class=\"lnlinks\" href=\"#hl-1-21\">21<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-22\"><a class=\"lnlinks\" href=\"#hl-1-22\">22<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-23\"><a class=\"lnlinks\" href=\"#hl-1-23\">23<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-24\"><a class=\"lnlinks\" href=\"#hl-1-24\">24<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-25\"><a class=\"lnlinks\" href=\"#hl-1-25\">25<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-26\"><a class=\"lnlinks\" href=\"#hl-1-26\">26<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-27\"><a class=\"lnlinks\" href=\"#hl-1-27\">27<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-28\"><a class=\"lnlinks\" href=\"#hl-1-28\">28<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-29\"><a class=\"lnlinks\" href=\"#hl-1-29\">29<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-30\"><a class=\"lnlinks\" href=\"#hl-1-30\">30<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-31\"><a class=\"lnlinks\" href=\"#hl-1-31\">31<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-32\"><a class=\"lnlinks\" href=\"#hl-1-32\">32<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-33\"><a class=\"lnlinks\" href=\"#hl-1-33\">33<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">version: &#39;3.2&#39;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">services:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  openssh-server:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    image: linuxserver\/openssh-server:latest\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    container_name: openssh-server\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    hostname: openssh-server #optional\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    environment:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - PUID=1000\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - PGID=1000\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - TZ=Asia\/Shanghai\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - SUDO_ACCESS=false #optional\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - PASSWORD_ACCESS=true #optional\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - USER_PASSWORD=${USER_PASSWORD}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - USER_NAME=${USER_NAME} #optional\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    volumes:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - .\/config:\/config\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - .\/www:\/config\/www\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    ports:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - ${SSH_PORT}:2222\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    restart: unless-stopped\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  caddy:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    image: caddy:2-alpine\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    ports:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - &#34;80:80&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - &#34;443:443&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - &#34;443:443\/udp&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    volumes:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - .\/Caddyfile:\/etc\/caddy\/Caddyfile\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - .\/www:\/srv\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - .\/caddy_data:\/data\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - .\/caddy_config:\/config\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>","title":"Caddy \u914d\u7f6e\u81ea\u52a8\u914d\u7f6ehttps \u548c docker\u542f\u52a8ssh"},{"content":"docker\u7684nginx\u7ba1\u7406\u9762\u677f NginxProxyManager\/nginx-proxy-manager: Docker container for managing Nginx proxy hosts with a simple, powerful interface (github.com)\n\u82f1\u6587\u7248\u672c 1 2 3 4 5 6 7 8 9 10 11 12 version: &#39;3.8&#39; services: app: image: &#39;jc21\/nginx-proxy-manager:latest&#39; restart: unless-stopped ports: - &#39;80:80&#39; - &#39;81:81&#39; - &#39;443:443&#39; volumes: - .\/data:\/data - .\/letsencrypt:\/etc\/letsencrypt \u4e2d\u6587\u7248\u672c xiaoxinpro\/nginx-proxy-manager-zh: \u57fa\u4e8enginx-proxy-manager\u7ffb\u8bd1\u7684\u4e2d\u6587\u7248\u672c (github.com)\n1 2 3 4 5 6 7 8 9 10 11 12 version: &#39;3.8&#39; services: app: image: &#39;chishin\/nginx-proxy-manager-zh:release&#39; restart: unless-stopped ports: - &#39;80:80&#39; - &#39;81:81&#39; - &#39;443:443&#39; volumes: - .\/data:\/data - .\/letsencrypt:\/etc\/letsencrypt \u7981\u6b62ip\u8bbf\u95ee \u53ea\u5141\u8bb8\u57df\u540d 1 2 3 4 5 6 nginx_proxy\/data\/nginx\/custom\/http_top.conf \u5185\u5bb9 server { listen 80 default_server; listen [::] default_server; server_name _; return 444; } ","permalink":"https:\/\/my.rongyiapi.com\/posts\/docker%E7%9A%84nginx%E7%AE%A1%E7%90%86%E9%9D%A2%E6%9D%BF\/","summary":"<h1 id=\"docker\u7684nginx\u7ba1\u7406\u9762\u677f\">docker\u7684nginx\u7ba1\u7406\u9762\u677f<\/h1>\n<p><a href=\"https:\/\/github.com\/NginxProxyManager\/nginx-proxy-manager\">NginxProxyManager\/nginx-proxy-manager: Docker container for managing Nginx proxy hosts with a simple, powerful interface (github.com)<\/a><\/p>\n<h1 id=\"\u82f1\u6587\u7248\u672c\">\u82f1\u6587\u7248\u672c<\/h1>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a class=\"lnlinks\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a class=\"lnlinks\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a class=\"lnlinks\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a class=\"lnlinks\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a class=\"lnlinks\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a class=\"lnlinks\" href=\"#hl-0-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a class=\"lnlinks\" href=\"#hl-0-12\">12<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">version: &#39;3.8&#39;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">services:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  app:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    image: &#39;jc21\/nginx-proxy-manager:latest&#39;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    restart: unless-stopped\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    ports:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - &#39;80:80&#39;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - &#39;81:81&#39;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - &#39;443:443&#39;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    volumes:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - .\/data:\/data\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      - .\/letsencrypt:\/etc\/letsencrypt\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h1 id=\"\u4e2d\u6587\u7248\u672c\">\u4e2d\u6587\u7248\u672c<\/h1>\n<p><a href=\"https:\/\/github.com\/xiaoxinpro\/nginx-proxy-manager-zh\">xiaoxinpro\/nginx-proxy-manager-zh: \u57fa\u4e8enginx-proxy-manager\u7ffb\u8bd1\u7684\u4e2d\u6587\u7248\u672c (github.com)<\/a><\/p>","title":"docker\u7684nginx\u7ba1\u7406\u9762\u677f"},{"content":"docker\u6784\u5efa\u8fd9\u4e00\u7bc7\u5c31\u591f\u4e86 b\u7ad9 https:\/\/www.bilibili.com\/video\/BV1iY411P7Dp\/\n\u7b80\u5355\u4ecb\u7ecd\u98de\u6d46 \u901a\u8fc7docker\u6784\u5efaOCR\u5e94\u7528 Docker\u955c\u50cf\u7626\u8eab\u6280\u5de7 \u7528\u51fd\u6570\u8ba1\u7b97\u90e8\u7f72\u5236\u4f5c\u597d\u7684docker\u5e94\u7528 \u76ee\u6807 \u5728 docker \u4e2d\u6784\u5efa PaddleOCR \u7684\u8fd0\u884c\u73af\u5883 \u53ef\u4ee5\u5728 Serverless \u67b6\u6784\u4e2d\u8fd0\u884c(\u963f\u91cc\u4e91\u51fd\u6570\u8ba1\u7b97 \u817e\u8baf\u4e91\u51fd\u6570) \u96be\u70b9 \u5728\u6784\u5efa\u955c\u50cf\u65b9\u9762\uff0c\u98de\u6d46\u5b98\u65b9\u63d0\u4f9b\u7684 docker \u955c\u50cf\uff0c\u52a8\u8f84 4GB\u30018GB\uff0c\u5728\u955c\u50cf\u5982\u6b64\u5927\u7684\u60c5\u51b5\u4e0b\u57fa\u672c\u65e0\u7f18 Serverless \u3002 \u6df1\u5ea6\u5b66\u4e60\u7684\u90e8\u7f72\u73af\u5883\u590d\u6742\u4f9d\u8d56\u591a docker \u5e38\u7528\u547d\u4ee4 \u521b\u5efa python \u7684\u8fd0\u884c\u73af\u5883 1 docker run -itd --name pyrun -p 9000:9000 -v \u4e3b\u673a\u76ee\u5f55:\/app python:3.7.10-slim \/bin\/bash \u8fdb\u5165\u5bb9\u5668\u8c03\u8bd5 1 docker exec -it pyrun \/bin\/bash \u6e05\u7406\u7f13\u5b58 1 2 3 rm -rf \/root\/.cache\/* \\ &amp;&amp; rm -rf \/var\/lib\/apt\/lists\/* \\ &amp;&amp; rm -rf \/app\/test\/pg\/* \u67e5\u770b\u4fee\u6539\u8bb0\u5f55 1 docker container diff \u5bb9\u5668\u540d\u79f0 &gt; \u5bb9\u5668\u4fee\u6539\u8bb0\u5f55.log \u67e5\u770b\u5c42\u7684\u5927\u5c0f 1 docker image history \u955c\u50cf\u540d\u79f0 \u8fd0\u884c\u4e2d\u7684\u5bb9\u5668\u5927\u5c0f 1 docker container ls -s \u67e5\u770b\u65e5\u5fd7\u7684\u811a\u672c 1 docker logs testocr --tail 10 -f \u955c\u50cf\u4fdd\u5b58 \u4fdd\u5b58\u4e3a\u955c\u50cf\n1 docker commit \u5bb9\u5668\u540d\u79f0 \u955c\u50cf\u540d\u79f0:1.3 \u5bfc\u51fa\u4e3a\u6587\u4ef6\n1 docker export -o \u6587\u4ef6\u540d.tar \u5bb9\u5668\u540d\u79f0 \u955c\u50cf\u63a8\u9001 1 2 3 4 5 docker login --username=\u7528\u6237\u540d registry.cn-hongkong.aliyuncs.com docker commit pyrun pyrun:1.0 docker tag pyrun:1.0 registry.cn-hongkong.aliyuncs.com\/duolabemng\/pyrun:1.0 docker push registry.cn-hongkong.aliyuncs.com\/duolabemng\/pyrun:1.0 \u6e05\u7a7a\u4e00\u4e9b\u65e0\u7528\u7684\u955c\u50cf 1 docker system prune -af \u5b89\u88c5\u955c\u50cf\u7684\u65f6\u5019\u53d1\u73b0&hellip;\u63d0\u793a\u7cfb\u7edf\u7a7a\u95f4\u4e0d\u8db3\n\u901a\u8fc7\u8fd9\u4e2a\u547d\u4ee4\u5220\u9664\u4e8650gb\u7684\u7a7a\u95f4\u5c31\u53ef\u4ee5\u6b63\u5e38\u5b89\u88c5\u4e86\n\u5220\u9664\u6240\u6709\u7684\u955c\u50cf 1 docker rmi $(docker images -q) \u6e05\u7406 docker system prune\ndocker container prune\ndocker image prune \u5220\u9664\u6240\u6709\u4e0d\u4f7f\u7528\u7684\u955c\u50cf\ndocker image prune --force --all\u6216\u8005docker image prune -f -a \u5220\u9664\u6240\u6709\u505c\u6b62\u7684\u5bb9\u5668 docker container prune -f\n\u6280\u5de7 \u4f9d\u8d56\u5b89\u88c5 \u5efa\u8bae\u5148\u5c06\u5305\u4e0b\u8f7d\u56de\u6765 \u7136\u540e\u518d\u8fdb\u884c\u5b89\u88c5 \u907f\u514d\u6bcf\u6b21\u90fd\u8981\u91cd\u65b0\u4e0b\u8f7d\u901f\u5ea6\u6162\n\u4e0b\u8f7d\u79bb\u7ebf\u5b89\u88c5\u5305\n1 2 3 pip download -r requirements.txt -d .\/pg pip download paddlepaddle==2.0.2 -i https:\/\/mirror.baidu.com\/pypi\/simple -d .\/pg pip download paddlehub -d .\/pg \u5b89\u88c5\u79bb\u7ebf\u5b89\u88c5\u5305\n1 2 3 pip install -r requirements.txt --find-links .\/pg pip install paddlepaddle --find-links .\/pg pip install paddlehub -U --no-index --find-links .\/pg \u5f00\u59cb\u6784\u5efa \u98de\u6d46\u4ecb\u7ecd https:\/\/www.paddlepaddle.org.cn\/hub\/scene\/ocr\nPaddleHub\u4e00\u952eOCR\u4e2d\u6587\u8bc6\u522b https:\/\/aistudio.baidu.com\/aistudio\/projectdetail\/50715\nPaddleHub \u9879\u76ee\n\u6a21\u578b\u8bf4\u660e chinese_ocr_db_crnn_mobile\n\u6839\u636e\u6559\u7a0b\u5462 \u6211\u4eec\u5f00\u59cb\u5199\u4e00\u4e2a\u8c03\u8bd5\u7684\u4ee3\u7801\n1 2 3 . \u251c\u2500\u2500 main.py \u2514\u2500\u2500 test.png main.py \u7528\u4e8e\u8c03\u8bd5docker\u73af\u5883\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import paddlehub as hub import cv2 # \u52a0\u8f7d\u79fb\u52a8\u7aef\u9884\u8bad\u7ec3\u6a21\u578b ocr = hub.Module(name=&#34;chinese_ocr_db_crnn_mobile&#34;) np_images =[cv2.imread(image_path) for image_path in [&#39;test.png&#39;]] results = ocr.recognize_text( images=np_images, # \u56fe\u7247\u6570\u636e\uff0cndarray.shape \u4e3a [H, W, C]\uff0cBGR\u683c\u5f0f\uff1b use_gpu=False, # \u662f\u5426\u4f7f\u7528 GPU\uff1b\u82e5\u4f7f\u7528GPU\uff0c\u8bf7\u5148\u8bbe\u7f6eCUDA_VISIBLE_DEVICES\u73af\u5883\u53d8\u91cf output_dir=&#39;ocr_result&#39;, # \u56fe\u7247\u7684\u4fdd\u5b58\u8def\u5f84\uff0c\u9ed8\u8ba4\u8bbe\u4e3a ocr_result\uff1b visualization=False, # \u662f\u5426\u5c06\u8bc6\u522b\u7ed3\u679c\u4fdd\u5b58\u4e3a\u56fe\u7247\u6587\u4ef6\uff1b box_thresh=0.5, # \u68c0\u6d4b\u6587\u672c\u6846\u7f6e\u4fe1\u5ea6\u7684\u9608\u503c\uff1b text_thresh=0.5) # \u8bc6\u522b\u4e2d\u6587\u6587\u672c\u7f6e\u4fe1\u5ea6\u7684\u9608\u503c\uff1b for result in results: data = result[&#39;data&#39;] save_path = result[&#39;save_path&#39;] for infomation in data: print(&#39;text: &#39;, infomation[&#39;text&#39;], &#39;\\nconfidence: &#39;, infomation[&#39;confidence&#39;], &#39;\\ntext_box_position: &#39;, infomation[&#39;text_box_position&#39;]) python main.py \u4ed6\u4f1a\u81ea\u52a8\u4e0b\u8f7d\u6a21\u578b\u7136\u540e\u9884\u6d4b\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 \/Users\/chensuilong\/opt\/anaconda3\/bin\/python3 \/Users\/chensuilong\/Desktop\/ll\/paddle_ocr\/main.py Download https:\/\/bj.bcebos.com\/paddlehub\/paddlehub_dev\/chinese_ocr_db_crnn_mobile-1.1.2.tar.gz [##################################################] 100.00% Decompress \/Users\/chensuilong\/.paddlehub\/tmp\/tmpi0gh44y4\/chinese_ocr_db_crnn_mobile-1.1.2.tar.gz [##################################################] 100.00% [2022-04-20 21:56:41,486] [ WARNING] - Some errors occurred while installing dependent packages. Detailed error information can be found in the \/Users\/chensuilong\/.paddlehub\/log\/20220420.log. [2022-04-20 21:56:41,611] [ INFO] - Successfully installed chinese_ocr_db_crnn_mobile-1.1.2 [2022-04-20 21:56:41,615] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object W0420 21:56:41.624859 383747584 analysis_predictor.cc:1350] Deprecated. Please use CreatePredictor instead. Download https:\/\/bj.bcebos.com\/paddlehub\/paddlehub_dev\/chinese_text_detection_db_mobile-1.0.4.tar.gz [##################################################] 100.00% Decompress \/Users\/chensuilong\/.paddlehub\/tmp\/tmp10sdi16o\/chinese_text_detection_db_mobile-1.0.4.tar.gz [##################################################] 100.00% [2022-04-20 21:58:31,500] [ WARNING] - Some errors occurred while installing dependent packages. Detailed error information can be found in the \/Users\/chensuilong\/.paddlehub\/log\/20220420.log. [2022-04-20 21:58:31,586] [ INFO] - Successfully installed chinese_text_detection_db_mobile-1.0.4 [2022-04-20 21:58:31,588] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object text: \u9759\u591c\u601d-\u767e\u5ea6\u6c49\u8bed confidence: 0.9352425336837769 text_box_position: [[67, 99], [356, 44], [363, 82], [73, 135]] text: \u4f5c\u8005\uff1a\u674e\u767d confidence: 0.9981538653373718 text_box_position: [[67, 155], [201, 131], [205, 159], [72, 183]] text: \u5e8a\u524d\u660e\u6708\u5149\uff0c\u7591\u662f\u5730\u4e0a\u971c confidence: 0.9981472492218018 text_box_position: [[69, 193], [526, 103], [533, 145], [76, 235]] text: \u4e3e\u5934\u671b\u660e\u6708\uff0c\u4f4e\u5934\u601d\u6545\u4e61\u3002 confidence: 0.9937448501586914 text_box_position: [[67, 241], [530, 150], [536, 192], [75, 283]] \u8fdb\u7a0b\u5df2\u7ed3\u675f,\u9000\u51fa\u4ee3\u78010 \u6839\u636e\u6559\u7a0b\u7528\u8fd9\u4e2a\u547d\u4ee4\u884c\u5c31\u53ef\u4ee5\u76f4\u63a5\u90e8\u7f72\u6210\u529f\u7684\n1 hub serving start -m chinese_ocr_db_crnn_mobile -p 8866 \u91cd\u5934\u620f \u5728docker\u91cc\u9762\u6784\u5efa\u6240\u9700\u8981\u7684\u73af\u5883 1 \u57fa\u7840\u73af\u5883\u548c\u4ee3\u7801 1 2 3 4 docker run -itd --name pyrun -p 9000:9000 -v \/Users\/chensuilong\/Desktop\/ll\/paddle_ocr:\/app python:3.7.10-slim \/bin\/bash docker exec -it pyrun \/bin\/bash cd \/app python main.py 2 \u8fdb\u5165\u5bb9\u5668\u8fd0\u884c\u4ee3\u7801 1 2 3 4 5 6 7 8 9 10 11 docker exec -it pyrun \/bin\/bash root@74af256d692f:\/# ls app bin boot\tdev etc home\tlib lib64 media mnt\topt proc root run sbin srv sys tmp usr\tvar root@74af256d692f:\/# cd app\/ root@74af256d692f:\/app# ls main.py test.png root@74af256d692f:\/app# python main.py Traceback (most recent call last): File &#34;main.py&#34;, line 1, in &lt;module&gt; import paddlehub as hub ModuleNotFoundError: No module named &#39;paddlehub&#39; \u53d1\u73b0\u7f3a\u5c11\u6a21\u5757 paddlehub \u90a3\u4e48\u8c03\u8bd5\u7684\u73af\u5883\u7684\u4ee3\u7801\u5df2\u7ecf\u51c6\u5907\u597d\u4e86 \u6211\u4eec\u4e00\u6b65\u4e00\u6b65\u5b89\u88c5\n\u5b89\u88c5pip\u5305 \u6839\u636e\u4e0a\u9762\u7684\u6587\u6863\u6309\u7167\u5305 \u53d1\u73b0\u5b89\u88c5\u7684\u90fd\u662f\u6700\u65b0\u7248 \u90a3\u662f\u8fd0\u884c\u4e0d\u8d77\u6765\u7684\n\u6240\u4ee5\u8fd9\u91cc\u6211\u628a\u7248\u672c\u90fd\u6307\u5b9a\u597d\u4e86\u5c31\u90fd\u53ef\u4ee5\u8fd0\u884c\u4e86\nrequirements.txt\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 shapely==1.8.1.post1 scikit-image==0.17.2 imgaug==0.4.0 pyclipper==1.3.0.post2 lmdb==1.3.0 tqdm==4.64.0 numpy==1.21.6 visualdl==2.2.3 python-Levenshtein==0.12.2 opencv-contrib-python==4.2.0.32 paddlenlp==2.0.0 paddle2onnx==0.5.1 paddlepaddle==2.0.2 paddlehub==2.1.0 \u5b89\u88c5\u7684\u547d\u4ee4\npip3 install --no-cache-dir -r \/app\/requirements.txt -i https:\/\/mirror.baidu.com\/pypi\/simple\n\u5b89\u88c5\u597d\u4ee5\u4e0a\u7684\u5305\npython main.py\n1 ImportError: libgomp.so.1: cannot open shared object file: No such file or directory \u53d1\u73b0\u62a5\u9519 \u767e\u5ea6 \u8c37\u6b4c \u641c\u7d22\u4e00\u4e0b ImportError: libgomp.so.1: \u7136\u540e\u4f9d\u6b21\u5b89\u88c5\u5305\napt update \u4e00\u4e0b \u6839\u636e\u6211\u641c\u7d22\u7684\u7ed3\u679c\u5462 \u5b89\u88c5\u4e00\u4e0b\u7684\u5305\u5c31\u53ef\u4ee5\u89e3\u51b3\n\u5b89\u88c5\u7cfb\u7edf\u4f9d\u8d56 \u9700\u8981\u5148 apt update\n1 2 3 4 5 6 7 apt install g++ -y apt install libglib2.0-dev -y apt install libgl1-mesa-glx -y apt install libsm6 -y apt install libxrender1 -y apt install libgl1 -y \u7ecf\u8fc7\u4e0d\u65ad\u7684\u8c03\u8bd5\u7ec8\u4e8e\u6210\u529f\u4e86\npython main.py\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 root@74af256d692f:\/app# python main.py \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:36: DeprecationWarning: NEAREST is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.NEAREST or Dither.NONE instead. &#39;nearest&#39;: Image.NEAREST, \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:37: DeprecationWarning: BILINEAR is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.BILINEAR instead. &#39;bilinear&#39;: Image.BILINEAR, \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:38: DeprecationWarning: BICUBIC is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.BICUBIC instead. &#39;bicubic&#39;: Image.BICUBIC, \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:39: DeprecationWarning: BOX is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.BOX instead. &#39;box&#39;: Image.BOX, \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:40: DeprecationWarning: LANCZOS is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.LANCZOS instead. &#39;lanczos&#39;: Image.LANCZOS, \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:41: DeprecationWarning: HAMMING is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.HAMMING instead. &#39;hamming&#39;: Image.HAMMING [2022-04-20 15:00:51,181] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object W0420 15:00:51.188429 2256 analysis_predictor.cc:1350] Deprecated. Please use CreatePredictor instead. [2022-04-20 15:00:51,448] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object text: \u9759\u591c\u601d-\u767e\u5ea6\u6c49\u8bed confidence: 0.9352424144744873 text_box_position: [[67, 99], [356, 44], [363, 82], [73, 135]] text: \u4f5c\u8005\uff1a\u674e\u767d confidence: 0.9981538653373718 text_box_position: [[67, 155], [201, 131], [205, 159], [72, 183]] text: \u5e8a\u524d\u660e\u6708\u5149\uff0c\u7591\u662f\u5730\u4e0a\u971c confidence: 0.9981472492218018 text_box_position: [[69, 193], [526, 103], [533, 145], [76, 235]] text: \u4e3e\u5934\u671b\u660e\u6708\uff0c\u4f4e\u5934\u601d\u6545\u4e61\u3002 confidence: 0.9937446713447571 text_box_position: [[67, 241], [530, 150], [536, 192], [75, 283]] \u6b64\u65f6\u8fd0\u884c\u73af\u5883\u5df2\u7ecf\u6784\u5efa\u597d\u4e86\n\u670d\u52a1\u5668\u90e8\u7f72Api\u63a5\u53e3 \u76f4\u63a5\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u884c\u5373\u53ef\n1 hub serving start -m chinese_ocr_db_crnn_mobile -p 9000 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 root@74af256d692f:\/app# hub serving start -m chinese_ocr_db_crnn_mobile -p 9000 \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:36: DeprecationWarning: NEAREST is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.NEAREST or Dither.NONE instead. &#39;nearest&#39;: Image.NEAREST, \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:37: DeprecationWarning: BILINEAR is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.BILINEAR instead. &#39;bilinear&#39;: Image.BILINEAR, \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:38: DeprecationWarning: BICUBIC is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.BICUBIC instead. &#39;bicubic&#39;: Image.BICUBIC, \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:39: DeprecationWarning: BOX is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.BOX instead. &#39;box&#39;: Image.BOX, \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:40: DeprecationWarning: LANCZOS is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.LANCZOS instead. &#39;lanczos&#39;: Image.LANCZOS, \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:41: DeprecationWarning: HAMMING is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.HAMMING instead. &#39;hamming&#39;: Image.HAMMING [2022-04-20 15:08:48,389] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object W0420 15:08:48.396706 2293 analysis_predictor.cc:1350] Deprecated. Please use CreatePredictor instead. * Serving Flask app &#39;paddlehub.serving.app_compat&#39; (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on all addresses (0.0.0.0) WARNING: This is a development server. Do not use it in a production deployment. * Running on http:\/\/127.0.0.1:9000 * Running on http:\/\/172.17.0.2:9000 (Press CTRL+C to quit) 172.17.0.1 - - [20\/Apr\/2022 15:08:57] &#34;POST \/predict\/ocr_system HTTP\/1.1&#34; 200 - 172.17.0.1 - - [20\/Apr\/2022 15:09:04] &#34;POST \/predict\/ocr_system HTTP\/1.1&#34; 200 - 172.17.0.1 - - [20\/Apr\/2022 15:09:11] &#34;POST \/predict\/ocr_system HTTP\/1.1&#34; 200 - 172.17.0.1 - - [20\/Apr\/2022 15:09:44] &#34;POST \/predict\/chinese_ocr_db_crnn_mobile HTTP\/1.1&#34; 200 - 172.17.0.1 - - [20\/Apr\/2022 15:09:50] &#34;POST \/predict\/chinese_ocr_db_crnn_mobile HTTP\/1.1&#34; 200 - \u8c03\u7528\u65b9\u6cd5\n1 2 3 4 5 6 7 8 9 10 11 12 13 import requests import base64 def ocr(imagePath): with open(imagePath, &#39;rb&#39;) as f: data = f.read(-1) image = str(base64.b64encode(data), encoding=&#39;utf-8&#39;) data = &#39;{&#34;images&#34;:[&#34;&#39; + image + &#39;&#34;]}&#39; txt = requests.post(&#34;http:\/\/127.0.0.1:9000\/predict\/chinese_ocr_db_crnn_mobile&#34;, data=data, headers={&#39;Content-Type&#39;: &#39;application\/json&#39;}) return txt.content.decode(&#34;utf-8&#34;) print(ocr(&#34;.\/test.png&#34;)) 1 {&#34;msg&#34;:&#34;&#34;,&#34;results&#34;:[{&#34;data&#34;:[{&#34;confidence&#34;:0.9352424144744873,&#34;text&#34;:&#34;\u9759\u591c\u601d-\u767e\u5ea6\u6c49\u8bed&#34;,&#34;text_box_position&#34;:[[67,99],[356,44],[363,82],[73,135]]},{&#34;confidence&#34;:0.9981538653373718,&#34;text&#34;:&#34;\u4f5c\u8005\uff1a\u674e\u767d&#34;,&#34;text_box_position&#34;:[[67,155],[201,131],[205,159],[72,183]]},{&#34;confidence&#34;:0.9981472492218018,&#34;text&#34;:&#34;\u5e8a\u524d\u660e\u6708\u5149\uff0c\u7591\u662f\u5730\u4e0a\u971c&#34;,&#34;text_box_position&#34;:[[69,193],[526,103],[533,145],[76,235]]},{&#34;confidence&#34;:0.9937446713447571,&#34;text&#34;:&#34;\u4e3e\u5934\u671b\u660e\u6708\uff0c\u4f4e\u5934\u601d\u6545\u4e61\u3002&#34;,&#34;text_box_position&#34;:[[67,241],[530,150],[536,192],[75,283]]}],&#34;save_path&#34;:&#34;&#34;}],&#34;status&#34;:&#34;000&#34;} \u6b64\u65f6\u90e8\u7f72\u547d\u4ee4\u4e5f\u6ca1\u6709\u95ee\u9898\u4e86\n\u67e5\u770b\u5bb9\u5668\u5927\u5c0f \u6211\u4eec\u6765\u67e5\u770b\u4e00\u4e0b\u5bb9\u5668\u7684\u5927\u5c0f \u5927\u6982\u662f 2.65GB\n1 2 3 docker container ls -s CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE 74af256d692f python:3.7.10-slim &#34;\/bin\/bash&#34; 57 minutes ago Up 57 minutes 0.0.0.0:9000-&gt;9000\/tcp pyrun 2.65GB (virtual 2.76GB) \u89c2\u5bdf\u4e00\u4e0b\u65b0\u589e\u4e86\u4ec0\u4e48\u6587\u4ef6\n1 docker container diff pyrun &gt; \u5bb9\u5668\u4fee\u6539\u8bb0\u5f55.log \u89c2\u5bdf\u5bb9\u5668\u7684\u4fee\u6539\u8bb0\u5f55 \u5220\u9664\u4e0d\u5fc5\u8981\u7684\u6587\u4ef6\n\u6e05\u7406\u7f13\u5b58\u51cf\u5c11\u5bb9\u5668\u5927\u5c0f \u91cd\u65b0\u8fdb\u5165\u5bb9\u5668 docker exec -it pyrun \/bin\/bash 1 rm -rf \/root\/.cache\/* &amp;&amp; rm -rf \/var\/lib\/apt\/lists\/* \u6b64\u65f6\u5bb9\u5668\u7684\u5927\u5c0f\u53d8\u4e3a 1.74GB\n1 2 3 docker container ls -s CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE 74af256d692f python:3.7.10-slim &#34;\/bin\/bash&#34; About an hour ago Up About an hour 0.0.0.0:9000-&gt;9000\/tcp pyrun 1.74GB (virtual 1.85GB) \u955c\u50cf\u4fdd\u5b58\u548c\u63a8\u9001 1 2 3 4 5 docker login --username=duolabmeng666 registry.cn-hongkong.aliyuncs.com docker commit pyrun pyrun:1.0 docker tag pyrun:1.0 registry.cn-hongkong.aliyuncs.com\/duolabmeng\/pyrun:1.0 docker push registry.cn-hongkong.aliyuncs.com\/duolabmeng\/pyrun:1.0 \u6267\u884c\u8fc7\u7a0b\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 docker login --username=duolabmeng666 registry.cn-hongkong.aliyuncs.com Password: Login Succeeded docker commit pyrun pyrun:1.0 sha256:4e2b20a2457bcfeebd2f27420cc3da650d95c0bce99a482170711bf7e44df613 docker tag pyrun:1.0 registry.cn-hongkong.aliyuncs.com\/duolabmeng\/pyrun:1.0 docker push registry.cn-hongkong.aliyuncs.com\/duolabmeng\/pyrun:1.0 The push refers to repository [registry.cn-hongkong.aliyuncs.com\/duolabmeng\/pyrun] 8aa179f462be: Pushed 1ae70052a189: Pushed 69c309ebec0d: Pushed 49b4a6255183: Pushed 537313a13d90: Pushed 764055ebc9a7: Pushed 1.0: digest: sha256:37c2da684cd2367f4637a010eb2e468dcf80181272ab4b8e88816a64a1d9836d size: 1583 \u5230\u8fd9\u91cc\u955c\u50cf\u5df2\u7ecf\u63a8\u9001\u5230\u4e86\u963f\u91cc\u4e91\u7684\u5bb9\u5668\u955c\u50cf\u4ed3\u5e93\u4e86\n\u6211\u4eec\u53ef\u4ee5\u770b\u5230 \u538b\u7f29\u540e\u7684\u5927\u5c0f\u662f 576.587 MB\n\u5982\u4f55\u4f7f\u7528\u8fd9\u4e2a\u955c\u50cf\u5462 1 2 docker run -itd --name test_pyrun -p 9001:9000 registry.cn-hongkong.aliyuncs.com\/duolabmeng\/pyrun:1.0 \/bin\/bash -c &#34;sh \/app\/start.sh&#34; \u8fd0\u884c python test_http.py\u53ef\u4ee5\u770b\u5230\u80fd\u591f\u6b63\u5e38\u8bc6\u522b\n1 2 \/Users\/chensuilong\/opt\/anaconda3\/bin\/python3 \/Users\/chensuilong\/Desktop\/ll\/paddle_ocr\/test_http.py {&#34;msg&#34;:&#34;&#34;,&#34;results&#34;:[{&#34;data&#34;:[{&#34;confidence&#34;:0.9352424144744873,&#34;text&#34;:&#34;\u9759\u591c\u601d-\u767e\u5ea6\u6c49\u8bed&#34;,&#34;text_box_position&#34;:[[67,99],[356,44],[363,82],[73,135]]},{&#34;confidence&#34;:0.9981538653373718,&#34;text&#34;:&#34;\u4f5c\u8005\uff1a\u674e\u767d&#34;,&#34;text_box_position&#34;:[[67,155],[201,131],[205,159],[72,183]]},{&#34;confidence&#34;:0.9981472492218018,&#34;text&#34;:&#34;\u5e8a\u524d\u660e\u6708\u5149\uff0c\u7591\u662f\u5730\u4e0a\u971c&#34;,&#34;text_box_position&#34;:[[69,193],[526,103],[533,145],[76,235]]},{&#34;confidence&#34;:0.9937446713447571,&#34;text&#34;:&#34;\u4e3e\u5934\u671b\u660e\u6708\uff0c\u4f4e\u5934\u601d\u6545\u4e61\u3002&#34;,&#34;text_box_position&#34;:[[67,241],[530,150],[536,192],[75,283]]}],&#34;save_path&#34;:&#34;&#34;}],&#34;status&#34;:&#34;000&#34;} \u770b\u4e00\u4e0bdocker\u65e5\u5fd7 \u8fd0\u884c\u6b63\u5e38\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 docker logs test_pyrun \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:36: DeprecationWarning: NEAREST is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.NEAREST or Dither.NONE instead. &#39;nearest&#39;: Image.NEAREST, \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:37: DeprecationWarning: BILINEAR is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.BILINEAR instead. &#39;bilinear&#39;: Image.BILINEAR, \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:38: DeprecationWarning: BICUBIC is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.BICUBIC instead. &#39;bicubic&#39;: Image.BICUBIC, \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:39: DeprecationWarning: BOX is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.BOX instead. &#39;box&#39;: Image.BOX, \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:40: DeprecationWarning: LANCZOS is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.LANCZOS instead. &#39;lanczos&#39;: Image.LANCZOS, \/usr\/local\/lib\/python3.7\/site-packages\/paddle\/vision\/transforms\/functional_pil.py:41: DeprecationWarning: HAMMING is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.HAMMING instead. &#39;hamming&#39;: Image.HAMMING [2022-04-20 15:37:35,999] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object W0420 15:37:36.007685 1 analysis_predictor.cc:1350] Deprecated. Please use CreatePredictor instead. * Serving Flask app &#39;paddlehub.serving.app_compat&#39; (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on all addresses (0.0.0.0) WARNING: This is a development server. Do not use it in a production deployment. * Running on http:\/\/127.0.0.1:9000 * Running on http:\/\/172.17.0.3:9000 (Press CTRL+C to quit) 172.17.0.1 - - [20\/Apr\/2022 15:37:56] &#34;POST \/predict\/chinese_ocr_db_crnn_mobile HTTP\/1.1&#34; 200 - 172.17.0.1 - - [20\/Apr\/2022 15:38:02] &#34;POST \/predict\/chinese_ocr_db_crnn_mobile HTTP\/1.1&#34; 200 - \u5982\u4f55\u90e8\u7f72\u5230\u963f\u91cc\u4e91\u51fd\u6570 \u5efa\u7acb\u4ee5\u4e0b\u6587\u4ef6 \u53ef\u4ee5\u5230\u4ed3\u5e93\u91cc\u590d\u5236\u54c8\n1 2 3 4 5 6 7 8 9 . \u251c\u2500\u2500 Dockerfile \u251c\u2500\u2500 app \u2502\u00a0\u251c\u2500\u2500 app_compat.py \u2502\u00a0\u251c\u2500\u2500 index.html \u2502\u00a0\u2514\u2500\u2500 start.sh \u251c\u2500\u2500 main.py \u251c\u2500\u2500 test.png \u2514\u2500\u2500 test_http.py Dockerfile\n1 2 3 4 5 6 7 8 FROM registry.cn-hongkong.aliyuncs.com\/duolabmeng\/pyrun:1.0 COPY app \/app WORKDIR \/app ADD \/app\/app_compat.py \/usr\/local\/lib\/python3.7\/site-packages\/paddlehub\/serving\/app_compat.py EXPOSE 9000 CMD [&#34;\/bin\/bash&#34;,&#34;-c&#34;,&#34;hub serving start -m chinese_ocr_db_crnn_mobile -p 9000&#34;] start.sh\n1 2 #!\/bin\/bash hub serving start -m chinese_ocr_db_crnn_mobile -p 9000 \u5f00\u59cb\u6784\u5efa\u65b0\u7684\u955c\u50cf 1 2 3 4 5 docker build -f .\/Dockerfile -t pyrun:1.1 . docker rm -f test_runpy docker run -itd --name test_runpy -p 9002:9000 pyrun:1.1 docker logs ppocr docker diff ppocr \u6d4b\u8bd5\u6ca1\u6709\u95ee\u9898\u7684\u8bdd\u5c31\u63a8\u9001\u5230\u963f\u91cc\u4e91\u955c\u50cf\u4ed3\u5e93\n1 2 docker tag pyrun:1.1 registry.cn-hongkong.aliyuncs.com\/duolabmeng\/pyrun:1.3 docker push registry.cn-hongkong.aliyuncs.com\/duolabmeng\/pyrun:1.3 1 2 3 4 5 6 7 8 docker build -f .\/Dockerfile -t paddlehub_ppocr:1.0 . docker rm -f ppocr docker run -itd --name ppocr -p 9000:9000 paddlehub_ppocr:1.0 docker logs ppocr docker diff ppocr docker tag paddlehub_ppocr:1.0 registry.cn-hongkong.aliyuncs.com\/duolabmeng\/ppocr:1.8 docker push registry.cn-hongkong.aliyuncs.com\/duolabmeng\/ppocr:1.8 \u672c\u5730\u53ef\u4ee5\u8fd0\u884c\u7684docker\u955c\u50cf\u653e\u5230\u51fd\u6570\u8ba1\u7b97\u4e0a\u62a5\u9519\u4e86 \u7ecf\u8fc7\u4e00\u756a\u7684\u6298\u817e\n\u6210\u529f\u4e86 \u955c\u50cf\u7684\u5927\u5c0f\u5927\u4e86\u4e0d\u5c11\n\u6b65\u9aa4 dockerfile\u6587\u4ef6\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 FROM python:3.7.10-slim RUN apt update &amp;&amp; apt install g++ libglib2.0-dev libgl1-mesa-glx libsm6 libxrender1 libgl1 -y \\ &amp;&amp; apt-get clean &amp;&amp; rm -rf \/root\/.cache\/* &amp;&amp; rm -rf \/var\/lib\/apt\/lists\/* COPY app \/app WORKDIR \/app RUN pip3 install --no-cache-dir -r \/app\/requirements.txt -i https:\/\/mirror.baidu.com\/pypi\/simple ADD \/app\/app_compat.py \/usr\/local\/lib\/python3.7\/site-packages\/paddlehub\/serving\/app_compat.py RUN hub install chinese_ocr_db_crnn_mobile EXPOSE 9000 CMD [&#34;\/bin\/bash&#34;,&#34;-c&#34;,&#34;hub serving start -m chinese_ocr_db_crnn_mobile -p 9000&#34;] \u7531\u4e8e\u53cd\u590d\u8bd5\u9a8c\u554a \u4e3a\u4e86\u51cf\u5c11\u6784\u5efa\u7684\u65f6\u95f4 \u6211\u5206\u522b\u6784\u5efa\u4e863\u4e2a\u955c\u50cf\n\u7cfb\u7edf\u7684\u8fd0\u884c\u73af\u5883 base_system \u98de\u6d46\u7684\u8fd0\u884c\u73af\u5883 paddlehub \u5b9e\u9645\u5e94\u7528\u7684\u73af\u5883 cn_ocr_mobile \u6539\u8fdb \u5347\u7ea7python\u7248\u672c (\u5931\u8d25\u4e86 \u540e\u7eed\u91cd\u65b0\u8c03\u8bd5 ) \u672c\u6765\u60f3\u628apython\u7684\u7248\u672c\u5347\u7ea7\u4e00\u4e0b\u7684FROM python:3.7.10-slim\u6539\u52a8\u4e86\u4ee5\u540e..\u7cfb\u7edf\u4f9d\u8d56\u65e0\u6cd5\u5b89\u88c5 \u6240\u4ee5..\u5982\u679c\u8981\u5347\u7ea7py\u7248\u672c \u90a3\u4e48\u6211\u4eec\u9700\u8981\u91cd\u65b0\u5f00\u59cb\u4e00\u6b65\u4e00\u6b65\u8c03\u8bd5\n\u5347\u7ea7\u98de\u6d46\u5e93\u4e3a 2.2.2 (\u6ca1\u95ee\u9898)\npaddle2onnx 0.9.4 paddlehub 2.2.0 paddlenlp 2.2.6 paddlepaddle 2.2.2\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 shapely==1.8.1.post1 scikit-image==0.17.2 imgaug==0.4.0 pyclipper==1.3.0.post2 lmdb==1.3.0 tqdm==4.64.0 numpy==1.21.6 visualdl==2.2.3 python-Levenshtein==0.12.2 opencv-contrib-python==4.2.0.32 paddlenlp==2.2.6 paddle2onnx==0.9.4 paddlepaddle==2.2.2 paddlehub==2.2.0 \u4e0d\u65ad\u7684\u8c03\u8bd5\u4e0b\u51fa\u73b0\u4e86\u95ee\u9898..\u5b89\u88c5\u4e0d\u4e86\u5305\u4e86..\n\u8fd9\u65f6\u5019\u5c31\u7528docker system prune -af \u6e05\u7406\u4e00\u4e0b\u60ac\u7a7a\u7684\u955c\u50cf\n","permalink":"https:\/\/my.rongyiapi.com\/posts\/docker%E6%9E%84%E5%BB%BA%E8%BF%99%E4%B8%80%E7%AF%87%E5%B0%B1%E5%A4%9F%E4%BA%86\/","summary":"<h1 id=\"docker\u6784\u5efa\u8fd9\u4e00\u7bc7\u5c31\u591f\u4e86\">docker\u6784\u5efa\u8fd9\u4e00\u7bc7\u5c31\u591f\u4e86<\/h1>\n<p>b\u7ad9 <a href=\"https:\/\/www.bilibili.com\/video\/BV1iY411P7Dp\/\">https:\/\/www.bilibili.com\/video\/BV1iY411P7Dp\/<\/a><\/p>\n<ul>\n<li>\u7b80\u5355\u4ecb\u7ecd\u98de\u6d46<\/li>\n<li>\u901a\u8fc7docker\u6784\u5efaOCR\u5e94\u7528<\/li>\n<li>Docker\u955c\u50cf\u7626\u8eab\u6280\u5de7<\/li>\n<li>\u7528\u51fd\u6570\u8ba1\u7b97\u90e8\u7f72\u5236\u4f5c\u597d\u7684docker\u5e94\u7528<\/li>\n<\/ul>\n<h2 id=\"\u76ee\u6807\">\u76ee\u6807<\/h2>\n<ul>\n<li>\u5728 docker \u4e2d\u6784\u5efa PaddleOCR \u7684\u8fd0\u884c\u73af\u5883<\/li>\n<li>\u53ef\u4ee5\u5728 Serverless \u67b6\u6784\u4e2d\u8fd0\u884c(\u963f\u91cc\u4e91\u51fd\u6570\u8ba1\u7b97 \u817e\u8baf\u4e91\u51fd\u6570)<\/li>\n<\/ul>\n<h2 id=\"\u96be\u70b9\">\u96be\u70b9<\/h2>\n<ul>\n<li>\u5728\u6784\u5efa\u955c\u50cf\u65b9\u9762\uff0c<a href=\"https:\/\/hub.docker.com\/r\/paddlepaddle\/paddle\/tags?page=1&amp;ordering=last_updated\">\u98de\u6d46\u5b98\u65b9\u63d0\u4f9b\u7684 docker \u955c\u50cf<\/a>\uff0c\u52a8\u8f84 4GB\u30018GB\uff0c\u5728\u955c\u50cf\u5982\u6b64\u5927\u7684\u60c5\u51b5\u4e0b\u57fa\u672c\u65e0\u7f18 Serverless \u3002<\/li>\n<li>\u6df1\u5ea6\u5b66\u4e60\u7684\u90e8\u7f72\u73af\u5883\u590d\u6742\u4f9d\u8d56\u591a<\/li>\n<\/ul>\n<h1 id=\"docker-\u5e38\u7528\u547d\u4ee4\">docker \u5e38\u7528\u547d\u4ee4<\/h1>\n<h2 id=\"\u521b\u5efa-python-\u7684\u8fd0\u884c\u73af\u5883\">\u521b\u5efa python \u7684\u8fd0\u884c\u73af\u5883<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">docker run -itd --name pyrun -p 9000:9000 -v \u4e3b\u673a\u76ee\u5f55:\/app python:3.7.10-slim \/bin\/bash\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u8fdb\u5165\u5bb9\u5668\u8c03\u8bd5\">\u8fdb\u5165\u5bb9\u5668\u8c03\u8bd5<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a class=\"lnlinks\" href=\"#hl-1-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">docker exec -it pyrun  \/bin\/bash \n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u6e05\u7406\u7f13\u5b58\">\u6e05\u7406\u7f13\u5b58<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-2-1\"><a class=\"lnlinks\" href=\"#hl-2-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-2\"><a class=\"lnlinks\" href=\"#hl-2-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-3\"><a class=\"lnlinks\" href=\"#hl-2-3\">3<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-gdscript3\" data-lang=\"gdscript3\"><span class=\"line\"><span class=\"cl\"><span class=\"n\">rm<\/span> <span class=\"o\">-<\/span><span class=\"n\">rf<\/span> <span class=\"o\">\/<\/span><span class=\"n\">root<\/span><span class=\"o\">\/.<\/span><span class=\"n\">cache<\/span><span class=\"o\">\/*<\/span> \\\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">&amp;&amp;<\/span> <span class=\"n\">rm<\/span> <span class=\"o\">-<\/span><span class=\"n\">rf<\/span> <span class=\"o\">\/<\/span><span class=\"k\">var<\/span><span class=\"o\">\/<\/span><span class=\"n\">lib<\/span><span class=\"o\">\/<\/span><span class=\"n\">apt<\/span><span class=\"o\">\/<\/span><span class=\"n\">lists<\/span><span class=\"o\">\/*<\/span> \\\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">&amp;&amp;<\/span> <span class=\"n\">rm<\/span> <span class=\"o\">-<\/span><span class=\"n\">rf<\/span> <span class=\"o\">\/<\/span><span class=\"n\">app<\/span><span class=\"o\">\/<\/span><span class=\"n\">test<\/span><span class=\"o\">\/<\/span><span class=\"n\">pg<\/span><span class=\"o\">\/*<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u67e5\u770b\u4fee\u6539\u8bb0\u5f55\">\u67e5\u770b\u4fee\u6539\u8bb0\u5f55<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-3-1\"><a class=\"lnlinks\" href=\"#hl-3-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">docker container diff \u5bb9\u5668\u540d\u79f0 &gt; \u5bb9\u5668\u4fee\u6539\u8bb0\u5f55.log\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u67e5\u770b\u5c42\u7684\u5927\u5c0f\">\u67e5\u770b\u5c42\u7684\u5927\u5c0f<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-4-1\"><a class=\"lnlinks\" href=\"#hl-4-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">docker image history \u955c\u50cf\u540d\u79f0\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u8fd0\u884c\u4e2d\u7684\u5bb9\u5668\u5927\u5c0f\">\u8fd0\u884c\u4e2d\u7684\u5bb9\u5668\u5927\u5c0f<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-5-1\"><a class=\"lnlinks\" href=\"#hl-5-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">docker container ls -s\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u67e5\u770b\u65e5\u5fd7\u7684\u811a\u672c\">\u67e5\u770b\u65e5\u5fd7\u7684\u811a\u672c<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-6-1\"><a class=\"lnlinks\" href=\"#hl-6-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">docker logs testocr --tail 10 -f\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u955c\u50cf\u4fdd\u5b58\">\u955c\u50cf\u4fdd\u5b58<\/h2>\n<p>\u4fdd\u5b58\u4e3a\u955c\u50cf<\/p>","title":"docker\u6784\u5efa\u8fd9\u4e00\u7bc7\u5c31\u591f\u4e86"},{"content":"\u4e3a\u7a0b\u5e8f\u6784\u5efa\u542f\u52a8\u811a\u672c \u6784\u5efa\u5e76\u4e14\u8fd0\u884c\u7684\u811a\u672c start_t1_ocr.sh\n1 2 3 docker rm -f testocr docker build -t testocr:1.0 . docker run -itd --name testocr -v \/root\/llq:\/app testocr:1.0 \/bin\/bash -c &#34;cd \/app &amp;&amp; python t1_imgs_handle.py&#34; \u67e5\u770b\u65e5\u5fd7\u7684\u811a\u672c log_t1_ocr.sh\n1 docker logs testocr --tail 10 -f \u81ea\u5b9a\u4e49\u6784\u5efa\u955c\u50cf\u65f6 python\u8fd0\u884c\u73af\u5883 1 2 3 docker run -itd --name pythonrun -p 9005:9000 -v \u4e3b\u673a\u76ee\u5f55:\/app python:3.7.10-slim \/bin\/bash docker exec -it pythonrun \/bin\/bash \u4f9d\u8d56\u5b89\u88c5 \u5efa\u8bae\u5148\u5c06\u5305\u4e0b\u8f7d\u56de\u6765 \u7136\u540e\u518d\u8fdb\u884c\u5b89\u88c5 \u907f\u514d\u6bcf\u6b21\u90fd\u8981\u91cd\u65b0\u4e0b\u8f7d\u901f\u5ea6\u6162\n\u4e0b\u8f7d\u79bb\u7ebf\u5b89\u88c5\u5305\n1 2 3 pip download -r requirements.txt -d .\/pg pip download paddlepaddle==2.0.2 -i https:\/\/mirror.baidu.com\/pypi\/simple -d .\/pg pip download paddlehub -d .\/pg \u5b89\u88c5\u79bb\u7ebf\u5b89\u88c5\u5305\n1 2 3 4 5 pip install -r requirements.txt --find-links .\/pg pip install paddlepaddle --find-links .\/pg pip install paddlehub -U --no-index --find-links .\/pg \u6253\u5305\u955c\u50cf\u5e76\u4e0a\u4f20\u5230\u955c\u50cf\u4ed3\u5e93 \u8c03\u8bd5\u5b8c\u6210\u63d0\u4ea4\u5230\u963f\u91cc\u4e91\u955c\u50cf\u4ed3\u5e93\n1 2 3 4 docker commit pythonrun pythonrun:1.0 docker tag pythonrun:1.0 registry.cn-hongkong.aliyuncs.com\/llapi\/pythonrun:1.0 docker push registry.cn-hongkong.aliyuncs.com\/llapi\/pythonrun:1.0 \u6e05\u7406\u7f13\u5b58 1 2 3 rm -rf \/root\/.cache\/* \\ &amp;&amp; rm -rf \/var\/lib\/apt\/lists\/* \\ &amp;&amp; rm -rf \/app\/test\/pg\/* \u5176\u4ed6\u7b14\u8bb0 \u5bfc\u51fa\u5bb9\u5668\u4e3a\u955c\u50cf 1 2 docker commit \u5bb9\u5668\u540d\u79f0 \u955c\u50cf\u540d\u79f0:1.3 \u5bfc\u51fa\u955c\u50cf\u4e3a\u6587\u4ef6 1 2 docker export -o \u6587\u4ef6\u540d.tar \u5bb9\u5668\u540d\u79f0 \u67e5\u770b\u4fee\u6539\u8bb0\u5f55 1 2 docker container diff \u5bb9\u5668\u540d\u79f0 &gt; \u5bb9\u5668\u4fee\u6539\u8bb0\u5f55.log \u67e5\u770b\u5c42\u7684\u5927\u5c0f 1 2 docker image history \u955c\u50cf\u540d\u79f0 \u8fd0\u884c\u4e2d\u7684\u5bb9\u5668\u5927\u5c0f 1 2 docker container ls -s \u8fdb\u5165\u5bb9\u5668 1 docker exec -it pythonrun \/bin\/bash docker-compose \u542f\u52a8 1 docker-compose -f docker-compose.yml up -d ","permalink":"https:\/\/my.rongyiapi.com\/posts\/docker%E5%AE%9E%E7%94%A8%E6%8A%80%E5%B7%A7\/","summary":"<h1 id=\"\u4e3a\u7a0b\u5e8f\u6784\u5efa\u542f\u52a8\u811a\u672c\">\u4e3a\u7a0b\u5e8f\u6784\u5efa\u542f\u52a8\u811a\u672c<\/h1>\n<h2 id=\"\u6784\u5efa\u5e76\u4e14\u8fd0\u884c\u7684\u811a\u672c\">\u6784\u5efa\u5e76\u4e14\u8fd0\u884c\u7684\u811a\u672c<\/h2>\n<p>start_t1_ocr.sh<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\">3<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">docker rm -f testocr\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker build -t testocr:1.0 .\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker run -itd --name testocr -v \/root\/llq:\/app testocr:1.0 \/bin\/bash -c &#34;cd \/app &amp;&amp; python t1_imgs_handle.py&#34;\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u67e5\u770b\u65e5\u5fd7\u7684\u811a\u672c\">\u67e5\u770b\u65e5\u5fd7\u7684\u811a\u672c<\/h2>\n<p>log_t1_ocr.sh<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a class=\"lnlinks\" href=\"#hl-1-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">docker logs testocr --tail 10 -f\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h1 id=\"\u81ea\u5b9a\u4e49\u6784\u5efa\u955c\u50cf\u65f6\">\u81ea\u5b9a\u4e49\u6784\u5efa\u955c\u50cf\u65f6<\/h1>\n<h2 id=\"python\u8fd0\u884c\u73af\u5883\">python\u8fd0\u884c\u73af\u5883<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-2-1\"><a class=\"lnlinks\" href=\"#hl-2-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-2\"><a class=\"lnlinks\" href=\"#hl-2-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-3\"><a class=\"lnlinks\" href=\"#hl-2-3\">3<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">docker run -itd --name pythonrun -p 9005:9000 -v \u4e3b\u673a\u76ee\u5f55:\/app python:3.7.10-slim \/bin\/bash\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker exec -it pythonrun  \/bin\/bash \n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u4f9d\u8d56\u5b89\u88c5\">\u4f9d\u8d56\u5b89\u88c5<\/h3>\n<p>\u5efa\u8bae\u5148\u5c06\u5305\u4e0b\u8f7d\u56de\u6765 \u7136\u540e\u518d\u8fdb\u884c\u5b89\u88c5 \u907f\u514d\u6bcf\u6b21\u90fd\u8981\u91cd\u65b0\u4e0b\u8f7d\u901f\u5ea6\u6162<\/p>\n<p>\u4e0b\u8f7d\u79bb\u7ebf\u5b89\u88c5\u5305<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-3-1\"><a class=\"lnlinks\" href=\"#hl-3-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-2\"><a class=\"lnlinks\" href=\"#hl-3-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-3\"><a class=\"lnlinks\" href=\"#hl-3-3\">3<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-gdscript3\" data-lang=\"gdscript3\"><span class=\"line\"><span class=\"cl\"><span class=\"n\">pip<\/span> <span class=\"n\">download<\/span> <span class=\"o\">-<\/span><span class=\"n\">r<\/span> <span class=\"n\">requirements<\/span><span class=\"o\">.<\/span><span class=\"n\">txt<\/span> <span class=\"o\">-<\/span><span class=\"n\">d<\/span> <span class=\"o\">.\/<\/span><span class=\"n\">pg<\/span> \n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">pip<\/span> <span class=\"n\">download<\/span> <span class=\"n\">paddlepaddle<\/span><span class=\"o\">==<\/span><span class=\"mf\">2.0<\/span><span class=\"o\">.<\/span><span class=\"mi\">2<\/span> <span class=\"o\">-<\/span><span class=\"n\">i<\/span> <span class=\"n\">https<\/span><span class=\"p\">:<\/span><span class=\"o\">\/\/<\/span><span class=\"n\">mirror<\/span><span class=\"o\">.<\/span><span class=\"n\">baidu<\/span><span class=\"o\">.<\/span><span class=\"n\">com<\/span><span class=\"o\">\/<\/span><span class=\"n\">pypi<\/span><span class=\"o\">\/<\/span><span class=\"n\">simple<\/span> <span class=\"o\">-<\/span><span class=\"n\">d<\/span> <span class=\"o\">.\/<\/span><span class=\"n\">pg<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">pip<\/span> <span class=\"n\">download<\/span> <span class=\"n\">paddlehub<\/span> <span class=\"o\">-<\/span><span class=\"n\">d<\/span> <span class=\"o\">.\/<\/span><span class=\"n\">pg<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5b89\u88c5\u79bb\u7ebf\u5b89\u88c5\u5305<\/p>","title":"docker\u5b9e\u7528\u6280\u5de7"},{"content":"dockerfile\n1 2 3 FROM redis COPY redis.conf \/usr\/local\/etc\/redis\/redis.conf CMD [ &#34;redis-server&#34;, &#34;\/usr\/local\/etc\/redis\/redis.conf&#34; ] 1 docker run --name some-redis1 -p 6380:6379\u00a0-d redis --requirepass &#34;123456&#34; redis\u542f\u52a8\u7684\u9ed8\u8ba4\u7aef\u53e3\u53f7\u662f6379\uff0c\u8fd9\u4e2a\u65f6\u5019\u5bbf\u4e3b\u673a\u4f7f\u75286380\u8fdb\u884c\u6620\u5c04\uff0c\u5e76\u8bbe\u7f6e\u6388\u6743\u5bc6\u7801123456\uff0c\n\u542f\u52a8redis 1 docker run --name redis-rpc -p 6379:6379 -d redis --requirepass &#34;duolabmeng&#34; ","permalink":"https:\/\/my.rongyiapi.com\/posts\/docker%E9%83%A8%E7%BD%B2redis\/","summary":"<p>dockerfile<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\">3<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">FROM redis\n<\/span><\/span><span class=\"line\"><span class=\"cl\">COPY redis.conf \/usr\/local\/etc\/redis\/redis.conf\n<\/span><\/span><span class=\"line\"><span class=\"cl\">CMD [ &#34;redis-server&#34;, &#34;\/usr\/local\/etc\/redis\/redis.conf&#34; ]\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a class=\"lnlinks\" href=\"#hl-1-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">docker run --name some-redis1 -p 6380:6379\u00a0 -d redis --requirepass &#34;123456&#34;\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>redis\u542f\u52a8\u7684\u9ed8\u8ba4\u7aef\u53e3\u53f7\u662f6379\uff0c\u8fd9\u4e2a\u65f6\u5019\u5bbf\u4e3b\u673a\u4f7f\u75286380\u8fdb\u884c\u6620\u5c04\uff0c\u5e76\u8bbe\u7f6e\u6388\u6743\u5bc6\u7801123456\uff0c<\/p>\n<h1 id=\"\u542f\u52a8redis\">\u542f\u52a8redis<\/h1>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-2-1\"><a class=\"lnlinks\" href=\"#hl-2-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">docker run --name redis-rpc -p 6379:6379 -d redis  --requirepass &#34;duolabmeng&#34;\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>","title":"docker\u90e8\u7f72redis"},{"content":"\u8bb0\u4e00\u6b21\u8bef\u5220mysql\u5168\u90e8\u6570\u636e\u6062\u590d\u7684\u8fc7\u7a0b \u539f\u56e0 laravel \u8fd0\u884c\u4e86\u4e00\u4e0b php artisan test\n1 2 3 class ApiTokenPermissionsTest extends TestCase { use RefreshDatabase; \u4ed6\u81ea\u5e26\u7684\u6d4b\u8bd5\u6587\u4ef6\u4e2d\uff0c\u6709\u91cd\u7f6e\u6570\u636e\u5e93\u7684\u529f\u80fd\u3002 \u6240\u4ee5\u6574\u4e2a\u6570\u636e\u5e93\u90fd\u88ab\u5220\u9664\u4e86 \u539f\u5730\u7206\u70b8\u554a\u3002\u7ebf\u4e0a\u7684\u6570\u636e\u5e93\u3002\n\u670d\u52a1\u5668\u4e0a\u5bfb\u627ebinlog\u6587\u4ef6 \u5728\u8fd9\u91cc\u627e\u5230\u6240\u6709binlog\u6587\u4ef6\u7136\u540e\u4e0b\u8f7d\u5230\u81ea\u5df1\u7535\u8111\u4e0a \/var\/lib\/mysql\/\u8fd9\u4e2a\u76ee\u5f55\u4e0b\u627e\u5230\u4e865\u4e2abinlog\u6587\u4ef6\n\/var\/lib\/mysql\/binlog.000012\nbinlog\u538b\u7f29\u540e\u4e0b\u8f7d\u5230\u81ea\u5df1\u7535\u8111 1 gzip binlog.000012 \u5728\u7535\u8111\u4e2d\u5b89\u88c5mysql 1 brew install mysql \u914d\u7f6e\u4e00\u4e0b \u5efa\u7acb\u597d\u8981\u6062\u590d\u7684\u6570\u636e\u5e93\u548c\u8868\u548c\u7528\u6237\u8d26\u53f7\n\u5bfc\u51fa\u4e3asql\u8bed\u53e5\u67e5\u770b \u00b7\u00b7\u00b7 mysqlbinlog -v &ndash;base64-output=decode-rows \/Users\/ll\/fsdownload\/binlog.000010 &ndash;stop-datetime=&ldquo;2021-03-27 00:00:00&rdquo; &gt; 000010.sql mysqlbinlog -v &ndash;base64-output=decode-rows \/Users\/ll\/fsdownload\/binlog.000011 &ndash;stop-datetime=&ldquo;2021-03-27 00:00:00&rdquo; &gt; 000011.sql mysqlbinlog -v &ndash;base64-output=decode-rows \/Users\/ll\/fsdownload\/binlog.000012 &ndash;stop-datetime=&ldquo;2021-03-27 00:00:00&rdquo; &gt; 000012.sql mysqlbinlog -v &ndash;base64-output=decode-rows \/Users\/ll\/fsdownload\/binlog.000013 &ndash;stop-datetime=&ldquo;2021-03-27 00:00:00&rdquo; &gt; 000013.sql \u00b7\u00b7\u00b7\n\u6062\u590d\u6570\u636e \u8fd9\u662f\u5728\u81ea\u5df1\u7535\u8111\u4e0a\u8fd0\u884c\uff0c\u5df2\u7ecf\u914d\u7f6e\u597d\u4e86mysql\uff0c\u8fd0\u884c\u5b8c\u4ed6\u5c31\u628a\u5386\u53f2\u6267\u884c\u7684sql\u8bed\u53e5\u6267\u884c\u4e86\n\u9700\u8981\u6ce8\u610f\u7684\u70b9\uff0c --stop-datetime='2021-03-26 22:00:00' \u8fd9\u91cc\u7684\u65f6\u95f4\u662f\u5220\u5e93\u64cd\u4f5c\u4e4b\u524d\uff0c\u5426\u5219\u628a\u5220\u5e93\u7684\u547d\u4ee4\u4e5f\u6267\u884c\u4e86\u7684\u8bdd\u5c31\u9700\u8981\u91cd\u65b0\u6765\u4e00\u6b21\u4e86\u3002\n1 2 3 4 5 mysqlbinlog -d yjd \/Users\/ll\/fsdownload\/binlog.000010|mysql -u yjd -p mysqlbinlog -d yjd \/Users\/ll\/fsdownload\/binlog.000011|mysql -u yjd -p mysqlbinlog -d yjd \/Users\/ll\/fsdownload\/binlog.000012|mysql -u yjd -p mysqlbinlog -d yjd \/Users\/ll\/fsdownload\/binlog.000013|mysql -u yjd -p mysqlbinlog -d yjd \/Users\/ll\/fsdownload\/binlog.000013 --start-datetime=&#39;2019-3-27 12:04:08&#39; --stop-datetime=&#39;2021-03-26 22:00:00&#39;|mysql -u yjd -p \u6062\u590d\u65f6\u9047\u5230\u9519\u8bef\u7684\u8bdd \u6267\u884c\u770b\u9519\u8bef\u7684\u4f4d\u7f6e \u8df3\u8fc7\u5730\u65b9\n1 2 3 4 5 --start-position=780 \u8d77\u59cbpos\u70b9 --stop-position=904 \u7ed3\u675fpos\u70b9 --start-datetime=&#39;2019-3-27 12:04:08&#39; \u8d77\u59cb\u65f6\u95f4\u70b9 --stop-datetime=&#34;2019-3-27 12:49:46&#34; \u7ed3\u675f\u65f6\u95f4\u70b9 --database=my_test \u6307\u5b9a\u53ea\u6062\u590dmy_test\u6570\u636e\u5e93(\u4e00\u53f0\u4e3b\u673a\u4e0a\u5f80\u5f80\u6709\u591a\u4e2a\u6570\u636e\u5e93\uff0c\u53ea\u9650\u672c\u5730log\u65e5\u5fd7) \u6062\u590d \u628a\u7535\u8111\u4e0a\u7684\u6570\u636e\u5e93\u5bfc\u51fa\u4e3asql\u8bed\u53e5\n\u968f\u540e\u5bfc\u5165\u7ebf\u4e0a\u7684\u6570\u636e\u5e93\n\u5b8c\u6210\u6570\u636e\u6062\u590d\n","permalink":"https:\/\/my.rongyiapi.com\/posts\/%E8%AE%B0%E4%B8%80%E6%AC%A1%E8%AF%AF%E5%88%A0mysql%E5%85%A8%E9%83%A8%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D%E7%9A%84%E8%BF%87%E7%A8%8B\/","summary":"<h1 id=\"\u8bb0\u4e00\u6b21\u8bef\u5220mysql\u5168\u90e8\u6570\u636e\u6062\u590d\u7684\u8fc7\u7a0b\">\u8bb0\u4e00\u6b21\u8bef\u5220mysql\u5168\u90e8\u6570\u636e\u6062\u590d\u7684\u8fc7\u7a0b<\/h1>\n<h1 id=\"\u539f\u56e0\">\u539f\u56e0<\/h1>\n<p>laravel \u8fd0\u884c\u4e86\u4e00\u4e0b\n<code>php artisan test<\/code><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\">3<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-gdscript3\" data-lang=\"gdscript3\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">class<\/span> <span class=\"n\">ApiTokenPermissionsTest<\/span> <span class=\"k\">extends<\/span> <span class=\"n\">TestCase<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">use<\/span> <span class=\"n\">RefreshDatabase<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4ed6\u81ea\u5e26\u7684\u6d4b\u8bd5\u6587\u4ef6\u4e2d\uff0c\u6709\u91cd\u7f6e\u6570\u636e\u5e93\u7684\u529f\u80fd\u3002\n\u6240\u4ee5\u6574\u4e2a\u6570\u636e\u5e93\u90fd\u88ab\u5220\u9664\u4e86\n\u539f\u5730\u7206\u70b8\u554a\u3002\u7ebf\u4e0a\u7684\u6570\u636e\u5e93\u3002<\/p>\n<h1 id=\"\u670d\u52a1\u5668\u4e0a\u5bfb\u627ebinlog\u6587\u4ef6\">\u670d\u52a1\u5668\u4e0a\u5bfb\u627ebinlog\u6587\u4ef6<\/h1>\n<p>\u5728\u8fd9\u91cc\u627e\u5230\u6240\u6709binlog\u6587\u4ef6\u7136\u540e\u4e0b\u8f7d\u5230\u81ea\u5df1\u7535\u8111\u4e0a\n<code>\/var\/lib\/mysql\/<\/code>\u8fd9\u4e2a\u76ee\u5f55\u4e0b\u627e\u5230\u4e865\u4e2abinlog\u6587\u4ef6<\/p>\n<p><code>\/var\/lib\/mysql\/binlog.000012<\/code><\/p>\n<p><img loading=\"lazy\" src=\"images\/screenshot_1616932925864.png\" alt=\"\"  \/>\n<\/p>\n<h1 id=\"binlog\u538b\u7f29\u540e\u4e0b\u8f7d\u5230\u81ea\u5df1\u7535\u8111\">binlog\u538b\u7f29\u540e\u4e0b\u8f7d\u5230\u81ea\u5df1\u7535\u8111<\/h1>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a class=\"lnlinks\" href=\"#hl-1-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">gzip  binlog.000012\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h1 id=\"\u5728\u7535\u8111\u4e2d\u5b89\u88c5mysql\">\u5728\u7535\u8111\u4e2d\u5b89\u88c5mysql<\/h1>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-2-1\"><a class=\"lnlinks\" href=\"#hl-2-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">brew install mysql\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u914d\u7f6e\u4e00\u4e0b \u5efa\u7acb\u597d\u8981\u6062\u590d\u7684\u6570\u636e\u5e93\u548c\u8868\u548c\u7528\u6237\u8d26\u53f7<\/p>\n<h1 id=\"\u5bfc\u51fa\u4e3asql\u8bed\u53e5\u67e5\u770b\">\u5bfc\u51fa\u4e3asql\u8bed\u53e5\u67e5\u770b<\/h1>\n<p>\u00b7\u00b7\u00b7\nmysqlbinlog -v &ndash;base64-output=decode-rows \/Users\/ll\/fsdownload\/binlog.000010 &ndash;stop-datetime=&ldquo;2021-03-27 00:00:00&rdquo; &gt; 000010.sql\nmysqlbinlog -v &ndash;base64-output=decode-rows \/Users\/ll\/fsdownload\/binlog.000011 &ndash;stop-datetime=&ldquo;2021-03-27 00:00:00&rdquo; &gt; 000011.sql\nmysqlbinlog -v &ndash;base64-output=decode-rows \/Users\/ll\/fsdownload\/binlog.000012 &ndash;stop-datetime=&ldquo;2021-03-27 00:00:00&rdquo; &gt; 000012.sql\nmysqlbinlog -v &ndash;base64-output=decode-rows \/Users\/ll\/fsdownload\/binlog.000013 &ndash;stop-datetime=&ldquo;2021-03-27 00:00:00&rdquo; &gt; 000013.sql\n\u00b7\u00b7\u00b7<\/p>","title":"\u8bb0\u4e00\u6b21\u8bef\u5220mysql\u5168\u90e8\u6570\u636e\u6062\u590d\u7684\u8fc7\u7a0b"},{"content":"frp\u642d\u5efa\u548c\u4f7f\u7528 server docker-compose.yaml\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 version: &#34;3&#34; services: frps: container\\_name: frps image: snowdreamtech\/frps:0.56.0 network\\_mode: host volumes: - .\/frps.toml:\/etc\/frp\/frps.toml frps.toml\n1 bindPort = 17000 client docker-compose.yaml\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 version: &#34;3&#34; services: frpc: container\\_name: frpc image: snowdreamtech\/frpc:0.56.0 network\\_mode: host volumes: - .\/frpc.toml:\/etc\/frp\/frpc.toml restart: always frpc.toml\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 [common] server_addr = ip server_port = 17000 #tls_enable = true #kcp_bind_port = 17000 #protocol = kcp token = \u5bc6\u7801 [sshx] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 12222 ","permalink":"https:\/\/my.rongyiapi.com\/posts\/frp%E6%90%AD%E5%BB%BA%E5%92%8C%E4%BD%BF%E7%94%A8\/","summary":"<h1 id=\"frp\u642d\u5efa\u548c\u4f7f\u7528\">frp\u642d\u5efa\u548c\u4f7f\u7528<\/h1>\n<h1 id=\"server\">server<\/h1>\n<p>docker-compose.yaml<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a class=\"lnlinks\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a class=\"lnlinks\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a class=\"lnlinks\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a class=\"lnlinks\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a class=\"lnlinks\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a class=\"lnlinks\" href=\"#hl-0-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a class=\"lnlinks\" href=\"#hl-0-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-13\"><a class=\"lnlinks\" href=\"#hl-0-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-14\"><a class=\"lnlinks\" href=\"#hl-0-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-15\"><a class=\"lnlinks\" href=\"#hl-0-15\">15<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">version: &#34;3&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">services:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> frps:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> container\\_name: frps\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> image: snowdreamtech\/frps:0.56.0\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> network\\_mode: host\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> volumes:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">- .\/frps.toml:\/etc\/frp\/frps.toml\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>frps.toml<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a class=\"lnlinks\" href=\"#hl-1-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">bindPort = 17000\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h1 id=\"client\">client<\/h1>\n<p>docker-compose.yaml<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-2-1\"><a class=\"lnlinks\" href=\"#hl-2-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-2\"><a class=\"lnlinks\" href=\"#hl-2-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-3\"><a class=\"lnlinks\" href=\"#hl-2-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-4\"><a class=\"lnlinks\" href=\"#hl-2-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-5\"><a class=\"lnlinks\" href=\"#hl-2-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-6\"><a class=\"lnlinks\" href=\"#hl-2-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-7\"><a class=\"lnlinks\" href=\"#hl-2-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-8\"><a class=\"lnlinks\" href=\"#hl-2-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-9\"><a class=\"lnlinks\" href=\"#hl-2-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-10\"><a class=\"lnlinks\" href=\"#hl-2-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-11\"><a class=\"lnlinks\" href=\"#hl-2-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-12\"><a class=\"lnlinks\" href=\"#hl-2-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-13\"><a class=\"lnlinks\" href=\"#hl-2-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-14\"><a class=\"lnlinks\" href=\"#hl-2-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-15\"><a class=\"lnlinks\" href=\"#hl-2-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-16\"><a class=\"lnlinks\" href=\"#hl-2-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-17\"><a class=\"lnlinks\" href=\"#hl-2-17\">17<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">version: &#34;3&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">services:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> frpc:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> container\\_name: frpc\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> image: snowdreamtech\/frpc:0.56.0\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> network\\_mode: host\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> volumes:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">- .\/frpc.toml:\/etc\/frp\/frpc.toml\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> restart: always\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>frpc.toml<\/p>","title":"frp\u642d\u5efa\u548c\u4f7f\u7528"},{"content":" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 import json import httpx from openai import OpenAI api_key = &#39;sk-&#39; base_url = &#39;https:\/\/api.deepseek.com\/v1&#39; model = &#34;deepseek-coder&#34; client = OpenAI( api_key=api_key, # API\u5bc6\u94a5 base_url=base_url, # \u57fa\u7840URL http_client=httpx.Client( proxies=&#34;http:\/\/127.0.0.1:8888&#34;, transport=httpx.HTTPTransport(local_address=&#34;0.0.0.0&#34;), verify=False ) ) # Define the search functions (mock implementations for Baidu, Google, and Bing) def search_baidu(keyword): &#34;&#34;&#34;Search for the keyword on Baidu&#34;&#34;&#34; return f&#34;{keyword}\u662f\u4e00\u4e2a\u6280\u672f\u535a\u4e3b&#34; def search_google(keyword): &#34;&#34;&#34;Search for the keyword on Google&#34;&#34;&#34; return f&#34;{keyword}\u662f\u4e00\u4e2a\u540e\u7aef\u5de5\u7a0b\u5e08&#34; def search_bing(keyword): &#34;&#34;&#34;Search for the keyword on Bing&#34;&#34;&#34; return f&#34;{keyword}\u662f\u4e00\u4e2aPython\u7231\u597d\u8005&#34; # Define the tools in JSON format for OpenAI function calling tools = [ { &#34;type&#34;: &#34;function&#34;, &#34;function&#34;: { &#34;name&#34;: &#34;search_baidu&#34;, &#34;description&#34;: &#34;\u4ece\u767e\u5ea6\u641c\u7d22\u5f15\u64ce\u4e2d\u641c\u7d22\u5173\u952e\u8bcd&#34;, &#34;parameters&#34;: { &#34;type&#34;: &#34;object&#34;, &#34;properties&#34;: { &#34;keyword&#34;: { &#34;type&#34;: &#34;string&#34;, &#34;description&#34;: &#34;\u641c\u7d22\u5173\u952e\u8bcd&#34; } }, &#34;required&#34;: [&#34;keyword&#34;] } } }, { &#34;type&#34;: &#34;function&#34;, &#34;function&#34;: { &#34;name&#34;: &#34;search_google&#34;, &#34;description&#34;: &#34;\u4eceGoogle\u641c\u7d22\u5f15\u64ce\u4e2d\u641c\u7d22\u5173\u952e\u8bcd&#34;, &#34;parameters&#34;: { &#34;type&#34;: &#34;object&#34;, &#34;properties&#34;: { &#34;keyword&#34;: { &#34;type&#34;: &#34;string&#34;, &#34;description&#34;: &#34;\u641c\u7d22\u5173\u952e\u8bcd&#34; } }, &#34;required&#34;: [&#34;keyword&#34;] } } }, { &#34;type&#34;: &#34;function&#34;, &#34;function&#34;: { &#34;name&#34;: &#34;search_bing&#34;, &#34;description&#34;: &#34;\u4eceBing\u641c\u7d22\u5f15\u64ce\u4e2d\u641c\u7d22\u5173\u952e\u8bcd&#34;, &#34;parameters&#34;: { &#34;type&#34;: &#34;object&#34;, &#34;properties&#34;: { &#34;keyword&#34;: { &#34;type&#34;: &#34;string&#34;, &#34;description&#34;: &#34;\u641c\u7d22\u5173\u952e\u8bcd&#34; } }, &#34;required&#34;: [&#34;keyword&#34;] } } } ] # Mapping functions to their names available_functions = { &#34;search_baidu&#34;: search_baidu, &#34;search_google&#34;: search_google, &#34;search_bing&#34;: search_bing } def search(keyword): messages = [{&#34;role&#34;: &#34;user&#34;, &#34;content&#34;: f&#34;\u6c47\u603b\u767e\u5ea6\u3001\u8c37\u6b4c\u3001\u5fc5\u5e94\u4e09\u4e2a\u641c\u7d22\u5f15\u64ce\u5173\u4e8e&#39;{keyword}&#39;\u7684\u7ed3\u679c&#34;}] print(f&#34;\u521d\u59cb\u6d88\u606f: {messages}&#34;) # \u8c03\u8bd5\u4fe1\u606f # \u7b2c\u4e00\u6b21\u8bf7\u6c42\uff1a\u51b3\u5b9a\u4f7f\u7528\u54ea\u4e9b\u5de5\u5177 response = client.chat.completions.create(model=model, messages=messages, tools=tools, tool_choice=&#34;auto&#34;) response_message = response.choices[0].message tool_calls = response_message.tool_calls print(f&#34;AI\u51b3\u5b9a\u4f7f\u7528\u7684\u5de5\u5177: {[call.function.name for call in tool_calls]}&#34;) # \u8c03\u8bd5\u4fe1\u606f if tool_calls: messages.append(response_message) for tool_call in tool_calls: function_name = tool_call.function.name function_args = json.loads(tool_call.function.arguments) function_response = available_functions[function_name](**function_args) print(f&#34;\u8c03\u7528\u51fd\u6570 {function_name} \u7684\u7ed3\u679c: {function_response}&#34;) # \u8c03\u8bd5\u4fe1\u606f messages.append({ &#34;tool_call_id&#34;: tool_call.id, &#34;role&#34;: &#34;tool&#34;, &#34;name&#34;: function_name, &#34;content&#34;: function_response }) # \u7b2c\u4e8c\u6b21\u8bf7\u6c42\uff1a\u6c47\u603b\u7ed3\u679c second_response = client.chat.completions.create(model=model, messages=messages) return second_response.choices[0].message.content return &#34;\u672a\u80fd\u83b7\u53d6\u641c\u7d22\u7ed3\u679c&#34; # \u793a\u4f8b\u4f7f\u7528 result = search(&#34;duolabmeng6&#34;) print(f&#34;\u6700\u7ec8\u7ed3\u679c: {result}&#34;) ","permalink":"https:\/\/my.rongyiapi.com\/posts\/openai%E7%9A%84%E5%B7%A5%E5%85%B7%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E4%BE%8B%E5%AD%90\/","summary":"<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\">  1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\">  2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\">  3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\">  4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\">  5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a class=\"lnlinks\" href=\"#hl-0-6\">  6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a class=\"lnlinks\" href=\"#hl-0-7\">  7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a class=\"lnlinks\" href=\"#hl-0-8\">  8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a class=\"lnlinks\" href=\"#hl-0-9\">  9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a class=\"lnlinks\" href=\"#hl-0-10\"> 10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a class=\"lnlinks\" href=\"#hl-0-11\"> 11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a class=\"lnlinks\" href=\"#hl-0-12\"> 12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-13\"><a class=\"lnlinks\" href=\"#hl-0-13\"> 13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-14\"><a class=\"lnlinks\" href=\"#hl-0-14\"> 14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-15\"><a class=\"lnlinks\" href=\"#hl-0-15\"> 15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-16\"><a class=\"lnlinks\" href=\"#hl-0-16\"> 16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-17\"><a class=\"lnlinks\" href=\"#hl-0-17\"> 17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-18\"><a class=\"lnlinks\" href=\"#hl-0-18\"> 18<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-19\"><a class=\"lnlinks\" href=\"#hl-0-19\"> 19<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-20\"><a class=\"lnlinks\" href=\"#hl-0-20\"> 20<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-21\"><a class=\"lnlinks\" href=\"#hl-0-21\"> 21<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-22\"><a class=\"lnlinks\" href=\"#hl-0-22\"> 22<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-23\"><a class=\"lnlinks\" href=\"#hl-0-23\"> 23<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-24\"><a class=\"lnlinks\" href=\"#hl-0-24\"> 24<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-25\"><a class=\"lnlinks\" href=\"#hl-0-25\"> 25<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-26\"><a class=\"lnlinks\" href=\"#hl-0-26\"> 26<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-27\"><a class=\"lnlinks\" href=\"#hl-0-27\"> 27<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-28\"><a class=\"lnlinks\" href=\"#hl-0-28\"> 28<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-29\"><a class=\"lnlinks\" href=\"#hl-0-29\"> 29<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-30\"><a class=\"lnlinks\" href=\"#hl-0-30\"> 30<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-31\"><a class=\"lnlinks\" href=\"#hl-0-31\"> 31<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-32\"><a class=\"lnlinks\" href=\"#hl-0-32\"> 32<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-33\"><a class=\"lnlinks\" href=\"#hl-0-33\"> 33<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-34\"><a class=\"lnlinks\" href=\"#hl-0-34\"> 34<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-35\"><a class=\"lnlinks\" href=\"#hl-0-35\"> 35<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-36\"><a class=\"lnlinks\" href=\"#hl-0-36\"> 36<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-37\"><a class=\"lnlinks\" href=\"#hl-0-37\"> 37<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-38\"><a class=\"lnlinks\" href=\"#hl-0-38\"> 38<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-39\"><a class=\"lnlinks\" href=\"#hl-0-39\"> 39<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-40\"><a class=\"lnlinks\" href=\"#hl-0-40\"> 40<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-41\"><a class=\"lnlinks\" href=\"#hl-0-41\"> 41<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-42\"><a class=\"lnlinks\" href=\"#hl-0-42\"> 42<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-43\"><a class=\"lnlinks\" href=\"#hl-0-43\"> 43<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-44\"><a class=\"lnlinks\" href=\"#hl-0-44\"> 44<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-45\"><a class=\"lnlinks\" href=\"#hl-0-45\"> 45<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-46\"><a class=\"lnlinks\" href=\"#hl-0-46\"> 46<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-47\"><a class=\"lnlinks\" href=\"#hl-0-47\"> 47<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-48\"><a class=\"lnlinks\" href=\"#hl-0-48\"> 48<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-49\"><a class=\"lnlinks\" href=\"#hl-0-49\"> 49<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-50\"><a class=\"lnlinks\" href=\"#hl-0-50\"> 50<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-51\"><a class=\"lnlinks\" href=\"#hl-0-51\"> 51<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-52\"><a class=\"lnlinks\" href=\"#hl-0-52\"> 52<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-53\"><a class=\"lnlinks\" href=\"#hl-0-53\"> 53<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-54\"><a class=\"lnlinks\" href=\"#hl-0-54\"> 54<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-55\"><a class=\"lnlinks\" href=\"#hl-0-55\"> 55<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-56\"><a class=\"lnlinks\" href=\"#hl-0-56\"> 56<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-57\"><a class=\"lnlinks\" href=\"#hl-0-57\"> 57<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-58\"><a class=\"lnlinks\" href=\"#hl-0-58\"> 58<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-59\"><a class=\"lnlinks\" href=\"#hl-0-59\"> 59<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-60\"><a class=\"lnlinks\" href=\"#hl-0-60\"> 60<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-61\"><a class=\"lnlinks\" href=\"#hl-0-61\"> 61<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-62\"><a class=\"lnlinks\" href=\"#hl-0-62\"> 62<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-63\"><a class=\"lnlinks\" href=\"#hl-0-63\"> 63<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-64\"><a class=\"lnlinks\" href=\"#hl-0-64\"> 64<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-65\"><a class=\"lnlinks\" href=\"#hl-0-65\"> 65<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-66\"><a class=\"lnlinks\" href=\"#hl-0-66\"> 66<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-67\"><a class=\"lnlinks\" href=\"#hl-0-67\"> 67<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-68\"><a class=\"lnlinks\" href=\"#hl-0-68\"> 68<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-69\"><a class=\"lnlinks\" href=\"#hl-0-69\"> 69<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-70\"><a class=\"lnlinks\" href=\"#hl-0-70\"> 70<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-71\"><a class=\"lnlinks\" href=\"#hl-0-71\"> 71<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-72\"><a class=\"lnlinks\" href=\"#hl-0-72\"> 72<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-73\"><a class=\"lnlinks\" href=\"#hl-0-73\"> 73<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-74\"><a class=\"lnlinks\" href=\"#hl-0-74\"> 74<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-75\"><a class=\"lnlinks\" href=\"#hl-0-75\"> 75<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-76\"><a class=\"lnlinks\" href=\"#hl-0-76\"> 76<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-77\"><a class=\"lnlinks\" href=\"#hl-0-77\"> 77<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-78\"><a class=\"lnlinks\" href=\"#hl-0-78\"> 78<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-79\"><a class=\"lnlinks\" href=\"#hl-0-79\"> 79<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-80\"><a class=\"lnlinks\" href=\"#hl-0-80\"> 80<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-81\"><a class=\"lnlinks\" href=\"#hl-0-81\"> 81<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-82\"><a class=\"lnlinks\" href=\"#hl-0-82\"> 82<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-83\"><a class=\"lnlinks\" href=\"#hl-0-83\"> 83<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-84\"><a class=\"lnlinks\" href=\"#hl-0-84\"> 84<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-85\"><a class=\"lnlinks\" href=\"#hl-0-85\"> 85<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-86\"><a class=\"lnlinks\" href=\"#hl-0-86\"> 86<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-87\"><a class=\"lnlinks\" href=\"#hl-0-87\"> 87<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-88\"><a class=\"lnlinks\" href=\"#hl-0-88\"> 88<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-89\"><a class=\"lnlinks\" href=\"#hl-0-89\"> 89<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-90\"><a class=\"lnlinks\" href=\"#hl-0-90\"> 90<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-91\"><a class=\"lnlinks\" href=\"#hl-0-91\"> 91<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-92\"><a class=\"lnlinks\" href=\"#hl-0-92\"> 92<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-93\"><a class=\"lnlinks\" href=\"#hl-0-93\"> 93<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-94\"><a class=\"lnlinks\" href=\"#hl-0-94\"> 94<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-95\"><a class=\"lnlinks\" href=\"#hl-0-95\"> 95<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-96\"><a class=\"lnlinks\" href=\"#hl-0-96\"> 96<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-97\"><a class=\"lnlinks\" href=\"#hl-0-97\"> 97<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-98\"><a class=\"lnlinks\" href=\"#hl-0-98\"> 98<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-99\"><a class=\"lnlinks\" href=\"#hl-0-99\"> 99<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-100\"><a class=\"lnlinks\" href=\"#hl-0-100\">100<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-101\"><a class=\"lnlinks\" href=\"#hl-0-101\">101<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-102\"><a class=\"lnlinks\" href=\"#hl-0-102\">102<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-103\"><a class=\"lnlinks\" href=\"#hl-0-103\">103<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-104\"><a class=\"lnlinks\" href=\"#hl-0-104\">104<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-105\"><a class=\"lnlinks\" href=\"#hl-0-105\">105<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-106\"><a class=\"lnlinks\" href=\"#hl-0-106\">106<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-107\"><a class=\"lnlinks\" href=\"#hl-0-107\">107<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-108\"><a class=\"lnlinks\" href=\"#hl-0-108\">108<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-109\"><a class=\"lnlinks\" href=\"#hl-0-109\">109<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-110\"><a class=\"lnlinks\" href=\"#hl-0-110\">110<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-111\"><a class=\"lnlinks\" href=\"#hl-0-111\">111<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-112\"><a class=\"lnlinks\" href=\"#hl-0-112\">112<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-113\"><a class=\"lnlinks\" href=\"#hl-0-113\">113<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-114\"><a class=\"lnlinks\" href=\"#hl-0-114\">114<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-115\"><a class=\"lnlinks\" href=\"#hl-0-115\">115<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-116\"><a class=\"lnlinks\" href=\"#hl-0-116\">116<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-117\"><a class=\"lnlinks\" href=\"#hl-0-117\">117<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-118\"><a class=\"lnlinks\" href=\"#hl-0-118\">118<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-119\"><a class=\"lnlinks\" href=\"#hl-0-119\">119<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-120\"><a class=\"lnlinks\" href=\"#hl-0-120\">120<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-121\"><a class=\"lnlinks\" href=\"#hl-0-121\">121<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-122\"><a class=\"lnlinks\" href=\"#hl-0-122\">122<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-123\"><a class=\"lnlinks\" href=\"#hl-0-123\">123<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-124\"><a class=\"lnlinks\" href=\"#hl-0-124\">124<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-125\"><a class=\"lnlinks\" href=\"#hl-0-125\">125<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-126\"><a class=\"lnlinks\" href=\"#hl-0-126\">126<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-127\"><a class=\"lnlinks\" href=\"#hl-0-127\">127<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-128\"><a class=\"lnlinks\" href=\"#hl-0-128\">128<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-129\"><a class=\"lnlinks\" href=\"#hl-0-129\">129<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-130\"><a class=\"lnlinks\" href=\"#hl-0-130\">130<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-131\"><a class=\"lnlinks\" href=\"#hl-0-131\">131<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-132\"><a class=\"lnlinks\" href=\"#hl-0-132\">132<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-133\"><a class=\"lnlinks\" href=\"#hl-0-133\">133<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-134\"><a class=\"lnlinks\" href=\"#hl-0-134\">134<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-135\"><a class=\"lnlinks\" href=\"#hl-0-135\">135<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-gdscript3\" data-lang=\"gdscript3\"><span class=\"line\"><span class=\"cl\"><span class=\"n\">import<\/span> <span class=\"n\">json<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">import<\/span> <span class=\"n\">httpx<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">from<\/span> <span class=\"n\">openai<\/span> <span class=\"n\">import<\/span> <span class=\"n\">OpenAI<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">api_key<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;sk-&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">base_url<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;https:\/\/api.deepseek.com\/v1&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">model<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;deepseek-coder&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">client<\/span> <span class=\"o\">=<\/span> <span class=\"n\">OpenAI<\/span><span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">api_key<\/span><span class=\"o\">=<\/span><span class=\"n\">api_key<\/span><span class=\"p\">,<\/span>   <span class=\"c1\"># API\u5bc6\u94a5<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">base_url<\/span><span class=\"o\">=<\/span><span class=\"n\">base_url<\/span><span class=\"p\">,<\/span> <span class=\"c1\"># \u57fa\u7840URL<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">http_client<\/span><span class=\"o\">=<\/span><span class=\"n\">httpx<\/span><span class=\"o\">.<\/span><span class=\"n\">Client<\/span><span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">proxies<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;http:\/\/127.0.0.1:8888&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">transport<\/span><span class=\"o\">=<\/span><span class=\"n\">httpx<\/span><span class=\"o\">.<\/span><span class=\"n\">HTTPTransport<\/span><span class=\"p\">(<\/span><span class=\"n\">local_address<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;0.0.0.0&#34;<\/span><span class=\"p\">),<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">verify<\/span><span class=\"o\">=<\/span><span class=\"n\">False<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># Define the search functions (mock implementations for Baidu, Google, and Bing)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">search_baidu<\/span><span class=\"p\">(<\/span><span class=\"n\">keyword<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s2\">&#34;&#34;&#34;Search for the keyword on Baidu&#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"n\">f<\/span><span class=\"s2\">&#34;{keyword}\u662f\u4e00\u4e2a\u6280\u672f\u535a\u4e3b&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">search_google<\/span><span class=\"p\">(<\/span><span class=\"n\">keyword<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s2\">&#34;&#34;&#34;Search for the keyword on Google&#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"n\">f<\/span><span class=\"s2\">&#34;{keyword}\u662f\u4e00\u4e2a\u540e\u7aef\u5de5\u7a0b\u5e08&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">search_bing<\/span><span class=\"p\">(<\/span><span class=\"n\">keyword<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s2\">&#34;&#34;&#34;Search for the keyword on Bing&#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"n\">f<\/span><span class=\"s2\">&#34;{keyword}\u662f\u4e00\u4e2aPython\u7231\u597d\u8005&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># Define the tools in JSON format for OpenAI function calling<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">tools<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"s2\">&#34;type&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;function&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"s2\">&#34;function&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"s2\">&#34;name&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;search_baidu&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"s2\">&#34;description&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;\u4ece\u767e\u5ea6\u641c\u7d22\u5f15\u64ce\u4e2d\u641c\u7d22\u5173\u952e\u8bcd&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"s2\">&#34;parameters&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"s2\">&#34;type&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;object&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"s2\">&#34;properties&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"s2\">&#34;keyword&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"s2\">&#34;type&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;string&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"s2\">&#34;description&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;\u641c\u7d22\u5173\u952e\u8bcd&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"s2\">&#34;required&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"s2\">&#34;keyword&#34;<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"s2\">&#34;type&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;function&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"s2\">&#34;function&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"s2\">&#34;name&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;search_google&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"s2\">&#34;description&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;\u4eceGoogle\u641c\u7d22\u5f15\u64ce\u4e2d\u641c\u7d22\u5173\u952e\u8bcd&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"s2\">&#34;parameters&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"s2\">&#34;type&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;object&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"s2\">&#34;properties&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"s2\">&#34;keyword&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"s2\">&#34;type&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;string&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"s2\">&#34;description&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;\u641c\u7d22\u5173\u952e\u8bcd&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"s2\">&#34;required&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"s2\">&#34;keyword&#34;<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"s2\">&#34;type&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;function&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"s2\">&#34;function&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"s2\">&#34;name&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;search_bing&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"s2\">&#34;description&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;\u4eceBing\u641c\u7d22\u5f15\u64ce\u4e2d\u641c\u7d22\u5173\u952e\u8bcd&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"s2\">&#34;parameters&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"s2\">&#34;type&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;object&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"s2\">&#34;properties&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"s2\">&#34;keyword&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"s2\">&#34;type&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;string&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"s2\">&#34;description&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;\u641c\u7d22\u5173\u952e\u8bcd&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"s2\">&#34;required&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"s2\">&#34;keyword&#34;<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># Mapping functions to their names<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">available_functions<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s2\">&#34;search_baidu&#34;<\/span><span class=\"p\">:<\/span> <span class=\"n\">search_baidu<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s2\">&#34;search_google&#34;<\/span><span class=\"p\">:<\/span> <span class=\"n\">search_google<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s2\">&#34;search_bing&#34;<\/span><span class=\"p\">:<\/span> <span class=\"n\">search_bing<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">search<\/span><span class=\"p\">(<\/span><span class=\"n\">keyword<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">messages<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[{<\/span><span class=\"s2\">&#34;role&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;user&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;content&#34;<\/span><span class=\"p\">:<\/span> <span class=\"n\">f<\/span><span class=\"s2\">&#34;\u6c47\u603b\u767e\u5ea6\u3001\u8c37\u6b4c\u3001\u5fc5\u5e94\u4e09\u4e2a\u641c\u7d22\u5f15\u64ce\u5173\u4e8e&#39;{keyword}&#39;\u7684\u7ed3\u679c&#34;<\/span><span class=\"p\">}]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    \n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">f<\/span><span class=\"s2\">&#34;\u521d\u59cb\u6d88\u606f: {messages}&#34;<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># \u8c03\u8bd5\u4fe1\u606f<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"c1\"># \u7b2c\u4e00\u6b21\u8bf7\u6c42\uff1a\u51b3\u5b9a\u4f7f\u7528\u54ea\u4e9b\u5de5\u5177<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"n\">client<\/span><span class=\"o\">.<\/span><span class=\"n\">chat<\/span><span class=\"o\">.<\/span><span class=\"n\">completions<\/span><span class=\"o\">.<\/span><span class=\"n\">create<\/span><span class=\"p\">(<\/span><span class=\"n\">model<\/span><span class=\"o\">=<\/span><span class=\"n\">model<\/span><span class=\"p\">,<\/span> <span class=\"n\">messages<\/span><span class=\"o\">=<\/span><span class=\"n\">messages<\/span><span class=\"p\">,<\/span> <span class=\"n\">tools<\/span><span class=\"o\">=<\/span><span class=\"n\">tools<\/span><span class=\"p\">,<\/span> <span class=\"n\">tool_choice<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;auto&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">response_message<\/span> <span class=\"o\">=<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">choices<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span><span class=\"o\">.<\/span><span class=\"n\">message<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">tool_calls<\/span> <span class=\"o\">=<\/span> <span class=\"n\">response_message<\/span><span class=\"o\">.<\/span><span class=\"n\">tool_calls<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">f<\/span><span class=\"s2\">&#34;AI\u51b3\u5b9a\u4f7f\u7528\u7684\u5de5\u5177: {[call.function.name for call in tool_calls]}&#34;<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># \u8c03\u8bd5\u4fe1\u606f<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">if<\/span> <span class=\"n\">tool_calls<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">messages<\/span><span class=\"o\">.<\/span><span class=\"n\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">response_message<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">for<\/span> <span class=\"n\">tool_call<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">tool_calls<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">function_name<\/span> <span class=\"o\">=<\/span> <span class=\"n\">tool_call<\/span><span class=\"o\">.<\/span><span class=\"n\">function<\/span><span class=\"o\">.<\/span><span class=\"n\">name<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">function_args<\/span> <span class=\"o\">=<\/span> <span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">loads<\/span><span class=\"p\">(<\/span><span class=\"n\">tool_call<\/span><span class=\"o\">.<\/span><span class=\"n\">function<\/span><span class=\"o\">.<\/span><span class=\"n\">arguments<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">function_response<\/span> <span class=\"o\">=<\/span> <span class=\"n\">available_functions<\/span><span class=\"p\">[<\/span><span class=\"n\">function_name<\/span><span class=\"p\">](<\/span><span class=\"o\">**<\/span><span class=\"n\">function_args<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            \n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">f<\/span><span class=\"s2\">&#34;\u8c03\u7528\u51fd\u6570 {function_name} \u7684\u7ed3\u679c: {function_response}&#34;<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># \u8c03\u8bd5\u4fe1\u606f<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            \n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">messages<\/span><span class=\"o\">.<\/span><span class=\"n\">append<\/span><span class=\"p\">({<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"s2\">&#34;tool_call_id&#34;<\/span><span class=\"p\">:<\/span> <span class=\"n\">tool_call<\/span><span class=\"o\">.<\/span><span class=\"n\">id<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"s2\">&#34;role&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;tool&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"s2\">&#34;name&#34;<\/span><span class=\"p\">:<\/span> <span class=\"n\">function_name<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"s2\">&#34;content&#34;<\/span><span class=\"p\">:<\/span> <span class=\"n\">function_response<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">})<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"c1\"># \u7b2c\u4e8c\u6b21\u8bf7\u6c42\uff1a\u6c47\u603b\u7ed3\u679c<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">second_response<\/span> <span class=\"o\">=<\/span> <span class=\"n\">client<\/span><span class=\"o\">.<\/span><span class=\"n\">chat<\/span><span class=\"o\">.<\/span><span class=\"n\">completions<\/span><span class=\"o\">.<\/span><span class=\"n\">create<\/span><span class=\"p\">(<\/span><span class=\"n\">model<\/span><span class=\"o\">=<\/span><span class=\"n\">model<\/span><span class=\"p\">,<\/span> <span class=\"n\">messages<\/span><span class=\"o\">=<\/span><span class=\"n\">messages<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"n\">second_response<\/span><span class=\"o\">.<\/span><span class=\"n\">choices<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span><span class=\"o\">.<\/span><span class=\"n\">message<\/span><span class=\"o\">.<\/span><span class=\"n\">content<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"s2\">&#34;\u672a\u80fd\u83b7\u53d6\u641c\u7d22\u7ed3\u679c&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u793a\u4f8b\u4f7f\u7528<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">result<\/span> <span class=\"o\">=<\/span> <span class=\"n\">search<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;duolabmeng6&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">f<\/span><span class=\"s2\">&#34;\u6700\u7ec8\u7ed3\u679c: {result}&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>","title":"openai\u7684\u5de5\u5177\u51fd\u6570\u8c03\u7528\u4f8b\u5b50"},{"content":"\u5feb\u6377\u952e \u6211\u7528\u7684\u662f vscode \u7684\u5feb\u6377\u952e\u65b9\u6848 \u9700\u8981\u5b89\u88c5 vscode \u5feb\u6377\u952e\u7684\u63d2\u4ef6\n\u5feb\u6377\u952e\u540d\u79f0 \u5feb\u6377\u952e \u539f\u6765\u5feb\u6377\u952e \u6700\u8fd1\u7684\u6587\u4ef6 cmd + E ctrl + R \u6587\u4ef6\u7ed3\u6784 cmd + R ctrl + shift + O \u529f\u80fd\u63d2\u4ef6 \u7f8e\u5316\u63d2\u4ef6 \u56fe\u6807\u63d2\u4ef6 https:\/\/plugins.jetbrains.com\/plugin\/16604-extra-toolwindow-colorful-icons\n","permalink":"https:\/\/my.rongyiapi.com\/posts\/ide%E4%B8%8A%E7%9A%84%E5%BF%AB%E6%8D%B7%E9%94%AE\/","summary":"<h1 id=\"\u5feb\u6377\u952e\">\u5feb\u6377\u952e<\/h1>\n<p>\u6211\u7528\u7684\u662f vscode \u7684\u5feb\u6377\u952e\u65b9\u6848 \u9700\u8981\u5b89\u88c5 vscode \u5feb\u6377\u952e\u7684\u63d2\u4ef6<\/p>\n<table>\n  <thead>\n      <tr>\n          <th style=\"text-align: left\">\u5feb\u6377\u952e\u540d\u79f0<\/th>\n          <th style=\"text-align: left\">\u5feb\u6377\u952e<\/th>\n          <th style=\"text-align: left\">\u539f\u6765\u5feb\u6377\u952e<\/th>\n      <\/tr>\n  <\/thead>\n  <tbody>\n      <tr>\n          <td style=\"text-align: left\">\u6700\u8fd1\u7684\u6587\u4ef6<\/td>\n          <td style=\"text-align: left\">cmd + E<\/td>\n          <td style=\"text-align: left\">ctrl + R<\/td>\n      <\/tr>\n      <tr>\n          <td style=\"text-align: left\">\u6587\u4ef6\u7ed3\u6784<\/td>\n          <td style=\"text-align: left\">cmd + R<\/td>\n          <td style=\"text-align: left\">ctrl +  shift + O<\/td>\n      <\/tr>\n  <\/tbody>\n<\/table>\n<h1 id=\"\u529f\u80fd\u63d2\u4ef6\">\u529f\u80fd\u63d2\u4ef6<\/h1>\n<h1 id=\"\u7f8e\u5316\u63d2\u4ef6\">\u7f8e\u5316\u63d2\u4ef6<\/h1>\n<h2 id=\"\u56fe\u6807\u63d2\u4ef6\">\u56fe\u6807\u63d2\u4ef6<\/h2>\n<p><a href=\"https:\/\/plugins.jetbrains.com\/plugin\/16604-extra-toolwindow-colorful-icons\">https:\/\/plugins.jetbrains.com\/plugin\/16604-extra-toolwindow-colorful-icons<\/a><\/p>","title":"ide\u4e0a\u7684\u5feb\u6377\u952e"},{"content":"\u5b89\u88c5 \u56fd\u5185\u4e0d\u53ef\u7528 1 curl https:\/\/get.acme.sh | sh \u56fd\u5185\u53ef\u7528 1 2 3 git clone https:\/\/gitee.com\/neilpang\/acme.sh.git cd acme.sh .\/acme.sh --install -m my@example.com \u7533\u8bf7\u8bc1\u4e66 1 .\/acme.sh --issue -d go.kenhong.com -w \/root\/ftp_nginx\/www \u914d\u7f6e Nginx \u53ef\u4ee5\u8bbf\u95ee \/root\/ftp_nginx\/www\n1 2 3 4 [Wed Oct 18 02:52:53 AM CST 2023] Your cert is in: \/root\/.acme.sh\/go.kenhong.com\/go.kenhong.com.cer [Wed Oct 18 02:52:53 AM CST 2023] Your cert key is in: \/root\/.acme.sh\/go.kenhong.com\/go.kenhong.com.key [Wed Oct 18 02:52:53 AM CST 2023] The intermediate CA cert is in: \/root\/.acme.sh\/go.kenhong.com\/ca.cer [Wed Oct 18 02:52:53 AM CST 2023] And the full chain certs is there: \/root\/.acme.sh\/go.kenhong.com\/fullchain.cer \u770b\u5230\u4ee5\u4e0a\u4fe1\u606f\u8868\u793a\u6210\u529f\u3002\n\u53e6\u4e00\u79cd\u66f4\u65b9\u4fbf\u7684\u65b9\u5f0f \u76f4\u63a5\u5c06\u81ea\u5df1\u5f53\u6210 web \u670d\u52a1\u5668\u8fdb\u884c\u7533\u8bf7\uff1a\n1 acme.sh --issue -d go.kenhong.com --standalone \u4e00\u952e\u90e8\u7f72 \u4fdd\u5b58\u4e3a docker-compose.yml \u6587\u4ef6\uff1a\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 version: &#39;3.2&#39; services: openssh-server: image: linuxserver\/openssh-server:latest container_name: openssh-server hostname: openssh-server #optional environment: - PUID=1000 - PGID=1000 - TZ=Asia\/Shanghai - SUDO_ACCESS=false #optional - PASSWORD_ACCESS=true #optional - USER_PASSWORD=${USER_PASSWORD} - USER_NAME=${USER_NAME} #optional volumes: - .\/config:\/config - .\/www:\/config\/www ports: - ${SSH_PORT}:2222 restart: unless-stopped nginx: image: nginx:latest ports: - &#34;80:80&#34; - &#34;443:443&#34; volumes: - .\/www:\/usr\/share\/nginx\/html - \/root\/.acme.sh\/go.kenhong.com:\/etc\/nginx\/certs - .\/default.conf:\/etc\/nginx\/conf.d\/default.conf \u65e0 HTTPS \u8bc1\u4e66\u7684 Nginx \u914d\u7f6e default.conf \u6587\u4ef6\uff1a\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 server { listen 80; server_name _; location \/ { root \/usr\/share\/nginx\/html; index index.html; try_files $uri $uri\/ \/index.html; } error_page 500 502 503 504 \/50x.html; location = \/50x.html { root \/usr\/share\/nginx\/html; } } \u6709 HTTPS \u8bc1\u4e66\u7684 Nginx \u914d\u7f6e default.conf \u6587\u4ef6\uff1a\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 server { listen 80; server_name go.kenhong.com; return 301 https:\/\/$host$request_uri; } server { listen 443 ssl http2; server_name go.kenhong.com; ssl_certificate \/etc\/nginx\/certs\/fullchain.cer; ssl_certificate_key \/etc\/nginx\/certs\/go.kenhong.com.key; gzip on; gzip_disable &#34;msie6&#34;; gzip_vary on; gzip_proxied any; gzip_comp_level 9; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text\/plain text\/css application\/json application\/javascript text\/xml application\/xml application\/xml+rss text\/javascript; location \/ { root \/usr\/share\/nginx\/html; index index.html; if ($host != &#34;go.kenhong.com&#34;) { return 444; } } } \u66f4\u65b0\u8bc1\u4e66 1 acme.sh --renew -d go.kenhong.com --force \u4e00\u952e\u5b89\u88c5\u8bc1\u4e66 1 2 3 4 acme.sh --installcert -d go.kenhong.com \\ --key-file \/etc\/nginx\/certs\/go.kenhong.com.rsa.key \\ --fullchain-file \/etc\/nginx\/certs\/go.kenhong.com.rsa.crt \\ --reloadcmd &#34;systemctl reload nginx&#34; \u4f7f\u7528 Caddy \u4e0a\u9762\u7684\u64cd\u4f5c\u90fd\u514d\u4e86~ Caddyfile \u914d\u7f6e 1 2 3 4 5 6 7 8 go.kenhong.com { root * \/srv encode { zstd gzip 9 } file_server } docker-compose.yml \u914d\u7f6e 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 version: &#39;3.2&#39; services: openssh-server: image: linuxserver\/openssh-server:latest container_name: openssh-server hostname: openssh-server #optional environment: - PUID=1000 - PGID=1000 - TZ=Asia\/Shanghai - SUDO_ACCESS=false #optional - PASSWORD_ACCESS=true #optional - USER_PASSWORD=${USER_PASSWORD} - USER_NAME=${USER_NAME} #optional volumes: - .\/config:\/config - .\/www:\/config\/www ports: - ${SSH_PORT}:2222 restart: unless-stopped caddy: image: caddy:2-alpine ports: - &#34;80:80&#34; - &#34;443:443&#34; - &#34;443:443\/udp&#34; volumes: - .\/Caddyfile:\/etc\/caddy\/Caddyfile - .\/www:\/srv - .\/caddy_data:\/data - .\/caddy_config:\/config ","permalink":"https:\/\/my.rongyiapi.com\/posts\/acme%E5%85%8D%E8%B4%B9https%E8%AF%81%E4%B9%A6\/","summary":"<h1 id=\"\u5b89\u88c5\">\u5b89\u88c5<\/h1>\n<h2 id=\"\u56fd\u5185\u4e0d\u53ef\u7528\">\u56fd\u5185\u4e0d\u53ef\u7528<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">curl https:\/\/get.acme.sh <span class=\"p\">|<\/span> sh\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u56fd\u5185\u53ef\u7528\">\u56fd\u5185\u53ef\u7528<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a class=\"lnlinks\" href=\"#hl-1-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-2\"><a class=\"lnlinks\" href=\"#hl-1-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-3\"><a class=\"lnlinks\" href=\"#hl-1-3\">3<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">git clone https:\/\/gitee.com\/neilpang\/acme.sh.git\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">cd<\/span> acme.sh\n<\/span><\/span><span class=\"line\"><span class=\"cl\">.\/acme.sh --install -m my@example.com\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h1 id=\"\u7533\u8bf7\u8bc1\u4e66\">\u7533\u8bf7\u8bc1\u4e66<\/h1>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-2-1\"><a class=\"lnlinks\" href=\"#hl-2-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">.\/acme.sh --issue -d go.kenhong.com -w \/root\/ftp_nginx\/www\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u914d\u7f6e Nginx \u53ef\u4ee5\u8bbf\u95ee <code>\/root\/ftp_nginx\/www<\/code><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-3-1\"><a class=\"lnlinks\" href=\"#hl-3-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-2\"><a class=\"lnlinks\" href=\"#hl-3-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-3\"><a class=\"lnlinks\" href=\"#hl-3-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-4\"><a class=\"lnlinks\" href=\"#hl-3-4\">4<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">[Wed Oct 18 02:52:53 AM CST 2023] Your cert is in: \/root\/.acme.sh\/go.kenhong.com\/go.kenhong.com.cer\n<\/span><\/span><span class=\"line\"><span class=\"cl\">[Wed Oct 18 02:52:53 AM CST 2023] Your cert key is in: \/root\/.acme.sh\/go.kenhong.com\/go.kenhong.com.key\n<\/span><\/span><span class=\"line\"><span class=\"cl\">[Wed Oct 18 02:52:53 AM CST 2023] The intermediate CA cert is in: \/root\/.acme.sh\/go.kenhong.com\/ca.cer\n<\/span><\/span><span class=\"line\"><span class=\"cl\">[Wed Oct 18 02:52:53 AM CST 2023] And the full chain certs is there: \/root\/.acme.sh\/go.kenhong.com\/fullchain.cer\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u770b\u5230\u4ee5\u4e0a\u4fe1\u606f\u8868\u793a\u6210\u529f\u3002<\/p>","title":"acme\u514d\u8d39https\u8bc1\u4e66"},{"content":"https:\/\/chromewebstore.google.com\/detail\/LocatorJS\/npbfdllefekhdplbkdigpncggmojpefi \u8fd9\u5c31\u5f88\u795e\u5668 \u771f\u597d\u7528\n1 2 3 4 5 cursor:\/\/file\/${projectPath}${filePath}:${line}:${column} webstorm:\/\/open?file=${projectPath}${filePath}&amp;line=${line}&amp;column=${column} vscode:\/\/file\/${projectPath}${filePath}:${line}:${column} \u610f\u5916\u53d1\u73b0\u8fd9\u6837\u5b50\u4e5f\u53ef\u4ee5\u8df3\u8f6c\u4ee3\u7801 \u538b\u6839\u4e0d\u4e0d\u8981\u5f00\u53d1\u63d2\u4ef6\u554a\n\u725b\u903c \u76f4\u63a5\u8282\u7ea6\u4e86\u4e00\u4e2a\u63d2\u4ef6\u4ee5\u524d\u8fd8\u5f00\u53d1\u4e86\u4e2a\u8df3\u8f6c\u8df3\u8f6c\u4ee3\u7801\u7684\u63d2\u4ef6\u5462&hellip;\u539f\u6765\u4e0d\u9700\u8981\u7684\n","permalink":"https:\/\/my.rongyiapi.com\/posts\/chrome%E7%9A%84html%E4%BB%A3%E7%A0%81%E8%B7%B3%E8%BD%AC%E6%8F%92%E4%BB%B6-locatorjs\/","summary":"<p><a href=\"https:\/\/chromewebstore.google.com\/detail\/LocatorJS\/npbfdllefekhdplbkdigpncggmojpefi\">https:\/\/chromewebstore.google.com\/detail\/LocatorJS\/npbfdllefekhdplbkdigpncggmojpefi<\/a>\n\u8fd9\u5c31\u5f88\u795e\u5668 \u771f\u597d\u7528<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\">4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\">5<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">cursor:\/\/file\/${projectPath}${filePath}:${line}:${column}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">webstorm:\/\/open?file=${projectPath}${filePath}&amp;line=${line}&amp;column=${column}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">vscode:\/\/file\/${projectPath}${filePath}:${line}:${column}\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u610f\u5916\u53d1\u73b0\u8fd9\u6837\u5b50\u4e5f\u53ef\u4ee5\u8df3\u8f6c\u4ee3\u7801 \u538b\u6839\u4e0d\u4e0d\u8981\u5f00\u53d1\u63d2\u4ef6\u554a<\/p>\n<p>\u725b\u903c \u76f4\u63a5\u8282\u7ea6\u4e86\u4e00\u4e2a\u63d2\u4ef6\u4ee5\u524d\u8fd8\u5f00\u53d1\u4e86\u4e2a\u8df3\u8f6c\u8df3\u8f6c\u4ee3\u7801\u7684\u63d2\u4ef6\u5462&hellip;\u539f\u6765\u4e0d\u9700\u8981\u7684<\/p>","title":"chrome\u7684html\u4ee3\u7801\u8df3\u8f6c\u63d2\u4ef6 LocatorJS"},{"content":"\u524d\u8a00 \u603b\u662f\u89c9\u5f97ollama\u547d\u4ee4\u884c\u7684\u65b9\u5f0f\u5f88\u9ebb\u70e6,\u968f\u624b\u5199\u4e00\u4e2aollama\u7684\u7ba1\u7406\u9762\u677f\nollama\u4e0b\u8f7d https:\/\/ollama.com\/download\nollama\u7ba1\u7406\u9762\u677f\u8f6f\u4ef6\u4e0b\u8f7d \u652f\u6301 window MacOS\n\u4e0b\u8f7d\u5730\u5740\n\u6e90\u7801\u5730\u5740 https:\/\/github.com\/duolabmeng6\/ollama_ui\n","permalink":"https:\/\/my.rongyiapi.com\/posts\/%E5%86%99%E4%BA%86%E4%B8%AAollama%E7%9A%84%E7%AE%A1%E7%90%86%E9%9D%A2%E6%9D%BF%E8%BD%AF%E4%BB%B6\/","summary":"<h1 id=\"\u524d\u8a00\">\u524d\u8a00<\/h1>\n<p>\u603b\u662f\u89c9\u5f97ollama\u547d\u4ee4\u884c\u7684\u65b9\u5f0f\u5f88\u9ebb\u70e6,\u968f\u624b\u5199\u4e00\u4e2aollama\u7684\u7ba1\u7406\u9762\u677f<\/p>\n<h1 id=\"ollama\u4e0b\u8f7d\">ollama\u4e0b\u8f7d<\/h1>\n<p><a href=\"https:\/\/ollama.com\/download\">https:\/\/ollama.com\/download<\/a><\/p>\n<h1 id=\"ollama\u7ba1\u7406\u9762\u677f\u8f6f\u4ef6\u4e0b\u8f7d\">ollama\u7ba1\u7406\u9762\u677f\u8f6f\u4ef6\u4e0b\u8f7d<\/h1>\n<p>\u652f\u6301 window MacOS<\/p>\n<p><a href=\"https:\/\/github.com\/duolabmeng6\/ollama_ui\/releases\">\u4e0b\u8f7d\u5730\u5740<\/a><\/p>\n<p><img loading=\"lazy\" src=\"https:\/\/github.com\/user-attachments\/assets\/7099853a-6706-44ad-9b5b-eabe9e82efd4\" alt=\"image\"  \/>\n<\/p>\n<h1 id=\"\u6e90\u7801\u5730\u5740\">\u6e90\u7801\u5730\u5740<\/h1>\n<p><a href=\"https:\/\/github.com\/duolabmeng6\/ollama_ui\">https:\/\/github.com\/duolabmeng6\/ollama_ui<\/a><\/p>","title":"\u5199\u4e86\u4e2aollama\u7684\u7ba1\u7406\u9762\u677f\u8f6f\u4ef6"},{"content":"1.\u4e0b\u8f7doverride\u9879\u76ee linux-do\/override: \u5565\u4e5f\u4e0d\u662f (github.com)\n\u65b0\u5efa\u8fd9\u4e2a\u6587\u4ef6 config.conf\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 { &#34;bind&#34;: &#34;0.0.0.0:8181&#34;, &#34;proxy_url&#34;: &#34;&#34;, &#34;timeout&#34;: 600, &#34;codex_api_base&#34;: &#34;https:\/\/api.deepseek.com\/beta\/v1&#34;, &#34;codex_api_key&#34;: &#34;sk-&#34;, &#34;codex_api_organization&#34;: &#34;&#34;, &#34;codex_api_project&#34;: &#34;&#34;, &#34;codex_max_tokens&#34;: 500, &#34;code_instruct_model&#34;: &#34;deepseek-coder&#34;, &#34;chat_api_base&#34;: &#34;https:\/\/api.deepseek.com\/v1&#34;, &#34;chat_api_key&#34;: &#34;sk-&#34;, &#34;chat_api_organization&#34;: &#34;&#34;, &#34;chat_api_project&#34;: &#34;&#34;, &#34;chat_max_tokens&#34;: 4096, &#34;chat_model_default&#34;: &#34;deepseek-chat&#34;, &#34;chat_model_map&#34;: { }, &#34;chat_locale&#34;: &#34;zh_CN&#34;, &#34;auth_token&#34;: &#34;&#34; } \u8fd0\u884c docker-compose up -d \u8bbf\u95ee http:\/\/127.0.0.1:8181 \u8fd9\u4e2a\u670d\u52a1\u5c31\u90e8\u7f72\u6210\u529f\u4e86\n2.\u5b89\u88c5 VSCode Copilot Copilot 1.219.0 Copilotchat 0.17.1 \u6309 ctrl+shift+p \u8f93\u5165 settings \u6253\u5f00\u9996\u9009\u9879 \u52a0\u5165\u8fd9\u4e9b\u914d\u7f6e\n1 2 3 4 5 6 7 &#34;github.copilot.advanced&#34;: { &#34;debug.overrideCAPIUrl&#34;: &#34;http:\/\/127.0.0.1:8181\/v1&#34;, &#34;debug.overrideProxyUrl&#34;: &#34;http:\/\/127.0.0.1:8181&#34;, &#34;debug.chatOverrideProxyUrl&#34;: &#34;http:\/\/127.0.0.1:8181\/v1\/chat\/completions&#34;, &#34;authProvider&#34;: &#34;github-enterprise&#34; }, &#34;github-enterprise.uri&#34;: &#34;https:\/\/cocopilot.org&#34; \u4fdd\u5b58\u540e\u91cd\u542fVSCode\n3.\u767b\u5f55Copilot\u63d2\u4ef6\u9f50\u6d3b\u80fd\u7528\u4e86 \u5173\u95edvscode\u8865\u5168\u7684\u63d0\u793a\u58f0\u97f3 \u5982\u679c\u4f60\u89c9\u5f97\u58f0\u97f3\u4e0d\u70e6 \u8fd9\u91cc\u4e0d\u7528\u5904\u7406\u4e86\nvscode\u6309 ctrl+shift+p \u8f93\u5165 settings \u6253\u5f00\u9996\u9009\u9879 \u52a0\u5165\u8fd9\u4e9b\u914d\u7f6e\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 &#34;accessibility.signals.chatRequestSent&#34;: { &#34;sound&#34;: &#34;off&#34;, &#34;announcement&#34;: &#34;off&#34; }, &#34;accessibility.signals.chatResponseReceived&#34;: { &#34;sound&#34;: &#34;off&#34; }, &#34;accessibility.signals.diffLineDeleted&#34;: { &#34;sound&#34;: &#34;off&#34; }, &#34;accessibility.signals.clear&#34;: { &#34;sound&#34;: &#34;off&#34;, &#34;announcement&#34;: &#34;off&#34; }, &#34;accessibility.signals.diffLineInserted&#34;: { &#34;sound&#34;: &#34;off&#34; }, JetBrains IDE\u7684\u914d\u7f6e\u65b9\u6cd5 1.\u4e0b\u8f7d\u63d2\u4ef6\u7684\u7248\u672c\u63d2\u4ef6\u7248\u672c 1.5.8.5775 GitHub Copilot Plugin 2.\u52a0\u5165\u8fd9\u4e2a\u914d\u7f6e cocopilot.org Settings -&gt; Languages &amp; Frameworks -&gt; GitHub Copilot -&gt; Authentication Provider: cocopilot.org\n3.\u4e0b\u8f7d\u8fd9\u4e2a\u4e24\u4e2a\u63d2\u4ef6 ja-netfilter plugin-env: goland.vmoptions \u8fd9\u91cc\u9ed8\u8ba4\u4f60\u4eec\u4f1a\u4e86\n1 -javaagent:\/Users\/ll\/ja-netfilter\/ja-netfilter.jar env.conf\n1 2 3 4 5 [ENV] PREFIX,AGENT_DEBUG_OVERRIDE_CAPI_URL=http:\/\/127.0.0.1:8181\/v1 PREFIX,AGENT_DEBUG_OVERRIDE_PROXY_URL=http:\/\/127.0.0.1:8181 PREFIX,GITHUB_COPILOT_OVERRIDE_CAPI_URL=http:\/\/127.0.0.1:8181\/v1 PREFIX,GITHUB_COPILOT_OVERRIDE_PROXY_URL=http:\/\/127.0.0.1:8181 4. \u767b\u5f55Copilot\u63d2\u4ef6\u9f50\u6d3b\u80fd\u7528\u4e86 ","permalink":"https:\/\/my.rongyiapi.com\/posts\/%E8%AE%A9copilot%E7%94%A8%E4%B8%8Adeepseek%E6%80%BB%E4%BA%8E%E6%90%9E%E6%98%8E%E7%99%BD%E4%BA%86vscode%E5%92%8Cjetbrainside%E9%83%BD%E8%83%BD%E7%94%A8\/","summary":"<h1 id=\"1\u4e0b\u8f7doverride\u9879\u76ee\">1.\u4e0b\u8f7doverride\u9879\u76ee<\/h1>\n<p><a href=\"https:\/\/github.com\/linux-do\/override\">linux-do\/override: \u5565\u4e5f\u4e0d\u662f (github.com)<\/a><\/p>\n<p>\u65b0\u5efa\u8fd9\u4e2a\u6587\u4ef6 config.conf<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a class=\"lnlinks\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a class=\"lnlinks\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a class=\"lnlinks\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a class=\"lnlinks\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a class=\"lnlinks\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a class=\"lnlinks\" href=\"#hl-0-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a class=\"lnlinks\" href=\"#hl-0-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-13\"><a class=\"lnlinks\" href=\"#hl-0-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-14\"><a class=\"lnlinks\" href=\"#hl-0-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-15\"><a class=\"lnlinks\" href=\"#hl-0-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-16\"><a class=\"lnlinks\" href=\"#hl-0-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-17\"><a class=\"lnlinks\" href=\"#hl-0-17\">17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-18\"><a class=\"lnlinks\" href=\"#hl-0-18\">18<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-19\"><a class=\"lnlinks\" href=\"#hl-0-19\">19<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-20\"><a class=\"lnlinks\" href=\"#hl-0-20\">20<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-21\"><a class=\"lnlinks\" href=\"#hl-0-21\">21<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">{\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;bind&#34;: &#34;0.0.0.0:8181&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;proxy_url&#34;: &#34;&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;timeout&#34;: 600,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;codex_api_base&#34;: &#34;https:\/\/api.deepseek.com\/beta\/v1&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;codex_api_key&#34;: &#34;sk-&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;codex_api_organization&#34;: &#34;&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;codex_api_project&#34;: &#34;&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;codex_max_tokens&#34;: 500,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;code_instruct_model&#34;: &#34;deepseek-coder&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;chat_api_base&#34;: &#34;https:\/\/api.deepseek.com\/v1&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;chat_api_key&#34;: &#34;sk-&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;chat_api_organization&#34;: &#34;&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;chat_api_project&#34;: &#34;&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;chat_max_tokens&#34;: 4096,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;chat_model_default&#34;: &#34;deepseek-chat&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;chat_model_map&#34;: {\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  },\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;chat_locale&#34;: &#34;zh_CN&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  &#34;auth_token&#34;: &#34;&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">}\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u8fd0\u884c <code>docker-compose up -d<\/code>\n\u8bbf\u95ee <code>http:\/\/127.0.0.1:8181<\/code> \u8fd9\u4e2a\u670d\u52a1\u5c31\u90e8\u7f72\u6210\u529f\u4e86<\/p>","title":"\u8ba9Copilot\u7528\u4e0aDeepSeek\u603b\u4e8e\u641e\u660e\u767d\u4e86vscode\u548cJetBrainsIDE\u90fd\u80fd\u7528"},{"content":"streamlit \u7684cookie\u5e93\u633a\u5751\u7684 \u8fd9\u91cc\u6211\u91cd\u65b0\u5199\u4e86\u4e00\u4efd\u80fd\u7528\u7684 streamlit \u767b\u5f55\u540e\u4fdd\u6301\u767b\u5f55\u72b6\u6001\u7684\u4e8b\u4f8b\nst_local_storage.py\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 # NOTE: This feature uses browser local storage! AKA it stores data on a viewer&#39;s # machine. This may have privacy and compliance implications for your app. Be sure # to take that into account with any usage. import json from typing import Any import uuid import streamlit as st # Requires `pip install streamlit-js` # https:\/\/github.com\/toolittlecakes\/streamlit_js from streamlit_js import st_js KEY_PREFIX = &#34;st_localstorage_&#34; class StLocalStorage: &#34;&#34;&#34;An Dict-like wrapper around browser local storage. Values are stored JSON encoded.&#34;&#34;&#34; def __init__(self): # Keep track of a UUID for each key to enable reruns if &#34;_ls_unique_keys&#34; not in st.session_state: st.session_state[&#34;_ls_unique_keys&#34;] = {} # Hide the JS iframes self._container = st.container() with self._container: st.html(&#34;&#34;&#34; &lt;style&gt; .element-container:has(iframe[height=&#34;0&#34;]) { display: none; } &lt;\/style&gt; &#34;&#34;&#34;) def __getitem__(self, key: str) -&gt; Any: if key not in st.session_state[&#34;_ls_unique_keys&#34;]: st.session_state[&#34;_ls_unique_keys&#34;][key] = str(uuid.uuid4()) code = f&#34;&#34;&#34; \/\/ The UUID changes on save, which causes this to rerun and update console.debug(&#39;{st.session_state[&#34;_ls_unique_keys&#34;][key]}&#39;); return JSON.parse(localStorage.getItem(&#39;{KEY_PREFIX + key}&#39;)); &#34;&#34;&#34; with self._container: result = st_js(code, key=st.session_state[&#34;_ls_unique_keys&#34;][key]) if result and result[0]: return json.loads(result[0]) return None def __setitem__(self, key: str, value: Any) -&gt; None: value = json.dumps(value, ensure_ascii=False) st.session_state[&#34;_ls_unique_keys&#34;][key] = str(uuid.uuid4()) code = f&#34;&#34;&#34; console.debug(&#39;setting {key} to local storage&#39;); localStorage.setItem(&#39;{KEY_PREFIX + key}&#39;, JSON.stringify(&#39;{value}&#39;)); &#34;&#34;&#34; with self._container: return st_js(code, key=st.session_state[&#34;_ls_unique_keys&#34;][key] + &#34;_set&#34;) def __delitem__(self, key: str) -&gt; None: st.session_state[&#34;_ls_unique_keys&#34;][key] = str(uuid.uuid4()) code = f&#34;localStorage.removeItem(&#39;{KEY_PREFIX + key}&#39;);&#34; with self._container: return st_js(code, key=st.session_state[&#34;_ls_unique_keys&#34;][key] + &#34;_del&#34;) def __contains__(self, key: str) -&gt; bool: return self.__getitem__(key) is not None def get(self, key: str) -&gt; Any: try: return self.__getitem__(key) except: return None def set(self, key: str, value: Any) -&gt; None: try: self.__setitem__(key, value) except: return None login.py\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import streamlit as st import st_local_storage st_ls = st_local_storage.StLocalStorage() login = st_ls.get(&#39;login&#39;) if login: st.markdown(f&#34;### \u6b22\u8fce\u56de\u6765, **{login}**&#34;) if st.button(&#34;\u9000\u51fa\u767b\u5f55&#34;): st_ls[&#39;login&#39;] = None else: st.markdown(&#34;## \u7528\u6237\u767b\u5f55&#34;) username = st.text_input(&#34;\u7528\u6237\u540d&#34;, max_chars=30, placeholder=&#34;\u8f93\u5165\u7528\u6237\u540d&#34;) password = st.text_input(&#34;\u5bc6\u7801&#34;, type=&#34;password&#34;, max_chars=30, placeholder=&#34;\u8f93\u5165\u5bc6\u7801&#34;) if st.button(&#34;\u767b\u5f55&#34;): if username == &#39;admin&#39; and password == &#39;admin&#39;: st_ls.set(&#39;login&#39;, username) st.success(&#34;\u767b\u5f55\u6210\u529f\uff01\u6b63\u5728\u8df3\u8f6c...&#34;) else: st.error(&#34;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#34;) \u8fd0\u884c\n1 streamlit run login.py ","permalink":"https:\/\/my.rongyiapi.com\/posts\/streamlit-%E7%AE%80%E5%8D%95%E7%9A%84%E7%99%BB%E5%BD%95%E4%BA%8B%E4%BE%8B\/","summary":"<p>streamlit \u7684cookie\u5e93\u633a\u5751\u7684 \u8fd9\u91cc\u6211\u91cd\u65b0\u5199\u4e86\u4e00\u4efd\u80fd\u7528\u7684 streamlit \u767b\u5f55\u540e\u4fdd\u6301\u767b\u5f55\u72b6\u6001\u7684\u4e8b\u4f8b<\/p>\n<p><code>st_local_storage.py<\/code><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a class=\"lnlinks\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a class=\"lnlinks\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a class=\"lnlinks\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a class=\"lnlinks\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a class=\"lnlinks\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a class=\"lnlinks\" href=\"#hl-0-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a class=\"lnlinks\" href=\"#hl-0-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-13\"><a class=\"lnlinks\" href=\"#hl-0-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-14\"><a class=\"lnlinks\" href=\"#hl-0-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-15\"><a class=\"lnlinks\" href=\"#hl-0-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-16\"><a class=\"lnlinks\" href=\"#hl-0-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-17\"><a class=\"lnlinks\" href=\"#hl-0-17\">17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-18\"><a class=\"lnlinks\" href=\"#hl-0-18\">18<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-19\"><a class=\"lnlinks\" href=\"#hl-0-19\">19<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-20\"><a class=\"lnlinks\" href=\"#hl-0-20\">20<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-21\"><a class=\"lnlinks\" href=\"#hl-0-21\">21<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-22\"><a class=\"lnlinks\" href=\"#hl-0-22\">22<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-23\"><a class=\"lnlinks\" href=\"#hl-0-23\">23<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-24\"><a class=\"lnlinks\" href=\"#hl-0-24\">24<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-25\"><a class=\"lnlinks\" href=\"#hl-0-25\">25<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-26\"><a class=\"lnlinks\" href=\"#hl-0-26\">26<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-27\"><a class=\"lnlinks\" href=\"#hl-0-27\">27<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-28\"><a class=\"lnlinks\" href=\"#hl-0-28\">28<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-29\"><a class=\"lnlinks\" href=\"#hl-0-29\">29<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-30\"><a class=\"lnlinks\" href=\"#hl-0-30\">30<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-31\"><a class=\"lnlinks\" href=\"#hl-0-31\">31<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-32\"><a class=\"lnlinks\" href=\"#hl-0-32\">32<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-33\"><a class=\"lnlinks\" href=\"#hl-0-33\">33<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-34\"><a class=\"lnlinks\" href=\"#hl-0-34\">34<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-35\"><a class=\"lnlinks\" href=\"#hl-0-35\">35<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-36\"><a class=\"lnlinks\" href=\"#hl-0-36\">36<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-37\"><a class=\"lnlinks\" href=\"#hl-0-37\">37<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-38\"><a class=\"lnlinks\" href=\"#hl-0-38\">38<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-39\"><a class=\"lnlinks\" href=\"#hl-0-39\">39<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-40\"><a class=\"lnlinks\" href=\"#hl-0-40\">40<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-41\"><a class=\"lnlinks\" href=\"#hl-0-41\">41<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-42\"><a class=\"lnlinks\" href=\"#hl-0-42\">42<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-43\"><a class=\"lnlinks\" href=\"#hl-0-43\">43<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-44\"><a class=\"lnlinks\" href=\"#hl-0-44\">44<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-45\"><a class=\"lnlinks\" href=\"#hl-0-45\">45<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-46\"><a class=\"lnlinks\" href=\"#hl-0-46\">46<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-47\"><a class=\"lnlinks\" href=\"#hl-0-47\">47<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-48\"><a class=\"lnlinks\" href=\"#hl-0-48\">48<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-49\"><a class=\"lnlinks\" href=\"#hl-0-49\">49<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-50\"><a class=\"lnlinks\" href=\"#hl-0-50\">50<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-51\"><a class=\"lnlinks\" href=\"#hl-0-51\">51<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-52\"><a class=\"lnlinks\" href=\"#hl-0-52\">52<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-53\"><a class=\"lnlinks\" href=\"#hl-0-53\">53<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-54\"><a class=\"lnlinks\" href=\"#hl-0-54\">54<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-55\"><a class=\"lnlinks\" href=\"#hl-0-55\">55<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-56\"><a class=\"lnlinks\" href=\"#hl-0-56\">56<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-57\"><a class=\"lnlinks\" href=\"#hl-0-57\">57<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-58\"><a class=\"lnlinks\" href=\"#hl-0-58\">58<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-59\"><a class=\"lnlinks\" href=\"#hl-0-59\">59<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-60\"><a class=\"lnlinks\" href=\"#hl-0-60\">60<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-61\"><a class=\"lnlinks\" href=\"#hl-0-61\">61<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-62\"><a class=\"lnlinks\" href=\"#hl-0-62\">62<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-63\"><a class=\"lnlinks\" href=\"#hl-0-63\">63<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-64\"><a class=\"lnlinks\" href=\"#hl-0-64\">64<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-65\"><a class=\"lnlinks\" href=\"#hl-0-65\">65<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-66\"><a class=\"lnlinks\" href=\"#hl-0-66\">66<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-67\"><a class=\"lnlinks\" href=\"#hl-0-67\">67<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-68\"><a class=\"lnlinks\" href=\"#hl-0-68\">68<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-69\"><a class=\"lnlinks\" href=\"#hl-0-69\">69<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-70\"><a class=\"lnlinks\" href=\"#hl-0-70\">70<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-71\"><a class=\"lnlinks\" href=\"#hl-0-71\">71<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-72\"><a class=\"lnlinks\" href=\"#hl-0-72\">72<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-73\"><a class=\"lnlinks\" href=\"#hl-0-73\">73<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-74\"><a class=\"lnlinks\" href=\"#hl-0-74\">74<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-75\"><a class=\"lnlinks\" href=\"#hl-0-75\">75<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-76\"><a class=\"lnlinks\" href=\"#hl-0-76\">76<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-77\"><a class=\"lnlinks\" href=\"#hl-0-77\">77<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-78\"><a class=\"lnlinks\" href=\"#hl-0-78\">78<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-79\"><a class=\"lnlinks\" href=\"#hl-0-79\">79<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-80\"><a class=\"lnlinks\" href=\"#hl-0-80\">80<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-81\"><a class=\"lnlinks\" href=\"#hl-0-81\">81<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-gdscript3\" data-lang=\"gdscript3\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># NOTE: This feature uses browser local storage! AKA it stores data on a viewer&#39;s<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># machine. This may have privacy and compliance implications for your app. Be sure<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># to take that into account with any usage.<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">import<\/span> <span class=\"n\">json<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">from<\/span> <span class=\"n\">typing<\/span> <span class=\"n\">import<\/span> <span class=\"n\">Any<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">import<\/span> <span class=\"n\">uuid<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">import<\/span> <span class=\"n\">streamlit<\/span> <span class=\"n\">as<\/span> <span class=\"n\">st<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># Requires `pip install streamlit-js`<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># https:\/\/github.com\/toolittlecakes\/streamlit_js<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">from<\/span> <span class=\"n\">streamlit_js<\/span> <span class=\"n\">import<\/span> <span class=\"n\">st_js<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">KEY_PREFIX<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;st_localstorage_&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">class<\/span> <span class=\"n\">StLocalStorage<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s2\">&#34;&#34;&#34;An Dict-like wrapper around browser local storage.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">    Values are stored JSON encoded.&#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">def<\/span> <span class=\"nf\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"c1\"># Keep track of a UUID for each key to enable reruns<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"s2\">&#34;_ls_unique_keys&#34;<\/span> <span class=\"ow\">not<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">st<\/span><span class=\"o\">.<\/span><span class=\"n\">session_state<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">st<\/span><span class=\"o\">.<\/span><span class=\"n\">session_state<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;_ls_unique_keys&#34;<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"c1\"># Hide the JS iframes<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">_container<\/span> <span class=\"o\">=<\/span> <span class=\"n\">st<\/span><span class=\"o\">.<\/span><span class=\"n\">container<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">with<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">_container<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">st<\/span><span class=\"o\">.<\/span><span class=\"n\">html<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;&#34;&#34; \n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">                &lt;style&gt;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">                    .element-container:has(iframe[height=&#34;0&#34;]) {\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">                        display: none;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">                    }\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">                &lt;\/style&gt;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">            &#34;&#34;&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">def<\/span> <span class=\"nf\">__getitem__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"n\">Any<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"n\">key<\/span> <span class=\"ow\">not<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">st<\/span><span class=\"o\">.<\/span><span class=\"n\">session_state<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;_ls_unique_keys&#34;<\/span><span class=\"p\">]:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">st<\/span><span class=\"o\">.<\/span><span class=\"n\">session_state<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;_ls_unique_keys&#34;<\/span><span class=\"p\">][<\/span><span class=\"n\">key<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">str<\/span><span class=\"p\">(<\/span><span class=\"n\">uuid<\/span><span class=\"o\">.<\/span><span class=\"n\">uuid4<\/span><span class=\"p\">())<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">code<\/span> <span class=\"o\">=<\/span> <span class=\"n\">f<\/span><span class=\"s2\">&#34;&#34;&#34;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">        \/\/ The UUID changes on save, which causes this to rerun and update\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">        console.debug(&#39;{st.session_state[&#34;_ls_unique_keys&#34;][key]}&#39;);\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">        return JSON.parse(localStorage.getItem(&#39;{KEY_PREFIX + key}&#39;));\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">        &#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">with<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">_container<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">result<\/span> <span class=\"o\">=<\/span> <span class=\"n\">st_js<\/span><span class=\"p\">(<\/span><span class=\"n\">code<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"o\">=<\/span><span class=\"n\">st<\/span><span class=\"o\">.<\/span><span class=\"n\">session_state<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;_ls_unique_keys&#34;<\/span><span class=\"p\">][<\/span><span class=\"n\">key<\/span><span class=\"p\">])<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"n\">result<\/span> <span class=\"ow\">and<\/span> <span class=\"n\">result<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">return<\/span> <span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">loads<\/span><span class=\"p\">(<\/span><span class=\"n\">result<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">])<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"n\">None<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">def<\/span> <span class=\"nf\">__setitem__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">value<\/span><span class=\"p\">:<\/span> <span class=\"n\">Any<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"n\">None<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">value<\/span> <span class=\"o\">=<\/span> <span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">dumps<\/span><span class=\"p\">(<\/span><span class=\"n\">value<\/span><span class=\"p\">,<\/span> <span class=\"n\">ensure_ascii<\/span><span class=\"o\">=<\/span><span class=\"n\">False<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">st<\/span><span class=\"o\">.<\/span><span class=\"n\">session_state<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;_ls_unique_keys&#34;<\/span><span class=\"p\">][<\/span><span class=\"n\">key<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">str<\/span><span class=\"p\">(<\/span><span class=\"n\">uuid<\/span><span class=\"o\">.<\/span><span class=\"n\">uuid4<\/span><span class=\"p\">())<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">code<\/span> <span class=\"o\">=<\/span> <span class=\"n\">f<\/span><span class=\"s2\">&#34;&#34;&#34;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">        console.debug(&#39;setting {key} to local storage&#39;);\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">        localStorage.setItem(&#39;{KEY_PREFIX + key}&#39;, JSON.stringify(&#39;{value}&#39;));\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">        &#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">with<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">_container<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">return<\/span> <span class=\"n\">st_js<\/span><span class=\"p\">(<\/span><span class=\"n\">code<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"o\">=<\/span><span class=\"n\">st<\/span><span class=\"o\">.<\/span><span class=\"n\">session_state<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;_ls_unique_keys&#34;<\/span><span class=\"p\">][<\/span><span class=\"n\">key<\/span><span class=\"p\">]<\/span> <span class=\"o\">+<\/span> <span class=\"s2\">&#34;_set&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">def<\/span> <span class=\"nf\">__delitem__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"n\">None<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">st<\/span><span class=\"o\">.<\/span><span class=\"n\">session_state<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;_ls_unique_keys&#34;<\/span><span class=\"p\">][<\/span><span class=\"n\">key<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">str<\/span><span class=\"p\">(<\/span><span class=\"n\">uuid<\/span><span class=\"o\">.<\/span><span class=\"n\">uuid4<\/span><span class=\"p\">())<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">code<\/span> <span class=\"o\">=<\/span> <span class=\"n\">f<\/span><span class=\"s2\">&#34;localStorage.removeItem(&#39;{KEY_PREFIX + key}&#39;);&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">with<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">_container<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">return<\/span> <span class=\"n\">st_js<\/span><span class=\"p\">(<\/span><span class=\"n\">code<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"o\">=<\/span><span class=\"n\">st<\/span><span class=\"o\">.<\/span><span class=\"n\">session_state<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;_ls_unique_keys&#34;<\/span><span class=\"p\">][<\/span><span class=\"n\">key<\/span><span class=\"p\">]<\/span> <span class=\"o\">+<\/span> <span class=\"s2\">&#34;_del&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">def<\/span> <span class=\"nf\">__contains__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"ne\">bool<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">__getitem__<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">)<\/span> <span class=\"n\">is<\/span> <span class=\"ow\">not<\/span> <span class=\"n\">None<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">def<\/span> <span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"n\">Any<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">try<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">return<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">__getitem__<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">except<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">return<\/span> <span class=\"n\">None<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">def<\/span> <span class=\"nf\">set<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span> <span class=\"n\">value<\/span><span class=\"p\">:<\/span> <span class=\"n\">Any<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"n\">None<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">try<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">__setitem__<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">value<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">except<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">return<\/span> <span class=\"n\">None<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><code>login.py<\/code><\/p>","title":"streamlit \u7b80\u5355\u7684\u767b\u5f55\u4e8b\u4f8b"}]