From 4c1775ce99bbfeb785c0c909b7bf3291f87b2d91 Mon Sep 17 00:00:00 2001 From: alexliyu7352 Date: Sat, 9 Dec 2023 19:21:25 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20ZLMediaK?= =?UTF-8?q?it/docs@69418df33b24c3b306a875c146b78d79e7b18143=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 8 +- ....html-xdICDk2y.js => 404.html-GPYBV8Ha.js} | 2 +- assets/app-BrxqtzGY.js | 14 --- assets/app-oTlYPy8h.js | 14 +++ assets/{arc-kFrifBKJ.js => arc-upp1iHW0.js} | 2 +- ...98ulTadG.js => benchmark.html-PVLgEM3u.js} | 2 +- ...Nx9hqFos.js => benchmark.html-vh5mU2vV.js} | 2 +- ...WAvg.js => c4Diagram-817c8e44-EI6Ep_s6.js} | 2 +- ...u.js => classDiagram-48ab76fb-YrjwxOfN.js} | 2 +- ...s => classDiagram-v2-8ecb0bfc-uyvLMQh4.js} | 2 +- ...> collaborative_projects.html-19-TEwrL.js} | 2 +- ...> collaborative_projects.html-UkPV-L0J.js} | 2 +- ...ions_for_windows_version.html-coo8ZcK6.js} | 2 +- ...ions_for_windows_version.html-d1DmfQc5.js} | 2 +- ...M3m-gp.js => config_file.html-54NJpUMh.js} | 2 +- ...f41F3S.js => config_file.html-v84_YU9d.js} | 2 +- ...l-inPGOeaD.js => contact.html-JAOAqjBA.js} | 2 +- ...l-F5mmsRL_.js => contact.html-xnD8I3Nc.js} | 2 +- ...Vy1.js => createText-aebacdfe-8FzA6VnR.js} | 2 +- ...DGSxDiR.js => delay_test.html-QwzTearq.js} | 2 +- ...tF1gV92.js => delay_test.html-jKr5-1Rj.js} | 2 +- ...Jgf-XNv.js => dependency.html-IB8qgUUu.js} | 2 +- ...ty2X7tk.js => dependency.html-gwWfr65O.js} | 2 +- ...-gcvlmof.js => edges-80f1ebb6-kOLp6foW.js} | 2 +- ...LrXp.js => erDiagram-9cfc3649-wxfL-kce.js} | 2 +- ...js => exclusive_features.html-dQadFX3J.js} | 2 +- ...js => exclusive_features.html-t4K_S5d4.js} | 2 +- ...-5Qwvam.js => flowDb-170db09d-41y1nEiW.js} | 2 +- ...PW.js => flowDiagram-61eb444c-DuMoGt9F.js} | 2 +- assets/flowDiagram-v2-2f8f667a-Ob2Hpvk_.js | 1 + assets/flowDiagram-v2-2f8f667a-kIE4L_ig.js | 1 - ...chart-elk-definition-e097735e-Zb7AIGeW.js} | 2 +- ...4.js => ganttDiagram-db6931fb-MZTKg1_s.js} | 2 +- ...signaling_packet_capture.html-ZYkWywxi.js} | 2 +- ...signaling_packet_capture.html-z_vnDm71.js} | 2 +- ...ned_certificate_and_test.html-MI1uDkfZ.js} | 2 +- ...ned_certificate_and_test.html-tLIkOOZS.js} | 2 +- ...s => gitGraphDiagram-6b463803-leFcDYEm.js} | 2 +- ...implementation_principle.html-FgHSxlv4.js} | 2 +- ...implementation_principle.html-x1-J41yC.js} | 2 +- ...high_performance_journey.html-pNH0gpXw.js} | 2 +- ...high_performance_journey.html-v74JJlub.js} | 2 +- ...w_to_create_a_live_steam.html-LWbU8h87.js} | 2 +- ...w_to_create_a_live_steam.html-Q-m7tYG5.js} | 2 +- ..._https_related_functions.html-Dxu_FBYc.js} | 2 +- ..._https_related_functions.html-pBy5oO-R.js} | 2 +- ....js => how_to_test_delay.html-GLErIksL.js} | 2 +- ....js => how_to_test_delay.html-P7CoGGgx.js} | 2 +- ...e_device_id_as_stream_id.html-r5nxplI0.js} | 2 +- ...e_device_id_as_stream_id.html-yxD34jok.js} | 2 +- ...p9ZYh1Xw.js => index-67a42d7d-TJSwJJ1D.js} | 2 +- ...tml-AN1YzPhl.js => index.html-0qJyAU8Q.js} | 2 +- ...tml-AQj9nIQS.js => index.html-1UKx3tTB.js} | 2 +- ...tml-GYAMrXS-.js => index.html-2LWO62N7.js} | 2 +- ...tml-GpIlvQXn.js => index.html-35KxtpZI.js} | 2 +- assets/index.html-4MOf5u_i.js | 1 + assets/index.html-4w7NJvOq.js | 72 ++++++++++++ assets/index.html-6AFjdEoA.js | 1 + assets/index.html-8kcJLd-q.js | 1 + assets/index.html-9fZsvbS8.js | 1 + assets/index.html-AIAMrVKp.js | 1 + ...tml-puiRG_tj.js => index.html-B81jBW2G.js} | 2 +- assets/index.html-BIyNRXIT.js | 57 --------- assets/index.html-CKp0mPwh.js | 1 + ...tml-lsbyji4m.js => index.html-CSg2VFea.js} | 2 +- assets/index.html-CmVSRxAE.js | 1 + assets/index.html-D9OOw5jZ.js | 1 + assets/index.html-EkebsPUs.js | 62 ---------- assets/index.html-GEt_McOE.js | 1 - assets/index.html-H5ajPWzC.js | 1 - assets/index.html-HffK__w0.js | 1 - assets/index.html-HiksATK8.js | 1 - assets/index.html-HppSEYlS.js | 1 + assets/index.html-HxIzy8B_.js | 1 - ...tml-c9Q-kbo9.js => index.html-IZsaCX79.js} | 2 +- assets/index.html-JQu_RH6f.js | 1 + assets/index.html-LudGOU3A.js | 1 + assets/index.html-MCTXxKe2.js | 1 - assets/index.html-NvUp90i0.js | 1 - assets/index.html-P9T-kKXm.js | 1 - assets/index.html-PiOevGXi.js | 1 - assets/index.html-Q_J0RuMe.js | 1 - assets/index.html-QkbwDjsA.js | 1 + assets/index.html-UtNsP0-c.js | 71 ++++++++++++ assets/index.html-Wn9fL8rF.js | 1 + ...tml-QZwQ-TVg.js => index.html-XHP9LdII.js} | 2 +- assets/index.html-ZukUTvpe.js | 1 + assets/index.html-_oz2t3vB.js | 1 - assets/index.html-aTnTwBPS.js | 1 + assets/index.html-c5y0hsti.js | 1 - assets/index.html-c5z6Iek2.js | 1 + assets/index.html-c9EfxXZy.js | 1 + ...tml-1gY9nmEU.js => index.html-ckFP_gFB.js} | 2 +- assets/index.html-ea4s8txi.js | 1 + assets/index.html-gHhFwdGj.js | 1 - assets/index.html-hD6JZq1M.js | 1 + assets/index.html-l07G40eV.js | 1 - ...tml-nYslRDbi.js => index.html-lGRuHLpD.js} | 2 +- ...tml-jQOvySfo.js => index.html-lKh2cFAq.js} | 2 +- assets/index.html-mmNwkX1L.js | 1 - assets/index.html-ocl34mDF.js | 1 + assets/index.html-pPTmba-N.js | 1 - assets/index.html-plxXlLQP.js | 1 + assets/index.html-q-mTP89g.js | 1 - assets/index.html-qTt3LMQa.js | 1 - assets/index.html-sVMJ39Ap.js | 1 - assets/index.html-sZlBS23H.js | 1 - ...tml-wOzz5n--.js => index.html-vbFGRJHC.js} | 2 +- assets/index.html-w2bXuDTO.js | 1 - assets/index.html-wRo-8kqz.js | 1 - assets/index.html-wqut89jq.js | 1 - assets/index.html-y8X0hE31.js | 1 - assets/index.html-ybOFrWXT.js | 1 + assets/index.html-ysHWzV3Z.js | 1 + assets/index.html-zeRiEjXy.js | 1 + ...NI.js => infoDiagram-a336098b-7atRS8Yv.js} | 2 +- ...ll_zlmediakit_using_vcpkg.html-4lMDCmIH.js | 1 - ...l_zlmediakit_using_vcpkg.html-NCcA9KPG.js} | 2 +- ...ll_zlmediakit_using_vcpkg.html-_H3jokEy.js | 1 + ...l_zlmediakit_using_vcpkg.html-ii7HljTN.js} | 6 +- ...dia_related_technologies.html-aLJXiBgK.js} | 2 +- ...dia_related_technologies.html-qLQLZbA3.js} | 2 +- ...js => journeyDiagram-deae3313-JgGAP5aa.js} | 2 +- ...{layout-1ugHHiNm.js => layout-Vth69vlg.js} | 2 +- ...l-RX6EoCn0.js => license.html-kMl7iYce.js} | 2 +- ...l-UJLTmREW.js => license.html-vCBKTTMs.js} | 2 +- assets/{line-TqRW8de4.js => line-ZVNdUhg2.js} | 2 +- ...{linear-KPN1H-BK.js => linear-JH76Qt4f.js} | 2 +- ...e-zy7cM8l9.js => mermaid.core-QJnSHCal.js} | 8 +- ...> mindmap-definition-617cf8dd-gkffgRdL.js} | 2 +- ...js => not_recommended_qq.html-CiG918se.js} | 2 +- ...js => not_recommended_qq.html-Y9F7iYsf.js} | 2 +- ...on-demand_push_streaming.html-AlawaJGx.js} | 2 +- ...on-demand_push_streaming.html-efCX-3qM.js} | 2 +- ...s => on-demand_streaming.html-6YNYtYZR.js} | 2 +- ...s => on-demand_streaming.html-yNrWu3de.js} | 2 +- ...0LGtefKi.js => oncetoken.html-87LqB-OG.js} | 2 +- ...MCJaY58Y.js => oncetoken.html-VjVkUYP3.js} | 2 +- ...vGk4Ng.js => online_test.html-UiWsenDR.js} | 2 +- ...BFI_bL.js => online_test.html-_0lwAxTN.js} | 2 +- ...s => performance_testing.html-Cgq3dIgv.js} | 2 +- ...s => performance_testing.html-mjt6ZXJJ.js} | 2 +- ...cnm.js => pieDiagram-a5166659-9IukIHDQ.js} | 2 +- ...lze.js => play_url_rules.html-OaEuncfX.js} | 2 +- ...IjW.js => play_url_rules.html-f7mxplY_.js} | 2 +- ... playback_authentication.html-3VR0HbK8.js} | 2 +- ... playback_authentication.html-4kXdTj5T.js} | 2 +- ...s => push_authentication.html-8OJ18L-5.js} | 2 +- ...s => push_authentication.html-Ov0yMs1o.js} | 2 +- ...RSs.js => push_streaming.html-VOPU_Vgm.js} | 2 +- ...ppH.js => push_streaming.html-o6HXGEGb.js} | 2 +- ...HAP8YKRj.js => push_test.html-44HoghM7.js} | 2 +- ...MSIBzphj.js => push_test.html-zDMue1Qy.js} | 2 +- ...s => quadrantDiagram-6c355bbc-mORRzAzd.js} | 2 +- ...> requirementDiagram-4038b16c-HXR1kktq.js} | 2 +- ...LlZzjg.js => restful_api.html-INg-XF77.js} | 2 +- ...dVK-2T.js => restful_api.html-W3f4X4lL.js} | 2 +- ...ack_compatibility_issues.html-iFgHmMMS.js} | 2 +- ...ack_compatibility_issues.html-wBkT5hGE.js} | 2 +- ..._stream_performance_test.html-hMTKB3GA.js} | 2 +- ..._stream_performance_test.html-ukcH42DI.js} | 2 +- ..._stream_performance_test.html-4ywCdN8c.js} | 2 +- ..._stream_performance_test.html-LfVKdEym.js} | 2 +- ...upport_for_h265_and_opus.html-IiMCf774.js} | 2 +- ...upport_for_h265_and_opus.html-UXqjeTtH.js} | 2 +- ...performance_optimization.html-TWn6Egp8.js} | 2 +- ...performance_optimization.html-TdeED4XC.js} | 2 +- ..._stream_performance_test.html-KdEDWBLu.js} | 2 +- ..._stream_performance_test.html-cK-OpNrS.js} | 2 +- ....js => rtsp_push_process.html-gk6hQwdn.js} | 2 +- ....js => rtsp_push_process.html-zH-D_jAF.js} | 2 +- ..._stream_performance_test.html-RMobzxOL.js} | 2 +- ..._stream_performance_test.html-zFl0_4_8.js} | 2 +- ....js => sankeyDiagram-6db3d513-FtDAma5v.js} | 2 +- ...s => sequenceDiagram-465a088a-x_ttBttK.js} | 2 +- ...k.js => sequence_diagram.html-FlbOL2Y8.js} | 2 +- ...B.js => sequence_diagram.html-SYfON6Mt.js} | 2 +- ...tml-uDyezAWa.js => start.html-KblEw28K.js} | 2 +- ...tml-6kI24E98.js => start.html-T6-Hncwi.js} | 2 +- ...uSTqV.js => start_server.html-kjQal3He.js} | 2 +- ...CtjYj.js => start_server.html-yxCpNJvw.js} | 2 +- ...D.js => stateDiagram-b620d43f-n-a3FIBU.js} | 2 +- ...s => stateDiagram-v2-2671c3d1-1xa5Hugt.js} | 2 +- assets/style-Tj0-KenM.css | 1 - assets/style-XrnrrA7w.css | 1 + ...TbB9pbZ.js => styles-4ba6ed67-qSs9rwsT.js} | 2 +- ...6tCXVxS.js => styles-b966c4ae-B_U_A2hx.js} | 2 +- ...cn30Fs-.js => styles-bbc3fe3b-H5-300oD.js} | 2 +- ....js => svgDrawCommon-ad5ef572-WW-Kq4zg.js} | 2 +- ...ml-F1DFxuQI.js => thanks.html-7ORVp6Jc.js} | 2 +- ...ml-uU2jemjd.js => thanks.html-bZ4iyCmp.js} | 2 +- ..._of_live_broadcast_delay.html-9a3MrQ9p.js} | 2 +- ..._of_live_broadcast_delay.html-wpUMkFJz.js} | 2 +- ... timeline-definition-732a2638-sTxw8mS_.js} | 2 +- ...lHSo0w28.js => use_cases.html-Ga8uwVa2.js} | 2 +- ...NGOdBBIO.js => use_cases.html-Ztr99Hiu.js} | 2 +- ...encing_related_resources.html-U1qNLSQN.js} | 2 +- ...encing_related_resources.html-cJ9at7Xc.js} | 2 +- ...36REX.js => web_hook_api.html-OmnDRkZ1.js} | 2 +- ...LUNuG.js => web_hook_api.html-QYXcFVoT.js} | 2 +- ...ebrtc_compilation_and_use.html-Ck_2B7eV.js | 1 + ...brtc_compilation_and_use.html-EzMJU7Jv.js} | 2 +- ...brtc_compilation_and_use.html-ZhDB0Qu6.js} | 2 +- ...ebrtc_compilation_and_use.html-zmvb9by4.js | 1 - ...aling_interaction_format.html-QJ72-nhn.js} | 2 +- ...aling_interaction_format.html-QfhUllLQ.js} | 2 +- ...js => xychartDiagram-f746c04c--73jsRcR.js} | 2 +- ..._source_code_study_notes.html-JWQ-N5Wz.js} | 2 +- ..._source_code_study_notes.html-ypL46AQc.js} | 2 +- guide/code/index.html | 6 +- guide/code/oncetoken.html | 6 +- guide/faq/index.html | 6 +- guide/faq/not_recommended_qq.html | 6 +- .../rtmp_playback_compatibility_issues.html | 6 +- guide/index.html | 6 +- ...tion_instructions_for_windows_version.html | 6 +- guide/install/index.html | 6 +- .../install_zlmediakit_using_vcpkg.html | 14 +-- guide/install/start.html | 6 +- guide/media_server/config_file.html | 6 +- ..._ssl_self-signed_certificate_and_test.html | 6 +- ...how_to_enable_https_related_functions.html | 6 +- guide/media_server/index.html | 6 +- .../on-demand_push_streaming.html | 6 +- guide/media_server/on-demand_streaming.html | 6 +- guide/media_server/play_url_rules.html | 6 +- .../media_server/playback_authentication.html | 6 +- guide/media_server/push_authentication.html | 6 +- guide/media_server/push_test.html | 6 +- guide/media_server/restful_api.html | 6 +- guide/media_server/sequence_diagram.html | 6 +- guide/media_server/start_server.html | 6 +- guide/media_server/web_hook_api.html | 6 +- .../gb28181_sip_signaling_packet_capture.html | 6 +- .../how_to_use_device_id_as_stream_id.html | 6 +- guide/protocol/gb28181/index.html | 6 +- guide/protocol/gb28181/push_streaming.html | 6 +- guide/protocol/index.html | 6 +- guide/protocol/srt/index.html | 6 +- guide/protocol/webrtc/index.html | 6 +- .../webrtc/webrtc_compilation_and_use.html | 6 +- .../webrtc_signaling_interaction_format.html | 6 +- guide/sdk/how_to_create_a_live_steam.html | 6 +- guide/sdk/index.html | 6 +- index.html | 6 +- more/collaborative_projects.html | 6 +- more/contact.html | 6 +- more/index.html | 6 +- more/license.html | 6 +- more/thanks.html | 6 +- more/use_cases.html | 6 +- .../hls_high_performance_journey.html | 6 +- reference/development_log/index.html | 6 +- .../rtsp_performance_optimization.html | 6 +- reference/documents/exclusive_features.html | 6 +- ..._concurrency_implementation_principle.html | 6 +- reference/documents/index.html | 6 +- ..._streaming_media_related_technologies.html | 6 +- reference/documents/rtsp_push_process.html | 6 +- .../the_nature_of_live_broadcast_delay.html | 6 +- reference/index.html | 6 +- reference/resources/dependency.html | 6 +- reference/resources/index.html | 6 +- .../rtmp_support_for_h265_and_opus.html | 6 +- .../video_conferencing_related_resources.html | 6 +- .../zltoolkit_source_code_study_notes.html | 6 +- reference/test/benchmark.html | 6 +- reference/test/delay_test.html | 6 +- reference/test/how_to_test_delay.html | 6 +- reference/test/index.html | 6 +- reference/test/online_test.html | 6 +- reference/test/performance_testing.html | 6 +- .../rtmp_pull_stream_performance_test.html | 6 +- .../rtmp_push_stream_performance_test.html | 6 +- .../rtsp_pull_stream_performance_test.html | 6 +- .../rtsp_push_stream_performance_test.html | 6 +- service-worker.js | 2 +- service-worker.js.map | 2 +- sitemap.xml | 2 +- tutorial/index.html | 96 +++++++++------- zh/guide/code/index.html | 6 +- zh/guide/code/oncetoken.html | 6 +- zh/guide/faq/index.html | 6 +- zh/guide/faq/not_recommended_qq.html | 6 +- .../rtmp_playback_compatibility_issues.html | 6 +- zh/guide/index.html | 6 +- ...tion_instructions_for_windows_version.html | 6 +- zh/guide/install/index.html | 6 +- .../install_zlmediakit_using_vcpkg.html | 6 +- zh/guide/install/start.html | 6 +- zh/guide/media_server/config_file.html | 6 +- ..._ssl_self-signed_certificate_and_test.html | 6 +- ...how_to_enable_https_related_functions.html | 6 +- zh/guide/media_server/index.html | 6 +- .../on-demand_push_streaming.html | 6 +- .../media_server/on-demand_streaming.html | 6 +- zh/guide/media_server/play_url_rules.html | 6 +- .../media_server/playback_authentication.html | 6 +- .../media_server/push_authentication.html | 6 +- zh/guide/media_server/push_test.html | 6 +- zh/guide/media_server/restful_api.html | 6 +- zh/guide/media_server/sequence_diagram.html | 6 +- zh/guide/media_server/start_server.html | 6 +- zh/guide/media_server/web_hook_api.html | 6 +- .../gb28181_sip_signaling_packet_capture.html | 6 +- .../how_to_use_device_id_as_stream_id.html | 6 +- zh/guide/protocol/gb28181/index.html | 6 +- zh/guide/protocol/gb28181/push_streaming.html | 6 +- zh/guide/protocol/index.html | 6 +- zh/guide/protocol/srt/index.html | 6 +- zh/guide/protocol/webrtc/index.html | 8 +- .../webrtc/webrtc_compilation_and_use.html | 12 +- .../webrtc_signaling_interaction_format.html | 10 +- zh/guide/sdk/how_to_create_a_live_steam.html | 6 +- zh/guide/sdk/index.html | 6 +- zh/index.html | 6 +- zh/more/collaborative_projects.html | 6 +- zh/more/contact.html | 6 +- zh/more/index.html | 6 +- zh/more/license.html | 6 +- zh/more/thanks.html | 6 +- zh/more/use_cases.html | 6 +- .../hls_high_performance_journey.html | 6 +- zh/reference/development_log/index.html | 6 +- .../rtsp_performance_optimization.html | 6 +- .../documents/exclusive_features.html | 6 +- ..._concurrency_implementation_principle.html | 6 +- zh/reference/documents/index.html | 6 +- ..._streaming_media_related_technologies.html | 6 +- zh/reference/documents/rtsp_push_process.html | 6 +- .../the_nature_of_live_broadcast_delay.html | 6 +- zh/reference/index.html | 6 +- zh/reference/resources/dependency.html | 6 +- zh/reference/resources/index.html | 6 +- .../rtmp_support_for_h265_and_opus.html | 6 +- .../video_conferencing_related_resources.html | 6 +- .../zltoolkit_source_code_study_notes.html | 6 +- zh/reference/test/benchmark.html | 6 +- zh/reference/test/delay_test.html | 6 +- zh/reference/test/how_to_test_delay.html | 6 +- zh/reference/test/index.html | 6 +- zh/reference/test/online_test.html | 6 +- zh/reference/test/performance_testing.html | 6 +- .../rtmp_pull_stream_performance_test.html | 6 +- .../rtmp_push_stream_performance_test.html | 6 +- .../rtsp_pull_stream_performance_test.html | 6 +- .../rtsp_push_stream_performance_test.html | 6 +- zh/tutorial/index.html | 108 ++++++++++-------- 348 files changed, 869 insertions(+), 821 deletions(-) rename assets/{404.html-xdICDk2y.js => 404.html-GPYBV8Ha.js} (71%) delete mode 100644 assets/app-BrxqtzGY.js create mode 100644 assets/app-oTlYPy8h.js rename assets/{arc-kFrifBKJ.js => arc-upp1iHW0.js} (96%) rename assets/{benchmark.html-98ulTadG.js => benchmark.html-PVLgEM3u.js} (98%) rename assets/{benchmark.html-Nx9hqFos.js => benchmark.html-vh5mU2vV.js} (98%) rename assets/{c4Diagram-817c8e44-BMi5WAvg.js => c4Diagram-817c8e44-EI6Ep_s6.js} (99%) rename assets/{classDiagram-48ab76fb-B-1nPr5u.js => classDiagram-48ab76fb-YrjwxOfN.js} (97%) rename assets/{classDiagram-v2-8ecb0bfc-6PoF2wPP.js => classDiagram-v2-8ecb0bfc-uyvLMQh4.js} (93%) rename assets/{collaborative_projects.html-pOhMHRMF.js => collaborative_projects.html-19-TEwrL.js} (98%) rename assets/{collaborative_projects.html-F54TwnSU.js => collaborative_projects.html-UkPV-L0J.js} (98%) rename assets/{compilation_instructions_for_windows_version.html-B01AYnQQ.js => compilation_instructions_for_windows_version.html-coo8ZcK6.js} (98%) rename assets/{compilation_instructions_for_windows_version.html-qtHU9-nX.js => compilation_instructions_for_windows_version.html-d1DmfQc5.js} (98%) rename assets/{config_file.html-nDM3m-gp.js => config_file.html-54NJpUMh.js} (99%) rename assets/{config_file.html-sJf41F3S.js => config_file.html-v84_YU9d.js} (81%) rename assets/{contact.html-inPGOeaD.js => contact.html-JAOAqjBA.js} (94%) rename assets/{contact.html-F5mmsRL_.js => contact.html-xnD8I3Nc.js} (95%) rename assets/{createText-aebacdfe-JILF3Vy1.js => createText-aebacdfe-8FzA6VnR.js} (99%) rename assets/{delay_test.html-ZDGSxDiR.js => delay_test.html-QwzTearq.js} (98%) rename assets/{delay_test.html-0tF1gV92.js => delay_test.html-jKr5-1Rj.js} (98%) rename assets/{dependency.html-bJgf-XNv.js => dependency.html-IB8qgUUu.js} (98%) rename assets/{dependency.html-mty2X7tk.js => dependency.html-gwWfr65O.js} (98%) rename assets/{edges-80f1ebb6--gcvlmof.js => edges-80f1ebb6-kOLp6foW.js} (99%) rename assets/{erDiagram-9cfc3649-Q00KLrXp.js => erDiagram-9cfc3649-wxfL-kce.js} (99%) rename assets/{exclusive_features.html-mvtkr6Zx.js => exclusive_features.html-dQadFX3J.js} (99%) rename assets/{exclusive_features.html-q7ecjqC1.js => exclusive_features.html-t4K_S5d4.js} (99%) rename assets/{flowDb-170db09d-q-5Qwvam.js => flowDb-170db09d-41y1nEiW.js} (99%) rename assets/{flowDiagram-61eb444c-niCbBEPW.js => flowDiagram-61eb444c-DuMoGt9F.js} (97%) create mode 100644 assets/flowDiagram-v2-2f8f667a-Ob2Hpvk_.js delete mode 100644 assets/flowDiagram-v2-2f8f667a-kIE4L_ig.js rename assets/{flowchart-elk-definition-e097735e-aDa6k5ld.js => flowchart-elk-definition-e097735e-Zb7AIGeW.js} (99%) rename assets/{ganttDiagram-db6931fb-XdIrq4o4.js => ganttDiagram-db6931fb-MZTKg1_s.js} (99%) rename assets/{gb28181_sip_signaling_packet_capture.html-P96Mkrz9.js => gb28181_sip_signaling_packet_capture.html-ZYkWywxi.js} (99%) rename assets/{gb28181_sip_signaling_packet_capture.html--EqBn8MM.js => gb28181_sip_signaling_packet_capture.html-z_vnDm71.js} (99%) rename assets/{generate_ssl_self-signed_certificate_and_test.html-KPuMmQeO.js => generate_ssl_self-signed_certificate_and_test.html-MI1uDkfZ.js} (99%) rename assets/{generate_ssl_self-signed_certificate_and_test.html-XP7q2oT5.js => generate_ssl_self-signed_certificate_and_test.html-tLIkOOZS.js} (98%) rename assets/{gitGraphDiagram-6b463803-EqEFWtIw.js => gitGraphDiagram-6b463803-leFcDYEm.js} (99%) rename assets/{high_concurrency_implementation_principle.html--R-GXKUV.js => high_concurrency_implementation_principle.html-FgHSxlv4.js} (99%) rename assets/{high_concurrency_implementation_principle.html-Bqhl-32O.js => high_concurrency_implementation_principle.html-x1-J41yC.js} (99%) rename assets/{hls_high_performance_journey.html-sIjCrFa8.js => hls_high_performance_journey.html-pNH0gpXw.js} (99%) rename assets/{hls_high_performance_journey.html-ePp6ZcY7.js => hls_high_performance_journey.html-v74JJlub.js} (99%) rename assets/{how_to_create_a_live_steam.html-ekbfwpTl.js => how_to_create_a_live_steam.html-LWbU8h87.js} (86%) rename assets/{how_to_create_a_live_steam.html-xouuZa47.js => how_to_create_a_live_steam.html-Q-m7tYG5.js} (86%) rename assets/{how_to_enable_https_related_functions.html-VEGoh4jE.js => how_to_enable_https_related_functions.html-Dxu_FBYc.js} (99%) rename assets/{how_to_enable_https_related_functions.html-mTX-D-oH.js => how_to_enable_https_related_functions.html-pBy5oO-R.js} (99%) rename assets/{how_to_test_delay.html-xmNWiPYK.js => how_to_test_delay.html-GLErIksL.js} (99%) rename assets/{how_to_test_delay.html-qIkqT7X0.js => how_to_test_delay.html-P7CoGGgx.js} (99%) rename assets/{how_to_use_device_id_as_stream_id.html-a05nZW8g.js => how_to_use_device_id_as_stream_id.html-r5nxplI0.js} (96%) rename assets/{how_to_use_device_id_as_stream_id.html-yEpxw4_B.js => how_to_use_device_id_as_stream_id.html-yxD34jok.js} (96%) rename assets/{index-67a42d7d-p9ZYh1Xw.js => index-67a42d7d-TJSwJJ1D.js} (97%) rename assets/{index.html-AN1YzPhl.js => index.html-0qJyAU8Q.js} (76%) rename assets/{index.html-AQj9nIQS.js => index.html-1UKx3tTB.js} (76%) rename assets/{index.html-GYAMrXS-.js => index.html-2LWO62N7.js} (76%) rename assets/{index.html-GpIlvQXn.js => index.html-35KxtpZI.js} (76%) create mode 100644 assets/index.html-4MOf5u_i.js create mode 100644 assets/index.html-4w7NJvOq.js create mode 100644 assets/index.html-6AFjdEoA.js create mode 100644 assets/index.html-8kcJLd-q.js create mode 100644 assets/index.html-9fZsvbS8.js create mode 100644 assets/index.html-AIAMrVKp.js rename assets/{index.html-puiRG_tj.js => index.html-B81jBW2G.js} (99%) delete mode 100644 assets/index.html-BIyNRXIT.js create mode 100644 assets/index.html-CKp0mPwh.js rename assets/{index.html-lsbyji4m.js => index.html-CSg2VFea.js} (71%) create mode 100644 assets/index.html-CmVSRxAE.js create mode 100644 assets/index.html-D9OOw5jZ.js delete mode 100644 assets/index.html-EkebsPUs.js delete mode 100644 assets/index.html-GEt_McOE.js delete mode 100644 assets/index.html-H5ajPWzC.js delete mode 100644 assets/index.html-HffK__w0.js delete mode 100644 assets/index.html-HiksATK8.js create mode 100644 assets/index.html-HppSEYlS.js delete mode 100644 assets/index.html-HxIzy8B_.js rename assets/{index.html-c9Q-kbo9.js => index.html-IZsaCX79.js} (82%) create mode 100644 assets/index.html-JQu_RH6f.js create mode 100644 assets/index.html-LudGOU3A.js delete mode 100644 assets/index.html-MCTXxKe2.js delete mode 100644 assets/index.html-NvUp90i0.js delete mode 100644 assets/index.html-P9T-kKXm.js delete mode 100644 assets/index.html-PiOevGXi.js delete mode 100644 assets/index.html-Q_J0RuMe.js create mode 100644 assets/index.html-QkbwDjsA.js create mode 100644 assets/index.html-UtNsP0-c.js create mode 100644 assets/index.html-Wn9fL8rF.js rename assets/{index.html-QZwQ-TVg.js => index.html-XHP9LdII.js} (94%) create mode 100644 assets/index.html-ZukUTvpe.js delete mode 100644 assets/index.html-_oz2t3vB.js create mode 100644 assets/index.html-aTnTwBPS.js delete mode 100644 assets/index.html-c5y0hsti.js create mode 100644 assets/index.html-c5z6Iek2.js create mode 100644 assets/index.html-c9EfxXZy.js rename assets/{index.html-1gY9nmEU.js => index.html-ckFP_gFB.js} (99%) create mode 100644 assets/index.html-ea4s8txi.js delete mode 100644 assets/index.html-gHhFwdGj.js create mode 100644 assets/index.html-hD6JZq1M.js delete mode 100644 assets/index.html-l07G40eV.js rename assets/{index.html-nYslRDbi.js => index.html-lGRuHLpD.js} (71%) rename assets/{index.html-jQOvySfo.js => index.html-lKh2cFAq.js} (95%) delete mode 100644 assets/index.html-mmNwkX1L.js create mode 100644 assets/index.html-ocl34mDF.js delete mode 100644 assets/index.html-pPTmba-N.js create mode 100644 assets/index.html-plxXlLQP.js delete mode 100644 assets/index.html-q-mTP89g.js delete mode 100644 assets/index.html-qTt3LMQa.js delete mode 100644 assets/index.html-sVMJ39Ap.js delete mode 100644 assets/index.html-sZlBS23H.js rename assets/{index.html-wOzz5n--.js => index.html-vbFGRJHC.js} (82%) delete mode 100644 assets/index.html-w2bXuDTO.js delete mode 100644 assets/index.html-wRo-8kqz.js delete mode 100644 assets/index.html-wqut89jq.js delete mode 100644 assets/index.html-y8X0hE31.js create mode 100644 assets/index.html-ybOFrWXT.js create mode 100644 assets/index.html-ysHWzV3Z.js create mode 100644 assets/index.html-zeRiEjXy.js rename assets/{infoDiagram-a336098b-0X44mHNI.js => infoDiagram-a336098b-7atRS8Yv.js} (98%) delete mode 100644 assets/install_zlmediakit_using_vcpkg.html-4lMDCmIH.js rename assets/{install_zlmediakit_using_vcpkg.html-RuAB6C5H.js => install_zlmediakit_using_vcpkg.html-NCcA9KPG.js} (99%) create mode 100644 assets/install_zlmediakit_using_vcpkg.html-_H3jokEy.js rename assets/{install_zlmediakit_using_vcpkg.html-hSrbYLMY.js => install_zlmediakit_using_vcpkg.html-ii7HljTN.js} (91%) rename assets/{introduction_to_streaming_media_related_technologies.html-9hb3DfJc.js => introduction_to_streaming_media_related_technologies.html-aLJXiBgK.js} (99%) rename assets/{introduction_to_streaming_media_related_technologies.html-I9N-fJX2.js => introduction_to_streaming_media_related_technologies.html-qLQLZbA3.js} (99%) rename assets/{journeyDiagram-deae3313-I4uOsZJQ.js => journeyDiagram-deae3313-JgGAP5aa.js} (98%) rename assets/{layout-1ugHHiNm.js => layout-Vth69vlg.js} (99%) rename assets/{license.html-RX6EoCn0.js => license.html-kMl7iYce.js} (87%) rename assets/{license.html-UJLTmREW.js => license.html-vCBKTTMs.js} (85%) rename assets/{line-TqRW8de4.js => line-ZVNdUhg2.js} (93%) rename assets/{linear-KPN1H-BK.js => linear-JH76Qt4f.js} (99%) rename assets/{mermaid.core-zy7cM8l9.js => mermaid.core-QJnSHCal.js} (98%) rename assets/{mindmap-definition-617cf8dd-IzO8d3I0.js => mindmap-definition-617cf8dd-gkffgRdL.js} (99%) rename assets/{not_recommended_qq.html-_--W0-VY.js => not_recommended_qq.html-CiG918se.js} (96%) rename assets/{not_recommended_qq.html-SK9_7gOI.js => not_recommended_qq.html-Y9F7iYsf.js} (97%) rename assets/{on-demand_push_streaming.html-UrbeRghD.js => on-demand_push_streaming.html-AlawaJGx.js} (88%) rename assets/{on-demand_push_streaming.html-YM_cjoRG.js => on-demand_push_streaming.html-efCX-3qM.js} (87%) rename assets/{on-demand_streaming.html-nFxU5UDk.js => on-demand_streaming.html-6YNYtYZR.js} (88%) rename assets/{on-demand_streaming.html-iLkNMoAM.js => on-demand_streaming.html-yNrWu3de.js} (87%) rename assets/{oncetoken.html-0LGtefKi.js => oncetoken.html-87LqB-OG.js} (99%) rename assets/{oncetoken.html-MCJaY58Y.js => oncetoken.html-VjVkUYP3.js} (99%) rename assets/{online_test.html-B0vGk4Ng.js => online_test.html-UiWsenDR.js} (87%) rename assets/{online_test.html-kfBFI_bL.js => online_test.html-_0lwAxTN.js} (88%) rename assets/{performance_testing.html-LDuN76e5.js => performance_testing.html-Cgq3dIgv.js} (98%) rename assets/{performance_testing.html-D5lG5UBD.js => performance_testing.html-mjt6ZXJJ.js} (98%) rename assets/{pieDiagram-a5166659-w0_KZcnm.js => pieDiagram-a5166659-9IukIHDQ.js} (98%) rename assets/{play_url_rules.html-k15nwlze.js => play_url_rules.html-OaEuncfX.js} (99%) rename assets/{play_url_rules.html-lTCmvIjW.js => play_url_rules.html-f7mxplY_.js} (99%) rename assets/{playback_authentication.html-TBCUOtoI.js => playback_authentication.html-3VR0HbK8.js} (88%) rename assets/{playback_authentication.html-GpyuaGt9.js => playback_authentication.html-4kXdTj5T.js} (87%) rename assets/{push_authentication.html-w6czo8pV.js => push_authentication.html-8OJ18L-5.js} (88%) rename assets/{push_authentication.html-OUbzb3iO.js => push_authentication.html-Ov0yMs1o.js} (87%) rename assets/{push_streaming.html-k2pojRSs.js => push_streaming.html-VOPU_Vgm.js} (99%) rename assets/{push_streaming.html-5CuTTppH.js => push_streaming.html-o6HXGEGb.js} (99%) rename assets/{push_test.html-HAP8YKRj.js => push_test.html-44HoghM7.js} (98%) rename assets/{push_test.html-MSIBzphj.js => push_test.html-zDMue1Qy.js} (98%) rename assets/{quadrantDiagram-6c355bbc-ZBJyvn0X.js => quadrantDiagram-6c355bbc-mORRzAzd.js} (99%) rename assets/{requirementDiagram-4038b16c-KuNIOd0s.js => requirementDiagram-4038b16c-HXR1kktq.js} (99%) rename assets/{restful_api.html-pwLlZzjg.js => restful_api.html-INg-XF77.js} (99%) rename assets/{restful_api.html-0EdVK-2T.js => restful_api.html-W3f4X4lL.js} (99%) rename assets/{rtmp_playback_compatibility_issues.html-h5lBk1EY.js => rtmp_playback_compatibility_issues.html-iFgHmMMS.js} (95%) rename assets/{rtmp_playback_compatibility_issues.html-CmMs82Q4.js => rtmp_playback_compatibility_issues.html-wBkT5hGE.js} (94%) rename assets/{rtmp_pull_stream_performance_test.html-biPYYmB-.js => rtmp_pull_stream_performance_test.html-hMTKB3GA.js} (98%) rename assets/{rtmp_pull_stream_performance_test.html-ANpGb4zw.js => rtmp_pull_stream_performance_test.html-ukcH42DI.js} (98%) rename assets/{rtmp_push_stream_performance_test.html-eR62v-Vt.js => rtmp_push_stream_performance_test.html-4ywCdN8c.js} (98%) rename assets/{rtmp_push_stream_performance_test.html-9WCFfRY7.js => rtmp_push_stream_performance_test.html-LfVKdEym.js} (98%) rename assets/{rtmp_support_for_h265_and_opus.html-uBU2hKvT.js => rtmp_support_for_h265_and_opus.html-IiMCf774.js} (97%) rename assets/{rtmp_support_for_h265_and_opus.html-KlA1IkKx.js => rtmp_support_for_h265_and_opus.html-UXqjeTtH.js} (97%) rename assets/{rtsp_performance_optimization.html-Fk8ai5fo.js => rtsp_performance_optimization.html-TWn6Egp8.js} (98%) rename assets/{rtsp_performance_optimization.html-bYm4ov8K.js => rtsp_performance_optimization.html-TdeED4XC.js} (98%) rename assets/{rtsp_pull_stream_performance_test.html-_t28Fr8s.js => rtsp_pull_stream_performance_test.html-KdEDWBLu.js} (98%) rename assets/{rtsp_pull_stream_performance_test.html-1iKNM4Ty.js => rtsp_pull_stream_performance_test.html-cK-OpNrS.js} (98%) rename assets/{rtsp_push_process.html-Xg9db3f1.js => rtsp_push_process.html-gk6hQwdn.js} (99%) rename assets/{rtsp_push_process.html-u1dV3DYT.js => rtsp_push_process.html-zH-D_jAF.js} (99%) rename assets/{rtsp_push_stream_performance_test.html-y53Byttn.js => rtsp_push_stream_performance_test.html-RMobzxOL.js} (98%) rename assets/{rtsp_push_stream_performance_test.html-iJ5a3bwy.js => rtsp_push_stream_performance_test.html-zFl0_4_8.js} (98%) rename assets/{sankeyDiagram-6db3d513-8ESTXLkU.js => sankeyDiagram-6db3d513-FtDAma5v.js} (99%) rename assets/{sequenceDiagram-465a088a-dqSP27xN.js => sequenceDiagram-465a088a-x_ttBttK.js} (99%) rename assets/{sequence_diagram.html-mA7gwutk.js => sequence_diagram.html-FlbOL2Y8.js} (97%) rename assets/{sequence_diagram.html-9KpjQs_B.js => sequence_diagram.html-SYfON6Mt.js} (97%) rename assets/{start.html-uDyezAWa.js => start.html-KblEw28K.js} (99%) rename assets/{start.html-6kI24E98.js => start.html-T6-Hncwi.js} (99%) rename assets/{start_server.html-eoFuSTqV.js => start_server.html-kjQal3He.js} (98%) rename assets/{start_server.html-EcCCtjYj.js => start_server.html-yxCpNJvw.js} (98%) rename assets/{stateDiagram-b620d43f-w1mYtpVD.js => stateDiagram-b620d43f-n-a3FIBU.js} (97%) rename assets/{stateDiagram-v2-2671c3d1-xaF1im6Z.js => stateDiagram-v2-2671c3d1-1xa5Hugt.js} (92%) delete mode 100644 assets/style-Tj0-KenM.css create mode 100644 assets/style-XrnrrA7w.css rename assets/{styles-4ba6ed67-HTbB9pbZ.js => styles-4ba6ed67-qSs9rwsT.js} (99%) rename assets/{styles-b966c4ae-H6tCXVxS.js => styles-b966c4ae-B_U_A2hx.js} (98%) rename assets/{styles-bbc3fe3b-4cn30Fs-.js => styles-bbc3fe3b-H5-300oD.js} (99%) rename assets/{svgDrawCommon-ad5ef572-eI41Wm50.js => svgDrawCommon-ad5ef572-WW-Kq4zg.js} (95%) rename assets/{thanks.html-F1DFxuQI.js => thanks.html-7ORVp6Jc.js} (98%) rename assets/{thanks.html-uU2jemjd.js => thanks.html-bZ4iyCmp.js} (98%) rename assets/{the_nature_of_live_broadcast_delay.html-KHnxiXxs.js => the_nature_of_live_broadcast_delay.html-9a3MrQ9p.js} (97%) rename assets/{the_nature_of_live_broadcast_delay.html-vfCX1bgp.js => the_nature_of_live_broadcast_delay.html-wpUMkFJz.js} (97%) rename assets/{timeline-definition-732a2638-SVdJN6QQ.js => timeline-definition-732a2638-sTxw8mS_.js} (99%) rename assets/{use_cases.html-lHSo0w28.js => use_cases.html-Ga8uwVa2.js} (92%) rename assets/{use_cases.html-NGOdBBIO.js => use_cases.html-Ztr99Hiu.js} (92%) rename assets/{video_conferencing_related_resources.html-SX4i-tyB.js => video_conferencing_related_resources.html-U1qNLSQN.js} (96%) rename assets/{video_conferencing_related_resources.html-AS8_6dZk.js => video_conferencing_related_resources.html-cJ9at7Xc.js} (96%) rename assets/{web_hook_api.html-DDD36REX.js => web_hook_api.html-OmnDRkZ1.js} (99%) rename assets/{web_hook_api.html-I46LUNuG.js => web_hook_api.html-QYXcFVoT.js} (99%) create mode 100644 assets/webrtc_compilation_and_use.html-Ck_2B7eV.js rename assets/{webrtc_compilation_and_use.html-3Wgq1AT7.js => webrtc_compilation_and_use.html-EzMJU7Jv.js} (99%) rename assets/{webrtc_compilation_and_use.html-FCI8zWK-.js => webrtc_compilation_and_use.html-ZhDB0Qu6.js} (99%) delete mode 100644 assets/webrtc_compilation_and_use.html-zmvb9by4.js rename assets/{webrtc_signaling_interaction_format.html-tkZpC3_1.js => webrtc_signaling_interaction_format.html-QJ72-nhn.js} (99%) rename assets/{webrtc_signaling_interaction_format.html-z1sc5Nd0.js => webrtc_signaling_interaction_format.html-QfhUllLQ.js} (99%) rename assets/{xychartDiagram-f746c04c-ewecNIL5.js => xychartDiagram-f746c04c--73jsRcR.js} (99%) rename assets/{zltoolkit_source_code_study_notes.html-rBGfF-Ka.js => zltoolkit_source_code_study_notes.html-JWQ-N5Wz.js} (86%) rename assets/{zltoolkit_source_code_study_notes.html-ElJi0L0Z.js => zltoolkit_source_code_study_notes.html-ypL46AQc.js} (86%) diff --git a/404.html b/404.html index 294a1ef..512135f 100644 --- a/404.html +++ b/404.html @@ -29,12 +29,12 @@ } ZLMediaKit - - + + -
Skip to main content

404

Page not found

Looks like we've got some broken links.

- +
Skip to main content

404

Page not found

That’s a Four-Oh-Four.

+ diff --git a/assets/404.html-xdICDk2y.js b/assets/404.html-GPYBV8Ha.js similarity index 71% rename from assets/404.html-xdICDk2y.js rename to assets/404.html-GPYBV8Ha.js index c587d4d..34e8aec 100644 --- a/assets/404.html-xdICDk2y.js +++ b/assets/404.html-GPYBV8Ha.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as t,c}from"./app-BrxqtzGY.js";const o={};function r(_,n){return t(),c("div")}const f=e(o,[["render",r],["__file","404.html.vue"]]);export{f as default}; +import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as t,c}from"./app-oTlYPy8h.js";const o={};function r(_,n){return t(),c("div")}const f=e(o,[["render",r],["__file","404.html.vue"]]);export{f as default}; diff --git a/assets/app-BrxqtzGY.js b/assets/app-BrxqtzGY.js deleted file mode 100644 index 1f0ec80..0000000 --- a/assets/app-BrxqtzGY.js +++ /dev/null @@ -1,14 +0,0 @@ -function ni(e,t){const n=Object.create(null),r=e.split(",");for(let o=0;o!!n[o.toLowerCase()]:o=>!!n[o]}const Ee={},gn=[],gt=()=>{},du=()=>!1,ur=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),ri=e=>e.startsWith("onUpdate:"),Oe=Object.assign,oi=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},pu=Object.prototype.hasOwnProperty,ce=(e,t)=>pu.call(e,t),X=Array.isArray,Kn=e=>Gr(e)==="[object Map]",hu=e=>Gr(e)==="[object Set]",oe=e=>typeof e=="function",ue=e=>typeof e=="string",Kr=e=>typeof e=="symbol",Te=e=>e!==null&&typeof e=="object",va=e=>(Te(e)||oe(e))&&oe(e.then)&&oe(e.catch),vu=Object.prototype.toString,Gr=e=>vu.call(e),mu=e=>Gr(e).slice(8,-1),_u=e=>Gr(e)==="[object Object]",ii=e=>ue(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Gn=ni(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Yr=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},gu=/-(\w)/g,rt=Yr(e=>e.replace(gu,(t,n)=>n?n.toUpperCase():"")),bu=/\B([A-Z])/g,Cn=Yr(e=>e.replace(bu,"-$1").toLowerCase()),fr=Yr(e=>e.charAt(0).toUpperCase()+e.slice(1)),uo=Yr(e=>e?`on${fr(e)}`:""),rn=(e,t)=>!Object.is(e,t),fo=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},yu=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Eu=e=>{const t=ue(e)?Number(e):NaN;return isNaN(t)?e:t};let Wi;const Do=()=>Wi||(Wi=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function li(e){if(X(e)){const t={};for(let n=0;n{if(n){const r=n.split(Tu);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function ai(e){let t="";if(ue(e))t=e;else if(X(e))for(let n=0;n{const t=new Set(e);return t.w=0,t.n=0,t},ga=e=>(e.w&Wt)>0,ba=e=>(e.n&Wt)>0,ku=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r{(f==="length"||!Kr(f)&&f>=s)&&a.push(c)})}else switch(n!==void 0&&a.push(l.get(n)),t){case"add":X(e)?ii(n)&&a.push(l.get("length")):(a.push(l.get(Xt)),Kn(e)&&a.push(l.get(Vo)));break;case"delete":X(e)||(a.push(l.get(Xt)),Kn(e)&&a.push(l.get(Vo)));break;case"set":Kn(e)&&a.push(l.get(Xt));break}if(a.length===1)a[0]&&Mo(a[0]);else{const s=[];for(const c of a)c&&s.push(...c);Mo(si(s))}}function Mo(e,t){const n=X(e)?e:[...e];for(const r of n)r.computed&&Ui(r);for(const r of n)r.computed||Ui(r)}function Ui(e,t){(e!==st||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}function Du(e,t){var n;return(n=Mr.get(e))==null?void 0:n.get(t)}const Su=ni("__proto__,__v_isRef,__isVue"),wa=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Kr)),Ki=Vu();function Vu(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=le(this);for(let i=0,l=this.length;i{e[t]=function(...n){Dn();const r=le(this)[t].apply(this,n);return Sn(),r}}),e}function Mu(e){const t=le(this);return He(t,"has",e),t.hasOwnProperty(e)}class Ta{constructor(t=!1,n=!1){this._isReadonly=t,this._shallow=n}get(t,n,r){const o=this._isReadonly,i=this._shallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return i;if(n==="__v_raw"&&r===(o?i?Yu:Ra:i?Pa:La).get(t))return t;const l=X(t);if(!o){if(l&&ce(Ki,n))return Reflect.get(Ki,n,r);if(n==="hasOwnProperty")return Mu}const a=Reflect.get(t,n,r);return(Kr(n)?wa.has(n):Su(n))||(o||He(t,"get",n),i)?a:ke(a)?l&&ii(n)?a:a.value:Te(a)?o?on(a):dr(a):a}}class Aa extends Ta{constructor(t=!1){super(!1,t)}set(t,n,r,o){let i=t[n];if(Tn(i)&&ke(i)&&!ke(r))return!1;if(!this._shallow&&(!$r(r)&&!Tn(r)&&(i=le(i),r=le(r)),!X(t)&&ke(i)&&!ke(r)))return i.value=r,!0;const l=X(t)&&ii(n)?Number(n)e,Zr=e=>Reflect.getPrototypeOf(e);function yr(e,t,n=!1,r=!1){e=e.__v_raw;const o=le(e),i=le(t);n||(rn(t,i)&&He(o,"get",t),He(o,"get",i));const{has:l}=Zr(o),a=r?ui:n?pi:nr;if(l.call(o,t))return a(e.get(t));if(l.call(o,i))return a(e.get(i));e!==o&&e.get(t)}function Er(e,t=!1){const n=this.__v_raw,r=le(n),o=le(e);return t||(rn(e,o)&&He(r,"has",e),He(r,"has",o)),e===o?n.has(e):n.has(e)||n.has(o)}function wr(e,t=!1){return e=e.__v_raw,!t&&He(le(e),"iterate",Xt),Reflect.get(e,"size",e)}function Gi(e){e=le(e);const t=le(this);return Zr(t).has.call(t,e)||(t.add(e),It(t,"add",e,e)),this}function Yi(e,t){t=le(t);const n=le(this),{has:r,get:o}=Zr(n);let i=r.call(n,e);i||(e=le(e),i=r.call(n,e));const l=o.call(n,e);return n.set(e,t),i?rn(t,l)&&It(n,"set",e,t):It(n,"add",e,t),this}function Zi(e){const t=le(this),{has:n,get:r}=Zr(t);let o=n.call(t,e);o||(e=le(e),o=n.call(t,e)),r&&r.call(t,e);const i=t.delete(e);return o&&It(t,"delete",e,void 0),i}function Qi(){const e=le(this),t=e.size!==0,n=e.clear();return t&&It(e,"clear",void 0,void 0),n}function Tr(e,t){return function(r,o){const i=this,l=i.__v_raw,a=le(l),s=t?ui:e?pi:nr;return!e&&He(a,"iterate",Xt),l.forEach((c,f)=>r.call(o,s(c),s(f),i))}}function Ar(e,t,n){return function(...r){const o=this.__v_raw,i=le(o),l=Kn(i),a=e==="entries"||e===Symbol.iterator&&l,s=e==="keys"&&l,c=o[e](...r),f=n?ui:t?pi:nr;return!t&&He(i,"iterate",s?Vo:Xt),{next(){const{value:d,done:p}=c.next();return p?{value:d,done:p}:{value:a?[f(d[0]),f(d[1])]:f(d),done:p}},[Symbol.iterator](){return this}}}}function St(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Fu(){const e={get(i){return yr(this,i)},get size(){return wr(this)},has:Er,add:Gi,set:Yi,delete:Zi,clear:Qi,forEach:Tr(!1,!1)},t={get(i){return yr(this,i,!1,!0)},get size(){return wr(this)},has:Er,add:Gi,set:Yi,delete:Zi,clear:Qi,forEach:Tr(!1,!0)},n={get(i){return yr(this,i,!0)},get size(){return wr(this,!0)},has(i){return Er.call(this,i,!0)},add:St("add"),set:St("set"),delete:St("delete"),clear:St("clear"),forEach:Tr(!0,!1)},r={get(i){return yr(this,i,!0,!0)},get size(){return wr(this,!0)},has(i){return Er.call(this,i,!0)},add:St("add"),set:St("set"),delete:St("delete"),clear:St("clear"),forEach:Tr(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=Ar(i,!1,!1),n[i]=Ar(i,!0,!1),t[i]=Ar(i,!1,!0),r[i]=Ar(i,!0,!0)}),[e,n,t,r]}const[Hu,ju,Wu,qu]=Fu();function fi(e,t){const n=t?e?qu:Wu:e?ju:Hu;return(r,o,i)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?r:Reflect.get(ce(n,o)&&o in r?n:r,o,i)}const Uu={get:fi(!1,!1)},Ku={get:fi(!1,!0)},Gu={get:fi(!0,!1)},La=new WeakMap,Pa=new WeakMap,Ra=new WeakMap,Yu=new WeakMap;function Zu(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Qu(e){return e.__v_skip||!Object.isExtensible(e)?0:Zu(mu(e))}function dr(e){return Tn(e)?e:di(e,!1,zu,Uu,La)}function Ia(e){return di(e,!1,Bu,Ku,Pa)}function on(e){return di(e,!0,Nu,Gu,Ra)}function di(e,t,n,r,o){if(!Te(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=o.get(e);if(i)return i;const l=Qu(e);if(l===0)return e;const a=new Proxy(e,l===2?r:n);return o.set(e,a),a}function bn(e){return Tn(e)?bn(e.__v_raw):!!(e&&e.__v_isReactive)}function Tn(e){return!!(e&&e.__v_isReadonly)}function $r(e){return!!(e&&e.__v_isShallow)}function Oa(e){return bn(e)||Tn(e)}function le(e){const t=e&&e.__v_raw;return t?le(t):e}function xa(e){return Vr(e,"__v_skip",!0),e}const nr=e=>Te(e)?dr(e):e,pi=e=>Te(e)?on(e):e;function hi(e){Ht&&st&&(e=le(e),Ea(e.dep||(e.dep=si())))}function vi(e,t){e=le(e);const n=e.dep;n&&Mo(n)}function ke(e){return!!(e&&e.__v_isRef===!0)}function te(e){return ka(e,!1)}function ft(e){return ka(e,!0)}function ka(e,t){return ke(e)?e:new Ju(e,t)}class Ju{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:le(t),this._value=n?t:nr(t)}get value(){return hi(this),this._value}set value(t){const n=this.__v_isShallow||$r(t)||Tn(t);t=n?t:le(t),rn(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:nr(t),vi(this))}}function en(e){return ke(e)?e.value:e}const Xu={get:(e,t,n)=>en(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return ke(o)&&!ke(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function Ca(e){return bn(e)?e:new Proxy(e,Xu)}class ef{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>hi(this),()=>vi(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function Da(e){return new ef(e)}class tf{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Du(le(this._object),this._key)}}class nf{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function Qr(e,t,n){return ke(e)?e:oe(e)?new nf(e):Te(e)&&arguments.length>1?rf(e,t,n):te(e)}function rf(e,t,n){const r=e[t];return ke(r)?r:new tf(e,t,n)}class of{constructor(t,n,r,o){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new ci(t,()=>{this._dirty||(this._dirty=!0,vi(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=r}get value(){const t=le(this);return hi(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function lf(e,t,n=!1){let r,o;const i=oe(e);return i?(r=e,o=gt):(r=e.get,o=e.set),new of(r,o,i||!o,n)}function jt(e,t,n,r){let o;try{o=r?e(...r):e()}catch(i){pr(i,t,n)}return o}function tt(e,t,n,r){if(oe(e)){const i=jt(e,t,n,r);return i&&va(i)&&i.catch(l=>{pr(l,t,n)}),i}const o=[];for(let i=0;i>>1,o=Se[r],i=or(o);imt&&Se.splice(t,1)}function uf(e){X(e)?yn.push(...e):(!Pt||!Pt.includes(e,e.allowRecurse?Yt+1:Yt))&&yn.push(e),Va()}function Ji(e,t=rr?mt+1:0){for(;tor(n)-or(r)),Yt=0;Yte.id==null?1/0:e.id,ff=(e,t)=>{const n=or(e)-or(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Ma(e){$o=!1,rr=!0,Se.sort(ff);try{for(mt=0;mtue(m)?m.trim():m)),d&&(o=n.map(yu))}let a,s=r[a=uo(t)]||r[a=uo(rt(t))];!s&&i&&(s=r[a=uo(Cn(t))]),s&&tt(s,e,6,o);const c=r[a+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[a])return;e.emitted[a]=!0,tt(c,e,6,o)}}function $a(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(o!==void 0)return o;const i=e.emits;let l={},a=!1;if(!oe(e)){const s=c=>{const f=$a(c,t,!0);f&&(a=!0,Oe(l,f))};!n&&t.mixins.length&&t.mixins.forEach(s),e.extends&&s(e.extends),e.mixins&&e.mixins.forEach(s)}return!i&&!a?(Te(e)&&r.set(e,null),null):(X(i)?i.forEach(s=>l[s]=null):Oe(l,i),Te(e)&&r.set(e,l),l)}function Xr(e,t){return!e||!ur(t)?!1:(t=t.slice(2).replace(/Once$/,""),ce(e,t[0].toLowerCase()+t.slice(1))||ce(e,Cn(t))||ce(e,t))}let Xe=null,za=null;function Nr(e){const t=Xe;return Xe=e,za=e&&e.type.__scopeId||null,t}function pf(e,t=Xe,n){if(!t||e._n)return e;const r=(...o)=>{r._d&&ul(-1);const i=Nr(t);let l;try{l=e(...o)}finally{Nr(i),r._d&&ul(1)}return l};return r._n=!0,r._c=!0,r._d=!0,r}function po(e){const{type:t,vnode:n,proxy:r,withProxy:o,props:i,propsOptions:[l],slots:a,attrs:s,emit:c,render:f,renderCache:d,data:p,setupState:m,ctx:g,inheritAttrs:w}=e;let T,y;const P=Nr(e);try{if(n.shapeFlag&4){const A=o||r,M=A;T=at(f.call(M,A,d,i,m,p,g)),y=s}else{const A=t;T=at(A.length>1?A(i,{attrs:s,slots:a,emit:c}):A(i,null)),y=t.props?s:hf(s)}}catch(A){Jn.length=0,pr(A,e,1),T=Ce(bt)}let b=T;if(y&&w!==!1){const A=Object.keys(y),{shapeFlag:M}=b;A.length&&M&7&&(l&&A.some(ri)&&(y=vf(y,l)),b=qt(b,y))}return n.dirs&&(b=qt(b),b.dirs=b.dirs?b.dirs.concat(n.dirs):n.dirs),n.transition&&(b.transition=n.transition),T=b,Nr(P),T}const hf=e=>{let t;for(const n in e)(n==="class"||n==="style"||ur(n))&&((t||(t={}))[n]=e[n]);return t},vf=(e,t)=>{const n={};for(const r in e)(!ri(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function mf(e,t,n){const{props:r,children:o,component:i}=e,{props:l,children:a,patchFlag:s}=t,c=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&s>=0){if(s&1024)return!0;if(s&16)return r?Xi(r,l,c):!!l;if(s&8){const f=t.dynamicProps;for(let d=0;de.__isSuspense;function Ba(e,t){t&&t.pendingBranch?X(e)?t.effects.push(...e):t.effects.push(e):uf(e)}function Fa(e,t){return _i(e,null,t)}const Lr={};function fe(e,t,n){return _i(e,t,n)}function _i(e,t,{immediate:n,deep:r,flush:o,onTrack:i,onTrigger:l}=Ee){var a;const s=_a()===((a=xe)==null?void 0:a.scope)?xe:null;let c,f=!1,d=!1;if(ke(e)?(c=()=>e.value,f=$r(e)):bn(e)?(c=()=>e,r=!0):X(e)?(d=!0,f=e.some(A=>bn(A)||$r(A)),c=()=>e.map(A=>{if(ke(A))return A.value;if(bn(A))return hn(A);if(oe(A))return jt(A,s,2)})):oe(e)?t?c=()=>jt(e,s,2):c=()=>{if(!(s&&s.isUnmounted))return p&&p(),tt(e,s,3,[m])}:c=gt,t&&r){const A=c;c=()=>hn(A())}let p,m=A=>{p=P.onStop=()=>{jt(A,s,4),p=P.onStop=void 0}},g;if(Pn)if(m=gt,t?n&&tt(t,s,3,[c(),d?[]:void 0,m]):c(),o==="sync"){const A=dd();g=A.__watcherHandles||(A.__watcherHandles=[])}else return gt;let w=d?new Array(e.length).fill(Lr):Lr;const T=()=>{if(P.active)if(t){const A=P.run();(r||f||(d?A.some((M,k)=>rn(M,w[k])):rn(A,w)))&&(p&&p(),tt(t,s,3,[A,w===Lr?void 0:d&&w[0]===Lr?[]:w,m]),w=A)}else P.run()};T.allowRecurse=!!t;let y;o==="sync"?y=T:o==="post"?y=()=>Be(T,s&&s.suspense):(T.pre=!0,s&&(T.id=s.uid),y=()=>Jr(T));const P=new ci(c,y);t?n?T():w=P.run():o==="post"?Be(P.run.bind(P),s&&s.suspense):P.run();const b=()=>{P.stop(),s&&s.scope&&oi(s.scope.effects,P)};return g&&g.push(b),b}function Ef(e,t,n){const r=this.proxy,o=ue(e)?e.includes(".")?Ha(r,e):()=>r[e]:e.bind(r,r);let i;oe(t)?i=t:(i=t.handler,n=t);const l=xe;Ln(this);const a=_i(o,i.bind(r),n);return l?Ln(l):nn(),a}function Ha(e,t){const n=t.split(".");return()=>{let r=e;for(let o=0;o{hn(n,t)});else if(_u(e))for(const n in e)hn(e[n],t);return e}function vt(e,t,n,r){const o=e.dirs,i=t&&t.dirs;for(let l=0;l{e.isMounted=!0}),bi(()=>{e.isUnmounting=!0}),e}const Ze=[Function,Array],Wa={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ze,onEnter:Ze,onAfterEnter:Ze,onEnterCancelled:Ze,onBeforeLeave:Ze,onLeave:Ze,onAfterLeave:Ze,onLeaveCancelled:Ze,onBeforeAppear:Ze,onAppear:Ze,onAfterAppear:Ze,onAppearCancelled:Ze},wf={name:"BaseTransition",props:Wa,setup(e,{slots:t}){const n=Vn(),r=ja();let o;return()=>{const i=t.default&&gi(t.default(),!0);if(!i||!i.length)return;let l=i[0];if(i.length>1){for(const w of i)if(w.type!==bt){l=w;break}}const a=le(e),{mode:s}=a;if(r.isLeaving)return ho(l);const c=tl(l);if(!c)return ho(l);const f=ir(c,a,r,n);lr(c,f);const d=n.subTree,p=d&&tl(d);let m=!1;const{getTransitionKey:g}=c.type;if(g){const w=g();o===void 0?o=w:w!==o&&(o=w,m=!0)}if(p&&p.type!==bt&&(!Zt(c,p)||m)){const w=ir(p,a,r,n);if(lr(p,w),s==="out-in")return r.isLeaving=!0,w.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&n.update()},ho(l);s==="in-out"&&c.type!==bt&&(w.delayLeave=(T,y,P)=>{const b=qa(r,p);b[String(p.key)]=p,T[Nt]=()=>{y(),T[Nt]=void 0,delete f.delayedLeave},f.delayedLeave=P})}return l}}},Tf=wf;function qa(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function ir(e,t,n,r){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:a,onEnter:s,onAfterEnter:c,onEnterCancelled:f,onBeforeLeave:d,onLeave:p,onAfterLeave:m,onLeaveCancelled:g,onBeforeAppear:w,onAppear:T,onAfterAppear:y,onAppearCancelled:P}=t,b=String(e.key),A=qa(n,e),M=(V,S)=>{V&&tt(V,r,9,S)},k=(V,S)=>{const B=S[1];M(V,S),X(V)?V.every(Z=>Z.length<=1)&&B():V.length<=1&&B()},z={mode:i,persisted:l,beforeEnter(V){let S=a;if(!n.isMounted)if(o)S=w||a;else return;V[Nt]&&V[Nt](!0);const B=A[b];B&&Zt(e,B)&&B.el[Nt]&&B.el[Nt](),M(S,[V])},enter(V){let S=s,B=c,Z=f;if(!n.isMounted)if(o)S=T||s,B=y||c,Z=P||f;else return;let H=!1;const ee=V[Pr]=we=>{H||(H=!0,we?M(Z,[V]):M(B,[V]),z.delayedLeave&&z.delayedLeave(),V[Pr]=void 0)};S?k(S,[V,ee]):ee()},leave(V,S){const B=String(e.key);if(V[Pr]&&V[Pr](!0),n.isUnmounting)return S();M(d,[V]);let Z=!1;const H=V[Nt]=ee=>{Z||(Z=!0,S(),ee?M(g,[V]):M(m,[V]),V[Nt]=void 0,A[B]===e&&delete A[B])};A[B]=e,p?k(p,[V,H]):H()},clone(V){return ir(V,t,n,r)}};return z}function ho(e){if(hr(e))return e=qt(e),e.children=null,e}function tl(e){return hr(e)?e.children?e.children[0]:void 0:e}function lr(e,t){e.shapeFlag&6&&e.component?lr(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function gi(e,t=!1,n){let r=[],o=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function L(e){oe(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,timeout:i,suspensible:l=!0,onError:a}=e;let s=null,c,f=0;const d=()=>(f++,s=null,p()),p=()=>{let m;return s||(m=s=t().catch(g=>{if(g=g instanceof Error?g:new Error(String(g)),a)return new Promise((w,T)=>{a(g,()=>w(d()),()=>T(g),f+1)});throw g}).then(g=>m!==s&&s?s:(g&&(g.__esModule||g[Symbol.toStringTag]==="Module")&&(g=g.default),c=g,g)))};return U({name:"AsyncComponentWrapper",__asyncLoader:p,get __asyncResolved(){return c},setup(){const m=xe;if(c)return()=>vo(c,m);const g=P=>{s=null,pr(P,m,13,!r)};if(l&&m.suspense||Pn)return p().then(P=>()=>vo(P,m)).catch(P=>(g(P),()=>r?Ce(r,{error:P}):null));const w=te(!1),T=te(),y=te(!!o);return o&&setTimeout(()=>{y.value=!1},o),i!=null&&setTimeout(()=>{if(!w.value&&!T.value){const P=new Error(`Async component timed out after ${i}ms.`);g(P),T.value=P}},i),p().then(()=>{w.value=!0,m.parent&&hr(m.parent.vnode)&&Jr(m.parent.update)}).catch(P=>{g(P),T.value=P}),()=>{if(w.value&&c)return vo(c,m);if(T.value&&r)return Ce(r,{error:T.value});if(n&&!y.value)return Ce(n)}}})}function vo(e,t){const{ref:n,props:r,children:o,ce:i}=t.vnode,l=Ce(e,r,o);return l.ref=n,l.ce=i,delete t.vnode.ce,l}const hr=e=>e.type.__isKeepAlive;function Af(e,t){Ua(e,"a",t)}function Lf(e,t){Ua(e,"da",t)}function Ua(e,t,n=xe){const r=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(eo(t,r,n),n){let o=n.parent;for(;o&&o.parent;)hr(o.parent.vnode)&&Pf(r,t,n,o),o=o.parent}}function Pf(e,t,n,r){const o=eo(t,e,r,!0);vr(()=>{oi(r[t],o)},n)}function eo(e,t,n=xe,r=!1){if(n){const o=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...l)=>{if(n.isUnmounted)return;Dn(),Ln(n);const a=tt(t,n,e,l);return nn(),Sn(),a});return r?o.unshift(i):o.push(i),i}}const Dt=e=>(t,n=xe)=>(!Pn||e==="sp")&&eo(e,(...r)=>t(...r),n),Rf=Dt("bm"),be=Dt("m"),If=Dt("bu"),Ka=Dt("u"),bi=Dt("bum"),vr=Dt("um"),Of=Dt("sp"),xf=Dt("rtg"),kf=Dt("rtc");function Cf(e,t=xe){eo("ec",e,t)}const zo=e=>e?ls(e)?Ai(e)||e.proxy:zo(e.parent):null,Zn=Oe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>zo(e.parent),$root:e=>zo(e.root),$emit:e=>e.emit,$options:e=>yi(e),$forceUpdate:e=>e.f||(e.f=()=>Jr(e.update)),$nextTick:e=>e.n||(e.n=ln.bind(e.proxy)),$watch:e=>Ef.bind(e)}),mo=(e,t)=>e!==Ee&&!e.__isScriptSetup&&ce(e,t),Df={get({_:e},t){const{ctx:n,setupState:r,data:o,props:i,accessCache:l,type:a,appContext:s}=e;let c;if(t[0]!=="$"){const m=l[t];if(m!==void 0)switch(m){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return i[t]}else{if(mo(r,t))return l[t]=1,r[t];if(o!==Ee&&ce(o,t))return l[t]=2,o[t];if((c=e.propsOptions[0])&&ce(c,t))return l[t]=3,i[t];if(n!==Ee&&ce(n,t))return l[t]=4,n[t];No&&(l[t]=0)}}const f=Zn[t];let d,p;if(f)return t==="$attrs"&&He(e,"get",t),f(e);if((d=a.__cssModules)&&(d=d[t]))return d;if(n!==Ee&&ce(n,t))return l[t]=4,n[t];if(p=s.config.globalProperties,ce(p,t))return p[t]},set({_:e},t,n){const{data:r,setupState:o,ctx:i}=e;return mo(o,t)?(o[t]=n,!0):r!==Ee&&ce(r,t)?(r[t]=n,!0):ce(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:i}},l){let a;return!!n[l]||e!==Ee&&ce(e,l)||mo(t,l)||(a=i[0])&&ce(a,l)||ce(r,l)||ce(Zn,l)||ce(o.config.globalProperties,l)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ce(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function nl(e){return X(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let No=!0;function Sf(e){const t=yi(e),n=e.proxy,r=e.ctx;No=!1,t.beforeCreate&&rl(t.beforeCreate,e,"bc");const{data:o,computed:i,methods:l,watch:a,provide:s,inject:c,created:f,beforeMount:d,mounted:p,beforeUpdate:m,updated:g,activated:w,deactivated:T,beforeDestroy:y,beforeUnmount:P,destroyed:b,unmounted:A,render:M,renderTracked:k,renderTriggered:z,errorCaptured:V,serverPrefetch:S,expose:B,inheritAttrs:Z,components:H,directives:ee,filters:we}=t;if(c&&Vf(c,r,null),l)for(const ne in l){const K=l[ne];oe(K)&&(r[ne]=K.bind(n))}if(o){const ne=o.call(n,n);Te(ne)&&(e.data=dr(ne))}if(No=!0,i)for(const ne in i){const K=i[ne],Pe=oe(K)?K.bind(n,n):oe(K.get)?K.get.bind(n,n):gt,dt=!oe(K)&&oe(K.set)?K.set.bind(n):gt,Ye=I({get:Pe,set:dt});Object.defineProperty(r,ne,{enumerable:!0,configurable:!0,get:()=>Ye.value,set:De=>Ye.value=De})}if(a)for(const ne in a)Ga(a[ne],r,n,ne);if(s){const ne=oe(s)?s.call(n):s;Reflect.ownKeys(ne).forEach(K=>{tn(K,ne[K])})}f&&rl(f,e,"c");function q(ne,K){X(K)?K.forEach(Pe=>ne(Pe.bind(n))):K&&ne(K.bind(n))}if(q(Rf,d),q(be,p),q(If,m),q(Ka,g),q(Af,w),q(Lf,T),q(Cf,V),q(kf,k),q(xf,z),q(bi,P),q(vr,A),q(Of,S),X(B))if(B.length){const ne=e.exposed||(e.exposed={});B.forEach(K=>{Object.defineProperty(ne,K,{get:()=>n[K],set:Pe=>n[K]=Pe})})}else e.exposed||(e.exposed={});M&&e.render===gt&&(e.render=M),Z!=null&&(e.inheritAttrs=Z),H&&(e.components=H),ee&&(e.directives=ee)}function Vf(e,t,n=gt){X(e)&&(e=Bo(e));for(const r in e){const o=e[r];let i;Te(o)?"default"in o?i=_e(o.from||r,o.default,!0):i=_e(o.from||r):i=_e(o),ke(i)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:l=>i.value=l}):t[r]=i}}function rl(e,t,n){tt(X(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ga(e,t,n,r){const o=r.includes(".")?Ha(n,r):()=>n[r];if(ue(e)){const i=t[e];oe(i)&&fe(o,i)}else if(oe(e))fe(o,e.bind(n));else if(Te(e))if(X(e))e.forEach(i=>Ga(i,t,n,r));else{const i=oe(e.handler)?e.handler.bind(n):t[e.handler];oe(i)&&fe(o,i,e)}}function yi(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:i,config:{optionMergeStrategies:l}}=e.appContext,a=i.get(t);let s;return a?s=a:!o.length&&!n&&!r?s=t:(s={},o.length&&o.forEach(c=>Br(s,c,l,!0)),Br(s,t,l)),Te(t)&&i.set(t,s),s}function Br(e,t,n,r=!1){const{mixins:o,extends:i}=t;i&&Br(e,i,n,!0),o&&o.forEach(l=>Br(e,l,n,!0));for(const l in t)if(!(r&&l==="expose")){const a=Mf[l]||n&&n[l];e[l]=a?a(e[l],t[l]):t[l]}return e}const Mf={data:ol,props:il,emits:il,methods:Un,computed:Un,beforeCreate:$e,created:$e,beforeMount:$e,mounted:$e,beforeUpdate:$e,updated:$e,beforeDestroy:$e,beforeUnmount:$e,destroyed:$e,unmounted:$e,activated:$e,deactivated:$e,errorCaptured:$e,serverPrefetch:$e,components:Un,directives:Un,watch:zf,provide:ol,inject:$f};function ol(e,t){return t?e?function(){return Oe(oe(e)?e.call(this,this):e,oe(t)?t.call(this,this):t)}:t:e}function $f(e,t){return Un(Bo(e),Bo(t))}function Bo(e){if(X(e)){const t={};for(let n=0;n1)return n&&oe(t)?t.call(r&&r.proxy):t}}function Ff(e,t,n,r=!1){const o={},i={};Vr(i,to,1),e.propsDefaults=Object.create(null),Za(e,t,o,i);for(const l in e.propsOptions[0])l in o||(o[l]=void 0);n?e.props=r?o:Ia(o):e.type.props?e.props=o:e.props=i,e.attrs=i}function Hf(e,t,n,r){const{props:o,attrs:i,vnode:{patchFlag:l}}=e,a=le(o),[s]=e.propsOptions;let c=!1;if((r||l>0)&&!(l&16)){if(l&8){const f=e.vnode.dynamicProps;for(let d=0;d{s=!0;const[p,m]=Qa(d,t,!0);Oe(l,p),m&&a.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!i&&!s)return Te(e)&&r.set(e,gn),gn;if(X(i))for(let f=0;f-1,m[1]=w<0||g-1||ce(m,"default"))&&a.push(d)}}}const c=[l,a];return Te(e)&&r.set(e,c),c}function ll(e){return e[0]!=="$"}function al(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function sl(e,t){return al(e)===al(t)}function cl(e,t){return X(t)?t.findIndex(n=>sl(n,e)):oe(t)&&sl(t,e)?0:-1}const Ja=e=>e[0]==="_"||e==="$stable",Ei=e=>X(e)?e.map(at):[at(e)],jf=(e,t,n)=>{if(t._n)return t;const r=pf((...o)=>Ei(t(...o)),n);return r._c=!1,r},Xa=(e,t,n)=>{const r=e._ctx;for(const o in e){if(Ja(o))continue;const i=e[o];if(oe(i))t[o]=jf(o,i,r);else if(i!=null){const l=Ei(i);t[o]=()=>l}}},es=(e,t)=>{const n=Ei(t);e.slots.default=()=>n},Wf=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=le(t),Vr(t,"_",n)):Xa(t,e.slots={})}else e.slots={},t&&es(e,t);Vr(e.slots,to,1)},qf=(e,t,n)=>{const{vnode:r,slots:o}=e;let i=!0,l=Ee;if(r.shapeFlag&32){const a=t._;a?n&&a===1?i=!1:(Oe(o,t),!n&&a===1&&delete o._):(i=!t.$stable,Xa(t,o)),l=t}else t&&(es(e,t),l={default:1});if(i)for(const a in o)!Ja(a)&&l[a]==null&&delete o[a]};function Hr(e,t,n,r,o=!1){if(X(e)){e.forEach((p,m)=>Hr(p,t&&(X(t)?t[m]:t),n,r,o));return}if(Yn(r)&&!o)return;const i=r.shapeFlag&4?Ai(r.component)||r.component.proxy:r.el,l=o?null:i,{i:a,r:s}=e,c=t&&t.r,f=a.refs===Ee?a.refs={}:a.refs,d=a.setupState;if(c!=null&&c!==s&&(ue(c)?(f[c]=null,ce(d,c)&&(d[c]=null)):ke(c)&&(c.value=null)),oe(s))jt(s,a,12,[l,f]);else{const p=ue(s),m=ke(s);if(p||m){const g=()=>{if(e.f){const w=p?ce(d,s)?d[s]:f[s]:s.value;o?X(w)&&oi(w,i):X(w)?w.includes(i)||w.push(i):p?(f[s]=[i],ce(d,s)&&(d[s]=f[s])):(s.value=[i],e.k&&(f[e.k]=s.value))}else p?(f[s]=l,ce(d,s)&&(d[s]=l)):m&&(s.value=l,e.k&&(f[e.k]=l))};l?(g.id=-1,Be(g,n)):g()}}}let Vt=!1;const Rr=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Ir=e=>e.nodeType===8;function Uf(e){const{mt:t,p:n,o:{patchProp:r,createText:o,nextSibling:i,parentNode:l,remove:a,insert:s,createComment:c}}=e,f=(b,A)=>{if(!A.hasChildNodes()){n(null,b,A),zr(),A._vnode=b;return}Vt=!1,d(A.firstChild,b,null,null,null),zr(),A._vnode=b,Vt&&console.error("Hydration completed but contains mismatches.")},d=(b,A,M,k,z,V=!1)=>{const S=Ir(b)&&b.data==="[",B=()=>w(b,A,M,k,z,S),{type:Z,ref:H,shapeFlag:ee,patchFlag:we}=A;let ye=b.nodeType;A.el=b,we===-2&&(V=!1,A.dynamicChildren=null);let q=null;switch(Z){case An:ye!==3?A.children===""?(s(A.el=o(""),l(b),b),q=b):q=B():(b.data!==A.children&&(Vt=!0,b.data=A.children),q=i(b));break;case bt:P(b)?(q=i(b),y(A.el=b.content.firstChild,b,M)):ye!==8||S?q=B():q=i(b);break;case Qn:if(S&&(b=i(b),ye=b.nodeType),ye===1||ye===3){q=b;const ne=!A.children.length;for(let K=0;K{V=V||!!A.dynamicChildren;const{type:S,props:B,patchFlag:Z,shapeFlag:H,dirs:ee,transition:we}=A,ye=S==="input"||S==="option";if(ye||Z!==-1){if(ee&&vt(A,null,M,"created"),B)if(ye||!V||Z&48)for(const K in B)(ye&&(K.endsWith("value")||K==="indeterminate")||ur(K)&&!Gn(K)||K[0]===".")&&r(b,K,null,B[K],!1,void 0,M);else B.onClick&&r(b,"onClick",null,B.onClick,!1,void 0,M);let q;(q=B&&B.onVnodeBeforeMount)&&Qe(q,M,A);let ne=!1;if(P(b)){ne=ts(k,we)&&M&&M.vnode.props&&M.vnode.props.appear;const K=b.content.firstChild;ne&&we.beforeEnter(K),y(K,b,M),A.el=b=K}if(ee&&vt(A,null,M,"beforeMount"),((q=B&&B.onVnodeMounted)||ee||ne)&&Ba(()=>{q&&Qe(q,M,A),ne&&we.enter(b),ee&&vt(A,null,M,"mounted")},k),H&16&&!(B&&(B.innerHTML||B.textContent))){let K=m(b.firstChild,A,b,M,k,z,V);for(;K;){Vt=!0;const Pe=K;K=K.nextSibling,a(Pe)}}else H&8&&b.textContent!==A.children&&(Vt=!0,b.textContent=A.children)}return b.nextSibling},m=(b,A,M,k,z,V,S)=>{S=S||!!A.dynamicChildren;const B=A.children,Z=B.length;for(let H=0;H{const{slotScopeIds:S}=A;S&&(z=z?z.concat(S):S);const B=l(b),Z=m(i(b),A,B,M,k,z,V);return Z&&Ir(Z)&&Z.data==="]"?i(A.anchor=Z):(Vt=!0,s(A.anchor=c("]"),B,Z),Z)},w=(b,A,M,k,z,V)=>{if(Vt=!0,A.el=null,V){const Z=T(b);for(;;){const H=i(b);if(H&&H!==Z)a(H);else break}}const S=i(b),B=l(b);return a(b),n(null,A,B,S,M,k,Rr(B),z),S},T=(b,A="[",M="]")=>{let k=0;for(;b;)if(b=i(b),b&&Ir(b)&&(b.data===A&&k++,b.data===M)){if(k===0)return i(b);k--}return b},y=(b,A,M)=>{const k=A.parentNode;k&&k.replaceChild(b,A);let z=M;for(;z;)z.vnode.el===A&&(z.vnode.el=z.subTree.el=b),z=z.parent},P=b=>b.nodeType===1&&b.tagName.toLowerCase()==="template";return[f,d]}const Be=Ba;function Kf(e){return Gf(e,Uf)}function Gf(e,t){const n=Do();n.__VUE__=!0;const{insert:r,remove:o,patchProp:i,createElement:l,createText:a,createComment:s,setText:c,setElementText:f,parentNode:d,nextSibling:p,setScopeId:m=gt,insertStaticContent:g}=e,w=(v,_,E,R=null,x=null,C=null,j=!1,$=null,F=!!_.dynamicChildren)=>{if(v===_)return;v&&!Zt(v,_)&&(R=O(v),De(v,x,C,!0),v=null),_.patchFlag===-2&&(F=!1,_.dynamicChildren=null);const{type:D,ref:Q,shapeFlag:G}=_;switch(D){case An:T(v,_,E,R);break;case bt:y(v,_,E,R);break;case Qn:v==null&&P(_,E,R,j);break;case Ke:H(v,_,E,R,x,C,j,$,F);break;default:G&1?M(v,_,E,R,x,C,j,$,F):G&6?ee(v,_,E,R,x,C,j,$,F):(G&64||G&128)&&D.process(v,_,E,R,x,C,j,$,F,N)}Q!=null&&x&&Hr(Q,v&&v.ref,C,_||v,!_)},T=(v,_,E,R)=>{if(v==null)r(_.el=a(_.children),E,R);else{const x=_.el=v.el;_.children!==v.children&&c(x,_.children)}},y=(v,_,E,R)=>{v==null?r(_.el=s(_.children||""),E,R):_.el=v.el},P=(v,_,E,R)=>{[v.el,v.anchor]=g(v.children,_,E,R,v.el,v.anchor)},b=({el:v,anchor:_},E,R)=>{let x;for(;v&&v!==_;)x=p(v),r(v,E,R),v=x;r(_,E,R)},A=({el:v,anchor:_})=>{let E;for(;v&&v!==_;)E=p(v),o(v),v=E;o(_)},M=(v,_,E,R,x,C,j,$,F)=>{j=j||_.type==="svg",v==null?k(_,E,R,x,C,j,$,F):S(v,_,x,C,j,$,F)},k=(v,_,E,R,x,C,j,$)=>{let F,D;const{type:Q,props:G,shapeFlag:J,transition:re,dirs:ie}=v;if(F=v.el=l(v.type,C,G&&G.is,G),J&8?f(F,v.children):J&16&&V(v.children,F,null,R,x,C&&Q!=="foreignObject",j,$),ie&&vt(v,null,R,"created"),z(F,v,v.scopeId,j,R),G){for(const he in G)he!=="value"&&!Gn(he)&&i(F,he,null,G[he],C,v.children,R,x,Re);"value"in G&&i(F,"value",null,G.value),(D=G.onVnodeBeforeMount)&&Qe(D,R,v)}ie&&vt(v,null,R,"beforeMount");const me=ts(x,re);me&&re.beforeEnter(F),r(F,_,E),((D=G&&G.onVnodeMounted)||me||ie)&&Be(()=>{D&&Qe(D,R,v),me&&re.enter(F),ie&&vt(v,null,R,"mounted")},x)},z=(v,_,E,R,x)=>{if(E&&m(v,E),R)for(let C=0;C{for(let D=F;D{const $=_.el=v.el;let{patchFlag:F,dynamicChildren:D,dirs:Q}=_;F|=v.patchFlag&16;const G=v.props||Ee,J=_.props||Ee;let re;E&&Kt(E,!1),(re=J.onVnodeBeforeUpdate)&&Qe(re,E,_,v),Q&&vt(_,v,E,"beforeUpdate"),E&&Kt(E,!0);const ie=x&&_.type!=="foreignObject";if(D?B(v.dynamicChildren,D,$,E,R,ie,C):j||K(v,_,$,null,E,R,ie,C,!1),F>0){if(F&16)Z($,_,G,J,E,R,x);else if(F&2&&G.class!==J.class&&i($,"class",null,J.class,x),F&4&&i($,"style",G.style,J.style,x),F&8){const me=_.dynamicProps;for(let he=0;he{re&&Qe(re,E,_,v),Q&&vt(_,v,E,"updated")},R)},B=(v,_,E,R,x,C,j)=>{for(let $=0;$<_.length;$++){const F=v[$],D=_[$],Q=F.el&&(F.type===Ke||!Zt(F,D)||F.shapeFlag&70)?d(F.el):E;w(F,D,Q,null,R,x,C,j,!0)}},Z=(v,_,E,R,x,C,j)=>{if(E!==R){if(E!==Ee)for(const $ in E)!Gn($)&&!($ in R)&&i(v,$,E[$],null,j,_.children,x,C,Re);for(const $ in R){if(Gn($))continue;const F=R[$],D=E[$];F!==D&&$!=="value"&&i(v,$,D,F,j,_.children,x,C,Re)}"value"in R&&i(v,"value",E.value,R.value)}},H=(v,_,E,R,x,C,j,$,F)=>{const D=_.el=v?v.el:a(""),Q=_.anchor=v?v.anchor:a("");let{patchFlag:G,dynamicChildren:J,slotScopeIds:re}=_;re&&($=$?$.concat(re):re),v==null?(r(D,E,R),r(Q,E,R),V(_.children,E,Q,x,C,j,$,F)):G>0&&G&64&&J&&v.dynamicChildren?(B(v.dynamicChildren,J,E,x,C,j,$),(_.key!=null||x&&_===x.subTree)&&ns(v,_,!0)):K(v,_,E,Q,x,C,j,$,F)},ee=(v,_,E,R,x,C,j,$,F)=>{_.slotScopeIds=$,v==null?_.shapeFlag&512?x.ctx.activate(_,E,R,j,F):we(_,E,R,x,C,j,F):ye(v,_,F)},we=(v,_,E,R,x,C,j)=>{const $=v.component=od(v,R,x);if(hr(v)&&($.ctx.renderer=N),id($),$.asyncDep){if(x&&x.registerDep($,q),!v.el){const F=$.subTree=Ce(bt);y(null,F,_,E)}return}q($,v,_,E,x,C,j)},ye=(v,_,E)=>{const R=_.component=v.component;if(mf(v,_,E))if(R.asyncDep&&!R.asyncResolved){ne(R,_,E);return}else R.next=_,cf(R.update),R.update();else _.el=v.el,R.vnode=_},q=(v,_,E,R,x,C,j)=>{const $=()=>{if(v.isMounted){let{next:Q,bu:G,u:J,parent:re,vnode:ie}=v,me=Q,he;Kt(v,!1),Q?(Q.el=ie.el,ne(v,Q,j)):Q=ie,G&&fo(G),(he=Q.props&&Q.props.onVnodeBeforeUpdate)&&Qe(he,re,Q,ie),Kt(v,!0);const Ie=po(v),it=v.subTree;v.subTree=Ie,w(it,Ie,d(it.el),O(it),v,x,C),Q.el=Ie.el,me===null&&_f(v,Ie.el),J&&Be(J,x),(he=Q.props&&Q.props.onVnodeUpdated)&&Be(()=>Qe(he,re,Q,ie),x)}else{let Q;const{el:G,props:J}=_,{bm:re,m:ie,parent:me}=v,he=Yn(_);if(Kt(v,!1),re&&fo(re),!he&&(Q=J&&J.onVnodeBeforeMount)&&Qe(Q,me,_),Kt(v,!0),G&&ae){const Ie=()=>{v.subTree=po(v),ae(G,v.subTree,v,x,null)};he?_.type.__asyncLoader().then(()=>!v.isUnmounted&&Ie()):Ie()}else{const Ie=v.subTree=po(v);w(null,Ie,E,R,v,x,C),_.el=Ie.el}if(ie&&Be(ie,x),!he&&(Q=J&&J.onVnodeMounted)){const Ie=_;Be(()=>Qe(Q,me,Ie),x)}(_.shapeFlag&256||me&&Yn(me.vnode)&&me.vnode.shapeFlag&256)&&v.a&&Be(v.a,x),v.isMounted=!0,_=E=R=null}},F=v.effect=new ci($,()=>Jr(D),v.scope),D=v.update=()=>F.run();D.id=v.uid,Kt(v,!0),D()},ne=(v,_,E)=>{_.component=v;const R=v.vnode.props;v.vnode=_,v.next=null,Hf(v,_.props,R,E),qf(v,_.children,E),Dn(),Ji(),Sn()},K=(v,_,E,R,x,C,j,$,F=!1)=>{const D=v&&v.children,Q=v?v.shapeFlag:0,G=_.children,{patchFlag:J,shapeFlag:re}=_;if(J>0){if(J&128){dt(D,G,E,R,x,C,j,$,F);return}else if(J&256){Pe(D,G,E,R,x,C,j,$,F);return}}re&8?(Q&16&&Re(D,x,C),G!==D&&f(E,G)):Q&16?re&16?dt(D,G,E,R,x,C,j,$,F):Re(D,x,C,!0):(Q&8&&f(E,""),re&16&&V(G,E,R,x,C,j,$,F))},Pe=(v,_,E,R,x,C,j,$,F)=>{v=v||gn,_=_||gn;const D=v.length,Q=_.length,G=Math.min(D,Q);let J;for(J=0;JQ?Re(v,x,C,!0,!1,G):V(_,E,R,x,C,j,$,F,G)},dt=(v,_,E,R,x,C,j,$,F)=>{let D=0;const Q=_.length;let G=v.length-1,J=Q-1;for(;D<=G&&D<=J;){const re=v[D],ie=_[D]=F?Bt(_[D]):at(_[D]);if(Zt(re,ie))w(re,ie,E,null,x,C,j,$,F);else break;D++}for(;D<=G&&D<=J;){const re=v[G],ie=_[J]=F?Bt(_[J]):at(_[J]);if(Zt(re,ie))w(re,ie,E,null,x,C,j,$,F);else break;G--,J--}if(D>G){if(D<=J){const re=J+1,ie=reJ)for(;D<=G;)De(v[D],x,C,!0),D++;else{const re=D,ie=D,me=new Map;for(D=ie;D<=J;D++){const qe=_[D]=F?Bt(_[D]):at(_[D]);qe.key!=null&&me.set(qe.key,D)}let he,Ie=0;const it=J-ie+1;let cn=!1,Fi=0;const Fn=new Array(it);for(D=0;D=it){De(qe,x,C,!0);continue}let ht;if(qe.key!=null)ht=me.get(qe.key);else for(he=ie;he<=J;he++)if(Fn[he-ie]===0&&Zt(qe,_[he])){ht=he;break}ht===void 0?De(qe,x,C,!0):(Fn[ht-ie]=D+1,ht>=Fi?Fi=ht:cn=!0,w(qe,_[ht],E,null,x,C,j,$,F),Ie++)}const Hi=cn?Yf(Fn):gn;for(he=Hi.length-1,D=it-1;D>=0;D--){const qe=ie+D,ht=_[qe],ji=qe+1{const{el:C,type:j,transition:$,children:F,shapeFlag:D}=v;if(D&6){Ye(v.component.subTree,_,E,R);return}if(D&128){v.suspense.move(_,E,R);return}if(D&64){j.move(v,_,E,N);return}if(j===Ke){r(C,_,E);for(let G=0;G$.enter(C),x);else{const{leave:G,delayLeave:J,afterLeave:re}=$,ie=()=>r(C,_,E),me=()=>{G(C,()=>{ie(),re&&re()})};J?J(C,ie,me):me()}else r(C,_,E)},De=(v,_,E,R=!1,x=!1)=>{const{type:C,props:j,ref:$,children:F,dynamicChildren:D,shapeFlag:Q,patchFlag:G,dirs:J}=v;if($!=null&&Hr($,null,E,v,!0),Q&256){_.ctx.deactivate(v);return}const re=Q&1&&J,ie=!Yn(v);let me;if(ie&&(me=j&&j.onVnodeBeforeUnmount)&&Qe(me,_,v),Q&6)pt(v.component,E,R);else{if(Q&128){v.suspense.unmount(E,R);return}re&&vt(v,null,_,"beforeUnmount"),Q&64?v.type.remove(v,_,E,x,N,R):D&&(C!==Ke||G>0&&G&64)?Re(D,_,E,!1,!0):(C===Ke&&G&384||!x&&Q&16)&&Re(F,_,E),R&&We(v)}(ie&&(me=j&&j.onVnodeUnmounted)||re)&&Be(()=>{me&&Qe(me,_,v),re&&vt(v,null,_,"unmounted")},E)},We=v=>{const{type:_,el:E,anchor:R,transition:x}=v;if(_===Ke){Et(E,R);return}if(_===Qn){A(v);return}const C=()=>{o(E),x&&!x.persisted&&x.afterLeave&&x.afterLeave()};if(v.shapeFlag&1&&x&&!x.persisted){const{leave:j,delayLeave:$}=x,F=()=>j(E,C);$?$(v.el,C,F):F()}else C()},Et=(v,_)=>{let E;for(;v!==_;)E=p(v),o(v),v=E;o(_)},pt=(v,_,E)=>{const{bum:R,scope:x,update:C,subTree:j,um:$}=v;R&&fo(R),x.stop(),C&&(C.active=!1,De(j,v,_,E)),$&&Be($,_),Be(()=>{v.isUnmounted=!0},_),_&&_.pendingBranch&&!_.isUnmounted&&v.asyncDep&&!v.asyncResolved&&v.suspenseId===_.pendingId&&(_.deps--,_.deps===0&&_.resolve())},Re=(v,_,E,R=!1,x=!1,C=0)=>{for(let j=C;jv.shapeFlag&6?O(v.component.subTree):v.shapeFlag&128?v.suspense.next():p(v.anchor||v.el),W=(v,_,E)=>{v==null?_._vnode&&De(_._vnode,null,null,!0):w(_._vnode||null,v,_,null,null,null,E),Ji(),zr(),_._vnode=v},N={p:w,um:De,m:Ye,r:We,mt:we,mc:V,pc:K,pbc:B,n:O,o:e};let Y,ae;return t&&([Y,ae]=t(N)),{render:W,hydrate:Y,createApp:Bf(W,Y)}}function Kt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function ts(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function ns(e,t,n=!1){const r=e.children,o=t.children;if(X(r)&&X(o))for(let i=0;i>1,e[n[a]]0&&(t[r]=n[i-1]),n[i]=r)}}for(i=n.length,l=n[i-1];i-- >0;)n[i]=l,l=t[l];return n}const Zf=e=>e.__isTeleport,Ke=Symbol.for("v-fgt"),An=Symbol.for("v-txt"),bt=Symbol.for("v-cmt"),Qn=Symbol.for("v-stc"),Jn=[];let ct=null;function m_(e=!1){Jn.push(ct=e?null:[])}function Qf(){Jn.pop(),ct=Jn[Jn.length-1]||null}let ar=1;function ul(e){ar+=e}function Jf(e){return e.dynamicChildren=ar>0?ct||gn:null,Qf(),ar>0&&ct&&ct.push(e),e}function __(e,t,n,r,o,i){return Jf(os(e,t,n,r,o,i,!0))}function Ho(e){return e?e.__v_isVNode===!0:!1}function Zt(e,t){return e.type===t.type&&e.key===t.key}const to="__vInternal",rs=({key:e})=>e??null,Sr=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ue(e)||ke(e)||oe(e)?{i:Xe,r:e,k:t,f:!!n}:e:null);function os(e,t=null,n=null,r=0,o=null,i=e===Ke?0:1,l=!1,a=!1){const s={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&rs(t),ref:t&&Sr(t),scopeId:za,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Xe};return a?(wi(s,n),i&128&&e.normalize(s)):n&&(s.shapeFlag|=ue(n)?8:16),ar>0&&!l&&ct&&(s.patchFlag>0||i&6)&&s.patchFlag!==32&&ct.push(s),s}const Ce=Xf;function Xf(e,t=null,n=null,r=0,o=null,i=!1){if((!e||e===gf)&&(e=bt),Ho(e)){const a=qt(e,t,!0);return n&&wi(a,n),ar>0&&!i&&ct&&(a.shapeFlag&6?ct[ct.indexOf(e)]=a:ct.push(a)),a.patchFlag|=-2,a}if(ud(e)&&(e=e.__vccOpts),t){t=ed(t);let{class:a,style:s}=t;a&&!ue(a)&&(t.class=ai(a)),Te(s)&&(Oa(s)&&!X(s)&&(s=Oe({},s)),t.style=li(s))}const l=ue(e)?1:yf(e)?128:Zf(e)?64:Te(e)?4:oe(e)?2:0;return os(e,t,n,r,o,l,i,!0)}function ed(e){return e?Oa(e)||to in e?Oe({},e):e:null}function qt(e,t,n=!1){const{props:r,ref:o,patchFlag:i,children:l}=e,a=t?td(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:a,key:a&&rs(a),ref:t&&t.ref?n&&o?X(o)?o.concat(Sr(t)):[o,Sr(t)]:Sr(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ke?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&qt(e.ssContent),ssFallback:e.ssFallback&&qt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function is(e=" ",t=0){return Ce(An,null,e,t)}function g_(e,t){const n=Ce(Qn,null,e);return n.staticCount=t,n}function at(e){return e==null||typeof e=="boolean"?Ce(bt):X(e)?Ce(Ke,null,e.slice()):typeof e=="object"?Bt(e):Ce(An,null,String(e))}function Bt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:qt(e)}function wi(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(X(t))n=16;else if(typeof t=="object")if(r&65){const o=t.default;o&&(o._c&&(o._d=!1),wi(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!(to in t)?t._ctx=Xe:o===3&&Xe&&(Xe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else oe(t)?(t={default:t,_ctx:Xe},n=32):(t=String(t),r&64?(n=16,t=[is(t)]):n=8);e.children=t,e.shapeFlag|=n}function td(...e){const t={};for(let n=0;nxe||Xe;let Ti,un,fl="__VUE_INSTANCE_SETTERS__";(un=Do()[fl])||(un=Do()[fl]=[]),un.push(e=>xe=e),Ti=e=>{un.length>1?un.forEach(t=>t(e)):un[0](e)};const Ln=e=>{Ti(e),e.scope.on()},nn=()=>{xe&&xe.scope.off(),Ti(null)};function ls(e){return e.vnode.shapeFlag&4}let Pn=!1;function id(e,t=!1){Pn=t;const{props:n,children:r}=e.vnode,o=ls(e);Ff(e,n,o,t),Wf(e,r);const i=o?ld(e,t):void 0;return Pn=!1,i}function ld(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=xa(new Proxy(e.ctx,Df));const{setup:r}=n;if(r){const o=e.setupContext=r.length>1?sd(e):null;Ln(e),Dn();const i=jt(r,e,0,[e.props,o]);if(Sn(),nn(),va(i)){if(i.then(nn,nn),t)return i.then(l=>{dl(e,l,t)}).catch(l=>{pr(l,e,0)});e.asyncDep=i}else dl(e,i,t)}else as(e,t)}function dl(e,t,n){oe(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Te(t)&&(e.setupState=Ca(t)),as(e,n)}let pl;function as(e,t,n){const r=e.type;if(!e.render){if(!t&&pl&&!r.render){const o=r.template||yi(e).template;if(o){const{isCustomElement:i,compilerOptions:l}=e.appContext.config,{delimiters:a,compilerOptions:s}=r,c=Oe(Oe({isCustomElement:i,delimiters:a},l),s);r.render=pl(o,c)}}e.render=r.render||gt}{Ln(e),Dn();try{Sf(e)}finally{Sn(),nn()}}}function ad(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return He(e,"get","$attrs"),t[n]}}))}function sd(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return ad(e)},slots:e.slots,emit:e.emit,expose:t}}function Ai(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Ca(xa(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Zn)return Zn[n](e)},has(t,n){return n in t||n in Zn}}))}function cd(e,t=!0){return oe(e)?e.displayName||e.name:e.name||t&&e.__name}function ud(e){return oe(e)&&"__vccOpts"in e}const I=(e,t)=>lf(e,t,Pn);function u(e,t,n){const r=arguments.length;return r===2?Te(t)&&!X(t)?Ho(t)?Ce(e,null,[t]):Ce(e,t):Ce(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Ho(n)&&(n=[n]),Ce(e,t,n))}const fd=Symbol.for("v-scx"),dd=()=>_e(fd),pd="3.3.10",hd="http://www.w3.org/2000/svg",Qt=typeof document<"u"?document:null,hl=Qt&&Qt.createElement("template"),vd={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t?Qt.createElementNS(hd,e):Qt.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>Qt.createTextNode(e),createComment:e=>Qt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Qt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,i){const l=n?n.previousSibling:t.lastChild;if(o&&(o===i||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===i||!(o=o.nextSibling)););else{hl.innerHTML=r?`${e}`:e;const a=hl.content;if(r){const s=a.firstChild;for(;s.firstChild;)a.appendChild(s.firstChild);a.removeChild(s)}t.insertBefore(a,n)}return[l?l.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Mt="transition",Hn="animation",Rn=Symbol("_vtc"),xt=(e,{slots:t})=>u(Tf,cs(e),t);xt.displayName="Transition";const ss={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},md=xt.props=Oe({},Wa,ss),Gt=(e,t=[])=>{X(e)?e.forEach(n=>n(...t)):e&&e(...t)},vl=e=>e?X(e)?e.some(t=>t.length>1):e.length>1:!1;function cs(e){const t={};for(const H in e)H in ss||(t[H]=e[H]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:i=`${n}-enter-from`,enterActiveClass:l=`${n}-enter-active`,enterToClass:a=`${n}-enter-to`,appearFromClass:s=i,appearActiveClass:c=l,appearToClass:f=a,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:m=`${n}-leave-to`}=e,g=_d(o),w=g&&g[0],T=g&&g[1],{onBeforeEnter:y,onEnter:P,onEnterCancelled:b,onLeave:A,onLeaveCancelled:M,onBeforeAppear:k=y,onAppear:z=P,onAppearCancelled:V=b}=t,S=(H,ee,we)=>{zt(H,ee?f:a),zt(H,ee?c:l),we&&we()},B=(H,ee)=>{H._isLeaving=!1,zt(H,d),zt(H,m),zt(H,p),ee&&ee()},Z=H=>(ee,we)=>{const ye=H?z:P,q=()=>S(ee,H,we);Gt(ye,[ee,q]),ml(()=>{zt(ee,H?s:i),Tt(ee,H?f:a),vl(ye)||_l(ee,r,w,q)})};return Oe(t,{onBeforeEnter(H){Gt(y,[H]),Tt(H,i),Tt(H,l)},onBeforeAppear(H){Gt(k,[H]),Tt(H,s),Tt(H,c)},onEnter:Z(!1),onAppear:Z(!0),onLeave(H,ee){H._isLeaving=!0;const we=()=>B(H,ee);Tt(H,d),fs(),Tt(H,p),ml(()=>{H._isLeaving&&(zt(H,d),Tt(H,m),vl(A)||_l(H,r,T,we))}),Gt(A,[H,we])},onEnterCancelled(H){S(H,!1),Gt(b,[H])},onAppearCancelled(H){S(H,!0),Gt(V,[H])},onLeaveCancelled(H){B(H),Gt(M,[H])}})}function _d(e){if(e==null)return null;if(Te(e))return[_o(e.enter),_o(e.leave)];{const t=_o(e);return[t,t]}}function _o(e){return Eu(e)}function Tt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Rn]||(e[Rn]=new Set)).add(t)}function zt(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Rn];n&&(n.delete(t),n.size||(e[Rn]=void 0))}function ml(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let gd=0;function _l(e,t,n,r){const o=e._endId=++gd,i=()=>{o===e._endId&&r()};if(n)return setTimeout(i,n);const{type:l,timeout:a,propCount:s}=us(e,t);if(!l)return r();const c=l+"end";let f=0;const d=()=>{e.removeEventListener(c,p),i()},p=m=>{m.target===e&&++f>=s&&d()};setTimeout(()=>{f(n[g]||"").split(", "),o=r(`${Mt}Delay`),i=r(`${Mt}Duration`),l=gl(o,i),a=r(`${Hn}Delay`),s=r(`${Hn}Duration`),c=gl(a,s);let f=null,d=0,p=0;t===Mt?l>0&&(f=Mt,d=l,p=i.length):t===Hn?c>0&&(f=Hn,d=c,p=s.length):(d=Math.max(l,c),f=d>0?l>c?Mt:Hn:null,p=f?f===Mt?i.length:s.length:0);const m=f===Mt&&/\b(transform|all)(,|$)/.test(r(`${Mt}Property`).toString());return{type:f,timeout:d,propCount:p,hasTransform:m}}function gl(e,t){for(;e.lengthbl(n)+bl(e[r])))}function bl(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function fs(){return document.body.offsetHeight}function bd(e,t,n){const r=e[Rn];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const yd=Symbol("_vod");function Ed(e,t,n){const r=e.style,o=ue(n);if(n&&!o){if(t&&!ue(t))for(const i in t)n[i]==null&&jo(r,i,"");for(const i in n)jo(r,i,n[i])}else{const i=r.display;o?t!==n&&(r.cssText=n):t&&e.removeAttribute("style"),yd in e&&(r.display=i)}}const yl=/\s*!important$/;function jo(e,t,n){if(X(n))n.forEach(r=>jo(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=wd(e,t);yl.test(n)?e.setProperty(Cn(r),n.replace(yl,""),"important"):e[r]=n}}const El=["Webkit","Moz","ms"],go={};function wd(e,t){const n=go[t];if(n)return n;let r=rt(t);if(r!=="filter"&&r in e)return go[t]=r;r=fr(r);for(let o=0;obo||(Od.then(()=>bo=0),bo=Date.now());function kd(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;tt(Cd(r,n.value),t,5,[r])};return n.value=e,n.attached=xd(),n}function Cd(e,t){if(X(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r&&r(o))}else return t}const Ll=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Dd=(e,t,n,r,o=!1,i,l,a,s)=>{t==="class"?bd(e,r,o):t==="style"?Ed(e,n,r):ur(t)?ri(t)||Rd(e,t,n,r,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Sd(e,t,r,o))?Ad(e,t,r,i,l,a,s):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Td(e,t,r,o))};function Sd(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&Ll(t)&&oe(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;return!(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")}return Ll(t)&&ue(n)?!1:t in e}const ds=new WeakMap,ps=new WeakMap,jr=Symbol("_moveCb"),Pl=Symbol("_enterCb"),hs={name:"TransitionGroup",props:Oe({},md,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Vn(),r=ja();let o,i;return Ka(()=>{if(!o.length)return;const l=e.moveClass||`${e.name||"v"}-move`;if(!Bd(o[0].el,n.vnode.el,l))return;o.forEach($d),o.forEach(zd);const a=o.filter(Nd);fs(),a.forEach(s=>{const c=s.el,f=c.style;Tt(c,l),f.transform=f.webkitTransform=f.transitionDuration="";const d=c[jr]=p=>{p&&p.target!==c||(!p||/transform$/.test(p.propertyName))&&(c.removeEventListener("transitionend",d),c[jr]=null,zt(c,l))};c.addEventListener("transitionend",d)})}),()=>{const l=le(e),a=cs(l);let s=l.tag||Ke;o=i,i=t.default?gi(t.default()):[];for(let c=0;cdelete e.mode;hs.props;const Md=hs;function $d(e){const t=e.el;t[jr]&&t[jr](),t[Pl]&&t[Pl]()}function zd(e){ps.set(e,e.el.getBoundingClientRect())}function Nd(e){const t=ds.get(e),n=ps.get(e),r=t.left-n.left,o=t.top-n.top;if(r||o){const i=e.el.style;return i.transform=i.webkitTransform=`translate(${r}px,${o}px)`,i.transitionDuration="0s",e}}function Bd(e,t,n){const r=e.cloneNode(),o=e[Rn];o&&o.forEach(a=>{a.split(/\s+/).forEach(s=>s&&r.classList.remove(s))}),n.split(/\s+/).forEach(a=>a&&r.classList.add(a)),r.style.display="none";const i=t.nodeType===1?t:t.parentNode;i.appendChild(r);const{hasTransform:l}=us(r);return i.removeChild(r),l}const Fd=Oe({patchProp:Dd},vd);let yo,Rl=!1;function Hd(){return yo=Rl?yo:Kf(Fd),Rl=!0,yo}const jd=(...e)=>{const t=Hd().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=Wd(r);if(o)return n(o,!0,o instanceof SVGElement)},t};function Wd(e){return ue(e)?document.querySelector(e):e}const qd="modulepreload",Ud=function(e){return"/"+e},Il={},h=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){const i=document.getElementsByTagName("link");o=Promise.all(n.map(l=>{if(l=Ud(l),l in Il)return;Il[l]=!0;const a=l.endsWith(".css"),s=a?'[rel="stylesheet"]':"";if(!!r)for(let d=i.length-1;d>=0;d--){const p=i[d];if(p.href===l&&(!a||p.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${l}"]${s}`))return;const f=document.createElement("link");if(f.rel=a?"stylesheet":qd,a||(f.as="script",f.crossOrigin=""),f.href=l,document.head.appendChild(f),a)return new Promise((d,p)=>{f.addEventListener("load",d),f.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${l}`)))})}))}return o.then(()=>t()).catch(i=>{const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=i,window.dispatchEvent(l),!l.defaultPrevented)throw i})},Kd={"v-8daa1a0e":()=>h(()=>import("./index.html-Oh37e22D.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-fffb8e28":()=>h(()=>import("./index.html-ohZtz6Fw.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-43c96c34":()=>h(()=>import("./collaborative_projects.html-15UQQvPG.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-17f2914c":()=>h(()=>import("./contact.html-XWW2pZ29.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-07f943d9":()=>h(()=>import("./license.html-onnWhI1X.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-9e2e7e22":()=>h(()=>import("./thanks.html--KuWuTSm.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-1d3d20e2":()=>h(()=>import("./use_cases.html-C-cj_NSV.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-639495b8":()=>h(()=>import("./index.html-PiOevGXi.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-2d0ad528":()=>h(()=>import("./index.html-A9z0_Hu7.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-58ff8a76":()=>h(()=>import("./index.html-qi3PncfW.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-07e28fb7":()=>h(()=>import("./oncetoken.html-JcsefotR.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-5d588a76":()=>h(()=>import("./index.html-Acfu-WyI.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-67fe8904":()=>h(()=>import("./not_recommended_qq.html-g8E5V1Ie.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-9ef794be":()=>h(()=>import("./rtmp_playback_compatibility_issues.html-5avJPHVo.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-26771ae0":()=>h(()=>import("./index.html-Pl0D5fWX.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-7c5f89f1":()=>h(()=>import("./compilation_instructions_for_windows_version.html-xl0PwINJ.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-2a95408c":()=>h(()=>import("./install_zlmediakit_using_vcpkg.html-4lMDCmIH.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-410226d2":()=>h(()=>import("./start.html-I4A7uS59.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-1a355af6":()=>h(()=>import("./index.html-TLmaTaqK.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-f17856b6":()=>h(()=>import("./config_file.html-5j1Bx0Jx.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-326b1b06":()=>h(()=>import("./generate_ssl_self-signed_certificate_and_test.html-qSLRuImw.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-f90651dc":()=>h(()=>import("./how_to_enable_https_related_functions.html-fcJ6Uozv.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-629229d1":()=>h(()=>import("./on-demand_push_streaming.html-kP6TQb2_.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-a3ed6f7c":()=>h(()=>import("./on-demand_streaming.html-2DvN-m5K.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-22d780d8":()=>h(()=>import("./play_url_rules.html-LU-zd-xr.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-40777a42":()=>h(()=>import("./playback_authentication.html-wjgI-Yj5.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-1c8baf7e":()=>h(()=>import("./push_authentication.html-qlfLynHw.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-d003c332":()=>h(()=>import("./push_test.html-gnFrDUbt.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-992f244c":()=>h(()=>import("./restful_api.html-vpWQQrW9.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-1563923f":()=>h(()=>import("./sequence_diagram.html-yqJJFxQH.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3f9e2b34":()=>h(()=>import("./start_server.html-fcMybRlu.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-4436fd0b":()=>h(()=>import("./web_hook_api.html-adtpDhAG.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-fa0f55aa":()=>h(()=>import("./index.html-m59LkreQ.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-5d4ca3be":()=>h(()=>import("./index.html-XiIyF-Mz.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-29126422":()=>h(()=>import("./how_to_create_a_live_steam.html-Gq2b9Yi0.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-b1256428":()=>h(()=>import("./index.html-LSqTAwnp.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-099b9809":()=>h(()=>import("./hls_high_performance_journey.html-bBajAqE1.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-c75d9fee":()=>h(()=>import("./rtsp_performance_optimization.html-XwSQReWx.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-27716634":()=>h(()=>import("./index.html-3Pe7G9Sl.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3d1bfe27":()=>h(()=>import("./exclusive_features.html-2siFVq2G.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-61f35635":()=>h(()=>import("./high_concurrency_implementation_principle.html-opQWc8aM.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-60e3ff20":()=>h(()=>import("./introduction_to_streaming_media_related_technologies.html-O53gIrdK.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-716fbfe3":()=>h(()=>import("./rtsp_push_process.html-eeithr0y.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-159648d6":()=>h(()=>import("./the_nature_of_live_broadcast_delay.html-bGwDwg8A.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-07cf6867":()=>h(()=>import("./index.html-yjc28uoP.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-2894bdb2":()=>h(()=>import("./dependency.html-OQ3SkmA_.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-630bfad5":()=>h(()=>import("./rtmp_support_for_h265_and_opus.html-f4aPfFot.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-a9be237a":()=>h(()=>import("./video_conferencing_related_resources.html-1ZPXoBfM.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-770cb196":()=>h(()=>import("./zltoolkit_source_code_study_notes.html-XyGnG3Jc.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-60c5ec00":()=>h(()=>import("./index.html-Hvr1twkc.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-7cf84008":()=>h(()=>import("./benchmark.html-xQUFyhUw.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-d8f6ac6a":()=>h(()=>import("./delay_test.html-_QomqbNh.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-adc6a8e4":()=>h(()=>import("./how_to_test_delay.html-GlLjeJYr.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-ea3f92ca":()=>h(()=>import("./online_test.html-osni6C75.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-210a0a78":()=>h(()=>import("./performance_testing.html-DQL8Y_0H.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-27157219":()=>h(()=>import("./rtmp_pull_stream_performance_test.html-HQ4fzTKd.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-927f8538":()=>h(()=>import("./rtmp_push_stream_performance_test.html-BY1UVNB2.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3ede775a":()=>h(()=>import("./rtsp_pull_stream_performance_test.html-9hA9_SB-.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-703b8f9e":()=>h(()=>import("./rtsp_push_stream_performance_test.html-3UQhsyo8.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-47357bdb":()=>h(()=>import("./index.html-Q1OCSdNr.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-0a3cd263":()=>h(()=>import("./collaborative_projects.html-gRvZJ2_P.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-8b20cdea":()=>h(()=>import("./contact.html-nPftNmfa.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-633bb4ec":()=>h(()=>import("./license.html-ptTdZQ9a.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-4bf4651e":()=>h(()=>import("./thanks.html-eseVCxC7.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-7dceae00":()=>h(()=>import("./use_cases.html-nlOjewQC.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-ec228f2e":()=>h(()=>import("./index.html-GEt_McOE.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-cb3c3b8e":()=>h(()=>import("./gb28181_sip_signaling_packet_capture.html-_63zZLPQ.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-6fbaec55":()=>h(()=>import("./how_to_use_device_id_as_stream_id.html-ga4UcAIh.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-079ebd6a":()=>h(()=>import("./push_streaming.html-Z4VDPPfI.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-114c6ef6":()=>h(()=>import("./index.html-Rh0erDOb.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-d73f5e1e":()=>h(()=>import("./webrtc_compilation_and_use.html-u4uYYnLr.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-284ed9d6":()=>h(()=>import("./webrtc_signaling_interaction_format.html-TjrAUdNc.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-515bc4e7":()=>h(()=>import("./index.html-jVaUOSmI.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-e1a99f30":()=>h(()=>import("./oncetoken.html-LPckM_ZY.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-763dee34":()=>h(()=>import("./index.html-X7WU_LPV.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-6ff7e8b5":()=>h(()=>import("./not_recommended_qq.html-Od4ztKJy.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-75521352":()=>h(()=>import("./rtmp_playback_compatibility_issues.html-RzirVjbt.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-1b2bfecf":()=>h(()=>import("./index.html-BzbKxypT.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3c49c43c":()=>h(()=>import("./compilation_instructions_for_windows_version.html-Hq0AuZTz.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-2139c386":()=>h(()=>import("./install_zlmediakit_using_vcpkg.html-lJ__kZwE.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-4f36f1c6":()=>h(()=>import("./start.html-Jyh7sq9I.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-7ac6e814":()=>h(()=>import("./index.html-qjMVLXfF.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-76640c16":()=>h(()=>import("./config_file.html-i3ELg7s5.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-04c98dae":()=>h(()=>import("./generate_ssl_self-signed_certificate_and_test.html-7V6eG0vA.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-fc02997a":()=>h(()=>import("./how_to_enable_https_related_functions.html-mO3jYJnY.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-60a95200":()=>h(()=>import("./on-demand_push_streaming.html-crgN24-s.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-b991029a":()=>h(()=>import("./on-demand_streaming.html-5SBDxVes.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-78eb47c7":()=>h(()=>import("./play_url_rules.html-_eahSglS.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-2459df9a":()=>h(()=>import("./playback_authentication.html-arMfpj8D.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-322f429c":()=>h(()=>import("./push_authentication.html-8JQfqi5E.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-c01103d0":()=>h(()=>import("./push_test.html-rQVB769L.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-baeeb56a":()=>h(()=>import("./restful_api.html-Xx1SUrzX.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-35a1596e":()=>h(()=>import("./sequence_diagram.html-y7tfUv_v.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3484e1e3":()=>h(()=>import("./start_server.html-rADXsgsy.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-391db3ba":()=>h(()=>import("./web_hook_api.html-F_kUu3X6.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-24dfef1c":()=>h(()=>import("./index.html-4qXHK4Yu.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-7643e190":()=>h(()=>import("./index.html-lHFYswhu.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-5a1c26c0":()=>h(()=>import("./how_to_create_a_live_steam.html-FHwnpSdN.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-0938c35b":()=>h(()=>import("./index.html-CojxHtZz.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-5298cc7a":()=>h(()=>import("./hls_high_performance_journey.html-bLztstJM.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-72fa89b8":()=>h(()=>import("./rtsp_performance_optimization.html-N4V23aKI.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-4ea15ae3":()=>h(()=>import("./index.html-943vkdnv.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-324a3498":()=>h(()=>import("./exclusive_features.html-wTOG2Bjt.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-09d870a4":()=>h(()=>import("./high_concurrency_implementation_principle.html-sl-nIpjv.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-175b5aa1":()=>h(()=>import("./introduction_to_streaming_media_related_technologies.html-uFhGEBGc.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-79587752":()=>h(()=>import("./rtsp_push_process.html-MSFA7pR8.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3e321006":()=>h(()=>import("./the_nature_of_live_broadcast_delay.html--_Oe6F80.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-2eff5d16":()=>h(()=>import("./index.html-oRdX7laQ.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-4a544ed0":()=>h(()=>import("./dependency.html-vliHx4sJ.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-2321e074":()=>h(()=>import("./rtmp_support_for_h265_and_opus.html-tX2acU7J.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-acba6b18":()=>h(()=>import("./video_conferencing_related_resources.html-Da8l8FFw.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-164eab05":()=>h(()=>import("./zltoolkit_source_code_study_notes.html-vFvvg7fr.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-7184a3f1":()=>h(()=>import("./index.html-Zl8OD7vu.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3d3ac02d":()=>h(()=>import("./benchmark.html-MSc66SxZ.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-e2ac608c":()=>h(()=>import("./delay_test.html-dT3kgdCj.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-510ccabf":()=>h(()=>import("./how_to_test_delay.html-ubjyw-PC.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-174062e8":()=>h(()=>import("./online_test.html-8_GcpcRF.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-e521bd2e":()=>h(()=>import("./performance_testing.html-wMvwmLu0.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-1d29e16c":()=>h(()=>import("./rtmp_pull_stream_performance_test.html-_aYV-qZf.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-fdd44ad6":()=>h(()=>import("./rtmp_push_stream_performance_test.html-AxJYj-3i.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-aa333cf8":()=>h(()=>import("./rtsp_pull_stream_performance_test.html-2yov4QZH.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3a912ccf":()=>h(()=>import("./rtsp_push_stream_performance_test.html-g2X0PP_e.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-374e6730":()=>h(()=>import("./gb28181_sip_signaling_packet_capture.html-dSB5oqMq.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-6e3cc886":()=>h(()=>import("./how_to_use_device_id_as_stream_id.html-_vNSGfoU.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-041958ba":()=>h(()=>import("./push_streaming.html-5MzKBCwx.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-71ddfc14":()=>h(()=>import("./index.html-l-9Jcb0Z.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-5eb5ee22":()=>h(()=>import("./webrtc_compilation_and_use.html-zmvb9by4.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-84db85f8":()=>h(()=>import("./webrtc_signaling_interaction_format.html-RSBHyl7A.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3706649a":()=>h(()=>import("./404.html-aQJ09P_F.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-14f73021":()=>h(()=>import("./index.html-VsukZOSA.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-22a2f9fd":()=>h(()=>import("./index.html-Y6Zxo28x.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-2be85352":()=>h(()=>import("./index.html-LLxB5nrB.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-0f8c4891":()=>h(()=>import("./index.html-QQRRY2d0.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-35ba27b7":()=>h(()=>import("./index.html-8RsIN7Qj.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-70e5a528":()=>h(()=>import("./index.html-MI_McXZr.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-55376182":()=>h(()=>import("./index.html-c0NLam4o.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-50bfaca6":()=>h(()=>import("./index.html-Dj-Byo33.js"),__vite__mapDeps([])).then(({data:e})=>e)},Gd=JSON.parse('{"base":"/","lang":"en-US","title":"","description":"","head":[["link",{"rel":"icon","href":"/favicon.ico"}],["link",{"rel":"icon","href":"/assets/icon/chrome-192.png","type":"image/png","sizes":"192x192"}],["link",{"rel":"manifest","href":"/manifest.webmanifest","crossorigin":"use-credentials"}],["meta",{"name":"theme-color","content":"#46bd87"}],["link",{"rel":"apple-touch-icon","href":"/assets/icon/apple-touch-icon-152x152.png"}],["meta",{"name":"apple-mobile-web-app-capable","content":"yes"}],["meta",{"name":"apple-mobile-web-app-status-bar-style","content":"black"}],["meta",{"name":"msapplication-TileImage","content":"/assets/icon/ms-icon-144.png"}],["meta",{"name":"msapplication-TileColor","content":"#ffffff"}],["meta",{"name":"viewport","content":"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover"}]],"locales":{"/":{"lang":"en-US","title":"ZLMediaKit","description":"Official documentation for ZLMediaKit"},"/zh/":{"lang":"zh-CN","title":"ZLMediaKit","description":"ZLMediaKit 官方文档"}}}');var Yd=([e,t,n])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,n]),Zd=e=>{const t=new Set,n=[];return e.forEach(r=>{const o=Yd(r);t.has(o)||(t.add(o),n.push(r))}),n},Qd=e=>e[0]==="/"?e:`/${e}`,vs=e=>e[e.length-1]==="/"||e.endsWith(".html")?e:`${e}/`,Mn=e=>/^(https?:)?\/\//.test(e),Jd=/.md((\?|#).*)?$/,Wr=(e,t="/")=>!!(Mn(e)||e.startsWith("/")&&!e.startsWith(t)&&!Jd.test(e)),ms=e=>/^[a-z][a-z0-9+.-]*:/.test(e),Li=e=>Object.prototype.toString.call(e)==="[object Object]",Pi=e=>e[e.length-1]==="/"?e.slice(0,-1):e,_s=e=>e[0]==="/"?e.slice(1):e,Xd=(e,t)=>{const n=Object.keys(e).sort((r,o)=>{const i=o.split("/").length-r.split("/").length;return i!==0?i:o.length-r.length});for(const r of n)if(t.startsWith(r))return r;return"/"};const gs={"v-8daa1a0e":L(()=>h(()=>import("./index.html-lsbyji4m.js"),__vite__mapDeps([0,1]))),"v-fffb8e28":L(()=>h(()=>import("./index.html-1gY9nmEU.js"),__vite__mapDeps([2,1]))),"v-43c96c34":L(()=>h(()=>import("./collaborative_projects.html-F54TwnSU.js"),__vite__mapDeps([3,1]))),"v-17f2914c":L(()=>h(()=>import("./contact.html-F5mmsRL_.js"),__vite__mapDeps([4,1]))),"v-07f943d9":L(()=>h(()=>import("./license.html-RX6EoCn0.js"),__vite__mapDeps([5,1]))),"v-9e2e7e22":L(()=>h(()=>import("./thanks.html-uU2jemjd.js"),__vite__mapDeps([6,1]))),"v-1d3d20e2":L(()=>h(()=>import("./use_cases.html-lHSo0w28.js"),__vite__mapDeps([7,1]))),"v-639495b8":L(()=>h(()=>import("./index.html-BIyNRXIT.js"),__vite__mapDeps([8,9,1]))),"v-2d0ad528":L(()=>h(()=>import("./index.html-nYslRDbi.js"),__vite__mapDeps([10,1]))),"v-58ff8a76":L(()=>h(()=>import("./index.html-HiksATK8.js"),__vite__mapDeps([11,1]))),"v-07e28fb7":L(()=>h(()=>import("./oncetoken.html-0LGtefKi.js"),__vite__mapDeps([12,1]))),"v-5d588a76":L(()=>h(()=>import("./index.html-sVMJ39Ap.js"),__vite__mapDeps([13,1]))),"v-67fe8904":L(()=>h(()=>import("./not_recommended_qq.html-SK9_7gOI.js"),__vite__mapDeps([14,1]))),"v-9ef794be":L(()=>h(()=>import("./rtmp_playback_compatibility_issues.html-h5lBk1EY.js"),__vite__mapDeps([15,1]))),"v-26771ae0":L(()=>h(()=>import("./index.html-AQj9nIQS.js"),__vite__mapDeps([16,1]))),"v-7c5f89f1":L(()=>h(()=>import("./compilation_instructions_for_windows_version.html-B01AYnQQ.js"),__vite__mapDeps([17,1]))),"v-2a95408c":L(()=>h(()=>import("./install_zlmediakit_using_vcpkg.html-hSrbYLMY.js"),__vite__mapDeps([18,19,1]))),"v-410226d2":L(()=>h(()=>import("./start.html-6kI24E98.js"),__vite__mapDeps([20,9,1]))),"v-1a355af6":L(()=>h(()=>import("./index.html-wOzz5n--.js"),__vite__mapDeps([21,1]))),"v-f17856b6":L(()=>h(()=>import("./config_file.html-nDM3m-gp.js"),__vite__mapDeps([22,1]))),"v-326b1b06":L(()=>h(()=>import("./generate_ssl_self-signed_certificate_and_test.html-KPuMmQeO.js"),__vite__mapDeps([23,24,1]))),"v-f90651dc":L(()=>h(()=>import("./how_to_enable_https_related_functions.html-VEGoh4jE.js"),__vite__mapDeps([25,26,1]))),"v-629229d1":L(()=>h(()=>import("./on-demand_push_streaming.html-UrbeRghD.js"),__vite__mapDeps([27,28,1]))),"v-a3ed6f7c":L(()=>h(()=>import("./on-demand_streaming.html-nFxU5UDk.js"),__vite__mapDeps([29,30,1]))),"v-22d780d8":L(()=>h(()=>import("./play_url_rules.html-lTCmvIjW.js"),__vite__mapDeps([31,1]))),"v-40777a42":L(()=>h(()=>import("./playback_authentication.html-TBCUOtoI.js"),__vite__mapDeps([32,33,1]))),"v-1c8baf7e":L(()=>h(()=>import("./push_authentication.html-w6czo8pV.js"),__vite__mapDeps([34,35,1]))),"v-d003c332":L(()=>h(()=>import("./push_test.html-MSIBzphj.js"),__vite__mapDeps([36,37,1]))),"v-992f244c":L(()=>h(()=>import("./restful_api.html-pwLlZzjg.js"),__vite__mapDeps([38,1]))),"v-1563923f":L(()=>h(()=>import("./sequence_diagram.html-9KpjQs_B.js"),__vite__mapDeps([39,1]))),"v-3f9e2b34":L(()=>h(()=>import("./start_server.html-EcCCtjYj.js"),__vite__mapDeps([40,41,1]))),"v-4436fd0b":L(()=>h(()=>import("./web_hook_api.html-DDD36REX.js"),__vite__mapDeps([42,1]))),"v-fa0f55aa":L(()=>h(()=>import("./index.html-H5ajPWzC.js"),__vite__mapDeps([43,1]))),"v-5d4ca3be":L(()=>h(()=>import("./index.html-wRo-8kqz.js"),__vite__mapDeps([44,1]))),"v-29126422":L(()=>h(()=>import("./how_to_create_a_live_steam.html-xouuZa47.js"),__vite__mapDeps([45,46,1]))),"v-b1256428":L(()=>h(()=>import("./index.html-MCTXxKe2.js"),__vite__mapDeps([47,1]))),"v-099b9809":L(()=>h(()=>import("./hls_high_performance_journey.html-sIjCrFa8.js"),__vite__mapDeps([48,1]))),"v-c75d9fee":L(()=>h(()=>import("./rtsp_performance_optimization.html-Fk8ai5fo.js"),__vite__mapDeps([49,1]))),"v-27716634":L(()=>h(()=>import("./index.html-mmNwkX1L.js"),__vite__mapDeps([50,1]))),"v-3d1bfe27":L(()=>h(()=>import("./exclusive_features.html-q7ecjqC1.js"),__vite__mapDeps([51,1]))),"v-61f35635":L(()=>h(()=>import("./high_concurrency_implementation_principle.html-Bqhl-32O.js"),__vite__mapDeps([52,1]))),"v-60e3ff20":L(()=>h(()=>import("./introduction_to_streaming_media_related_technologies.html-I9N-fJX2.js"),__vite__mapDeps([53,1]))),"v-716fbfe3":L(()=>h(()=>import("./rtsp_push_process.html-Xg9db3f1.js"),__vite__mapDeps([54,1]))),"v-159648d6":L(()=>h(()=>import("./the_nature_of_live_broadcast_delay.html-KHnxiXxs.js"),__vite__mapDeps([55,1]))),"v-07cf6867":L(()=>h(()=>import("./index.html-HffK__w0.js"),__vite__mapDeps([56,1]))),"v-2894bdb2":L(()=>h(()=>import("./dependency.html-bJgf-XNv.js"),__vite__mapDeps([57,1]))),"v-630bfad5":L(()=>h(()=>import("./rtmp_support_for_h265_and_opus.html-KlA1IkKx.js"),__vite__mapDeps([58,1]))),"v-a9be237a":L(()=>h(()=>import("./video_conferencing_related_resources.html-AS8_6dZk.js"),__vite__mapDeps([59,1]))),"v-770cb196":L(()=>h(()=>import("./zltoolkit_source_code_study_notes.html-rBGfF-Ka.js"),__vite__mapDeps([60,1]))),"v-60c5ec00":L(()=>h(()=>import("./index.html-wqut89jq.js"),__vite__mapDeps([61,1]))),"v-7cf84008":L(()=>h(()=>import("./benchmark.html-98ulTadG.js"),__vite__mapDeps([62,1]))),"v-d8f6ac6a":L(()=>h(()=>import("./delay_test.html-0tF1gV92.js"),__vite__mapDeps([63,1]))),"v-adc6a8e4":L(()=>h(()=>import("./how_to_test_delay.html-qIkqT7X0.js"),__vite__mapDeps([64,1]))),"v-ea3f92ca":L(()=>h(()=>import("./online_test.html-B0vGk4Ng.js"),__vite__mapDeps([65,1]))),"v-210a0a78":L(()=>h(()=>import("./performance_testing.html-LDuN76e5.js"),__vite__mapDeps([66,1]))),"v-27157219":L(()=>h(()=>import("./rtmp_pull_stream_performance_test.html-biPYYmB-.js"),__vite__mapDeps([67,1]))),"v-927f8538":L(()=>h(()=>import("./rtmp_push_stream_performance_test.html-9WCFfRY7.js"),__vite__mapDeps([68,1]))),"v-3ede775a":L(()=>h(()=>import("./rtsp_pull_stream_performance_test.html-_t28Fr8s.js"),__vite__mapDeps([69,1]))),"v-703b8f9e":L(()=>h(()=>import("./rtsp_push_stream_performance_test.html-y53Byttn.js"),__vite__mapDeps([70,1]))),"v-47357bdb":L(()=>h(()=>import("./index.html-puiRG_tj.js"),__vite__mapDeps([71,1]))),"v-0a3cd263":L(()=>h(()=>import("./collaborative_projects.html-pOhMHRMF.js"),__vite__mapDeps([72,1]))),"v-8b20cdea":L(()=>h(()=>import("./contact.html-inPGOeaD.js"),__vite__mapDeps([73,1]))),"v-633bb4ec":L(()=>h(()=>import("./license.html-UJLTmREW.js"),__vite__mapDeps([74,1]))),"v-4bf4651e":L(()=>h(()=>import("./thanks.html-F1DFxuQI.js"),__vite__mapDeps([75,1]))),"v-7dceae00":L(()=>h(()=>import("./use_cases.html-NGOdBBIO.js"),__vite__mapDeps([76,1]))),"v-ec228f2e":L(()=>h(()=>import("./index.html-EkebsPUs.js"),__vite__mapDeps([77,9,1]))),"v-cb3c3b8e":L(()=>h(()=>import("./gb28181_sip_signaling_packet_capture.html-P96Mkrz9.js"),__vite__mapDeps([78,1]))),"v-6fbaec55":L(()=>h(()=>import("./how_to_use_device_id_as_stream_id.html-yEpxw4_B.js"),__vite__mapDeps([79,80,1]))),"v-079ebd6a":L(()=>h(()=>import("./push_streaming.html-5CuTTppH.js"),__vite__mapDeps([81,82,1]))),"v-114c6ef6":L(()=>h(()=>import("./index.html-QZwQ-TVg.js"),__vite__mapDeps([83,1]))),"v-d73f5e1e":L(()=>h(()=>import("./webrtc_compilation_and_use.html-3Wgq1AT7.js"),__vite__mapDeps([84,1]))),"v-284ed9d6":L(()=>h(()=>import("./webrtc_signaling_interaction_format.html-z1sc5Nd0.js"),__vite__mapDeps([85,1]))),"v-515bc4e7":L(()=>h(()=>import("./index.html-qTt3LMQa.js"),__vite__mapDeps([86,1]))),"v-e1a99f30":L(()=>h(()=>import("./oncetoken.html-MCJaY58Y.js"),__vite__mapDeps([87,1]))),"v-763dee34":L(()=>h(()=>import("./index.html-q-mTP89g.js"),__vite__mapDeps([88,1]))),"v-6ff7e8b5":L(()=>h(()=>import("./not_recommended_qq.html-_--W0-VY.js"),__vite__mapDeps([89,1]))),"v-75521352":L(()=>h(()=>import("./rtmp_playback_compatibility_issues.html-CmMs82Q4.js"),__vite__mapDeps([90,1]))),"v-1b2bfecf":L(()=>h(()=>import("./index.html-NvUp90i0.js"),__vite__mapDeps([91,1]))),"v-3c49c43c":L(()=>h(()=>import("./compilation_instructions_for_windows_version.html-qtHU9-nX.js"),__vite__mapDeps([92,1]))),"v-2139c386":L(()=>h(()=>import("./install_zlmediakit_using_vcpkg.html-RuAB6C5H.js"),__vite__mapDeps([93,19,1]))),"v-4f36f1c6":L(()=>h(()=>import("./start.html-uDyezAWa.js"),__vite__mapDeps([94,9,1]))),"v-7ac6e814":L(()=>h(()=>import("./index.html-c9Q-kbo9.js"),__vite__mapDeps([95,1]))),"v-76640c16":L(()=>h(()=>import("./config_file.html-sJf41F3S.js"),__vite__mapDeps([96,1]))),"v-04c98dae":L(()=>h(()=>import("./generate_ssl_self-signed_certificate_and_test.html-XP7q2oT5.js"),__vite__mapDeps([97,24,1]))),"v-fc02997a":L(()=>h(()=>import("./how_to_enable_https_related_functions.html-mTX-D-oH.js"),__vite__mapDeps([98,26,1]))),"v-60a95200":L(()=>h(()=>import("./on-demand_push_streaming.html-YM_cjoRG.js"),__vite__mapDeps([99,28,1]))),"v-b991029a":L(()=>h(()=>import("./on-demand_streaming.html-iLkNMoAM.js"),__vite__mapDeps([100,30,1]))),"v-78eb47c7":L(()=>h(()=>import("./play_url_rules.html-k15nwlze.js"),__vite__mapDeps([101,1]))),"v-2459df9a":L(()=>h(()=>import("./playback_authentication.html-GpyuaGt9.js"),__vite__mapDeps([102,33,1]))),"v-322f429c":L(()=>h(()=>import("./push_authentication.html-OUbzb3iO.js"),__vite__mapDeps([103,35,1]))),"v-c01103d0":L(()=>h(()=>import("./push_test.html-HAP8YKRj.js"),__vite__mapDeps([104,37,1]))),"v-baeeb56a":L(()=>h(()=>import("./restful_api.html-0EdVK-2T.js"),__vite__mapDeps([105,1]))),"v-35a1596e":L(()=>h(()=>import("./sequence_diagram.html-mA7gwutk.js"),__vite__mapDeps([106,1]))),"v-3484e1e3":L(()=>h(()=>import("./start_server.html-eoFuSTqV.js"),__vite__mapDeps([107,41,1]))),"v-391db3ba":L(()=>h(()=>import("./web_hook_api.html-I46LUNuG.js"),__vite__mapDeps([108,1]))),"v-24dfef1c":L(()=>h(()=>import("./index.html-GYAMrXS-.js"),__vite__mapDeps([109,1]))),"v-7643e190":L(()=>h(()=>import("./index.html-pPTmba-N.js"),__vite__mapDeps([110,1]))),"v-5a1c26c0":L(()=>h(()=>import("./how_to_create_a_live_steam.html-ekbfwpTl.js"),__vite__mapDeps([111,46,1]))),"v-0938c35b":L(()=>h(()=>import("./index.html-y8X0hE31.js"),__vite__mapDeps([112,1]))),"v-5298cc7a":L(()=>h(()=>import("./hls_high_performance_journey.html-ePp6ZcY7.js"),__vite__mapDeps([113,1]))),"v-72fa89b8":L(()=>h(()=>import("./rtsp_performance_optimization.html-bYm4ov8K.js"),__vite__mapDeps([114,1]))),"v-4ea15ae3":L(()=>h(()=>import("./index.html-l07G40eV.js"),__vite__mapDeps([115,1]))),"v-324a3498":L(()=>h(()=>import("./exclusive_features.html-mvtkr6Zx.js"),__vite__mapDeps([116,1]))),"v-09d870a4":L(()=>h(()=>import("./high_concurrency_implementation_principle.html--R-GXKUV.js"),__vite__mapDeps([117,1]))),"v-175b5aa1":L(()=>h(()=>import("./introduction_to_streaming_media_related_technologies.html-9hb3DfJc.js"),__vite__mapDeps([118,1]))),"v-79587752":L(()=>h(()=>import("./rtsp_push_process.html-u1dV3DYT.js"),__vite__mapDeps([119,1]))),"v-3e321006":L(()=>h(()=>import("./the_nature_of_live_broadcast_delay.html-vfCX1bgp.js"),__vite__mapDeps([120,1]))),"v-2eff5d16":L(()=>h(()=>import("./index.html-w2bXuDTO.js"),__vite__mapDeps([121,1]))),"v-4a544ed0":L(()=>h(()=>import("./dependency.html-mty2X7tk.js"),__vite__mapDeps([122,1]))),"v-2321e074":L(()=>h(()=>import("./rtmp_support_for_h265_and_opus.html-uBU2hKvT.js"),__vite__mapDeps([123,1]))),"v-acba6b18":L(()=>h(()=>import("./video_conferencing_related_resources.html-SX4i-tyB.js"),__vite__mapDeps([124,1]))),"v-164eab05":L(()=>h(()=>import("./zltoolkit_source_code_study_notes.html-ElJi0L0Z.js"),__vite__mapDeps([125,1]))),"v-7184a3f1":L(()=>h(()=>import("./index.html-Q_J0RuMe.js"),__vite__mapDeps([126,1]))),"v-3d3ac02d":L(()=>h(()=>import("./benchmark.html-Nx9hqFos.js"),__vite__mapDeps([127,1]))),"v-e2ac608c":L(()=>h(()=>import("./delay_test.html-ZDGSxDiR.js"),__vite__mapDeps([128,1]))),"v-510ccabf":L(()=>h(()=>import("./how_to_test_delay.html-xmNWiPYK.js"),__vite__mapDeps([129,1]))),"v-174062e8":L(()=>h(()=>import("./online_test.html-kfBFI_bL.js"),__vite__mapDeps([130,1]))),"v-e521bd2e":L(()=>h(()=>import("./performance_testing.html-D5lG5UBD.js"),__vite__mapDeps([131,1]))),"v-1d29e16c":L(()=>h(()=>import("./rtmp_pull_stream_performance_test.html-ANpGb4zw.js"),__vite__mapDeps([132,1]))),"v-fdd44ad6":L(()=>h(()=>import("./rtmp_push_stream_performance_test.html-eR62v-Vt.js"),__vite__mapDeps([133,1]))),"v-aa333cf8":L(()=>h(()=>import("./rtsp_pull_stream_performance_test.html-1iKNM4Ty.js"),__vite__mapDeps([134,1]))),"v-3a912ccf":L(()=>h(()=>import("./rtsp_push_stream_performance_test.html-iJ5a3bwy.js"),__vite__mapDeps([135,1]))),"v-374e6730":L(()=>h(()=>import("./gb28181_sip_signaling_packet_capture.html--EqBn8MM.js"),__vite__mapDeps([136,1]))),"v-6e3cc886":L(()=>h(()=>import("./how_to_use_device_id_as_stream_id.html-a05nZW8g.js"),__vite__mapDeps([137,80,1]))),"v-041958ba":L(()=>h(()=>import("./push_streaming.html-k2pojRSs.js"),__vite__mapDeps([138,82,1]))),"v-71ddfc14":L(()=>h(()=>import("./index.html-jQOvySfo.js"),__vite__mapDeps([139,1]))),"v-5eb5ee22":L(()=>h(()=>import("./webrtc_compilation_and_use.html-FCI8zWK-.js"),__vite__mapDeps([140,1]))),"v-84db85f8":L(()=>h(()=>import("./webrtc_signaling_interaction_format.html-tkZpC3_1.js"),__vite__mapDeps([141,1]))),"v-3706649a":L(()=>h(()=>import("./404.html-xdICDk2y.js"),__vite__mapDeps([142,1]))),"v-14f73021":L(()=>h(()=>import("./index.html-HxIzy8B_.js"),__vite__mapDeps([143,1]))),"v-22a2f9fd":L(()=>h(()=>import("./index.html-c5y0hsti.js"),__vite__mapDeps([144,1]))),"v-2be85352":L(()=>h(()=>import("./index.html-AN1YzPhl.js"),__vite__mapDeps([145,1]))),"v-0f8c4891":L(()=>h(()=>import("./index.html-P9T-kKXm.js"),__vite__mapDeps([146,1]))),"v-35ba27b7":L(()=>h(()=>import("./index.html-sZlBS23H.js"),__vite__mapDeps([147,1]))),"v-70e5a528":L(()=>h(()=>import("./index.html-GpIlvQXn.js"),__vite__mapDeps([148,1]))),"v-55376182":L(()=>h(()=>import("./index.html-_oz2t3vB.js"),__vite__mapDeps([149,1]))),"v-50bfaca6":L(()=>h(()=>import("./index.html-gHhFwdGj.js"),__vite__mapDeps([150,1])))};var ep=Symbol(""),bs=Symbol(""),tp=on({key:"",path:"",title:"",lang:"",frontmatter:{},headers:[]}),de=()=>{const e=_e(bs);if(!e)throw new Error("pageData() is called without provider.");return e},ys=Symbol(""),Le=()=>{const e=_e(ys);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},Es=Symbol(""),np=()=>{const e=_e(Es);if(!e)throw new Error("usePageHead() is called without provider.");return e},rp=Symbol(""),ws=Symbol(""),Ri=()=>{const e=_e(ws);if(!e)throw new Error("usePageLang() is called without provider.");return e},Ts=Symbol(""),op=()=>{const e=_e(Ts);if(!e)throw new Error("usePageLayout() is called without provider.");return e},ip=te(Kd),Ii=Symbol(""),an=()=>{const e=_e(Ii);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},vn=te(Gd),As=()=>vn,Ls=Symbol(""),no=()=>{const e=_e(Ls);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},lp=Symbol(""),ap="Layout",sp="NotFound",At=dr({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageData:async e=>{const t=ip.value[e];return await(t==null?void 0:t())??tp},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,n)=>{const r=ue(t.description)?t.description:n.description,o=[...X(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:r}]];return Zd(o)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:(e,t)=>e.lang||t.lang||"en-US",resolvePageLayout:(e,t)=>{let n;if(e.path){const r=e.frontmatter.layout;ue(r)?n=r:n=ap}else n=sp;return t[n]},resolveRouteLocale:(e,t)=>Xd(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),ro=U({name:"ClientOnly",setup(e,t){const n=te(!1);return be(()=>{n.value=!0}),()=>{var r,o;return n.value?(o=(r=t.slots).default)==null?void 0:o.call(r):null}}}),Ps=U({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=de(),n=I(()=>gs[e.pageKey||t.value.key]);return()=>n.value?u(n.value):u("div","404 Not Found")}}),ot=(e={})=>e,Ve=e=>Mn(e)?e:`/${_s(e)}`;const cp={};/*! - * vue-router v4.2.5 - * (c) 2023 Eduardo San Martin Morote - * @license MIT - */const pn=typeof window<"u";function up(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const pe=Object.assign;function Eo(e,t){const n={};for(const r in t){const o=t[r];n[r]=ut(o)?o.map(e):e(o)}return n}const Xn=()=>{},ut=Array.isArray,fp=/\/$/,dp=e=>e.replace(fp,"");function wo(e,t,n="/"){let r,o={},i="",l="";const a=t.indexOf("#");let s=t.indexOf("?");return a=0&&(s=-1),s>-1&&(r=t.slice(0,s),i=t.slice(s+1,a>-1?a:t.length),o=e(i)),a>-1&&(r=r||t.slice(0,a),l=t.slice(a,t.length)),r=mp(r??t,n),{fullPath:r+(i&&"?")+i+l,path:r,query:o,hash:l}}function pp(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Ol(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function hp(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&In(t.matched[r],n.matched[o])&&Rs(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function In(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Rs(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!vp(e[n],t[n]))return!1;return!0}function vp(e,t){return ut(e)?xl(e,t):ut(t)?xl(t,e):e===t}function xl(e,t){return ut(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function mp(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),o=r[r.length-1];(o===".."||o===".")&&r.push("");let i=n.length-1,l,a;for(l=0;l1&&i--;else break;return n.slice(0,i).join("/")+"/"+r.slice(l-(l===r.length?1:0)).join("/")}var sr;(function(e){e.pop="pop",e.push="push"})(sr||(sr={}));var er;(function(e){e.back="back",e.forward="forward",e.unknown=""})(er||(er={}));function _p(e){if(!e)if(pn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),dp(e)}const gp=/^[^#]+#/;function bp(e,t){return e.replace(gp,"#")+t}function yp(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const oo=()=>({left:window.pageXOffset,top:window.pageYOffset});function Ep(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=yp(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function kl(e,t){return(history.state?history.state.position-t:-1)+e}const Wo=new Map;function wp(e,t){Wo.set(e,t)}function Tp(e){const t=Wo.get(e);return Wo.delete(e),t}let Ap=()=>location.protocol+"//"+location.host;function Is(e,t){const{pathname:n,search:r,hash:o}=t,i=e.indexOf("#");if(i>-1){let a=o.includes(e.slice(i))?e.slice(i).length:1,s=o.slice(a);return s[0]!=="/"&&(s="/"+s),Ol(s,"")}return Ol(n,e)+r+o}function Lp(e,t,n,r){let o=[],i=[],l=null;const a=({state:p})=>{const m=Is(e,location),g=n.value,w=t.value;let T=0;if(p){if(n.value=m,t.value=p,l&&l===g){l=null;return}T=w?p.position-w.position:0}else r(m);o.forEach(y=>{y(n.value,g,{delta:T,type:sr.pop,direction:T?T>0?er.forward:er.back:er.unknown})})};function s(){l=n.value}function c(p){o.push(p);const m=()=>{const g=o.indexOf(p);g>-1&&o.splice(g,1)};return i.push(m),m}function f(){const{history:p}=window;p.state&&p.replaceState(pe({},p.state,{scroll:oo()}),"")}function d(){for(const p of i)p();i=[],window.removeEventListener("popstate",a),window.removeEventListener("beforeunload",f)}return window.addEventListener("popstate",a),window.addEventListener("beforeunload",f,{passive:!0}),{pauseListeners:s,listen:c,destroy:d}}function Cl(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?oo():null}}function Pp(e){const{history:t,location:n}=window,r={value:Is(e,n)},o={value:t.state};o.value||i(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(s,c,f){const d=e.indexOf("#"),p=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+s:Ap()+e+s;try{t[f?"replaceState":"pushState"](c,"",p),o.value=c}catch(m){console.error(m),n[f?"replace":"assign"](p)}}function l(s,c){const f=pe({},t.state,Cl(o.value.back,s,o.value.forward,!0),c,{position:o.value.position});i(s,f,!0),r.value=s}function a(s,c){const f=pe({},o.value,t.state,{forward:s,scroll:oo()});i(f.current,f,!0);const d=pe({},Cl(r.value,s,null),{position:f.position+1},c);i(s,d,!1),r.value=s}return{location:r,state:o,push:a,replace:l}}function Rp(e){e=_p(e);const t=Pp(e),n=Lp(e,t.state,t.location,t.replace);function r(i,l=!0){l||n.pauseListeners(),history.go(i)}const o=pe({location:"",base:e,go:r,createHref:bp.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function Ip(e){return typeof e=="string"||e&&typeof e=="object"}function Os(e){return typeof e=="string"||typeof e=="symbol"}const Lt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},xs=Symbol("");var Dl;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Dl||(Dl={}));function On(e,t){return pe(new Error,{type:e,[xs]:!0},t)}function wt(e,t){return e instanceof Error&&xs in e&&(t==null||!!(e.type&t))}const Sl="[^/]+?",Op={sensitive:!1,strict:!1,start:!0,end:!0},xp=/[.+*?^${}()[\]/\\]/g;function kp(e,t){const n=pe({},Op,t),r=[];let o=n.start?"^":"";const i=[];for(const c of e){const f=c.length?[]:[90];n.strict&&!c.length&&(o+="/");for(let d=0;dt.length?t.length===1&&t[0]===80?1:-1:0}function Dp(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const Sp={type:0,value:""},Vp=/[a-zA-Z0-9_]/;function Mp(e){if(!e)return[[]];if(e==="/")return[[Sp]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${c}": ${m}`)}let n=0,r=n;const o=[];let i;function l(){i&&o.push(i),i=[]}let a=0,s,c="",f="";function d(){c&&(n===0?i.push({type:0,value:c}):n===1||n===2||n===3?(i.length>1&&(s==="*"||s==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),i.push({type:1,value:c,regexp:f,repeatable:s==="*"||s==="+",optional:s==="*"||s==="?"})):t("Invalid state to consume buffer"),c="")}function p(){c+=s}for(;a{l(P)}:Xn}function l(f){if(Os(f)){const d=r.get(f);d&&(r.delete(f),n.splice(n.indexOf(d),1),d.children.forEach(l),d.alias.forEach(l))}else{const d=n.indexOf(f);d>-1&&(n.splice(d,1),f.record.name&&r.delete(f.record.name),f.children.forEach(l),f.alias.forEach(l))}}function a(){return n}function s(f){let d=0;for(;d=0&&(f.record.path!==n[d].record.path||!ks(f,n[d]));)d++;n.splice(d,0,f),f.record.name&&!$l(f)&&r.set(f.record.name,f)}function c(f,d){let p,m={},g,w;if("name"in f&&f.name){if(p=r.get(f.name),!p)throw On(1,{location:f});w=p.record.name,m=pe(Ml(d.params,p.keys.filter(P=>!P.optional).map(P=>P.name)),f.params&&Ml(f.params,p.keys.map(P=>P.name))),g=p.stringify(m)}else if("path"in f)g=f.path,p=n.find(P=>P.re.test(g)),p&&(m=p.parse(g),w=p.record.name);else{if(p=d.name?r.get(d.name):n.find(P=>P.re.test(d.path)),!p)throw On(1,{location:f,currentLocation:d});w=p.record.name,m=pe({},d.params,f.params),g=p.stringify(m)}const T=[];let y=p;for(;y;)T.unshift(y.record),y=y.parent;return{name:w,path:g,params:m,matched:T,meta:Fp(T)}}return e.forEach(f=>i(f)),{addRoute:i,resolve:c,removeRoute:l,getRoutes:a,getRecordMatcher:o}}function Ml(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function Np(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:Bp(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function Bp(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function $l(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Fp(e){return e.reduce((t,n)=>pe(t,n.meta),{})}function zl(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function ks(e,t){return t.children.some(n=>n===e||ks(e,n))}const Cs=/#/g,Hp=/&/g,jp=/\//g,Wp=/=/g,qp=/\?/g,Ds=/\+/g,Up=/%5B/g,Kp=/%5D/g,Ss=/%5E/g,Gp=/%60/g,Vs=/%7B/g,Yp=/%7C/g,Ms=/%7D/g,Zp=/%20/g;function Oi(e){return encodeURI(""+e).replace(Yp,"|").replace(Up,"[").replace(Kp,"]")}function Qp(e){return Oi(e).replace(Vs,"{").replace(Ms,"}").replace(Ss,"^")}function qo(e){return Oi(e).replace(Ds,"%2B").replace(Zp,"+").replace(Cs,"%23").replace(Hp,"%26").replace(Gp,"`").replace(Vs,"{").replace(Ms,"}").replace(Ss,"^")}function Jp(e){return qo(e).replace(Wp,"%3D")}function Xp(e){return Oi(e).replace(Cs,"%23").replace(qp,"%3F")}function eh(e){return e==null?"":Xp(e).replace(jp,"%2F")}function qr(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function th(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;oi&&qo(i)):[r&&qo(r)]).forEach(i=>{i!==void 0&&(t+=(t.length?"&":"")+n,i!=null&&(t+="="+i))})}return t}function nh(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=ut(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}const rh=Symbol(""),Bl=Symbol(""),io=Symbol(""),xi=Symbol(""),Uo=Symbol("");function jn(){let e=[];function t(r){return e.push(r),()=>{const o=e.indexOf(r);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Ft(e,t,n,r,o){const i=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((l,a)=>{const s=d=>{d===!1?a(On(4,{from:n,to:t})):d instanceof Error?a(d):Ip(d)?a(On(2,{from:t,to:d})):(i&&r.enterCallbacks[o]===i&&typeof d=="function"&&i.push(d),l())},c=e.call(r&&r.instances[o],t,n,s);let f=Promise.resolve(c);e.length<3&&(f=f.then(s)),f.catch(d=>a(d))})}function To(e,t,n,r){const o=[];for(const i of e)for(const l in i.components){let a=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(oh(a)){const c=(a.__vccOpts||a)[t];c&&o.push(Ft(c,n,r,i,l))}else{let s=a();o.push(()=>s.then(c=>{if(!c)return Promise.reject(new Error(`Couldn't resolve component "${l}" at "${i.path}"`));const f=up(c)?c.default:c;i.components[l]=f;const p=(f.__vccOpts||f)[t];return p&&Ft(p,n,r,i,l)()}))}}return o}function oh(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Ko(e){const t=_e(io),n=_e(xi),r=I(()=>t.resolve(en(e.to))),o=I(()=>{const{matched:s}=r.value,{length:c}=s,f=s[c-1],d=n.matched;if(!f||!d.length)return-1;const p=d.findIndex(In.bind(null,f));if(p>-1)return p;const m=Fl(s[c-2]);return c>1&&Fl(f)===m&&d[d.length-1].path!==m?d.findIndex(In.bind(null,s[c-2])):p}),i=I(()=>o.value>-1&&sh(n.params,r.value.params)),l=I(()=>o.value>-1&&o.value===n.matched.length-1&&Rs(n.params,r.value.params));function a(s={}){return ah(s)?t[en(e.replace)?"replace":"push"](en(e.to)).catch(Xn):Promise.resolve()}return{route:r,href:I(()=>r.value.href),isActive:i,isExactActive:l,navigate:a}}const ih=U({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Ko,setup(e,{slots:t}){const n=dr(Ko(e)),{options:r}=_e(io),o=I(()=>({[Hl(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Hl(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&t.default(n);return e.custom?i:u("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},i)}}}),lh=ih;function ah(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function sh(e,t){for(const n in t){const r=t[n],o=e[n];if(typeof r=="string"){if(r!==o)return!1}else if(!ut(o)||o.length!==r.length||r.some((i,l)=>i!==o[l]))return!1}return!0}function Fl(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Hl=(e,t,n)=>e??t??n,ch=U({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=_e(Uo),o=I(()=>e.route||r.value),i=_e(Bl,0),l=I(()=>{let c=en(i);const{matched:f}=o.value;let d;for(;(d=f[c])&&!d.components;)c++;return c}),a=I(()=>o.value.matched[l.value]);tn(Bl,I(()=>l.value+1)),tn(rh,a),tn(Uo,o);const s=te();return fe(()=>[s.value,a.value,e.name],([c,f,d],[p,m,g])=>{f&&(f.instances[d]=c,m&&m!==f&&c&&c===p&&(f.leaveGuards.size||(f.leaveGuards=m.leaveGuards),f.updateGuards.size||(f.updateGuards=m.updateGuards))),c&&f&&(!m||!In(f,m)||!p)&&(f.enterCallbacks[d]||[]).forEach(w=>w(c))},{flush:"post"}),()=>{const c=o.value,f=e.name,d=a.value,p=d&&d.components[f];if(!p)return jl(n.default,{Component:p,route:c});const m=d.props[f],g=m?m===!0?c.params:typeof m=="function"?m(c):m:null,T=u(p,pe({},g,t,{onVnodeUnmounted:y=>{y.component.isUnmounted&&(d.instances[f]=null)},ref:s}));return jl(n.default,{Component:T,route:c})||T}}});function jl(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const $s=ch;function uh(e){const t=zp(e.routes,e),n=e.parseQuery||th,r=e.stringifyQuery||Nl,o=e.history,i=jn(),l=jn(),a=jn(),s=ft(Lt);let c=Lt;pn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const f=Eo.bind(null,O=>""+O),d=Eo.bind(null,eh),p=Eo.bind(null,qr);function m(O,W){let N,Y;return Os(O)?(N=t.getRecordMatcher(O),Y=W):Y=O,t.addRoute(Y,N)}function g(O){const W=t.getRecordMatcher(O);W&&t.removeRoute(W)}function w(){return t.getRoutes().map(O=>O.record)}function T(O){return!!t.getRecordMatcher(O)}function y(O,W){if(W=pe({},W||s.value),typeof O=="string"){const E=wo(n,O,W.path),R=t.resolve({path:E.path},W),x=o.createHref(E.fullPath);return pe(E,R,{params:p(R.params),hash:qr(E.hash),redirectedFrom:void 0,href:x})}let N;if("path"in O)N=pe({},O,{path:wo(n,O.path,W.path).path});else{const E=pe({},O.params);for(const R in E)E[R]==null&&delete E[R];N=pe({},O,{params:d(E)}),W.params=d(W.params)}const Y=t.resolve(N,W),ae=O.hash||"";Y.params=f(p(Y.params));const v=pp(r,pe({},O,{hash:Qp(ae),path:Y.path})),_=o.createHref(v);return pe({fullPath:v,hash:ae,query:r===Nl?nh(O.query):O.query||{}},Y,{redirectedFrom:void 0,href:_})}function P(O){return typeof O=="string"?wo(n,O,s.value.path):pe({},O)}function b(O,W){if(c!==O)return On(8,{from:W,to:O})}function A(O){return z(O)}function M(O){return A(pe(P(O),{replace:!0}))}function k(O){const W=O.matched[O.matched.length-1];if(W&&W.redirect){const{redirect:N}=W;let Y=typeof N=="function"?N(O):N;return typeof Y=="string"&&(Y=Y.includes("?")||Y.includes("#")?Y=P(Y):{path:Y},Y.params={}),pe({query:O.query,hash:O.hash,params:"path"in Y?{}:O.params},Y)}}function z(O,W){const N=c=y(O),Y=s.value,ae=O.state,v=O.force,_=O.replace===!0,E=k(N);if(E)return z(pe(P(E),{state:typeof E=="object"?pe({},ae,E.state):ae,force:v,replace:_}),W||N);const R=N;R.redirectedFrom=W;let x;return!v&&hp(r,Y,N)&&(x=On(16,{to:R,from:Y}),Ye(Y,Y,!0,!1)),(x?Promise.resolve(x):B(R,Y)).catch(C=>wt(C)?wt(C,2)?C:dt(C):K(C,R,Y)).then(C=>{if(C){if(wt(C,2))return z(pe({replace:_},P(C.to),{state:typeof C.to=="object"?pe({},ae,C.to.state):ae,force:v}),W||R)}else C=H(R,Y,!0,_,ae);return Z(R,Y,C),C})}function V(O,W){const N=b(O,W);return N?Promise.reject(N):Promise.resolve()}function S(O){const W=Et.values().next().value;return W&&typeof W.runWithContext=="function"?W.runWithContext(O):O()}function B(O,W){let N;const[Y,ae,v]=fh(O,W);N=To(Y.reverse(),"beforeRouteLeave",O,W);for(const E of Y)E.leaveGuards.forEach(R=>{N.push(Ft(R,O,W))});const _=V.bind(null,O,W);return N.push(_),Re(N).then(()=>{N=[];for(const E of i.list())N.push(Ft(E,O,W));return N.push(_),Re(N)}).then(()=>{N=To(ae,"beforeRouteUpdate",O,W);for(const E of ae)E.updateGuards.forEach(R=>{N.push(Ft(R,O,W))});return N.push(_),Re(N)}).then(()=>{N=[];for(const E of v)if(E.beforeEnter)if(ut(E.beforeEnter))for(const R of E.beforeEnter)N.push(Ft(R,O,W));else N.push(Ft(E.beforeEnter,O,W));return N.push(_),Re(N)}).then(()=>(O.matched.forEach(E=>E.enterCallbacks={}),N=To(v,"beforeRouteEnter",O,W),N.push(_),Re(N))).then(()=>{N=[];for(const E of l.list())N.push(Ft(E,O,W));return N.push(_),Re(N)}).catch(E=>wt(E,8)?E:Promise.reject(E))}function Z(O,W,N){a.list().forEach(Y=>S(()=>Y(O,W,N)))}function H(O,W,N,Y,ae){const v=b(O,W);if(v)return v;const _=W===Lt,E=pn?history.state:{};N&&(Y||_?o.replace(O.fullPath,pe({scroll:_&&E&&E.scroll},ae)):o.push(O.fullPath,ae)),s.value=O,Ye(O,W,N,_),dt()}let ee;function we(){ee||(ee=o.listen((O,W,N)=>{if(!pt.listening)return;const Y=y(O),ae=k(Y);if(ae){z(pe(ae,{replace:!0}),Y).catch(Xn);return}c=Y;const v=s.value;pn&&wp(kl(v.fullPath,N.delta),oo()),B(Y,v).catch(_=>wt(_,12)?_:wt(_,2)?(z(_.to,Y).then(E=>{wt(E,20)&&!N.delta&&N.type===sr.pop&&o.go(-1,!1)}).catch(Xn),Promise.reject()):(N.delta&&o.go(-N.delta,!1),K(_,Y,v))).then(_=>{_=_||H(Y,v,!1),_&&(N.delta&&!wt(_,8)?o.go(-N.delta,!1):N.type===sr.pop&&wt(_,20)&&o.go(-1,!1)),Z(Y,v,_)}).catch(Xn)}))}let ye=jn(),q=jn(),ne;function K(O,W,N){dt(O);const Y=q.list();return Y.length?Y.forEach(ae=>ae(O,W,N)):console.error(O),Promise.reject(O)}function Pe(){return ne&&s.value!==Lt?Promise.resolve():new Promise((O,W)=>{ye.add([O,W])})}function dt(O){return ne||(ne=!O,we(),ye.list().forEach(([W,N])=>O?N(O):W()),ye.reset()),O}function Ye(O,W,N,Y){const{scrollBehavior:ae}=e;if(!pn||!ae)return Promise.resolve();const v=!N&&Tp(kl(O.fullPath,0))||(Y||!N)&&history.state&&history.state.scroll||null;return ln().then(()=>ae(O,W,v)).then(_=>_&&Ep(_)).catch(_=>K(_,O,W))}const De=O=>o.go(O);let We;const Et=new Set,pt={currentRoute:s,listening:!0,addRoute:m,removeRoute:g,hasRoute:T,getRoutes:w,resolve:y,options:e,push:A,replace:M,go:De,back:()=>De(-1),forward:()=>De(1),beforeEach:i.add,beforeResolve:l.add,afterEach:a.add,onError:q.add,isReady:Pe,install(O){const W=this;O.component("RouterLink",lh),O.component("RouterView",$s),O.config.globalProperties.$router=W,Object.defineProperty(O.config.globalProperties,"$route",{enumerable:!0,get:()=>en(s)}),pn&&!We&&s.value===Lt&&(We=!0,A(o.location).catch(ae=>{}));const N={};for(const ae in Lt)Object.defineProperty(N,ae,{get:()=>s.value[ae],enumerable:!0});O.provide(io,W),O.provide(xi,Ia(N)),O.provide(Uo,s);const Y=O.unmount;Et.add(O),O.unmount=function(){Et.delete(O),Et.size<1&&(c=Lt,ee&&ee(),ee=null,s.value=Lt,We=!1,ne=!1),Y()}}};function Re(O){return O.reduce((W,N)=>W.then(()=>S(N)),Promise.resolve())}return pt}function fh(e,t){const n=[],r=[],o=[],i=Math.max(t.matched.length,e.matched.length);for(let l=0;lIn(c,a))?r.push(a):n.push(a));const s=e.matched[l];s&&(t.matched.find(c=>In(c,s))||o.push(s))}return[n,r,o]}function Ge(){return _e(io)}function yt(){return _e(xi)}var ze=Uint8Array,mn=Uint16Array,dh=Int32Array,zs=new ze([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Ns=new ze([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),ph=new ze([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Bs=function(e,t){for(var n=new mn(31),r=0;r<31;++r)n[r]=t+=1<>1|(ge&21845)<<1;$t=($t&52428)>>2|($t&13107)<<2,$t=($t&61680)>>4|($t&3855)<<4,Go[ge]=(($t&65280)>>8|($t&255)<<8)>>1}var tr=function(e,t,n){for(var r=e.length,o=0,i=new mn(t);o>s]=c}else for(a=new mn(r),o=0;o>15-e[o]);return a},mr=new ze(288);for(var ge=0;ge<144;++ge)mr[ge]=8;for(var ge=144;ge<256;++ge)mr[ge]=9;for(var ge=256;ge<280;++ge)mr[ge]=7;for(var ge=280;ge<288;++ge)mr[ge]=8;var js=new ze(32);for(var ge=0;ge<32;++ge)js[ge]=5;var _h=tr(mr,9,1),gh=tr(js,5,1),Ao=function(e){for(var t=e[0],n=1;nt&&(t=e[n]);return t},lt=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},Lo=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},bh=function(e){return(e+7)/8|0},ki=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new ze(e.subarray(t,n))},yh=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],Je=function(e,t,n){var r=new Error(t||yh[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,Je),!n)throw r;return r},Eh=function(e,t,n,r){var o=e.length,i=r?r.length:0;if(!o||t.f&&!t.l)return n||new ze(0);var l=!n,a=l||t.i!=2,s=t.i;l&&(n=new ze(o*3));var c=function(ae){var v=n.length;if(ae>v){var _=new ze(Math.max(v*2,ae));_.set(n),n=_}},f=t.f||0,d=t.p||0,p=t.b||0,m=t.l,g=t.d,w=t.m,T=t.n,y=o*8;do{if(!m){f=lt(e,d,1);var P=lt(e,d+1,3);if(d+=3,P)if(P==1)m=_h,g=gh,w=9,T=5;else if(P==2){var k=lt(e,d,31)+257,z=lt(e,d+10,15)+4,V=k+lt(e,d+5,31)+1;d+=14;for(var S=new ze(V),B=new ze(19),Z=0;Z>4;if(b<16)S[Z++]=b;else{var q=0,ne=0;for(b==16?(ne=3+lt(e,d,3),d+=2,q=S[Z-1]):b==17?(ne=3+lt(e,d,7),d+=3):b==18&&(ne=11+lt(e,d,127),d+=7);ne--;)S[Z++]=q}}var K=S.subarray(0,k),Pe=S.subarray(k);w=Ao(K),T=Ao(Pe),m=tr(K,w,1),g=tr(Pe,T,1)}else Je(1);else{var b=bh(d)+4,A=e[b-4]|e[b-3]<<8,M=b+A;if(M>o){s&&Je(0);break}a&&c(p+A),n.set(e.subarray(b,M),p),t.b=p+=A,t.p=d=M*8,t.f=f;continue}if(d>y){s&&Je(0);break}}a&&c(p+131072);for(var dt=(1<>4;if(d+=q&15,d>y){s&&Je(0);break}if(q||Je(2),We<256)n[p++]=We;else if(We==256){De=d,m=null;break}else{var Et=We-254;if(We>264){var Z=We-257,pt=zs[Z];Et=lt(e,d,(1<>4;Re||Je(3),d+=Re&15;var Pe=mh[O];if(O>3){var pt=Ns[O];Pe+=Lo(e,d)&(1<y){s&&Je(0);break}a&&c(p+131072);var W=p+Et;if(p>4>7||(e[0]<<8|e[1])%31)&&Je(6,"invalid zlib data"),(e[1]>>5&1)==+!t&&Je(6,"invalid zlib data: "+(e[1]&32?"need":"unexpected")+" dictionary"),(e[1]>>3&4)+2};function Ah(e,t){return Eh(e.subarray(Th(e,t&&t.dictionary),-4),{i:2},t&&t.out,t&&t.dictionary)}var Wl=typeof TextEncoder<"u"&&new TextEncoder,Yo=typeof TextDecoder<"u"&&new TextDecoder,Lh=0;try{Yo.decode(wh,{stream:!0}),Lh=1}catch{}var Ph=function(e){for(var t="",n=0;;){var r=e[n++],o=(r>127)+(r>223)+(r>239);if(n+o>e.length)return{s:t,r:ki(e,n-1)};o?o==3?(r=((r&15)<<18|(e[n++]&63)<<12|(e[n++]&63)<<6|e[n++]&63)-65536,t+=String.fromCharCode(55296|r>>10,56320|r&1023)):o&1?t+=String.fromCharCode((r&31)<<6|e[n++]&63):t+=String.fromCharCode((r&15)<<12|(e[n++]&63)<<6|e[n++]&63):t+=String.fromCharCode(r)}};function Rh(e,t){if(t){for(var n=new ze(e.length),r=0;r>1)),l=0,a=function(f){i[l++]=f},r=0;ri.length){var s=new ze(l+8+(o-r<<1));s.set(i),i=s}var c=e.charCodeAt(r);c<128||t?a(c):c<2048?(a(192|c>>6),a(128|c&63)):c>55295&&c<57344?(c=65536+(c&1047552)|e.charCodeAt(++r)&1023,a(240|c>>18),a(128|c>>12&63),a(128|c>>6&63),a(128|c&63)):(a(224|c>>12),a(128|c>>6&63),a(128|c&63))}return ki(i,0,l)}function Ih(e,t){if(t){for(var n="",r=0;r{var r;return u("svg",{xmlns:"http://www.w3.org/2000/svg",class:["icon",`${e}-icon`],viewBox:"0 0 1024 1024",fill:t,"aria-label":`${e} icon`},(r=n.default)==null?void 0:r.call(n))};Ae.displayName="IconBase";const Ci=({size:e=48,stroke:t=4,wrapper:n=!0,height:r=2*e})=>{const o=u("svg",{xmlns:"http://www.w3.org/2000/svg",width:e,height:e,preserveAspectRatio:"xMidYMid",viewBox:"25 25 50 50"},[u("animateTransform",{attributeName:"transform",type:"rotate",dur:"2s",keyTimes:"0;1",repeatCount:"indefinite",values:"0;360"}),u("circle",{cx:"50",cy:"50",r:"20",fill:"none",stroke:"currentColor","stroke-width":t,"stroke-linecap":"round"},[u("animate",{attributeName:"stroke-dasharray",dur:"1.5s",keyTimes:"0;0.5;1",repeatCount:"indefinite",values:"1,200;90,200;1,200"}),u("animate",{attributeName:"stroke-dashoffset",dur:"1.5s",keyTimes:"0;0.5;1",repeatCount:"indefinite",values:"0;-35px;-125px"})])]);return n?u("div",{class:"loading-icon-wrapper",style:`display:flex;align-items:center;justify-content:center;height:${r}px`},o):o};Ci.displayName="LoadingIcon";const Ws=(e,{slots:t})=>{var n;return(n=t.default)==null?void 0:n.call(t)},Oh=(e="")=>{if(e){if(typeof e=="number")return new Date(e);const t=Date.parse(e.toString());if(!Number.isNaN(t))return new Date(t)}return null},qs=(e,t)=>{let n=1;for(let r=0;r>6;return n+=n<<3,n^=n>>11,n%t},Us=Array.isArray,xh=e=>typeof e=="function",kh=e=>typeof e=="string";var Di=e=>/^(https?:)?\/\//.test(e),Ch=/.md((\?|#).*)?$/,Dh=(e,t="/")=>!!(Di(e)||e.startsWith("/")&&!e.startsWith(t)&&!Ch.test(e)),Ks=e=>Object.prototype.toString.call(e)==="[object Object]";function Sh(){const e=te(!1);return Vn()&&be(()=>{e.value=!0}),e}function Vh(e){return Sh(),I(()=>!!e())}const Mh=e=>typeof e=="function",Po=e=>typeof e=="number",kt=e=>typeof e=="string",xn=(e,t)=>kt(e)&&e.startsWith(t),fn=(e,t)=>kt(e)&&e.endsWith(t),Si=Object.entries,$h=Object.fromEntries,$n=Object.keys,zh=e=>(e.endsWith(".md")&&(e=`${e.slice(0,-3)}.html`),!e.endsWith("/")&&!e.endsWith(".html")&&(e=`${e}.html`),e=e.replace(/(^|\/)(?:README|index).html$/i,"$1"),e),Gs=e=>{const[t,n=""]=e.split("#");return t?`${zh(t)}${n?`#${n}`:""}`:e},ql=e=>Ks(e)&&kt(e.name),Ul=(e,t=!1)=>e?Us(e)?e.map(n=>kt(n)?{name:n}:ql(n)?n:null).filter(n=>n!==null):kt(e)?[{name:e}]:ql(e)?[e]:(console.error(`Expect "author" to be \`AuthorInfo[] | AuthorInfo | string[] | string ${t?"":"| false"} | undefined\`, but got`,e),[]):[],Ys=(e,t)=>{if(e){if(Us(e)&&e.every(kt))return e;if(kt(e))return[e];console.error(`Expect ${t||"value"} to be \`string[] | string | undefined\`, but got`,e)}return[]},Nh=e=>Ys(e,"category"),Bh=e=>Ys(e,"tag"),lo=e=>xn(e,"/"),Zs=/#.*$/u,Fh=e=>{const t=Zs.exec(e);return t?t[0]:""},Kl=e=>decodeURI(e).replace(Zs,"").replace(/(index)?\.html$/i,"").replace(/(README|index)?\.md$/i,""),Qs=(e,t)=>{if(t===void 0)return!1;const n=Kl(e.path),r=Kl(t),o=Fh(t);return o?o===e.hash&&(!r||n===r):n===r},Gl=e=>{const t=atob(e);return Ih(Ah(Rh(t,!0)))},Hh=e=>Di(e)?e:`https://github.com/${e}`,Js=e=>!Di(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,Ur=(e,...t)=>{const n=e.resolve(...t),r=n.matched[n.matched.length-1];if(!(r!=null&&r.redirect))return n;const{redirect:o}=r,i=xh(o)?o(n):o,l=kh(i)?{path:i}:i;return Ur(e,{hash:n.hash,query:n.query,params:n.params,...l})},jh=e=>{var t;if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)&&!(e.currentTarget&&((t=e.currentTarget.getAttribute("target"))!=null&&t.match(/\b_blank\b/i))))return e.preventDefault(),!0},et=({to:e="",class:t="",...n},{slots:r})=>{var a;const o=Ge(),i=Gs(e),l=(s={})=>jh(s)?o.push(e).catch():Promise.resolve();return u("a",{...n,class:["vp-link",t],href:xn(i,"/")?Ve(i):i,onClick:l},(a=r.default)==null?void 0:a.call(r))};et.displayName="VPLink";const Xs=()=>u(Ae,{name:"github"},()=>u("path",{d:"M511.957 21.333C241.024 21.333 21.333 240.981 21.333 512c0 216.832 140.544 400.725 335.574 465.664 24.49 4.395 32.256-10.07 32.256-23.083 0-11.69.256-44.245 0-85.205-136.448 29.61-164.736-64.64-164.736-64.64-22.315-56.704-54.4-71.765-54.4-71.765-44.587-30.464 3.285-29.824 3.285-29.824 49.195 3.413 75.179 50.517 75.179 50.517 43.776 75.008 114.816 53.333 142.762 40.79 4.523-31.66 17.152-53.377 31.19-65.537-108.971-12.458-223.488-54.485-223.488-242.602 0-53.547 19.114-97.323 50.517-131.67-5.035-12.33-21.93-62.293 4.779-129.834 0 0 41.258-13.184 134.912 50.346a469.803 469.803 0 0 1 122.88-16.554c41.642.213 83.626 5.632 122.88 16.554 93.653-63.488 134.784-50.346 134.784-50.346 26.752 67.541 9.898 117.504 4.864 129.834 31.402 34.347 50.474 78.123 50.474 131.67 0 188.586-114.73 230.016-224.042 242.09 17.578 15.232 33.578 44.672 33.578 90.454v135.85c0 13.142 7.936 27.606 32.854 22.87C862.25 912.597 1002.667 728.747 1002.667 512c0-271.019-219.648-490.667-490.71-490.667z"}));Xs.displayName="GitHubIcon";const ec=()=>u(Ae,{name:"gitlab"},()=>u("path",{d:"M229.333 78.688C223.52 62 199.895 62 193.895 78.688L87.958 406.438h247.5c-.188 0-106.125-327.75-106.125-327.75zM33.77 571.438c-4.875 15 .563 31.687 13.313 41.25l464.812 345L87.77 406.438zm301.5-165 176.813 551.25 176.812-551.25zm655.125 165-54-165-424.312 551.25 464.812-345c12.938-9.563 18.188-26.25 13.5-41.25zM830.27 78.688c-5.812-16.688-29.437-16.688-35.437 0l-106.125 327.75h247.5z"}));ec.displayName="GitLabIcon";const tc=()=>u(Ae,{name:"gitee"},()=>u("path",{d:"M512 992C246.92 992 32 777.08 32 512S246.92 32 512 32s480 214.92 480 480-214.92 480-480 480zm242.97-533.34H482.39a23.7 23.7 0 0 0-23.7 23.7l-.03 59.28c0 13.08 10.59 23.7 23.7 23.7h165.96a23.7 23.7 0 0 1 23.7 23.7v11.85a71.1 71.1 0 0 1-71.1 71.1H375.71a23.7 23.7 0 0 1-23.7-23.7V423.11a71.1 71.1 0 0 1 71.1-71.1h331.8a23.7 23.7 0 0 0 23.7-23.7l.06-59.25a23.73 23.73 0 0 0-23.7-23.73H423.11a177.78 177.78 0 0 0-177.78 177.75v331.83c0 13.08 10.62 23.7 23.7 23.7h349.62a159.99 159.99 0 0 0 159.99-159.99V482.33a23.7 23.7 0 0 0-23.7-23.7z"}));tc.displayName="GiteeIcon";const nc=()=>u(Ae,{name:"bitbucket"},()=>u("path",{d:"M575.256 490.862c6.29 47.981-52.005 85.723-92.563 61.147-45.714-20.004-45.714-92.562-1.133-113.152 38.29-23.442 93.696 7.424 93.696 52.005zm63.451-11.996c-10.276-81.152-102.29-134.839-177.152-101.156-47.433 21.138-79.433 71.424-77.129 124.562 2.853 69.705 69.157 126.866 138.862 120.576S647.3 548.571 638.708 478.83zm136.558-309.723c-25.161-33.134-67.986-38.839-105.728-45.13-106.862-17.151-216.576-17.7-323.438 1.134-35.438 5.706-75.447 11.996-97.719 43.996 36.572 34.304 88.576 39.424 135.424 45.129 84.553 10.862 171.447 11.447 256 .585 47.433-5.705 99.987-10.276 135.424-45.714zm32.585 591.433c-16.018 55.99-6.839 131.438-66.304 163.986-102.29 56.576-226.304 62.867-338.87 42.862-59.43-10.862-129.135-29.696-161.72-85.723-14.3-54.858-23.442-110.848-32.585-166.84l3.438-9.142 10.276-5.157c170.277 112.567 408.576 112.567 579.438 0 26.844 8.01 6.84 40.558 6.29 60.014zm103.424-549.157c-19.42 125.148-41.728 249.71-63.415 374.272-6.29 36.572-41.728 57.162-71.424 72.558-106.862 53.724-231.424 62.866-348.562 50.286-79.433-8.558-160.585-29.696-225.134-79.433-30.28-23.443-30.28-63.415-35.986-97.134-20.005-117.138-42.862-234.277-57.161-352.585 6.839-51.42 64.585-73.728 107.447-89.71 57.16-21.138 118.272-30.866 178.87-36.571 129.134-12.58 261.157-8.01 386.304 28.562 44.581 13.13 92.563 31.415 122.844 69.705 13.714 17.7 9.143 40.01 6.29 60.014z"}));nc.displayName="BitbucketIcon";const rc=()=>u(Ae,{name:"source"},()=>u("path",{d:"M601.92 475.2c0 76.428-8.91 83.754-28.512 99.594-14.652 11.88-43.956 14.058-78.012 16.434-18.81 1.386-40.392 2.97-62.172 6.534-18.612 2.97-36.432 9.306-53.064 17.424V299.772c37.818-21.978 63.36-62.766 63.36-109.692 0-69.894-56.826-126.72-126.72-126.72S190.08 120.186 190.08 190.08c0 46.926 25.542 87.714 63.36 109.692v414.216c-37.818 21.978-63.36 62.766-63.36 109.692 0 69.894 56.826 126.72 126.72 126.72s126.72-56.826 126.72-126.72c0-31.086-11.286-59.598-29.7-81.576 13.266-9.504 27.522-17.226 39.996-19.206 16.038-2.574 32.868-3.762 50.688-5.148 48.312-3.366 103.158-7.326 148.896-44.55 61.182-49.698 74.25-103.158 75.24-187.902V475.2h-126.72zM316.8 126.72c34.848 0 63.36 28.512 63.36 63.36s-28.512 63.36-63.36 63.36-63.36-28.512-63.36-63.36 28.512-63.36 63.36-63.36zm0 760.32c-34.848 0-63.36-28.512-63.36-63.36s28.512-63.36 63.36-63.36 63.36 28.512 63.36 63.36-28.512 63.36-63.36 63.36zM823.68 158.4h-95.04V63.36h-126.72v95.04h-95.04v126.72h95.04v95.04h126.72v-95.04h95.04z"}));rc.displayName="SourceIcon";const Ot=(e,t)=>{var r;const n=(r=(t==null?void 0:t._instance)||Vn())==null?void 0:r.appContext.components;return n?e in n||rt(e)in n||fr(rt(e))in n:!1},Wh=()=>Vh(()=>typeof window<"u"&&window.navigator&&"userAgent"in window.navigator),qh=()=>{const e=Wh();return I(()=>e.value&&/\b(?:Android|iPhone)/i.test(navigator.userAgent))},zn=e=>{const t=an();return I(()=>e[t.value])};function Yl(e,t){var n;const r=ft();return Fa(()=>{r.value=e()},{...t,flush:(n=t==null?void 0:t.flush)!=null?n:"sync"}),on(r)}function ao(e,t){let n,r,o;const i=te(!0),l=()=>{i.value=!0,o()};fe(e,l,{flush:"sync"});const a=typeof t=="function"?t:t.get,s=typeof t=="function"?void 0:t.set,c=Da((f,d)=>(r=f,o=d,{get(){return i.value&&(n=a(),i.value=!1),r(),n},set(p){s==null||s(p)}}));return Object.isExtensible(c)&&(c.trigger=l),c}function sn(e){return _a()?(xu(e),!0):!1}function Ne(e){return typeof e=="function"?e():en(e)}const _r=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Uh=Object.prototype.toString,Kh=e=>Uh.call(e)==="[object Object]",cr=()=>{},Zl=Gh();function Gh(){var e,t;return _r&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function oc(e,t){function n(...r){return new Promise((o,i)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(o).catch(i)})}return n}const ic=e=>e();function Yh(e,t=!0,n=!0,r=!1){let o=0,i,l=!0,a=cr,s;const c=()=>{i&&(clearTimeout(i),i=void 0,a(),a=cr)};return d=>{const p=Ne(e),m=Date.now()-o,g=()=>s=d();return c(),p<=0?(o=Date.now(),g()):(m>p&&(n||!l)?(o=Date.now(),g()):t&&(s=new Promise((w,T)=>{a=r?T:w,i=setTimeout(()=>{o=Date.now(),l=!0,w(g()),c()},Math.max(0,p-m))})),!n&&!i&&(i=setTimeout(()=>l=!0,p)),l=!1,s)}}function Zh(e=ic){const t=te(!0);function n(){t.value=!1}function r(){t.value=!0}const o=(...i)=>{t.value&&e(...i)};return{isActive:on(t),pause:n,resume:r,eventFilter:o}}function Qh(e){let t;function n(){return t||(t=e()),t}return n.reset=async()=>{const r=t;t=void 0,r&&await r},n}function lc(e){return e||Vn()}function Jh(...e){if(e.length!==1)return Qr(...e);const t=e[0];return typeof t=="function"?on(Da(()=>({get:t,set:cr}))):te(t)}function Xh(e,t=200,n=!1,r=!0,o=!1){return oc(Yh(t,n,r,o),e)}function ev(e,t,n={}){const{eventFilter:r=ic,...o}=n;return fe(e,oc(r,t),o)}function tv(e,t,n={}){const{eventFilter:r,...o}=n,{eventFilter:i,pause:l,resume:a,isActive:s}=Zh(r);return{stop:ev(e,t,{...o,eventFilter:i}),pause:l,resume:a,isActive:s}}function so(e,t=!0,n){const r=lc(n);r?be(e,r):t?e():ln(e)}function nv(e,t){const n=lc(t);n&&vr(e,n)}function rv(e,t,n={}){const{immediate:r=!0}=n,o=te(!1);let i=null;function l(){i&&(clearTimeout(i),i=null)}function a(){o.value=!1,l()}function s(...c){l(),o.value=!0,i=setTimeout(()=>{o.value=!1,i=null,e(...c)},Ne(t))}return r&&(o.value=!0,_r&&s()),sn(a),{isPending:on(o),start:s,stop:a}}function Ql(e=!1,t={}){const{truthyValue:n=!0,falsyValue:r=!1}=t,o=ke(e),i=te(e);function l(a){if(arguments.length)return i.value=a,i.value;{const s=Ne(n);return i.value=i.value===s?Ne(r):s,i.value}}return o?l:[i,l]}function _t(e){var t;const n=Ne(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Ct=_r?window:void 0,ac=_r?window.document:void 0,sc=_r?window.navigator:void 0;function Me(...e){let t,n,r,o;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,o]=e,t=Ct):[t,n,r,o]=e,!t)return cr;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const i=[],l=()=>{i.forEach(f=>f()),i.length=0},a=(f,d,p,m)=>(f.addEventListener(d,p,m),()=>f.removeEventListener(d,p,m)),s=fe(()=>[_t(t),Ne(o)],([f,d])=>{if(l(),!f)return;const p=Kh(d)?{...d}:d;i.push(...n.flatMap(m=>r.map(g=>a(f,m,g,p))))},{immediate:!0,flush:"post"}),c=()=>{s(),l()};return sn(c),c}function ov(){const e=te(!1);return Vn()&&be(()=>{e.value=!0}),e}function Nn(e){const t=ov();return I(()=>(t.value,!!e()))}function cc(e,t={}){const{window:n=Ct}=t,r=Nn(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const i=te(!1),l=c=>{i.value=c.matches},a=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",l):o.removeListener(l))},s=Fa(()=>{r.value&&(a(),o=n.matchMedia(Ne(e)),"addEventListener"in o?o.addEventListener("change",l):o.addListener(l),i.value=o.matches)});return sn(()=>{s(),a(),o=void 0}),i}function Jl(e,t={}){const{controls:n=!1,navigator:r=sc}=t,o=Nn(()=>r&&"permissions"in r);let i;const l=typeof e=="string"?{name:e}:e,a=te(),s=()=>{i&&(a.value=i.state)},c=Qh(async()=>{if(o.value){if(!i)try{i=await r.permissions.query(l),Me(i,"change",s),s()}catch{a.value="prompt"}return i}});return c(),n?{state:a,isSupported:o,query:c}:a}function iv(e={}){const{navigator:t=sc,read:n=!1,source:r,copiedDuring:o=1500,legacy:i=!1}=e,l=Nn(()=>t&&"clipboard"in t),a=Jl("clipboard-read"),s=Jl("clipboard-write"),c=I(()=>l.value||i),f=te(""),d=te(!1),p=rv(()=>d.value=!1,o);function m(){l.value&&a.value!=="denied"?t.clipboard.readText().then(y=>{f.value=y}):f.value=T()}c.value&&n&&Me(["copy","cut"],m);async function g(y=Ne(r)){c.value&&y!=null&&(l.value&&s.value!=="denied"?await t.clipboard.writeText(y):w(y),f.value=y,d.value=!0,p.start())}function w(y){const P=document.createElement("textarea");P.value=y??"",P.style.position="absolute",P.style.opacity="0",document.body.appendChild(P),P.select(),document.execCommand("copy"),P.remove()}function T(){var y,P,b;return(b=(P=(y=document==null?void 0:document.getSelection)==null?void 0:y.call(document))==null?void 0:P.toString())!=null?b:""}return{isSupported:c,text:f,copied:d,copy:g}}const Or=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},xr="__vueuse_ssr_handlers__",lv=av();function av(){return xr in Or||(Or[xr]=Or[xr]||{}),Or[xr]}function sv(e,t){return lv[e]||t}function cv(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const uv={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Xl="vueuse-storage";function fv(e,t,n,r={}){var o;const{flush:i="pre",deep:l=!0,listenToStorageChanges:a=!0,writeDefaults:s=!0,mergeDefaults:c=!1,shallow:f,window:d=Ct,eventFilter:p,onError:m=S=>{console.error(S)},initOnMounted:g}=r,w=(f?ft:te)(typeof t=="function"?t():t);if(!n)try{n=sv("getDefaultStorage",()=>{var S;return(S=Ct)==null?void 0:S.localStorage})()}catch(S){m(S)}if(!n)return w;const T=Ne(t),y=cv(T),P=(o=r.serializer)!=null?o:uv[y],{pause:b,resume:A}=tv(w,()=>M(w.value),{flush:i,deep:l,eventFilter:p});return d&&a&&so(()=>{Me(d,"storage",V),Me(d,Xl,z),g&&V()}),g||V(),w;function M(S){try{if(S==null)n.removeItem(e);else{const B=P.write(S),Z=n.getItem(e);Z!==B&&(n.setItem(e,B),d&&d.dispatchEvent(new CustomEvent(Xl,{detail:{key:e,oldValue:Z,newValue:B,storageArea:n}})))}}catch(B){m(B)}}function k(S){const B=S?S.newValue:n.getItem(e);if(B==null)return s&&T!=null&&n.setItem(e,P.write(T)),T;if(!S&&c){const Z=P.read(B);return typeof c=="function"?c(Z,T):y==="object"&&!Array.isArray(Z)?{...T,...Z}:Z}else return typeof B!="string"?B:P.read(B)}function z(S){V(S.detail)}function V(S){if(!(S&&S.storageArea!==n)){if(S&&S.key==null){w.value=T;return}if(!(S&&S.key!==e)){b();try{(S==null?void 0:S.newValue)!==P.write(w.value)&&(w.value=k(S))}catch(B){m(B)}finally{S?ln(A):A()}}}}}function dv(e){return cc("(prefers-color-scheme: dark)",e)}function pv(e,t,n={}){const{window:r=Ct,...o}=n;let i;const l=Nn(()=>r&&"MutationObserver"in r),a=()=>{i&&(i.disconnect(),i=void 0)},s=fe(()=>_t(e),d=>{a(),l.value&&r&&d&&(i=new MutationObserver(t),i.observe(d,o))},{immediate:!0}),c=()=>i==null?void 0:i.takeRecords(),f=()=>{a(),s()};return sn(f),{isSupported:l,stop:f,takeRecords:c}}function hv(e,t,n={}){const{window:r=Ct,...o}=n;let i;const l=Nn(()=>r&&"ResizeObserver"in r),a=()=>{i&&(i.disconnect(),i=void 0)},s=I(()=>Array.isArray(e)?e.map(d=>_t(d)):[_t(e)]),c=fe(s,d=>{if(a(),l.value&&r){i=new ResizeObserver(t);for(const p of d)p&&i.observe(p,o)}},{immediate:!0,flush:"post",deep:!0}),f=()=>{a(),c()};return sn(f),{isSupported:l,stop:f}}function vv(e,t={width:0,height:0},n={}){const{window:r=Ct,box:o="content-box"}=n,i=I(()=>{var d,p;return(p=(d=_t(e))==null?void 0:d.namespaceURI)==null?void 0:p.includes("svg")}),l=te(t.width),a=te(t.height),{stop:s}=hv(e,([d])=>{const p=o==="border-box"?d.borderBoxSize:o==="content-box"?d.contentBoxSize:d.devicePixelContentBoxSize;if(r&&i.value){const m=_t(e);if(m){const g=r.getComputedStyle(m);l.value=Number.parseFloat(g.width),a.value=Number.parseFloat(g.height)}}else if(p){const m=Array.isArray(p)?p:[p];l.value=m.reduce((g,{inlineSize:w})=>g+w,0),a.value=m.reduce((g,{blockSize:w})=>g+w,0)}else l.value=d.contentRect.width,a.value=d.contentRect.height},n);so(()=>{const d=_t(e);d&&(l.value="offsetWidth"in d?d.offsetWidth:t.width,a.value="offsetHeight"in d?d.offsetHeight:t.height)});const c=fe(()=>_t(e),d=>{l.value=d?t.width:0,a.value=d?t.height:0});function f(){s(),c()}return{width:l,height:a,stop:f}}const ea=["fullscreenchange","webkitfullscreenchange","webkitendfullscreen","mozfullscreenchange","MSFullscreenChange"];function Vi(e,t={}){const{document:n=ac,autoExit:r=!1}=t,o=I(()=>{var y;return(y=_t(e))!=null?y:n==null?void 0:n.querySelector("html")}),i=te(!1),l=I(()=>["requestFullscreen","webkitRequestFullscreen","webkitEnterFullscreen","webkitEnterFullScreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen"].find(y=>n&&y in n||o.value&&y in o.value)),a=I(()=>["exitFullscreen","webkitExitFullscreen","webkitExitFullScreen","webkitCancelFullScreen","mozCancelFullScreen","msExitFullscreen"].find(y=>n&&y in n||o.value&&y in o.value)),s=I(()=>["fullScreen","webkitIsFullScreen","webkitDisplayingFullscreen","mozFullScreen","msFullscreenElement"].find(y=>n&&y in n||o.value&&y in o.value)),c=["fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement"].find(y=>n&&y in n),f=Nn(()=>o.value&&n&&l.value!==void 0&&a.value!==void 0&&s.value!==void 0),d=()=>c?(n==null?void 0:n[c])===o.value:!1,p=()=>{if(s.value){if(n&&n[s.value]!=null)return n[s.value];{const y=o.value;if((y==null?void 0:y[s.value])!=null)return!!y[s.value]}}return!1};async function m(){if(!(!f.value||!i.value)){if(a.value)if((n==null?void 0:n[a.value])!=null)await n[a.value]();else{const y=o.value;(y==null?void 0:y[a.value])!=null&&await y[a.value]()}i.value=!1}}async function g(){if(!f.value||i.value)return;p()&&await m();const y=o.value;l.value&&(y==null?void 0:y[l.value])!=null&&(await y[l.value](),i.value=!0)}async function w(){await(i.value?m():g())}const T=()=>{const y=p();(!y||y&&d())&&(i.value=y)};return Me(n,ea,T,!1),Me(()=>_t(o),ea,T,!1),r&&sn(m),{isSupported:f,isFullscreen:i,enter:g,exit:m,toggle:w}}function Ro(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Io(e,t=cr,n={}){const{immediate:r=!0,manual:o=!1,type:i="text/javascript",async:l=!0,crossOrigin:a,referrerPolicy:s,noModule:c,defer:f,document:d=ac,attrs:p={}}=n,m=te(null);let g=null;const w=P=>new Promise((b,A)=>{const M=V=>(m.value=V,b(V),V);if(!d){b(!1);return}let k=!1,z=d.querySelector(`script[src="${Ne(e)}"]`);z?z.hasAttribute("data-loaded")&&M(z):(z=d.createElement("script"),z.type=i,z.async=l,z.src=Ne(e),f&&(z.defer=f),a&&(z.crossOrigin=a),c&&(z.noModule=c),s&&(z.referrerPolicy=s),Object.entries(p).forEach(([V,S])=>z==null?void 0:z.setAttribute(V,S)),k=!0),z.addEventListener("error",V=>A(V)),z.addEventListener("abort",V=>A(V)),z.addEventListener("load",()=>{z.setAttribute("data-loaded","true"),t(z),M(z)}),k&&(z=d.head.appendChild(z)),P||M(z)}),T=(P=!0)=>(g||(g=w(P)),g),y=()=>{if(!d)return;g=null,m.value&&(m.value=null);const P=d.querySelector(`script[src="${Ne(e)}"]`);P&&d.head.removeChild(P)};return r&&!o&&so(T),o||nv(y),{scriptTag:m,load:T,unload:y}}function uc(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const kr=new WeakMap;function fc(e,t=!1){const n=te(t);let r=null,o;fe(Jh(e),a=>{const s=Ro(Ne(a));if(s){const c=s;kr.get(c)||kr.set(c,o),n.value&&(c.style.overflow="hidden")}},{immediate:!0});const i=()=>{const a=Ro(Ne(e));!a||n.value||(Zl&&(r=Me(a,"touchmove",s=>{mv(s)},{passive:!1})),a.style.overflow="hidden",n.value=!0)},l=()=>{var a;const s=Ro(Ne(e));!s||!n.value||(Zl&&(r==null||r()),s.style.overflow=(a=kr.get(s))!=null?a:"",kr.delete(s),n.value=!1)};return sn(l),I({get(){return n.value},set(a){a?i():l()}})}function _v(e={}){const{window:t=Ct,behavior:n="auto"}=e;if(!t)return{x:te(0),y:te(0)};const r=te(t.scrollX),o=te(t.scrollY),i=I({get(){return r.value},set(a){scrollTo({left:a,behavior:n})}}),l=I({get(){return o.value},set(a){scrollTo({top:a,behavior:n})}});return Me(t,"scroll",()=>{r.value=t.scrollX,o.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:l}}function gv(e={}){const{window:t=Ct,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:o=!0,includeScrollbar:i=!0}=e,l=te(n),a=te(r),s=()=>{t&&(i?(l.value=t.innerWidth,a.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,a.value=t.document.documentElement.clientHeight))};if(s(),so(s),Me("resize",s,{passive:!0}),o){const c=cc("(orientation: portrait)");fe(c,()=>s())}return{width:l,height:a}}const dc=({type:e="info",text:t="",vertical:n,color:r},{slots:o})=>{var i;return u("span",{class:["vp-badge",e,{diy:r}],style:{verticalAlign:n??!1,backgroundColor:r??!1}},((i=o.default)==null?void 0:i.call(o))||t)};dc.displayName="Badge";var bv=U({name:"FontIcon",props:{icon:{type:String,default:""},color:{type:String,default:""},size:{type:[String,Number],default:""}},setup(e){const t=I(()=>{const r=["font-icon icon"],o=`fas fa-${e.icon}`;return r.push("fa-fw fa-sm"),r.push(e.icon.includes(" ")?e.icon:o),r}),n=I(()=>{const r={};return e.color&&(r.color=e.color),e.size&&(r["font-size"]=Number.isNaN(Number(e.size))?e.size:`${e.size}px`),$n(r).length?r:null});return()=>e.icon?u("span",{key:e.icon,class:t.value,style:n.value}):null}});const pc=()=>u(Ae,{name:"back-to-top"},()=>[u("path",{d:"M512 843.2c-36.2 0-66.4-13.6-85.8-21.8-10.8-4.6-22.6 3.6-21.8 15.2l7 102c.4 6.2 7.6 9.4 12.6 5.6l29-22c3.6-2.8 9-1.8 11.4 2l41 64.2c3 4.8 10.2 4.8 13.2 0l41-64.2c2.4-3.8 7.8-4.8 11.4-2l29 22c5 3.8 12.2.6 12.6-5.6l7-102c.8-11.6-11-20-21.8-15.2-19.6 8.2-49.6 21.8-85.8 21.8z"}),u("path",{d:"m795.4 586.2-96-98.2C699.4 172 513 32 513 32S324.8 172 324.8 488l-96 98.2c-3.6 3.6-5.2 9-4.4 14.2L261.2 824c1.8 11.4 14.2 17 23.6 10.8L419 744s41.4 40 94.2 40c52.8 0 92.2-40 92.2-40l134.2 90.8c9.2 6.2 21.6.6 23.6-10.8l37-223.8c.4-5.2-1.2-10.4-4.8-14zM513 384c-34 0-61.4-28.6-61.4-64s27.6-64 61.4-64c34 0 61.4 28.6 61.4 64S547 384 513 384z"})]);pc.displayName="BackToTopIcon";var yv={"/zh/":{backToTop:"返回顶部"},"/":{backToTop:"Back to top"}},Ev=U({name:"BackToTop",props:{threshold:{type:Number,default:100},noProgress:Boolean},setup(e){const t=Le(),n=zn(yv),r=ft(),{height:o}=vv(r),{height:i}=gv(),{y:l}=_v(),a=I(()=>t.value.backToTop!==!1&&l.value>e.threshold),s=I(()=>l.value/(o.value-i.value)*100);return be(()=>{r.value=document.body}),()=>u(xt,{name:"fade"},()=>a.value?u("button",{type:"button",class:"vp-back-to-top-button","aria-label":n.value.backToTop,"data-balloon-pos":"left",onClick:()=>{window.scrollTo({top:0,behavior:"smooth"})}},[e.noProgress?null:u("span",{class:"vp-scroll-progress",role:"progressbar","aria-labelledby":"loadinglabel","aria-valuenow":s.value},u("svg",u("circle",{cx:"50%",cy:"50%",style:{"stroke-dasharray":`calc(${Math.PI*s.value}% - ${4*Math.PI}px) calc(${Math.PI*100}% - ${4*Math.PI}px)`}}))),u(pc)]):null)}});const wv=ot({enhance:({app:e})=>{Ot("Badge")||e.component("Badge",dc),Ot("FontIcon")||e.component("FontIcon",bv)},setup:()=>{Io("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/brands.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}}),Io("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/solid.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}}),Io("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/fontawesome.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}})},rootComponents:[()=>u(Ev,{})]});function Tv(e,t,n){var r,o,i;t===void 0&&(t=50),n===void 0&&(n={});var l=(r=n.isImmediate)!=null&&r,a=(o=n.callback)!=null&&o,s=n.maxWait,c=Date.now(),f=[];function d(){if(s!==void 0){var m=Date.now()-c;if(m+t>=s)return s-m}return t}var p=function(){var m=[].slice.call(arguments),g=this;return new Promise(function(w,T){var y=l&&i===void 0;if(i!==void 0&&clearTimeout(i),i=setTimeout(function(){if(i=void 0,c=Date.now(),!l){var b=e.apply(g,m);a&&a(b),f.forEach(function(A){return(0,A.resolve)(b)}),f=[]}},d()),y){var P=e.apply(g,m);return a&&a(P),w(P)}f.push({resolve:w,reject:T})})};return p.cancel=function(m){i!==void 0&&clearTimeout(i),f.forEach(function(g){return(0,g.reject)(m)}),f=[]},p}const Av=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:r=5})=>{const o=Ge(),l=Tv(()=>{var w,T;const a=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(a-0)p.some(P=>P.hash===y.hash));for(let y=0;y=(((w=P.parentElement)==null?void 0:w.offsetTop)??0)-r,M=!b||a<(((T=b.parentElement)==null?void 0:T.offsetTop)??0)-r;if(!(A&&M))continue;const z=decodeURIComponent(o.currentRoute.value.hash),V=decodeURIComponent(P.hash);if(z===V)return;if(d){for(let S=y+1;S{window.addEventListener("scroll",l)}),bi(()=>{window.removeEventListener("scroll",l)})},ta=async(e,t)=>{const{scrollBehavior:n}=e.options;e.options.scrollBehavior=void 0,await e.replace({query:e.currentRoute.value.query,hash:t}).finally(()=>e.options.scrollBehavior=n)},Lv=".vp-sidebar-link, .toc-link",Pv=".header-anchor",Rv=200,Iv=5,Ov=ot({setup(){Av({headerLinkSelector:Lv,headerAnchorSelector:Pv,delay:Rv,offset:Iv})}});let hc=e=>ue(e.title)?{title:e.title}:null;const vc=Symbol(""),xv=e=>{hc=e},kv=()=>_e(vc),Cv=e=>{e.provide(vc,hc)};var Dv={"/zh/":{title:"目录",empty:"暂无目录"},"/":{title:"Catalog",empty:"No catalog"}},Sv=U({name:"AutoCatalog",props:{base:{type:String,default:""},level:{type:Number,default:3},index:Boolean,hideHeading:Boolean},setup(e){const t=kv(),n=zn(Dv),r=de(),o=Ge(),i=As(),l=te(o.getRoutes().map(({meta:c,path:f})=>{const d=f.split("/").length;return{level:fn(f,"/")?d-2:d-1,...t(c),base:f.replace(/\/[^/]+\/?$/,"/"),path:f}}).filter(c=>Ks(c)&&ue(c.title))),a=()=>{const c=e.base?Qd(vs(e.base)):r.value.path.replace(/\/[^/]+$/,"/"),f=c.split("/").length-2,d=[];return l.value.filter(({level:p,path:m})=>{if(!xn(m,c)||m===c)return!1;if(c==="/"){const g=$n(i.value.locales).filter(w=>w!=="/");if(m==="/404.html"||g.some(w=>xn(m,w)))return!1}return p-f<=e.level&&(fn(m,".html")&&!fn(m,"/index.html")||fn(m,"/"))}).sort(({title:p,level:m,path:g,order:w},{title:T,level:y,path:P,order:b})=>m-y||(fn(g,"/")?-1:fn(P,"/")?1:Po(w)?Po(b)?w>0?b>0?w-b:-1:b<0?w-b:1:w:Po(b)?b:p.localeCompare(T))).forEach(p=>{var w;const{base:m,level:g}=p;switch(g){case 1:d.push(p);break;case 2:{const T=d.find(y=>y.path===m);T&&(T.children??(T.children=[])).push(p);break}default:{const T=d.find(y=>y.path===m.replace(/\/[^/]+\/$/,"/"));if(T){const y=(w=T.children)==null?void 0:w.find(P=>P.path===m);y&&(y.children??(y.children=[])).push(p)}}}}),d},s=I(()=>a());return()=>{const c=s.value.some(f=>f.children);return u("div",{class:["vp-catalog-wrapper",{index:e.index}]},[e.hideHeading?null:u("h2",{class:"vp-catalog-main-title"},n.value.title),s.value.length?u(e.index?"ol":"ul",{class:["vp-catalogs",{deep:c}]},s.value.map(({children:f=[],title:d,path:p,content:m})=>{const g=u(et,{class:"vp-catalog-title",to:p},()=>m?u(m):d);return u("li",{class:"vp-catalog"},c?[u("h3",{id:d,class:["vp-catalog-child-title",{"has-children":f.length}]},[u("a",{href:`#${d}`,class:"header-anchor","aria-hidden":!0},"#"),g]),f.length?u(e.index?"ol":"ul",{class:"vp-child-catalogs"},f.map(({children:w=[],content:T,path:y,title:P})=>u("li",{class:"vp-child-catalog"},[u("div",{class:["vp-catalog-sub-title",{"has-children":w.length}]},[u("a",{href:`#${P}`,class:"header-anchor"},"#"),u(et,{class:"vp-catalog-title",to:y},()=>T?u(T):P)]),w.length?u(e.index?"ol":"div",{class:e.index?"vp-sub-catalogs":"vp-sub-catalogs-wrapper"},w.map(({content:b,path:A,title:M})=>e.index?u("li",{class:"vp-sub-catalog"},u(et,{to:A},()=>b?u(b):M)):u(et,{class:"vp-sub-catalog-link",to:A},()=>b?u(b):M))):null]))):null]:u("div",{class:"vp-catalog-child-title"},g))})):u("p",{class:"vp-empty-catalog"},n.value.empty)])}}}),Vv=ot({enhance:({app:e})=>{Cv(e),Ot("AutoCatalog",e)||e.component("AutoCatalog",Sv)}});const Mv=u("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[u("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),u("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),mc=U({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=an(),n=I(()=>e.locales[t.value]??{openInNewWindow:"open in new window"});return()=>u("span",[Mv,u("span",{class:"external-link-icon-sr-only"},n.value.openInNewWindow)])}});var $v={};const zv=$v,Nv=ot({enhance({app:e}){e.component("ExternalLinkIcon",u(mc,{locales:zv}))}});/** - * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress - * @license MIT - */const se={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=se.isStarted();e=Oo(e,se.settings.minimum,1),se.status=e===1?null:e;const n=se.render(!t),r=n.querySelector(se.settings.barSelector),o=se.settings.speed,i=se.settings.easing;return n.offsetWidth,Bv(l=>{Cr(r,{transform:"translate3d("+na(e)+"%,0,0)",transition:"all "+o+"ms "+i}),e===1?(Cr(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(function(){Cr(n,{transition:"all "+o+"ms linear",opacity:"0"}),setTimeout(function(){se.remove(),l()},o)},o)):setTimeout(()=>l(),o)}),se},isStarted:()=>typeof se.status=="number",start:()=>{se.status||se.set(0);const e=()=>{setTimeout(()=>{se.status&&(se.trickle(),e())},se.settings.trickleSpeed)};return se.settings.trickle&&e(),se},done:e=>!e&&!se.status?se:se.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=se.status;return t?(typeof e!="number"&&(e=(1-t)*Oo(Math.random()*t,.1,.95)),t=Oo(t+e,0,.994),se.set(t)):se.start()},trickle:()=>se.inc(Math.random()*se.settings.trickleRate),render:e=>{if(se.isRendered())return document.getElementById("nprogress");ra(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=se.settings.template;const n=t.querySelector(se.settings.barSelector),r=e?"-100":na(se.status||0),o=document.querySelector(se.settings.parent);return Cr(n,{transition:"all 0 linear",transform:"translate3d("+r+"%,0,0)"}),o!==document.body&&ra(o,"nprogress-custom-parent"),o==null||o.appendChild(t),t},remove:()=>{oa(document.documentElement,"nprogress-busy"),oa(document.querySelector(se.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&Fv(e)},isRendered:()=>!!document.getElementById("nprogress")},Oo=(e,t,n)=>en?n:e,na=e=>(-1+e)*100,Bv=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),Cr=function(){const e=["Webkit","O","Moz","ms"],t={};function n(l){return l.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(a,s){return s.toUpperCase()})}function r(l){const a=document.body.style;if(l in a)return l;let s=e.length;const c=l.charAt(0).toUpperCase()+l.slice(1);let f;for(;s--;)if(f=e[s]+c,f in a)return f;return l}function o(l){return l=n(l),t[l]??(t[l]=r(l))}function i(l,a,s){a=o(a),l.style[a]=s}return function(l,a){for(const s in a){const c=a[s];c!==void 0&&Object.prototype.hasOwnProperty.call(a,s)&&i(l,s,c)}}}(),_c=(e,t)=>(typeof e=="string"?e:Mi(e)).indexOf(" "+t+" ")>=0,ra=(e,t)=>{const n=Mi(e),r=n+t;_c(n,t)||(e.className=r.substring(1))},oa=(e,t)=>{const n=Mi(e);if(!_c(e,t))return;const r=n.replace(" "+t+" "," ");e.className=r.substring(1,r.length-1)},Mi=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),Fv=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)},Hv=()=>{be(()=>{const e=Ge(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||se.start()}),e.afterEach(n=>{t.add(n.path),se.done()})})},jv=ot({setup(){Hv()}}),Wv=JSON.parse(`{"encrypt":{},"logo":"/logo.svg","author":{"name":"ZLMediaKit","url":"https://docs.ZLMediaKit.com"},"repo":"ZLMediaKit/ZLMediaKit","docsRepo":"ZLMediaKit/docs","docsDir":"src","navbarLayout":{"start":["Brand"],"center":[],"end":["Links","Language","Repo","Outlook","Search"]},"locales":{"/zh/":{"lang":"zh-CN","navbarLocales":{"langName":"简体中文","selectLangAriaLabel":"选择语言"},"metaLocales":{"author":"作者","date":"写作日期","origin":"原创","views":"访问量","category":"分类","tag":"标签","readingTime":"阅读时间","words":"字数","toc":"此页内容","prev":"上一页","next":"下一页","lastUpdated":"上次编辑于","contributors":"贡献者","editLink":"在 GitHub 上编辑此页","print":"打印"},"outlookLocales":{"themeColor":"主题色","darkmode":"外观","fullscreen":"全屏"},"routeLocales":{"skipToContent":"跳至主要內容","notFoundTitle":"页面不存在","notFoundMsg":["这里什么也没有","我们是怎么来到这儿的?","这 是 四 零 四 !","看起来你访问了一个失效的链接"],"back":"返回上一页","home":"带我回家","openInNewWindow":"Open in new window"},"navbar":["/zh/","/zh/guide/","/zh/tutorial/",{"text":"参考","icon":"lightbulb","prefix":"/zh/reference/","children":["test","resources","documents","development_log"]},{"text":"了解更多","icon":"laptop-code","prefix":"/zh/more/","children":["collaborative_projects","license","thanks","contact","use_cases"]}],"sidebar":{"/zh/":["","tutorial/",{"text":"指南","icon":"book","prefix":"guide/","children":"structure"},{"text":"参考","icon":"laptop-code","prefix":"reference/","link":"reference/","children":"structure"},{"text":"了解更多","icon":"laptop-code","prefix":"more/","link":"more/","children":"structure"}]},"footer":"MIT Licensed","displayFooter":true},"/":{"lang":"en-US","navbarLocales":{"langName":"English","selectLangAriaLabel":"Select language"},"metaLocales":{"author":"Author","date":"Writing Date","origin":"Original","views":"Page views","category":"Category","tag":"Tag","readingTime":"Reading Time","words":"Words","toc":"On This Page","prev":"Prev","next":"Next","lastUpdated":"Last update","contributors":"Contributors","editLink":"Edit this page on GitHub","print":"Print"},"outlookLocales":{"themeColor":"Theme Color","darkmode":"Theme Mode","fullscreen":"Full Screen"},"routeLocales":{"skipToContent":"Skip to main content","notFoundTitle":"Page not found","notFoundMsg":["There’s nothing here.","How did we get here?","That’s a Four-Oh-Four.","Looks like we've got some broken links."],"back":"Go back","home":"Take me home","openInNewWindow":"Open in new window"},"navbar":["/","/guide/","/tutorial/",{"text":"Reference","icon":"lightbulb","prefix":"/reference/","children":["test","resources","documents","development_log"]},{"text":"More","icon":"lightbulb","prefix":"/more/","children":["collaborative_projects","license","thanks","contact","use_cases"]}],"sidebar":{"/":["","tutorial/",{"text":"Docs","icon":"book","prefix":"guide/","children":"structure"},{"text":"Reference","icon":"laptop-code","prefix":"reference/","link":"reference/","children":"structure"},{"text":"More","icon":"laptop-code","prefix":"more/","link":"more/","children":"structure"}]},"footer":"MIT Licensed","displayFooter":true}}}`),qv=te(Wv),gc=()=>qv,bc=Symbol(""),Uv=()=>{const e=_e(bc);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},Kv=(e,t)=>{const{locales:n,...r}=e;return{...r,...n==null?void 0:n[t]}},Gv=ot({enhance({app:e}){const t=gc(),n=e._context.provides[Ii],r=I(()=>Kv(t.value,n.value));e.provide(bc,r),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return r.value}}})}});var Yv={provider:"Giscus",lightTheme:"https://unpkg.com/vuepress-theme-hope@2.0.0-rc.2/templates/giscus/light.css",darkTheme:"https://unpkg.com/vuepress-theme-hope@2.0.0-rc.2/templates/giscus/dark.css",repo:"ZLMediaKit/docs",repoId:"R_kgDOKboWmQ",category:"Announcements",categoryId:"DIC_kwDOKboWmc4CZ_77"};const Zv=Yv;let Qv=Zv;const yc=Symbol(""),Ec=()=>_e(yc),Jv=Ec,Xv=e=>{e.provide(yc,Qv)},ia=["ar","ca","de","en","eo","es","fa","fr","he","id","it","ja","ko","nl","pl","pt","ro","ru","th","tr","uk","vi","zh-CN","zh-TW"];var em=U({name:"GiscusComment",props:{identifier:{type:String,required:!0},darkmode:Boolean},setup(e){const t=Jv(),n=!!(t.repo&&t.repoId&&t.category&&t.categoryId),{repo:r,repoId:o,category:i,categoryId:l}=t,a=te(!1),s=I(()=>{const f=Ri().value;if(ia.includes(f))return f;const d=f.split("-")[0];return ia.includes(d)?d:"en"}),c=I(()=>({repo:r,repoId:o,category:i,categoryId:l,lang:s.value,theme:e.darkmode?t.darkTheme||"dark":t.lightTheme||"light",mapping:t.mapping||"pathname",term:e.identifier,inputPosition:t.inputPosition||"top",reactionsEnabled:t.reactionsEnabled===!1?"0":"1",strict:t.strict===!1?"0":"1",loading:t.lazyLoading===!1?"eager":"lazy",emitMetadata:"0"}));return be(async()=>{await h(()=>import("./giscus-unEZQsJ0.js"),__vite__mapDeps([])),a.value=!0}),()=>n?u("div",{id:"comment",class:["giscus-wrapper",{"input-top":t.inputPosition!=="bottom"}]},a.value?u("giscus-widget",c.value):u(Ci)):null}}),tm=U({name:"CommentService",props:{darkmode:Boolean},setup(e){const t=Ec(),n=de(),r=Le(),o=t.comment!==!1,i=I(()=>r.value.comment||o&&r.value.comment!==!1);return()=>u(em,{identifier:r.value.commentID||n.value.path,darkmode:e.darkmode,style:{display:i.value?"block":"none"}})}}),nm=ot({enhance:({app:e})=>{Xv(e),e.component("CommentService",tm)}}),rm={"/zh/":{copy:"复制代码",copied:"已复制",hint:"复制成功"},"/":{copy:"Copy code",copied:"Copied",hint:"Copied successfully"}},om=['.theme-hope-content div[class*="language-"] pre'];const im=800,lm=2e3,am=rm,sm=!1,cm=om,la=!1,xo=new Map,um=()=>{const{copy:e}=iv({legacy:!0}),t=zn(am),n=de(),r=qh(),o=a=>{if(!a.hasAttribute("copy-code-registered")){const s=document.createElement("button");s.type="button",s.classList.add("copy-code-button"),s.innerHTML='
',s.setAttribute("aria-label",t.value.copy),s.setAttribute("data-copied",t.value.copied),a.parentElement&&a.parentElement.insertBefore(s,a),a.setAttribute("copy-code-registered","")}},i=()=>ln().then(()=>new Promise(a=>{setTimeout(()=>{cm.forEach(s=>{document.querySelectorAll(s).forEach(o)}),a()},im)})),l=(a,s,c)=>{let{innerText:f=""}=s;/language-(shellscript|shell|bash|sh|zsh)/.test(a.classList.toString())&&(f=f.replace(/^ *(\$|>) /gm,"")),e(f).then(()=>{c.classList.add("copied"),clearTimeout(xo.get(c));const d=setTimeout(()=>{c.classList.remove("copied"),c.blur(),xo.delete(c)},lm);xo.set(c,d)})};be(()=>{(!r.value||la)&&i(),Me("click",a=>{const s=a.target;if(s.matches('div[class*="language-"] > button.copy')){const c=s.parentElement,f=s.nextElementSibling;f&&l(c,f,s)}else if(s.matches('div[class*="language-"] div.copy-icon')){const c=s.parentElement,f=c.parentElement,d=c.nextElementSibling;d&&l(f,d,c)}}),fe(()=>n.value.path,()=>{(!r.value||la)&&i()})})};var fm=ot({setup:()=>{um()}});const dm=()=>{Me("beforeprint",()=>{document.querySelectorAll("details").forEach(e=>{e.open=!0})})};let pm={};const wc=Symbol(""),hm=()=>_e(wc),vm=e=>{e.provide(wc,pm)},aa=()=>{const e=document.documentElement;return e.classList.contains("dark")||e.getAttribute("data-theme")==="dark"},dn={useMaxWidth:!1},mm=e=>({dark:e,background:e?"#1e1e1e":"#fff",primaryColor:e?"#389d70":"#4abf8a",primaryBorderColor:e?"#389d70":"#4abf8a",primaryTextColor:e?"#fff":"#000",secondaryColor:"#ffb500",secondaryBorderColor:e?"#fff":"#000",secondaryTextColor:e?"#ddd":"#333",tertiaryColor:e?"#282828":"#efeef4",tertiaryBorderColor:e?"#bbb":"#242424",tertiaryTextColor:e?"#ddd":"#333",noteBkgColor:e?"#f6d365":"#fff5ad",noteTextColor:"#242424",noteBorderColor:e?"#f6d365":"#333",lineColor:e?"#d3d3d3":"#333",textColor:e?"#fff":"#242424",mainBkg:e?"#389d70":"#4abf8a",errorBkgColor:"#eb4d5d",errorTextColor:"#fff",nodeBorder:e?"#389d70":"#4abf8a",nodeTextColor:e?"#fff":"#242424",signalTextColor:e?"#9e9e9e":"#242424",classText:"#fff",labelColor:"#fff",attributeBackgroundColorEven:e?"#0d1117":"#fff",attributeBackgroundColorOdd:e?"#161b22":"#f8f8f8",fillType0:e?"#cf1322":"#f1636e",fillType1:"#f39c12",fillType2:"#2ecc71",fillType3:"#fa541c",fillType4:"#25a55b",fillType5:"#13c2c2",fillType6:"#096dd9",fillType7:"#aa6fe9"});var _m=U({name:"Mermaid",props:{id:{type:String,required:!0},code:{type:String,required:!0},title:{type:String,default:""}},setup(e){const{themeVariables:t,...n}=hm(),r=ft(),o=I(()=>Gl(e.code)),i=te(""),l=te(!1);let a=!1;const s=async()=>{const[{default:d}]=await Promise.all([h(()=>import("./mermaid.core-zy7cM8l9.js").then(p=>p.b7),__vite__mapDeps([])),a?Promise.resolve():(a=!0,new Promise(p=>setTimeout(p,800)))]);d.initialize({theme:"base",themeVariables:{...mm(l.value),...Mh(t)?t(l.value):t},flowchart:dn,sequence:dn,journey:dn,gantt:dn,er:dn,pie:dn,...n,startOnLoad:!1}),i.value=(await d.render(e.id,o.value)).svg},c=()=>{const{body:d}=document,p=document.createElement("div");p.classList.add("mermaid-preview"),p.innerHTML=i.value,d.appendChild(p),p.addEventListener("click",()=>{d.removeChild(p)})},f=()=>{const d=`data:image/svg+xml;charset=utf8,${i.value.replace(/
/g,"
").replace(/%/g,"%25").replace(/"/g,"%22").replace(/'/g,"%27").replace(/&/g,"%26").replace(/#/g,"%23").replace(/{/g,"%7B").replace(/}/g,"%7D").replace(//g,"%3E")}`,p=document.createElement("a");p.setAttribute("href",d),p.setAttribute("download",`${e.title?Gl(e.title):e.id}.svg`),p.click()};return be(()=>{l.value=aa(),s(),pv(document.documentElement,()=>{l.value=aa()},{attributeFilter:["class","data-theme"],attributes:!0}),fe(l,()=>s())}),()=>[u("div",{class:"mermaid-actions"},[u("button",{class:"preview-button",onClick:()=>c(),title:"preview",innerHTML:''}),u("button",{class:"download-button",onClick:()=>f(),title:"download",innerHTML:''})]),u("div",{ref:r,class:"mermaid-wrapper"},i.value?u("div",{class:"mermaid-content",innerHTML:i.value}):u(Ci,{class:"mermaid-loading",height:96}))]}});const gm=ot({enhance:({app:e})=>{vm(e),e.component("Mermaid",_m)},setup:()=>{dm()}});let bm={};const Tc=Symbol(""),ym=()=>_e(Tc),Em=e=>{e.provide(Tc,bm)};var wm={"/zh/":{closeTitle:"关闭",downloadTitle:"下载图片",fullscreenTitle:"切换全屏",zoomTitle:"缩放",arrowPrevTitle:"上一个 (左箭头)",arrowNextTitle:"下一个 (右箭头)"},"/":{closeTitle:"Close",downloadTitle:"Download Image",fullscreenTitle:"Switch to full screen",zoomTitle:"Zoom in/out",arrowPrevTitle:"Prev (Arrow Left)",arrowNextTitle:"Next (Arrow Right)"}};const Tm=".theme-hope-content :not(a) > img:not([no-view])",Am=wm,Lm=800,Pm='
',Rm=e=>ue(e)?Array.from(document.querySelectorAll(e)):e.map(t=>Array.from(document.querySelectorAll(t))).flat(),Ac=e=>new Promise((t,n)=>{e.complete?t({type:"image",element:e,src:e.src,width:e.naturalWidth,height:e.naturalHeight,alt:e.alt,msrc:e.src}):(e.onload=()=>t(Ac(e)),e.onerror=r=>n(r))}),Im=()=>{const e=zn(Am),t=Le(),n=de(),{isSupported:r,toggle:o}=Vi(),i=ym();let l;const a=I(()=>t.value.photoSwipe===!1?!1:t.value.photoSwipe||Tm),s=f=>{f.on("uiRegister",()=>{r&&f.ui.registerElement({name:"fullscreen",order:7,isButton:!0,html:'',onClick:()=>{o()}}),f.ui.registerElement({name:"download",order:8,isButton:!0,tagName:"a",html:{isCustomSVG:!0,inner:'',outlineID:"pswp__icn-download"},onInit:(d,p)=>{d.setAttribute("download",""),d.setAttribute("target","_blank"),d.setAttribute("rel","noopener"),p.on("change",()=>{d.setAttribute("href",p.currSlide.data.src)})}}),f.ui.registerElement({name:"bulletsIndicator",className:"photo-swipe-bullets-indicator",appendTo:"wrapper",onInit:(d,p)=>{const m=[];let g=-1;for(let w=0;w{p.goTo(m.indexOf(y.target))},m.push(T),d.appendChild(T)}p.on("change",()=>{g>=0&&m[g].classList.remove("active"),m[p.currIndex].classList.add("active"),g=p.currIndex})}})})},c=async()=>{if(a.value)return Promise.all([h(()=>import("./photoswipe.esm-i2ohwMnJ.js"),__vite__mapDeps([])),ln().then(()=>new Promise(f=>setTimeout(f,Lm)).then(()=>Rm(a.value)))]).then(([{default:f},d])=>{const p=d.map(m=>({html:Pm,element:m,msrc:m.src}));d.forEach((m,g)=>{const w=()=>{l=new f({preloaderDelay:0,showHideAnimationType:"zoom",...e.value,...i,dataSource:p,index:g,closeOnVerticalDrag:!0,wheelToZoom:!1}),s(l),l.addFilter("thumbEl",()=>m),l.addFilter("placeholderSrc",()=>m.src),l.init()};m.style.cursor="zoom-in",m.addEventListener("click",()=>{w()}),m.addEventListener("keypress",({key:T})=>{T==="Enter"&&w()})}),d.forEach((m,g)=>{Ac(m).then(w=>{p.splice(g,1,w),l==null||l.refreshSlideContent(g)})})})};be(()=>{Me("wheel",()=>{l==null||l.close()}),fe(()=>n.value.path,c,{immediate:!0})})};var Om=ot({enhance:({app:e})=>{Em(e)},setup:()=>{Im()}});function xm(e){return{all:e=e||new Map,on:function(t,n){var r=e.get(t);r?r.push(n):e.set(t,[n])},off:function(t,n){var r=e.get(t);r&&(n?r.splice(r.indexOf(n)>>>0,1):e.set(t,[]))},emit:function(t,n){var r=e.get(t);r&&r.slice().map(function(o){o(n)}),(r=e.get("*"))&&r.slice().map(function(o){o(t,n)})}}}const Lc=Symbol(""),km=()=>{const e=_e(Lc);if(!e)throw new Error("usePWAEvent() is called without provider.");return e},Cm=async(e,t={},n=!0)=>{const{register:r}=await h(()=>import("./index-7SG8bi1h.js"),__vite__mapDeps([]));r(e,{ready(o){var i;n&&console.info("[Service Worker]: active"),(i=t.ready)==null||i.call(t,o)},registered(o){var i;n&&console.log("[Service Worker]: registered"),(i=t.registered)==null||i.call(t,o)},cached(o){var i;n&&console.log("[Service Worker]: cached"),(i=t.cached)==null||i.call(t,o)},async updatefound(o){var i;await navigator.serviceWorker.getRegistration()&&(n&&console.log("[Service Worker]: update found"),(i=t.updatefound)==null||i.call(t,o))},updated(o){var i;n&&console.log("[Service Worker]: updated"),(i=t.updated)==null||i.call(t,o)},offline(){var o;n&&console.log("[Service Worker]: offline"),(o=t.offline)==null||o.call(t)},error(o){var i;n&&console.error("[Service Worker]: ",o),(i=t.error)==null||i.call(t,o)}})},Dm=async e=>Cm(Ve("service-worker.js"),{ready(t){e.emit("ready",t)},registered(t){e.emit("registered",t)},cached(t){e.emit("cached",t)},updatefound(t){e.emit("updatefound",t)},updated(t){const n="service-worker-version",r=Number(localStorage.getItem(n)||0);localStorage.setItem(n,(r+1).toString()),localStorage.removeItem("manifest"),e.emit("updated",t)},offline(){e.emit("offline")},error(t){e.emit("error",t)}}),Sm=()=>{const e=xm();tn(Lc,e),be(async()=>{var n;let t=!1;(n=navigator.serviceWorker)!=null&&n.controller&&navigator.serviceWorker.addEventListener("controllerchange",()=>{t||(t=!0,window.location.reload())}),await Dm(e)})};var Vm={"/zh/":{install:"安装",iOSInstall:"点击分享按钮然后点击“添加到主屏幕”",cancel:"取消",close:"关闭",prevImage:"上一张图片",nextImage:"下一张图片",desc:"详情",feature:"主要特色",explain:"该应用可以安装在你的 PC 或移动设备上。这将使该 Web 应用程序外观和行为与其他应用程序相同。它将在出现在应用程序列表中,并可以固定到主屏幕,开始菜单或任务栏。此 Web 应用程序还将能够与其他应用程序和你的操作系统安全地进行交互。",hint:"发现新内容可用",update:"新内容已就绪"},"/":{install:"Install",iOSInstall:"Tap the share button and then 'Add to Home Screen'",cancel:"Cancel",close:"Close",prevImage:"Previous Image",nextImage:"Next Image",desc:"Description",feature:"Key Features",explain:"This app can be installed on your PC or mobile device. This will allow this web app to look and behave like any other installed app. You will find it in your app lists and be able to pin it to your home screen, start menus or task bars. This installed web app will also be able to safely interact with other apps and your operating system. ",hint:"New content found.",update:"New content is available."}};const Pc=()=>u(Ae,{name:"update"},()=>u("path",{d:"M949.949 146.25v255.826c0 21.981-13.989 35.97-35.97 35.97H658.154c-13.988 0-25.983-7.992-33.973-21.981-5.997-13.989-4-27.977 7.991-39.97l79.942-77.946c-55.954-51.973-121.918-77.955-199.863-77.955-37.975 0-75.95 8.002-113.924 21.99-37.975 15.985-67.948 37.976-91.934 63.957-25.982 23.987-47.973 53.96-63.957 91.934-29.983 73.955-29.983 153.895 0 227.85 15.984 37.976 37.975 67.947 63.957 91.934 23.986 25.982 53.959 47.973 91.934 63.956 37.974 13.989 75.95 21.991 113.924 21.991 45.967 0 87.942-9.998 127.913-29.982 41.976-17.99 75.951-45.967 101.931-83.943 7.993-4 11.994-5.995 13.989-5.995 5.997 0 9.998 1.994 13.988 5.995l77.958 77.946c3.989 4 5.986 7.993 5.986 11.994 0 1.994-1.996 5.995-3.99 11.994-43.973 51.962-93.941 91.934-151.9 117.914-53.958 25.983-115.92 39.972-185.874 39.972-61.961 0-119.921-11.984-169.89-33.973-57.96-25.985-105.923-57.963-139.896-93.943-35.98-33.972-67.958-81.936-93.94-139.897-45.967-101.93-45.967-237.846 0-339.777 25.982-57.96 57.96-105.923 93.94-139.896 33.973-35.98 81.936-67.958 139.896-93.94 49.968-21.99 107.928-33.974 169.89-33.974 55.963 0 109.923 9.988 161.885 29.973 53.97 21.99 101.933 51.963 139.908 89.938l73.954-73.944c9.987-9.998 23.987-13.988 39.971-8.002 13.988 8.002 21.98 19.995 21.98 33.984z"}));Pc.displayName="UpdateIcon";const Mm=Vm,$m=e=>{const t=e.waiting;if(!t)return;const n=new MessageChannel;t.postMessage({type:"SKIP_WAITING"},[n.port2])};var zm=U({name:"SWUpdatePopup",slots:Object,setup(e,{slots:t}){const n=zn(Mm),r=ft(),o=I(()=>!!r.value),i=()=>{r.value&&($m(r.value),r.value=void 0)};return be(()=>{km().on("updated",l=>{l&&(r.value=l)})}),()=>u(xt,{name:"popup"},()=>{var l;return((l=t.default)==null?void 0:l.call(t,{enabled:o.value,reload:i}))||(o.value?u("button",{type:"button",class:"sw-update-popup",tabindex:0,onClick:()=>i()},[n.value.update,u("span",{class:"icon-wrapper"},u(Pc))]):null)})}});const Nm=ot({setup:()=>{Sm()},rootComponents:[zm]});var sa={"/zh/":{word:"约 $word 字",less1Minute:"小于 1 分钟",time:"大约 $time 分钟"},"/":{word:"About $word words",less1Minute:"Less than 1 minute",time:"About $time min"}};const Rc=()=>{const e=de();return I(()=>e.value.readingTime??null)},Zo=typeof sa>"u"?null:sa,Bm=(e,t)=>{const{minutes:n,words:r}=e,{less1Minute:o,word:i,time:l}=t;return{time:n<1?o:l.replace("$time",Math.round(n).toString()),words:i.replace("$word",r.toString())}},ca={words:"",time:""},Fm=()=>Zo?zn(Zo):I(()=>null),Hm=()=>{if(typeof Zo>"u")return I(()=>ca);const e=Rc(),t=Fm();return I(()=>e.value&&t.value?Bm(e.value,t.value):ca)},Bn=()=>gc(),ve=()=>Uv(),gr=()=>I(()=>!!Bn().value.pure);var ua=U({name:"EmptyComponent",setup:()=>()=>null});const jm="719px",Wm="1440px",qm="false",$i={mobileBreakPoint:jm,pcBreakPoint:Wm,enableThemeColor:qm},zi={"/zh/guide/":["",{text:"Media Server",prefix:"media_server/",collapsible:!0,icon:"gears",children:["restful_api","web_hook_api","on-demand_streaming","on-demand_push_streaming","push_authentication","playback_authentication","how_to_enable_https_related_functions","push_test","play_url_rules","sequence_diagram","start_server","generate_ssl_self-signed_certificate_and_test","config_file"]},{text:"SDK API",prefix:"sdk/",collapsible:!0,icon:"cube",children:["how_to_create_a_live_steam"]},{text:"代码解读",prefix:"code/",collapsible:!0,icon:"code",children:["","oncetoken"]},{text:"协议相关",prefix:"protocol/",collapsible:!0,icon:"lightbulb",children:[{text:"Gb28181",prefix:"gb28181/",collapsible:!0,children:["gb28181_sip_signaling_packet_capture","how_to_use_device_id_as_stream_id","push_streaming"]},{text:"SRT",prefix:"srt/",collapsible:!0,children:[""]},{text:"Webrtc",prefix:"webrtc/",collapsible:!0,children:["webrtc_signaling_interaction_format","webrtc_compilation_and_use"]}]},{text:"安装",prefix:"install/",collapsible:!0,icon:"box-archive",children:["","start","install_zlmediakit_using_vcpkg","compilation_instructions_for_windows_version"]},{text:"常见问题",prefix:"faq/",collapsible:!0,icon:"question",children:["","rtmp_playback_compatibility_issues","not_recommended_qq"]}],"/zh/reference/":[{text:"开发日志",prefix:"development_log/",collapsible:!0,icon:"code-commit",children:["","rtsp_performance_optimization","hls_high_performance_journey"]},{text:"测试",prefix:"test/",collapsible:!0,icon:"vials",children:["","benchmark","rtmp_pull_stream_performance_test","rtmp_push_stream_performance_test","rtsp_pull_stream_performance_test","rtsp_push_stream_performance_test","online_test","delay_test","how_to_test_delay","performance_testing"]},{text:"相关文档",prefix:"documents/",collapsible:!0,icon:"file-code",children:["","rtsp_push_process","exclusive_features","high_concurrency_implementation_principle","introduction_to_streaming_media_related_technologies","the_nature_of_live_broadcast_delay"]},{text:"相关资源",prefix:"resources/",collapsible:!0,icon:"font-awesome",children:["","rtmp_support_for_h265_and_opus","zltoolkit_source_code_study_notes","dependency","video_conferencing_related_resources"]}],"/zh/more/":["use_cases","collaborative_projects","license","contact","thanks"],"/guide/":["",{text:"Media Server",prefix:"media_server/",collapsible:!0,icon:"gears",children:["config_file","generate_ssl_self-signed_certificate_and_test","how_to_enable_https_related_functions","on-demand_streaming","on-demand_push_streaming","playback_authentication","push_authentication","play_url_rules","push_test","restful_api","sequence_diagram","start_server","web_hook_api"]},{text:"Code interpretation",prefix:"code/",collapsible:!0,icon:"code",children:["","oncetoken"]},{text:"FAQ",prefix:"faq/",collapsible:!0,icon:"question",children:["","rtmp_playback_compatibility_issues","not_recommended_qq"]},{text:"Install",prefix:"install/",collapsible:!0,icon:"box-archive",children:["","start","compilation_instructions_for_windows_version","install_zlmediakit_using_vcpkg"]},{text:"Protocol",prefix:"protocol/",collapsible:!0,icon:"lightbulb",children:[{text:"Gb28181",prefix:"gb28181/",collapsible:!0,children:["gb28181_sip_signaling_packet_capture","how_to_use_device_id_as_stream_id","push_streaming"]},{text:"SRT",prefix:"srt/",collapsible:!0,children:[""]},{text:"Webrtc",prefix:"webrtc/",collapsible:!0,children:["webrtc_compilation_and_use","webrtc_signaling_interaction_format"]}]},{text:"SDK API",prefix:"sdk/",collapsible:!0,icon:"lightbulb",children:["","how_to_create_a_live_steam"]}],"/reference/":[{text:"Development log",prefix:"development_log/",collapsible:!0,icon:"code-commit",children:["","rtsp_performance_optimization","hls_high_performance_journey"]},{text:"Related documents",prefix:"documents/",collapsible:!0,icon:"file-code",children:["","exclusive_features","rtsp_push_process","the_nature_of_live_broadcast_delay","high_concurrency_implementation_principle","introduction_to_streaming_media_related_technologies"]},{text:"Resources",prefix:"resources/",collapsible:!0,icon:"font-awesome",children:["","dependency","rtmp_support_for_h265_and_opus","video_conferencing_related_resources","zltoolkit_source_code_study_notes"]},{text:"Testing",prefix:"test/",collapsible:!0,icon:"vials",children:["","benchmark","delay_test","how_to_test_delay","online_test","performance_testing","rtmp_pull_stream_performance_test","rtmp_push_stream_performance_test","rtsp_pull_stream_performance_test","rtsp_push_stream_performance_test"]}],"/more/":["thanks","collaborative_projects","contact","license","use_cases"]},Ic=e=>{const{icon:t="",color:n,size:r}=e,o={};return n&&(o.color=n),r&&(o.height=Number.isNaN(Number(r))?r:`${r}px`),Mn(t)?u("img",{class:"icon",src:t,"no-view":"",style:o}):lo(t)?u("img",{class:"icon",src:Ve(t),"no-view":"",style:o}):u(nt("FontIcon"),e)};Ic.displayName="HopeIcon";var je=Ic;const Um=()=>{const e=Ge(),t=yt();return n=>{if(n)if(lo(n))t.path!==n&&e.push(n);else if(ms(n))window&&window.open(n);else{const r=t.path.slice(0,t.path.lastIndexOf("/"));e.push(`${r}/${encodeURI(n)}`)}}},Oc=()=>{const e=ve(),t=Le();return I(()=>{const{author:n}=t.value;return n?Ul(n):n===!1?[]:Ul(e.value.author,!1)})},Km=()=>{const e=Le();return I(()=>Nh(e.value.category).map(t=>({name:t,path:""})))},Gm=()=>{const e=Le();return I(()=>Bh(e.value.tag).map(t=>({name:t,path:""})))},Ym=()=>{const e=Le(),t=de();return I(()=>{const n=Oh(e.value.date);if(n)return n;const{createdTime:r}=t.value.git||{};return r?new Date(r):null})},Zm=()=>{const e=ve(),t=de(),n=Le(),r=Oc(),o=Km(),i=Gm(),l=Ym(),a=Rc(),s=Hm(),c=I(()=>({author:r.value,category:o.value,date:l.value,localizedDate:t.value.localizedDate,tag:i.value,isOriginal:n.value.isOriginal||!1,readingTime:a.value,readingTimeLocale:s.value,pageview:"pageview"in n.value?n.value.pageview:!0})),f=I(()=>"pageInfo"in n.value?n.value.pageInfo:"pageInfo"in e.value?e.value.pageInfo:null);return{info:c,items:f}},{mobileBreakPoint:Qm,pcBreakPoint:Jm}=$i,fa=e=>e.endsWith("px")?Number(e.slice(0,-2)):null,co=()=>{const e=te(!1),t=te(!1),n=()=>{e.value=window.innerWidth<=(fa(Qm)??719),t.value=window.innerWidth>=(fa(Jm)??1440)};return be(()=>{n(),Me("resize",n,!1),Me("orientationchange",n,!1)}),{isMobile:e,isPC:t}},xc=Symbol(""),br=()=>{const e=_e(xc);if(!e)throw new Error("useDarkmode() is called without provider.");return e},Xm=e=>{const t=Bn(),n=dv(),r=fv("vuepress-theme-hope-scheme","auto"),o=I(()=>t.value.darkmode||"switch"),i=I(()=>{const a=o.value;return a==="disable"?!1:a==="enable"?!0:a==="auto"?n.value:a==="toggle"?r.value==="dark":r.value==="dark"||r.value==="auto"&&n.value}),l=I(()=>{const a=o.value;return a==="switch"||a==="toggle"});e.provide(xc,{canToggle:l,config:o,isDarkmode:i,status:r}),Object.defineProperties(e.config.globalProperties,{$isDarkmode:{get:()=>i.value}})},e1=()=>{const{isDarkmode:e}=br(),t=(n=e.value)=>document.documentElement.setAttribute("data-theme",n?"dark":"light");be(()=>{fe(e,t,{immediate:!0})})};var Fe=U({name:"AutoLink",inheritAttrs:!1,props:{config:{type:Object,required:!0},exact:Boolean,noExternalLinkIcon:Boolean},emits:["focusout"],slots:Object,setup(e,{attrs:t,emit:n,slots:r}){const o=yt(),i=As(),l=Qr(e,"config"),a=I(()=>Mn(l.value.link)),s=I(()=>!a.value&&ms(l.value.link)),c=I(()=>l.value.target||(a.value?"_blank":void 0)),f=I(()=>c.value==="_blank"),d=I(()=>!a.value&&!s.value&&!f.value),p=I(()=>l.value.rel||(f.value?"noopener noreferrer":void 0)),m=I(()=>l.value.ariaLabel||l.value.text),g=I(()=>{if(e.exact)return!1;const T=$n(i.value.locales);return T.length?T.every(y=>y!==l.value.link):l.value.link!=="/"}),w=I(()=>d.value?l.value.activeMatch?new RegExp(l.value.activeMatch).test(o.path):g.value?xn(o.path,l.value.link):o.path===l.value.link:!1);return()=>{const{before:T,after:y,default:P}=r,{text:b,icon:A,link:M}=l.value;return d.value?u(et,{to:M,"aria-label":m.value,...t,class:["nav-link",{active:w.value},t.class],onFocusout:()=>n("focusout")},()=>P?P():[T?T():u(je,{icon:A}),b,y==null?void 0:y()]):u("a",{href:M,rel:p.value,target:c.value,"aria-label":m.value,...t,class:["nav-link",t.class],onFocusout:()=>n("focusout")},P?P():[T?T():u(je,{icon:A}),b,e.noExternalLinkIcon?null:u(mc),y==null?void 0:y()])}}});const kn=(e,t,n=!1)=>"activeMatch"in t?new RegExp(t.activeMatch).test(e.path):Qs(e,t.link)?!0:t.children&&!n?t.children.some(r=>kn(e,r)):!1,kc=(e,t)=>t.type==="group"?t.children.some(n=>n.type==="group"?kc(e,n):n.type==="page"&&kn(e,n,!0))||"prefix"in t&&Qs(e,t.prefix):!1,Cc=(e,t)=>ue(e.link)?u(Fe,{...t,config:e}):u("p",t,[u(je,{icon:e.icon}),e.text]),Dc=e=>{const t=yt();return e?u("ul",{class:"vp-sidebar-sub-headers"},e.map(n=>u("li",{class:"vp-sidebar-sub-header"},[Cc(n,{class:["vp-sidebar-link","vp-heading",{active:kn(t,n,!0)}]}),Dc(n.children)]))):null};var Rt=(e=>(e.type="y",e.title="t",e.shortTitle="s",e.icon="i",e.author="a",e.date="d",e.localizedDate="l",e.category="c",e.tag="g",e.isEncrypted="n",e.isOriginal="o",e.readingTime="r",e.excerpt="e",e.sticky="u",e.cover="v",e.index="I",e.order="O",e))(Rt||{}),t1=(e=>(e.article="a",e.home="h",e.slide="s",e.page="p",e))(t1||{});const Jt=(e="",t="")=>lo(t)?t:`${vs(e)}${t}`,En=(e,t,n=!1)=>{let r=Ur(e,Gs(encodeURI(t)));r.name==="404"&&(r=Ur(e,t));const{fullPath:o,meta:i,name:l}=r;return{text:!n&&i[Rt.shortTitle]?i[Rt.shortTitle]:i[Rt.title]||t,link:l==="404"?t:o,...i[Rt.icon]?{icon:i[Rt.icon]}:{}}},n1=(e,t)=>{const n=de();return{type:"heading",text:e.title,link:`${n.value.path}#${e.slug}`,children:Ni(e.children,t)}},Ni=(e,t)=>t>0?e.map(n=>n1(n,t-1)):[],Sc=e=>{const t=de();return Ni(t.value.headers,e)},Qo=(e,t,n="")=>{const r=Ge(),o=de(),i=(l,a=n)=>{var c;const s=ue(l)?En(r,Jt(a,l)):l.link?{...l,...Wr(l.link)?{}:{link:En(r,Jt(a,l.link)).link}}:l;if("children"in s){const f=Jt(a,s.prefix),d=s.children==="structure"?zi[f]:s.children;return{type:"group",...s,prefix:f,children:d.map(p=>i(p,f))}}return{type:"page",...s,children:s.link===o.value.path?Ni(((c=o.value.headers[0])==null?void 0:c.level)===1?o.value.headers[0].children:o.value.headers,t):[]}};return e.map(l=>i(l))},r1=(e,t)=>{const n=de(),r=$n(e).sort((o,i)=>i.length-o.length);for(const o of r)if(xn(decodeURI(n.value.path),o)){const i=e[o];return i?Qo(i==="structure"?zi[o]:i==="heading"?Sc(t):i,t,o):[]}return console.warn(`${n.value.path} is missing sidebar config.`),[]},o1=(e,t)=>{const n=an();return e===!1?[]:e==="heading"?Sc(t):e==="structure"?Qo(zi[n.value],t,n.value):X(e)?Qo(e,t):Li(e)?r1(e,t):[]},Vc=Symbol(""),i1=()=>{const e=Le(),t=ve(),n=de(),r=I(()=>e.value.home?!1:e.value.sidebar??t.value.sidebar??"structure"),o=I(()=>e.value.headerDepth??t.value.headerDepth??2),i=ao(()=>[r.value,o.value,n.value.path,null],()=>o1(r.value,o.value));tn(Vc,i)},Bi=()=>{const e=_e(Vc);if(!e)throw new Error("useSidebarItems() is called without provider.");return e};var l1=U({name:"PageFooter",setup(){const e=Le(),t=ve(),n=Oc(),r=I(()=>{const{copyright:l,footer:a}=e.value;return a!==!1&&!!(l||a||t.value.displayFooter)}),o=I(()=>{const{footer:l}=e.value;return l===!1?!1:ue(l)?l:t.value.footer||""}),i=I(()=>"copyright"in e.value?e.value.copyright:"copyright"in t.value?t.value.copyright:n.value.length?`Copyright © ${new Date().getFullYear()} ${n.value[0].name}`:!1);return()=>r.value?u("footer",{class:"vp-footer-wrapper"},[o.value?u("div",{class:"vp-footer",innerHTML:o.value}):null,i.value?u("div",{class:"vp-copyright",innerHTML:i.value}):null]):null}}),Mc=U({name:"NavbarDropdownLink",props:{config:{type:Object,required:!0}},slots:Object,setup(e,{slots:t}){const n=de(),r=Qr(e,"config"),o=I(()=>r.value.ariaLabel||r.value.text),i=te(!1);fe(()=>n.value.path,()=>{i.value=!1});const l=a=>{a.detail===0&&(i.value=!i.value)};return()=>{var a;return u("div",{class:["dropdown-wrapper",{open:i.value}]},[u("button",{type:"button",class:"dropdown-title","aria-label":o.value,onClick:l},[((a=t.title)==null?void 0:a.call(t))||u("span",{class:"title"},[u(je,{icon:r.value.icon}),e.config.text]),u("span",{class:"arrow"}),u("ul",{class:"nav-dropdown"},r.value.children.map((s,c)=>{const f=c===r.value.children.length-1;return u("li",{class:"dropdown-item"},"children"in s?[u("h4",{class:"dropdown-subtitle"},s.link?u(Fe,{config:s,onFocusout:()=>{s.children.length===0&&f&&(i.value=!1)}}):u("span",s.text)),u("ul",{class:"dropdown-subitem-wrapper"},s.children.map((d,p)=>u("li",{class:"dropdown-subitem"},u(Fe,{config:d,onFocusout:()=>{p===s.children.length-1&&f&&(i.value=!1)}}))))]:u(Fe,{config:s,onFocusout:()=>{f&&(i.value=!1)}}))}))])])}}});const $c=()=>u(Ae,{name:"i18n"},()=>[u("path",{d:"M379.392 460.8 494.08 575.488l-42.496 102.4L307.2 532.48 138.24 701.44l-71.68-72.704L234.496 460.8l-45.056-45.056c-27.136-27.136-51.2-66.56-66.56-108.544h112.64c7.68 14.336 16.896 27.136 26.112 35.84l45.568 46.08 45.056-45.056C382.976 312.32 409.6 247.808 409.6 204.8H0V102.4h256V0h102.4v102.4h256v102.4H512c0 70.144-37.888 161.28-87.04 210.944L378.88 460.8zM576 870.4 512 1024H409.6l256-614.4H768l256 614.4H921.6l-64-153.6H576zM618.496 768h196.608L716.8 532.48 618.496 768z"})]);$c.displayName="I18nIcon";const zc=(e,t,n="")=>ue(t)?En(e,Jt(n,t)):"children"in t?{...t,...t.link&&!Wr(t.link)?En(e,Jt(n,t.link)):{},children:t.children.map(r=>zc(e,r,Jt(n,t.prefix)))}:{...t,link:Wr(t.link)?t.link:En(e,Jt(n,t.link)).link},Nc=()=>{const e=ve(),t=Ge(),n=()=>(e.value.navbar||[]).map(r=>zc(t,r));return ao(()=>e.value.navbar,()=>n())},a1=()=>{const e=Ge(),t=yt(),n=an(),r=no(),o=Bn(),i=ve();return ao(()=>t.path,()=>{const l=$n(r.value.locales),a=Si(o.value.extraLocales??{});if(l.length<2&&!a.length)return null;const{path:s,fullPath:c}=t,{navbarLocales:f}=i.value;return{text:"",ariaLabel:f==null?void 0:f.selectLangAriaLabel,children:[...l.map(d=>{var y,P,b;const p=((y=r.value.locales)==null?void 0:y[d])??{},m=((P=o.value.locales)==null?void 0:P[d])??{},g=p.lang||"",w=((b=m.navbarLocales)==null?void 0:b.langName)??g;let T;if(g===r.value.lang)T=s;else{const A=s.replace(n.value,d);T=e.getRoutes().some(M=>M.path===A)?c.replace(s,A):m.home??d}return{text:w,link:T}}),...a.map(([d,p])=>({text:d,link:p.replace(":route",t.path.replace(n.value,""))}))]}})},s1=()=>{const e=ve(),t=I(()=>e.value.repo||null),n=I(()=>t.value?Hh(t.value):null),r=I(()=>t.value?Js(t.value):null),o=I(()=>n.value?e.value.repoLabel??(r.value===null?"Source":r.value):null);return I(()=>!n.value||!o.value||e.value.repoDisplay===!1?null:{type:r.value||"Source",label:o.value,link:n.value})};var c1=U({name:"LanguageDropdown",setup(){const e=a1();return()=>e.value?u("div",{class:"nav-item"},u(Mc,{class:"i18n-dropdown",config:e.value},{title:()=>{var t;return u($c,{"aria-label":(t=e.value)==null?void 0:t.ariaLabel,style:{width:"1rem",height:"1rem",verticalAlign:"middle"}})}})):null}}),u1=U({name:"NavScreenDropdown",props:{config:{type:Object,required:!0}},setup(e){const t=de(),n=Qr(e,"config"),r=I(()=>n.value.ariaLabel||n.value.text),o=te(!1);fe(()=>t.value.path,()=>{o.value=!1});const i=(l,a)=>a[a.length-1]===l;return()=>[u("button",{type:"button",class:["nav-screen-dropdown-title",{active:o.value}],"aria-label":r.value,onClick:()=>{o.value=!o.value}},[u("span",{class:"title"},[u(je,{icon:n.value.icon}),e.config.text]),u("span",{class:["arrow",o.value?"down":"end"]})]),u("ul",{class:["nav-screen-dropdown",{hide:!o.value}]},n.value.children.map(l=>u("li",{class:"dropdown-item"},"children"in l?[u("h4",{class:"dropdown-subtitle"},l.link?u(Fe,{config:l,onFocusout:()=>{i(l,n.value.children)&&l.children.length===0&&(o.value=!1)}}):u("span",l.text)),u("ul",{class:"dropdown-subitem-wrapper"},l.children.map(a=>u("li",{class:"dropdown-subitem"},u(Fe,{config:a,onFocusout:()=>{i(a,l.children)&&i(l,n.value.children)&&(o.value=!1)}}))))]:u(Fe,{config:l,onFocusout:()=>{i(l,n.value.children)&&(o.value=!1)}}))))]}}),f1=U({name:"NavScreenLinks",setup(){const e=Nc();return()=>e.value.length?u("nav",{class:"nav-screen-links"},e.value.map(t=>u("div",{class:"navbar-links-item"},"children"in t?u(u1,{config:t}):u(Fe,{config:t})))):null}});const Bc=()=>u(Ae,{name:"dark"},()=>u("path",{d:"M524.8 938.667h-4.267a439.893 439.893 0 0 1-313.173-134.4 446.293 446.293 0 0 1-11.093-597.334A432.213 432.213 0 0 1 366.933 90.027a42.667 42.667 0 0 1 45.227 9.386 42.667 42.667 0 0 1 10.24 42.667 358.4 358.4 0 0 0 82.773 375.893 361.387 361.387 0 0 0 376.747 82.774 42.667 42.667 0 0 1 54.187 55.04 433.493 433.493 0 0 1-99.84 154.88 438.613 438.613 0 0 1-311.467 128z"}));Bc.displayName="DarkIcon";const Fc=()=>u(Ae,{name:"light"},()=>u("path",{d:"M952 552h-80a40 40 0 0 1 0-80h80a40 40 0 0 1 0 80zM801.88 280.08a41 41 0 0 1-57.96-57.96l57.96-58a41.04 41.04 0 0 1 58 58l-58 57.96zM512 752a240 240 0 1 1 0-480 240 240 0 0 1 0 480zm0-560a40 40 0 0 1-40-40V72a40 40 0 0 1 80 0v80a40 40 0 0 1-40 40zm-289.88 88.08-58-57.96a41.04 41.04 0 0 1 58-58l57.96 58a41 41 0 0 1-57.96 57.96zM192 512a40 40 0 0 1-40 40H72a40 40 0 0 1 0-80h80a40 40 0 0 1 40 40zm30.12 231.92a41 41 0 0 1 57.96 57.96l-57.96 58a41.04 41.04 0 0 1-58-58l58-57.96zM512 832a40 40 0 0 1 40 40v80a40 40 0 0 1-80 0v-80a40 40 0 0 1 40-40zm289.88-88.08 58 57.96a41.04 41.04 0 0 1-58 58l-57.96-58a41 41 0 0 1 57.96-57.96z"}));Fc.displayName="LightIcon";const Hc=()=>u(Ae,{name:"auto"},()=>u("path",{d:"M512 992C246.92 992 32 777.08 32 512S246.92 32 512 32s480 214.92 480 480-214.92 480-480 480zm0-840c-198.78 0-360 161.22-360 360 0 198.84 161.22 360 360 360s360-161.16 360-360c0-198.78-161.22-360-360-360zm0 660V212c165.72 0 300 134.34 300 300 0 165.72-134.28 300-300 300z"}));Hc.displayName="AutoIcon";const jc=()=>u(Ae,{name:"enter-fullscreen"},()=>u("path",{d:"M762.773 90.24h-497.28c-96.106 0-174.4 78.293-174.4 174.4v497.28c0 96.107 78.294 174.4 174.4 174.4h497.28c96.107 0 175.04-78.293 174.4-174.4V264.64c0-96.213-78.186-174.4-174.4-174.4zm-387.2 761.173H215.04c-21.867 0-40.427-17.92-41.067-41.066V649.92c0-22.507 17.92-40.427 40.427-40.427 11.307 0 21.227 4.694 28.48 11.947 7.253 7.253 11.947 17.92 11.947 28.48v62.293l145.28-145.28c15.893-15.893 41.813-15.893 57.706 0 15.894 15.894 15.894 41.814 0 57.707l-145.28 145.28h62.294c22.506 0 40.426 17.92 40.426 40.427s-17.173 41.066-39.68 41.066zM650.24 165.76h160.427c21.866 0 40.426 17.92 41.066 41.067v160.426c0 22.507-17.92 40.427-40.426 40.427-11.307 0-21.227-4.693-28.48-11.947-7.254-7.253-11.947-17.92-11.947-28.48v-62.186L625.6 450.347c-15.893 15.893-41.813 15.893-57.707 0-15.893-15.894-15.893-41.814 0-57.707l145.28-145.28H650.88c-22.507 0-40.427-17.92-40.427-40.427s17.174-41.173 39.787-41.173z"}));jc.displayName="EnterFullScreenIcon";const Wc=()=>u(Ae,{name:"cancel-fullscreen"},()=>u("path",{d:"M778.468 78.62H247.922c-102.514 0-186.027 83.513-186.027 186.027V795.08c0 102.514 83.513 186.027 186.027 186.027h530.432c102.514 0 186.71-83.513 186.026-186.027V264.647C964.494 162.02 880.981 78.62 778.468 78.62zM250.88 574.35h171.122c23.324 0 43.122 19.115 43.804 43.805v171.121c0 24.008-19.114 43.122-43.122 43.122-12.06 0-22.641-5.006-30.378-12.743s-12.743-19.115-12.743-30.379V722.83L224.597 877.91c-16.953 16.952-44.6 16.952-61.553 0-16.953-16.954-16.953-44.602 0-61.554L318.009 661.39h-66.446c-24.007 0-43.122-19.114-43.122-43.122 0-24.12 18.432-43.918 42.439-43.918zm521.899-98.873H601.657c-23.325 0-43.122-19.114-43.805-43.804V260.55c0-24.007 19.115-43.122 43.122-43.122 12.06 0 22.642 5.007 30.379 12.743s12.743 19.115 12.743 30.38v66.445l154.965-154.965c16.953-16.953 44.601-16.953 61.554 0 16.953 16.953 16.953 44.6 0 61.554L705.536 388.55h66.446c24.007 0 43.122 19.115 43.122 43.122.114 24.007-18.318 43.804-42.325 43.804z"}));Wc.displayName="CancelFullScreenIcon";const qc=()=>u(Ae,{name:"outlook"},()=>[u("path",{d:"M224 800c0 9.6 3.2 44.8 6.4 54.4 6.4 48-48 76.8-48 76.8s80 41.6 147.2 0 134.4-134.4 38.4-195.2c-22.4-12.8-41.6-19.2-57.6-19.2C259.2 716.8 227.2 761.6 224 800zM560 675.2l-32 51.2c-51.2 51.2-83.2 32-83.2 32 25.6 67.2 0 112-12.8 128 25.6 6.4 51.2 9.6 80 9.6 54.4 0 102.4-9.6 150.4-32l0 0c3.2 0 3.2-3.2 3.2-3.2 22.4-16 12.8-35.2 6.4-44.8-9.6-12.8-12.8-25.6-12.8-41.6 0-54.4 60.8-99.2 137.6-99.2 6.4 0 12.8 0 22.4 0 12.8 0 38.4 9.6 48-25.6 0-3.2 0-3.2 3.2-6.4 0-3.2 3.2-6.4 3.2-6.4 6.4-16 6.4-16 6.4-19.2 9.6-35.2 16-73.6 16-115.2 0-105.6-41.6-198.4-108.8-268.8C704 396.8 560 675.2 560 675.2zM224 419.2c0-28.8 22.4-51.2 51.2-51.2 28.8 0 51.2 22.4 51.2 51.2 0 28.8-22.4 51.2-51.2 51.2C246.4 470.4 224 448 224 419.2zM320 284.8c0-22.4 19.2-41.6 41.6-41.6 22.4 0 41.6 19.2 41.6 41.6 0 22.4-19.2 41.6-41.6 41.6C339.2 326.4 320 307.2 320 284.8zM457.6 208c0-12.8 12.8-25.6 25.6-25.6 12.8 0 25.6 12.8 25.6 25.6 0 12.8-12.8 25.6-25.6 25.6C470.4 233.6 457.6 220.8 457.6 208zM128 505.6C128 592 153.6 672 201.6 736c28.8-60.8 112-60.8 124.8-60.8-16-51.2 16-99.2 16-99.2l316.8-422.4c-48-19.2-99.2-32-150.4-32C297.6 118.4 128 291.2 128 505.6zM764.8 86.4c-22.4 19.2-390.4 518.4-390.4 518.4-22.4 28.8-12.8 76.8 22.4 99.2l9.6 6.4c35.2 22.4 80 12.8 99.2-25.6 0 0 6.4-12.8 9.6-19.2 54.4-105.6 275.2-524.8 288-553.6 6.4-19.2-3.2-32-19.2-32C777.6 76.8 771.2 80 764.8 86.4z"})]);qc.displayName="OutlookIcon";var Uc=U({name:"AppearanceSwitch",setup(){const{config:e,isDarkmode:t,status:n}=br(),r=gr(),o=()=>{e.value==="switch"?n.value={light:"dark",dark:"auto",auto:"light"}[n.value]:n.value=n.value==="light"?"dark":"light"},i=async l=>{if(!(document.startViewTransition&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches&&!r.value)||!l){o();return}const a=l.clientX,s=l.clientY,c=Math.hypot(Math.max(a,innerWidth-a),Math.max(s,innerHeight-s)),f=t.value;await document.startViewTransition(async()=>{o(),await ln()}).ready,t.value!==f&&document.documentElement.animate({clipPath:t.value?[`circle(${c}px at ${a}px ${s}px)`,`circle(0px at ${a}px ${s}px)`]:[`circle(0px at ${a}px ${s}px)`,`circle(${c}px at ${a}px ${s}px)`]},{duration:400,pseudoElement:t.value?"::view-transition-old(root)":"::view-transition-new(root)"})};return()=>u("button",{type:"button",id:"appearance-switch",onClick:i},[u(Hc,{style:{display:n.value==="auto"?"block":"none"}}),u(Bc,{style:{display:n.value==="dark"?"block":"none"}}),u(Fc,{style:{display:n.value==="light"?"block":"none"}})])}}),d1=U({name:"AppearanceMode",setup(){const e=ve(),{canToggle:t}=br(),n=I(()=>e.value.outlookLocales.darkmode);return()=>t.value?u("div",{class:"appearance-wrapper"},[u("label",{class:"appearance-title",for:"appearance-switch"},n.value),u(Uc)]):null}});const ko="VUEPRESS_THEME_COLOR";var p1=U({name:"ThemeColorPicker",props:{themeColor:{type:Object,required:!0}},setup(e){const t=(n="")=>{const r=document.documentElement.classList,o=$n(e.themeColor);if(!n){localStorage.removeItem(ko),r.remove(...o);return}r.remove(...o.filter(i=>i!==n)),r.add(n),localStorage.setItem(ko,n)};return be(()=>{const n=localStorage.getItem(ko);n&&t(n)}),()=>u("ul",{id:"theme-color-picker"},[u("li",u("span",{class:"theme-color",onClick:()=>t()})),Si(e.themeColor).map(([n,r])=>u("li",u("span",{style:{background:r},onClick:()=>t(n)})))])}});const wn=$i.enableThemeColor==="true",h1=wn?$h(Si($i).filter(([e])=>e.startsWith("theme-"))):{};var v1=U({name:"ThemeColor",setup(){const e=ve(),t=I(()=>e.value.outlookLocales.themeColor);return()=>wn?u("div",{class:"theme-color-wrapper"},[u("label",{class:"theme-color-title",for:"theme-color-picker"},t.value),u(p1,{themeColor:h1})]):null}}),Kc=U({name:"ToggleFullScreenButton",setup(){const e=ve(),{isSupported:t,isFullscreen:n,toggle:r}=Vi(),o=I(()=>e.value.outlookLocales.fullscreen);return()=>t?u("div",{class:"full-screen-wrapper"},[u("label",{class:"full-screen-title",for:"full-screen-switch"},o.value),u("button",{type:"button",id:"full-screen-switch",class:"full-screen",ariaPressed:n.value,onClick:()=>r()},n.value?u(Wc):u(jc))]):null}}),Gc=U({name:"OutlookSettings",setup(){const e=Bn(),t=gr(),n=I(()=>!t.value&&e.value.fullscreen);return()=>u(ro,()=>[wn?u(v1):null,u(d1),n.value?u(Kc):null])}}),m1=U({name:"NavScreen",props:{show:Boolean},emits:["close"],slots:Object,setup(e,{emit:t,slots:n}){const r=de(),{isMobile:o}=co(),i=ft(),l=fc(i);return be(()=>{i.value=document.body,fe(o,a=>{!a&&e.show&&(l.value=!1,t("close"))}),fe(()=>r.value.path,()=>{l.value=!1,t("close")})}),vr(()=>{l.value=!1}),()=>u(xt,{name:"fade",onEnter:()=>{l.value=!0},onAfterLeave:()=>{l.value=!1}},()=>{var a,s;return e.show?u("div",{id:"nav-screen"},u("div",{class:"vp-nav-screen-container"},[(a=n.before)==null?void 0:a.call(n),u(f1),u("div",{class:"vp-outlook-wrapper"},u(Gc)),(s=n.after)==null?void 0:s.call(n)])):null})}}),_1=U({name:"NavbarBrand",setup(){const e=an(),t=no(),n=ve(),r=I(()=>n.value.home||e.value),o=I(()=>t.value.title),i=I(()=>n.value.navTitle??o.value),l=I(()=>n.value.logo?Ve(n.value.logo):null),a=I(()=>n.value.logoDark?Ve(n.value.logoDark):null);return()=>u(et,{to:r.value,class:"vp-brand"},()=>[l.value?u("img",{class:["vp-nav-logo",{light:!!a.value}],src:l.value,alt:o.value}):null,a.value?u("img",{class:["vp-nav-logo dark"],src:a.value,alt:o.value}):null,i.value?u("span",{class:["vp-site-name",{"hide-in-pad":l.value&&n.value.hideSiteNameOnMobile!==!1}]},i.value):null])}}),g1=U({name:"NavbarLinks",setup(){const e=Nc();return()=>e.value.length?u("nav",{class:"vp-nav-links"},e.value.map(t=>u("div",{class:"nav-item hide-in-mobile"},"children"in t?u(Mc,{config:t}):u(Fe,{config:t})))):null}}),b1=U({name:"RepoLink",components:{BitbucketIcon:nc,GiteeIcon:tc,GitHubIcon:Xs,GitLabIcon:ec,SourceIcon:rc},setup(){const e=s1();return()=>e.value?u("div",{class:"nav-item vp-repo"},u("a",{class:"vp-repo-link",href:e.value.link,target:"_blank",rel:"noopener noreferrer","aria-label":e.value.label},u(nt(`${e.value.type}Icon`),{style:{width:"1.25rem",height:"1.25rem",verticalAlign:"middle"}}))):null}});const Yc=({active:e=!1},{emit:t})=>u("button",{type:"button",class:["vp-toggle-navbar-button",{"is-active":e}],"aria-label":"Toggle Navbar","aria-expanded":e,"aria-controls":"nav-screen",onClick:()=>t("toggle")},u("span",[u("span",{class:"vp-top"}),u("span",{class:"vp-middle"}),u("span",{class:"vp-bottom"})]));Yc.displayName="ToggleNavbarButton";var y1=Yc;const Jo=(e,{emit:t})=>u("button",{type:"button",class:"vp-toggle-sidebar-button",title:"Toggle Sidebar",onClick:()=>t("toggle")},u("span",{class:"icon"}));Jo.displayName="ToggleSidebarButton",Jo.emits=["toggle"];var E1=Jo,w1=U({name:"OutlookButton",setup(){const{isSupported:e}=Vi(),t=Bn(),n=gr(),r=de(),{canToggle:o}=br(),i=te(!1),l=I(()=>!n.value&&t.value.fullscreen&&e);return fe(()=>r.value.path,()=>{i.value=!1}),()=>o.value||l.value||wn?u("div",{class:"nav-item hide-in-mobile"},o.value&&!l.value&&!wn?u(Uc):l.value&&!o.value&&!wn?u(Kc):u("button",{type:"button",class:["outlook-button",{open:i.value}],tabindex:"-1","aria-hidden":!0},[u(qc),u("div",{class:"outlook-dropdown"},u(Gc))])):null}}),T1=U({name:"NavBar",emits:["toggleSidebar"],slots:Object,setup(e,{emit:t,slots:n}){const r=ve(),{isMobile:o}=co(),i=te(!1),l=I(()=>{const{navbarAutoHide:f="mobile"}=r.value;return f!=="none"&&(f==="always"||o.value)}),a=I(()=>r.value.navbarLayout||{start:["Brand"],center:["Links"],end:["Language","Repo","Outlook","Search"]}),s={Brand:_1,Language:c1,Links:g1,Repo:b1,Outlook:w1,Search:Ot("Docsearch")?nt("Docsearch"):Ot("SearchBox")?nt("SearchBox"):ua},c=f=>s[f]??(Ot(f)?nt(f):ua);return()=>{var f,d,p,m,g,w;return[u("header",{id:"navbar",class:["vp-navbar",{"auto-hide":l.value,"hide-icon":r.value.navbarIcon===!1}]},[u("div",{class:"vp-navbar-start"},[u(E1,{onToggle:()=>{i.value&&(i.value=!1),t("toggleSidebar")}}),(f=n.startBefore)==null?void 0:f.call(n),(a.value.start||[]).map(T=>u(c(T))),(d=n.startAfter)==null?void 0:d.call(n)]),u("div",{class:"vp-navbar-center"},[(p=n.centerBefore)==null?void 0:p.call(n),(a.value.center||[]).map(T=>u(c(T))),(m=n.centerAfter)==null?void 0:m.call(n)]),u("div",{class:"vp-navbar-end"},[(g=n.endBefore)==null?void 0:g.call(n),(a.value.end||[]).map(T=>u(c(T))),(w=n.endAfter)==null?void 0:w.call(n),u(y1,{active:i.value,onToggle:()=>{i.value=!i.value}})])]),u(m1,{show:i.value,onClose:()=>{i.value=!1}},{before:()=>{var T;return(T=n.screenTop)==null?void 0:T.call(n)},after:()=>{var T;return(T=n.screenBottom)==null?void 0:T.call(n)}})]}}}),A1=U({name:"SidebarChild",props:{config:{type:Object,required:!0}},setup(e){const t=yt();return()=>[Cc(e.config,{class:["vp-sidebar-link",`vp-sidebar-${e.config.type}`,{active:kn(t,e.config,!0)}],exact:!0}),Dc(e.config.children)]}}),L1=U({name:"SidebarGroup",props:{config:{type:Object,required:!0},open:{type:Boolean,required:!0}},emits:["toggle"],setup(e,{emit:t}){const n=yt(),r=I(()=>kn(n,e.config)),o=I(()=>kn(n,e.config,!0));return()=>{const{collapsible:i,children:l=[],icon:a,prefix:s,link:c,text:f}=e.config;return u("section",{class:"vp-sidebar-group"},[u(i?"button":"p",{class:["vp-sidebar-heading",{clickable:i||c,exact:o.value,active:r.value}],...i?{type:"button",onClick:()=>t("toggle"),onKeydown:d=>{d.key==="Enter"&&t("toggle")}}:{}},[u(je,{icon:a}),c?u(Fe,{class:"vp-sidebar-title",config:{text:f,link:c},noExternalLinkIcon:!0}):u("span",{class:"vp-sidebar-title"},f),i?u("span",{class:["vp-arrow",e.open?"down":"end"]}):null]),e.open||!i?u(Zc,{key:s,config:l}):null])}}}),Zc=U({name:"SidebarLinks",props:{config:{type:Array,required:!0}},setup(e){const t=yt(),n=te(-1),r=o=>{n.value=o===n.value?-1:o};return fe(()=>t.path,()=>{const o=e.config.findIndex(i=>kc(t,i));n.value=o},{immediate:!0,flush:"post"}),()=>u("ul",{class:"vp-sidebar-links"},e.config.map((o,i)=>u("li",o.type==="group"?u(L1,{config:o,open:i===n.value,onToggle:()=>r(i)}):u(A1,{config:o}))))}}),P1=U({name:"SideBar",slots:Object,setup(e,{slots:t}){const n=yt(),r=ve(),o=Bi(),i=ft();return be(()=>{fe(()=>n.hash,l=>{const a=document.querySelector(`.vp-sidebar a.vp-sidebar-link[href="${n.path}${l}"]`);if(!a)return;const{top:s,height:c}=i.value.getBoundingClientRect(),{top:f,height:d}=a.getBoundingClientRect();fs+c&&a.scrollIntoView(!1)},{immediate:!0})}),()=>{var l,a,s;return u("aside",{ref:i,id:"sidebar",class:["vp-sidebar",{"hide-icon":r.value.sidebarIcon===!1}]},[(l=t.top)==null?void 0:l.call(t),((a=t.default)==null?void 0:a.call(t))||u(Zc,{config:o.value}),(s=t.bottom)==null?void 0:s.call(t)])}}}),Qc=U({name:"CommonWrapper",props:{containerClass:{type:String,default:""},noNavbar:Boolean,noSidebar:Boolean,noToc:Boolean},slots:Object,setup(e,{slots:t}){const n=Ge(),r=de(),o=Le(),i=ve(),{isMobile:l,isPC:a}=co(),[s,c]=Ql(!1),[f,d]=Ql(!1),p=Bi(),m=te(!1),g=I(()=>e.noNavbar||o.value.navbar===!1||i.value.navbar===!1?!1:!!(r.value.title||i.value.logo||i.value.repo||i.value.navbar)),w=I(()=>e.noSidebar?!1:o.value.sidebar!==!1&&p.value.length!==0&&!o.value.home),T=I(()=>e.noToc||o.value.home?!1:o.value.toc||i.value.toc!==!1&&o.value.toc!==!1),y={x:0,y:0},P=k=>{y.x=k.changedTouches[0].clientX,y.y=k.changedTouches[0].clientY},b=k=>{const z=k.changedTouches[0].clientX-y.x,V=k.changedTouches[0].clientY-y.y;Math.abs(z)>Math.abs(V)*1.5&&Math.abs(z)>40&&(z>0&&y.x<=80?c(!0):c(!1))},A=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;let M=0;return Me("scroll",Xh(()=>{const k=A();k<=58||k{k||c(!1)}),be(()=>{const k=fc(document.body);fe(s,V=>{k.value=V});const z=n.afterEach(()=>{c(!1)});vr(()=>{k.value=!1,z()})}),()=>u(Ot("GlobalEncrypt")?nt("GlobalEncrypt"):Ws,()=>u("div",{class:["theme-container",{"no-navbar":!g.value,"no-sidebar":!w.value&&!(t.sidebar||t.sidebarTop||t.sidebarBottom),"has-toc":T.value,"hide-navbar":m.value,"sidebar-collapsed":!l.value&&!a.value&&f.value,"sidebar-open":l.value&&s.value},e.containerClass,o.value.containerClass||""],onTouchStart:P,onTouchEnd:b},[g.value?u(T1,{onToggleSidebar:()=>c()},{startBefore:()=>{var k;return(k=t.navbarStartBefore)==null?void 0:k.call(t)},startAfter:()=>{var k;return(k=t.navbarStartAfter)==null?void 0:k.call(t)},centerBefore:()=>{var k;return(k=t.navbarCenterBefore)==null?void 0:k.call(t)},centerAfter:()=>{var k;return(k=t.navbarCenterAfter)==null?void 0:k.call(t)},endBefore:()=>{var k;return(k=t.navbarEndBefore)==null?void 0:k.call(t)},endAfter:()=>{var k;return(k=t.navbarEndAfter)==null?void 0:k.call(t)},screenTop:()=>{var k;return(k=t.navScreenTop)==null?void 0:k.call(t)},screenBottom:()=>{var k;return(k=t.navScreenBottom)==null?void 0:k.call(t)}}):null,u(xt,{name:"fade"},()=>s.value?u("div",{class:"vp-sidebar-mask",onClick:()=>c(!1)}):null),u(xt,{name:"fade"},()=>l.value?null:u("div",{class:"toggle-sidebar-wrapper",onClick:()=>d()},u("span",{class:["arrow",f.value?"end":"start"]}))),u(P1,{},{...t.sidebar?{default:()=>t.sidebar()}:{},top:()=>{var k;return(k=t.sidebarTop)==null?void 0:k.call(t)},bottom:()=>{var k;return(k=t.sidebarBottom)==null?void 0:k.call(t)}}),t.default(),u(l1)]))}}),_n=U({name:"DropTransition",props:{type:{type:String,default:"single"},delay:{type:Number,default:0},duration:{type:Number,default:.25},appear:Boolean},slots:Object,setup(e,{slots:t}){const n=o=>{o.style.transition=`transform ${e.duration}s ease-in-out ${e.delay}s, opacity ${e.duration}s ease-in-out ${e.delay}s`,o.style.transform="translateY(-20px)",o.style.opacity="0"},r=o=>{o.style.transform="translateY(0)",o.style.opacity="1"};return()=>u(e.type==="single"?xt:Md,{name:"drop",appear:e.appear,onAppear:n,onAfterAppear:r,onEnter:n,onAfterEnter:r,onBeforeLeave:n},()=>t.default())}});const Xo=({custom:e})=>u(Ps,{class:["theme-hope-content",{custom:e}]});Xo.displayName="MarkdownContent",Xo.props={custom:Boolean};var Jc=Xo;const Xc=()=>u(Ae,{name:"author"},()=>u("path",{d:"M649.6 633.6c86.4-48 147.2-144 147.2-249.6 0-160-128-288-288-288s-288 128-288 288c0 108.8 57.6 201.6 147.2 249.6-121.6 48-214.4 153.6-240 288-3.2 9.6 0 19.2 6.4 25.6 3.2 9.6 12.8 12.8 22.4 12.8h704c9.6 0 19.2-3.2 25.6-12.8 6.4-6.4 9.6-16 6.4-25.6-25.6-134.4-121.6-240-243.2-288z"}));Xc.displayName="AuthorIcon";const eu=()=>u(Ae,{name:"calendar"},()=>u("path",{d:"M716.4 110.137c0-18.753-14.72-33.473-33.472-33.473-18.753 0-33.473 14.72-33.473 33.473v33.473h66.993v-33.473zm-334.87 0c0-18.753-14.72-33.473-33.473-33.473s-33.52 14.72-33.52 33.473v33.473h66.993v-33.473zm468.81 33.52H716.4v100.465c0 18.753-14.72 33.473-33.472 33.473a33.145 33.145 0 01-33.473-33.473V143.657H381.53v100.465c0 18.753-14.72 33.473-33.473 33.473a33.145 33.145 0 01-33.473-33.473V143.657H180.6A134.314 134.314 0 0046.66 277.595v535.756A134.314 134.314 0 00180.6 947.289h669.74a134.36 134.36 0 00133.94-133.938V277.595a134.314 134.314 0 00-133.94-133.938zm33.473 267.877H147.126a33.145 33.145 0 01-33.473-33.473c0-18.752 14.72-33.473 33.473-33.473h736.687c18.752 0 33.472 14.72 33.472 33.473a33.145 33.145 0 01-33.472 33.473z"}));eu.displayName="CalendarIcon";const tu=()=>u(Ae,{name:"category"},()=>u("path",{d:"M148.41 106.992h282.176c22.263 0 40.31 18.048 40.31 40.31V429.48c0 22.263-18.047 40.31-40.31 40.31H148.41c-22.263 0-40.311-18.047-40.311-40.31V147.302c0-22.263 18.048-40.31 40.311-40.31zM147.556 553.478H429.73c22.263 0 40.311 18.048 40.311 40.31v282.176c0 22.263-18.048 40.312-40.31 40.312H147.555c-22.263 0-40.311-18.049-40.311-40.312V593.79c0-22.263 18.048-40.311 40.31-40.311zM593.927 106.992h282.176c22.263 0 40.31 18.048 40.31 40.31V429.48c0 22.263-18.047 40.31-40.31 40.31H593.927c-22.263 0-40.311-18.047-40.311-40.31V147.302c0-22.263 18.048-40.31 40.31-40.31zM730.22 920.502H623.926c-40.925 0-74.22-33.388-74.22-74.425V623.992c0-41.038 33.387-74.424 74.425-74.424h222.085c41.038 0 74.424 33.226 74.424 74.067v114.233c0 10.244-8.304 18.548-18.547 18.548s-18.548-8.304-18.548-18.548V623.635c0-20.388-16.746-36.974-37.33-36.974H624.13c-20.585 0-37.331 16.747-37.331 37.33v222.086c0 20.585 16.654 37.331 37.126 37.331H730.22c10.243 0 18.547 8.304 18.547 18.547 0 10.244-8.304 18.547-18.547 18.547z"}));tu.displayName="CategoryIcon";const nu=()=>u(Ae,{name:"print"},()=>u("path",{d:"M819.2 364.8h-44.8V128c0-17.067-14.933-32-32-32H281.6c-17.067 0-32 14.933-32 32v236.8h-44.8C145.067 364.8 96 413.867 96 473.6v192c0 59.733 49.067 108.8 108.8 108.8h44.8V896c0 17.067 14.933 32 32 32h460.8c17.067 0 32-14.933 32-32V774.4h44.8c59.733 0 108.8-49.067 108.8-108.8v-192c0-59.733-49.067-108.8-108.8-108.8zM313.6 160h396.8v204.8H313.6V160zm396.8 704H313.6V620.8h396.8V864zM864 665.6c0 25.6-19.2 44.8-44.8 44.8h-44.8V588.8c0-17.067-14.933-32-32-32H281.6c-17.067 0-32 14.933-32 32v121.6h-44.8c-25.6 0-44.8-19.2-44.8-44.8v-192c0-25.6 19.2-44.8 44.8-44.8h614.4c25.6 0 44.8 19.2 44.8 44.8v192z"}));nu.displayName="PrintIcon";const ru=()=>u(Ae,{name:"tag"},()=>u("path",{d:"M939.902 458.563L910.17 144.567c-1.507-16.272-14.465-29.13-30.737-30.737L565.438 84.098h-.402c-3.215 0-5.726 1.005-7.634 2.913l-470.39 470.39a10.004 10.004 0 000 14.164l365.423 365.424c1.909 1.908 4.42 2.913 7.132 2.913s5.223-1.005 7.132-2.913l470.39-470.39c2.01-2.11 3.014-5.023 2.813-8.036zm-240.067-72.121c-35.458 0-64.286-28.828-64.286-64.286s28.828-64.285 64.286-64.285 64.286 28.828 64.286 64.285-28.829 64.286-64.286 64.286z"}));ru.displayName="TagIcon";const ou=()=>u(Ae,{name:"timer"},()=>u("path",{d:"M799.387 122.15c4.402-2.978 7.38-7.897 7.38-13.463v-1.165c0-8.933-7.38-16.312-16.312-16.312H256.33c-8.933 0-16.311 7.38-16.311 16.312v1.165c0 5.825 2.977 10.874 7.637 13.592 4.143 194.44 97.22 354.963 220.201 392.763-122.204 37.542-214.893 196.511-220.2 389.397-4.661 5.049-7.638 11.651-7.638 19.03v5.825h566.49v-5.825c0-7.379-2.849-13.981-7.509-18.9-5.049-193.016-97.867-351.985-220.2-389.527 123.24-37.67 216.446-198.453 220.588-392.892zM531.16 450.445v352.632c117.674 1.553 211.787 40.778 211.787 88.676H304.097c0-48.286 95.149-87.382 213.728-88.676V450.445c-93.077-3.107-167.901-81.297-167.901-177.093 0-8.803 6.99-15.793 15.793-15.793 8.803 0 15.794 6.99 15.794 15.793 0 80.261 63.69 145.635 142.01 145.635s142.011-65.374 142.011-145.635c0-8.803 6.99-15.793 15.794-15.793s15.793 6.99 15.793 15.793c0 95.019-73.789 172.82-165.96 177.093z"}));ou.displayName="TimerIcon";const iu=()=>u(Ae,{name:"word"},()=>[u("path",{d:"M518.217 432.64V73.143A73.143 73.143 0 01603.43 1.097a512 512 0 01419.474 419.474 73.143 73.143 0 01-72.046 85.212H591.36a73.143 73.143 0 01-73.143-73.143z"}),u("path",{d:"M493.714 566.857h340.297a73.143 73.143 0 0173.143 85.577A457.143 457.143 0 11371.566 117.76a73.143 73.143 0 0185.577 73.143v339.383a36.571 36.571 0 0036.571 36.571z"})]);iu.displayName="WordIcon";const Ut=()=>{const e=ve();return I(()=>e.value.metaLocales)};var R1=U({name:"AuthorInfo",inheritAttrs:!1,props:{author:{type:Array,required:!0},pure:Boolean},setup(e){const t=Ut();return()=>e.author.length?u("span",{class:"page-author-info","aria-label":`${t.value.author}${e.pure?"":"🖊"}`,...e.pure?{}:{"data-balloon-pos":"down"}},[u(Xc),u("span",e.author.map(n=>n.url?u("a",{class:"page-author-item",href:n.url,target:"_blank",rel:"noopener noreferrer"},n.name):u("span",{class:"page-author-item"},n.name))),u("span",{property:"author",content:e.author.map(n=>n.name).join(", ")})]):null}}),I1=U({name:"CategoryInfo",inheritAttrs:!1,props:{category:{type:Array,required:!0},pure:Boolean},setup(e){const t=Ge(),n=de(),r=Ut(),o=(i,l="")=>{l&&n.value.path!==l&&(i.preventDefault(),t.push(l))};return()=>e.category.length?u("span",{class:"page-category-info","aria-label":`${r.value.category}${e.pure?"":"🌈"}`,...e.pure?{}:{"data-balloon-pos":"down"}},[u(tu),e.category.map(({name:i,path:l})=>u("span",{class:["page-category-item",{[`category${qs(i,9)}`]:!e.pure,clickable:l}],role:l?"navigation":"",onClick:a=>o(a,l)},i)),u("meta",{property:"articleSection",content:e.category.map(({name:i})=>i).join(",")})]):null}}),O1=U({name:"DateInfo",inheritAttrs:!1,props:{date:{type:Object,default:null},localizedDate:{type:String,default:""},pure:Boolean},setup(e){const t=Ri(),n=Ut();return()=>e.date?u("span",{class:"page-date-info","aria-label":`${n.value.date}${e.pure?"":"📅"}`,...e.pure?{}:{"data-balloon-pos":"down"}},[u(eu),u("span",u(ro,()=>e.localizedDate||e.date.toLocaleDateString(t.value))),u("meta",{property:"datePublished",content:e.date.toISOString()||""})]):null}}),x1=U({name:"OriginalInfo",inheritAttrs:!1,props:{isOriginal:Boolean},setup(e){const t=Ut();return()=>e.isOriginal?u("span",{class:"page-original-info"},t.value.origin):null}}),k1=U({name:"ReadingTimeInfo",inheritAttrs:!1,props:{readingTime:{type:Object,default:()=>null},readingTimeLocale:{type:Object,default:()=>null},pure:Boolean},setup(e){const t=Ut(),n=I(()=>{if(!e.readingTime)return null;const{minutes:r}=e.readingTime;return r<1?"PT1M":`PT${Math.round(r)}M`});return()=>{var r,o;return(r=e.readingTimeLocale)!=null&&r.time?u("span",{class:"page-reading-time-info","aria-label":`${t.value.readingTime}${e.pure?"":"⌛"}`,...e.pure?{}:{"data-balloon-pos":"down"}},[u(ou),u("span",(o=e.readingTimeLocale)==null?void 0:o.time),u("meta",{property:"timeRequired",content:n.value})]):null}}}),C1=U({name:"TagInfo",inheritAttrs:!1,props:{tag:{type:Array,default:()=>[]},pure:Boolean},setup(e){const t=Ge(),n=de(),r=Ut(),o=(i,l="")=>{l&&n.value.path!==l&&(i.preventDefault(),t.push(l))};return()=>e.tag.length?u("span",{class:"page-tag-info","aria-label":`${r.value.tag}${e.pure?"":"🏷"}`,...e.pure?{}:{"data-balloon-pos":"down"}},[u(ru),e.tag.map(({name:i,path:l})=>u("span",{class:["page-tag-item",{[`tag${qs(i,9)}`]:!e.pure,clickable:l}],role:l?"navigation":"",onClick:a=>o(a,l)},i)),u("meta",{property:"keywords",content:e.tag.map(({name:i})=>i).join(",")})]):null}}),D1=U({name:"ReadTimeInfo",inheritAttrs:!1,props:{readingTime:{type:Object,default:()=>null},readingTimeLocale:{type:Object,default:()=>null},pure:Boolean},setup(e){const t=Ut();return()=>{var n,r,o;return(n=e.readingTimeLocale)!=null&&n.words?u("span",{class:"page-word-info","aria-label":`${t.value.words}${e.pure?"":"🔠"}`,...e.pure?{}:{"data-balloon-pos":"down"}},[u(iu),u("span",(r=e.readingTimeLocale)==null?void 0:r.words),u("meta",{property:"wordCount",content:(o=e.readingTime)==null?void 0:o.words})]):null}}}),S1=U({name:"PageInfo",components:{AuthorInfo:R1,CategoryInfo:I1,DateInfo:O1,OriginalInfo:x1,PageViewInfo:()=>null,ReadingTimeInfo:k1,TagInfo:C1,WordInfo:D1},props:{items:{type:[Array,Boolean],default:()=>["Author","Original","Date","PageView","ReadingTime","Category","Tag"]},info:{type:Object,required:!0}},setup(e){const t=gr();return()=>e.items?u("div",{class:"page-info"},e.items.map(n=>u(nt(`${n}Info`),{...e.info,pure:t.value}))):null}}),V1=U({name:"PrintButton",setup(){const e=Bn(),t=ve();return()=>e.value.print===!1?null:u("button",{type:"button",class:"print-button",title:t.value.metaLocales.print,onClick:()=>{window.print()}},u(nu))}});const M1=({title:e,level:t,slug:n})=>u(et,{to:`#${n}`,class:["toc-link",`level${t}`]},()=>e),ei=(e,t)=>{const n=yt();return e.length&&t>0?u("ul",{class:"toc-list"},e.map(r=>{const o=ei(r.children,t-1);return[u("li",{class:["toc-item",{active:n.hash===`#${r.slug}`}]},M1(r)),o?u("li",o):null]})):null};var $1=U({name:"TOC",props:{items:{type:Array,default:()=>[]},headerDepth:{type:Number,default:2}},slots:Object,setup(e,{slots:t}){const n=yt(),r=de(),o=Ut(),i=ft(),l=te("-1.7rem"),a=c=>{var f;(f=i.value)==null||f.scrollTo({top:c,behavior:"smooth"})},s=()=>{if(i.value){const c=document.querySelector(".toc-item.active");c?l.value=`${c.getBoundingClientRect().top-i.value.getBoundingClientRect().top+i.value.scrollTop}px`:l.value="-1.7rem"}else l.value="-1.7rem"};return be(()=>{fe(()=>n.hash,c=>{if(i.value){const f=document.querySelector(`#toc a.toc-link[href$="${c}"]`);if(!f)return;const{top:d,height:p}=i.value.getBoundingClientRect(),{top:m,height:g}=f.getBoundingClientRect();md+p&&a(i.value.scrollTop+m+g-d-p)}}),fe(()=>n.fullPath,s,{flush:"post",immediate:!0})}),()=>{var f,d;const c=e.items.length?ei(e.items,e.headerDepth):r.value.headers?ei(r.value.headers,e.headerDepth):null;return c?u("div",{class:"toc-place-holder"},[u("aside",{id:"toc"},[(f=t.before)==null?void 0:f.call(t),u("div",{class:"toc-header"},[o.value.toc,u(V1)]),u("div",{class:"toc-wrapper",ref:i},[c,u("div",{class:"toc-marker",style:{top:l.value}})]),(d=t.after)==null?void 0:d.call(t)])]):null}}}),lu=U({name:"SkipLink",props:{content:{type:String,default:"main-content"}},setup(e){const t=de(),n=ve(),r=ft(),o=({target:i})=>{const l=document.querySelector(i.hash);if(l){const a=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",a)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",a),l.focus(),window.scrollTo(0,0)}};return be(()=>{fe(()=>t.value.path,()=>r.value.focus())}),()=>[u("span",{ref:r,tabindex:"-1"}),u("a",{href:`#${e.content}`,class:"vp-skip-link sr-only",onClick:o},n.value.routeLocales.skipToContent)]}});let Co=null,Wn=null;const z1={wait:()=>Co,pending:()=>{Co=new Promise(e=>Wn=e)},resolve:()=>{Wn==null||Wn(),Co=null,Wn=null}},au=()=>z1;var N1=U({name:"FadeSlideY",slots:Object,setup(e,{slots:t}){const{resolve:n,pending:r}=au();return()=>u(xt,{name:"fade-slide-y",mode:"out-in",onBeforeEnter:n,onBeforeLeave:r},()=>{var o;return(o=t.default)==null?void 0:o.call(t)})}});const B1=(e,t)=>{const n=e.replace(t,"/").split("/"),r=[];let o=Pi(t);return n.forEach((i,l)=>{l!==n.length-1?(o+=`${i}/`,r.push({link:o,name:i||"Home"})):i!==""&&(o+=i,r.push({link:o,name:i}))}),r},su=(e,{slots:t})=>{var d,p;const{bgImage:n,bgImageDark:r,bgImageStyle:o,color:i,description:l,image:a,imageDark:s,header:c,features:f=[]}=e;return u("div",{class:"vp-feature-wrapper"},[n?u("div",{class:["vp-feature-bg",{light:r}],style:[{"background-image":`url(${n})`},o]}):null,r?u("div",{class:"vp-feature-bg dark",style:[{"background-image":`url(${r})`},o]}):null,u("div",{class:"vp-feature",style:i?{color:i}:{}},[((d=t.image)==null?void 0:d.call(t,e))||[a?u("img",{class:["vp-feature-image",{light:s}],src:Ve(a),alt:c}):null,s?u("img",{class:"vp-feature-image dark",src:Ve(s),alt:c}):null],((p=t.info)==null?void 0:p.call(t,e))||[c?u("h2",{class:"vp-feature-header"},c):null,l?u("p",{class:"vp-feature-description",innerHTML:l}):null],f.length?u("div",{class:"vp-features"},f.map(({icon:m,title:g,details:w,link:T})=>{const y=[u("h3",{class:"vp-feature-title"},[u(je,{icon:m}),u("span",{innerHTML:g})]),u("p",{class:"vp-feature-details",innerHTML:w})];return T?Wr(T)?u("a",{class:"vp-feature-item link",href:T,"aria-label":g,target:"_blank"},y):u(et,{class:"vp-feature-item link",to:T,"aria-label":g},()=>y):u("div",{class:"vp-feature-item"},y)})):null])])};su.displayName="FeaturePanel";var da=su;const cu=e=>{const{icon:t="",color:n,size:r}=e,o={};return n&&(o.color=n),r&&(o.height=Number.isNaN(Number(r))?r:`${r}px`),Mn(t)?u("img",{class:"icon",src:t,"no-view":"",style:o}):lo(t)?u("img",{class:"icon",src:Ve(t),"no-view":"",style:o}):u(nt("FontIcon"),e)};cu.displayName="HopeIcon";var F1=cu,H1=U({name:"HeroInfo",slots:Object,setup(e,{slots:t}){const n=Le(),r=no(),o=I(()=>n.value.heroFullScreen??!1),i=I(()=>{const{heroText:c,tagline:f}=n.value;return{text:c??r.value.title??"Hello",tagline:f??r.value.description??"",isFullScreen:o.value}}),l=I(()=>{const{heroText:c,heroImage:f,heroImageDark:d,heroAlt:p,heroImageStyle:m}=n.value;return{image:f?Ve(f):null,imageDark:d?Ve(d):null,heroStyle:m,alt:p||c||"hero image",isFullScreen:o.value}}),a=I(()=>{const{bgImage:c,bgImageDark:f,bgImageStyle:d}=n.value;return{image:kt(c)?Ve(c):null,imageDark:kt(f)?Ve(f):null,bgStyle:d,isFullScreen:o.value}}),s=I(()=>n.value.actions??[]);return()=>{var c,f,d;return u("header",{class:["vp-hero-info-wrapper",{fullscreen:o.value}]},[((c=t.heroBg)==null?void 0:c.call(t,a.value))||[a.value.image?u("div",{class:["vp-hero-mask",{light:a.value.imageDark}],style:[{"background-image":`url(${a.value.image})`},a.value.bgStyle]}):null,a.value.imageDark?u("div",{class:"vp-hero-mask dark",style:[{"background-image":`url(${a.value.imageDark})`},a.value.bgStyle]}):null],u("div",{class:"vp-hero-info"},[((f=t.heroImage)==null?void 0:f.call(t,l.value))||u(_n,{appear:!0,type:"group"},()=>[l.value.image?u("img",{key:"light",class:["vp-hero-image",{light:l.value.imageDark}],style:l.value.heroStyle,src:l.value.image,alt:l.value.alt}):null,l.value.imageDark?u("img",{key:"dark",class:"vp-hero-image dark",style:l.value.heroStyle,src:l.value.imageDark,alt:l.value.alt}):null]),((d=t.heroInfo)==null?void 0:d.call(t,i.value))??u("div",{class:"vp-hero-infos"},[i.value.text?u(_n,{appear:!0,delay:.04},()=>u("h1",{id:"main-title"},i.value.text)):null,i.value.tagline?u(_n,{appear:!0,delay:.08},()=>u("p",{id:"main-description",innerHTML:i.value.tagline})):null,s.value.length?u(_n,{appear:!0,delay:.12},()=>u("p",{class:"vp-hero-actions"},s.value.map(p=>u(Fe,{class:["vp-hero-action",p.type||"default"],config:p,noExternalLinkIcon:!0},p.icon?{before:()=>u(F1,{icon:p.icon})}:{})))):null])])])}}});const uu=(e,{slots:t})=>{var p,m,g;const{bgImage:n,bgImageDark:r,bgImageStyle:o,color:i,description:l,image:a,imageDark:s,header:c,highlights:f=[],type:d="un-order"}=e;return u("div",{class:"vp-highlight-wrapper",style:i?{color:i}:{}},[n?u("div",{class:["vp-highlight-bg",{light:r}],style:[{"background-image":`url(${n})`},o]}):null,r?u("div",{class:"vp-highlight-bg dark",style:[{"background-image":`url(${r})`},o]}):null,u("div",{class:"vp-highlight"},[((p=t.image)==null?void 0:p.call(t,e))||[a?u("img",{class:["vp-highlight-image",{light:s}],src:Ve(a),alt:c}):null,s?u("img",{class:"vp-highlight-image dark",src:Ve(s),alt:c}):null],((m=t.info)==null?void 0:m.call(t,e))||[u("div",{class:"vp-highlight-info-wrapper"},u("div",{class:"vp-highlight-info"},[c?u("h2",{class:"vp-highlight-header",innerHTML:c}):null,l?u("p",{class:"vp-highlight-description",innerHTML:l}):null,((g=t.highlights)==null?void 0:g.call(t,f))||u(d==="order"?"ol":d==="no-order"?"dl":"ul",{class:"vp-highlights"},f.map(({icon:w,title:T,details:y,link:P})=>{const b=[u(d==="no-order"?"dt":"h3",{class:"vp-highlight-title"},[w?u(je,{class:"vp-highlight-icon",icon:w}):null,u("span",{innerHTML:T})]),y?u(d==="no-order"?"dd":"p",{class:"vp-highlight-details",innerHTML:y}):null];return u(d==="no-order"?"div":"li",{class:["vp-highlight-item-wrapper",{link:P}]},P?Dh(P)?u("a",{class:"vp-highlight-item link",href:P,"aria-label":T,target:"_blank"},b):u(et,{class:"vp-highlight-item link",to:P,"aria-label":T},()=>b):u("div",{class:"vp-highlight-item"},b))}))]))]])])};uu.displayName="HighlightPanel";var j1=uu,W1=U({name:"HomePage",slots:Object,setup(e,{slots:t}){const n=gr(),r=Le(),o=I(()=>{const{features:l}=r.value;return X(l)?l:null}),i=I(()=>{const{highlights:l}=r.value;return X(l)?l:null});return()=>{var l,a,s,c;return u("main",{id:"main-content",class:["vp-project-home ",{pure:n.value}],"aria-labelledby":r.value.heroText===null?"":"main-title"},[(l=t.top)==null?void 0:l.call(t),u(H1),((a=i.value)==null?void 0:a.map(f=>"features"in f?u(da,f):u(j1,f)))||(o.value?u(_n,{appear:!0,delay:.24},()=>u(da,{features:o.value})):null),(s=t.center)==null?void 0:s.call(t),u(_n,{appear:!0,delay:.32},()=>u(Jc)),(c=t.bottom)==null?void 0:c.call(t)])}}}),q1=U({name:"BreadCrumb",setup(){const e=Ge(),t=de(),n=an(),r=Le(),o=ve(),i=ft([]),l=I(()=>(r.value.breadcrumb||r.value.breadcrumb!==!1&&o.value.breadcrumb!==!1)&&i.value.length>1),a=I(()=>r.value.breadcrumbIcon||r.value.breadcrumbIcon!==!1&&o.value.breadcrumbIcon!==!1),s=()=>{const c=e.getRoutes(),f=B1(t.value.path,n.value).map(({link:d,name:p})=>{const m=c.find(g=>g.path===d);if(m){const{meta:g,path:w}=Ur(e,m.path);return{title:g[Rt.shortTitle]||g[Rt.title]||p,icon:g[Rt.icon],path:w}}return null}).filter(d=>d!==null);f.length>1&&(i.value=f)};return be(()=>{fe(()=>t.value.path,s,{immediate:!0})}),()=>u("nav",{class:["vp-breadcrumb",{disable:!l.value}]},l.value?u("ol",{vocab:"https://schema.org/",typeof:"BreadcrumbList"},i.value.map((c,f)=>u("li",{class:{"is-active":i.value.length-1===f},property:"itemListElement",typeof:"ListItem"},[u(et,{to:c.path,property:"item",typeof:"WebPage"},()=>[a.value?u(je,{icon:c.icon}):null,u("span",{property:"name"},c.title||"Unknown")]),u("meta",{property:"position",content:f+1})]))):[])}});const pa=e=>{const t=Ge();return e===!1?!1:ue(e)?En(t,e,!0):Li(e)?e:null},ti=(e,t,n)=>{const r=e.findIndex(o=>o.link===t);if(r!==-1){const o=e[r+n];return o!=null&&o.link?o:null}for(const o of e)if(o.children){const i=ti(o.children,t,n);if(i)return i}return null};var U1=U({name:"PageNav",setup(){const e=ve(),t=Le(),n=Bi(),r=de(),o=Um(),i=I(()=>{const a=pa(t.value.prev);return a===!1?null:a||(e.value.prevLink===!1?null:ti(n.value,r.value.path,-1))}),l=I(()=>{const a=pa(t.value.next);return a===!1?null:a||(e.value.nextLink===!1?null:ti(n.value,r.value.path,1))});return Me("keydown",a=>{a.altKey&&(a.key==="ArrowRight"?l.value&&(o(l.value.link),a.preventDefault()):a.key==="ArrowLeft"&&i.value&&(o(i.value.link),a.preventDefault()))}),()=>i.value||l.value?u("nav",{class:"vp-page-nav"},[i.value?u(Fe,{class:"prev",config:i.value},()=>{var a,s;return[u("div",{class:"hint"},[u("span",{class:"arrow start"}),e.value.metaLocales.prev]),u("div",{class:"link"},[u(je,{icon:(a=i.value)==null?void 0:a.icon}),(s=i.value)==null?void 0:s.text])]}):null,l.value?u(Fe,{class:"next",config:l.value},()=>{var a,s;return[u("div",{class:"hint"},[e.value.metaLocales.next,u("span",{class:"arrow end"})]),u("div",{class:"link"},[(a=l.value)==null?void 0:a.text,u(je,{icon:(s=l.value)==null?void 0:s.icon})])]}):null]):null}});const K1={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},G1=({docsRepo:e,docsBranch:t,docsDir:n,filePathRelative:r,editLinkPattern:o})=>{if(!r)return null;const i=Js(e);let l;return o?l=o:i!==null&&(l=K1[i]),l?l.replace(/:repo/,Mn(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,_s(`${Pi(n)}/${r}`)):null},Y1=()=>{const e=ve(),t=de(),n=Le();return I(()=>{const{repo:r,docsRepo:o=r,docsBranch:i="main",docsDir:l="",editLink:a,editLinkPattern:s=""}=e.value;if(!(n.value.editLink??a??!0)||!o)return null;const c=G1({docsRepo:o,docsBranch:i,docsDir:l,editLinkPattern:s,filePathRelative:t.value.filePathRelative});return c?{text:e.value.metaLocales.editLink,link:c}:null})},Z1=()=>{const e=no(),t=ve(),n=de(),r=Le();return I(()=>{var o,i;return!(r.value.lastUpdated??t.value.lastUpdated??!0)||!((o=n.value.git)!=null&&o.updatedTime)?null:new Date((i=n.value.git)==null?void 0:i.updatedTime).toLocaleString(e.value.lang)})},Q1=()=>{const e=ve(),t=de(),n=Le();return I(()=>{var r;return n.value.contributors??e.value.contributors??!0?((r=t.value.git)==null?void 0:r.contributors)??null:null})};var J1=U({name:"PageTitle",setup(){const e=de(),t=Le(),n=ve(),{info:r,items:o}=Zm();return()=>u("div",{class:"vp-page-title"},[u("h1",[n.value.titleIcon===!1?null:u(je,{icon:t.value.icon}),e.value.title]),u(S1,{info:r.value,...o.value===null?{}:{items:o.value}}),u("hr")])}});const fu=()=>u(Ae,{name:"edit"},()=>[u("path",{d:"M430.818 653.65a60.46 60.46 0 0 1-50.96-93.281l71.69-114.012 7.773-10.365L816.038 80.138A60.46 60.46 0 0 1 859.225 62a60.46 60.46 0 0 1 43.186 18.138l43.186 43.186a60.46 60.46 0 0 1 0 86.373L588.879 565.55l-8.637 8.637-117.466 68.234a60.46 60.46 0 0 1-31.958 11.229z"}),u("path",{d:"M728.802 962H252.891A190.883 190.883 0 0 1 62.008 771.98V296.934a190.883 190.883 0 0 1 190.883-192.61h267.754a60.46 60.46 0 0 1 0 120.92H252.891a69.962 69.962 0 0 0-69.098 69.099V771.98a69.962 69.962 0 0 0 69.098 69.098h475.911A69.962 69.962 0 0 0 797.9 771.98V503.363a60.46 60.46 0 1 1 120.922 0V771.98A190.883 190.883 0 0 1 728.802 962z"})]);fu.displayName="EditIcon";var X1=U({name:"PageMeta",setup(){const e=ve(),t=Y1(),n=Z1(),r=Q1();return()=>{const{metaLocales:o}=e.value;return u("footer",{class:"page-meta"},[t.value?u("div",{class:"meta-item edit-link"},u(Fe,{class:"label",config:t.value},{before:()=>u(fu)})):null,u("div",{class:"meta-item git-info"},[n.value?u("div",{class:"update-time"},[u("span",{class:"label"},`${o.lastUpdated}: `),u(ro,()=>u("span",{class:"info"},n.value))]):null,r.value&&r.value.length?u("div",{class:"contributors"},[u("span",{class:"label"},`${o.contributors}: `),r.value.map(({email:i,name:l},a)=>[u("span",{class:"contributor",title:`email: ${i}`},l),a!==r.value.length-1?",":""])]):null])])}}}),e_=U({name:"NormalPage",slots:Object,setup(e,{slots:t}){const n=Le(),r=de(),{isDarkmode:o}=br(),i=ve(),l=I(()=>n.value.toc||n.value.toc!==!1&&i.value.toc!==!1);return()=>u("main",{id:"main-content",class:"vp-page"},u(Ot("LocalEncrypt")?nt("LocalEncrypt"):Ws,()=>{var a,s,c,f;return[(a=t.top)==null?void 0:a.call(t),n.value.cover?u("img",{class:"page-cover",src:Ve(n.value.cover),alt:r.value.title,"no-view":""}):null,u(q1),u(J1),l.value?u($1,{headerDepth:n.value.headerDepth??i.value.headerDepth??2},{before:()=>{var d;return(d=t.tocBefore)==null?void 0:d.call(t)},after:()=>{var d;return(d=t.tocAfter)==null?void 0:d.call(t)}}):null,(s=t.contentBefore)==null?void 0:s.call(t),u(Jc),(c=t.contentAfter)==null?void 0:c.call(t),u(X1),u(U1),Ot("CommentService")?u(nt("CommentService"),{darkmode:o.value}):null,(f=t.bottom)==null?void 0:f.call(t)]}))}}),t_=U({name:"Layout",slots:Object,setup(e,{slots:t}){ve();const n=de(),r=Le(),{isMobile:o}=co(),i=I(()=>"none");return()=>[u(lu),u(Qc,{},{default:()=>{var l;return((l=t.default)==null?void 0:l.call(t))||(r.value.home?u(W1):u(N1,()=>u(e_,{key:n.value.path},{top:()=>{var a;return(a=t.top)==null?void 0:a.call(t)},bottom:()=>{var a;return(a=t.bottom)==null?void 0:a.call(t)},contentBefore:()=>{var a;return(a=t.contentBefore)==null?void 0:a.call(t)},contentAfter:()=>{var a;return(a=t.contentAfter)==null?void 0:a.call(t)},tocBefore:()=>{var a;return(a=t.tocBefore)==null?void 0:a.call(t)},tocAfter:()=>{var a;return(a=t.tocAfter)==null?void 0:a.call(t)}})))},...i.value!=="none"?{navScreenBottom:()=>u(nt("BloggerInfo"))}:{},...!o.value&&i.value==="always"?{sidebar:()=>u(nt("BloggerInfo"))}:{}})]}}),n_=U({name:"NotFoundHint",setup(){const e=ve(),t=()=>{const n=e.value.routeLocales.notFoundMsg;return n[Math.floor(Math.random()*n.length)]};return()=>u("div",{class:"not-found-hint"},[u("p",{class:"error-code"},"404"),u("h1",{class:"error-title"},e.value.routeLocales.notFoundTitle),u("p",{class:"error-hint"},t())])}}),r_=U({name:"NotFound",slots:Object,setup(e,{slots:t}){const n=an(),r=ve(),{navigate:o}=Ko({to:r.value.home??n.value});return()=>[u(lu),u(Qc,{noSidebar:!0},()=>{var i;return u("main",{id:"main-content",class:"vp-page not-found"},((i=t.default)==null?void 0:i.call(t))||[u(n_),u("div",{class:"actions"},[u("button",{type:"button",class:"action-button",onClick:()=>{window.history.go(-1)}},r.value.routeLocales.back),u("button",{type:"button",class:"action-button",onClick:()=>o()},r.value.routeLocales.home)])])})]}});xv(e=>{const t=e.t,n=e.I!==!1,r=e.i;return n?{title:t,content:r?()=>[u(je,{icon:r}),t]:null,order:e.O,index:e.I}:null});const o_=ot({enhance:({app:e,router:t})=>{const{scrollBehavior:n}=t.options;t.options.scrollBehavior=async(...r)=>(await au().wait(),n(...r)),Xm(e),e.component("HopeIcon",je),e.component("VPLink",et)},setup:()=>{e1(),i1()},layouts:{Layout:t_,NotFound:r_}}),Dr=[cp,wv,Ov,Vv,Nv,jv,Gv,nm,fm,gm,Om,Nm,o_],i_=[["v-8daa1a0e","/",{y:"h",t:"Home",i:"home"},["/README.md"]],["v-fffb8e28","/guide/",{y:"a",t:"Guide",i:"terminal"},["/guide/README.md"]],["v-43c96c34","/more/collaborative_projects.html",{y:"a",t:"Collaborative Projects",i:"circle-info"},[":md"]],["v-17f2914c","/more/contact.html",{y:"a",t:"Contact US",i:"circle-info"},[":md"]],["v-07f943d9","/more/license.html",{y:"a",t:"License",i:"circle-info"},[":md"]],["v-9e2e7e22","/more/thanks.html",{y:"a",t:"Acknowledgments",i:"circle-info"},[":md"]],["v-1d3d20e2","/more/use_cases.html",{y:"a",t:"Use Cases",i:"circle-info"},[":md"]],["v-639495b8","/tutorial/",{y:"a",t:"Tutorial",i:"lightbulb"},["/tutorial/README.md"]],["v-2d0ad528","/zh/",{y:"h",t:"首页",i:"home"},["/zh/README.md"]],["v-58ff8a76","/guide/code/",{y:"a",t:"Code interpretation",i:"code"},["/guide/code/README.md"]],["v-07e28fb7","/guide/code/oncetoken.html",{y:"a",t:"onceToken"},[":md"]],["v-5d588a76","/guide/faq/",{y:"a",t:"FAQ",i:"question"},["/guide/faq/README.md"]],["v-67fe8904","/guide/faq/not_recommended_qq.html",{y:"a",t:"Why is it not recommended to consult questions via QQ private chat?"},[":md"]],["v-9ef794be","/guide/faq/rtmp_playback_compatibility_issues.html",{y:"a",t:"RTMP Playback Compatibility Issues"},[":md"]],["v-26771ae0","/guide/install/",{y:"a",t:"Install",i:"box-archive"},["/guide/install/README.md"]],["v-7c5f89f1","/guide/install/compilation_instructions_for_windows_version.html",{y:"a",t:"Building Instructions for Windows"},[":md"]],["v-2a95408c","/guide/install/install_zlmediakit_using_vcpkg.html",{y:"a",t:"Installing zlmediakit with vcpkg"},[":md"]],["v-410226d2","/guide/install/start.html",{y:"a",t:"Start",O:1},[":md"]],["v-1a355af6","/guide/media_server/",{y:"a",t:"Media Server",i:"gears",O:3},["/guide/media_server/README.md"]],["v-f17856b6","/guide/media_server/config_file.html",{y:"a",t:"Configuration File Explanation"},[":md"]],["v-326b1b06","/guide/media_server/generate_ssl_self-signed_certificate_and_test.html",{y:"a",t:"Generate SSL self-signed certificate and test"},[":md"]],["v-f90651dc","/guide/media_server/how_to_enable_https_related_functions.html",{y:"a",t:"How to Enable HTTPS Related Functions"},[":md"]],["v-629229d1","/guide/media_server/on-demand_push_streaming.html",{y:"a",t:"Implement on-demand push streaming"},[":md"]],["v-a3ed6f7c","/guide/media_server/on-demand_streaming.html",{y:"a",t:"Implement on-demand pull streaming"},[":md"]],["v-22d780d8","/guide/media_server/play_url_rules.html",{y:"a",t:"Playing URL Rules",i:"circle-info"},[":md"]],["v-40777a42","/guide/media_server/playback_authentication.html",{y:"a",t:"Implementing Playback Authentication"},[":md"]],["v-1c8baf7e","/guide/media_server/push_authentication.html",{y:"a",t:"Implementing Push Streaming Authentication"},[":md"]],["v-d003c332","/guide/media_server/push_test.html",{y:"a",t:"Push and Playback Testing"},[":md"]],["v-992f244c","/guide/media_server/restful_api.html",{y:"a",t:"RESTful API"},[":md"]],["v-1563923f","/guide/media_server/sequence_diagram.html",{y:"a",t:"Sequence diagram"},[":md"]],["v-3f9e2b34","/guide/media_server/start_server.html",{y:"a",t:"Starting and Stopping the Server",i:"circle-info"},[":md"]],["v-4436fd0b","/guide/media_server/web_hook_api.html",{y:"a",t:"Web Hook"},[":md"]],["v-fa0f55aa","/guide/protocol/",{y:"a",t:"Protocol",i:"lightbulb"},["/guide/protocol/README.md"]],["v-5d4ca3be","/guide/sdk/",{y:"a",t:"SDK API",i:"lightbulb"},["/guide/sdk/README.md"]],["v-29126422","/guide/sdk/how_to_create_a_live_steam.html",{y:"a",t:"How to create a live stream"},[":md"]],["v-b1256428","/reference/development_log/",{y:"a",t:"Development log",i:"code-commit"},["/reference/development_log/README.md"]],["v-099b9809","/reference/development_log/hls_high_performance_journey.html",{y:"a",t:"zlmediakit的hls高性能之旅"},[":md"]],["v-c75d9fee","/reference/development_log/rtsp_performance_optimization.html",{y:"a",t:"RTSP性能优化",O:1},[":md"]],["v-27716634","/reference/documents/",{y:"a",t:"Related documents",i:"file-code"},["/reference/documents/README.md"]],["v-3d1bfe27","/reference/documents/exclusive_features.html",{y:"a",t:"Exclusive Features of ZLMediakit"},[":md"]],["v-61f35635","/reference/documents/high_concurrency_implementation_principle.html",{y:"a",t:"ZLMediaKit高并发实现原理"},[":md"]],["v-60e3ff20","/reference/documents/introduction_to_streaming_media_related_technologies.html",{y:"a",t:"流媒体相关技术介绍"},[":md"]],["v-716fbfe3","/reference/documents/rtsp_push_process.html",{y:"a",t:"RTSP push streaming process"},[":md"]],["v-159648d6","/reference/documents/the_nature_of_live_broadcast_delay.html",{y:"a",t:"The Essence of Live Streaming Delay"},[":md"]],["v-07cf6867","/reference/resources/",{y:"a",t:"Resources",i:"font-awesome"},["/reference/resources/README.md"]],["v-2894bdb2","/reference/resources/dependency.html",{y:"a",t:"Dependency and Copyright"},[":md"]],["v-630bfad5","/reference/resources/rtmp_support_for_h265_and_opus.html",{y:"a",t:"RTMP supports H265 and OPUS"},[":md"]],["v-a9be237a","/reference/resources/video_conferencing_related_resources.html",{y:"a",t:"Video Conference Related Resources"},[":md"]],["v-770cb196","/reference/resources/zltoolkit_source_code_study_notes.html",{y:"a",t:"ZLToolKit source code study notes"},[":md"]],["v-60c5ec00","/reference/test/",{y:"a",t:"Testing",i:"vials"},["/reference/test/README.md"]],["v-7cf84008","/reference/test/benchmark.html",{y:"a",t:"Benchmark"},[":md"]],["v-d8f6ac6a","/reference/test/delay_test.html",{y:"a",t:"Delay Testing"},[":md"]],["v-adc6a8e4","/reference/test/how_to_test_delay.html",{y:"a",t:"How to test the delay?"},[":md"]],["v-ea3f92ca","/reference/test/online_test.html",{y:"a",t:"Online test"},[":md"]],["v-210a0a78","/reference/test/performance_testing.html",{y:"a",t:"Performance Testing"},[":md"]],["v-27157219","/reference/test/rtmp_pull_stream_performance_test.html",{y:"a",t:"rtmp pull stream performance test"},[":md"]],["v-927f8538","/reference/test/rtmp_push_stream_performance_test.html",{y:"a",t:"rtmp push stream performance test"},[":md"]],["v-3ede775a","/reference/test/rtsp_pull_stream_performance_test.html",{y:"a",t:"rtsp pull stream performance test"},[":md"]],["v-703b8f9e","/reference/test/rtsp_push_stream_performance_test.html",{y:"a",t:"rtsp push stream performance test"},[":md"]],["v-47357bdb","/zh/guide/",{y:"a",t:"指南",i:"terminal"},["/zh/guide/README.md"]],["v-0a3cd263","/zh/more/collaborative_projects.html",{y:"a",t:"合作项目",i:"circle-info"},[":md"]],["v-8b20cdea","/zh/more/contact.html",{y:"a",t:"联系我们",i:"circle-info"},[":md"]],["v-633bb4ec","/zh/more/license.html",{y:"a",t:"授权协议",i:"circle-info"},[":md"]],["v-4bf4651e","/zh/more/thanks.html",{y:"a",t:"致谢",i:"circle-info"},[":md"]],["v-7dceae00","/zh/more/use_cases.html",{y:"a",t:"使用案例",i:"circle-info"},[":md"]],["v-ec228f2e","/zh/tutorial/",{y:"a",t:"快速开始",i:"lightbulb"},["/zh/tutorial/README.md"]],["v-cb3c3b8e","/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html",{y:"a",t:"GB28181 SIP信令抓包"},[":md"]],["v-6fbaec55","/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html",{y:"a",t:"GB28181怎么用设备ID作为流ID"},[":md"]],["v-079ebd6a","/guide/protocol/gb28181/push_streaming.html",{y:"a",t:"GB28181推流"},[":md"]],["v-114c6ef6","/guide/protocol/srt/",{y:"a",t:"SRT"},["/guide/protocol/srt/README.md"]],["v-d73f5e1e","/guide/protocol/webrtc/webrtc_compilation_and_use.html",{y:"a",t:"Compiling and Using WebRTC"},[":md"]],["v-284ed9d6","/guide/protocol/webrtc/webrtc_signaling_interaction_format.html",{y:"a",t:"WebRTC Signaling Interaction Format"},[":md"]],["v-515bc4e7","/zh/guide/code/",{y:"a",t:"代码解读",i:"code"},["/zh/guide/code/README.md"]],["v-e1a99f30","/zh/guide/code/oncetoken.html",{y:"a",t:"代码篇之onceToken"},[":md"]],["v-763dee34","/zh/guide/faq/",{y:"a",t:"常见问题",i:"question"},["/zh/guide/faq/README.md"]],["v-6ff7e8b5","/zh/guide/faq/not_recommended_qq.html",{y:"a",t:"为什么不建议QQ私聊咨询问题?"},[":md"]],["v-75521352","/zh/guide/faq/rtmp_playback_compatibility_issues.html",{y:"a",t:"RTMP播放兼容性问题"},[":md"]],["v-1b2bfecf","/zh/guide/install/",{y:"a",t:"安装",i:"box-archive"},["/zh/guide/install/README.md"]],["v-3c49c43c","/zh/guide/install/compilation_instructions_for_windows_version.html",{y:"a",t:"Windows 版编译说明"},[":md"]],["v-2139c386","/zh/guide/install/install_zlmediakit_using_vcpkg.html",{y:"a",t:"vcpkg方式安装zlmediakit"},[":md"]],["v-4f36f1c6","/zh/guide/install/start.html",{y:"a",t:"快速开始",O:1},[":md"]],["v-7ac6e814","/zh/guide/media_server/",{y:"a",t:"Media Server",i:"gears"},["/zh/guide/media_server/README.md"]],["v-76640c16","/zh/guide/media_server/config_file.html",{y:"a",t:"配置文件详解"},[":md"]],["v-04c98dae","/zh/guide/media_server/generate_ssl_self-signed_certificate_and_test.html",{y:"a",t:"生成SSL自签名证书并测试"},[":md"]],["v-fc02997a","/zh/guide/media_server/how_to_enable_https_related_functions.html",{y:"a",t:"怎么开启https相关功能"},[":md"]],["v-60a95200","/zh/guide/media_server/on-demand_push_streaming.html",{y:"a",t:"实现按需推流"},[":md"]],["v-b991029a","/zh/guide/media_server/on-demand_streaming.html",{y:"a",t:"实现按需拉流"},[":md"]],["v-78eb47c7","/zh/guide/media_server/play_url_rules.html",{y:"a",t:"播放url规则",i:"circle-info"},[":md"]],["v-2459df9a","/zh/guide/media_server/playback_authentication.html",{y:"a",t:"实现播放鉴权"},[":md"]],["v-322f429c","/zh/guide/media_server/push_authentication.html",{y:"a",t:"实现推流鉴权"},[":md"]],["v-c01103d0","/zh/guide/media_server/push_test.html",{y:"a",t:"推流播放测试"},[":md"]],["v-baeeb56a","/zh/guide/media_server/restful_api.html",{y:"a",t:"RESTful 接口"},[":md"]],["v-35a1596e","/zh/guide/media_server/sequence_diagram.html",{y:"a",t:"时序图"},[":md"]],["v-3484e1e3","/zh/guide/media_server/start_server.html",{y:"a",t:"服务器的启动与关闭",i:"circle-info"},[":md"]],["v-391db3ba","/zh/guide/media_server/web_hook_api.html",{y:"a",t:"Web Hook 接口"},[":md"]],["v-24dfef1c","/zh/guide/protocol/",{y:"a",t:"协议相关",i:"lightbulb"},["/zh/guide/protocol/README.md"]],["v-7643e190","/zh/guide/sdk/",{y:"a",t:"SDK API",i:"cube"},["/zh/guide/sdk/README.md"]],["v-5a1c26c0","/zh/guide/sdk/how_to_create_a_live_steam.html",{y:"a",t:"怎样创建直播流"},[":md"]],["v-0938c35b","/zh/reference/development_log/",{y:"a",t:"开发日志",i:"code-commit"},["/zh/reference/development_log/README.md"]],["v-5298cc7a","/zh/reference/development_log/hls_high_performance_journey.html",{y:"a",t:"zlmediakit的hls高性能之旅"},[":md"]],["v-72fa89b8","/zh/reference/development_log/rtsp_performance_optimization.html",{y:"a",t:"RTSP性能优化",O:1},[":md"]],["v-4ea15ae3","/zh/reference/documents/",{y:"a",t:"相关文档",i:"file-code"},["/zh/reference/documents/README.md"]],["v-324a3498","/zh/reference/documents/exclusive_features.html",{y:"a",t:"ZLMediakit独家特性介绍"},[":md"]],["v-09d870a4","/zh/reference/documents/high_concurrency_implementation_principle.html",{y:"a",t:"ZLMediaKit高并发实现原理"},[":md"]],["v-175b5aa1","/zh/reference/documents/introduction_to_streaming_media_related_technologies.html",{y:"a",t:"流媒体相关技术介绍"},[":md"]],["v-79587752","/zh/reference/documents/rtsp_push_process.html",{y:"a",t:"RTSP推流流程"},[":md"]],["v-3e321006","/zh/reference/documents/the_nature_of_live_broadcast_delay.html",{y:"a",t:"直播延时的本质"},[":md"]],["v-2eff5d16","/zh/reference/resources/",{y:"a",t:"相关资源",i:"font-awesome"},["/zh/reference/resources/README.md"]],["v-4a544ed0","/zh/reference/resources/dependency.html",{y:"a",t:"代码依赖与版权声明",i:"code"},[":md"]],["v-2321e074","/zh/reference/resources/rtmp_support_for_h265_and_opus.html",{y:"a",t:"RTMP对H265和OPUS的支持"},[":md"]],["v-acba6b18","/zh/reference/resources/video_conferencing_related_resources.html",{y:"a",t:"视频会议相关资源"},[":md"]],["v-164eab05","/zh/reference/resources/zltoolkit_source_code_study_notes.html",{y:"a",t:"ZLToolKit源码学习笔记"},[":md"]],["v-7184a3f1","/zh/reference/test/",{y:"a",t:"测试",i:"vials"},["/zh/reference/test/README.md"]],["v-3d3ac02d","/zh/reference/test/benchmark.html",{y:"a",t:"Benchmark"},[":md"]],["v-e2ac608c","/zh/reference/test/delay_test.html",{y:"a",t:"延时测试"},[":md"]],["v-510ccabf","/zh/reference/test/how_to_test_delay.html",{y:"a",t:"怎么测试ZLMediaKit的延时?"},[":md"]],["v-174062e8","/zh/reference/test/online_test.html",{y:"a",t:"在线测试"},[":md"]],["v-e521bd2e","/zh/reference/test/performance_testing.html",{y:"a",t:"性能测试"},[":md"]],["v-1d29e16c","/zh/reference/test/rtmp_pull_stream_performance_test.html",{y:"a",t:"rtmp 拉流性能测试"},[":md"]],["v-fdd44ad6","/zh/reference/test/rtmp_push_stream_performance_test.html",{y:"a",t:"rtmp 推流性能测试"},[":md"]],["v-aa333cf8","/zh/reference/test/rtsp_pull_stream_performance_test.html",{y:"a",t:"rtsp拉流性能测试"},[":md"]],["v-3a912ccf","/zh/reference/test/rtsp_push_stream_performance_test.html",{y:"a",t:"rtsp推流性能测试"},[":md"]],["v-374e6730","/zh/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html",{y:"a",t:"GB28181 SIP信令抓包"},[":md"]],["v-6e3cc886","/zh/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html",{y:"a",t:"GB28181怎么用设备ID作为流ID"},[":md"]],["v-041958ba","/zh/guide/protocol/gb28181/push_streaming.html",{y:"a",t:"GB28181推流"},[":md"]],["v-71ddfc14","/zh/guide/protocol/srt/",{y:"a",t:"SRT"},["/zh/guide/protocol/srt/README.md"]],["v-5eb5ee22","/zh/guide/protocol/webrtc/webrtc_compilation_and_use.html",{y:"a",t:"webrtc编译与使用"},[":md"]],["v-84db85f8","/zh/guide/protocol/webrtc/webrtc_signaling_interaction_format.html",{y:"a",t:"webrtc信令交互格式"},[":md"]],["v-3706649a","/404.html",{y:"p",t:""},[]],["v-14f73021","/more/",{y:"p",t:"More"},[]],["v-22a2f9fd","/reference/",{y:"p",t:"Reference"},[]],["v-2be85352","/zh/more/",{y:"p",t:"More"},[]],["v-0f8c4891","/guide/protocol/gb28181/",{y:"p",t:"Gb28181"},[]],["v-35ba27b7","/guide/protocol/webrtc/",{y:"p",t:"Webrtc"},[]],["v-70e5a528","/zh/reference/",{y:"p",t:"Reference"},[]],["v-55376182","/zh/guide/protocol/gb28181/",{y:"p",t:"Gb28181"},[]],["v-50bfaca6","/zh/guide/protocol/webrtc/",{y:"p",t:"Webrtc"},[]]];var ha=U({name:"Vuepress",setup(){const e=op();return()=>u(e.value)}}),l_=()=>i_.reduce((e,[t,n,r,o])=>(e.push({name:t,path:n,component:ha,meta:r},{path:n.endsWith("/")?n+"index.html":n.substring(0,n.length-5),redirect:n},...o.map(i=>({path:i===":md"?n.substring(0,n.length-5)+".md":i,redirect:n}))),e),[{name:"404",path:"/:catchAll(.*)",component:ha}]),a_=Rp,s_=()=>{const e=uh({history:a_(Pi("/")),routes:l_(),scrollBehavior:(t,n,r)=>r||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{var r;(t.path!==n.path||n===Lt)&&([t.meta._data]=await Promise.all([At.resolvePageData(t.name),(r=gs[t.name])==null?void 0:r.__asyncLoader()]))}),e},c_=e=>{e.component("ClientOnly",ro),e.component("Content",Ps)},u_=(e,t,n)=>{const r=Yl(()=>t.currentRoute.value.path),o=Yl(()=>At.resolveRouteLocale(vn.value.locales,r.value)),i=ao(r,()=>t.currentRoute.value.meta._data),l=I(()=>At.resolveLayouts(n)),a=I(()=>At.resolveSiteLocaleData(vn.value,o.value)),s=I(()=>At.resolvePageFrontmatter(i.value)),c=I(()=>At.resolvePageHeadTitle(i.value,a.value)),f=I(()=>At.resolvePageHead(c.value,s.value,a.value)),d=I(()=>At.resolvePageLang(i.value,a.value)),p=I(()=>At.resolvePageLayout(i.value,l.value));return e.provide(ep,l),e.provide(bs,i),e.provide(ys,s),e.provide(rp,c),e.provide(Es,f),e.provide(ws,d),e.provide(Ts,p),e.provide(Ii,o),e.provide(Ls,a),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>s.value},$head:{get:()=>f.value},$headTitle:{get:()=>c.value},$lang:{get:()=>d.value},$page:{get:()=>i.value},$routeLocale:{get:()=>o.value},$site:{get:()=>vn.value},$siteLocale:{get:()=>a.value},$withBase:{get:()=>Ve}}),{layouts:l,pageData:i,pageFrontmatter:s,pageHead:f,pageHeadTitle:c,pageLang:d,pageLayout:p,routeLocale:o,siteData:vn,siteLocaleData:a}},f_=()=>{const e=np(),t=Ri(),n=te([]),r=()=>{e.value.forEach(i=>{const l=d_(i);l&&n.value.push(l)})},o=()=>{document.documentElement.lang=t.value,n.value.forEach(i=>{i.parentNode===document.head&&document.head.removeChild(i)}),n.value.splice(0,n.value.length),e.value.forEach(i=>{const l=p_(i);l!==null&&(document.head.appendChild(l),n.value.push(l))})};tn(lp,o),be(()=>{r(),o(),fe(()=>e.value,o)})},d_=([e,t,n=""])=>{const r=Object.entries(t).map(([a,s])=>ue(s)?`[${a}=${JSON.stringify(s)}]`:s===!0?`[${a}]`:"").join(""),o=`head > ${e}${r}`;return Array.from(document.querySelectorAll(o)).find(a=>a.innerText===n)||null},p_=([e,t,n])=>{if(!ue(e))return null;const r=document.createElement(e);return Li(t)&&Object.entries(t).forEach(([o,i])=>{ue(i)?r.setAttribute(o,i):i===!0&&r.setAttribute(o,"")}),ue(n)&&r.appendChild(document.createTextNode(n)),r},h_=jd,v_=async()=>{var n;const e=h_({name:"VuepressApp",setup(){var r;f_();for(const o of Dr)(r=o.setup)==null||r.call(o);return()=>[u($s),...Dr.flatMap(({rootComponents:o=[]})=>o.map(i=>u(i)))]}}),t=s_();c_(e),u_(e,t,Dr);for(const r of Dr)await((n=r.enhance)==null?void 0:n.call(r,{app:e,router:t,siteData:vn}));return e.use(t),{app:e,router:t}};v_().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{h as _,os as a,Ce as b,__ as c,v_ as createVueApp,is as d,g_ as e,m_ as o,nt as r,pf as w}; -function __vite__mapDeps(indexes) { - if (!__vite__mapDeps.viteFileDeps) { - __vite__mapDeps.viteFileDeps = ["assets/index.html-lsbyji4m.js","assets/plugin-vue_export-helper-x3n3nnut.js","assets/index.html-1gY9nmEU.js","assets/collaborative_projects.html-F54TwnSU.js","assets/contact.html-F5mmsRL_.js","assets/license.html-RX6EoCn0.js","assets/thanks.html-uU2jemjd.js","assets/use_cases.html-lHSo0w28.js","assets/index.html-BIyNRXIT.js","assets/vs_code_zh-ltEPcFYF.js","assets/index.html-nYslRDbi.js","assets/index.html-HiksATK8.js","assets/oncetoken.html-0LGtefKi.js","assets/index.html-sVMJ39Ap.js","assets/not_recommended_qq.html-SK9_7gOI.js","assets/rtmp_playback_compatibility_issues.html-h5lBk1EY.js","assets/index.html-AQj9nIQS.js","assets/compilation_instructions_for_windows_version.html-B01AYnQQ.js","assets/install_zlmediakit_using_vcpkg.html-hSrbYLMY.js","assets/install_zlmediakit_using_vcpkg_2-1HFW-yNt.js","assets/start.html-6kI24E98.js","assets/index.html-wOzz5n--.js","assets/config_file.html-nDM3m-gp.js","assets/generate_ssl_self-signed_certificate_and_test.html-KPuMmQeO.js","assets/generate_ssl_self-signed_certificate_and_test-D4Sbj3Ls.js","assets/how_to_enable_https_related_functions.html-VEGoh4jE.js","assets/how_to_enable_https_related_functions_zh_10-dp8gREln.js","assets/on-demand_push_streaming.html-UrbeRghD.js","assets/on-demand_push_streaming_zh-CK4xj1dh.js","assets/on-demand_streaming.html-nFxU5UDk.js","assets/on-demand_streaming_zh-h19pTlmd.js","assets/play_url_rules.html-lTCmvIjW.js","assets/playback_authentication.html-TBCUOtoI.js","assets/playback_authentication_zh-gjAAn9Yd.js","assets/push_authentication.html-w6czo8pV.js","assets/push_authentication_zh-OS4qAsfx.js","assets/push_test.html-MSIBzphj.js","assets/push_test-WgKOKRFc.js","assets/restful_api.html-pwLlZzjg.js","assets/sequence_diagram.html-9KpjQs_B.js","assets/start_server.html-EcCCtjYj.js","assets/start_server_3-RVnx99XR.js","assets/web_hook_api.html-DDD36REX.js","assets/index.html-H5ajPWzC.js","assets/index.html-wRo-8kqz.js","assets/how_to_create_a_live_steam.html-xouuZa47.js","assets/how_to_create_a_live_stream-3lt6j2fI.js","assets/index.html-MCTXxKe2.js","assets/hls_high_performance_journey.html-sIjCrFa8.js","assets/rtsp_performance_optimization.html-Fk8ai5fo.js","assets/index.html-mmNwkX1L.js","assets/exclusive_features.html-q7ecjqC1.js","assets/high_concurrency_implementation_principle.html-Bqhl-32O.js","assets/introduction_to_streaming_media_related_technologies.html-I9N-fJX2.js","assets/rtsp_push_process.html-Xg9db3f1.js","assets/the_nature_of_live_broadcast_delay.html-KHnxiXxs.js","assets/index.html-HffK__w0.js","assets/dependency.html-bJgf-XNv.js","assets/rtmp_support_for_h265_and_opus.html-KlA1IkKx.js","assets/video_conferencing_related_resources.html-AS8_6dZk.js","assets/zltoolkit_source_code_study_notes.html-rBGfF-Ka.js","assets/index.html-wqut89jq.js","assets/benchmark.html-98ulTadG.js","assets/delay_test.html-0tF1gV92.js","assets/how_to_test_delay.html-qIkqT7X0.js","assets/online_test.html-B0vGk4Ng.js","assets/performance_testing.html-LDuN76e5.js","assets/rtmp_pull_stream_performance_test.html-biPYYmB-.js","assets/rtmp_push_stream_performance_test.html-9WCFfRY7.js","assets/rtsp_pull_stream_performance_test.html-_t28Fr8s.js","assets/rtsp_push_stream_performance_test.html-y53Byttn.js","assets/index.html-puiRG_tj.js","assets/collaborative_projects.html-pOhMHRMF.js","assets/contact.html-inPGOeaD.js","assets/license.html-UJLTmREW.js","assets/thanks.html-F1DFxuQI.js","assets/use_cases.html-NGOdBBIO.js","assets/index.html-EkebsPUs.js","assets/gb28181_sip_signaling_packet_capture.html-P96Mkrz9.js","assets/how_to_use_device_id_as_stream_id.html-yEpxw4_B.js","assets/how_to_use_device_id_as_stream_id_6-sfQ1h9Fe.js","assets/push_streaming.html-5CuTTppH.js","assets/gb28181_push_streaming_4-qWTnfswt.js","assets/index.html-QZwQ-TVg.js","assets/webrtc_compilation_and_use.html-3Wgq1AT7.js","assets/webrtc_signaling_interaction_format.html-z1sc5Nd0.js","assets/index.html-qTt3LMQa.js","assets/oncetoken.html-MCJaY58Y.js","assets/index.html-q-mTP89g.js","assets/not_recommended_qq.html-_--W0-VY.js","assets/rtmp_playback_compatibility_issues.html-CmMs82Q4.js","assets/index.html-NvUp90i0.js","assets/compilation_instructions_for_windows_version.html-qtHU9-nX.js","assets/install_zlmediakit_using_vcpkg.html-RuAB6C5H.js","assets/start.html-uDyezAWa.js","assets/index.html-c9Q-kbo9.js","assets/config_file.html-sJf41F3S.js","assets/generate_ssl_self-signed_certificate_and_test.html-XP7q2oT5.js","assets/how_to_enable_https_related_functions.html-mTX-D-oH.js","assets/on-demand_push_streaming.html-YM_cjoRG.js","assets/on-demand_streaming.html-iLkNMoAM.js","assets/play_url_rules.html-k15nwlze.js","assets/playback_authentication.html-GpyuaGt9.js","assets/push_authentication.html-OUbzb3iO.js","assets/push_test.html-HAP8YKRj.js","assets/restful_api.html-0EdVK-2T.js","assets/sequence_diagram.html-mA7gwutk.js","assets/start_server.html-eoFuSTqV.js","assets/web_hook_api.html-I46LUNuG.js","assets/index.html-GYAMrXS-.js","assets/index.html-pPTmba-N.js","assets/how_to_create_a_live_steam.html-ekbfwpTl.js","assets/index.html-y8X0hE31.js","assets/hls_high_performance_journey.html-ePp6ZcY7.js","assets/rtsp_performance_optimization.html-bYm4ov8K.js","assets/index.html-l07G40eV.js","assets/exclusive_features.html-mvtkr6Zx.js","assets/high_concurrency_implementation_principle.html--R-GXKUV.js","assets/introduction_to_streaming_media_related_technologies.html-9hb3DfJc.js","assets/rtsp_push_process.html-u1dV3DYT.js","assets/the_nature_of_live_broadcast_delay.html-vfCX1bgp.js","assets/index.html-w2bXuDTO.js","assets/dependency.html-mty2X7tk.js","assets/rtmp_support_for_h265_and_opus.html-uBU2hKvT.js","assets/video_conferencing_related_resources.html-SX4i-tyB.js","assets/zltoolkit_source_code_study_notes.html-ElJi0L0Z.js","assets/index.html-Q_J0RuMe.js","assets/benchmark.html-Nx9hqFos.js","assets/delay_test.html-ZDGSxDiR.js","assets/how_to_test_delay.html-xmNWiPYK.js","assets/online_test.html-kfBFI_bL.js","assets/performance_testing.html-D5lG5UBD.js","assets/rtmp_pull_stream_performance_test.html-ANpGb4zw.js","assets/rtmp_push_stream_performance_test.html-eR62v-Vt.js","assets/rtsp_pull_stream_performance_test.html-1iKNM4Ty.js","assets/rtsp_push_stream_performance_test.html-iJ5a3bwy.js","assets/gb28181_sip_signaling_packet_capture.html--EqBn8MM.js","assets/how_to_use_device_id_as_stream_id.html-a05nZW8g.js","assets/push_streaming.html-k2pojRSs.js","assets/index.html-jQOvySfo.js","assets/webrtc_compilation_and_use.html-FCI8zWK-.js","assets/webrtc_signaling_interaction_format.html-tkZpC3_1.js","assets/404.html-xdICDk2y.js","assets/index.html-HxIzy8B_.js","assets/index.html-c5y0hsti.js","assets/index.html-AN1YzPhl.js","assets/index.html-P9T-kKXm.js","assets/index.html-sZlBS23H.js","assets/index.html-GpIlvQXn.js","assets/index.html-_oz2t3vB.js","assets/index.html-gHhFwdGj.js"] - } - return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) -} \ No newline at end of file diff --git a/assets/app-oTlYPy8h.js b/assets/app-oTlYPy8h.js new file mode 100644 index 0000000..2fa0bfe --- /dev/null +++ b/assets/app-oTlYPy8h.js @@ -0,0 +1,14 @@ +function ri(e,t){const n=Object.create(null),r=e.split(",");for(let o=0;o!!n[o.toLowerCase()]:o=>!!n[o]}const Ee={},gn=[],bt=()=>{},vu=()=>!1,ur=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),oi=e=>e.startsWith("onUpdate:"),xe=Object.assign,ii=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},mu=Object.prototype.hasOwnProperty,ce=(e,t)=>mu.call(e,t),X=Array.isArray,Kn=e=>Gr(e)==="[object Map]",_u=e=>Gr(e)==="[object Set]",oe=e=>typeof e=="function",ue=e=>typeof e=="string",Kr=e=>typeof e=="symbol",Te=e=>e!==null&&typeof e=="object",ml=e=>(Te(e)||oe(e))&&oe(e.then)&&oe(e.catch),gu=Object.prototype.toString,Gr=e=>gu.call(e),bu=e=>Gr(e).slice(8,-1),yu=e=>Gr(e)==="[object Object]",ai=e=>ue(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Gn=ri(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Yr=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Eu=/-(\w)/g,ot=Yr(e=>e.replace(Eu,(t,n)=>n?n.toUpperCase():"")),wu=/\B([A-Z])/g,Cn=Yr(e=>e.replace(wu,"-$1").toLowerCase()),fr=Yr(e=>e.charAt(0).toUpperCase()+e.slice(1)),uo=Yr(e=>e?`on${fr(e)}`:""),rn=(e,t)=>!Object.is(e,t),fo=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Tu=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Au=e=>{const t=ue(e)?Number(e):NaN;return isNaN(t)?e:t};let qi;const So=()=>qi||(qi=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function li(e){if(X(e)){const t={};for(let n=0;n{if(n){const r=n.split(Pu);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function si(e){let t="";if(ue(e))t=e;else if(X(e))for(let n=0;n{const t=new Set(e);return t.w=0,t.n=0,t},bl=e=>(e.w&Wt)>0,yl=e=>(e.n&Wt)>0,Su=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r{(u==="length"||!Kr(u)&&u>=s)&&l.push(c)})}else switch(n!==void 0&&l.push(a.get(n)),t){case"add":X(e)?ai(n)&&l.push(a.get("length")):(l.push(a.get(Xt)),Kn(e)&&l.push(a.get(Mo)));break;case"delete":X(e)||(l.push(a.get(Xt)),Kn(e)&&l.push(a.get(Mo)));break;case"set":Kn(e)&&l.push(a.get(Xt));break}if(l.length===1)l[0]&&$o(l[0]);else{const s=[];for(const c of l)c&&s.push(...c);$o(ci(s))}}function $o(e,t){const n=X(e)?e:[...e];for(const r of n)r.computed&&Ki(r);for(const r of n)r.computed||Ki(r)}function Ki(e,t){(e!==ut||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}function Mu(e,t){var n;return(n=Mr.get(e))==null?void 0:n.get(t)}const $u=ri("__proto__,__v_isRef,__isVue"),Tl=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Kr)),Gi=Nu();function Nu(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=ae(this);for(let i=0,a=this.length;i{e[t]=function(...n){Dn();const r=ae(this)[t].apply(this,n);return Sn(),r}}),e}function zu(e){const t=ae(this);return He(t,"has",e),t.hasOwnProperty(e)}class Al{constructor(t=!1,n=!1){this._isReadonly=t,this._shallow=n}get(t,n,r){const o=this._isReadonly,i=this._shallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return i;if(n==="__v_raw"&&r===(o?i?Ju:Il:i?Rl:Pl).get(t))return t;const a=X(t);if(!o){if(a&&ce(Gi,n))return Reflect.get(Gi,n,r);if(n==="hasOwnProperty")return zu}const l=Reflect.get(t,n,r);return(Kr(n)?Tl.has(n):$u(n))||(o||He(t,"get",n),i)?l:Ce(l)?a&&ai(n)?l:l.value:Te(l)?o?on(l):dr(l):l}}class Ll extends Al{constructor(t=!1){super(!1,t)}set(t,n,r,o){let i=t[n];if(Tn(i)&&Ce(i)&&!Ce(r))return!1;if(!this._shallow&&(!$r(r)&&!Tn(r)&&(i=ae(i),r=ae(r)),!X(t)&&Ce(i)&&!Ce(r)))return i.value=r,!0;const a=X(t)&&ai(n)?Number(n)e,Zr=e=>Reflect.getPrototypeOf(e);function yr(e,t,n=!1,r=!1){e=e.__v_raw;const o=ae(e),i=ae(t);n||(rn(t,i)&&He(o,"get",t),He(o,"get",i));const{has:a}=Zr(o),l=r?fi:n?hi:nr;if(a.call(o,t))return l(e.get(t));if(a.call(o,i))return l(e.get(i));e!==o&&e.get(t)}function Er(e,t=!1){const n=this.__v_raw,r=ae(n),o=ae(e);return t||(rn(e,o)&&He(r,"has",e),He(r,"has",o)),e===o?n.has(e):n.has(e)||n.has(o)}function wr(e,t=!1){return e=e.__v_raw,!t&&He(ae(e),"iterate",Xt),Reflect.get(e,"size",e)}function Yi(e){e=ae(e);const t=ae(this);return Zr(t).has.call(t,e)||(t.add(e),It(t,"add",e,e)),this}function Zi(e,t){t=ae(t);const n=ae(this),{has:r,get:o}=Zr(n);let i=r.call(n,e);i||(e=ae(e),i=r.call(n,e));const a=o.call(n,e);return n.set(e,t),i?rn(t,a)&&It(n,"set",e,t):It(n,"add",e,t),this}function Qi(e){const t=ae(this),{has:n,get:r}=Zr(t);let o=n.call(t,e);o||(e=ae(e),o=n.call(t,e)),r&&r.call(t,e);const i=t.delete(e);return o&&It(t,"delete",e,void 0),i}function Ji(){const e=ae(this),t=e.size!==0,n=e.clear();return t&&It(e,"clear",void 0,void 0),n}function Tr(e,t){return function(r,o){const i=this,a=i.__v_raw,l=ae(a),s=t?fi:e?hi:nr;return!e&&He(l,"iterate",Xt),a.forEach((c,u)=>r.call(o,s(c),s(u),i))}}function Ar(e,t,n){return function(...r){const o=this.__v_raw,i=ae(o),a=Kn(i),l=e==="entries"||e===Symbol.iterator&&a,s=e==="keys"&&a,c=o[e](...r),u=n?fi:t?hi:nr;return!t&&He(i,"iterate",s?Mo:Xt),{next(){const{value:d,done:p}=c.next();return p?{value:d,done:p}:{value:l?[u(d[0]),u(d[1])]:u(d),done:p}},[Symbol.iterator](){return this}}}}function St(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Wu(){const e={get(i){return yr(this,i)},get size(){return wr(this)},has:Er,add:Yi,set:Zi,delete:Qi,clear:Ji,forEach:Tr(!1,!1)},t={get(i){return yr(this,i,!1,!0)},get size(){return wr(this)},has:Er,add:Yi,set:Zi,delete:Qi,clear:Ji,forEach:Tr(!1,!0)},n={get(i){return yr(this,i,!0)},get size(){return wr(this,!0)},has(i){return Er.call(this,i,!0)},add:St("add"),set:St("set"),delete:St("delete"),clear:St("clear"),forEach:Tr(!0,!1)},r={get(i){return yr(this,i,!0,!0)},get size(){return wr(this,!0)},has(i){return Er.call(this,i,!0)},add:St("add"),set:St("set"),delete:St("delete"),clear:St("clear"),forEach:Tr(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=Ar(i,!1,!1),n[i]=Ar(i,!0,!1),t[i]=Ar(i,!1,!0),r[i]=Ar(i,!0,!0)}),[e,n,t,r]}const[qu,Uu,Ku,Gu]=Wu();function di(e,t){const n=t?e?Gu:Ku:e?Uu:qu;return(r,o,i)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?r:Reflect.get(ce(n,o)&&o in r?n:r,o,i)}const Yu={get:di(!1,!1)},Zu={get:di(!1,!0)},Qu={get:di(!0,!1)},Pl=new WeakMap,Rl=new WeakMap,Il=new WeakMap,Ju=new WeakMap;function Xu(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ef(e){return e.__v_skip||!Object.isExtensible(e)?0:Xu(bu(e))}function dr(e){return Tn(e)?e:pi(e,!1,Fu,Yu,Pl)}function Ol(e){return pi(e,!1,ju,Zu,Rl)}function on(e){return pi(e,!0,Hu,Qu,Il)}function pi(e,t,n,r,o){if(!Te(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=o.get(e);if(i)return i;const a=ef(e);if(a===0)return e;const l=new Proxy(e,a===2?r:n);return o.set(e,l),l}function bn(e){return Tn(e)?bn(e.__v_raw):!!(e&&e.__v_isReactive)}function Tn(e){return!!(e&&e.__v_isReadonly)}function $r(e){return!!(e&&e.__v_isShallow)}function xl(e){return bn(e)||Tn(e)}function ae(e){const t=e&&e.__v_raw;return t?ae(t):e}function kl(e){return Vr(e,"__v_skip",!0),e}const nr=e=>Te(e)?dr(e):e,hi=e=>Te(e)?on(e):e;function vi(e){Ht&&ut&&(e=ae(e),wl(e.dep||(e.dep=ci())))}function mi(e,t){e=ae(e);const n=e.dep;n&&$o(n)}function Ce(e){return!!(e&&e.__v_isRef===!0)}function ee(e){return Cl(e,!1)}function it(e){return Cl(e,!0)}function Cl(e,t){return Ce(e)?e:new tf(e,t)}class tf{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:ae(t),this._value=n?t:nr(t)}get value(){return vi(this),this._value}set value(t){const n=this.__v_isShallow||$r(t)||Tn(t);t=n?t:ae(t),rn(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:nr(t),mi(this))}}function en(e){return Ce(e)?e.value:e}const nf={get:(e,t,n)=>en(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return Ce(o)&&!Ce(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function Dl(e){return bn(e)?e:new Proxy(e,nf)}class rf{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>vi(this),()=>mi(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function Sl(e){return new rf(e)}class of{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Mu(ae(this._object),this._key)}}class af{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function Qr(e,t,n){return Ce(e)?e:oe(e)?new af(e):Te(e)&&arguments.length>1?lf(e,t,n):ee(e)}function lf(e,t,n){const r=e[t];return Ce(r)?r:new of(e,t,n)}class sf{constructor(t,n,r,o){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new ui(t,()=>{this._dirty||(this._dirty=!0,mi(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=r}get value(){const t=ae(this);return vi(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function cf(e,t,n=!1){let r,o;const i=oe(e);return i?(r=e,o=bt):(r=e.get,o=e.set),new sf(r,o,i||!o,n)}function jt(e,t,n,r){let o;try{o=r?e(...r):e()}catch(i){pr(i,t,n)}return o}function tt(e,t,n,r){if(oe(e)){const i=jt(e,t,n,r);return i&&ml(i)&&i.catch(a=>{pr(a,t,n)}),i}const o=[];for(let i=0;i>>1,o=Se[r],i=or(o);i_t&&Se.splice(t,1)}function pf(e){X(e)?yn.push(...e):(!Pt||!Pt.includes(e,e.allowRecurse?Yt+1:Yt))&&yn.push(e),Ml()}function Xi(e,t=rr?_t+1:0){for(;tor(n)-or(r)),Yt=0;Yte.id==null?1/0:e.id,hf=(e,t)=>{const n=or(e)-or(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function $l(e){No=!1,rr=!0,Se.sort(hf);try{for(_t=0;_tue(m)?m.trim():m)),d&&(o=n.map(Tu))}let l,s=r[l=uo(t)]||r[l=uo(ot(t))];!s&&i&&(s=r[l=uo(Cn(t))]),s&&tt(s,e,6,o);const c=r[l+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,tt(c,e,6,o)}}function Nl(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(o!==void 0)return o;const i=e.emits;let a={},l=!1;if(!oe(e)){const s=c=>{const u=Nl(c,t,!0);u&&(l=!0,xe(a,u))};!n&&t.mixins.length&&t.mixins.forEach(s),e.extends&&s(e.extends),e.mixins&&e.mixins.forEach(s)}return!i&&!l?(Te(e)&&r.set(e,null),null):(X(i)?i.forEach(s=>a[s]=null):xe(a,i),Te(e)&&r.set(e,a),a)}function Xr(e,t){return!e||!ur(t)?!1:(t=t.slice(2).replace(/Once$/,""),ce(e,t[0].toLowerCase()+t.slice(1))||ce(e,Cn(t))||ce(e,t))}let Xe=null,zl=null;function zr(e){const t=Xe;return Xe=e,zl=e&&e.type.__scopeId||null,t}function mf(e,t=Xe,n){if(!t||e._n)return e;const r=(...o)=>{r._d&&fa(-1);const i=zr(t);let a;try{a=e(...o)}finally{zr(i),r._d&&fa(1)}return a};return r._n=!0,r._c=!0,r._d=!0,r}function po(e){const{type:t,vnode:n,proxy:r,withProxy:o,props:i,propsOptions:[a],slots:l,attrs:s,emit:c,render:u,renderCache:d,data:p,setupState:m,ctx:g,inheritAttrs:w}=e;let T,y;const P=zr(e);try{if(n.shapeFlag&4){const A=o||r,M=A;T=ct(u.call(M,A,d,i,m,p,g)),y=s}else{const A=t;T=ct(A.length>1?A(i,{attrs:s,slots:l,emit:c}):A(i,null)),y=t.props?s:_f(s)}}catch(A){Jn.length=0,pr(A,e,1),T=Le(rt)}let b=T;if(y&&w!==!1){const A=Object.keys(y),{shapeFlag:M}=b;A.length&&M&7&&(a&&A.some(oi)&&(y=gf(y,a)),b=qt(b,y))}return n.dirs&&(b=qt(b),b.dirs=b.dirs?b.dirs.concat(n.dirs):n.dirs),n.transition&&(b.transition=n.transition),T=b,zr(P),T}const _f=e=>{let t;for(const n in e)(n==="class"||n==="style"||ur(n))&&((t||(t={}))[n]=e[n]);return t},gf=(e,t)=>{const n={};for(const r in e)(!oi(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function bf(e,t,n){const{props:r,children:o,component:i}=e,{props:a,children:l,patchFlag:s}=t,c=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&s>=0){if(s&1024)return!0;if(s&16)return r?ea(r,a,c):!!a;if(s&8){const u=t.dynamicProps;for(let d=0;de.__isSuspense;function Fl(e,t){t&&t.pendingBranch?X(e)?t.effects.push(...e):t.effects.push(e):pf(e)}function Hl(e,t){return gi(e,null,t)}const Lr={};function fe(e,t,n){return gi(e,t,n)}function gi(e,t,{immediate:n,deep:r,flush:o,onTrack:i,onTrigger:a}=Ee){var l;const s=gl()===((l=ke)==null?void 0:l.scope)?ke:null;let c,u=!1,d=!1;if(Ce(e)?(c=()=>e.value,u=$r(e)):bn(e)?(c=()=>e,r=!0):X(e)?(d=!0,u=e.some(A=>bn(A)||$r(A)),c=()=>e.map(A=>{if(Ce(A))return A.value;if(bn(A))return hn(A);if(oe(A))return jt(A,s,2)})):oe(e)?t?c=()=>jt(e,s,2):c=()=>{if(!(s&&s.isUnmounted))return p&&p(),tt(e,s,3,[m])}:c=bt,t&&r){const A=c;c=()=>hn(A())}let p,m=A=>{p=P.onStop=()=>{jt(A,s,4),p=P.onStop=void 0}},g;if(Pn)if(m=bt,t?n&&tt(t,s,3,[c(),d?[]:void 0,m]):c(),o==="sync"){const A=md();g=A.__watcherHandles||(A.__watcherHandles=[])}else return bt;let w=d?new Array(e.length).fill(Lr):Lr;const T=()=>{if(P.active)if(t){const A=P.run();(r||u||(d?A.some((M,k)=>rn(M,w[k])):rn(A,w)))&&(p&&p(),tt(t,s,3,[A,w===Lr?void 0:d&&w[0]===Lr?[]:w,m]),w=A)}else P.run()};T.allowRecurse=!!t;let y;o==="sync"?y=T:o==="post"?y=()=>Be(T,s&&s.suspense):(T.pre=!0,s&&(T.id=s.uid),y=()=>Jr(T));const P=new ui(c,y);t?n?T():w=P.run():o==="post"?Be(P.run.bind(P),s&&s.suspense):P.run();const b=()=>{P.stop(),s&&s.scope&&ii(s.scope.effects,P)};return g&&g.push(b),b}function Af(e,t,n){const r=this.proxy,o=ue(e)?e.includes(".")?jl(r,e):()=>r[e]:e.bind(r,r);let i;oe(t)?i=t:(i=t.handler,n=t);const a=ke;Ln(this);const l=gi(o,i.bind(r),n);return a?Ln(a):nn(),l}function jl(e,t){const n=t.split(".");return()=>{let r=e;for(let o=0;o{hn(n,t)});else if(yu(e))for(const n in e)hn(e[n],t);return e}function mt(e,t,n,r){const o=e.dirs,i=t&&t.dirs;for(let a=0;a{e.isMounted=!0}),yi(()=>{e.isUnmounting=!0}),e}const Ze=[Function,Array],ql={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ze,onEnter:Ze,onAfterEnter:Ze,onEnterCancelled:Ze,onBeforeLeave:Ze,onLeave:Ze,onAfterLeave:Ze,onLeaveCancelled:Ze,onBeforeAppear:Ze,onAppear:Ze,onAfterAppear:Ze,onAppearCancelled:Ze},Lf={name:"BaseTransition",props:ql,setup(e,{slots:t}){const n=Vn(),r=Wl();let o;return()=>{const i=t.default&&bi(t.default(),!0);if(!i||!i.length)return;let a=i[0];if(i.length>1){for(const w of i)if(w.type!==rt){a=w;break}}const l=ae(e),{mode:s}=l;if(r.isLeaving)return ho(a);const c=na(a);if(!c)return ho(a);const u=ir(c,l,r,n);ar(c,u);const d=n.subTree,p=d&&na(d);let m=!1;const{getTransitionKey:g}=c.type;if(g){const w=g();o===void 0?o=w:w!==o&&(o=w,m=!0)}if(p&&p.type!==rt&&(!Zt(c,p)||m)){const w=ir(p,l,r,n);if(ar(p,w),s==="out-in")return r.isLeaving=!0,w.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&n.update()},ho(a);s==="in-out"&&c.type!==rt&&(w.delayLeave=(T,y,P)=>{const b=Ul(r,p);b[String(p.key)]=p,T[zt]=()=>{y(),T[zt]=void 0,delete u.delayedLeave},u.delayedLeave=P})}return a}}},Pf=Lf;function Ul(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function ir(e,t,n,r){const{appear:o,mode:i,persisted:a=!1,onBeforeEnter:l,onEnter:s,onAfterEnter:c,onEnterCancelled:u,onBeforeLeave:d,onLeave:p,onAfterLeave:m,onLeaveCancelled:g,onBeforeAppear:w,onAppear:T,onAfterAppear:y,onAppearCancelled:P}=t,b=String(e.key),A=Ul(n,e),M=(V,S)=>{V&&tt(V,r,9,S)},k=(V,S)=>{const B=S[1];M(V,S),X(V)?V.every(Z=>Z.length<=1)&&B():V.length<=1&&B()},N={mode:i,persisted:a,beforeEnter(V){let S=l;if(!n.isMounted)if(o)S=w||l;else return;V[zt]&&V[zt](!0);const B=A[b];B&&Zt(e,B)&&B.el[zt]&&B.el[zt](),M(S,[V])},enter(V){let S=s,B=c,Z=u;if(!n.isMounted)if(o)S=T||s,B=y||c,Z=P||u;else return;let H=!1;const te=V[Pr]=we=>{H||(H=!0,we?M(Z,[V]):M(B,[V]),N.delayedLeave&&N.delayedLeave(),V[Pr]=void 0)};S?k(S,[V,te]):te()},leave(V,S){const B=String(e.key);if(V[Pr]&&V[Pr](!0),n.isUnmounting)return S();M(d,[V]);let Z=!1;const H=V[zt]=te=>{Z||(Z=!0,S(),te?M(g,[V]):M(m,[V]),V[zt]=void 0,A[B]===e&&delete A[B])};A[B]=e,p?k(p,[V,H]):H()},clone(V){return ir(V,t,n,r)}};return N}function ho(e){if(hr(e))return e=qt(e),e.children=null,e}function na(e){return hr(e)?e.children?e.children[0]:void 0:e}function ar(e,t){e.shapeFlag&6&&e.component?ar(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function bi(e,t=!1,n){let r=[],o=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function L(e){oe(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,timeout:i,suspensible:a=!0,onError:l}=e;let s=null,c,u=0;const d=()=>(u++,s=null,p()),p=()=>{let m;return s||(m=s=t().catch(g=>{if(g=g instanceof Error?g:new Error(String(g)),l)return new Promise((w,T)=>{l(g,()=>w(d()),()=>T(g),u+1)});throw g}).then(g=>m!==s&&s?s:(g&&(g.__esModule||g[Symbol.toStringTag]==="Module")&&(g=g.default),c=g,g)))};return U({name:"AsyncComponentWrapper",__asyncLoader:p,get __asyncResolved(){return c},setup(){const m=ke;if(c)return()=>vo(c,m);const g=P=>{s=null,pr(P,m,13,!r)};if(a&&m.suspense||Pn)return p().then(P=>()=>vo(P,m)).catch(P=>(g(P),()=>r?Le(r,{error:P}):null));const w=ee(!1),T=ee(),y=ee(!!o);return o&&setTimeout(()=>{y.value=!1},o),i!=null&&setTimeout(()=>{if(!w.value&&!T.value){const P=new Error(`Async component timed out after ${i}ms.`);g(P),T.value=P}},i),p().then(()=>{w.value=!0,m.parent&&hr(m.parent.vnode)&&Jr(m.parent.update)}).catch(P=>{g(P),T.value=P}),()=>{if(w.value&&c)return vo(c,m);if(T.value&&r)return Le(r,{error:T.value});if(n&&!y.value)return Le(n)}}})}function vo(e,t){const{ref:n,props:r,children:o,ce:i}=t.vnode,a=Le(e,r,o);return a.ref=n,a.ce=i,delete t.vnode.ce,a}const hr=e=>e.type.__isKeepAlive;function Rf(e,t){Kl(e,"a",t)}function If(e,t){Kl(e,"da",t)}function Kl(e,t,n=ke){const r=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(eo(t,r,n),n){let o=n.parent;for(;o&&o.parent;)hr(o.parent.vnode)&&Of(r,t,n,o),o=o.parent}}function Of(e,t,n,r){const o=eo(t,e,r,!0);vr(()=>{ii(r[t],o)},n)}function eo(e,t,n=ke,r=!1){if(n){const o=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...a)=>{if(n.isUnmounted)return;Dn(),Ln(n);const l=tt(t,n,e,a);return nn(),Sn(),l});return r?o.unshift(i):o.push(i),i}}const Dt=e=>(t,n=ke)=>(!Pn||e==="sp")&&eo(e,(...r)=>t(...r),n),xf=Dt("bm"),ge=Dt("m"),kf=Dt("bu"),Gl=Dt("u"),yi=Dt("bum"),vr=Dt("um"),Cf=Dt("sp"),Df=Dt("rtg"),Sf=Dt("rtc");function Vf(e,t=ke){eo("ec",e,t)}const zo=e=>e?ss(e)?Li(e)||e.proxy:zo(e.parent):null,Zn=xe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>zo(e.parent),$root:e=>zo(e.root),$emit:e=>e.emit,$options:e=>Ei(e),$forceUpdate:e=>e.f||(e.f=()=>Jr(e.update)),$nextTick:e=>e.n||(e.n=an.bind(e.proxy)),$watch:e=>Af.bind(e)}),mo=(e,t)=>e!==Ee&&!e.__isScriptSetup&&ce(e,t),Mf={get({_:e},t){const{ctx:n,setupState:r,data:o,props:i,accessCache:a,type:l,appContext:s}=e;let c;if(t[0]!=="$"){const m=a[t];if(m!==void 0)switch(m){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return i[t]}else{if(mo(r,t))return a[t]=1,r[t];if(o!==Ee&&ce(o,t))return a[t]=2,o[t];if((c=e.propsOptions[0])&&ce(c,t))return a[t]=3,i[t];if(n!==Ee&&ce(n,t))return a[t]=4,n[t];Bo&&(a[t]=0)}}const u=Zn[t];let d,p;if(u)return t==="$attrs"&&He(e,"get",t),u(e);if((d=l.__cssModules)&&(d=d[t]))return d;if(n!==Ee&&ce(n,t))return a[t]=4,n[t];if(p=s.config.globalProperties,ce(p,t))return p[t]},set({_:e},t,n){const{data:r,setupState:o,ctx:i}=e;return mo(o,t)?(o[t]=n,!0):r!==Ee&&ce(r,t)?(r[t]=n,!0):ce(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:i}},a){let l;return!!n[a]||e!==Ee&&ce(e,a)||mo(t,a)||(l=i[0])&&ce(l,a)||ce(r,a)||ce(Zn,a)||ce(o.config.globalProperties,a)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ce(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function ra(e){return X(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Bo=!0;function $f(e){const t=Ei(e),n=e.proxy,r=e.ctx;Bo=!1,t.beforeCreate&&oa(t.beforeCreate,e,"bc");const{data:o,computed:i,methods:a,watch:l,provide:s,inject:c,created:u,beforeMount:d,mounted:p,beforeUpdate:m,updated:g,activated:w,deactivated:T,beforeDestroy:y,beforeUnmount:P,destroyed:b,unmounted:A,render:M,renderTracked:k,renderTriggered:N,errorCaptured:V,serverPrefetch:S,expose:B,inheritAttrs:Z,components:H,directives:te,filters:we}=t;if(c&&Nf(c,r,null),a)for(const ne in a){const K=a[ne];oe(K)&&(r[ne]=K.bind(n))}if(o){const ne=o.call(n,n);Te(ne)&&(e.data=dr(ne))}if(Bo=!0,i)for(const ne in i){const K=i[ne],Re=oe(K)?K.bind(n,n):oe(K.get)?K.get.bind(n,n):bt,pt=!oe(K)&&oe(K.set)?K.set.bind(n):bt,Ye=I({get:Re,set:pt});Object.defineProperty(r,ne,{enumerable:!0,configurable:!0,get:()=>Ye.value,set:De=>Ye.value=De})}if(l)for(const ne in l)Yl(l[ne],r,n,ne);if(s){const ne=oe(s)?s.call(n):s;Reflect.ownKeys(ne).forEach(K=>{tn(K,ne[K])})}u&&oa(u,e,"c");function q(ne,K){X(K)?K.forEach(Re=>ne(Re.bind(n))):K&&ne(K.bind(n))}if(q(xf,d),q(ge,p),q(kf,m),q(Gl,g),q(Rf,w),q(If,T),q(Vf,V),q(Sf,k),q(Df,N),q(yi,P),q(vr,A),q(Cf,S),X(B))if(B.length){const ne=e.exposed||(e.exposed={});B.forEach(K=>{Object.defineProperty(ne,K,{get:()=>n[K],set:Re=>n[K]=Re})})}else e.exposed||(e.exposed={});M&&e.render===bt&&(e.render=M),Z!=null&&(e.inheritAttrs=Z),H&&(e.components=H),te&&(e.directives=te)}function Nf(e,t,n=bt){X(e)&&(e=Fo(e));for(const r in e){const o=e[r];let i;Te(o)?"default"in o?i=_e(o.from||r,o.default,!0):i=_e(o.from||r):i=_e(o),Ce(i)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:a=>i.value=a}):t[r]=i}}function oa(e,t,n){tt(X(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Yl(e,t,n,r){const o=r.includes(".")?jl(n,r):()=>n[r];if(ue(e)){const i=t[e];oe(i)&&fe(o,i)}else if(oe(e))fe(o,e.bind(n));else if(Te(e))if(X(e))e.forEach(i=>Yl(i,t,n,r));else{const i=oe(e.handler)?e.handler.bind(n):t[e.handler];oe(i)&&fe(o,i,e)}}function Ei(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:i,config:{optionMergeStrategies:a}}=e.appContext,l=i.get(t);let s;return l?s=l:!o.length&&!n&&!r?s=t:(s={},o.length&&o.forEach(c=>Br(s,c,a,!0)),Br(s,t,a)),Te(t)&&i.set(t,s),s}function Br(e,t,n,r=!1){const{mixins:o,extends:i}=t;i&&Br(e,i,n,!0),o&&o.forEach(a=>Br(e,a,n,!0));for(const a in t)if(!(r&&a==="expose")){const l=zf[a]||n&&n[a];e[a]=l?l(e[a],t[a]):t[a]}return e}const zf={data:ia,props:aa,emits:aa,methods:Un,computed:Un,beforeCreate:$e,created:$e,beforeMount:$e,mounted:$e,beforeUpdate:$e,updated:$e,beforeDestroy:$e,beforeUnmount:$e,destroyed:$e,unmounted:$e,activated:$e,deactivated:$e,errorCaptured:$e,serverPrefetch:$e,components:Un,directives:Un,watch:Ff,provide:ia,inject:Bf};function ia(e,t){return t?e?function(){return xe(oe(e)?e.call(this,this):e,oe(t)?t.call(this,this):t)}:t:e}function Bf(e,t){return Un(Fo(e),Fo(t))}function Fo(e){if(X(e)){const t={};for(let n=0;n1)return n&&oe(t)?t.call(r&&r.proxy):t}}function Wf(e,t,n,r=!1){const o={},i={};Vr(i,to,1),e.propsDefaults=Object.create(null),Ql(e,t,o,i);for(const a in e.propsOptions[0])a in o||(o[a]=void 0);n?e.props=r?o:Ol(o):e.type.props?e.props=o:e.props=i,e.attrs=i}function qf(e,t,n,r){const{props:o,attrs:i,vnode:{patchFlag:a}}=e,l=ae(o),[s]=e.propsOptions;let c=!1;if((r||a>0)&&!(a&16)){if(a&8){const u=e.vnode.dynamicProps;for(let d=0;d{s=!0;const[p,m]=Jl(d,t,!0);xe(a,p),m&&l.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!i&&!s)return Te(e)&&r.set(e,gn),gn;if(X(i))for(let u=0;u-1,m[1]=w<0||g-1||ce(m,"default"))&&l.push(d)}}}const c=[a,l];return Te(e)&&r.set(e,c),c}function la(e){return e[0]!=="$"}function sa(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function ca(e,t){return sa(e)===sa(t)}function ua(e,t){return X(t)?t.findIndex(n=>ca(n,e)):oe(t)&&ca(t,e)?0:-1}const Xl=e=>e[0]==="_"||e==="$stable",wi=e=>X(e)?e.map(ct):[ct(e)],Uf=(e,t,n)=>{if(t._n)return t;const r=mf((...o)=>wi(t(...o)),n);return r._c=!1,r},es=(e,t,n)=>{const r=e._ctx;for(const o in e){if(Xl(o))continue;const i=e[o];if(oe(i))t[o]=Uf(o,i,r);else if(i!=null){const a=wi(i);t[o]=()=>a}}},ts=(e,t)=>{const n=wi(t);e.slots.default=()=>n},Kf=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=ae(t),Vr(t,"_",n)):es(t,e.slots={})}else e.slots={},t&&ts(e,t);Vr(e.slots,to,1)},Gf=(e,t,n)=>{const{vnode:r,slots:o}=e;let i=!0,a=Ee;if(r.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:(xe(o,t),!n&&l===1&&delete o._):(i=!t.$stable,es(t,o)),a=t}else t&&(ts(e,t),a={default:1});if(i)for(const l in o)!Xl(l)&&a[l]==null&&delete o[l]};function Hr(e,t,n,r,o=!1){if(X(e)){e.forEach((p,m)=>Hr(p,t&&(X(t)?t[m]:t),n,r,o));return}if(Yn(r)&&!o)return;const i=r.shapeFlag&4?Li(r.component)||r.component.proxy:r.el,a=o?null:i,{i:l,r:s}=e,c=t&&t.r,u=l.refs===Ee?l.refs={}:l.refs,d=l.setupState;if(c!=null&&c!==s&&(ue(c)?(u[c]=null,ce(d,c)&&(d[c]=null)):Ce(c)&&(c.value=null)),oe(s))jt(s,l,12,[a,u]);else{const p=ue(s),m=Ce(s);if(p||m){const g=()=>{if(e.f){const w=p?ce(d,s)?d[s]:u[s]:s.value;o?X(w)&&ii(w,i):X(w)?w.includes(i)||w.push(i):p?(u[s]=[i],ce(d,s)&&(d[s]=u[s])):(s.value=[i],e.k&&(u[e.k]=s.value))}else p?(u[s]=a,ce(d,s)&&(d[s]=a)):m&&(s.value=a,e.k&&(u[e.k]=a))};a?(g.id=-1,Be(g,n)):g()}}}let Vt=!1;const Rr=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Ir=e=>e.nodeType===8;function Yf(e){const{mt:t,p:n,o:{patchProp:r,createText:o,nextSibling:i,parentNode:a,remove:l,insert:s,createComment:c}}=e,u=(b,A)=>{if(!A.hasChildNodes()){n(null,b,A),Nr(),A._vnode=b;return}Vt=!1,d(A.firstChild,b,null,null,null),Nr(),A._vnode=b,Vt&&console.error("Hydration completed but contains mismatches.")},d=(b,A,M,k,N,V=!1)=>{const S=Ir(b)&&b.data==="[",B=()=>w(b,A,M,k,N,S),{type:Z,ref:H,shapeFlag:te,patchFlag:we}=A;let ye=b.nodeType;A.el=b,we===-2&&(V=!1,A.dynamicChildren=null);let q=null;switch(Z){case An:ye!==3?A.children===""?(s(A.el=o(""),a(b),b),q=b):q=B():(b.data!==A.children&&(Vt=!0,b.data=A.children),q=i(b));break;case rt:P(b)?(q=i(b),y(A.el=b.content.firstChild,b,M)):ye!==8||S?q=B():q=i(b);break;case Qn:if(S&&(b=i(b),ye=b.nodeType),ye===1||ye===3){q=b;const ne=!A.children.length;for(let K=0;K{V=V||!!A.dynamicChildren;const{type:S,props:B,patchFlag:Z,shapeFlag:H,dirs:te,transition:we}=A,ye=S==="input"||S==="option";if(ye||Z!==-1){if(te&&mt(A,null,M,"created"),B)if(ye||!V||Z&48)for(const K in B)(ye&&(K.endsWith("value")||K==="indeterminate")||ur(K)&&!Gn(K)||K[0]===".")&&r(b,K,null,B[K],!1,void 0,M);else B.onClick&&r(b,"onClick",null,B.onClick,!1,void 0,M);let q;(q=B&&B.onVnodeBeforeMount)&&Qe(q,M,A);let ne=!1;if(P(b)){ne=ns(k,we)&&M&&M.vnode.props&&M.vnode.props.appear;const K=b.content.firstChild;ne&&we.beforeEnter(K),y(K,b,M),A.el=b=K}if(te&&mt(A,null,M,"beforeMount"),((q=B&&B.onVnodeMounted)||te||ne)&&Fl(()=>{q&&Qe(q,M,A),ne&&we.enter(b),te&&mt(A,null,M,"mounted")},k),H&16&&!(B&&(B.innerHTML||B.textContent))){let K=m(b.firstChild,A,b,M,k,N,V);for(;K;){Vt=!0;const Re=K;K=K.nextSibling,l(Re)}}else H&8&&b.textContent!==A.children&&(Vt=!0,b.textContent=A.children)}return b.nextSibling},m=(b,A,M,k,N,V,S)=>{S=S||!!A.dynamicChildren;const B=A.children,Z=B.length;for(let H=0;H{const{slotScopeIds:S}=A;S&&(N=N?N.concat(S):S);const B=a(b),Z=m(i(b),A,B,M,k,N,V);return Z&&Ir(Z)&&Z.data==="]"?i(A.anchor=Z):(Vt=!0,s(A.anchor=c("]"),B,Z),Z)},w=(b,A,M,k,N,V)=>{if(Vt=!0,A.el=null,V){const Z=T(b);for(;;){const H=i(b);if(H&&H!==Z)l(H);else break}}const S=i(b),B=a(b);return l(b),n(null,A,B,S,M,k,Rr(B),N),S},T=(b,A="[",M="]")=>{let k=0;for(;b;)if(b=i(b),b&&Ir(b)&&(b.data===A&&k++,b.data===M)){if(k===0)return i(b);k--}return b},y=(b,A,M)=>{const k=A.parentNode;k&&k.replaceChild(b,A);let N=M;for(;N;)N.vnode.el===A&&(N.vnode.el=N.subTree.el=b),N=N.parent},P=b=>b.nodeType===1&&b.tagName.toLowerCase()==="template";return[u,d]}const Be=Fl;function Zf(e){return Qf(e,Yf)}function Qf(e,t){const n=So();n.__VUE__=!0;const{insert:r,remove:o,patchProp:i,createElement:a,createText:l,createComment:s,setText:c,setElementText:u,parentNode:d,nextSibling:p,setScopeId:m=bt,insertStaticContent:g}=e,w=(v,_,E,R=null,x=null,C=null,j=!1,$=null,F=!!_.dynamicChildren)=>{if(v===_)return;v&&!Zt(v,_)&&(R=O(v),De(v,x,C,!0),v=null),_.patchFlag===-2&&(F=!1,_.dynamicChildren=null);const{type:D,ref:Q,shapeFlag:G}=_;switch(D){case An:T(v,_,E,R);break;case rt:y(v,_,E,R);break;case Qn:v==null&&P(_,E,R,j);break;case Ke:H(v,_,E,R,x,C,j,$,F);break;default:G&1?M(v,_,E,R,x,C,j,$,F):G&6?te(v,_,E,R,x,C,j,$,F):(G&64||G&128)&&D.process(v,_,E,R,x,C,j,$,F,z)}Q!=null&&x&&Hr(Q,v&&v.ref,C,_||v,!_)},T=(v,_,E,R)=>{if(v==null)r(_.el=l(_.children),E,R);else{const x=_.el=v.el;_.children!==v.children&&c(x,_.children)}},y=(v,_,E,R)=>{v==null?r(_.el=s(_.children||""),E,R):_.el=v.el},P=(v,_,E,R)=>{[v.el,v.anchor]=g(v.children,_,E,R,v.el,v.anchor)},b=({el:v,anchor:_},E,R)=>{let x;for(;v&&v!==_;)x=p(v),r(v,E,R),v=x;r(_,E,R)},A=({el:v,anchor:_})=>{let E;for(;v&&v!==_;)E=p(v),o(v),v=E;o(_)},M=(v,_,E,R,x,C,j,$,F)=>{j=j||_.type==="svg",v==null?k(_,E,R,x,C,j,$,F):S(v,_,x,C,j,$,F)},k=(v,_,E,R,x,C,j,$)=>{let F,D;const{type:Q,props:G,shapeFlag:J,transition:re,dirs:ie}=v;if(F=v.el=a(v.type,C,G&&G.is,G),J&8?u(F,v.children):J&16&&V(v.children,F,null,R,x,C&&Q!=="foreignObject",j,$),ie&&mt(v,null,R,"created"),N(F,v,v.scopeId,j,R),G){for(const he in G)he!=="value"&&!Gn(he)&&i(F,he,null,G[he],C,v.children,R,x,Ie);"value"in G&&i(F,"value",null,G.value),(D=G.onVnodeBeforeMount)&&Qe(D,R,v)}ie&&mt(v,null,R,"beforeMount");const me=ns(x,re);me&&re.beforeEnter(F),r(F,_,E),((D=G&&G.onVnodeMounted)||me||ie)&&Be(()=>{D&&Qe(D,R,v),me&&re.enter(F),ie&&mt(v,null,R,"mounted")},x)},N=(v,_,E,R,x)=>{if(E&&m(v,E),R)for(let C=0;C{for(let D=F;D{const $=_.el=v.el;let{patchFlag:F,dynamicChildren:D,dirs:Q}=_;F|=v.patchFlag&16;const G=v.props||Ee,J=_.props||Ee;let re;E&&Kt(E,!1),(re=J.onVnodeBeforeUpdate)&&Qe(re,E,_,v),Q&&mt(_,v,E,"beforeUpdate"),E&&Kt(E,!0);const ie=x&&_.type!=="foreignObject";if(D?B(v.dynamicChildren,D,$,E,R,ie,C):j||K(v,_,$,null,E,R,ie,C,!1),F>0){if(F&16)Z($,_,G,J,E,R,x);else if(F&2&&G.class!==J.class&&i($,"class",null,J.class,x),F&4&&i($,"style",G.style,J.style,x),F&8){const me=_.dynamicProps;for(let he=0;he{re&&Qe(re,E,_,v),Q&&mt(_,v,E,"updated")},R)},B=(v,_,E,R,x,C,j)=>{for(let $=0;$<_.length;$++){const F=v[$],D=_[$],Q=F.el&&(F.type===Ke||!Zt(F,D)||F.shapeFlag&70)?d(F.el):E;w(F,D,Q,null,R,x,C,j,!0)}},Z=(v,_,E,R,x,C,j)=>{if(E!==R){if(E!==Ee)for(const $ in E)!Gn($)&&!($ in R)&&i(v,$,E[$],null,j,_.children,x,C,Ie);for(const $ in R){if(Gn($))continue;const F=R[$],D=E[$];F!==D&&$!=="value"&&i(v,$,D,F,j,_.children,x,C,Ie)}"value"in R&&i(v,"value",E.value,R.value)}},H=(v,_,E,R,x,C,j,$,F)=>{const D=_.el=v?v.el:l(""),Q=_.anchor=v?v.anchor:l("");let{patchFlag:G,dynamicChildren:J,slotScopeIds:re}=_;re&&($=$?$.concat(re):re),v==null?(r(D,E,R),r(Q,E,R),V(_.children,E,Q,x,C,j,$,F)):G>0&&G&64&&J&&v.dynamicChildren?(B(v.dynamicChildren,J,E,x,C,j,$),(_.key!=null||x&&_===x.subTree)&&rs(v,_,!0)):K(v,_,E,Q,x,C,j,$,F)},te=(v,_,E,R,x,C,j,$,F)=>{_.slotScopeIds=$,v==null?_.shapeFlag&512?x.ctx.activate(_,E,R,j,F):we(_,E,R,x,C,j,F):ye(v,_,F)},we=(v,_,E,R,x,C,j)=>{const $=v.component=sd(v,R,x);if(hr(v)&&($.ctx.renderer=z),cd($),$.asyncDep){if(x&&x.registerDep($,q),!v.el){const F=$.subTree=Le(rt);y(null,F,_,E)}return}q($,v,_,E,x,C,j)},ye=(v,_,E)=>{const R=_.component=v.component;if(bf(v,_,E))if(R.asyncDep&&!R.asyncResolved){ne(R,_,E);return}else R.next=_,df(R.update),R.update();else _.el=v.el,R.vnode=_},q=(v,_,E,R,x,C,j)=>{const $=()=>{if(v.isMounted){let{next:Q,bu:G,u:J,parent:re,vnode:ie}=v,me=Q,he;Kt(v,!1),Q?(Q.el=ie.el,ne(v,Q,j)):Q=ie,G&&fo(G),(he=Q.props&&Q.props.onVnodeBeforeUpdate)&&Qe(he,re,Q,ie),Kt(v,!0);const Oe=po(v),lt=v.subTree;v.subTree=Oe,w(lt,Oe,d(lt.el),O(lt),v,x,C),Q.el=Oe.el,me===null&&yf(v,Oe.el),J&&Be(J,x),(he=Q.props&&Q.props.onVnodeUpdated)&&Be(()=>Qe(he,re,Q,ie),x)}else{let Q;const{el:G,props:J}=_,{bm:re,m:ie,parent:me}=v,he=Yn(_);if(Kt(v,!1),re&&fo(re),!he&&(Q=J&&J.onVnodeBeforeMount)&&Qe(Q,me,_),Kt(v,!0),G&&le){const Oe=()=>{v.subTree=po(v),le(G,v.subTree,v,x,null)};he?_.type.__asyncLoader().then(()=>!v.isUnmounted&&Oe()):Oe()}else{const Oe=v.subTree=po(v);w(null,Oe,E,R,v,x,C),_.el=Oe.el}if(ie&&Be(ie,x),!he&&(Q=J&&J.onVnodeMounted)){const Oe=_;Be(()=>Qe(Q,me,Oe),x)}(_.shapeFlag&256||me&&Yn(me.vnode)&&me.vnode.shapeFlag&256)&&v.a&&Be(v.a,x),v.isMounted=!0,_=E=R=null}},F=v.effect=new ui($,()=>Jr(D),v.scope),D=v.update=()=>F.run();D.id=v.uid,Kt(v,!0),D()},ne=(v,_,E)=>{_.component=v;const R=v.vnode.props;v.vnode=_,v.next=null,qf(v,_.props,R,E),Gf(v,_.children,E),Dn(),Xi(),Sn()},K=(v,_,E,R,x,C,j,$,F=!1)=>{const D=v&&v.children,Q=v?v.shapeFlag:0,G=_.children,{patchFlag:J,shapeFlag:re}=_;if(J>0){if(J&128){pt(D,G,E,R,x,C,j,$,F);return}else if(J&256){Re(D,G,E,R,x,C,j,$,F);return}}re&8?(Q&16&&Ie(D,x,C),G!==D&&u(E,G)):Q&16?re&16?pt(D,G,E,R,x,C,j,$,F):Ie(D,x,C,!0):(Q&8&&u(E,""),re&16&&V(G,E,R,x,C,j,$,F))},Re=(v,_,E,R,x,C,j,$,F)=>{v=v||gn,_=_||gn;const D=v.length,Q=_.length,G=Math.min(D,Q);let J;for(J=0;JQ?Ie(v,x,C,!0,!1,G):V(_,E,R,x,C,j,$,F,G)},pt=(v,_,E,R,x,C,j,$,F)=>{let D=0;const Q=_.length;let G=v.length-1,J=Q-1;for(;D<=G&&D<=J;){const re=v[D],ie=_[D]=F?Bt(_[D]):ct(_[D]);if(Zt(re,ie))w(re,ie,E,null,x,C,j,$,F);else break;D++}for(;D<=G&&D<=J;){const re=v[G],ie=_[J]=F?Bt(_[J]):ct(_[J]);if(Zt(re,ie))w(re,ie,E,null,x,C,j,$,F);else break;G--,J--}if(D>G){if(D<=J){const re=J+1,ie=reJ)for(;D<=G;)De(v[D],x,C,!0),D++;else{const re=D,ie=D,me=new Map;for(D=ie;D<=J;D++){const qe=_[D]=F?Bt(_[D]):ct(_[D]);qe.key!=null&&me.set(qe.key,D)}let he,Oe=0;const lt=J-ie+1;let cn=!1,Hi=0;const Fn=new Array(lt);for(D=0;D=lt){De(qe,x,C,!0);continue}let vt;if(qe.key!=null)vt=me.get(qe.key);else for(he=ie;he<=J;he++)if(Fn[he-ie]===0&&Zt(qe,_[he])){vt=he;break}vt===void 0?De(qe,x,C,!0):(Fn[vt-ie]=D+1,vt>=Hi?Hi=vt:cn=!0,w(qe,_[vt],E,null,x,C,j,$,F),Oe++)}const ji=cn?Jf(Fn):gn;for(he=ji.length-1,D=lt-1;D>=0;D--){const qe=ie+D,vt=_[qe],Wi=qe+1{const{el:C,type:j,transition:$,children:F,shapeFlag:D}=v;if(D&6){Ye(v.component.subTree,_,E,R);return}if(D&128){v.suspense.move(_,E,R);return}if(D&64){j.move(v,_,E,z);return}if(j===Ke){r(C,_,E);for(let G=0;G$.enter(C),x);else{const{leave:G,delayLeave:J,afterLeave:re}=$,ie=()=>r(C,_,E),me=()=>{G(C,()=>{ie(),re&&re()})};J?J(C,ie,me):me()}else r(C,_,E)},De=(v,_,E,R=!1,x=!1)=>{const{type:C,props:j,ref:$,children:F,dynamicChildren:D,shapeFlag:Q,patchFlag:G,dirs:J}=v;if($!=null&&Hr($,null,E,v,!0),Q&256){_.ctx.deactivate(v);return}const re=Q&1&&J,ie=!Yn(v);let me;if(ie&&(me=j&&j.onVnodeBeforeUnmount)&&Qe(me,_,v),Q&6)ht(v.component,E,R);else{if(Q&128){v.suspense.unmount(E,R);return}re&&mt(v,null,_,"beforeUnmount"),Q&64?v.type.remove(v,_,E,x,z,R):D&&(C!==Ke||G>0&&G&64)?Ie(D,_,E,!1,!0):(C===Ke&&G&384||!x&&Q&16)&&Ie(F,_,E),R&&We(v)}(ie&&(me=j&&j.onVnodeUnmounted)||re)&&Be(()=>{me&&Qe(me,_,v),re&&mt(v,null,_,"unmounted")},E)},We=v=>{const{type:_,el:E,anchor:R,transition:x}=v;if(_===Ke){Et(E,R);return}if(_===Qn){A(v);return}const C=()=>{o(E),x&&!x.persisted&&x.afterLeave&&x.afterLeave()};if(v.shapeFlag&1&&x&&!x.persisted){const{leave:j,delayLeave:$}=x,F=()=>j(E,C);$?$(v.el,C,F):F()}else C()},Et=(v,_)=>{let E;for(;v!==_;)E=p(v),o(v),v=E;o(_)},ht=(v,_,E)=>{const{bum:R,scope:x,update:C,subTree:j,um:$}=v;R&&fo(R),x.stop(),C&&(C.active=!1,De(j,v,_,E)),$&&Be($,_),Be(()=>{v.isUnmounted=!0},_),_&&_.pendingBranch&&!_.isUnmounted&&v.asyncDep&&!v.asyncResolved&&v.suspenseId===_.pendingId&&(_.deps--,_.deps===0&&_.resolve())},Ie=(v,_,E,R=!1,x=!1,C=0)=>{for(let j=C;jv.shapeFlag&6?O(v.component.subTree):v.shapeFlag&128?v.suspense.next():p(v.anchor||v.el),W=(v,_,E)=>{v==null?_._vnode&&De(_._vnode,null,null,!0):w(_._vnode||null,v,_,null,null,null,E),Xi(),Nr(),_._vnode=v},z={p:w,um:De,m:Ye,r:We,mt:we,mc:V,pc:K,pbc:B,n:O,o:e};let Y,le;return t&&([Y,le]=t(z)),{render:W,hydrate:Y,createApp:jf(W,Y)}}function Kt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function ns(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function rs(e,t,n=!1){const r=e.children,o=t.children;if(X(r)&&X(o))for(let i=0;i>1,e[n[l]]0&&(t[r]=n[i-1]),n[i]=r)}}for(i=n.length,a=n[i-1];i-- >0;)n[i]=a,a=t[a];return n}const Xf=e=>e.__isTeleport,Ke=Symbol.for("v-fgt"),An=Symbol.for("v-txt"),rt=Symbol.for("v-cmt"),Qn=Symbol.for("v-stc"),Jn=[];let ft=null;function ed(e=!1){Jn.push(ft=e?null:[])}function td(){Jn.pop(),ft=Jn[Jn.length-1]||null}let lr=1;function fa(e){lr+=e}function os(e){return e.dynamicChildren=lr>0?ft||gn:null,td(),lr>0&&ft&&ft.push(e),e}function y_(e,t,n,r,o,i){return os(as(e,t,n,r,o,i,!0))}function nd(e,t,n,r,o){return os(Le(e,t,n,r,o,!0))}function jo(e){return e?e.__v_isVNode===!0:!1}function Zt(e,t){return e.type===t.type&&e.key===t.key}const to="__vInternal",is=({key:e})=>e??null,Sr=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ue(e)||Ce(e)||oe(e)?{i:Xe,r:e,k:t,f:!!n}:e:null);function as(e,t=null,n=null,r=0,o=null,i=e===Ke?0:1,a=!1,l=!1){const s={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&is(t),ref:t&&Sr(t),scopeId:zl,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Xe};return l?(Ti(s,n),i&128&&e.normalize(s)):n&&(s.shapeFlag|=ue(n)?8:16),lr>0&&!a&&ft&&(s.patchFlag>0||i&6)&&s.patchFlag!==32&&ft.push(s),s}const Le=rd;function rd(e,t=null,n=null,r=0,o=null,i=!1){if((!e||e===Ef)&&(e=rt),jo(e)){const l=qt(e,t,!0);return n&&Ti(l,n),lr>0&&!i&&ft&&(l.shapeFlag&6?ft[ft.indexOf(e)]=l:ft.push(l)),l.patchFlag|=-2,l}if(hd(e)&&(e=e.__vccOpts),t){t=od(t);let{class:l,style:s}=t;l&&!ue(l)&&(t.class=si(l)),Te(s)&&(xl(s)&&!X(s)&&(s=xe({},s)),t.style=li(s))}const a=ue(e)?1:Tf(e)?128:Xf(e)?64:Te(e)?4:oe(e)?2:0;return as(e,t,n,r,o,a,i,!0)}function od(e){return e?xl(e)||to in e?xe({},e):e:null}function qt(e,t,n=!1){const{props:r,ref:o,patchFlag:i,children:a}=e,l=t?id(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&is(l),ref:t&&t.ref?n&&o?X(o)?o.concat(Sr(t)):[o,Sr(t)]:Sr(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ke?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&qt(e.ssContent),ssFallback:e.ssFallback&&qt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function ls(e=" ",t=0){return Le(An,null,e,t)}function E_(e,t){const n=Le(Qn,null,e);return n.staticCount=t,n}function w_(e="",t=!1){return t?(ed(),nd(rt,null,e)):Le(rt,null,e)}function ct(e){return e==null||typeof e=="boolean"?Le(rt):X(e)?Le(Ke,null,e.slice()):typeof e=="object"?Bt(e):Le(An,null,String(e))}function Bt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:qt(e)}function Ti(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(X(t))n=16;else if(typeof t=="object")if(r&65){const o=t.default;o&&(o._c&&(o._d=!1),Ti(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!(to in t)?t._ctx=Xe:o===3&&Xe&&(Xe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else oe(t)?(t={default:t,_ctx:Xe},n=32):(t=String(t),r&64?(n=16,t=[ls(t)]):n=8);e.children=t,e.shapeFlag|=n}function id(...e){const t={};for(let n=0;nke||Xe;let Ai,un,da="__VUE_INSTANCE_SETTERS__";(un=So()[da])||(un=So()[da]=[]),un.push(e=>ke=e),Ai=e=>{un.length>1?un.forEach(t=>t(e)):un[0](e)};const Ln=e=>{Ai(e),e.scope.on()},nn=()=>{ke&&ke.scope.off(),Ai(null)};function ss(e){return e.vnode.shapeFlag&4}let Pn=!1;function cd(e,t=!1){Pn=t;const{props:n,children:r}=e.vnode,o=ss(e);Wf(e,n,o,t),Kf(e,r);const i=o?ud(e,t):void 0;return Pn=!1,i}function ud(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=kl(new Proxy(e.ctx,Mf));const{setup:r}=n;if(r){const o=e.setupContext=r.length>1?dd(e):null;Ln(e),Dn();const i=jt(r,e,0,[e.props,o]);if(Sn(),nn(),ml(i)){if(i.then(nn,nn),t)return i.then(a=>{pa(e,a,t)}).catch(a=>{pr(a,e,0)});e.asyncDep=i}else pa(e,i,t)}else cs(e,t)}function pa(e,t,n){oe(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Te(t)&&(e.setupState=Dl(t)),cs(e,n)}let ha;function cs(e,t,n){const r=e.type;if(!e.render){if(!t&&ha&&!r.render){const o=r.template||Ei(e).template;if(o){const{isCustomElement:i,compilerOptions:a}=e.appContext.config,{delimiters:l,compilerOptions:s}=r,c=xe(xe({isCustomElement:i,delimiters:l},a),s);r.render=ha(o,c)}}e.render=r.render||bt}{Ln(e),Dn();try{$f(e)}finally{Sn(),nn()}}}function fd(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return He(e,"get","$attrs"),t[n]}}))}function dd(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return fd(e)},slots:e.slots,emit:e.emit,expose:t}}function Li(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Dl(kl(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Zn)return Zn[n](e)},has(t,n){return n in t||n in Zn}}))}function pd(e,t=!0){return oe(e)?e.displayName||e.name:e.name||t&&e.__name}function hd(e){return oe(e)&&"__vccOpts"in e}const I=(e,t)=>cf(e,t,Pn);function f(e,t,n){const r=arguments.length;return r===2?Te(t)&&!X(t)?jo(t)?Le(e,null,[t]):Le(e,t):Le(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&jo(n)&&(n=[n]),Le(e,t,n))}const vd=Symbol.for("v-scx"),md=()=>_e(vd),_d="3.3.10",gd="http://www.w3.org/2000/svg",Qt=typeof document<"u"?document:null,va=Qt&&Qt.createElement("template"),bd={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t?Qt.createElementNS(gd,e):Qt.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>Qt.createTextNode(e),createComment:e=>Qt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Qt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,i){const a=n?n.previousSibling:t.lastChild;if(o&&(o===i||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===i||!(o=o.nextSibling)););else{va.innerHTML=r?`${e}`:e;const l=va.content;if(r){const s=l.firstChild;for(;s.firstChild;)l.appendChild(s.firstChild);l.removeChild(s)}t.insertBefore(l,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Mt="transition",Hn="animation",Rn=Symbol("_vtc"),xt=(e,{slots:t})=>f(Pf,fs(e),t);xt.displayName="Transition";const us={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},yd=xt.props=xe({},ql,us),Gt=(e,t=[])=>{X(e)?e.forEach(n=>n(...t)):e&&e(...t)},ma=e=>e?X(e)?e.some(t=>t.length>1):e.length>1:!1;function fs(e){const t={};for(const H in e)H in us||(t[H]=e[H]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:i=`${n}-enter-from`,enterActiveClass:a=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:s=i,appearActiveClass:c=a,appearToClass:u=l,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:m=`${n}-leave-to`}=e,g=Ed(o),w=g&&g[0],T=g&&g[1],{onBeforeEnter:y,onEnter:P,onEnterCancelled:b,onLeave:A,onLeaveCancelled:M,onBeforeAppear:k=y,onAppear:N=P,onAppearCancelled:V=b}=t,S=(H,te,we)=>{Nt(H,te?u:l),Nt(H,te?c:a),we&&we()},B=(H,te)=>{H._isLeaving=!1,Nt(H,d),Nt(H,m),Nt(H,p),te&&te()},Z=H=>(te,we)=>{const ye=H?N:P,q=()=>S(te,H,we);Gt(ye,[te,q]),_a(()=>{Nt(te,H?s:i),Tt(te,H?u:l),ma(ye)||ga(te,r,w,q)})};return xe(t,{onBeforeEnter(H){Gt(y,[H]),Tt(H,i),Tt(H,a)},onBeforeAppear(H){Gt(k,[H]),Tt(H,s),Tt(H,c)},onEnter:Z(!1),onAppear:Z(!0),onLeave(H,te){H._isLeaving=!0;const we=()=>B(H,te);Tt(H,d),ps(),Tt(H,p),_a(()=>{H._isLeaving&&(Nt(H,d),Tt(H,m),ma(A)||ga(H,r,T,we))}),Gt(A,[H,we])},onEnterCancelled(H){S(H,!1),Gt(b,[H])},onAppearCancelled(H){S(H,!0),Gt(V,[H])},onLeaveCancelled(H){B(H),Gt(M,[H])}})}function Ed(e){if(e==null)return null;if(Te(e))return[_o(e.enter),_o(e.leave)];{const t=_o(e);return[t,t]}}function _o(e){return Au(e)}function Tt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Rn]||(e[Rn]=new Set)).add(t)}function Nt(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Rn];n&&(n.delete(t),n.size||(e[Rn]=void 0))}function _a(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let wd=0;function ga(e,t,n,r){const o=e._endId=++wd,i=()=>{o===e._endId&&r()};if(n)return setTimeout(i,n);const{type:a,timeout:l,propCount:s}=ds(e,t);if(!a)return r();const c=a+"end";let u=0;const d=()=>{e.removeEventListener(c,p),i()},p=m=>{m.target===e&&++u>=s&&d()};setTimeout(()=>{u(n[g]||"").split(", "),o=r(`${Mt}Delay`),i=r(`${Mt}Duration`),a=ba(o,i),l=r(`${Hn}Delay`),s=r(`${Hn}Duration`),c=ba(l,s);let u=null,d=0,p=0;t===Mt?a>0&&(u=Mt,d=a,p=i.length):t===Hn?c>0&&(u=Hn,d=c,p=s.length):(d=Math.max(a,c),u=d>0?a>c?Mt:Hn:null,p=u?u===Mt?i.length:s.length:0);const m=u===Mt&&/\b(transform|all)(,|$)/.test(r(`${Mt}Property`).toString());return{type:u,timeout:d,propCount:p,hasTransform:m}}function ba(e,t){for(;e.lengthya(n)+ya(e[r])))}function ya(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function ps(){return document.body.offsetHeight}function Td(e,t,n){const r=e[Rn];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ad=Symbol("_vod");function Ld(e,t,n){const r=e.style,o=ue(n);if(n&&!o){if(t&&!ue(t))for(const i in t)n[i]==null&&Wo(r,i,"");for(const i in n)Wo(r,i,n[i])}else{const i=r.display;o?t!==n&&(r.cssText=n):t&&e.removeAttribute("style"),Ad in e&&(r.display=i)}}const Ea=/\s*!important$/;function Wo(e,t,n){if(X(n))n.forEach(r=>Wo(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Pd(e,t);Ea.test(n)?e.setProperty(Cn(r),n.replace(Ea,""),"important"):e[r]=n}}const wa=["Webkit","Moz","ms"],go={};function Pd(e,t){const n=go[t];if(n)return n;let r=ot(t);if(r!=="filter"&&r in e)return go[t]=r;r=fr(r);for(let o=0;obo||(Dd.then(()=>bo=0),bo=Date.now());function Vd(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;tt(Md(r,n.value),t,5,[r])};return n.value=e,n.attached=Sd(),n}function Md(e,t){if(X(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r&&r(o))}else return t}const Pa=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,$d=(e,t,n,r,o=!1,i,a,l,s)=>{t==="class"?Td(e,r,o):t==="style"?Ld(e,n,r):ur(t)?oi(t)||kd(e,t,n,r,a):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Nd(e,t,r,o))?Id(e,t,r,i,a,l,s):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Rd(e,t,r,o))};function Nd(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&Pa(t)&&oe(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;return!(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")}return Pa(t)&&ue(n)?!1:t in e}const hs=new WeakMap,vs=new WeakMap,jr=Symbol("_moveCb"),Ra=Symbol("_enterCb"),ms={name:"TransitionGroup",props:xe({},yd,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Vn(),r=Wl();let o,i;return Gl(()=>{if(!o.length)return;const a=e.moveClass||`${e.name||"v"}-move`;if(!Wd(o[0].el,n.vnode.el,a))return;o.forEach(Fd),o.forEach(Hd);const l=o.filter(jd);ps(),l.forEach(s=>{const c=s.el,u=c.style;Tt(c,a),u.transform=u.webkitTransform=u.transitionDuration="";const d=c[jr]=p=>{p&&p.target!==c||(!p||/transform$/.test(p.propertyName))&&(c.removeEventListener("transitionend",d),c[jr]=null,Nt(c,a))};c.addEventListener("transitionend",d)})}),()=>{const a=ae(e),l=fs(a);let s=a.tag||Ke;o=i,i=t.default?bi(t.default()):[];for(let c=0;cdelete e.mode;ms.props;const Bd=ms;function Fd(e){const t=e.el;t[jr]&&t[jr](),t[Ra]&&t[Ra]()}function Hd(e){vs.set(e,e.el.getBoundingClientRect())}function jd(e){const t=hs.get(e),n=vs.get(e),r=t.left-n.left,o=t.top-n.top;if(r||o){const i=e.el.style;return i.transform=i.webkitTransform=`translate(${r}px,${o}px)`,i.transitionDuration="0s",e}}function Wd(e,t,n){const r=e.cloneNode(),o=e[Rn];o&&o.forEach(l=>{l.split(/\s+/).forEach(s=>s&&r.classList.remove(s))}),n.split(/\s+/).forEach(l=>l&&r.classList.add(l)),r.style.display="none";const i=t.nodeType===1?t:t.parentNode;i.appendChild(r);const{hasTransform:a}=ds(r);return i.removeChild(r),a}const qd=xe({patchProp:$d},bd);let yo,Ia=!1;function Ud(){return yo=Ia?yo:Zf(qd),Ia=!0,yo}const Kd=(...e)=>{const t=Ud().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=Gd(r);if(o)return n(o,!0,o instanceof SVGElement)},t};function Gd(e){return ue(e)?document.querySelector(e):e}const Yd="modulepreload",Zd=function(e){return"/"+e},Oa={},h=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){const i=document.getElementsByTagName("link");o=Promise.all(n.map(a=>{if(a=Zd(a),a in Oa)return;Oa[a]=!0;const l=a.endsWith(".css"),s=l?'[rel="stylesheet"]':"";if(!!r)for(let d=i.length-1;d>=0;d--){const p=i[d];if(p.href===a&&(!l||p.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${a}"]${s}`))return;const u=document.createElement("link");if(u.rel=l?"stylesheet":Yd,l||(u.as="script",u.crossOrigin=""),u.href=a,document.head.appendChild(u),l)return new Promise((d,p)=>{u.addEventListener("load",d),u.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${a}`)))})}))}return o.then(()=>t()).catch(i=>{const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=i,window.dispatchEvent(a),!a.defaultPrevented)throw i})},Qd={"v-8daa1a0e":()=>h(()=>import("./index.html-Oh37e22D.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-fffb8e28":()=>h(()=>import("./index.html-ohZtz6Fw.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-43c96c34":()=>h(()=>import("./collaborative_projects.html-15UQQvPG.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-17f2914c":()=>h(()=>import("./contact.html-XWW2pZ29.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-07f943d9":()=>h(()=>import("./license.html-onnWhI1X.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-9e2e7e22":()=>h(()=>import("./thanks.html--KuWuTSm.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-1d3d20e2":()=>h(()=>import("./use_cases.html-C-cj_NSV.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-639495b8":()=>h(()=>import("./index.html-QkbwDjsA.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-2d0ad528":()=>h(()=>import("./index.html-A9z0_Hu7.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-58ff8a76":()=>h(()=>import("./index.html-qi3PncfW.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-07e28fb7":()=>h(()=>import("./oncetoken.html-JcsefotR.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-5d588a76":()=>h(()=>import("./index.html-Acfu-WyI.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-67fe8904":()=>h(()=>import("./not_recommended_qq.html-g8E5V1Ie.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-9ef794be":()=>h(()=>import("./rtmp_playback_compatibility_issues.html-5avJPHVo.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-26771ae0":()=>h(()=>import("./index.html-Pl0D5fWX.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-7c5f89f1":()=>h(()=>import("./compilation_instructions_for_windows_version.html-xl0PwINJ.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-2a95408c":()=>h(()=>import("./install_zlmediakit_using_vcpkg.html-_H3jokEy.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-410226d2":()=>h(()=>import("./start.html-I4A7uS59.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-1a355af6":()=>h(()=>import("./index.html-TLmaTaqK.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-f17856b6":()=>h(()=>import("./config_file.html-5j1Bx0Jx.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-326b1b06":()=>h(()=>import("./generate_ssl_self-signed_certificate_and_test.html-qSLRuImw.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-f90651dc":()=>h(()=>import("./how_to_enable_https_related_functions.html-fcJ6Uozv.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-629229d1":()=>h(()=>import("./on-demand_push_streaming.html-kP6TQb2_.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-a3ed6f7c":()=>h(()=>import("./on-demand_streaming.html-2DvN-m5K.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-22d780d8":()=>h(()=>import("./play_url_rules.html-LU-zd-xr.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-40777a42":()=>h(()=>import("./playback_authentication.html-wjgI-Yj5.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-1c8baf7e":()=>h(()=>import("./push_authentication.html-qlfLynHw.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-d003c332":()=>h(()=>import("./push_test.html-gnFrDUbt.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-992f244c":()=>h(()=>import("./restful_api.html-vpWQQrW9.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-1563923f":()=>h(()=>import("./sequence_diagram.html-yqJJFxQH.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3f9e2b34":()=>h(()=>import("./start_server.html-fcMybRlu.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-4436fd0b":()=>h(()=>import("./web_hook_api.html-adtpDhAG.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-fa0f55aa":()=>h(()=>import("./index.html-m59LkreQ.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-5d4ca3be":()=>h(()=>import("./index.html-XiIyF-Mz.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-29126422":()=>h(()=>import("./how_to_create_a_live_steam.html-Gq2b9Yi0.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-b1256428":()=>h(()=>import("./index.html-LSqTAwnp.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-099b9809":()=>h(()=>import("./hls_high_performance_journey.html-bBajAqE1.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-c75d9fee":()=>h(()=>import("./rtsp_performance_optimization.html-XwSQReWx.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-27716634":()=>h(()=>import("./index.html-3Pe7G9Sl.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3d1bfe27":()=>h(()=>import("./exclusive_features.html-2siFVq2G.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-61f35635":()=>h(()=>import("./high_concurrency_implementation_principle.html-opQWc8aM.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-60e3ff20":()=>h(()=>import("./introduction_to_streaming_media_related_technologies.html-O53gIrdK.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-716fbfe3":()=>h(()=>import("./rtsp_push_process.html-eeithr0y.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-159648d6":()=>h(()=>import("./the_nature_of_live_broadcast_delay.html-bGwDwg8A.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-07cf6867":()=>h(()=>import("./index.html-yjc28uoP.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-2894bdb2":()=>h(()=>import("./dependency.html-OQ3SkmA_.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-630bfad5":()=>h(()=>import("./rtmp_support_for_h265_and_opus.html-f4aPfFot.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-a9be237a":()=>h(()=>import("./video_conferencing_related_resources.html-1ZPXoBfM.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-770cb196":()=>h(()=>import("./zltoolkit_source_code_study_notes.html-XyGnG3Jc.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-60c5ec00":()=>h(()=>import("./index.html-Hvr1twkc.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-7cf84008":()=>h(()=>import("./benchmark.html-xQUFyhUw.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-d8f6ac6a":()=>h(()=>import("./delay_test.html-_QomqbNh.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-adc6a8e4":()=>h(()=>import("./how_to_test_delay.html-GlLjeJYr.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-ea3f92ca":()=>h(()=>import("./online_test.html-osni6C75.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-210a0a78":()=>h(()=>import("./performance_testing.html-DQL8Y_0H.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-27157219":()=>h(()=>import("./rtmp_pull_stream_performance_test.html-HQ4fzTKd.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-927f8538":()=>h(()=>import("./rtmp_push_stream_performance_test.html-BY1UVNB2.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3ede775a":()=>h(()=>import("./rtsp_pull_stream_performance_test.html-9hA9_SB-.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-703b8f9e":()=>h(()=>import("./rtsp_push_stream_performance_test.html-3UQhsyo8.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-47357bdb":()=>h(()=>import("./index.html-Q1OCSdNr.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-0a3cd263":()=>h(()=>import("./collaborative_projects.html-gRvZJ2_P.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-8b20cdea":()=>h(()=>import("./contact.html-nPftNmfa.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-633bb4ec":()=>h(()=>import("./license.html-ptTdZQ9a.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-4bf4651e":()=>h(()=>import("./thanks.html-eseVCxC7.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-7dceae00":()=>h(()=>import("./use_cases.html-nlOjewQC.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-ec228f2e":()=>h(()=>import("./index.html-JQu_RH6f.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-cb3c3b8e":()=>h(()=>import("./gb28181_sip_signaling_packet_capture.html-_63zZLPQ.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-6fbaec55":()=>h(()=>import("./how_to_use_device_id_as_stream_id.html-ga4UcAIh.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-079ebd6a":()=>h(()=>import("./push_streaming.html-Z4VDPPfI.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-114c6ef6":()=>h(()=>import("./index.html-Rh0erDOb.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-d73f5e1e":()=>h(()=>import("./webrtc_compilation_and_use.html-u4uYYnLr.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-284ed9d6":()=>h(()=>import("./webrtc_signaling_interaction_format.html-TjrAUdNc.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-515bc4e7":()=>h(()=>import("./index.html-jVaUOSmI.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-e1a99f30":()=>h(()=>import("./oncetoken.html-LPckM_ZY.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-763dee34":()=>h(()=>import("./index.html-X7WU_LPV.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-6ff7e8b5":()=>h(()=>import("./not_recommended_qq.html-Od4ztKJy.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-75521352":()=>h(()=>import("./rtmp_playback_compatibility_issues.html-RzirVjbt.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-1b2bfecf":()=>h(()=>import("./index.html-BzbKxypT.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3c49c43c":()=>h(()=>import("./compilation_instructions_for_windows_version.html-Hq0AuZTz.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-2139c386":()=>h(()=>import("./install_zlmediakit_using_vcpkg.html-lJ__kZwE.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-4f36f1c6":()=>h(()=>import("./start.html-Jyh7sq9I.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-7ac6e814":()=>h(()=>import("./index.html-qjMVLXfF.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-76640c16":()=>h(()=>import("./config_file.html-i3ELg7s5.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-04c98dae":()=>h(()=>import("./generate_ssl_self-signed_certificate_and_test.html-7V6eG0vA.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-fc02997a":()=>h(()=>import("./how_to_enable_https_related_functions.html-mO3jYJnY.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-60a95200":()=>h(()=>import("./on-demand_push_streaming.html-crgN24-s.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-b991029a":()=>h(()=>import("./on-demand_streaming.html-5SBDxVes.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-78eb47c7":()=>h(()=>import("./play_url_rules.html-_eahSglS.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-2459df9a":()=>h(()=>import("./playback_authentication.html-arMfpj8D.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-322f429c":()=>h(()=>import("./push_authentication.html-8JQfqi5E.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-c01103d0":()=>h(()=>import("./push_test.html-rQVB769L.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-baeeb56a":()=>h(()=>import("./restful_api.html-Xx1SUrzX.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-35a1596e":()=>h(()=>import("./sequence_diagram.html-y7tfUv_v.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3484e1e3":()=>h(()=>import("./start_server.html-rADXsgsy.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-391db3ba":()=>h(()=>import("./web_hook_api.html-F_kUu3X6.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-24dfef1c":()=>h(()=>import("./index.html-4qXHK4Yu.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-7643e190":()=>h(()=>import("./index.html-lHFYswhu.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-5a1c26c0":()=>h(()=>import("./how_to_create_a_live_steam.html-FHwnpSdN.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-0938c35b":()=>h(()=>import("./index.html-CojxHtZz.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-5298cc7a":()=>h(()=>import("./hls_high_performance_journey.html-bLztstJM.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-72fa89b8":()=>h(()=>import("./rtsp_performance_optimization.html-N4V23aKI.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-4ea15ae3":()=>h(()=>import("./index.html-943vkdnv.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-324a3498":()=>h(()=>import("./exclusive_features.html-wTOG2Bjt.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-09d870a4":()=>h(()=>import("./high_concurrency_implementation_principle.html-sl-nIpjv.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-175b5aa1":()=>h(()=>import("./introduction_to_streaming_media_related_technologies.html-uFhGEBGc.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-79587752":()=>h(()=>import("./rtsp_push_process.html-MSFA7pR8.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3e321006":()=>h(()=>import("./the_nature_of_live_broadcast_delay.html--_Oe6F80.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-2eff5d16":()=>h(()=>import("./index.html-oRdX7laQ.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-4a544ed0":()=>h(()=>import("./dependency.html-vliHx4sJ.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-2321e074":()=>h(()=>import("./rtmp_support_for_h265_and_opus.html-tX2acU7J.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-acba6b18":()=>h(()=>import("./video_conferencing_related_resources.html-Da8l8FFw.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-164eab05":()=>h(()=>import("./zltoolkit_source_code_study_notes.html-vFvvg7fr.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-7184a3f1":()=>h(()=>import("./index.html-Zl8OD7vu.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3d3ac02d":()=>h(()=>import("./benchmark.html-MSc66SxZ.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-e2ac608c":()=>h(()=>import("./delay_test.html-dT3kgdCj.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-510ccabf":()=>h(()=>import("./how_to_test_delay.html-ubjyw-PC.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-174062e8":()=>h(()=>import("./online_test.html-8_GcpcRF.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-e521bd2e":()=>h(()=>import("./performance_testing.html-wMvwmLu0.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-1d29e16c":()=>h(()=>import("./rtmp_pull_stream_performance_test.html-_aYV-qZf.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-fdd44ad6":()=>h(()=>import("./rtmp_push_stream_performance_test.html-AxJYj-3i.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-aa333cf8":()=>h(()=>import("./rtsp_pull_stream_performance_test.html-2yov4QZH.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3a912ccf":()=>h(()=>import("./rtsp_push_stream_performance_test.html-g2X0PP_e.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-374e6730":()=>h(()=>import("./gb28181_sip_signaling_packet_capture.html-dSB5oqMq.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-6e3cc886":()=>h(()=>import("./how_to_use_device_id_as_stream_id.html-_vNSGfoU.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-041958ba":()=>h(()=>import("./push_streaming.html-5MzKBCwx.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-71ddfc14":()=>h(()=>import("./index.html-l-9Jcb0Z.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-5eb5ee22":()=>h(()=>import("./webrtc_compilation_and_use.html-Ck_2B7eV.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-84db85f8":()=>h(()=>import("./webrtc_signaling_interaction_format.html-RSBHyl7A.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-3706649a":()=>h(()=>import("./404.html-aQJ09P_F.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-14f73021":()=>h(()=>import("./index.html-VsukZOSA.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-22a2f9fd":()=>h(()=>import("./index.html-Y6Zxo28x.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-2be85352":()=>h(()=>import("./index.html-LLxB5nrB.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-0f8c4891":()=>h(()=>import("./index.html-QQRRY2d0.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-35ba27b7":()=>h(()=>import("./index.html-8RsIN7Qj.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-70e5a528":()=>h(()=>import("./index.html-MI_McXZr.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-55376182":()=>h(()=>import("./index.html-c0NLam4o.js"),__vite__mapDeps([])).then(({data:e})=>e),"v-50bfaca6":()=>h(()=>import("./index.html-Dj-Byo33.js"),__vite__mapDeps([])).then(({data:e})=>e)},Jd=JSON.parse('{"base":"/","lang":"en-US","title":"","description":"","head":[["link",{"rel":"icon","href":"/favicon.ico"}],["link",{"rel":"icon","href":"/assets/icon/chrome-192.png","type":"image/png","sizes":"192x192"}],["link",{"rel":"manifest","href":"/manifest.webmanifest","crossorigin":"use-credentials"}],["meta",{"name":"theme-color","content":"#46bd87"}],["link",{"rel":"apple-touch-icon","href":"/assets/icon/apple-touch-icon-152x152.png"}],["meta",{"name":"apple-mobile-web-app-capable","content":"yes"}],["meta",{"name":"apple-mobile-web-app-status-bar-style","content":"black"}],["meta",{"name":"msapplication-TileImage","content":"/assets/icon/ms-icon-144.png"}],["meta",{"name":"msapplication-TileColor","content":"#ffffff"}],["meta",{"name":"viewport","content":"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover"}]],"locales":{"/":{"lang":"en-US","title":"ZLMediaKit","description":"Official documentation for ZLMediaKit"},"/zh/":{"lang":"zh-CN","title":"ZLMediaKit","description":"ZLMediaKit 官方文档"}}}');var Xd=([e,t,n])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,n]),ep=e=>{const t=new Set,n=[];return e.forEach(r=>{const o=Xd(r);t.has(o)||(t.add(o),n.push(r))}),n},tp=e=>e[0]==="/"?e:`/${e}`,_s=e=>e[e.length-1]==="/"||e.endsWith(".html")?e:`${e}/`,Mn=e=>/^(https?:)?\/\//.test(e),np=/.md((\?|#).*)?$/,Wr=(e,t="/")=>!!(Mn(e)||e.startsWith("/")&&!e.startsWith(t)&&!np.test(e)),gs=e=>/^[a-z][a-z0-9+.-]*:/.test(e),Pi=e=>Object.prototype.toString.call(e)==="[object Object]",Ri=e=>e[e.length-1]==="/"?e.slice(0,-1):e,bs=e=>e[0]==="/"?e.slice(1):e,rp=(e,t)=>{const n=Object.keys(e).sort((r,o)=>{const i=o.split("/").length-r.split("/").length;return i!==0?i:o.length-r.length});for(const r of n)if(t.startsWith(r))return r;return"/"};const ys={"v-8daa1a0e":L(()=>h(()=>import("./index.html-CSg2VFea.js"),__vite__mapDeps([0,1]))),"v-fffb8e28":L(()=>h(()=>import("./index.html-ckFP_gFB.js"),__vite__mapDeps([2,1]))),"v-43c96c34":L(()=>h(()=>import("./collaborative_projects.html-UkPV-L0J.js"),__vite__mapDeps([3,1]))),"v-17f2914c":L(()=>h(()=>import("./contact.html-xnD8I3Nc.js"),__vite__mapDeps([4,1]))),"v-07f943d9":L(()=>h(()=>import("./license.html-kMl7iYce.js"),__vite__mapDeps([5,1]))),"v-9e2e7e22":L(()=>h(()=>import("./thanks.html-bZ4iyCmp.js"),__vite__mapDeps([6,1]))),"v-1d3d20e2":L(()=>h(()=>import("./use_cases.html-Ga8uwVa2.js"),__vite__mapDeps([7,1]))),"v-639495b8":L(()=>h(()=>import("./index.html-UtNsP0-c.js"),__vite__mapDeps([8,9,1]))),"v-2d0ad528":L(()=>h(()=>import("./index.html-lGRuHLpD.js"),__vite__mapDeps([10,1]))),"v-58ff8a76":L(()=>h(()=>import("./index.html-ea4s8txi.js"),__vite__mapDeps([11,1]))),"v-07e28fb7":L(()=>h(()=>import("./oncetoken.html-87LqB-OG.js"),__vite__mapDeps([12,1]))),"v-5d588a76":L(()=>h(()=>import("./index.html-ysHWzV3Z.js"),__vite__mapDeps([13,1]))),"v-67fe8904":L(()=>h(()=>import("./not_recommended_qq.html-Y9F7iYsf.js"),__vite__mapDeps([14,1]))),"v-9ef794be":L(()=>h(()=>import("./rtmp_playback_compatibility_issues.html-iFgHmMMS.js"),__vite__mapDeps([15,1]))),"v-26771ae0":L(()=>h(()=>import("./index.html-c9EfxXZy.js"),__vite__mapDeps([16,1]))),"v-7c5f89f1":L(()=>h(()=>import("./compilation_instructions_for_windows_version.html-coo8ZcK6.js"),__vite__mapDeps([17,1]))),"v-2a95408c":L(()=>h(()=>import("./install_zlmediakit_using_vcpkg.html-ii7HljTN.js"),__vite__mapDeps([18,19,1]))),"v-410226d2":L(()=>h(()=>import("./start.html-T6-Hncwi.js"),__vite__mapDeps([20,9,1]))),"v-1a355af6":L(()=>h(()=>import("./index.html-vbFGRJHC.js"),__vite__mapDeps([21,1]))),"v-f17856b6":L(()=>h(()=>import("./config_file.html-54NJpUMh.js"),__vite__mapDeps([22,1]))),"v-326b1b06":L(()=>h(()=>import("./generate_ssl_self-signed_certificate_and_test.html-MI1uDkfZ.js"),__vite__mapDeps([23,24,1]))),"v-f90651dc":L(()=>h(()=>import("./how_to_enable_https_related_functions.html-Dxu_FBYc.js"),__vite__mapDeps([25,26,1]))),"v-629229d1":L(()=>h(()=>import("./on-demand_push_streaming.html-AlawaJGx.js"),__vite__mapDeps([27,28,1]))),"v-a3ed6f7c":L(()=>h(()=>import("./on-demand_streaming.html-6YNYtYZR.js"),__vite__mapDeps([29,30,1]))),"v-22d780d8":L(()=>h(()=>import("./play_url_rules.html-f7mxplY_.js"),__vite__mapDeps([31,1]))),"v-40777a42":L(()=>h(()=>import("./playback_authentication.html-3VR0HbK8.js"),__vite__mapDeps([32,33,1]))),"v-1c8baf7e":L(()=>h(()=>import("./push_authentication.html-8OJ18L-5.js"),__vite__mapDeps([34,35,1]))),"v-d003c332":L(()=>h(()=>import("./push_test.html-zDMue1Qy.js"),__vite__mapDeps([36,37,1]))),"v-992f244c":L(()=>h(()=>import("./restful_api.html-INg-XF77.js"),__vite__mapDeps([38,1]))),"v-1563923f":L(()=>h(()=>import("./sequence_diagram.html-SYfON6Mt.js"),__vite__mapDeps([39,1]))),"v-3f9e2b34":L(()=>h(()=>import("./start_server.html-yxCpNJvw.js"),__vite__mapDeps([40,41,1]))),"v-4436fd0b":L(()=>h(()=>import("./web_hook_api.html-OmnDRkZ1.js"),__vite__mapDeps([42,1]))),"v-fa0f55aa":L(()=>h(()=>import("./index.html-Wn9fL8rF.js"),__vite__mapDeps([43,1]))),"v-5d4ca3be":L(()=>h(()=>import("./index.html-9fZsvbS8.js"),__vite__mapDeps([44,1]))),"v-29126422":L(()=>h(()=>import("./how_to_create_a_live_steam.html-LWbU8h87.js"),__vite__mapDeps([45,46,1]))),"v-b1256428":L(()=>h(()=>import("./index.html-1UKx3tTB.js"),__vite__mapDeps([47,1]))),"v-099b9809":L(()=>h(()=>import("./hls_high_performance_journey.html-v74JJlub.js"),__vite__mapDeps([48,1]))),"v-c75d9fee":L(()=>h(()=>import("./rtsp_performance_optimization.html-TWn6Egp8.js"),__vite__mapDeps([49,1]))),"v-27716634":L(()=>h(()=>import("./index.html-plxXlLQP.js"),__vite__mapDeps([50,1]))),"v-3d1bfe27":L(()=>h(()=>import("./exclusive_features.html-t4K_S5d4.js"),__vite__mapDeps([51,1]))),"v-61f35635":L(()=>h(()=>import("./high_concurrency_implementation_principle.html-x1-J41yC.js"),__vite__mapDeps([52,1]))),"v-60e3ff20":L(()=>h(()=>import("./introduction_to_streaming_media_related_technologies.html-qLQLZbA3.js"),__vite__mapDeps([53,1]))),"v-716fbfe3":L(()=>h(()=>import("./rtsp_push_process.html-gk6hQwdn.js"),__vite__mapDeps([54,1]))),"v-159648d6":L(()=>h(()=>import("./the_nature_of_live_broadcast_delay.html-9a3MrQ9p.js"),__vite__mapDeps([55,1]))),"v-07cf6867":L(()=>h(()=>import("./index.html-0qJyAU8Q.js"),__vite__mapDeps([56,1]))),"v-2894bdb2":L(()=>h(()=>import("./dependency.html-IB8qgUUu.js"),__vite__mapDeps([57,1]))),"v-630bfad5":L(()=>h(()=>import("./rtmp_support_for_h265_and_opus.html-UXqjeTtH.js"),__vite__mapDeps([58,1]))),"v-a9be237a":L(()=>h(()=>import("./video_conferencing_related_resources.html-cJ9at7Xc.js"),__vite__mapDeps([59,1]))),"v-770cb196":L(()=>h(()=>import("./zltoolkit_source_code_study_notes.html-JWQ-N5Wz.js"),__vite__mapDeps([60,1]))),"v-60c5ec00":L(()=>h(()=>import("./index.html-8kcJLd-q.js"),__vite__mapDeps([61,1]))),"v-7cf84008":L(()=>h(()=>import("./benchmark.html-PVLgEM3u.js"),__vite__mapDeps([62,1]))),"v-d8f6ac6a":L(()=>h(()=>import("./delay_test.html-jKr5-1Rj.js"),__vite__mapDeps([63,1]))),"v-adc6a8e4":L(()=>h(()=>import("./how_to_test_delay.html-P7CoGGgx.js"),__vite__mapDeps([64,1]))),"v-ea3f92ca":L(()=>h(()=>import("./online_test.html-UiWsenDR.js"),__vite__mapDeps([65,1]))),"v-210a0a78":L(()=>h(()=>import("./performance_testing.html-Cgq3dIgv.js"),__vite__mapDeps([66,1]))),"v-27157219":L(()=>h(()=>import("./rtmp_pull_stream_performance_test.html-hMTKB3GA.js"),__vite__mapDeps([67,1]))),"v-927f8538":L(()=>h(()=>import("./rtmp_push_stream_performance_test.html-LfVKdEym.js"),__vite__mapDeps([68,1]))),"v-3ede775a":L(()=>h(()=>import("./rtsp_pull_stream_performance_test.html-KdEDWBLu.js"),__vite__mapDeps([69,1]))),"v-703b8f9e":L(()=>h(()=>import("./rtsp_push_stream_performance_test.html-zFl0_4_8.js"),__vite__mapDeps([70,1]))),"v-47357bdb":L(()=>h(()=>import("./index.html-B81jBW2G.js"),__vite__mapDeps([71,1]))),"v-0a3cd263":L(()=>h(()=>import("./collaborative_projects.html-19-TEwrL.js"),__vite__mapDeps([72,1]))),"v-8b20cdea":L(()=>h(()=>import("./contact.html-JAOAqjBA.js"),__vite__mapDeps([73,1]))),"v-633bb4ec":L(()=>h(()=>import("./license.html-vCBKTTMs.js"),__vite__mapDeps([74,1]))),"v-4bf4651e":L(()=>h(()=>import("./thanks.html-7ORVp6Jc.js"),__vite__mapDeps([75,1]))),"v-7dceae00":L(()=>h(()=>import("./use_cases.html-Ztr99Hiu.js"),__vite__mapDeps([76,1]))),"v-ec228f2e":L(()=>h(()=>import("./index.html-4w7NJvOq.js"),__vite__mapDeps([77,9,1]))),"v-cb3c3b8e":L(()=>h(()=>import("./gb28181_sip_signaling_packet_capture.html-z_vnDm71.js"),__vite__mapDeps([78,1]))),"v-6fbaec55":L(()=>h(()=>import("./how_to_use_device_id_as_stream_id.html-yxD34jok.js"),__vite__mapDeps([79,80,1]))),"v-079ebd6a":L(()=>h(()=>import("./push_streaming.html-o6HXGEGb.js"),__vite__mapDeps([81,82,1]))),"v-114c6ef6":L(()=>h(()=>import("./index.html-XHP9LdII.js"),__vite__mapDeps([83,1]))),"v-d73f5e1e":L(()=>h(()=>import("./webrtc_compilation_and_use.html-EzMJU7Jv.js"),__vite__mapDeps([84,1]))),"v-284ed9d6":L(()=>h(()=>import("./webrtc_signaling_interaction_format.html-QfhUllLQ.js"),__vite__mapDeps([85,1]))),"v-515bc4e7":L(()=>h(()=>import("./index.html-LudGOU3A.js"),__vite__mapDeps([86,1]))),"v-e1a99f30":L(()=>h(()=>import("./oncetoken.html-VjVkUYP3.js"),__vite__mapDeps([87,1]))),"v-763dee34":L(()=>h(()=>import("./index.html-4MOf5u_i.js"),__vite__mapDeps([88,1]))),"v-6ff7e8b5":L(()=>h(()=>import("./not_recommended_qq.html-CiG918se.js"),__vite__mapDeps([89,1]))),"v-75521352":L(()=>h(()=>import("./rtmp_playback_compatibility_issues.html-wBkT5hGE.js"),__vite__mapDeps([90,1]))),"v-1b2bfecf":L(()=>h(()=>import("./index.html-ocl34mDF.js"),__vite__mapDeps([91,1]))),"v-3c49c43c":L(()=>h(()=>import("./compilation_instructions_for_windows_version.html-d1DmfQc5.js"),__vite__mapDeps([92,1]))),"v-2139c386":L(()=>h(()=>import("./install_zlmediakit_using_vcpkg.html-NCcA9KPG.js"),__vite__mapDeps([93,19,1]))),"v-4f36f1c6":L(()=>h(()=>import("./start.html-KblEw28K.js"),__vite__mapDeps([94,9,1]))),"v-7ac6e814":L(()=>h(()=>import("./index.html-IZsaCX79.js"),__vite__mapDeps([95,1]))),"v-76640c16":L(()=>h(()=>import("./config_file.html-v84_YU9d.js"),__vite__mapDeps([96,1]))),"v-04c98dae":L(()=>h(()=>import("./generate_ssl_self-signed_certificate_and_test.html-tLIkOOZS.js"),__vite__mapDeps([97,24,1]))),"v-fc02997a":L(()=>h(()=>import("./how_to_enable_https_related_functions.html-pBy5oO-R.js"),__vite__mapDeps([98,26,1]))),"v-60a95200":L(()=>h(()=>import("./on-demand_push_streaming.html-efCX-3qM.js"),__vite__mapDeps([99,28,1]))),"v-b991029a":L(()=>h(()=>import("./on-demand_streaming.html-yNrWu3de.js"),__vite__mapDeps([100,30,1]))),"v-78eb47c7":L(()=>h(()=>import("./play_url_rules.html-OaEuncfX.js"),__vite__mapDeps([101,1]))),"v-2459df9a":L(()=>h(()=>import("./playback_authentication.html-4kXdTj5T.js"),__vite__mapDeps([102,33,1]))),"v-322f429c":L(()=>h(()=>import("./push_authentication.html-Ov0yMs1o.js"),__vite__mapDeps([103,35,1]))),"v-c01103d0":L(()=>h(()=>import("./push_test.html-44HoghM7.js"),__vite__mapDeps([104,37,1]))),"v-baeeb56a":L(()=>h(()=>import("./restful_api.html-W3f4X4lL.js"),__vite__mapDeps([105,1]))),"v-35a1596e":L(()=>h(()=>import("./sequence_diagram.html-FlbOL2Y8.js"),__vite__mapDeps([106,1]))),"v-3484e1e3":L(()=>h(()=>import("./start_server.html-kjQal3He.js"),__vite__mapDeps([107,41,1]))),"v-391db3ba":L(()=>h(()=>import("./web_hook_api.html-QYXcFVoT.js"),__vite__mapDeps([108,1]))),"v-24dfef1c":L(()=>h(()=>import("./index.html-zeRiEjXy.js"),__vite__mapDeps([109,1]))),"v-7643e190":L(()=>h(()=>import("./index.html-ybOFrWXT.js"),__vite__mapDeps([110,1]))),"v-5a1c26c0":L(()=>h(()=>import("./how_to_create_a_live_steam.html-Q-m7tYG5.js"),__vite__mapDeps([111,46,1]))),"v-0938c35b":L(()=>h(()=>import("./index.html-HppSEYlS.js"),__vite__mapDeps([112,1]))),"v-5298cc7a":L(()=>h(()=>import("./hls_high_performance_journey.html-pNH0gpXw.js"),__vite__mapDeps([113,1]))),"v-72fa89b8":L(()=>h(()=>import("./rtsp_performance_optimization.html-TdeED4XC.js"),__vite__mapDeps([114,1]))),"v-4ea15ae3":L(()=>h(()=>import("./index.html-AIAMrVKp.js"),__vite__mapDeps([115,1]))),"v-324a3498":L(()=>h(()=>import("./exclusive_features.html-dQadFX3J.js"),__vite__mapDeps([116,1]))),"v-09d870a4":L(()=>h(()=>import("./high_concurrency_implementation_principle.html-FgHSxlv4.js"),__vite__mapDeps([117,1]))),"v-175b5aa1":L(()=>h(()=>import("./introduction_to_streaming_media_related_technologies.html-aLJXiBgK.js"),__vite__mapDeps([118,1]))),"v-79587752":L(()=>h(()=>import("./rtsp_push_process.html-zH-D_jAF.js"),__vite__mapDeps([119,1]))),"v-3e321006":L(()=>h(()=>import("./the_nature_of_live_broadcast_delay.html-wpUMkFJz.js"),__vite__mapDeps([120,1]))),"v-2eff5d16":L(()=>h(()=>import("./index.html-CKp0mPwh.js"),__vite__mapDeps([121,1]))),"v-4a544ed0":L(()=>h(()=>import("./dependency.html-gwWfr65O.js"),__vite__mapDeps([122,1]))),"v-2321e074":L(()=>h(()=>import("./rtmp_support_for_h265_and_opus.html-IiMCf774.js"),__vite__mapDeps([123,1]))),"v-acba6b18":L(()=>h(()=>import("./video_conferencing_related_resources.html-U1qNLSQN.js"),__vite__mapDeps([124,1]))),"v-164eab05":L(()=>h(()=>import("./zltoolkit_source_code_study_notes.html-ypL46AQc.js"),__vite__mapDeps([125,1]))),"v-7184a3f1":L(()=>h(()=>import("./index.html-2LWO62N7.js"),__vite__mapDeps([126,1]))),"v-3d3ac02d":L(()=>h(()=>import("./benchmark.html-vh5mU2vV.js"),__vite__mapDeps([127,1]))),"v-e2ac608c":L(()=>h(()=>import("./delay_test.html-QwzTearq.js"),__vite__mapDeps([128,1]))),"v-510ccabf":L(()=>h(()=>import("./how_to_test_delay.html-GLErIksL.js"),__vite__mapDeps([129,1]))),"v-174062e8":L(()=>h(()=>import("./online_test.html-_0lwAxTN.js"),__vite__mapDeps([130,1]))),"v-e521bd2e":L(()=>h(()=>import("./performance_testing.html-mjt6ZXJJ.js"),__vite__mapDeps([131,1]))),"v-1d29e16c":L(()=>h(()=>import("./rtmp_pull_stream_performance_test.html-ukcH42DI.js"),__vite__mapDeps([132,1]))),"v-fdd44ad6":L(()=>h(()=>import("./rtmp_push_stream_performance_test.html-4ywCdN8c.js"),__vite__mapDeps([133,1]))),"v-aa333cf8":L(()=>h(()=>import("./rtsp_pull_stream_performance_test.html-cK-OpNrS.js"),__vite__mapDeps([134,1]))),"v-3a912ccf":L(()=>h(()=>import("./rtsp_push_stream_performance_test.html-RMobzxOL.js"),__vite__mapDeps([135,1]))),"v-374e6730":L(()=>h(()=>import("./gb28181_sip_signaling_packet_capture.html-ZYkWywxi.js"),__vite__mapDeps([136,1]))),"v-6e3cc886":L(()=>h(()=>import("./how_to_use_device_id_as_stream_id.html-r5nxplI0.js"),__vite__mapDeps([137,80,1]))),"v-041958ba":L(()=>h(()=>import("./push_streaming.html-VOPU_Vgm.js"),__vite__mapDeps([138,82,1]))),"v-71ddfc14":L(()=>h(()=>import("./index.html-lKh2cFAq.js"),__vite__mapDeps([139,1]))),"v-5eb5ee22":L(()=>h(()=>import("./webrtc_compilation_and_use.html-ZhDB0Qu6.js"),__vite__mapDeps([140,1]))),"v-84db85f8":L(()=>h(()=>import("./webrtc_signaling_interaction_format.html-QJ72-nhn.js"),__vite__mapDeps([141,1]))),"v-3706649a":L(()=>h(()=>import("./404.html-GPYBV8Ha.js"),__vite__mapDeps([142,1]))),"v-14f73021":L(()=>h(()=>import("./index.html-6AFjdEoA.js"),__vite__mapDeps([143,1]))),"v-22a2f9fd":L(()=>h(()=>import("./index.html-35KxtpZI.js"),__vite__mapDeps([144,1]))),"v-2be85352":L(()=>h(()=>import("./index.html-ZukUTvpe.js"),__vite__mapDeps([145,1]))),"v-0f8c4891":L(()=>h(()=>import("./index.html-CmVSRxAE.js"),__vite__mapDeps([146,1]))),"v-35ba27b7":L(()=>h(()=>import("./index.html-aTnTwBPS.js"),__vite__mapDeps([147,1]))),"v-70e5a528":L(()=>h(()=>import("./index.html-hD6JZq1M.js"),__vite__mapDeps([148,1]))),"v-55376182":L(()=>h(()=>import("./index.html-D9OOw5jZ.js"),__vite__mapDeps([149,1]))),"v-50bfaca6":L(()=>h(()=>import("./index.html-c5z6Iek2.js"),__vite__mapDeps([150,1])))};var op=Symbol(""),Es=Symbol(""),ip=on({key:"",path:"",title:"",lang:"",frontmatter:{},headers:[]}),de=()=>{const e=_e(Es);if(!e)throw new Error("pageData() is called without provider.");return e},ws=Symbol(""),Pe=()=>{const e=_e(ws);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},Ts=Symbol(""),ap=()=>{const e=_e(Ts);if(!e)throw new Error("usePageHead() is called without provider.");return e},lp=Symbol(""),As=Symbol(""),Ii=()=>{const e=_e(As);if(!e)throw new Error("usePageLang() is called without provider.");return e},Ls=Symbol(""),sp=()=>{const e=_e(Ls);if(!e)throw new Error("usePageLayout() is called without provider.");return e},cp=ee(Qd),Oi=Symbol(""),ln=()=>{const e=_e(Oi);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},vn=ee(Jd),Ps=()=>vn,Rs=Symbol(""),no=()=>{const e=_e(Rs);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},up=Symbol(""),fp="Layout",dp="NotFound",At=dr({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageData:async e=>{const t=cp.value[e];return await(t==null?void 0:t())??ip},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,n)=>{const r=ue(t.description)?t.description:n.description,o=[...X(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:r}]];return ep(o)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:(e,t)=>e.lang||t.lang||"en-US",resolvePageLayout:(e,t)=>{let n;if(e.path){const r=e.frontmatter.layout;ue(r)?n=r:n=fp}else n=dp;return t[n]},resolveRouteLocale:(e,t)=>rp(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),ro=U({name:"ClientOnly",setup(e,t){const n=ee(!1);return ge(()=>{n.value=!0}),()=>{var r,o;return n.value?(o=(r=t.slots).default)==null?void 0:o.call(r):null}}}),Is=U({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=de(),n=I(()=>ys[e.pageKey||t.value.key]);return()=>n.value?f(n.value):f("div","404 Not Found")}}),at=(e={})=>e,Ve=e=>Mn(e)?e:`/${bs(e)}`;const pp={};/*! + * vue-router v4.2.5 + * (c) 2023 Eduardo San Martin Morote + * @license MIT + */const pn=typeof window<"u";function hp(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const pe=Object.assign;function Eo(e,t){const n={};for(const r in t){const o=t[r];n[r]=dt(o)?o.map(e):e(o)}return n}const Xn=()=>{},dt=Array.isArray,vp=/\/$/,mp=e=>e.replace(vp,"");function wo(e,t,n="/"){let r,o={},i="",a="";const l=t.indexOf("#");let s=t.indexOf("?");return l=0&&(s=-1),s>-1&&(r=t.slice(0,s),i=t.slice(s+1,l>-1?l:t.length),o=e(i)),l>-1&&(r=r||t.slice(0,l),a=t.slice(l,t.length)),r=yp(r??t,n),{fullPath:r+(i&&"?")+i+a,path:r,query:o,hash:a}}function _p(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function xa(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function gp(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&In(t.matched[r],n.matched[o])&&Os(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function In(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Os(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!bp(e[n],t[n]))return!1;return!0}function bp(e,t){return dt(e)?ka(e,t):dt(t)?ka(t,e):e===t}function ka(e,t){return dt(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function yp(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),o=r[r.length-1];(o===".."||o===".")&&r.push("");let i=n.length-1,a,l;for(a=0;a1&&i--;else break;return n.slice(0,i).join("/")+"/"+r.slice(a-(a===r.length?1:0)).join("/")}var sr;(function(e){e.pop="pop",e.push="push"})(sr||(sr={}));var er;(function(e){e.back="back",e.forward="forward",e.unknown=""})(er||(er={}));function Ep(e){if(!e)if(pn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),mp(e)}const wp=/^[^#]+#/;function Tp(e,t){return e.replace(wp,"#")+t}function Ap(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const oo=()=>({left:window.pageXOffset,top:window.pageYOffset});function Lp(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=Ap(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function Ca(e,t){return(history.state?history.state.position-t:-1)+e}const qo=new Map;function Pp(e,t){qo.set(e,t)}function Rp(e){const t=qo.get(e);return qo.delete(e),t}let Ip=()=>location.protocol+"//"+location.host;function xs(e,t){const{pathname:n,search:r,hash:o}=t,i=e.indexOf("#");if(i>-1){let l=o.includes(e.slice(i))?e.slice(i).length:1,s=o.slice(l);return s[0]!=="/"&&(s="/"+s),xa(s,"")}return xa(n,e)+r+o}function Op(e,t,n,r){let o=[],i=[],a=null;const l=({state:p})=>{const m=xs(e,location),g=n.value,w=t.value;let T=0;if(p){if(n.value=m,t.value=p,a&&a===g){a=null;return}T=w?p.position-w.position:0}else r(m);o.forEach(y=>{y(n.value,g,{delta:T,type:sr.pop,direction:T?T>0?er.forward:er.back:er.unknown})})};function s(){a=n.value}function c(p){o.push(p);const m=()=>{const g=o.indexOf(p);g>-1&&o.splice(g,1)};return i.push(m),m}function u(){const{history:p}=window;p.state&&p.replaceState(pe({},p.state,{scroll:oo()}),"")}function d(){for(const p of i)p();i=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",u)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",u,{passive:!0}),{pauseListeners:s,listen:c,destroy:d}}function Da(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?oo():null}}function xp(e){const{history:t,location:n}=window,r={value:xs(e,n)},o={value:t.state};o.value||i(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(s,c,u){const d=e.indexOf("#"),p=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+s:Ip()+e+s;try{t[u?"replaceState":"pushState"](c,"",p),o.value=c}catch(m){console.error(m),n[u?"replace":"assign"](p)}}function a(s,c){const u=pe({},t.state,Da(o.value.back,s,o.value.forward,!0),c,{position:o.value.position});i(s,u,!0),r.value=s}function l(s,c){const u=pe({},o.value,t.state,{forward:s,scroll:oo()});i(u.current,u,!0);const d=pe({},Da(r.value,s,null),{position:u.position+1},c);i(s,d,!1),r.value=s}return{location:r,state:o,push:l,replace:a}}function kp(e){e=Ep(e);const t=xp(e),n=Op(e,t.state,t.location,t.replace);function r(i,a=!0){a||n.pauseListeners(),history.go(i)}const o=pe({location:"",base:e,go:r,createHref:Tp.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function Cp(e){return typeof e=="string"||e&&typeof e=="object"}function ks(e){return typeof e=="string"||typeof e=="symbol"}const Lt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},Cs=Symbol("");var Sa;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Sa||(Sa={}));function On(e,t){return pe(new Error,{type:e,[Cs]:!0},t)}function wt(e,t){return e instanceof Error&&Cs in e&&(t==null||!!(e.type&t))}const Va="[^/]+?",Dp={sensitive:!1,strict:!1,start:!0,end:!0},Sp=/[.+*?^${}()[\]/\\]/g;function Vp(e,t){const n=pe({},Dp,t),r=[];let o=n.start?"^":"";const i=[];for(const c of e){const u=c.length?[]:[90];n.strict&&!c.length&&(o+="/");for(let d=0;dt.length?t.length===1&&t[0]===80?1:-1:0}function $p(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const Np={type:0,value:""},zp=/[a-zA-Z0-9_]/;function Bp(e){if(!e)return[[]];if(e==="/")return[[Np]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${c}": ${m}`)}let n=0,r=n;const o=[];let i;function a(){i&&o.push(i),i=[]}let l=0,s,c="",u="";function d(){c&&(n===0?i.push({type:0,value:c}):n===1||n===2||n===3?(i.length>1&&(s==="*"||s==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),i.push({type:1,value:c,regexp:u,repeatable:s==="*"||s==="+",optional:s==="*"||s==="?"})):t("Invalid state to consume buffer"),c="")}function p(){c+=s}for(;l{a(P)}:Xn}function a(u){if(ks(u)){const d=r.get(u);d&&(r.delete(u),n.splice(n.indexOf(d),1),d.children.forEach(a),d.alias.forEach(a))}else{const d=n.indexOf(u);d>-1&&(n.splice(d,1),u.record.name&&r.delete(u.record.name),u.children.forEach(a),u.alias.forEach(a))}}function l(){return n}function s(u){let d=0;for(;d=0&&(u.record.path!==n[d].record.path||!Ds(u,n[d]));)d++;n.splice(d,0,u),u.record.name&&!Na(u)&&r.set(u.record.name,u)}function c(u,d){let p,m={},g,w;if("name"in u&&u.name){if(p=r.get(u.name),!p)throw On(1,{location:u});w=p.record.name,m=pe($a(d.params,p.keys.filter(P=>!P.optional).map(P=>P.name)),u.params&&$a(u.params,p.keys.map(P=>P.name))),g=p.stringify(m)}else if("path"in u)g=u.path,p=n.find(P=>P.re.test(g)),p&&(m=p.parse(g),w=p.record.name);else{if(p=d.name?r.get(d.name):n.find(P=>P.re.test(d.path)),!p)throw On(1,{location:u,currentLocation:d});w=p.record.name,m=pe({},d.params,u.params),g=p.stringify(m)}const T=[];let y=p;for(;y;)T.unshift(y.record),y=y.parent;return{name:w,path:g,params:m,matched:T,meta:qp(T)}}return e.forEach(u=>i(u)),{addRoute:i,resolve:c,removeRoute:a,getRoutes:l,getRecordMatcher:o}}function $a(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function jp(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:Wp(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function Wp(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function Na(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function qp(e){return e.reduce((t,n)=>pe(t,n.meta),{})}function za(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function Ds(e,t){return t.children.some(n=>n===e||Ds(e,n))}const Ss=/#/g,Up=/&/g,Kp=/\//g,Gp=/=/g,Yp=/\?/g,Vs=/\+/g,Zp=/%5B/g,Qp=/%5D/g,Ms=/%5E/g,Jp=/%60/g,$s=/%7B/g,Xp=/%7C/g,Ns=/%7D/g,eh=/%20/g;function xi(e){return encodeURI(""+e).replace(Xp,"|").replace(Zp,"[").replace(Qp,"]")}function th(e){return xi(e).replace($s,"{").replace(Ns,"}").replace(Ms,"^")}function Uo(e){return xi(e).replace(Vs,"%2B").replace(eh,"+").replace(Ss,"%23").replace(Up,"%26").replace(Jp,"`").replace($s,"{").replace(Ns,"}").replace(Ms,"^")}function nh(e){return Uo(e).replace(Gp,"%3D")}function rh(e){return xi(e).replace(Ss,"%23").replace(Yp,"%3F")}function oh(e){return e==null?"":rh(e).replace(Kp,"%2F")}function qr(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function ih(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;oi&&Uo(i)):[r&&Uo(r)]).forEach(i=>{i!==void 0&&(t+=(t.length?"&":"")+n,i!=null&&(t+="="+i))})}return t}function ah(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=dt(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}const lh=Symbol(""),Fa=Symbol(""),io=Symbol(""),ki=Symbol(""),Ko=Symbol("");function jn(){let e=[];function t(r){return e.push(r),()=>{const o=e.indexOf(r);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Ft(e,t,n,r,o){const i=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((a,l)=>{const s=d=>{d===!1?l(On(4,{from:n,to:t})):d instanceof Error?l(d):Cp(d)?l(On(2,{from:t,to:d})):(i&&r.enterCallbacks[o]===i&&typeof d=="function"&&i.push(d),a())},c=e.call(r&&r.instances[o],t,n,s);let u=Promise.resolve(c);e.length<3&&(u=u.then(s)),u.catch(d=>l(d))})}function To(e,t,n,r){const o=[];for(const i of e)for(const a in i.components){let l=i.components[a];if(!(t!=="beforeRouteEnter"&&!i.instances[a]))if(sh(l)){const c=(l.__vccOpts||l)[t];c&&o.push(Ft(c,n,r,i,a))}else{let s=l();o.push(()=>s.then(c=>{if(!c)return Promise.reject(new Error(`Couldn't resolve component "${a}" at "${i.path}"`));const u=hp(c)?c.default:c;i.components[a]=u;const p=(u.__vccOpts||u)[t];return p&&Ft(p,n,r,i,a)()}))}}return o}function sh(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Go(e){const t=_e(io),n=_e(ki),r=I(()=>t.resolve(en(e.to))),o=I(()=>{const{matched:s}=r.value,{length:c}=s,u=s[c-1],d=n.matched;if(!u||!d.length)return-1;const p=d.findIndex(In.bind(null,u));if(p>-1)return p;const m=Ha(s[c-2]);return c>1&&Ha(u)===m&&d[d.length-1].path!==m?d.findIndex(In.bind(null,s[c-2])):p}),i=I(()=>o.value>-1&&dh(n.params,r.value.params)),a=I(()=>o.value>-1&&o.value===n.matched.length-1&&Os(n.params,r.value.params));function l(s={}){return fh(s)?t[en(e.replace)?"replace":"push"](en(e.to)).catch(Xn):Promise.resolve()}return{route:r,href:I(()=>r.value.href),isActive:i,isExactActive:a,navigate:l}}const ch=U({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Go,setup(e,{slots:t}){const n=dr(Go(e)),{options:r}=_e(io),o=I(()=>({[ja(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[ja(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&t.default(n);return e.custom?i:f("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},i)}}}),uh=ch;function fh(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function dh(e,t){for(const n in t){const r=t[n],o=e[n];if(typeof r=="string"){if(r!==o)return!1}else if(!dt(o)||o.length!==r.length||r.some((i,a)=>i!==o[a]))return!1}return!0}function Ha(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const ja=(e,t,n)=>e??t??n,ph=U({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=_e(Ko),o=I(()=>e.route||r.value),i=_e(Fa,0),a=I(()=>{let c=en(i);const{matched:u}=o.value;let d;for(;(d=u[c])&&!d.components;)c++;return c}),l=I(()=>o.value.matched[a.value]);tn(Fa,I(()=>a.value+1)),tn(lh,l),tn(Ko,o);const s=ee();return fe(()=>[s.value,l.value,e.name],([c,u,d],[p,m,g])=>{u&&(u.instances[d]=c,m&&m!==u&&c&&c===p&&(u.leaveGuards.size||(u.leaveGuards=m.leaveGuards),u.updateGuards.size||(u.updateGuards=m.updateGuards))),c&&u&&(!m||!In(u,m)||!p)&&(u.enterCallbacks[d]||[]).forEach(w=>w(c))},{flush:"post"}),()=>{const c=o.value,u=e.name,d=l.value,p=d&&d.components[u];if(!p)return Wa(n.default,{Component:p,route:c});const m=d.props[u],g=m?m===!0?c.params:typeof m=="function"?m(c):m:null,T=f(p,pe({},g,t,{onVnodeUnmounted:y=>{y.component.isUnmounted&&(d.instances[u]=null)},ref:s}));return Wa(n.default,{Component:T,route:c})||T}}});function Wa(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const zs=ph;function hh(e){const t=Hp(e.routes,e),n=e.parseQuery||ih,r=e.stringifyQuery||Ba,o=e.history,i=jn(),a=jn(),l=jn(),s=it(Lt);let c=Lt;pn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=Eo.bind(null,O=>""+O),d=Eo.bind(null,oh),p=Eo.bind(null,qr);function m(O,W){let z,Y;return ks(O)?(z=t.getRecordMatcher(O),Y=W):Y=O,t.addRoute(Y,z)}function g(O){const W=t.getRecordMatcher(O);W&&t.removeRoute(W)}function w(){return t.getRoutes().map(O=>O.record)}function T(O){return!!t.getRecordMatcher(O)}function y(O,W){if(W=pe({},W||s.value),typeof O=="string"){const E=wo(n,O,W.path),R=t.resolve({path:E.path},W),x=o.createHref(E.fullPath);return pe(E,R,{params:p(R.params),hash:qr(E.hash),redirectedFrom:void 0,href:x})}let z;if("path"in O)z=pe({},O,{path:wo(n,O.path,W.path).path});else{const E=pe({},O.params);for(const R in E)E[R]==null&&delete E[R];z=pe({},O,{params:d(E)}),W.params=d(W.params)}const Y=t.resolve(z,W),le=O.hash||"";Y.params=u(p(Y.params));const v=_p(r,pe({},O,{hash:th(le),path:Y.path})),_=o.createHref(v);return pe({fullPath:v,hash:le,query:r===Ba?ah(O.query):O.query||{}},Y,{redirectedFrom:void 0,href:_})}function P(O){return typeof O=="string"?wo(n,O,s.value.path):pe({},O)}function b(O,W){if(c!==O)return On(8,{from:W,to:O})}function A(O){return N(O)}function M(O){return A(pe(P(O),{replace:!0}))}function k(O){const W=O.matched[O.matched.length-1];if(W&&W.redirect){const{redirect:z}=W;let Y=typeof z=="function"?z(O):z;return typeof Y=="string"&&(Y=Y.includes("?")||Y.includes("#")?Y=P(Y):{path:Y},Y.params={}),pe({query:O.query,hash:O.hash,params:"path"in Y?{}:O.params},Y)}}function N(O,W){const z=c=y(O),Y=s.value,le=O.state,v=O.force,_=O.replace===!0,E=k(z);if(E)return N(pe(P(E),{state:typeof E=="object"?pe({},le,E.state):le,force:v,replace:_}),W||z);const R=z;R.redirectedFrom=W;let x;return!v&&gp(r,Y,z)&&(x=On(16,{to:R,from:Y}),Ye(Y,Y,!0,!1)),(x?Promise.resolve(x):B(R,Y)).catch(C=>wt(C)?wt(C,2)?C:pt(C):K(C,R,Y)).then(C=>{if(C){if(wt(C,2))return N(pe({replace:_},P(C.to),{state:typeof C.to=="object"?pe({},le,C.to.state):le,force:v}),W||R)}else C=H(R,Y,!0,_,le);return Z(R,Y,C),C})}function V(O,W){const z=b(O,W);return z?Promise.reject(z):Promise.resolve()}function S(O){const W=Et.values().next().value;return W&&typeof W.runWithContext=="function"?W.runWithContext(O):O()}function B(O,W){let z;const[Y,le,v]=vh(O,W);z=To(Y.reverse(),"beforeRouteLeave",O,W);for(const E of Y)E.leaveGuards.forEach(R=>{z.push(Ft(R,O,W))});const _=V.bind(null,O,W);return z.push(_),Ie(z).then(()=>{z=[];for(const E of i.list())z.push(Ft(E,O,W));return z.push(_),Ie(z)}).then(()=>{z=To(le,"beforeRouteUpdate",O,W);for(const E of le)E.updateGuards.forEach(R=>{z.push(Ft(R,O,W))});return z.push(_),Ie(z)}).then(()=>{z=[];for(const E of v)if(E.beforeEnter)if(dt(E.beforeEnter))for(const R of E.beforeEnter)z.push(Ft(R,O,W));else z.push(Ft(E.beforeEnter,O,W));return z.push(_),Ie(z)}).then(()=>(O.matched.forEach(E=>E.enterCallbacks={}),z=To(v,"beforeRouteEnter",O,W),z.push(_),Ie(z))).then(()=>{z=[];for(const E of a.list())z.push(Ft(E,O,W));return z.push(_),Ie(z)}).catch(E=>wt(E,8)?E:Promise.reject(E))}function Z(O,W,z){l.list().forEach(Y=>S(()=>Y(O,W,z)))}function H(O,W,z,Y,le){const v=b(O,W);if(v)return v;const _=W===Lt,E=pn?history.state:{};z&&(Y||_?o.replace(O.fullPath,pe({scroll:_&&E&&E.scroll},le)):o.push(O.fullPath,le)),s.value=O,Ye(O,W,z,_),pt()}let te;function we(){te||(te=o.listen((O,W,z)=>{if(!ht.listening)return;const Y=y(O),le=k(Y);if(le){N(pe(le,{replace:!0}),Y).catch(Xn);return}c=Y;const v=s.value;pn&&Pp(Ca(v.fullPath,z.delta),oo()),B(Y,v).catch(_=>wt(_,12)?_:wt(_,2)?(N(_.to,Y).then(E=>{wt(E,20)&&!z.delta&&z.type===sr.pop&&o.go(-1,!1)}).catch(Xn),Promise.reject()):(z.delta&&o.go(-z.delta,!1),K(_,Y,v))).then(_=>{_=_||H(Y,v,!1),_&&(z.delta&&!wt(_,8)?o.go(-z.delta,!1):z.type===sr.pop&&wt(_,20)&&o.go(-1,!1)),Z(Y,v,_)}).catch(Xn)}))}let ye=jn(),q=jn(),ne;function K(O,W,z){pt(O);const Y=q.list();return Y.length?Y.forEach(le=>le(O,W,z)):console.error(O),Promise.reject(O)}function Re(){return ne&&s.value!==Lt?Promise.resolve():new Promise((O,W)=>{ye.add([O,W])})}function pt(O){return ne||(ne=!O,we(),ye.list().forEach(([W,z])=>O?z(O):W()),ye.reset()),O}function Ye(O,W,z,Y){const{scrollBehavior:le}=e;if(!pn||!le)return Promise.resolve();const v=!z&&Rp(Ca(O.fullPath,0))||(Y||!z)&&history.state&&history.state.scroll||null;return an().then(()=>le(O,W,v)).then(_=>_&&Lp(_)).catch(_=>K(_,O,W))}const De=O=>o.go(O);let We;const Et=new Set,ht={currentRoute:s,listening:!0,addRoute:m,removeRoute:g,hasRoute:T,getRoutes:w,resolve:y,options:e,push:A,replace:M,go:De,back:()=>De(-1),forward:()=>De(1),beforeEach:i.add,beforeResolve:a.add,afterEach:l.add,onError:q.add,isReady:Re,install(O){const W=this;O.component("RouterLink",uh),O.component("RouterView",zs),O.config.globalProperties.$router=W,Object.defineProperty(O.config.globalProperties,"$route",{enumerable:!0,get:()=>en(s)}),pn&&!We&&s.value===Lt&&(We=!0,A(o.location).catch(le=>{}));const z={};for(const le in Lt)Object.defineProperty(z,le,{get:()=>s.value[le],enumerable:!0});O.provide(io,W),O.provide(ki,Ol(z)),O.provide(Ko,s);const Y=O.unmount;Et.add(O),O.unmount=function(){Et.delete(O),Et.size<1&&(c=Lt,te&&te(),te=null,s.value=Lt,We=!1,ne=!1),Y()}}};function Ie(O){return O.reduce((W,z)=>W.then(()=>S(z)),Promise.resolve())}return ht}function vh(e,t){const n=[],r=[],o=[],i=Math.max(t.matched.length,e.matched.length);for(let a=0;aIn(c,l))?r.push(l):n.push(l));const s=e.matched[a];s&&(t.matched.find(c=>In(c,s))||o.push(s))}return[n,r,o]}function Ge(){return _e(io)}function yt(){return _e(ki)}var Ne=Uint8Array,mn=Uint16Array,mh=Int32Array,Bs=new Ne([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Fs=new Ne([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),_h=new Ne([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Hs=function(e,t){for(var n=new mn(31),r=0;r<31;++r)n[r]=t+=1<>1|(be&21845)<<1;$t=($t&52428)>>2|($t&13107)<<2,$t=($t&61680)>>4|($t&3855)<<4,Yo[be]=(($t&65280)>>8|($t&255)<<8)>>1}var tr=function(e,t,n){for(var r=e.length,o=0,i=new mn(t);o>s]=c}else for(l=new mn(r),o=0;o>15-e[o]);return l},mr=new Ne(288);for(var be=0;be<144;++be)mr[be]=8;for(var be=144;be<256;++be)mr[be]=9;for(var be=256;be<280;++be)mr[be]=7;for(var be=280;be<288;++be)mr[be]=8;var qs=new Ne(32);for(var be=0;be<32;++be)qs[be]=5;var Eh=tr(mr,9,1),wh=tr(qs,5,1),Ao=function(e){for(var t=e[0],n=1;nt&&(t=e[n]);return t},st=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},Lo=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},Th=function(e){return(e+7)/8|0},Ci=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new Ne(e.subarray(t,n))},Ah=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],Je=function(e,t,n){var r=new Error(t||Ah[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,Je),!n)throw r;return r},Lh=function(e,t,n,r){var o=e.length,i=r?r.length:0;if(!o||t.f&&!t.l)return n||new Ne(0);var a=!n,l=a||t.i!=2,s=t.i;a&&(n=new Ne(o*3));var c=function(le){var v=n.length;if(le>v){var _=new Ne(Math.max(v*2,le));_.set(n),n=_}},u=t.f||0,d=t.p||0,p=t.b||0,m=t.l,g=t.d,w=t.m,T=t.n,y=o*8;do{if(!m){u=st(e,d,1);var P=st(e,d+1,3);if(d+=3,P)if(P==1)m=Eh,g=wh,w=9,T=5;else if(P==2){var k=st(e,d,31)+257,N=st(e,d+10,15)+4,V=k+st(e,d+5,31)+1;d+=14;for(var S=new Ne(V),B=new Ne(19),Z=0;Z>4;if(b<16)S[Z++]=b;else{var q=0,ne=0;for(b==16?(ne=3+st(e,d,3),d+=2,q=S[Z-1]):b==17?(ne=3+st(e,d,7),d+=3):b==18&&(ne=11+st(e,d,127),d+=7);ne--;)S[Z++]=q}}var K=S.subarray(0,k),Re=S.subarray(k);w=Ao(K),T=Ao(Re),m=tr(K,w,1),g=tr(Re,T,1)}else Je(1);else{var b=Th(d)+4,A=e[b-4]|e[b-3]<<8,M=b+A;if(M>o){s&&Je(0);break}l&&c(p+A),n.set(e.subarray(b,M),p),t.b=p+=A,t.p=d=M*8,t.f=u;continue}if(d>y){s&&Je(0);break}}l&&c(p+131072);for(var pt=(1<>4;if(d+=q&15,d>y){s&&Je(0);break}if(q||Je(2),We<256)n[p++]=We;else if(We==256){De=d,m=null;break}else{var Et=We-254;if(We>264){var Z=We-257,ht=Bs[Z];Et=st(e,d,(1<>4;Ie||Je(3),d+=Ie&15;var Re=yh[O];if(O>3){var ht=Fs[O];Re+=Lo(e,d)&(1<y){s&&Je(0);break}l&&c(p+131072);var W=p+Et;if(p>4>7||(e[0]<<8|e[1])%31)&&Je(6,"invalid zlib data"),(e[1]>>5&1)==+!t&&Je(6,"invalid zlib data: "+(e[1]&32?"need":"unexpected")+" dictionary"),(e[1]>>3&4)+2};function Ih(e,t){return Lh(e.subarray(Rh(e,t&&t.dictionary),-4),{i:2},t&&t.out,t&&t.dictionary)}var qa=typeof TextEncoder<"u"&&new TextEncoder,Zo=typeof TextDecoder<"u"&&new TextDecoder,Oh=0;try{Zo.decode(Ph,{stream:!0}),Oh=1}catch{}var xh=function(e){for(var t="",n=0;;){var r=e[n++],o=(r>127)+(r>223)+(r>239);if(n+o>e.length)return{s:t,r:Ci(e,n-1)};o?o==3?(r=((r&15)<<18|(e[n++]&63)<<12|(e[n++]&63)<<6|e[n++]&63)-65536,t+=String.fromCharCode(55296|r>>10,56320|r&1023)):o&1?t+=String.fromCharCode((r&31)<<6|e[n++]&63):t+=String.fromCharCode((r&15)<<12|(e[n++]&63)<<6|e[n++]&63):t+=String.fromCharCode(r)}};function kh(e,t){if(t){for(var n=new Ne(e.length),r=0;r>1)),a=0,l=function(u){i[a++]=u},r=0;ri.length){var s=new Ne(a+8+(o-r<<1));s.set(i),i=s}var c=e.charCodeAt(r);c<128||t?l(c):c<2048?(l(192|c>>6),l(128|c&63)):c>55295&&c<57344?(c=65536+(c&1047552)|e.charCodeAt(++r)&1023,l(240|c>>18),l(128|c>>12&63),l(128|c>>6&63),l(128|c&63)):(l(224|c>>12),l(128|c>>6&63),l(128|c&63))}return Ci(i,0,a)}function Ch(e,t){if(t){for(var n="",r=0;r{var r;return f("svg",{xmlns:"http://www.w3.org/2000/svg",class:["icon",`${e}-icon`],viewBox:"0 0 1024 1024",fill:t,"aria-label":`${e} icon`},(r=n.default)==null?void 0:r.call(n))};Ae.displayName="IconBase";const Di=({size:e=48,stroke:t=4,wrapper:n=!0,height:r=2*e})=>{const o=f("svg",{xmlns:"http://www.w3.org/2000/svg",width:e,height:e,preserveAspectRatio:"xMidYMid",viewBox:"25 25 50 50"},[f("animateTransform",{attributeName:"transform",type:"rotate",dur:"2s",keyTimes:"0;1",repeatCount:"indefinite",values:"0;360"}),f("circle",{cx:"50",cy:"50",r:"20",fill:"none",stroke:"currentColor","stroke-width":t,"stroke-linecap":"round"},[f("animate",{attributeName:"stroke-dasharray",dur:"1.5s",keyTimes:"0;0.5;1",repeatCount:"indefinite",values:"1,200;90,200;1,200"}),f("animate",{attributeName:"stroke-dashoffset",dur:"1.5s",keyTimes:"0;0.5;1",repeatCount:"indefinite",values:"0;-35px;-125px"})])]);return n?f("div",{class:"loading-icon-wrapper",style:`display:flex;align-items:center;justify-content:center;height:${r}px`},o):o};Di.displayName="LoadingIcon";const Us=(e,{slots:t})=>{var n;return(n=t.default)==null?void 0:n.call(t)},Dh=(e="")=>{if(e){if(typeof e=="number")return new Date(e);const t=Date.parse(e.toString());if(!Number.isNaN(t))return new Date(t)}return null},Ks=(e,t)=>{let n=1;for(let r=0;r>6;return n+=n<<3,n^=n>>11,n%t},Gs=Array.isArray,Sh=e=>typeof e=="function",Vh=e=>typeof e=="string";var Si=e=>/^(https?:)?\/\//.test(e),Mh=/.md((\?|#).*)?$/,$h=(e,t="/")=>!!(Si(e)||e.startsWith("/")&&!e.startsWith(t)&&!Mh.test(e)),Ys=e=>Object.prototype.toString.call(e)==="[object Object]";function Nh(){const e=ee(!1);return Vn()&&ge(()=>{e.value=!0}),e}function zh(e){return Nh(),I(()=>!!e())}const Bh=e=>typeof e=="function",Po=e=>typeof e=="number",kt=e=>typeof e=="string",xn=(e,t)=>kt(e)&&e.startsWith(t),fn=(e,t)=>kt(e)&&e.endsWith(t),Vi=Object.entries,Fh=Object.fromEntries,$n=Object.keys,Hh=e=>(e.endsWith(".md")&&(e=`${e.slice(0,-3)}.html`),!e.endsWith("/")&&!e.endsWith(".html")&&(e=`${e}.html`),e=e.replace(/(^|\/)(?:README|index).html$/i,"$1"),e),Zs=e=>{const[t,n=""]=e.split("#");return t?`${Hh(t)}${n?`#${n}`:""}`:e},Ua=e=>Ys(e)&&kt(e.name),Ka=(e,t=!1)=>e?Gs(e)?e.map(n=>kt(n)?{name:n}:Ua(n)?n:null).filter(n=>n!==null):kt(e)?[{name:e}]:Ua(e)?[e]:(console.error(`Expect "author" to be \`AuthorInfo[] | AuthorInfo | string[] | string ${t?"":"| false"} | undefined\`, but got`,e),[]):[],Qs=(e,t)=>{if(e){if(Gs(e)&&e.every(kt))return e;if(kt(e))return[e];console.error(`Expect ${t||"value"} to be \`string[] | string | undefined\`, but got`,e)}return[]},jh=e=>Qs(e,"category"),Wh=e=>Qs(e,"tag"),ao=e=>xn(e,"/"),Js=/#.*$/u,qh=e=>{const t=Js.exec(e);return t?t[0]:""},Ga=e=>decodeURI(e).replace(Js,"").replace(/(index)?\.html$/i,"").replace(/(README|index)?\.md$/i,""),Xs=(e,t)=>{if(t===void 0)return!1;const n=Ga(e.path),r=Ga(t),o=qh(t);return o?o===e.hash&&(!r||n===r):n===r},Ya=e=>{const t=atob(e);return Ch(Ih(kh(t,!0)))},Uh=e=>Si(e)?e:`https://github.com/${e}`,ec=e=>!Si(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,Ur=(e,...t)=>{const n=e.resolve(...t),r=n.matched[n.matched.length-1];if(!(r!=null&&r.redirect))return n;const{redirect:o}=r,i=Sh(o)?o(n):o,a=Vh(i)?{path:i}:i;return Ur(e,{hash:n.hash,query:n.query,params:n.params,...a})},Kh=e=>{var t;if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)&&!(e.currentTarget&&((t=e.currentTarget.getAttribute("target"))!=null&&t.match(/\b_blank\b/i))))return e.preventDefault(),!0},et=({to:e="",class:t="",...n},{slots:r})=>{var l;const o=Ge(),i=Zs(e),a=(s={})=>Kh(s)?o.push(e).catch():Promise.resolve();return f("a",{...n,class:["vp-link",t],href:xn(i,"/")?Ve(i):i,onClick:a},(l=r.default)==null?void 0:l.call(r))};et.displayName="VPLink";const tc=()=>f(Ae,{name:"github"},()=>f("path",{d:"M511.957 21.333C241.024 21.333 21.333 240.981 21.333 512c0 216.832 140.544 400.725 335.574 465.664 24.49 4.395 32.256-10.07 32.256-23.083 0-11.69.256-44.245 0-85.205-136.448 29.61-164.736-64.64-164.736-64.64-22.315-56.704-54.4-71.765-54.4-71.765-44.587-30.464 3.285-29.824 3.285-29.824 49.195 3.413 75.179 50.517 75.179 50.517 43.776 75.008 114.816 53.333 142.762 40.79 4.523-31.66 17.152-53.377 31.19-65.537-108.971-12.458-223.488-54.485-223.488-242.602 0-53.547 19.114-97.323 50.517-131.67-5.035-12.33-21.93-62.293 4.779-129.834 0 0 41.258-13.184 134.912 50.346a469.803 469.803 0 0 1 122.88-16.554c41.642.213 83.626 5.632 122.88 16.554 93.653-63.488 134.784-50.346 134.784-50.346 26.752 67.541 9.898 117.504 4.864 129.834 31.402 34.347 50.474 78.123 50.474 131.67 0 188.586-114.73 230.016-224.042 242.09 17.578 15.232 33.578 44.672 33.578 90.454v135.85c0 13.142 7.936 27.606 32.854 22.87C862.25 912.597 1002.667 728.747 1002.667 512c0-271.019-219.648-490.667-490.71-490.667z"}));tc.displayName="GitHubIcon";const nc=()=>f(Ae,{name:"gitlab"},()=>f("path",{d:"M229.333 78.688C223.52 62 199.895 62 193.895 78.688L87.958 406.438h247.5c-.188 0-106.125-327.75-106.125-327.75zM33.77 571.438c-4.875 15 .563 31.687 13.313 41.25l464.812 345L87.77 406.438zm301.5-165 176.813 551.25 176.812-551.25zm655.125 165-54-165-424.312 551.25 464.812-345c12.938-9.563 18.188-26.25 13.5-41.25zM830.27 78.688c-5.812-16.688-29.437-16.688-35.437 0l-106.125 327.75h247.5z"}));nc.displayName="GitLabIcon";const rc=()=>f(Ae,{name:"gitee"},()=>f("path",{d:"M512 992C246.92 992 32 777.08 32 512S246.92 32 512 32s480 214.92 480 480-214.92 480-480 480zm242.97-533.34H482.39a23.7 23.7 0 0 0-23.7 23.7l-.03 59.28c0 13.08 10.59 23.7 23.7 23.7h165.96a23.7 23.7 0 0 1 23.7 23.7v11.85a71.1 71.1 0 0 1-71.1 71.1H375.71a23.7 23.7 0 0 1-23.7-23.7V423.11a71.1 71.1 0 0 1 71.1-71.1h331.8a23.7 23.7 0 0 0 23.7-23.7l.06-59.25a23.73 23.73 0 0 0-23.7-23.73H423.11a177.78 177.78 0 0 0-177.78 177.75v331.83c0 13.08 10.62 23.7 23.7 23.7h349.62a159.99 159.99 0 0 0 159.99-159.99V482.33a23.7 23.7 0 0 0-23.7-23.7z"}));rc.displayName="GiteeIcon";const oc=()=>f(Ae,{name:"bitbucket"},()=>f("path",{d:"M575.256 490.862c6.29 47.981-52.005 85.723-92.563 61.147-45.714-20.004-45.714-92.562-1.133-113.152 38.29-23.442 93.696 7.424 93.696 52.005zm63.451-11.996c-10.276-81.152-102.29-134.839-177.152-101.156-47.433 21.138-79.433 71.424-77.129 124.562 2.853 69.705 69.157 126.866 138.862 120.576S647.3 548.571 638.708 478.83zm136.558-309.723c-25.161-33.134-67.986-38.839-105.728-45.13-106.862-17.151-216.576-17.7-323.438 1.134-35.438 5.706-75.447 11.996-97.719 43.996 36.572 34.304 88.576 39.424 135.424 45.129 84.553 10.862 171.447 11.447 256 .585 47.433-5.705 99.987-10.276 135.424-45.714zm32.585 591.433c-16.018 55.99-6.839 131.438-66.304 163.986-102.29 56.576-226.304 62.867-338.87 42.862-59.43-10.862-129.135-29.696-161.72-85.723-14.3-54.858-23.442-110.848-32.585-166.84l3.438-9.142 10.276-5.157c170.277 112.567 408.576 112.567 579.438 0 26.844 8.01 6.84 40.558 6.29 60.014zm103.424-549.157c-19.42 125.148-41.728 249.71-63.415 374.272-6.29 36.572-41.728 57.162-71.424 72.558-106.862 53.724-231.424 62.866-348.562 50.286-79.433-8.558-160.585-29.696-225.134-79.433-30.28-23.443-30.28-63.415-35.986-97.134-20.005-117.138-42.862-234.277-57.161-352.585 6.839-51.42 64.585-73.728 107.447-89.71 57.16-21.138 118.272-30.866 178.87-36.571 129.134-12.58 261.157-8.01 386.304 28.562 44.581 13.13 92.563 31.415 122.844 69.705 13.714 17.7 9.143 40.01 6.29 60.014z"}));oc.displayName="BitbucketIcon";const ic=()=>f(Ae,{name:"source"},()=>f("path",{d:"M601.92 475.2c0 76.428-8.91 83.754-28.512 99.594-14.652 11.88-43.956 14.058-78.012 16.434-18.81 1.386-40.392 2.97-62.172 6.534-18.612 2.97-36.432 9.306-53.064 17.424V299.772c37.818-21.978 63.36-62.766 63.36-109.692 0-69.894-56.826-126.72-126.72-126.72S190.08 120.186 190.08 190.08c0 46.926 25.542 87.714 63.36 109.692v414.216c-37.818 21.978-63.36 62.766-63.36 109.692 0 69.894 56.826 126.72 126.72 126.72s126.72-56.826 126.72-126.72c0-31.086-11.286-59.598-29.7-81.576 13.266-9.504 27.522-17.226 39.996-19.206 16.038-2.574 32.868-3.762 50.688-5.148 48.312-3.366 103.158-7.326 148.896-44.55 61.182-49.698 74.25-103.158 75.24-187.902V475.2h-126.72zM316.8 126.72c34.848 0 63.36 28.512 63.36 63.36s-28.512 63.36-63.36 63.36-63.36-28.512-63.36-63.36 28.512-63.36 63.36-63.36zm0 760.32c-34.848 0-63.36-28.512-63.36-63.36s28.512-63.36 63.36-63.36 63.36 28.512 63.36 63.36-28.512 63.36-63.36 63.36zM823.68 158.4h-95.04V63.36h-126.72v95.04h-95.04v126.72h95.04v95.04h126.72v-95.04h95.04z"}));ic.displayName="SourceIcon";const Ot=(e,t)=>{var r;const n=(r=(t==null?void 0:t._instance)||Vn())==null?void 0:r.appContext.components;return n?e in n||ot(e)in n||fr(ot(e))in n:!1},Gh=()=>zh(()=>typeof window<"u"&&window.navigator&&"userAgent"in window.navigator),Yh=()=>{const e=Gh();return I(()=>e.value&&/\b(?:Android|iPhone)/i.test(navigator.userAgent))},Nn=e=>{const t=ln();return I(()=>e[t.value])};function Za(e,t){var n;const r=it();return Hl(()=>{r.value=e()},{...t,flush:(n=t==null?void 0:t.flush)!=null?n:"sync"}),on(r)}function lo(e,t){let n,r,o;const i=ee(!0),a=()=>{i.value=!0,o()};fe(e,a,{flush:"sync"});const l=typeof t=="function"?t:t.get,s=typeof t=="function"?void 0:t.set,c=Sl((u,d)=>(r=u,o=d,{get(){return i.value&&(n=l(),i.value=!1),r(),n},set(p){s==null||s(p)}}));return Object.isExtensible(c)&&(c.trigger=a),c}function sn(e){return gl()?(Du(e),!0):!1}function ze(e){return typeof e=="function"?e():en(e)}const _r=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Zh=Object.prototype.toString,Qh=e=>Zh.call(e)==="[object Object]",cr=()=>{},Qa=Jh();function Jh(){var e,t;return _r&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function ac(e,t){function n(...r){return new Promise((o,i)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(o).catch(i)})}return n}const lc=e=>e();function Xh(e,t=!0,n=!0,r=!1){let o=0,i,a=!0,l=cr,s;const c=()=>{i&&(clearTimeout(i),i=void 0,l(),l=cr)};return d=>{const p=ze(e),m=Date.now()-o,g=()=>s=d();return c(),p<=0?(o=Date.now(),g()):(m>p&&(n||!a)?(o=Date.now(),g()):t&&(s=new Promise((w,T)=>{l=r?T:w,i=setTimeout(()=>{o=Date.now(),a=!0,w(g()),c()},Math.max(0,p-m))})),!n&&!i&&(i=setTimeout(()=>a=!0,p)),a=!1,s)}}function ev(e=lc){const t=ee(!0);function n(){t.value=!1}function r(){t.value=!0}const o=(...i)=>{t.value&&e(...i)};return{isActive:on(t),pause:n,resume:r,eventFilter:o}}function tv(e){let t;function n(){return t||(t=e()),t}return n.reset=async()=>{const r=t;t=void 0,r&&await r},n}function sc(e){return e||Vn()}function nv(...e){if(e.length!==1)return Qr(...e);const t=e[0];return typeof t=="function"?on(Sl(()=>({get:t,set:cr}))):ee(t)}function rv(e,t=200,n=!1,r=!0,o=!1){return ac(Xh(t,n,r,o),e)}function ov(e,t,n={}){const{eventFilter:r=lc,...o}=n;return fe(e,ac(r,t),o)}function iv(e,t,n={}){const{eventFilter:r,...o}=n,{eventFilter:i,pause:a,resume:l,isActive:s}=ev(r);return{stop:ov(e,t,{...o,eventFilter:i}),pause:a,resume:l,isActive:s}}function so(e,t=!0,n){const r=sc(n);r?ge(e,r):t?e():an(e)}function av(e,t){const n=sc(t);n&&vr(e,n)}function lv(e,t,n={}){const{immediate:r=!0}=n,o=ee(!1);let i=null;function a(){i&&(clearTimeout(i),i=null)}function l(){o.value=!1,a()}function s(...c){a(),o.value=!0,i=setTimeout(()=>{o.value=!1,i=null,e(...c)},ze(t))}return r&&(o.value=!0,_r&&s()),sn(l),{isPending:on(o),start:s,stop:l}}function Ja(e=!1,t={}){const{truthyValue:n=!0,falsyValue:r=!1}=t,o=Ce(e),i=ee(e);function a(l){if(arguments.length)return i.value=l,i.value;{const s=ze(n);return i.value=i.value===s?ze(r):s,i.value}}return o?a:[i,a]}function gt(e){var t;const n=ze(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Ct=_r?window:void 0,cc=_r?window.document:void 0,uc=_r?window.navigator:void 0;function Me(...e){let t,n,r,o;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,o]=e,t=Ct):[t,n,r,o]=e,!t)return cr;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const i=[],a=()=>{i.forEach(u=>u()),i.length=0},l=(u,d,p,m)=>(u.addEventListener(d,p,m),()=>u.removeEventListener(d,p,m)),s=fe(()=>[gt(t),ze(o)],([u,d])=>{if(a(),!u)return;const p=Qh(d)?{...d}:d;i.push(...n.flatMap(m=>r.map(g=>l(u,m,g,p))))},{immediate:!0,flush:"post"}),c=()=>{s(),a()};return sn(c),c}function sv(){const e=ee(!1);return Vn()&&ge(()=>{e.value=!0}),e}function zn(e){const t=sv();return I(()=>(t.value,!!e()))}function fc(e,t={}){const{window:n=Ct}=t,r=zn(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const i=ee(!1),a=c=>{i.value=c.matches},l=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",a):o.removeListener(a))},s=Hl(()=>{r.value&&(l(),o=n.matchMedia(ze(e)),"addEventListener"in o?o.addEventListener("change",a):o.addListener(a),i.value=o.matches)});return sn(()=>{s(),l(),o=void 0}),i}function Xa(e,t={}){const{controls:n=!1,navigator:r=uc}=t,o=zn(()=>r&&"permissions"in r);let i;const a=typeof e=="string"?{name:e}:e,l=ee(),s=()=>{i&&(l.value=i.state)},c=tv(async()=>{if(o.value){if(!i)try{i=await r.permissions.query(a),Me(i,"change",s),s()}catch{l.value="prompt"}return i}});return c(),n?{state:l,isSupported:o,query:c}:l}function cv(e={}){const{navigator:t=uc,read:n=!1,source:r,copiedDuring:o=1500,legacy:i=!1}=e,a=zn(()=>t&&"clipboard"in t),l=Xa("clipboard-read"),s=Xa("clipboard-write"),c=I(()=>a.value||i),u=ee(""),d=ee(!1),p=lv(()=>d.value=!1,o);function m(){a.value&&l.value!=="denied"?t.clipboard.readText().then(y=>{u.value=y}):u.value=T()}c.value&&n&&Me(["copy","cut"],m);async function g(y=ze(r)){c.value&&y!=null&&(a.value&&s.value!=="denied"?await t.clipboard.writeText(y):w(y),u.value=y,d.value=!0,p.start())}function w(y){const P=document.createElement("textarea");P.value=y??"",P.style.position="absolute",P.style.opacity="0",document.body.appendChild(P),P.select(),document.execCommand("copy"),P.remove()}function T(){var y,P,b;return(b=(P=(y=document==null?void 0:document.getSelection)==null?void 0:y.call(document))==null?void 0:P.toString())!=null?b:""}return{isSupported:c,text:u,copied:d,copy:g}}const Or=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},xr="__vueuse_ssr_handlers__",uv=fv();function fv(){return xr in Or||(Or[xr]=Or[xr]||{}),Or[xr]}function dv(e,t){return uv[e]||t}function pv(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const hv={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},el="vueuse-storage";function dc(e,t,n,r={}){var o;const{flush:i="pre",deep:a=!0,listenToStorageChanges:l=!0,writeDefaults:s=!0,mergeDefaults:c=!1,shallow:u,window:d=Ct,eventFilter:p,onError:m=S=>{console.error(S)},initOnMounted:g}=r,w=(u?it:ee)(typeof t=="function"?t():t);if(!n)try{n=dv("getDefaultStorage",()=>{var S;return(S=Ct)==null?void 0:S.localStorage})()}catch(S){m(S)}if(!n)return w;const T=ze(t),y=pv(T),P=(o=r.serializer)!=null?o:hv[y],{pause:b,resume:A}=iv(w,()=>M(w.value),{flush:i,deep:a,eventFilter:p});return d&&l&&so(()=>{Me(d,"storage",V),Me(d,el,N),g&&V()}),g||V(),w;function M(S){try{if(S==null)n.removeItem(e);else{const B=P.write(S),Z=n.getItem(e);Z!==B&&(n.setItem(e,B),d&&d.dispatchEvent(new CustomEvent(el,{detail:{key:e,oldValue:Z,newValue:B,storageArea:n}})))}}catch(B){m(B)}}function k(S){const B=S?S.newValue:n.getItem(e);if(B==null)return s&&T!=null&&n.setItem(e,P.write(T)),T;if(!S&&c){const Z=P.read(B);return typeof c=="function"?c(Z,T):y==="object"&&!Array.isArray(Z)?{...T,...Z}:Z}else return typeof B!="string"?B:P.read(B)}function N(S){V(S.detail)}function V(S){if(!(S&&S.storageArea!==n)){if(S&&S.key==null){w.value=T;return}if(!(S&&S.key!==e)){b();try{(S==null?void 0:S.newValue)!==P.write(w.value)&&(w.value=k(S))}catch(B){m(B)}finally{S?an(A):A()}}}}}function vv(e){return fc("(prefers-color-scheme: dark)",e)}function mv(e,t,n={}){const{window:r=Ct,...o}=n;let i;const a=zn(()=>r&&"MutationObserver"in r),l=()=>{i&&(i.disconnect(),i=void 0)},s=fe(()=>gt(e),d=>{l(),a.value&&r&&d&&(i=new MutationObserver(t),i.observe(d,o))},{immediate:!0}),c=()=>i==null?void 0:i.takeRecords(),u=()=>{l(),s()};return sn(u),{isSupported:a,stop:u,takeRecords:c}}function _v(e,t,n={}){const{window:r=Ct,...o}=n;let i;const a=zn(()=>r&&"ResizeObserver"in r),l=()=>{i&&(i.disconnect(),i=void 0)},s=I(()=>Array.isArray(e)?e.map(d=>gt(d)):[gt(e)]),c=fe(s,d=>{if(l(),a.value&&r){i=new ResizeObserver(t);for(const p of d)p&&i.observe(p,o)}},{immediate:!0,flush:"post",deep:!0}),u=()=>{l(),c()};return sn(u),{isSupported:a,stop:u}}function gv(e,t={width:0,height:0},n={}){const{window:r=Ct,box:o="content-box"}=n,i=I(()=>{var d,p;return(p=(d=gt(e))==null?void 0:d.namespaceURI)==null?void 0:p.includes("svg")}),a=ee(t.width),l=ee(t.height),{stop:s}=_v(e,([d])=>{const p=o==="border-box"?d.borderBoxSize:o==="content-box"?d.contentBoxSize:d.devicePixelContentBoxSize;if(r&&i.value){const m=gt(e);if(m){const g=r.getComputedStyle(m);a.value=Number.parseFloat(g.width),l.value=Number.parseFloat(g.height)}}else if(p){const m=Array.isArray(p)?p:[p];a.value=m.reduce((g,{inlineSize:w})=>g+w,0),l.value=m.reduce((g,{blockSize:w})=>g+w,0)}else a.value=d.contentRect.width,l.value=d.contentRect.height},n);so(()=>{const d=gt(e);d&&(a.value="offsetWidth"in d?d.offsetWidth:t.width,l.value="offsetHeight"in d?d.offsetHeight:t.height)});const c=fe(()=>gt(e),d=>{a.value=d?t.width:0,l.value=d?t.height:0});function u(){s(),c()}return{width:a,height:l,stop:u}}const tl=["fullscreenchange","webkitfullscreenchange","webkitendfullscreen","mozfullscreenchange","MSFullscreenChange"];function Mi(e,t={}){const{document:n=cc,autoExit:r=!1}=t,o=I(()=>{var y;return(y=gt(e))!=null?y:n==null?void 0:n.querySelector("html")}),i=ee(!1),a=I(()=>["requestFullscreen","webkitRequestFullscreen","webkitEnterFullscreen","webkitEnterFullScreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen"].find(y=>n&&y in n||o.value&&y in o.value)),l=I(()=>["exitFullscreen","webkitExitFullscreen","webkitExitFullScreen","webkitCancelFullScreen","mozCancelFullScreen","msExitFullscreen"].find(y=>n&&y in n||o.value&&y in o.value)),s=I(()=>["fullScreen","webkitIsFullScreen","webkitDisplayingFullscreen","mozFullScreen","msFullscreenElement"].find(y=>n&&y in n||o.value&&y in o.value)),c=["fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement"].find(y=>n&&y in n),u=zn(()=>o.value&&n&&a.value!==void 0&&l.value!==void 0&&s.value!==void 0),d=()=>c?(n==null?void 0:n[c])===o.value:!1,p=()=>{if(s.value){if(n&&n[s.value]!=null)return n[s.value];{const y=o.value;if((y==null?void 0:y[s.value])!=null)return!!y[s.value]}}return!1};async function m(){if(!(!u.value||!i.value)){if(l.value)if((n==null?void 0:n[l.value])!=null)await n[l.value]();else{const y=o.value;(y==null?void 0:y[l.value])!=null&&await y[l.value]()}i.value=!1}}async function g(){if(!u.value||i.value)return;p()&&await m();const y=o.value;a.value&&(y==null?void 0:y[a.value])!=null&&(await y[a.value](),i.value=!0)}async function w(){await(i.value?m():g())}const T=()=>{const y=p();(!y||y&&d())&&(i.value=y)};return Me(n,tl,T,!1),Me(()=>gt(o),tl,T,!1),r&&sn(m),{isSupported:u,isFullscreen:i,enter:g,exit:m,toggle:w}}function Ro(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Io(e,t=cr,n={}){const{immediate:r=!0,manual:o=!1,type:i="text/javascript",async:a=!0,crossOrigin:l,referrerPolicy:s,noModule:c,defer:u,document:d=cc,attrs:p={}}=n,m=ee(null);let g=null;const w=P=>new Promise((b,A)=>{const M=V=>(m.value=V,b(V),V);if(!d){b(!1);return}let k=!1,N=d.querySelector(`script[src="${ze(e)}"]`);N?N.hasAttribute("data-loaded")&&M(N):(N=d.createElement("script"),N.type=i,N.async=a,N.src=ze(e),u&&(N.defer=u),l&&(N.crossOrigin=l),c&&(N.noModule=c),s&&(N.referrerPolicy=s),Object.entries(p).forEach(([V,S])=>N==null?void 0:N.setAttribute(V,S)),k=!0),N.addEventListener("error",V=>A(V)),N.addEventListener("abort",V=>A(V)),N.addEventListener("load",()=>{N.setAttribute("data-loaded","true"),t(N),M(N)}),k&&(N=d.head.appendChild(N)),P||M(N)}),T=(P=!0)=>(g||(g=w(P)),g),y=()=>{if(!d)return;g=null,m.value&&(m.value=null);const P=d.querySelector(`script[src="${ze(e)}"]`);P&&d.head.removeChild(P)};return r&&!o&&so(T),o||av(y),{scriptTag:m,load:T,unload:y}}function pc(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const kr=new WeakMap;function hc(e,t=!1){const n=ee(t);let r=null,o;fe(nv(e),l=>{const s=Ro(ze(l));if(s){const c=s;kr.get(c)||kr.set(c,o),n.value&&(c.style.overflow="hidden")}},{immediate:!0});const i=()=>{const l=Ro(ze(e));!l||n.value||(Qa&&(r=Me(l,"touchmove",s=>{bv(s)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},a=()=>{var l;const s=Ro(ze(e));!s||!n.value||(Qa&&(r==null||r()),s.style.overflow=(l=kr.get(s))!=null?l:"",kr.delete(s),n.value=!1)};return sn(a),I({get(){return n.value},set(l){l?i():a()}})}function yv(e={}){const{window:t=Ct,behavior:n="auto"}=e;if(!t)return{x:ee(0),y:ee(0)};const r=ee(t.scrollX),o=ee(t.scrollY),i=I({get(){return r.value},set(l){scrollTo({left:l,behavior:n})}}),a=I({get(){return o.value},set(l){scrollTo({top:l,behavior:n})}});return Me(t,"scroll",()=>{r.value=t.scrollX,o.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:a}}function Ev(e={}){const{window:t=Ct,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:o=!0,includeScrollbar:i=!0}=e,a=ee(n),l=ee(r),s=()=>{t&&(i?(a.value=t.innerWidth,l.value=t.innerHeight):(a.value=t.document.documentElement.clientWidth,l.value=t.document.documentElement.clientHeight))};if(s(),so(s),Me("resize",s,{passive:!0}),o){const c=fc("(orientation: portrait)");fe(c,()=>s())}return{width:a,height:l}}const vc=({type:e="info",text:t="",vertical:n,color:r},{slots:o})=>{var i;return f("span",{class:["vp-badge",e,{diy:r}],style:{verticalAlign:n??!1,backgroundColor:r??!1}},((i=o.default)==null?void 0:i.call(o))||t)};vc.displayName="Badge";var wv=U({name:"FontIcon",props:{icon:{type:String,default:""},color:{type:String,default:""},size:{type:[String,Number],default:""}},setup(e){const t=I(()=>{const r=["font-icon icon"],o=`fas fa-${e.icon}`;return r.push("fa-fw fa-sm"),r.push(e.icon.includes(" ")?e.icon:o),r}),n=I(()=>{const r={};return e.color&&(r.color=e.color),e.size&&(r["font-size"]=Number.isNaN(Number(e.size))?e.size:`${e.size}px`),$n(r).length?r:null});return()=>e.icon?f("span",{key:e.icon,class:t.value,style:n.value}):null}});const mc=()=>f(Ae,{name:"back-to-top"},()=>[f("path",{d:"M512 843.2c-36.2 0-66.4-13.6-85.8-21.8-10.8-4.6-22.6 3.6-21.8 15.2l7 102c.4 6.2 7.6 9.4 12.6 5.6l29-22c3.6-2.8 9-1.8 11.4 2l41 64.2c3 4.8 10.2 4.8 13.2 0l41-64.2c2.4-3.8 7.8-4.8 11.4-2l29 22c5 3.8 12.2.6 12.6-5.6l7-102c.8-11.6-11-20-21.8-15.2-19.6 8.2-49.6 21.8-85.8 21.8z"}),f("path",{d:"m795.4 586.2-96-98.2C699.4 172 513 32 513 32S324.8 172 324.8 488l-96 98.2c-3.6 3.6-5.2 9-4.4 14.2L261.2 824c1.8 11.4 14.2 17 23.6 10.8L419 744s41.4 40 94.2 40c52.8 0 92.2-40 92.2-40l134.2 90.8c9.2 6.2 21.6.6 23.6-10.8l37-223.8c.4-5.2-1.2-10.4-4.8-14zM513 384c-34 0-61.4-28.6-61.4-64s27.6-64 61.4-64c34 0 61.4 28.6 61.4 64S547 384 513 384z"})]);mc.displayName="BackToTopIcon";var Tv={"/zh/":{backToTop:"返回顶部"},"/":{backToTop:"Back to top"}},Av=U({name:"BackToTop",props:{threshold:{type:Number,default:100},noProgress:Boolean},setup(e){const t=Pe(),n=Nn(Tv),r=it(),{height:o}=gv(r),{height:i}=Ev(),{y:a}=yv(),l=I(()=>t.value.backToTop!==!1&&a.value>e.threshold),s=I(()=>a.value/(o.value-i.value)*100);return ge(()=>{r.value=document.body}),()=>f(xt,{name:"fade"},()=>l.value?f("button",{type:"button",class:"vp-back-to-top-button","aria-label":n.value.backToTop,"data-balloon-pos":"left",onClick:()=>{window.scrollTo({top:0,behavior:"smooth"})}},[e.noProgress?null:f("span",{class:"vp-scroll-progress",role:"progressbar","aria-labelledby":"loadinglabel","aria-valuenow":s.value},f("svg",f("circle",{cx:"50%",cy:"50%",style:{"stroke-dasharray":`calc(${Math.PI*s.value}% - ${4*Math.PI}px) calc(${Math.PI*100}% - ${4*Math.PI}px)`}}))),f(mc)]):null)}});const Lv=at({enhance:({app:e})=>{Ot("Badge")||e.component("Badge",vc),Ot("FontIcon")||e.component("FontIcon",wv)},setup:()=>{Io("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/brands.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}}),Io("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/solid.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}}),Io("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/fontawesome.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}})},rootComponents:[()=>f(Av,{})]});function Pv(e,t,n){var r,o,i;t===void 0&&(t=50),n===void 0&&(n={});var a=(r=n.isImmediate)!=null&&r,l=(o=n.callback)!=null&&o,s=n.maxWait,c=Date.now(),u=[];function d(){if(s!==void 0){var m=Date.now()-c;if(m+t>=s)return s-m}return t}var p=function(){var m=[].slice.call(arguments),g=this;return new Promise(function(w,T){var y=a&&i===void 0;if(i!==void 0&&clearTimeout(i),i=setTimeout(function(){if(i=void 0,c=Date.now(),!a){var b=e.apply(g,m);l&&l(b),u.forEach(function(A){return(0,A.resolve)(b)}),u=[]}},d()),y){var P=e.apply(g,m);return l&&l(P),w(P)}u.push({resolve:w,reject:T})})};return p.cancel=function(m){i!==void 0&&clearTimeout(i),u.forEach(function(g){return(0,g.reject)(m)}),u=[]},p}const Rv=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:r=5})=>{const o=Ge(),a=Pv(()=>{var w,T;const l=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(l-0)p.some(P=>P.hash===y.hash));for(let y=0;y=(((w=P.parentElement)==null?void 0:w.offsetTop)??0)-r,M=!b||l<(((T=b.parentElement)==null?void 0:T.offsetTop)??0)-r;if(!(A&&M))continue;const N=decodeURIComponent(o.currentRoute.value.hash),V=decodeURIComponent(P.hash);if(N===V)return;if(d){for(let S=y+1;S{window.addEventListener("scroll",a)}),yi(()=>{window.removeEventListener("scroll",a)})},nl=async(e,t)=>{const{scrollBehavior:n}=e.options;e.options.scrollBehavior=void 0,await e.replace({query:e.currentRoute.value.query,hash:t}).finally(()=>e.options.scrollBehavior=n)},Iv=".vp-sidebar-link, .toc-link",Ov=".header-anchor",xv=200,kv=5,Cv=at({setup(){Rv({headerLinkSelector:Iv,headerAnchorSelector:Ov,delay:xv,offset:kv})}});let _c=e=>ue(e.title)?{title:e.title}:null;const gc=Symbol(""),Dv=e=>{_c=e},Sv=()=>_e(gc),Vv=e=>{e.provide(gc,_c)};var Mv={"/zh/":{title:"目录",empty:"暂无目录"},"/":{title:"Catalog",empty:"No catalog"}},$v=U({name:"AutoCatalog",props:{base:{type:String,default:""},level:{type:Number,default:3},index:Boolean,hideHeading:Boolean},setup(e){const t=Sv(),n=Nn(Mv),r=de(),o=Ge(),i=Ps(),a=ee(o.getRoutes().map(({meta:c,path:u})=>{const d=u.split("/").length;return{level:fn(u,"/")?d-2:d-1,...t(c),base:u.replace(/\/[^/]+\/?$/,"/"),path:u}}).filter(c=>Ys(c)&&ue(c.title))),l=()=>{const c=e.base?tp(_s(e.base)):r.value.path.replace(/\/[^/]+$/,"/"),u=c.split("/").length-2,d=[];return a.value.filter(({level:p,path:m})=>{if(!xn(m,c)||m===c)return!1;if(c==="/"){const g=$n(i.value.locales).filter(w=>w!=="/");if(m==="/404.html"||g.some(w=>xn(m,w)))return!1}return p-u<=e.level&&(fn(m,".html")&&!fn(m,"/index.html")||fn(m,"/"))}).sort(({title:p,level:m,path:g,order:w},{title:T,level:y,path:P,order:b})=>m-y||(fn(g,"/")?-1:fn(P,"/")?1:Po(w)?Po(b)?w>0?b>0?w-b:-1:b<0?w-b:1:w:Po(b)?b:p.localeCompare(T))).forEach(p=>{var w;const{base:m,level:g}=p;switch(g){case 1:d.push(p);break;case 2:{const T=d.find(y=>y.path===m);T&&(T.children??(T.children=[])).push(p);break}default:{const T=d.find(y=>y.path===m.replace(/\/[^/]+\/$/,"/"));if(T){const y=(w=T.children)==null?void 0:w.find(P=>P.path===m);y&&(y.children??(y.children=[])).push(p)}}}}),d},s=I(()=>l());return()=>{const c=s.value.some(u=>u.children);return f("div",{class:["vp-catalog-wrapper",{index:e.index}]},[e.hideHeading?null:f("h2",{class:"vp-catalog-main-title"},n.value.title),s.value.length?f(e.index?"ol":"ul",{class:["vp-catalogs",{deep:c}]},s.value.map(({children:u=[],title:d,path:p,content:m})=>{const g=f(et,{class:"vp-catalog-title",to:p},()=>m?f(m):d);return f("li",{class:"vp-catalog"},c?[f("h3",{id:d,class:["vp-catalog-child-title",{"has-children":u.length}]},[f("a",{href:`#${d}`,class:"header-anchor","aria-hidden":!0},"#"),g]),u.length?f(e.index?"ol":"ul",{class:"vp-child-catalogs"},u.map(({children:w=[],content:T,path:y,title:P})=>f("li",{class:"vp-child-catalog"},[f("div",{class:["vp-catalog-sub-title",{"has-children":w.length}]},[f("a",{href:`#${P}`,class:"header-anchor"},"#"),f(et,{class:"vp-catalog-title",to:y},()=>T?f(T):P)]),w.length?f(e.index?"ol":"div",{class:e.index?"vp-sub-catalogs":"vp-sub-catalogs-wrapper"},w.map(({content:b,path:A,title:M})=>e.index?f("li",{class:"vp-sub-catalog"},f(et,{to:A},()=>b?f(b):M)):f(et,{class:"vp-sub-catalog-link",to:A},()=>b?f(b):M))):null]))):null]:f("div",{class:"vp-catalog-child-title"},g))})):f("p",{class:"vp-empty-catalog"},n.value.empty)])}}}),Nv=at({enhance:({app:e})=>{Vv(e),Ot("AutoCatalog",e)||e.component("AutoCatalog",$v)}});const zv=f("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[f("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),f("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),bc=U({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=ln(),n=I(()=>e.locales[t.value]??{openInNewWindow:"open in new window"});return()=>f("span",[zv,f("span",{class:"external-link-icon-sr-only"},n.value.openInNewWindow)])}});var Bv={};const Fv=Bv,Hv=at({enhance({app:e}){e.component("ExternalLinkIcon",f(bc,{locales:Fv}))}});/** + * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT + */const se={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=se.isStarted();e=Oo(e,se.settings.minimum,1),se.status=e===1?null:e;const n=se.render(!t),r=n.querySelector(se.settings.barSelector),o=se.settings.speed,i=se.settings.easing;return n.offsetWidth,jv(a=>{Cr(r,{transform:"translate3d("+rl(e)+"%,0,0)",transition:"all "+o+"ms "+i}),e===1?(Cr(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(function(){Cr(n,{transition:"all "+o+"ms linear",opacity:"0"}),setTimeout(function(){se.remove(),a()},o)},o)):setTimeout(()=>a(),o)}),se},isStarted:()=>typeof se.status=="number",start:()=>{se.status||se.set(0);const e=()=>{setTimeout(()=>{se.status&&(se.trickle(),e())},se.settings.trickleSpeed)};return se.settings.trickle&&e(),se},done:e=>!e&&!se.status?se:se.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=se.status;return t?(typeof e!="number"&&(e=(1-t)*Oo(Math.random()*t,.1,.95)),t=Oo(t+e,0,.994),se.set(t)):se.start()},trickle:()=>se.inc(Math.random()*se.settings.trickleRate),render:e=>{if(se.isRendered())return document.getElementById("nprogress");ol(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=se.settings.template;const n=t.querySelector(se.settings.barSelector),r=e?"-100":rl(se.status||0),o=document.querySelector(se.settings.parent);return Cr(n,{transition:"all 0 linear",transform:"translate3d("+r+"%,0,0)"}),o!==document.body&&ol(o,"nprogress-custom-parent"),o==null||o.appendChild(t),t},remove:()=>{il(document.documentElement,"nprogress-busy"),il(document.querySelector(se.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&Wv(e)},isRendered:()=>!!document.getElementById("nprogress")},Oo=(e,t,n)=>en?n:e,rl=e=>(-1+e)*100,jv=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),Cr=function(){const e=["Webkit","O","Moz","ms"],t={};function n(a){return a.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(l,s){return s.toUpperCase()})}function r(a){const l=document.body.style;if(a in l)return a;let s=e.length;const c=a.charAt(0).toUpperCase()+a.slice(1);let u;for(;s--;)if(u=e[s]+c,u in l)return u;return a}function o(a){return a=n(a),t[a]??(t[a]=r(a))}function i(a,l,s){l=o(l),a.style[l]=s}return function(a,l){for(const s in l){const c=l[s];c!==void 0&&Object.prototype.hasOwnProperty.call(l,s)&&i(a,s,c)}}}(),yc=(e,t)=>(typeof e=="string"?e:$i(e)).indexOf(" "+t+" ")>=0,ol=(e,t)=>{const n=$i(e),r=n+t;yc(n,t)||(e.className=r.substring(1))},il=(e,t)=>{const n=$i(e);if(!yc(e,t))return;const r=n.replace(" "+t+" "," ");e.className=r.substring(1,r.length-1)},$i=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),Wv=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)},qv=()=>{ge(()=>{const e=Ge(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||se.start()}),e.afterEach(n=>{t.add(n.path),se.done()})})},Uv=at({setup(){qv()}}),Kv=JSON.parse(`{"encrypt":{},"logo":"/logo.svg","author":{"name":"ZLMediaKit","url":"https://docs.ZLMediaKit.com"},"repo":"ZLMediaKit/ZLMediaKit","docsRepo":"ZLMediaKit/docs","docsDir":"src","navbarLayout":{"start":["Brand"],"center":[],"end":["Links","Language","Repo","Outlook","Search"]},"locales":{"/zh/":{"lang":"zh-CN","navbarLocales":{"langName":"简体中文","selectLangAriaLabel":"选择语言"},"metaLocales":{"author":"作者","date":"写作日期","origin":"原创","views":"访问量","category":"分类","tag":"标签","readingTime":"阅读时间","words":"字数","toc":"此页内容","prev":"上一页","next":"下一页","lastUpdated":"上次编辑于","contributors":"贡献者","editLink":"在 GitHub 上编辑此页","print":"打印"},"outlookLocales":{"themeColor":"主题色","darkmode":"外观","fullscreen":"全屏"},"routeLocales":{"skipToContent":"跳至主要內容","notFoundTitle":"页面不存在","notFoundMsg":["这里什么也没有","我们是怎么来到这儿的?","这 是 四 零 四 !","看起来你访问了一个失效的链接"],"back":"返回上一页","home":"带我回家","openInNewWindow":"Open in new window"},"navbar":["/zh/","/zh/guide/","/zh/tutorial/",{"text":"参考","icon":"lightbulb","prefix":"/zh/reference/","children":["test","resources","documents","development_log"]},{"text":"了解更多","icon":"laptop-code","prefix":"/zh/more/","children":["collaborative_projects","license","thanks","contact","use_cases"]}],"sidebar":{"/zh/":["","tutorial/",{"text":"指南","icon":"book","prefix":"guide/","children":"structure"},{"text":"参考","icon":"laptop-code","prefix":"reference/","link":"reference/","children":"structure"},{"text":"了解更多","icon":"laptop-code","prefix":"more/","link":"more/","children":"structure"}]},"footer":"MIT Licensed","displayFooter":true},"/":{"lang":"en-US","navbarLocales":{"langName":"English","selectLangAriaLabel":"Select language"},"metaLocales":{"author":"Author","date":"Writing Date","origin":"Original","views":"Page views","category":"Category","tag":"Tag","readingTime":"Reading Time","words":"Words","toc":"On This Page","prev":"Prev","next":"Next","lastUpdated":"Last update","contributors":"Contributors","editLink":"Edit this page on GitHub","print":"Print"},"outlookLocales":{"themeColor":"Theme Color","darkmode":"Theme Mode","fullscreen":"Full Screen"},"routeLocales":{"skipToContent":"Skip to main content","notFoundTitle":"Page not found","notFoundMsg":["There’s nothing here.","How did we get here?","That’s a Four-Oh-Four.","Looks like we've got some broken links."],"back":"Go back","home":"Take me home","openInNewWindow":"Open in new window"},"navbar":["/","/guide/","/tutorial/",{"text":"Reference","icon":"lightbulb","prefix":"/reference/","children":["test","resources","documents","development_log"]},{"text":"More","icon":"lightbulb","prefix":"/more/","children":["collaborative_projects","license","thanks","contact","use_cases"]}],"sidebar":{"/":["","tutorial/",{"text":"Docs","icon":"book","prefix":"guide/","children":"structure"},{"text":"Reference","icon":"laptop-code","prefix":"reference/","link":"reference/","children":"structure"},{"text":"More","icon":"laptop-code","prefix":"more/","link":"more/","children":"structure"}]},"footer":"MIT Licensed","displayFooter":true}}}`),Gv=ee(Kv),Ec=()=>Gv,wc=Symbol(""),Yv=()=>{const e=_e(wc);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},Zv=(e,t)=>{const{locales:n,...r}=e;return{...r,...n==null?void 0:n[t]}},Qv=at({enhance({app:e}){const t=Ec(),n=e._context.provides[Oi],r=I(()=>Zv(t.value,n.value));e.provide(wc,r),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return r.value}}})}});var Jv={provider:"Giscus",lightTheme:"https://unpkg.com/vuepress-theme-hope@2.0.0-rc.2/templates/giscus/light.css",darkTheme:"https://unpkg.com/vuepress-theme-hope@2.0.0-rc.2/templates/giscus/dark.css",repo:"ZLMediaKit/docs",repoId:"R_kgDOKboWmQ",category:"Announcements",categoryId:"DIC_kwDOKboWmc4CZ_77"};const Xv=Jv;let em=Xv;const Tc=Symbol(""),Ac=()=>_e(Tc),tm=Ac,nm=e=>{e.provide(Tc,em)},al=["ar","ca","de","en","eo","es","fa","fr","he","id","it","ja","ko","nl","pl","pt","ro","ru","th","tr","uk","vi","zh-CN","zh-TW"];var rm=U({name:"GiscusComment",props:{identifier:{type:String,required:!0},darkmode:Boolean},setup(e){const t=tm(),n=!!(t.repo&&t.repoId&&t.category&&t.categoryId),{repo:r,repoId:o,category:i,categoryId:a}=t,l=ee(!1),s=I(()=>{const u=Ii().value;if(al.includes(u))return u;const d=u.split("-")[0];return al.includes(d)?d:"en"}),c=I(()=>({repo:r,repoId:o,category:i,categoryId:a,lang:s.value,theme:e.darkmode?t.darkTheme||"dark":t.lightTheme||"light",mapping:t.mapping||"pathname",term:e.identifier,inputPosition:t.inputPosition||"top",reactionsEnabled:t.reactionsEnabled===!1?"0":"1",strict:t.strict===!1?"0":"1",loading:t.lazyLoading===!1?"eager":"lazy",emitMetadata:"0"}));return ge(async()=>{await h(()=>import("./giscus-unEZQsJ0.js"),__vite__mapDeps([])),l.value=!0}),()=>n?f("div",{id:"comment",class:["giscus-wrapper",{"input-top":t.inputPosition!=="bottom"}]},l.value?f("giscus-widget",c.value):f(Di)):null}}),om=U({name:"CommentService",props:{darkmode:Boolean},setup(e){const t=Ac(),n=de(),r=Pe(),o=t.comment!==!1,i=I(()=>r.value.comment||o&&r.value.comment!==!1);return()=>f(rm,{identifier:r.value.commentID||n.value.path,darkmode:e.darkmode,style:{display:i.value?"block":"none"}})}}),im=at({enhance:({app:e})=>{nm(e),e.component("CommentService",om)}}),am={"/zh/":{copy:"复制代码",copied:"已复制",hint:"复制成功"},"/":{copy:"Copy code",copied:"Copied",hint:"Copied successfully"}},lm=['.theme-hope-content div[class*="language-"] pre'];const sm=800,cm=2e3,um=am,fm=!1,dm=lm,ll=!1,xo=new Map,pm=()=>{const{copy:e}=cv({legacy:!0}),t=Nn(um),n=de(),r=Yh(),o=l=>{if(!l.hasAttribute("copy-code-registered")){const s=document.createElement("button");s.type="button",s.classList.add("copy-code-button"),s.innerHTML='
',s.setAttribute("aria-label",t.value.copy),s.setAttribute("data-copied",t.value.copied),l.parentElement&&l.parentElement.insertBefore(s,l),l.setAttribute("copy-code-registered","")}},i=()=>an().then(()=>new Promise(l=>{setTimeout(()=>{dm.forEach(s=>{document.querySelectorAll(s).forEach(o)}),l()},sm)})),a=(l,s,c)=>{let{innerText:u=""}=s;/language-(shellscript|shell|bash|sh|zsh)/.test(l.classList.toString())&&(u=u.replace(/^ *(\$|>) /gm,"")),e(u).then(()=>{c.classList.add("copied"),clearTimeout(xo.get(c));const d=setTimeout(()=>{c.classList.remove("copied"),c.blur(),xo.delete(c)},cm);xo.set(c,d)})};ge(()=>{(!r.value||ll)&&i(),Me("click",l=>{const s=l.target;if(s.matches('div[class*="language-"] > button.copy')){const c=s.parentElement,u=s.nextElementSibling;u&&a(c,u,s)}else if(s.matches('div[class*="language-"] div.copy-icon')){const c=s.parentElement,u=c.parentElement,d=c.nextElementSibling;d&&a(u,d,c)}}),fe(()=>n.value.path,()=>{(!r.value||ll)&&i()})})};var hm=at({setup:()=>{pm()}});const vm=()=>{Me("beforeprint",()=>{document.querySelectorAll("details").forEach(e=>{e.open=!0})})};let mm={};const Lc=Symbol(""),_m=()=>_e(Lc),gm=e=>{e.provide(Lc,mm)},sl=()=>{const e=document.documentElement;return e.classList.contains("dark")||e.getAttribute("data-theme")==="dark"},dn={useMaxWidth:!1},bm=e=>({dark:e,background:e?"#1e1e1e":"#fff",primaryColor:e?"#389d70":"#4abf8a",primaryBorderColor:e?"#389d70":"#4abf8a",primaryTextColor:e?"#fff":"#000",secondaryColor:"#ffb500",secondaryBorderColor:e?"#fff":"#000",secondaryTextColor:e?"#ddd":"#333",tertiaryColor:e?"#282828":"#efeef4",tertiaryBorderColor:e?"#bbb":"#242424",tertiaryTextColor:e?"#ddd":"#333",noteBkgColor:e?"#f6d365":"#fff5ad",noteTextColor:"#242424",noteBorderColor:e?"#f6d365":"#333",lineColor:e?"#d3d3d3":"#333",textColor:e?"#fff":"#242424",mainBkg:e?"#389d70":"#4abf8a",errorBkgColor:"#eb4d5d",errorTextColor:"#fff",nodeBorder:e?"#389d70":"#4abf8a",nodeTextColor:e?"#fff":"#242424",signalTextColor:e?"#9e9e9e":"#242424",classText:"#fff",labelColor:"#fff",attributeBackgroundColorEven:e?"#0d1117":"#fff",attributeBackgroundColorOdd:e?"#161b22":"#f8f8f8",fillType0:e?"#cf1322":"#f1636e",fillType1:"#f39c12",fillType2:"#2ecc71",fillType3:"#fa541c",fillType4:"#25a55b",fillType5:"#13c2c2",fillType6:"#096dd9",fillType7:"#aa6fe9"});var ym=U({name:"Mermaid",props:{id:{type:String,required:!0},code:{type:String,required:!0},title:{type:String,default:""}},setup(e){const{themeVariables:t,...n}=_m(),r=it(),o=I(()=>Ya(e.code)),i=ee(""),a=ee(!1);let l=!1;const s=async()=>{const[{default:d}]=await Promise.all([h(()=>import("./mermaid.core-QJnSHCal.js").then(p=>p.b7),__vite__mapDeps([])),l?Promise.resolve():(l=!0,new Promise(p=>setTimeout(p,800)))]);d.initialize({theme:"base",themeVariables:{...bm(a.value),...Bh(t)?t(a.value):t},flowchart:dn,sequence:dn,journey:dn,gantt:dn,er:dn,pie:dn,...n,startOnLoad:!1}),i.value=(await d.render(e.id,o.value)).svg},c=()=>{const{body:d}=document,p=document.createElement("div");p.classList.add("mermaid-preview"),p.innerHTML=i.value,d.appendChild(p),p.addEventListener("click",()=>{d.removeChild(p)})},u=()=>{const d=`data:image/svg+xml;charset=utf8,${i.value.replace(/
/g,"
").replace(/%/g,"%25").replace(/"/g,"%22").replace(/'/g,"%27").replace(/&/g,"%26").replace(/#/g,"%23").replace(/{/g,"%7B").replace(/}/g,"%7D").replace(//g,"%3E")}`,p=document.createElement("a");p.setAttribute("href",d),p.setAttribute("download",`${e.title?Ya(e.title):e.id}.svg`),p.click()};return ge(()=>{a.value=sl(),s(),mv(document.documentElement,()=>{a.value=sl()},{attributeFilter:["class","data-theme"],attributes:!0}),fe(a,()=>s())}),()=>[f("div",{class:"mermaid-actions"},[f("button",{class:"preview-button",onClick:()=>c(),title:"preview",innerHTML:''}),f("button",{class:"download-button",onClick:()=>u(),title:"download",innerHTML:''})]),f("div",{ref:r,class:"mermaid-wrapper"},i.value?f("div",{class:"mermaid-content",innerHTML:i.value}):f(Di,{class:"mermaid-loading",height:96}))]}});const ko=dc("VUEPRESS_TAB_STORE",{});var Em=U({name:"Tabs",props:{active:{type:Number,default:0},data:{type:Array,required:!0},id:{type:String,required:!0},tabId:{type:String,default:""}},slots:Object,setup(e,{slots:t}){const n=ee(e.active),r=it([]),o=()=>{e.tabId&&(ko.value[e.tabId]=e.data[n.value].id)},i=(c=n.value)=>{n.value=c{n.value=c>0?c-1:r.value.length-1,r.value[n.value].focus()},l=(c,u)=>{c.key===" "||c.key==="Enter"?(c.preventDefault(),n.value=u):c.key==="ArrowRight"?(c.preventDefault(),i()):c.key==="ArrowLeft"&&(c.preventDefault(),a()),o()},s=()=>{if(e.tabId){const c=e.data.findIndex(({id:u})=>ko.value[e.tabId]===u);if(c!==-1)return c}return e.active};return ge(()=>{n.value=s(),fe(()=>ko.value[e.tabId],(c,u)=>{if(e.tabId&&c!==u){const d=e.data.findIndex(({id:p})=>p===c);d!==-1&&(n.value=d)}})}),()=>e.data.length?f("div",{class:"vp-tabs"},[f("div",{class:"vp-tabs-nav",role:"tablist"},e.data.map(({id:c},u)=>{const d=u===n.value;return f("button",{type:"button",ref:p=>{p&&(r.value[u]=p)},class:["vp-tab-nav",{active:d}],role:"tab","aria-controls":`tab-${e.id}-${u}`,"aria-selected":d,onClick:()=>{n.value=u,o()},onKeydown:p=>l(p,u)},t[`title${u}`]({value:c,isActive:d}))})),e.data.map(({id:c},u)=>{const d=u===n.value;return f("div",{class:["vp-tab",{active:d}],id:`tab-${e.id}-${u}`,role:"tabpanel","aria-expanded":d},[f("div",{class:"vp-tab-title"},t[`title${u}`]({value:c,isActive:d})),t[`tab${u}`]({value:c,isActive:d})])})]):null}});const wm=at({enhance:({app:e})=>{gm(e),e.component("Mermaid",ym),e.component("Tabs",Em)},setup:()=>{vm()}});let Tm={};const Pc=Symbol(""),Am=()=>_e(Pc),Lm=e=>{e.provide(Pc,Tm)};var Pm={"/zh/":{closeTitle:"关闭",downloadTitle:"下载图片",fullscreenTitle:"切换全屏",zoomTitle:"缩放",arrowPrevTitle:"上一个 (左箭头)",arrowNextTitle:"下一个 (右箭头)"},"/":{closeTitle:"Close",downloadTitle:"Download Image",fullscreenTitle:"Switch to full screen",zoomTitle:"Zoom in/out",arrowPrevTitle:"Prev (Arrow Left)",arrowNextTitle:"Next (Arrow Right)"}};const Rm=".theme-hope-content :not(a) > img:not([no-view])",Im=Pm,Om=800,xm='
',km=e=>ue(e)?Array.from(document.querySelectorAll(e)):e.map(t=>Array.from(document.querySelectorAll(t))).flat(),Rc=e=>new Promise((t,n)=>{e.complete?t({type:"image",element:e,src:e.src,width:e.naturalWidth,height:e.naturalHeight,alt:e.alt,msrc:e.src}):(e.onload=()=>t(Rc(e)),e.onerror=r=>n(r))}),Cm=()=>{const e=Nn(Im),t=Pe(),n=de(),{isSupported:r,toggle:o}=Mi(),i=Am();let a;const l=I(()=>t.value.photoSwipe===!1?!1:t.value.photoSwipe||Rm),s=u=>{u.on("uiRegister",()=>{r&&u.ui.registerElement({name:"fullscreen",order:7,isButton:!0,html:'',onClick:()=>{o()}}),u.ui.registerElement({name:"download",order:8,isButton:!0,tagName:"a",html:{isCustomSVG:!0,inner:'',outlineID:"pswp__icn-download"},onInit:(d,p)=>{d.setAttribute("download",""),d.setAttribute("target","_blank"),d.setAttribute("rel","noopener"),p.on("change",()=>{d.setAttribute("href",p.currSlide.data.src)})}}),u.ui.registerElement({name:"bulletsIndicator",className:"photo-swipe-bullets-indicator",appendTo:"wrapper",onInit:(d,p)=>{const m=[];let g=-1;for(let w=0;w{p.goTo(m.indexOf(y.target))},m.push(T),d.appendChild(T)}p.on("change",()=>{g>=0&&m[g].classList.remove("active"),m[p.currIndex].classList.add("active"),g=p.currIndex})}})})},c=async()=>{if(l.value)return Promise.all([h(()=>import("./photoswipe.esm-i2ohwMnJ.js"),__vite__mapDeps([])),an().then(()=>new Promise(u=>setTimeout(u,Om)).then(()=>km(l.value)))]).then(([{default:u},d])=>{const p=d.map(m=>({html:xm,element:m,msrc:m.src}));d.forEach((m,g)=>{const w=()=>{a=new u({preloaderDelay:0,showHideAnimationType:"zoom",...e.value,...i,dataSource:p,index:g,closeOnVerticalDrag:!0,wheelToZoom:!1}),s(a),a.addFilter("thumbEl",()=>m),a.addFilter("placeholderSrc",()=>m.src),a.init()};m.style.cursor="zoom-in",m.addEventListener("click",()=>{w()}),m.addEventListener("keypress",({key:T})=>{T==="Enter"&&w()})}),d.forEach((m,g)=>{Rc(m).then(w=>{p.splice(g,1,w),a==null||a.refreshSlideContent(g)})})})};ge(()=>{Me("wheel",()=>{a==null||a.close()}),fe(()=>n.value.path,c,{immediate:!0})})};var Dm=at({enhance:({app:e})=>{Lm(e)},setup:()=>{Cm()}});function Sm(e){return{all:e=e||new Map,on:function(t,n){var r=e.get(t);r?r.push(n):e.set(t,[n])},off:function(t,n){var r=e.get(t);r&&(n?r.splice(r.indexOf(n)>>>0,1):e.set(t,[]))},emit:function(t,n){var r=e.get(t);r&&r.slice().map(function(o){o(n)}),(r=e.get("*"))&&r.slice().map(function(o){o(t,n)})}}}const Ic=Symbol(""),Vm=()=>{const e=_e(Ic);if(!e)throw new Error("usePWAEvent() is called without provider.");return e},Mm=async(e,t={},n=!0)=>{const{register:r}=await h(()=>import("./index-7SG8bi1h.js"),__vite__mapDeps([]));r(e,{ready(o){var i;n&&console.info("[Service Worker]: active"),(i=t.ready)==null||i.call(t,o)},registered(o){var i;n&&console.log("[Service Worker]: registered"),(i=t.registered)==null||i.call(t,o)},cached(o){var i;n&&console.log("[Service Worker]: cached"),(i=t.cached)==null||i.call(t,o)},async updatefound(o){var i;await navigator.serviceWorker.getRegistration()&&(n&&console.log("[Service Worker]: update found"),(i=t.updatefound)==null||i.call(t,o))},updated(o){var i;n&&console.log("[Service Worker]: updated"),(i=t.updated)==null||i.call(t,o)},offline(){var o;n&&console.log("[Service Worker]: offline"),(o=t.offline)==null||o.call(t)},error(o){var i;n&&console.error("[Service Worker]: ",o),(i=t.error)==null||i.call(t,o)}})},$m=async e=>Mm(Ve("service-worker.js"),{ready(t){e.emit("ready",t)},registered(t){e.emit("registered",t)},cached(t){e.emit("cached",t)},updatefound(t){e.emit("updatefound",t)},updated(t){const n="service-worker-version",r=Number(localStorage.getItem(n)||0);localStorage.setItem(n,(r+1).toString()),localStorage.removeItem("manifest"),e.emit("updated",t)},offline(){e.emit("offline")},error(t){e.emit("error",t)}}),Nm=()=>{const e=Sm();tn(Ic,e),ge(async()=>{var n;let t=!1;(n=navigator.serviceWorker)!=null&&n.controller&&navigator.serviceWorker.addEventListener("controllerchange",()=>{t||(t=!0,window.location.reload())}),await $m(e)})};var zm={"/zh/":{install:"安装",iOSInstall:"点击分享按钮然后点击“添加到主屏幕”",cancel:"取消",close:"关闭",prevImage:"上一张图片",nextImage:"下一张图片",desc:"详情",feature:"主要特色",explain:"该应用可以安装在你的 PC 或移动设备上。这将使该 Web 应用程序外观和行为与其他应用程序相同。它将在出现在应用程序列表中,并可以固定到主屏幕,开始菜单或任务栏。此 Web 应用程序还将能够与其他应用程序和你的操作系统安全地进行交互。",hint:"发现新内容可用",update:"新内容已就绪"},"/":{install:"Install",iOSInstall:"Tap the share button and then 'Add to Home Screen'",cancel:"Cancel",close:"Close",prevImage:"Previous Image",nextImage:"Next Image",desc:"Description",feature:"Key Features",explain:"This app can be installed on your PC or mobile device. This will allow this web app to look and behave like any other installed app. You will find it in your app lists and be able to pin it to your home screen, start menus or task bars. This installed web app will also be able to safely interact with other apps and your operating system. ",hint:"New content found.",update:"New content is available."}};const Oc=()=>f(Ae,{name:"update"},()=>f("path",{d:"M949.949 146.25v255.826c0 21.981-13.989 35.97-35.97 35.97H658.154c-13.988 0-25.983-7.992-33.973-21.981-5.997-13.989-4-27.977 7.991-39.97l79.942-77.946c-55.954-51.973-121.918-77.955-199.863-77.955-37.975 0-75.95 8.002-113.924 21.99-37.975 15.985-67.948 37.976-91.934 63.957-25.982 23.987-47.973 53.96-63.957 91.934-29.983 73.955-29.983 153.895 0 227.85 15.984 37.976 37.975 67.947 63.957 91.934 23.986 25.982 53.959 47.973 91.934 63.956 37.974 13.989 75.95 21.991 113.924 21.991 45.967 0 87.942-9.998 127.913-29.982 41.976-17.99 75.951-45.967 101.931-83.943 7.993-4 11.994-5.995 13.989-5.995 5.997 0 9.998 1.994 13.988 5.995l77.958 77.946c3.989 4 5.986 7.993 5.986 11.994 0 1.994-1.996 5.995-3.99 11.994-43.973 51.962-93.941 91.934-151.9 117.914-53.958 25.983-115.92 39.972-185.874 39.972-61.961 0-119.921-11.984-169.89-33.973-57.96-25.985-105.923-57.963-139.896-93.943-35.98-33.972-67.958-81.936-93.94-139.897-45.967-101.93-45.967-237.846 0-339.777 25.982-57.96 57.96-105.923 93.94-139.896 33.973-35.98 81.936-67.958 139.896-93.94 49.968-21.99 107.928-33.974 169.89-33.974 55.963 0 109.923 9.988 161.885 29.973 53.97 21.99 101.933 51.963 139.908 89.938l73.954-73.944c9.987-9.998 23.987-13.988 39.971-8.002 13.988 8.002 21.98 19.995 21.98 33.984z"}));Oc.displayName="UpdateIcon";const Bm=zm,Fm=e=>{const t=e.waiting;if(!t)return;const n=new MessageChannel;t.postMessage({type:"SKIP_WAITING"},[n.port2])};var Hm=U({name:"SWUpdatePopup",slots:Object,setup(e,{slots:t}){const n=Nn(Bm),r=it(),o=I(()=>!!r.value),i=()=>{r.value&&(Fm(r.value),r.value=void 0)};return ge(()=>{Vm().on("updated",a=>{a&&(r.value=a)})}),()=>f(xt,{name:"popup"},()=>{var a;return((a=t.default)==null?void 0:a.call(t,{enabled:o.value,reload:i}))||(o.value?f("button",{type:"button",class:"sw-update-popup",tabindex:0,onClick:()=>i()},[n.value.update,f("span",{class:"icon-wrapper"},f(Oc))]):null)})}});const jm=at({setup:()=>{Nm()},rootComponents:[Hm]});var cl={"/zh/":{word:"约 $word 字",less1Minute:"小于 1 分钟",time:"大约 $time 分钟"},"/":{word:"About $word words",less1Minute:"Less than 1 minute",time:"About $time min"}};const xc=()=>{const e=de();return I(()=>e.value.readingTime??null)},Qo=typeof cl>"u"?null:cl,Wm=(e,t)=>{const{minutes:n,words:r}=e,{less1Minute:o,word:i,time:a}=t;return{time:n<1?o:a.replace("$time",Math.round(n).toString()),words:i.replace("$word",r.toString())}},ul={words:"",time:""},qm=()=>Qo?Nn(Qo):I(()=>null),Um=()=>{if(typeof Qo>"u")return I(()=>ul);const e=xc(),t=qm();return I(()=>e.value&&t.value?Wm(e.value,t.value):ul)},Bn=()=>Ec(),ve=()=>Yv(),gr=()=>I(()=>!!Bn().value.pure);var fl=U({name:"EmptyComponent",setup:()=>()=>null});const Km="719px",Gm="1440px",Ym="false",Ni={mobileBreakPoint:Km,pcBreakPoint:Gm,enableThemeColor:Ym},zi={"/zh/guide/":["",{text:"Media Server",prefix:"media_server/",collapsible:!0,icon:"gears",children:["restful_api","web_hook_api","on-demand_streaming","on-demand_push_streaming","push_authentication","playback_authentication","how_to_enable_https_related_functions","push_test","play_url_rules","sequence_diagram","start_server","generate_ssl_self-signed_certificate_and_test","config_file"]},{text:"SDK API",prefix:"sdk/",collapsible:!0,icon:"cube",children:["how_to_create_a_live_steam"]},{text:"代码解读",prefix:"code/",collapsible:!0,icon:"code",children:["","oncetoken"]},{text:"协议相关",prefix:"protocol/",collapsible:!0,icon:"lightbulb",children:[{text:"Gb28181",prefix:"gb28181/",collapsible:!0,children:["gb28181_sip_signaling_packet_capture","how_to_use_device_id_as_stream_id","push_streaming"]},{text:"SRT",prefix:"srt/",collapsible:!0,children:[""]},{text:"Webrtc",prefix:"webrtc/",collapsible:!0,children:["webrtc_compilation_and_use","webrtc_signaling_interaction_format"]}]},{text:"安装",prefix:"install/",collapsible:!0,icon:"box-archive",children:["","start","install_zlmediakit_using_vcpkg","compilation_instructions_for_windows_version"]},{text:"常见问题",prefix:"faq/",collapsible:!0,icon:"question",children:["","rtmp_playback_compatibility_issues","not_recommended_qq"]}],"/zh/reference/":[{text:"开发日志",prefix:"development_log/",collapsible:!0,icon:"code-commit",children:["","rtsp_performance_optimization","hls_high_performance_journey"]},{text:"测试",prefix:"test/",collapsible:!0,icon:"vials",children:["","benchmark","rtmp_pull_stream_performance_test","rtmp_push_stream_performance_test","rtsp_pull_stream_performance_test","rtsp_push_stream_performance_test","online_test","delay_test","how_to_test_delay","performance_testing"]},{text:"相关文档",prefix:"documents/",collapsible:!0,icon:"file-code",children:["","rtsp_push_process","exclusive_features","high_concurrency_implementation_principle","introduction_to_streaming_media_related_technologies","the_nature_of_live_broadcast_delay"]},{text:"相关资源",prefix:"resources/",collapsible:!0,icon:"font-awesome",children:["","rtmp_support_for_h265_and_opus","zltoolkit_source_code_study_notes","dependency","video_conferencing_related_resources"]}],"/zh/more/":["use_cases","collaborative_projects","license","contact","thanks"],"/guide/":["",{text:"Media Server",prefix:"media_server/",collapsible:!0,icon:"gears",children:["config_file","generate_ssl_self-signed_certificate_and_test","how_to_enable_https_related_functions","on-demand_streaming","on-demand_push_streaming","playback_authentication","push_authentication","play_url_rules","push_test","restful_api","sequence_diagram","start_server","web_hook_api"]},{text:"Code interpretation",prefix:"code/",collapsible:!0,icon:"code",children:["","oncetoken"]},{text:"FAQ",prefix:"faq/",collapsible:!0,icon:"question",children:["","rtmp_playback_compatibility_issues","not_recommended_qq"]},{text:"Install",prefix:"install/",collapsible:!0,icon:"box-archive",children:["","start","compilation_instructions_for_windows_version","install_zlmediakit_using_vcpkg"]},{text:"Protocol",prefix:"protocol/",collapsible:!0,icon:"lightbulb",children:[{text:"Gb28181",prefix:"gb28181/",collapsible:!0,children:["gb28181_sip_signaling_packet_capture","how_to_use_device_id_as_stream_id","push_streaming"]},{text:"SRT",prefix:"srt/",collapsible:!0,children:[""]},{text:"Webrtc",prefix:"webrtc/",collapsible:!0,children:["webrtc_compilation_and_use","webrtc_signaling_interaction_format"]}]},{text:"SDK API",prefix:"sdk/",collapsible:!0,icon:"lightbulb",children:["","how_to_create_a_live_steam"]}],"/reference/":[{text:"Development log",prefix:"development_log/",collapsible:!0,icon:"code-commit",children:["","rtsp_performance_optimization","hls_high_performance_journey"]},{text:"Related documents",prefix:"documents/",collapsible:!0,icon:"file-code",children:["","exclusive_features","rtsp_push_process","the_nature_of_live_broadcast_delay","high_concurrency_implementation_principle","introduction_to_streaming_media_related_technologies"]},{text:"Resources",prefix:"resources/",collapsible:!0,icon:"font-awesome",children:["","dependency","rtmp_support_for_h265_and_opus","video_conferencing_related_resources","zltoolkit_source_code_study_notes"]},{text:"Testing",prefix:"test/",collapsible:!0,icon:"vials",children:["","benchmark","delay_test","how_to_test_delay","online_test","performance_testing","rtmp_pull_stream_performance_test","rtmp_push_stream_performance_test","rtsp_pull_stream_performance_test","rtsp_push_stream_performance_test"]}],"/more/":["thanks","collaborative_projects","contact","license","use_cases"]},kc=e=>{const{icon:t="",color:n,size:r}=e,o={};return n&&(o.color=n),r&&(o.height=Number.isNaN(Number(r))?r:`${r}px`),Mn(t)?f("img",{class:"icon",src:t,"no-view":"",style:o}):ao(t)?f("img",{class:"icon",src:Ve(t),"no-view":"",style:o}):f(nt("FontIcon"),e)};kc.displayName="HopeIcon";var je=kc;const Zm=()=>{const e=Ge(),t=yt();return n=>{if(n)if(ao(n))t.path!==n&&e.push(n);else if(gs(n))window&&window.open(n);else{const r=t.path.slice(0,t.path.lastIndexOf("/"));e.push(`${r}/${encodeURI(n)}`)}}},Cc=()=>{const e=ve(),t=Pe();return I(()=>{const{author:n}=t.value;return n?Ka(n):n===!1?[]:Ka(e.value.author,!1)})},Qm=()=>{const e=Pe();return I(()=>jh(e.value.category).map(t=>({name:t,path:""})))},Jm=()=>{const e=Pe();return I(()=>Wh(e.value.tag).map(t=>({name:t,path:""})))},Xm=()=>{const e=Pe(),t=de();return I(()=>{const n=Dh(e.value.date);if(n)return n;const{createdTime:r}=t.value.git||{};return r?new Date(r):null})},e1=()=>{const e=ve(),t=de(),n=Pe(),r=Cc(),o=Qm(),i=Jm(),a=Xm(),l=xc(),s=Um(),c=I(()=>({author:r.value,category:o.value,date:a.value,localizedDate:t.value.localizedDate,tag:i.value,isOriginal:n.value.isOriginal||!1,readingTime:l.value,readingTimeLocale:s.value,pageview:"pageview"in n.value?n.value.pageview:!0})),u=I(()=>"pageInfo"in n.value?n.value.pageInfo:"pageInfo"in e.value?e.value.pageInfo:null);return{info:c,items:u}},{mobileBreakPoint:t1,pcBreakPoint:n1}=Ni,dl=e=>e.endsWith("px")?Number(e.slice(0,-2)):null,co=()=>{const e=ee(!1),t=ee(!1),n=()=>{e.value=window.innerWidth<=(dl(t1)??719),t.value=window.innerWidth>=(dl(n1)??1440)};return ge(()=>{n(),Me("resize",n,!1),Me("orientationchange",n,!1)}),{isMobile:e,isPC:t}},Dc=Symbol(""),br=()=>{const e=_e(Dc);if(!e)throw new Error("useDarkmode() is called without provider.");return e},r1=e=>{const t=Bn(),n=vv(),r=dc("vuepress-theme-hope-scheme","auto"),o=I(()=>t.value.darkmode||"switch"),i=I(()=>{const l=o.value;return l==="disable"?!1:l==="enable"?!0:l==="auto"?n.value:l==="toggle"?r.value==="dark":r.value==="dark"||r.value==="auto"&&n.value}),a=I(()=>{const l=o.value;return l==="switch"||l==="toggle"});e.provide(Dc,{canToggle:a,config:o,isDarkmode:i,status:r}),Object.defineProperties(e.config.globalProperties,{$isDarkmode:{get:()=>i.value}})},o1=()=>{const{isDarkmode:e}=br(),t=(n=e.value)=>document.documentElement.setAttribute("data-theme",n?"dark":"light");ge(()=>{fe(e,t,{immediate:!0})})};var Fe=U({name:"AutoLink",inheritAttrs:!1,props:{config:{type:Object,required:!0},exact:Boolean,noExternalLinkIcon:Boolean},emits:["focusout"],slots:Object,setup(e,{attrs:t,emit:n,slots:r}){const o=yt(),i=Ps(),a=Qr(e,"config"),l=I(()=>Mn(a.value.link)),s=I(()=>!l.value&&gs(a.value.link)),c=I(()=>a.value.target||(l.value?"_blank":void 0)),u=I(()=>c.value==="_blank"),d=I(()=>!l.value&&!s.value&&!u.value),p=I(()=>a.value.rel||(u.value?"noopener noreferrer":void 0)),m=I(()=>a.value.ariaLabel||a.value.text),g=I(()=>{if(e.exact)return!1;const T=$n(i.value.locales);return T.length?T.every(y=>y!==a.value.link):a.value.link!=="/"}),w=I(()=>d.value?a.value.activeMatch?new RegExp(a.value.activeMatch).test(o.path):g.value?xn(o.path,a.value.link):o.path===a.value.link:!1);return()=>{const{before:T,after:y,default:P}=r,{text:b,icon:A,link:M}=a.value;return d.value?f(et,{to:M,"aria-label":m.value,...t,class:["nav-link",{active:w.value},t.class],onFocusout:()=>n("focusout")},()=>P?P():[T?T():f(je,{icon:A}),b,y==null?void 0:y()]):f("a",{href:M,rel:p.value,target:c.value,"aria-label":m.value,...t,class:["nav-link",t.class],onFocusout:()=>n("focusout")},P?P():[T?T():f(je,{icon:A}),b,e.noExternalLinkIcon?null:f(bc),y==null?void 0:y()])}}});const kn=(e,t,n=!1)=>"activeMatch"in t?new RegExp(t.activeMatch).test(e.path):Xs(e,t.link)?!0:t.children&&!n?t.children.some(r=>kn(e,r)):!1,Sc=(e,t)=>t.type==="group"?t.children.some(n=>n.type==="group"?Sc(e,n):n.type==="page"&&kn(e,n,!0))||"prefix"in t&&Xs(e,t.prefix):!1,Vc=(e,t)=>ue(e.link)?f(Fe,{...t,config:e}):f("p",t,[f(je,{icon:e.icon}),e.text]),Mc=e=>{const t=yt();return e?f("ul",{class:"vp-sidebar-sub-headers"},e.map(n=>f("li",{class:"vp-sidebar-sub-header"},[Vc(n,{class:["vp-sidebar-link","vp-heading",{active:kn(t,n,!0)}]}),Mc(n.children)]))):null};var Rt=(e=>(e.type="y",e.title="t",e.shortTitle="s",e.icon="i",e.author="a",e.date="d",e.localizedDate="l",e.category="c",e.tag="g",e.isEncrypted="n",e.isOriginal="o",e.readingTime="r",e.excerpt="e",e.sticky="u",e.cover="v",e.index="I",e.order="O",e))(Rt||{}),i1=(e=>(e.article="a",e.home="h",e.slide="s",e.page="p",e))(i1||{});const Jt=(e="",t="")=>ao(t)?t:`${_s(e)}${t}`,En=(e,t,n=!1)=>{let r=Ur(e,Zs(encodeURI(t)));r.name==="404"&&(r=Ur(e,t));const{fullPath:o,meta:i,name:a}=r;return{text:!n&&i[Rt.shortTitle]?i[Rt.shortTitle]:i[Rt.title]||t,link:a==="404"?t:o,...i[Rt.icon]?{icon:i[Rt.icon]}:{}}},a1=(e,t)=>{const n=de();return{type:"heading",text:e.title,link:`${n.value.path}#${e.slug}`,children:Bi(e.children,t)}},Bi=(e,t)=>t>0?e.map(n=>a1(n,t-1)):[],$c=e=>{const t=de();return Bi(t.value.headers,e)},Jo=(e,t,n="")=>{const r=Ge(),o=de(),i=(a,l=n)=>{var c;const s=ue(a)?En(r,Jt(l,a)):a.link?{...a,...Wr(a.link)?{}:{link:En(r,Jt(l,a.link)).link}}:a;if("children"in s){const u=Jt(l,s.prefix),d=s.children==="structure"?zi[u]:s.children;return{type:"group",...s,prefix:u,children:d.map(p=>i(p,u))}}return{type:"page",...s,children:s.link===o.value.path?Bi(((c=o.value.headers[0])==null?void 0:c.level)===1?o.value.headers[0].children:o.value.headers,t):[]}};return e.map(a=>i(a))},l1=(e,t)=>{const n=de(),r=$n(e).sort((o,i)=>i.length-o.length);for(const o of r)if(xn(decodeURI(n.value.path),o)){const i=e[o];return i?Jo(i==="structure"?zi[o]:i==="heading"?$c(t):i,t,o):[]}return console.warn(`${n.value.path} is missing sidebar config.`),[]},s1=(e,t)=>{const n=ln();return e===!1?[]:e==="heading"?$c(t):e==="structure"?Jo(zi[n.value],t,n.value):X(e)?Jo(e,t):Pi(e)?l1(e,t):[]},Nc=Symbol(""),c1=()=>{const e=Pe(),t=ve(),n=de(),r=I(()=>e.value.home?!1:e.value.sidebar??t.value.sidebar??"structure"),o=I(()=>e.value.headerDepth??t.value.headerDepth??2),i=lo(()=>[r.value,o.value,n.value.path,null],()=>s1(r.value,o.value));tn(Nc,i)},Fi=()=>{const e=_e(Nc);if(!e)throw new Error("useSidebarItems() is called without provider.");return e};var u1=U({name:"PageFooter",setup(){const e=Pe(),t=ve(),n=Cc(),r=I(()=>{const{copyright:a,footer:l}=e.value;return l!==!1&&!!(a||l||t.value.displayFooter)}),o=I(()=>{const{footer:a}=e.value;return a===!1?!1:ue(a)?a:t.value.footer||""}),i=I(()=>"copyright"in e.value?e.value.copyright:"copyright"in t.value?t.value.copyright:n.value.length?`Copyright © ${new Date().getFullYear()} ${n.value[0].name}`:!1);return()=>r.value?f("footer",{class:"vp-footer-wrapper"},[o.value?f("div",{class:"vp-footer",innerHTML:o.value}):null,i.value?f("div",{class:"vp-copyright",innerHTML:i.value}):null]):null}}),zc=U({name:"NavbarDropdownLink",props:{config:{type:Object,required:!0}},slots:Object,setup(e,{slots:t}){const n=de(),r=Qr(e,"config"),o=I(()=>r.value.ariaLabel||r.value.text),i=ee(!1);fe(()=>n.value.path,()=>{i.value=!1});const a=l=>{l.detail===0&&(i.value=!i.value)};return()=>{var l;return f("div",{class:["dropdown-wrapper",{open:i.value}]},[f("button",{type:"button",class:"dropdown-title","aria-label":o.value,onClick:a},[((l=t.title)==null?void 0:l.call(t))||f("span",{class:"title"},[f(je,{icon:r.value.icon}),e.config.text]),f("span",{class:"arrow"}),f("ul",{class:"nav-dropdown"},r.value.children.map((s,c)=>{const u=c===r.value.children.length-1;return f("li",{class:"dropdown-item"},"children"in s?[f("h4",{class:"dropdown-subtitle"},s.link?f(Fe,{config:s,onFocusout:()=>{s.children.length===0&&u&&(i.value=!1)}}):f("span",s.text)),f("ul",{class:"dropdown-subitem-wrapper"},s.children.map((d,p)=>f("li",{class:"dropdown-subitem"},f(Fe,{config:d,onFocusout:()=>{p===s.children.length-1&&u&&(i.value=!1)}}))))]:f(Fe,{config:s,onFocusout:()=>{u&&(i.value=!1)}}))}))])])}}});const Bc=()=>f(Ae,{name:"i18n"},()=>[f("path",{d:"M379.392 460.8 494.08 575.488l-42.496 102.4L307.2 532.48 138.24 701.44l-71.68-72.704L234.496 460.8l-45.056-45.056c-27.136-27.136-51.2-66.56-66.56-108.544h112.64c7.68 14.336 16.896 27.136 26.112 35.84l45.568 46.08 45.056-45.056C382.976 312.32 409.6 247.808 409.6 204.8H0V102.4h256V0h102.4v102.4h256v102.4H512c0 70.144-37.888 161.28-87.04 210.944L378.88 460.8zM576 870.4 512 1024H409.6l256-614.4H768l256 614.4H921.6l-64-153.6H576zM618.496 768h196.608L716.8 532.48 618.496 768z"})]);Bc.displayName="I18nIcon";const Fc=(e,t,n="")=>ue(t)?En(e,Jt(n,t)):"children"in t?{...t,...t.link&&!Wr(t.link)?En(e,Jt(n,t.link)):{},children:t.children.map(r=>Fc(e,r,Jt(n,t.prefix)))}:{...t,link:Wr(t.link)?t.link:En(e,Jt(n,t.link)).link},Hc=()=>{const e=ve(),t=Ge(),n=()=>(e.value.navbar||[]).map(r=>Fc(t,r));return lo(()=>e.value.navbar,()=>n())},f1=()=>{const e=Ge(),t=yt(),n=ln(),r=no(),o=Bn(),i=ve();return lo(()=>t.path,()=>{const a=$n(r.value.locales),l=Vi(o.value.extraLocales??{});if(a.length<2&&!l.length)return null;const{path:s,fullPath:c}=t,{navbarLocales:u}=i.value;return{text:"",ariaLabel:u==null?void 0:u.selectLangAriaLabel,children:[...a.map(d=>{var y,P,b;const p=((y=r.value.locales)==null?void 0:y[d])??{},m=((P=o.value.locales)==null?void 0:P[d])??{},g=p.lang||"",w=((b=m.navbarLocales)==null?void 0:b.langName)??g;let T;if(g===r.value.lang)T=s;else{const A=s.replace(n.value,d);T=e.getRoutes().some(M=>M.path===A)?c.replace(s,A):m.home??d}return{text:w,link:T}}),...l.map(([d,p])=>({text:d,link:p.replace(":route",t.path.replace(n.value,""))}))]}})},d1=()=>{const e=ve(),t=I(()=>e.value.repo||null),n=I(()=>t.value?Uh(t.value):null),r=I(()=>t.value?ec(t.value):null),o=I(()=>n.value?e.value.repoLabel??(r.value===null?"Source":r.value):null);return I(()=>!n.value||!o.value||e.value.repoDisplay===!1?null:{type:r.value||"Source",label:o.value,link:n.value})};var p1=U({name:"LanguageDropdown",setup(){const e=f1();return()=>e.value?f("div",{class:"nav-item"},f(zc,{class:"i18n-dropdown",config:e.value},{title:()=>{var t;return f(Bc,{"aria-label":(t=e.value)==null?void 0:t.ariaLabel,style:{width:"1rem",height:"1rem",verticalAlign:"middle"}})}})):null}}),h1=U({name:"NavScreenDropdown",props:{config:{type:Object,required:!0}},setup(e){const t=de(),n=Qr(e,"config"),r=I(()=>n.value.ariaLabel||n.value.text),o=ee(!1);fe(()=>t.value.path,()=>{o.value=!1});const i=(a,l)=>l[l.length-1]===a;return()=>[f("button",{type:"button",class:["nav-screen-dropdown-title",{active:o.value}],"aria-label":r.value,onClick:()=>{o.value=!o.value}},[f("span",{class:"title"},[f(je,{icon:n.value.icon}),e.config.text]),f("span",{class:["arrow",o.value?"down":"end"]})]),f("ul",{class:["nav-screen-dropdown",{hide:!o.value}]},n.value.children.map(a=>f("li",{class:"dropdown-item"},"children"in a?[f("h4",{class:"dropdown-subtitle"},a.link?f(Fe,{config:a,onFocusout:()=>{i(a,n.value.children)&&a.children.length===0&&(o.value=!1)}}):f("span",a.text)),f("ul",{class:"dropdown-subitem-wrapper"},a.children.map(l=>f("li",{class:"dropdown-subitem"},f(Fe,{config:l,onFocusout:()=>{i(l,a.children)&&i(a,n.value.children)&&(o.value=!1)}}))))]:f(Fe,{config:a,onFocusout:()=>{i(a,n.value.children)&&(o.value=!1)}}))))]}}),v1=U({name:"NavScreenLinks",setup(){const e=Hc();return()=>e.value.length?f("nav",{class:"nav-screen-links"},e.value.map(t=>f("div",{class:"navbar-links-item"},"children"in t?f(h1,{config:t}):f(Fe,{config:t})))):null}});const jc=()=>f(Ae,{name:"dark"},()=>f("path",{d:"M524.8 938.667h-4.267a439.893 439.893 0 0 1-313.173-134.4 446.293 446.293 0 0 1-11.093-597.334A432.213 432.213 0 0 1 366.933 90.027a42.667 42.667 0 0 1 45.227 9.386 42.667 42.667 0 0 1 10.24 42.667 358.4 358.4 0 0 0 82.773 375.893 361.387 361.387 0 0 0 376.747 82.774 42.667 42.667 0 0 1 54.187 55.04 433.493 433.493 0 0 1-99.84 154.88 438.613 438.613 0 0 1-311.467 128z"}));jc.displayName="DarkIcon";const Wc=()=>f(Ae,{name:"light"},()=>f("path",{d:"M952 552h-80a40 40 0 0 1 0-80h80a40 40 0 0 1 0 80zM801.88 280.08a41 41 0 0 1-57.96-57.96l57.96-58a41.04 41.04 0 0 1 58 58l-58 57.96zM512 752a240 240 0 1 1 0-480 240 240 0 0 1 0 480zm0-560a40 40 0 0 1-40-40V72a40 40 0 0 1 80 0v80a40 40 0 0 1-40 40zm-289.88 88.08-58-57.96a41.04 41.04 0 0 1 58-58l57.96 58a41 41 0 0 1-57.96 57.96zM192 512a40 40 0 0 1-40 40H72a40 40 0 0 1 0-80h80a40 40 0 0 1 40 40zm30.12 231.92a41 41 0 0 1 57.96 57.96l-57.96 58a41.04 41.04 0 0 1-58-58l58-57.96zM512 832a40 40 0 0 1 40 40v80a40 40 0 0 1-80 0v-80a40 40 0 0 1 40-40zm289.88-88.08 58 57.96a41.04 41.04 0 0 1-58 58l-57.96-58a41 41 0 0 1 57.96-57.96z"}));Wc.displayName="LightIcon";const qc=()=>f(Ae,{name:"auto"},()=>f("path",{d:"M512 992C246.92 992 32 777.08 32 512S246.92 32 512 32s480 214.92 480 480-214.92 480-480 480zm0-840c-198.78 0-360 161.22-360 360 0 198.84 161.22 360 360 360s360-161.16 360-360c0-198.78-161.22-360-360-360zm0 660V212c165.72 0 300 134.34 300 300 0 165.72-134.28 300-300 300z"}));qc.displayName="AutoIcon";const Uc=()=>f(Ae,{name:"enter-fullscreen"},()=>f("path",{d:"M762.773 90.24h-497.28c-96.106 0-174.4 78.293-174.4 174.4v497.28c0 96.107 78.294 174.4 174.4 174.4h497.28c96.107 0 175.04-78.293 174.4-174.4V264.64c0-96.213-78.186-174.4-174.4-174.4zm-387.2 761.173H215.04c-21.867 0-40.427-17.92-41.067-41.066V649.92c0-22.507 17.92-40.427 40.427-40.427 11.307 0 21.227 4.694 28.48 11.947 7.253 7.253 11.947 17.92 11.947 28.48v62.293l145.28-145.28c15.893-15.893 41.813-15.893 57.706 0 15.894 15.894 15.894 41.814 0 57.707l-145.28 145.28h62.294c22.506 0 40.426 17.92 40.426 40.427s-17.173 41.066-39.68 41.066zM650.24 165.76h160.427c21.866 0 40.426 17.92 41.066 41.067v160.426c0 22.507-17.92 40.427-40.426 40.427-11.307 0-21.227-4.693-28.48-11.947-7.254-7.253-11.947-17.92-11.947-28.48v-62.186L625.6 450.347c-15.893 15.893-41.813 15.893-57.707 0-15.893-15.894-15.893-41.814 0-57.707l145.28-145.28H650.88c-22.507 0-40.427-17.92-40.427-40.427s17.174-41.173 39.787-41.173z"}));Uc.displayName="EnterFullScreenIcon";const Kc=()=>f(Ae,{name:"cancel-fullscreen"},()=>f("path",{d:"M778.468 78.62H247.922c-102.514 0-186.027 83.513-186.027 186.027V795.08c0 102.514 83.513 186.027 186.027 186.027h530.432c102.514 0 186.71-83.513 186.026-186.027V264.647C964.494 162.02 880.981 78.62 778.468 78.62zM250.88 574.35h171.122c23.324 0 43.122 19.115 43.804 43.805v171.121c0 24.008-19.114 43.122-43.122 43.122-12.06 0-22.641-5.006-30.378-12.743s-12.743-19.115-12.743-30.379V722.83L224.597 877.91c-16.953 16.952-44.6 16.952-61.553 0-16.953-16.954-16.953-44.602 0-61.554L318.009 661.39h-66.446c-24.007 0-43.122-19.114-43.122-43.122 0-24.12 18.432-43.918 42.439-43.918zm521.899-98.873H601.657c-23.325 0-43.122-19.114-43.805-43.804V260.55c0-24.007 19.115-43.122 43.122-43.122 12.06 0 22.642 5.007 30.379 12.743s12.743 19.115 12.743 30.38v66.445l154.965-154.965c16.953-16.953 44.601-16.953 61.554 0 16.953 16.953 16.953 44.6 0 61.554L705.536 388.55h66.446c24.007 0 43.122 19.115 43.122 43.122.114 24.007-18.318 43.804-42.325 43.804z"}));Kc.displayName="CancelFullScreenIcon";const Gc=()=>f(Ae,{name:"outlook"},()=>[f("path",{d:"M224 800c0 9.6 3.2 44.8 6.4 54.4 6.4 48-48 76.8-48 76.8s80 41.6 147.2 0 134.4-134.4 38.4-195.2c-22.4-12.8-41.6-19.2-57.6-19.2C259.2 716.8 227.2 761.6 224 800zM560 675.2l-32 51.2c-51.2 51.2-83.2 32-83.2 32 25.6 67.2 0 112-12.8 128 25.6 6.4 51.2 9.6 80 9.6 54.4 0 102.4-9.6 150.4-32l0 0c3.2 0 3.2-3.2 3.2-3.2 22.4-16 12.8-35.2 6.4-44.8-9.6-12.8-12.8-25.6-12.8-41.6 0-54.4 60.8-99.2 137.6-99.2 6.4 0 12.8 0 22.4 0 12.8 0 38.4 9.6 48-25.6 0-3.2 0-3.2 3.2-6.4 0-3.2 3.2-6.4 3.2-6.4 6.4-16 6.4-16 6.4-19.2 9.6-35.2 16-73.6 16-115.2 0-105.6-41.6-198.4-108.8-268.8C704 396.8 560 675.2 560 675.2zM224 419.2c0-28.8 22.4-51.2 51.2-51.2 28.8 0 51.2 22.4 51.2 51.2 0 28.8-22.4 51.2-51.2 51.2C246.4 470.4 224 448 224 419.2zM320 284.8c0-22.4 19.2-41.6 41.6-41.6 22.4 0 41.6 19.2 41.6 41.6 0 22.4-19.2 41.6-41.6 41.6C339.2 326.4 320 307.2 320 284.8zM457.6 208c0-12.8 12.8-25.6 25.6-25.6 12.8 0 25.6 12.8 25.6 25.6 0 12.8-12.8 25.6-25.6 25.6C470.4 233.6 457.6 220.8 457.6 208zM128 505.6C128 592 153.6 672 201.6 736c28.8-60.8 112-60.8 124.8-60.8-16-51.2 16-99.2 16-99.2l316.8-422.4c-48-19.2-99.2-32-150.4-32C297.6 118.4 128 291.2 128 505.6zM764.8 86.4c-22.4 19.2-390.4 518.4-390.4 518.4-22.4 28.8-12.8 76.8 22.4 99.2l9.6 6.4c35.2 22.4 80 12.8 99.2-25.6 0 0 6.4-12.8 9.6-19.2 54.4-105.6 275.2-524.8 288-553.6 6.4-19.2-3.2-32-19.2-32C777.6 76.8 771.2 80 764.8 86.4z"})]);Gc.displayName="OutlookIcon";var Yc=U({name:"AppearanceSwitch",setup(){const{config:e,isDarkmode:t,status:n}=br(),r=gr(),o=()=>{e.value==="switch"?n.value={light:"dark",dark:"auto",auto:"light"}[n.value]:n.value=n.value==="light"?"dark":"light"},i=async a=>{if(!(document.startViewTransition&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches&&!r.value)||!a){o();return}const l=a.clientX,s=a.clientY,c=Math.hypot(Math.max(l,innerWidth-l),Math.max(s,innerHeight-s)),u=t.value;await document.startViewTransition(async()=>{o(),await an()}).ready,t.value!==u&&document.documentElement.animate({clipPath:t.value?[`circle(${c}px at ${l}px ${s}px)`,`circle(0px at ${l}px ${s}px)`]:[`circle(0px at ${l}px ${s}px)`,`circle(${c}px at ${l}px ${s}px)`]},{duration:400,pseudoElement:t.value?"::view-transition-old(root)":"::view-transition-new(root)"})};return()=>f("button",{type:"button",id:"appearance-switch",onClick:i},[f(qc,{style:{display:n.value==="auto"?"block":"none"}}),f(jc,{style:{display:n.value==="dark"?"block":"none"}}),f(Wc,{style:{display:n.value==="light"?"block":"none"}})])}}),m1=U({name:"AppearanceMode",setup(){const e=ve(),{canToggle:t}=br(),n=I(()=>e.value.outlookLocales.darkmode);return()=>t.value?f("div",{class:"appearance-wrapper"},[f("label",{class:"appearance-title",for:"appearance-switch"},n.value),f(Yc)]):null}});const Co="VUEPRESS_THEME_COLOR";var _1=U({name:"ThemeColorPicker",props:{themeColor:{type:Object,required:!0}},setup(e){const t=(n="")=>{const r=document.documentElement.classList,o=$n(e.themeColor);if(!n){localStorage.removeItem(Co),r.remove(...o);return}r.remove(...o.filter(i=>i!==n)),r.add(n),localStorage.setItem(Co,n)};return ge(()=>{const n=localStorage.getItem(Co);n&&t(n)}),()=>f("ul",{id:"theme-color-picker"},[f("li",f("span",{class:"theme-color",onClick:()=>t()})),Vi(e.themeColor).map(([n,r])=>f("li",f("span",{style:{background:r},onClick:()=>t(n)})))])}});const wn=Ni.enableThemeColor==="true",g1=wn?Fh(Vi(Ni).filter(([e])=>e.startsWith("theme-"))):{};var b1=U({name:"ThemeColor",setup(){const e=ve(),t=I(()=>e.value.outlookLocales.themeColor);return()=>wn?f("div",{class:"theme-color-wrapper"},[f("label",{class:"theme-color-title",for:"theme-color-picker"},t.value),f(_1,{themeColor:g1})]):null}}),Zc=U({name:"ToggleFullScreenButton",setup(){const e=ve(),{isSupported:t,isFullscreen:n,toggle:r}=Mi(),o=I(()=>e.value.outlookLocales.fullscreen);return()=>t?f("div",{class:"full-screen-wrapper"},[f("label",{class:"full-screen-title",for:"full-screen-switch"},o.value),f("button",{type:"button",id:"full-screen-switch",class:"full-screen",ariaPressed:n.value,onClick:()=>r()},n.value?f(Kc):f(Uc))]):null}}),Qc=U({name:"OutlookSettings",setup(){const e=Bn(),t=gr(),n=I(()=>!t.value&&e.value.fullscreen);return()=>f(ro,()=>[wn?f(b1):null,f(m1),n.value?f(Zc):null])}}),y1=U({name:"NavScreen",props:{show:Boolean},emits:["close"],slots:Object,setup(e,{emit:t,slots:n}){const r=de(),{isMobile:o}=co(),i=it(),a=hc(i);return ge(()=>{i.value=document.body,fe(o,l=>{!l&&e.show&&(a.value=!1,t("close"))}),fe(()=>r.value.path,()=>{a.value=!1,t("close")})}),vr(()=>{a.value=!1}),()=>f(xt,{name:"fade",onEnter:()=>{a.value=!0},onAfterLeave:()=>{a.value=!1}},()=>{var l,s;return e.show?f("div",{id:"nav-screen"},f("div",{class:"vp-nav-screen-container"},[(l=n.before)==null?void 0:l.call(n),f(v1),f("div",{class:"vp-outlook-wrapper"},f(Qc)),(s=n.after)==null?void 0:s.call(n)])):null})}}),E1=U({name:"NavbarBrand",setup(){const e=ln(),t=no(),n=ve(),r=I(()=>n.value.home||e.value),o=I(()=>t.value.title),i=I(()=>n.value.navTitle??o.value),a=I(()=>n.value.logo?Ve(n.value.logo):null),l=I(()=>n.value.logoDark?Ve(n.value.logoDark):null);return()=>f(et,{to:r.value,class:"vp-brand"},()=>[a.value?f("img",{class:["vp-nav-logo",{light:!!l.value}],src:a.value,alt:o.value}):null,l.value?f("img",{class:["vp-nav-logo dark"],src:l.value,alt:o.value}):null,i.value?f("span",{class:["vp-site-name",{"hide-in-pad":a.value&&n.value.hideSiteNameOnMobile!==!1}]},i.value):null])}}),w1=U({name:"NavbarLinks",setup(){const e=Hc();return()=>e.value.length?f("nav",{class:"vp-nav-links"},e.value.map(t=>f("div",{class:"nav-item hide-in-mobile"},"children"in t?f(zc,{config:t}):f(Fe,{config:t})))):null}}),T1=U({name:"RepoLink",components:{BitbucketIcon:oc,GiteeIcon:rc,GitHubIcon:tc,GitLabIcon:nc,SourceIcon:ic},setup(){const e=d1();return()=>e.value?f("div",{class:"nav-item vp-repo"},f("a",{class:"vp-repo-link",href:e.value.link,target:"_blank",rel:"noopener noreferrer","aria-label":e.value.label},f(nt(`${e.value.type}Icon`),{style:{width:"1.25rem",height:"1.25rem",verticalAlign:"middle"}}))):null}});const Jc=({active:e=!1},{emit:t})=>f("button",{type:"button",class:["vp-toggle-navbar-button",{"is-active":e}],"aria-label":"Toggle Navbar","aria-expanded":e,"aria-controls":"nav-screen",onClick:()=>t("toggle")},f("span",[f("span",{class:"vp-top"}),f("span",{class:"vp-middle"}),f("span",{class:"vp-bottom"})]));Jc.displayName="ToggleNavbarButton";var A1=Jc;const Xo=(e,{emit:t})=>f("button",{type:"button",class:"vp-toggle-sidebar-button",title:"Toggle Sidebar",onClick:()=>t("toggle")},f("span",{class:"icon"}));Xo.displayName="ToggleSidebarButton",Xo.emits=["toggle"];var L1=Xo,P1=U({name:"OutlookButton",setup(){const{isSupported:e}=Mi(),t=Bn(),n=gr(),r=de(),{canToggle:o}=br(),i=ee(!1),a=I(()=>!n.value&&t.value.fullscreen&&e);return fe(()=>r.value.path,()=>{i.value=!1}),()=>o.value||a.value||wn?f("div",{class:"nav-item hide-in-mobile"},o.value&&!a.value&&!wn?f(Yc):a.value&&!o.value&&!wn?f(Zc):f("button",{type:"button",class:["outlook-button",{open:i.value}],tabindex:"-1","aria-hidden":!0},[f(Gc),f("div",{class:"outlook-dropdown"},f(Qc))])):null}}),R1=U({name:"NavBar",emits:["toggleSidebar"],slots:Object,setup(e,{emit:t,slots:n}){const r=ve(),{isMobile:o}=co(),i=ee(!1),a=I(()=>{const{navbarAutoHide:u="mobile"}=r.value;return u!=="none"&&(u==="always"||o.value)}),l=I(()=>r.value.navbarLayout||{start:["Brand"],center:["Links"],end:["Language","Repo","Outlook","Search"]}),s={Brand:E1,Language:p1,Links:w1,Repo:T1,Outlook:P1,Search:Ot("Docsearch")?nt("Docsearch"):Ot("SearchBox")?nt("SearchBox"):fl},c=u=>s[u]??(Ot(u)?nt(u):fl);return()=>{var u,d,p,m,g,w;return[f("header",{id:"navbar",class:["vp-navbar",{"auto-hide":a.value,"hide-icon":r.value.navbarIcon===!1}]},[f("div",{class:"vp-navbar-start"},[f(L1,{onToggle:()=>{i.value&&(i.value=!1),t("toggleSidebar")}}),(u=n.startBefore)==null?void 0:u.call(n),(l.value.start||[]).map(T=>f(c(T))),(d=n.startAfter)==null?void 0:d.call(n)]),f("div",{class:"vp-navbar-center"},[(p=n.centerBefore)==null?void 0:p.call(n),(l.value.center||[]).map(T=>f(c(T))),(m=n.centerAfter)==null?void 0:m.call(n)]),f("div",{class:"vp-navbar-end"},[(g=n.endBefore)==null?void 0:g.call(n),(l.value.end||[]).map(T=>f(c(T))),(w=n.endAfter)==null?void 0:w.call(n),f(A1,{active:i.value,onToggle:()=>{i.value=!i.value}})])]),f(y1,{show:i.value,onClose:()=>{i.value=!1}},{before:()=>{var T;return(T=n.screenTop)==null?void 0:T.call(n)},after:()=>{var T;return(T=n.screenBottom)==null?void 0:T.call(n)}})]}}}),I1=U({name:"SidebarChild",props:{config:{type:Object,required:!0}},setup(e){const t=yt();return()=>[Vc(e.config,{class:["vp-sidebar-link",`vp-sidebar-${e.config.type}`,{active:kn(t,e.config,!0)}],exact:!0}),Mc(e.config.children)]}}),O1=U({name:"SidebarGroup",props:{config:{type:Object,required:!0},open:{type:Boolean,required:!0}},emits:["toggle"],setup(e,{emit:t}){const n=yt(),r=I(()=>kn(n,e.config)),o=I(()=>kn(n,e.config,!0));return()=>{const{collapsible:i,children:a=[],icon:l,prefix:s,link:c,text:u}=e.config;return f("section",{class:"vp-sidebar-group"},[f(i?"button":"p",{class:["vp-sidebar-heading",{clickable:i||c,exact:o.value,active:r.value}],...i?{type:"button",onClick:()=>t("toggle"),onKeydown:d=>{d.key==="Enter"&&t("toggle")}}:{}},[f(je,{icon:l}),c?f(Fe,{class:"vp-sidebar-title",config:{text:u,link:c},noExternalLinkIcon:!0}):f("span",{class:"vp-sidebar-title"},u),i?f("span",{class:["vp-arrow",e.open?"down":"end"]}):null]),e.open||!i?f(Xc,{key:s,config:a}):null])}}}),Xc=U({name:"SidebarLinks",props:{config:{type:Array,required:!0}},setup(e){const t=yt(),n=ee(-1),r=o=>{n.value=o===n.value?-1:o};return fe(()=>t.path,()=>{const o=e.config.findIndex(i=>Sc(t,i));n.value=o},{immediate:!0,flush:"post"}),()=>f("ul",{class:"vp-sidebar-links"},e.config.map((o,i)=>f("li",o.type==="group"?f(O1,{config:o,open:i===n.value,onToggle:()=>r(i)}):f(I1,{config:o}))))}}),x1=U({name:"SideBar",slots:Object,setup(e,{slots:t}){const n=yt(),r=ve(),o=Fi(),i=it();return ge(()=>{fe(()=>n.hash,a=>{const l=document.querySelector(`.vp-sidebar a.vp-sidebar-link[href="${n.path}${a}"]`);if(!l)return;const{top:s,height:c}=i.value.getBoundingClientRect(),{top:u,height:d}=l.getBoundingClientRect();us+c&&l.scrollIntoView(!1)},{immediate:!0})}),()=>{var a,l,s;return f("aside",{ref:i,id:"sidebar",class:["vp-sidebar",{"hide-icon":r.value.sidebarIcon===!1}]},[(a=t.top)==null?void 0:a.call(t),((l=t.default)==null?void 0:l.call(t))||f(Xc,{config:o.value}),(s=t.bottom)==null?void 0:s.call(t)])}}}),eu=U({name:"CommonWrapper",props:{containerClass:{type:String,default:""},noNavbar:Boolean,noSidebar:Boolean,noToc:Boolean},slots:Object,setup(e,{slots:t}){const n=Ge(),r=de(),o=Pe(),i=ve(),{isMobile:a,isPC:l}=co(),[s,c]=Ja(!1),[u,d]=Ja(!1),p=Fi(),m=ee(!1),g=I(()=>e.noNavbar||o.value.navbar===!1||i.value.navbar===!1?!1:!!(r.value.title||i.value.logo||i.value.repo||i.value.navbar)),w=I(()=>e.noSidebar?!1:o.value.sidebar!==!1&&p.value.length!==0&&!o.value.home),T=I(()=>e.noToc||o.value.home?!1:o.value.toc||i.value.toc!==!1&&o.value.toc!==!1),y={x:0,y:0},P=k=>{y.x=k.changedTouches[0].clientX,y.y=k.changedTouches[0].clientY},b=k=>{const N=k.changedTouches[0].clientX-y.x,V=k.changedTouches[0].clientY-y.y;Math.abs(N)>Math.abs(V)*1.5&&Math.abs(N)>40&&(N>0&&y.x<=80?c(!0):c(!1))},A=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;let M=0;return Me("scroll",rv(()=>{const k=A();k<=58||k{k||c(!1)}),ge(()=>{const k=hc(document.body);fe(s,V=>{k.value=V});const N=n.afterEach(()=>{c(!1)});vr(()=>{k.value=!1,N()})}),()=>f(Ot("GlobalEncrypt")?nt("GlobalEncrypt"):Us,()=>f("div",{class:["theme-container",{"no-navbar":!g.value,"no-sidebar":!w.value&&!(t.sidebar||t.sidebarTop||t.sidebarBottom),"has-toc":T.value,"hide-navbar":m.value,"sidebar-collapsed":!a.value&&!l.value&&u.value,"sidebar-open":a.value&&s.value},e.containerClass,o.value.containerClass||""],onTouchStart:P,onTouchEnd:b},[g.value?f(R1,{onToggleSidebar:()=>c()},{startBefore:()=>{var k;return(k=t.navbarStartBefore)==null?void 0:k.call(t)},startAfter:()=>{var k;return(k=t.navbarStartAfter)==null?void 0:k.call(t)},centerBefore:()=>{var k;return(k=t.navbarCenterBefore)==null?void 0:k.call(t)},centerAfter:()=>{var k;return(k=t.navbarCenterAfter)==null?void 0:k.call(t)},endBefore:()=>{var k;return(k=t.navbarEndBefore)==null?void 0:k.call(t)},endAfter:()=>{var k;return(k=t.navbarEndAfter)==null?void 0:k.call(t)},screenTop:()=>{var k;return(k=t.navScreenTop)==null?void 0:k.call(t)},screenBottom:()=>{var k;return(k=t.navScreenBottom)==null?void 0:k.call(t)}}):null,f(xt,{name:"fade"},()=>s.value?f("div",{class:"vp-sidebar-mask",onClick:()=>c(!1)}):null),f(xt,{name:"fade"},()=>a.value?null:f("div",{class:"toggle-sidebar-wrapper",onClick:()=>d()},f("span",{class:["arrow",u.value?"end":"start"]}))),f(x1,{},{...t.sidebar?{default:()=>t.sidebar()}:{},top:()=>{var k;return(k=t.sidebarTop)==null?void 0:k.call(t)},bottom:()=>{var k;return(k=t.sidebarBottom)==null?void 0:k.call(t)}}),t.default(),f(u1)]))}}),_n=U({name:"DropTransition",props:{type:{type:String,default:"single"},delay:{type:Number,default:0},duration:{type:Number,default:.25},appear:Boolean},slots:Object,setup(e,{slots:t}){const n=o=>{o.style.transition=`transform ${e.duration}s ease-in-out ${e.delay}s, opacity ${e.duration}s ease-in-out ${e.delay}s`,o.style.transform="translateY(-20px)",o.style.opacity="0"},r=o=>{o.style.transform="translateY(0)",o.style.opacity="1"};return()=>f(e.type==="single"?xt:Bd,{name:"drop",appear:e.appear,onAppear:n,onAfterAppear:r,onEnter:n,onAfterEnter:r,onBeforeLeave:n},()=>t.default())}});const ei=({custom:e})=>f(Is,{class:["theme-hope-content",{custom:e}]});ei.displayName="MarkdownContent",ei.props={custom:Boolean};var tu=ei;const nu=()=>f(Ae,{name:"author"},()=>f("path",{d:"M649.6 633.6c86.4-48 147.2-144 147.2-249.6 0-160-128-288-288-288s-288 128-288 288c0 108.8 57.6 201.6 147.2 249.6-121.6 48-214.4 153.6-240 288-3.2 9.6 0 19.2 6.4 25.6 3.2 9.6 12.8 12.8 22.4 12.8h704c9.6 0 19.2-3.2 25.6-12.8 6.4-6.4 9.6-16 6.4-25.6-25.6-134.4-121.6-240-243.2-288z"}));nu.displayName="AuthorIcon";const ru=()=>f(Ae,{name:"calendar"},()=>f("path",{d:"M716.4 110.137c0-18.753-14.72-33.473-33.472-33.473-18.753 0-33.473 14.72-33.473 33.473v33.473h66.993v-33.473zm-334.87 0c0-18.753-14.72-33.473-33.473-33.473s-33.52 14.72-33.52 33.473v33.473h66.993v-33.473zm468.81 33.52H716.4v100.465c0 18.753-14.72 33.473-33.472 33.473a33.145 33.145 0 01-33.473-33.473V143.657H381.53v100.465c0 18.753-14.72 33.473-33.473 33.473a33.145 33.145 0 01-33.473-33.473V143.657H180.6A134.314 134.314 0 0046.66 277.595v535.756A134.314 134.314 0 00180.6 947.289h669.74a134.36 134.36 0 00133.94-133.938V277.595a134.314 134.314 0 00-133.94-133.938zm33.473 267.877H147.126a33.145 33.145 0 01-33.473-33.473c0-18.752 14.72-33.473 33.473-33.473h736.687c18.752 0 33.472 14.72 33.472 33.473a33.145 33.145 0 01-33.472 33.473z"}));ru.displayName="CalendarIcon";const ou=()=>f(Ae,{name:"category"},()=>f("path",{d:"M148.41 106.992h282.176c22.263 0 40.31 18.048 40.31 40.31V429.48c0 22.263-18.047 40.31-40.31 40.31H148.41c-22.263 0-40.311-18.047-40.311-40.31V147.302c0-22.263 18.048-40.31 40.311-40.31zM147.556 553.478H429.73c22.263 0 40.311 18.048 40.311 40.31v282.176c0 22.263-18.048 40.312-40.31 40.312H147.555c-22.263 0-40.311-18.049-40.311-40.312V593.79c0-22.263 18.048-40.311 40.31-40.311zM593.927 106.992h282.176c22.263 0 40.31 18.048 40.31 40.31V429.48c0 22.263-18.047 40.31-40.31 40.31H593.927c-22.263 0-40.311-18.047-40.311-40.31V147.302c0-22.263 18.048-40.31 40.31-40.31zM730.22 920.502H623.926c-40.925 0-74.22-33.388-74.22-74.425V623.992c0-41.038 33.387-74.424 74.425-74.424h222.085c41.038 0 74.424 33.226 74.424 74.067v114.233c0 10.244-8.304 18.548-18.547 18.548s-18.548-8.304-18.548-18.548V623.635c0-20.388-16.746-36.974-37.33-36.974H624.13c-20.585 0-37.331 16.747-37.331 37.33v222.086c0 20.585 16.654 37.331 37.126 37.331H730.22c10.243 0 18.547 8.304 18.547 18.547 0 10.244-8.304 18.547-18.547 18.547z"}));ou.displayName="CategoryIcon";const iu=()=>f(Ae,{name:"print"},()=>f("path",{d:"M819.2 364.8h-44.8V128c0-17.067-14.933-32-32-32H281.6c-17.067 0-32 14.933-32 32v236.8h-44.8C145.067 364.8 96 413.867 96 473.6v192c0 59.733 49.067 108.8 108.8 108.8h44.8V896c0 17.067 14.933 32 32 32h460.8c17.067 0 32-14.933 32-32V774.4h44.8c59.733 0 108.8-49.067 108.8-108.8v-192c0-59.733-49.067-108.8-108.8-108.8zM313.6 160h396.8v204.8H313.6V160zm396.8 704H313.6V620.8h396.8V864zM864 665.6c0 25.6-19.2 44.8-44.8 44.8h-44.8V588.8c0-17.067-14.933-32-32-32H281.6c-17.067 0-32 14.933-32 32v121.6h-44.8c-25.6 0-44.8-19.2-44.8-44.8v-192c0-25.6 19.2-44.8 44.8-44.8h614.4c25.6 0 44.8 19.2 44.8 44.8v192z"}));iu.displayName="PrintIcon";const au=()=>f(Ae,{name:"tag"},()=>f("path",{d:"M939.902 458.563L910.17 144.567c-1.507-16.272-14.465-29.13-30.737-30.737L565.438 84.098h-.402c-3.215 0-5.726 1.005-7.634 2.913l-470.39 470.39a10.004 10.004 0 000 14.164l365.423 365.424c1.909 1.908 4.42 2.913 7.132 2.913s5.223-1.005 7.132-2.913l470.39-470.39c2.01-2.11 3.014-5.023 2.813-8.036zm-240.067-72.121c-35.458 0-64.286-28.828-64.286-64.286s28.828-64.285 64.286-64.285 64.286 28.828 64.286 64.285-28.829 64.286-64.286 64.286z"}));au.displayName="TagIcon";const lu=()=>f(Ae,{name:"timer"},()=>f("path",{d:"M799.387 122.15c4.402-2.978 7.38-7.897 7.38-13.463v-1.165c0-8.933-7.38-16.312-16.312-16.312H256.33c-8.933 0-16.311 7.38-16.311 16.312v1.165c0 5.825 2.977 10.874 7.637 13.592 4.143 194.44 97.22 354.963 220.201 392.763-122.204 37.542-214.893 196.511-220.2 389.397-4.661 5.049-7.638 11.651-7.638 19.03v5.825h566.49v-5.825c0-7.379-2.849-13.981-7.509-18.9-5.049-193.016-97.867-351.985-220.2-389.527 123.24-37.67 216.446-198.453 220.588-392.892zM531.16 450.445v352.632c117.674 1.553 211.787 40.778 211.787 88.676H304.097c0-48.286 95.149-87.382 213.728-88.676V450.445c-93.077-3.107-167.901-81.297-167.901-177.093 0-8.803 6.99-15.793 15.793-15.793 8.803 0 15.794 6.99 15.794 15.793 0 80.261 63.69 145.635 142.01 145.635s142.011-65.374 142.011-145.635c0-8.803 6.99-15.793 15.794-15.793s15.793 6.99 15.793 15.793c0 95.019-73.789 172.82-165.96 177.093z"}));lu.displayName="TimerIcon";const su=()=>f(Ae,{name:"word"},()=>[f("path",{d:"M518.217 432.64V73.143A73.143 73.143 0 01603.43 1.097a512 512 0 01419.474 419.474 73.143 73.143 0 01-72.046 85.212H591.36a73.143 73.143 0 01-73.143-73.143z"}),f("path",{d:"M493.714 566.857h340.297a73.143 73.143 0 0173.143 85.577A457.143 457.143 0 11371.566 117.76a73.143 73.143 0 0185.577 73.143v339.383a36.571 36.571 0 0036.571 36.571z"})]);su.displayName="WordIcon";const Ut=()=>{const e=ve();return I(()=>e.value.metaLocales)};var k1=U({name:"AuthorInfo",inheritAttrs:!1,props:{author:{type:Array,required:!0},pure:Boolean},setup(e){const t=Ut();return()=>e.author.length?f("span",{class:"page-author-info","aria-label":`${t.value.author}${e.pure?"":"🖊"}`,...e.pure?{}:{"data-balloon-pos":"down"}},[f(nu),f("span",e.author.map(n=>n.url?f("a",{class:"page-author-item",href:n.url,target:"_blank",rel:"noopener noreferrer"},n.name):f("span",{class:"page-author-item"},n.name))),f("span",{property:"author",content:e.author.map(n=>n.name).join(", ")})]):null}}),C1=U({name:"CategoryInfo",inheritAttrs:!1,props:{category:{type:Array,required:!0},pure:Boolean},setup(e){const t=Ge(),n=de(),r=Ut(),o=(i,a="")=>{a&&n.value.path!==a&&(i.preventDefault(),t.push(a))};return()=>e.category.length?f("span",{class:"page-category-info","aria-label":`${r.value.category}${e.pure?"":"🌈"}`,...e.pure?{}:{"data-balloon-pos":"down"}},[f(ou),e.category.map(({name:i,path:a})=>f("span",{class:["page-category-item",{[`category${Ks(i,9)}`]:!e.pure,clickable:a}],role:a?"navigation":"",onClick:l=>o(l,a)},i)),f("meta",{property:"articleSection",content:e.category.map(({name:i})=>i).join(",")})]):null}}),D1=U({name:"DateInfo",inheritAttrs:!1,props:{date:{type:Object,default:null},localizedDate:{type:String,default:""},pure:Boolean},setup(e){const t=Ii(),n=Ut();return()=>e.date?f("span",{class:"page-date-info","aria-label":`${n.value.date}${e.pure?"":"📅"}`,...e.pure?{}:{"data-balloon-pos":"down"}},[f(ru),f("span",f(ro,()=>e.localizedDate||e.date.toLocaleDateString(t.value))),f("meta",{property:"datePublished",content:e.date.toISOString()||""})]):null}}),S1=U({name:"OriginalInfo",inheritAttrs:!1,props:{isOriginal:Boolean},setup(e){const t=Ut();return()=>e.isOriginal?f("span",{class:"page-original-info"},t.value.origin):null}}),V1=U({name:"ReadingTimeInfo",inheritAttrs:!1,props:{readingTime:{type:Object,default:()=>null},readingTimeLocale:{type:Object,default:()=>null},pure:Boolean},setup(e){const t=Ut(),n=I(()=>{if(!e.readingTime)return null;const{minutes:r}=e.readingTime;return r<1?"PT1M":`PT${Math.round(r)}M`});return()=>{var r,o;return(r=e.readingTimeLocale)!=null&&r.time?f("span",{class:"page-reading-time-info","aria-label":`${t.value.readingTime}${e.pure?"":"⌛"}`,...e.pure?{}:{"data-balloon-pos":"down"}},[f(lu),f("span",(o=e.readingTimeLocale)==null?void 0:o.time),f("meta",{property:"timeRequired",content:n.value})]):null}}}),M1=U({name:"TagInfo",inheritAttrs:!1,props:{tag:{type:Array,default:()=>[]},pure:Boolean},setup(e){const t=Ge(),n=de(),r=Ut(),o=(i,a="")=>{a&&n.value.path!==a&&(i.preventDefault(),t.push(a))};return()=>e.tag.length?f("span",{class:"page-tag-info","aria-label":`${r.value.tag}${e.pure?"":"🏷"}`,...e.pure?{}:{"data-balloon-pos":"down"}},[f(au),e.tag.map(({name:i,path:a})=>f("span",{class:["page-tag-item",{[`tag${Ks(i,9)}`]:!e.pure,clickable:a}],role:a?"navigation":"",onClick:l=>o(l,a)},i)),f("meta",{property:"keywords",content:e.tag.map(({name:i})=>i).join(",")})]):null}}),$1=U({name:"ReadTimeInfo",inheritAttrs:!1,props:{readingTime:{type:Object,default:()=>null},readingTimeLocale:{type:Object,default:()=>null},pure:Boolean},setup(e){const t=Ut();return()=>{var n,r,o;return(n=e.readingTimeLocale)!=null&&n.words?f("span",{class:"page-word-info","aria-label":`${t.value.words}${e.pure?"":"🔠"}`,...e.pure?{}:{"data-balloon-pos":"down"}},[f(su),f("span",(r=e.readingTimeLocale)==null?void 0:r.words),f("meta",{property:"wordCount",content:(o=e.readingTime)==null?void 0:o.words})]):null}}}),N1=U({name:"PageInfo",components:{AuthorInfo:k1,CategoryInfo:C1,DateInfo:D1,OriginalInfo:S1,PageViewInfo:()=>null,ReadingTimeInfo:V1,TagInfo:M1,WordInfo:$1},props:{items:{type:[Array,Boolean],default:()=>["Author","Original","Date","PageView","ReadingTime","Category","Tag"]},info:{type:Object,required:!0}},setup(e){const t=gr();return()=>e.items?f("div",{class:"page-info"},e.items.map(n=>f(nt(`${n}Info`),{...e.info,pure:t.value}))):null}}),z1=U({name:"PrintButton",setup(){const e=Bn(),t=ve();return()=>e.value.print===!1?null:f("button",{type:"button",class:"print-button",title:t.value.metaLocales.print,onClick:()=>{window.print()}},f(iu))}});const B1=({title:e,level:t,slug:n})=>f(et,{to:`#${n}`,class:["toc-link",`level${t}`]},()=>e),ti=(e,t)=>{const n=yt();return e.length&&t>0?f("ul",{class:"toc-list"},e.map(r=>{const o=ti(r.children,t-1);return[f("li",{class:["toc-item",{active:n.hash===`#${r.slug}`}]},B1(r)),o?f("li",o):null]})):null};var F1=U({name:"TOC",props:{items:{type:Array,default:()=>[]},headerDepth:{type:Number,default:2}},slots:Object,setup(e,{slots:t}){const n=yt(),r=de(),o=Ut(),i=it(),a=ee("-1.7rem"),l=c=>{var u;(u=i.value)==null||u.scrollTo({top:c,behavior:"smooth"})},s=()=>{if(i.value){const c=document.querySelector(".toc-item.active");c?a.value=`${c.getBoundingClientRect().top-i.value.getBoundingClientRect().top+i.value.scrollTop}px`:a.value="-1.7rem"}else a.value="-1.7rem"};return ge(()=>{fe(()=>n.hash,c=>{if(i.value){const u=document.querySelector(`#toc a.toc-link[href$="${c}"]`);if(!u)return;const{top:d,height:p}=i.value.getBoundingClientRect(),{top:m,height:g}=u.getBoundingClientRect();md+p&&l(i.value.scrollTop+m+g-d-p)}}),fe(()=>n.fullPath,s,{flush:"post",immediate:!0})}),()=>{var u,d;const c=e.items.length?ti(e.items,e.headerDepth):r.value.headers?ti(r.value.headers,e.headerDepth):null;return c?f("div",{class:"toc-place-holder"},[f("aside",{id:"toc"},[(u=t.before)==null?void 0:u.call(t),f("div",{class:"toc-header"},[o.value.toc,f(z1)]),f("div",{class:"toc-wrapper",ref:i},[c,f("div",{class:"toc-marker",style:{top:a.value}})]),(d=t.after)==null?void 0:d.call(t)])]):null}}}),cu=U({name:"SkipLink",props:{content:{type:String,default:"main-content"}},setup(e){const t=de(),n=ve(),r=it(),o=({target:i})=>{const a=document.querySelector(i.hash);if(a){const l=()=>{a.removeAttribute("tabindex"),a.removeEventListener("blur",l)};a.setAttribute("tabindex","-1"),a.addEventListener("blur",l),a.focus(),window.scrollTo(0,0)}};return ge(()=>{fe(()=>t.value.path,()=>r.value.focus())}),()=>[f("span",{ref:r,tabindex:"-1"}),f("a",{href:`#${e.content}`,class:"vp-skip-link sr-only",onClick:o},n.value.routeLocales.skipToContent)]}});let Do=null,Wn=null;const H1={wait:()=>Do,pending:()=>{Do=new Promise(e=>Wn=e)},resolve:()=>{Wn==null||Wn(),Do=null,Wn=null}},uu=()=>H1;var j1=U({name:"FadeSlideY",slots:Object,setup(e,{slots:t}){const{resolve:n,pending:r}=uu();return()=>f(xt,{name:"fade-slide-y",mode:"out-in",onBeforeEnter:n,onBeforeLeave:r},()=>{var o;return(o=t.default)==null?void 0:o.call(t)})}});const W1=(e,t)=>{const n=e.replace(t,"/").split("/"),r=[];let o=Ri(t);return n.forEach((i,a)=>{a!==n.length-1?(o+=`${i}/`,r.push({link:o,name:i||"Home"})):i!==""&&(o+=i,r.push({link:o,name:i}))}),r},fu=(e,{slots:t})=>{var d,p;const{bgImage:n,bgImageDark:r,bgImageStyle:o,color:i,description:a,image:l,imageDark:s,header:c,features:u=[]}=e;return f("div",{class:"vp-feature-wrapper"},[n?f("div",{class:["vp-feature-bg",{light:r}],style:[{"background-image":`url(${n})`},o]}):null,r?f("div",{class:"vp-feature-bg dark",style:[{"background-image":`url(${r})`},o]}):null,f("div",{class:"vp-feature",style:i?{color:i}:{}},[((d=t.image)==null?void 0:d.call(t,e))||[l?f("img",{class:["vp-feature-image",{light:s}],src:Ve(l),alt:c}):null,s?f("img",{class:"vp-feature-image dark",src:Ve(s),alt:c}):null],((p=t.info)==null?void 0:p.call(t,e))||[c?f("h2",{class:"vp-feature-header"},c):null,a?f("p",{class:"vp-feature-description",innerHTML:a}):null],u.length?f("div",{class:"vp-features"},u.map(({icon:m,title:g,details:w,link:T})=>{const y=[f("h3",{class:"vp-feature-title"},[f(je,{icon:m}),f("span",{innerHTML:g})]),f("p",{class:"vp-feature-details",innerHTML:w})];return T?Wr(T)?f("a",{class:"vp-feature-item link",href:T,"aria-label":g,target:"_blank"},y):f(et,{class:"vp-feature-item link",to:T,"aria-label":g},()=>y):f("div",{class:"vp-feature-item"},y)})):null])])};fu.displayName="FeaturePanel";var pl=fu;const du=e=>{const{icon:t="",color:n,size:r}=e,o={};return n&&(o.color=n),r&&(o.height=Number.isNaN(Number(r))?r:`${r}px`),Mn(t)?f("img",{class:"icon",src:t,"no-view":"",style:o}):ao(t)?f("img",{class:"icon",src:Ve(t),"no-view":"",style:o}):f(nt("FontIcon"),e)};du.displayName="HopeIcon";var q1=du,U1=U({name:"HeroInfo",slots:Object,setup(e,{slots:t}){const n=Pe(),r=no(),o=I(()=>n.value.heroFullScreen??!1),i=I(()=>{const{heroText:c,tagline:u}=n.value;return{text:c??r.value.title??"Hello",tagline:u??r.value.description??"",isFullScreen:o.value}}),a=I(()=>{const{heroText:c,heroImage:u,heroImageDark:d,heroAlt:p,heroImageStyle:m}=n.value;return{image:u?Ve(u):null,imageDark:d?Ve(d):null,heroStyle:m,alt:p||c||"hero image",isFullScreen:o.value}}),l=I(()=>{const{bgImage:c,bgImageDark:u,bgImageStyle:d}=n.value;return{image:kt(c)?Ve(c):null,imageDark:kt(u)?Ve(u):null,bgStyle:d,isFullScreen:o.value}}),s=I(()=>n.value.actions??[]);return()=>{var c,u,d;return f("header",{class:["vp-hero-info-wrapper",{fullscreen:o.value}]},[((c=t.heroBg)==null?void 0:c.call(t,l.value))||[l.value.image?f("div",{class:["vp-hero-mask",{light:l.value.imageDark}],style:[{"background-image":`url(${l.value.image})`},l.value.bgStyle]}):null,l.value.imageDark?f("div",{class:"vp-hero-mask dark",style:[{"background-image":`url(${l.value.imageDark})`},l.value.bgStyle]}):null],f("div",{class:"vp-hero-info"},[((u=t.heroImage)==null?void 0:u.call(t,a.value))||f(_n,{appear:!0,type:"group"},()=>[a.value.image?f("img",{key:"light",class:["vp-hero-image",{light:a.value.imageDark}],style:a.value.heroStyle,src:a.value.image,alt:a.value.alt}):null,a.value.imageDark?f("img",{key:"dark",class:"vp-hero-image dark",style:a.value.heroStyle,src:a.value.imageDark,alt:a.value.alt}):null]),((d=t.heroInfo)==null?void 0:d.call(t,i.value))??f("div",{class:"vp-hero-infos"},[i.value.text?f(_n,{appear:!0,delay:.04},()=>f("h1",{id:"main-title"},i.value.text)):null,i.value.tagline?f(_n,{appear:!0,delay:.08},()=>f("p",{id:"main-description",innerHTML:i.value.tagline})):null,s.value.length?f(_n,{appear:!0,delay:.12},()=>f("p",{class:"vp-hero-actions"},s.value.map(p=>f(Fe,{class:["vp-hero-action",p.type||"default"],config:p,noExternalLinkIcon:!0},p.icon?{before:()=>f(q1,{icon:p.icon})}:{})))):null])])])}}});const pu=(e,{slots:t})=>{var p,m,g;const{bgImage:n,bgImageDark:r,bgImageStyle:o,color:i,description:a,image:l,imageDark:s,header:c,highlights:u=[],type:d="un-order"}=e;return f("div",{class:"vp-highlight-wrapper",style:i?{color:i}:{}},[n?f("div",{class:["vp-highlight-bg",{light:r}],style:[{"background-image":`url(${n})`},o]}):null,r?f("div",{class:"vp-highlight-bg dark",style:[{"background-image":`url(${r})`},o]}):null,f("div",{class:"vp-highlight"},[((p=t.image)==null?void 0:p.call(t,e))||[l?f("img",{class:["vp-highlight-image",{light:s}],src:Ve(l),alt:c}):null,s?f("img",{class:"vp-highlight-image dark",src:Ve(s),alt:c}):null],((m=t.info)==null?void 0:m.call(t,e))||[f("div",{class:"vp-highlight-info-wrapper"},f("div",{class:"vp-highlight-info"},[c?f("h2",{class:"vp-highlight-header",innerHTML:c}):null,a?f("p",{class:"vp-highlight-description",innerHTML:a}):null,((g=t.highlights)==null?void 0:g.call(t,u))||f(d==="order"?"ol":d==="no-order"?"dl":"ul",{class:"vp-highlights"},u.map(({icon:w,title:T,details:y,link:P})=>{const b=[f(d==="no-order"?"dt":"h3",{class:"vp-highlight-title"},[w?f(je,{class:"vp-highlight-icon",icon:w}):null,f("span",{innerHTML:T})]),y?f(d==="no-order"?"dd":"p",{class:"vp-highlight-details",innerHTML:y}):null];return f(d==="no-order"?"div":"li",{class:["vp-highlight-item-wrapper",{link:P}]},P?$h(P)?f("a",{class:"vp-highlight-item link",href:P,"aria-label":T,target:"_blank"},b):f(et,{class:"vp-highlight-item link",to:P,"aria-label":T},()=>b):f("div",{class:"vp-highlight-item"},b))}))]))]])])};pu.displayName="HighlightPanel";var K1=pu,G1=U({name:"HomePage",slots:Object,setup(e,{slots:t}){const n=gr(),r=Pe(),o=I(()=>{const{features:a}=r.value;return X(a)?a:null}),i=I(()=>{const{highlights:a}=r.value;return X(a)?a:null});return()=>{var a,l,s,c;return f("main",{id:"main-content",class:["vp-project-home ",{pure:n.value}],"aria-labelledby":r.value.heroText===null?"":"main-title"},[(a=t.top)==null?void 0:a.call(t),f(U1),((l=i.value)==null?void 0:l.map(u=>"features"in u?f(pl,u):f(K1,u)))||(o.value?f(_n,{appear:!0,delay:.24},()=>f(pl,{features:o.value})):null),(s=t.center)==null?void 0:s.call(t),f(_n,{appear:!0,delay:.32},()=>f(tu)),(c=t.bottom)==null?void 0:c.call(t)])}}}),Y1=U({name:"BreadCrumb",setup(){const e=Ge(),t=de(),n=ln(),r=Pe(),o=ve(),i=it([]),a=I(()=>(r.value.breadcrumb||r.value.breadcrumb!==!1&&o.value.breadcrumb!==!1)&&i.value.length>1),l=I(()=>r.value.breadcrumbIcon||r.value.breadcrumbIcon!==!1&&o.value.breadcrumbIcon!==!1),s=()=>{const c=e.getRoutes(),u=W1(t.value.path,n.value).map(({link:d,name:p})=>{const m=c.find(g=>g.path===d);if(m){const{meta:g,path:w}=Ur(e,m.path);return{title:g[Rt.shortTitle]||g[Rt.title]||p,icon:g[Rt.icon],path:w}}return null}).filter(d=>d!==null);u.length>1&&(i.value=u)};return ge(()=>{fe(()=>t.value.path,s,{immediate:!0})}),()=>f("nav",{class:["vp-breadcrumb",{disable:!a.value}]},a.value?f("ol",{vocab:"https://schema.org/",typeof:"BreadcrumbList"},i.value.map((c,u)=>f("li",{class:{"is-active":i.value.length-1===u},property:"itemListElement",typeof:"ListItem"},[f(et,{to:c.path,property:"item",typeof:"WebPage"},()=>[l.value?f(je,{icon:c.icon}):null,f("span",{property:"name"},c.title||"Unknown")]),f("meta",{property:"position",content:u+1})]))):[])}});const hl=e=>{const t=Ge();return e===!1?!1:ue(e)?En(t,e,!0):Pi(e)?e:null},ni=(e,t,n)=>{const r=e.findIndex(o=>o.link===t);if(r!==-1){const o=e[r+n];return o!=null&&o.link?o:null}for(const o of e)if(o.children){const i=ni(o.children,t,n);if(i)return i}return null};var Z1=U({name:"PageNav",setup(){const e=ve(),t=Pe(),n=Fi(),r=de(),o=Zm(),i=I(()=>{const l=hl(t.value.prev);return l===!1?null:l||(e.value.prevLink===!1?null:ni(n.value,r.value.path,-1))}),a=I(()=>{const l=hl(t.value.next);return l===!1?null:l||(e.value.nextLink===!1?null:ni(n.value,r.value.path,1))});return Me("keydown",l=>{l.altKey&&(l.key==="ArrowRight"?a.value&&(o(a.value.link),l.preventDefault()):l.key==="ArrowLeft"&&i.value&&(o(i.value.link),l.preventDefault()))}),()=>i.value||a.value?f("nav",{class:"vp-page-nav"},[i.value?f(Fe,{class:"prev",config:i.value},()=>{var l,s;return[f("div",{class:"hint"},[f("span",{class:"arrow start"}),e.value.metaLocales.prev]),f("div",{class:"link"},[f(je,{icon:(l=i.value)==null?void 0:l.icon}),(s=i.value)==null?void 0:s.text])]}):null,a.value?f(Fe,{class:"next",config:a.value},()=>{var l,s;return[f("div",{class:"hint"},[e.value.metaLocales.next,f("span",{class:"arrow end"})]),f("div",{class:"link"},[(l=a.value)==null?void 0:l.text,f(je,{icon:(s=a.value)==null?void 0:s.icon})])]}):null]):null}});const Q1={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},J1=({docsRepo:e,docsBranch:t,docsDir:n,filePathRelative:r,editLinkPattern:o})=>{if(!r)return null;const i=ec(e);let a;return o?a=o:i!==null&&(a=Q1[i]),a?a.replace(/:repo/,Mn(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,bs(`${Ri(n)}/${r}`)):null},X1=()=>{const e=ve(),t=de(),n=Pe();return I(()=>{const{repo:r,docsRepo:o=r,docsBranch:i="main",docsDir:a="",editLink:l,editLinkPattern:s=""}=e.value;if(!(n.value.editLink??l??!0)||!o)return null;const c=J1({docsRepo:o,docsBranch:i,docsDir:a,editLinkPattern:s,filePathRelative:t.value.filePathRelative});return c?{text:e.value.metaLocales.editLink,link:c}:null})},e_=()=>{const e=no(),t=ve(),n=de(),r=Pe();return I(()=>{var o,i;return!(r.value.lastUpdated??t.value.lastUpdated??!0)||!((o=n.value.git)!=null&&o.updatedTime)?null:new Date((i=n.value.git)==null?void 0:i.updatedTime).toLocaleString(e.value.lang)})},t_=()=>{const e=ve(),t=de(),n=Pe();return I(()=>{var r;return n.value.contributors??e.value.contributors??!0?((r=t.value.git)==null?void 0:r.contributors)??null:null})};var n_=U({name:"PageTitle",setup(){const e=de(),t=Pe(),n=ve(),{info:r,items:o}=e1();return()=>f("div",{class:"vp-page-title"},[f("h1",[n.value.titleIcon===!1?null:f(je,{icon:t.value.icon}),e.value.title]),f(N1,{info:r.value,...o.value===null?{}:{items:o.value}}),f("hr")])}});const hu=()=>f(Ae,{name:"edit"},()=>[f("path",{d:"M430.818 653.65a60.46 60.46 0 0 1-50.96-93.281l71.69-114.012 7.773-10.365L816.038 80.138A60.46 60.46 0 0 1 859.225 62a60.46 60.46 0 0 1 43.186 18.138l43.186 43.186a60.46 60.46 0 0 1 0 86.373L588.879 565.55l-8.637 8.637-117.466 68.234a60.46 60.46 0 0 1-31.958 11.229z"}),f("path",{d:"M728.802 962H252.891A190.883 190.883 0 0 1 62.008 771.98V296.934a190.883 190.883 0 0 1 190.883-192.61h267.754a60.46 60.46 0 0 1 0 120.92H252.891a69.962 69.962 0 0 0-69.098 69.099V771.98a69.962 69.962 0 0 0 69.098 69.098h475.911A69.962 69.962 0 0 0 797.9 771.98V503.363a60.46 60.46 0 1 1 120.922 0V771.98A190.883 190.883 0 0 1 728.802 962z"})]);hu.displayName="EditIcon";var r_=U({name:"PageMeta",setup(){const e=ve(),t=X1(),n=e_(),r=t_();return()=>{const{metaLocales:o}=e.value;return f("footer",{class:"page-meta"},[t.value?f("div",{class:"meta-item edit-link"},f(Fe,{class:"label",config:t.value},{before:()=>f(hu)})):null,f("div",{class:"meta-item git-info"},[n.value?f("div",{class:"update-time"},[f("span",{class:"label"},`${o.lastUpdated}: `),f(ro,()=>f("span",{class:"info"},n.value))]):null,r.value&&r.value.length?f("div",{class:"contributors"},[f("span",{class:"label"},`${o.contributors}: `),r.value.map(({email:i,name:a},l)=>[f("span",{class:"contributor",title:`email: ${i}`},a),l!==r.value.length-1?",":""])]):null])])}}}),o_=U({name:"NormalPage",slots:Object,setup(e,{slots:t}){const n=Pe(),r=de(),{isDarkmode:o}=br(),i=ve(),a=I(()=>n.value.toc||n.value.toc!==!1&&i.value.toc!==!1);return()=>f("main",{id:"main-content",class:"vp-page"},f(Ot("LocalEncrypt")?nt("LocalEncrypt"):Us,()=>{var l,s,c,u;return[(l=t.top)==null?void 0:l.call(t),n.value.cover?f("img",{class:"page-cover",src:Ve(n.value.cover),alt:r.value.title,"no-view":""}):null,f(Y1),f(n_),a.value?f(F1,{headerDepth:n.value.headerDepth??i.value.headerDepth??2},{before:()=>{var d;return(d=t.tocBefore)==null?void 0:d.call(t)},after:()=>{var d;return(d=t.tocAfter)==null?void 0:d.call(t)}}):null,(s=t.contentBefore)==null?void 0:s.call(t),f(tu),(c=t.contentAfter)==null?void 0:c.call(t),f(r_),f(Z1),Ot("CommentService")?f(nt("CommentService"),{darkmode:o.value}):null,(u=t.bottom)==null?void 0:u.call(t)]}))}}),i_=U({name:"Layout",slots:Object,setup(e,{slots:t}){ve();const n=de(),r=Pe(),{isMobile:o}=co(),i=I(()=>"none");return()=>[f(cu),f(eu,{},{default:()=>{var a;return((a=t.default)==null?void 0:a.call(t))||(r.value.home?f(G1):f(j1,()=>f(o_,{key:n.value.path},{top:()=>{var l;return(l=t.top)==null?void 0:l.call(t)},bottom:()=>{var l;return(l=t.bottom)==null?void 0:l.call(t)},contentBefore:()=>{var l;return(l=t.contentBefore)==null?void 0:l.call(t)},contentAfter:()=>{var l;return(l=t.contentAfter)==null?void 0:l.call(t)},tocBefore:()=>{var l;return(l=t.tocBefore)==null?void 0:l.call(t)},tocAfter:()=>{var l;return(l=t.tocAfter)==null?void 0:l.call(t)}})))},...i.value!=="none"?{navScreenBottom:()=>f(nt("BloggerInfo"))}:{},...!o.value&&i.value==="always"?{sidebar:()=>f(nt("BloggerInfo"))}:{}})]}}),a_=U({name:"NotFoundHint",setup(){const e=ve(),t=()=>{const n=e.value.routeLocales.notFoundMsg;return n[Math.floor(Math.random()*n.length)]};return()=>f("div",{class:"not-found-hint"},[f("p",{class:"error-code"},"404"),f("h1",{class:"error-title"},e.value.routeLocales.notFoundTitle),f("p",{class:"error-hint"},t())])}}),l_=U({name:"NotFound",slots:Object,setup(e,{slots:t}){const n=ln(),r=ve(),{navigate:o}=Go({to:r.value.home??n.value});return()=>[f(cu),f(eu,{noSidebar:!0},()=>{var i;return f("main",{id:"main-content",class:"vp-page not-found"},((i=t.default)==null?void 0:i.call(t))||[f(a_),f("div",{class:"actions"},[f("button",{type:"button",class:"action-button",onClick:()=>{window.history.go(-1)}},r.value.routeLocales.back),f("button",{type:"button",class:"action-button",onClick:()=>o()},r.value.routeLocales.home)])])})]}});Dv(e=>{const t=e.t,n=e.I!==!1,r=e.i;return n?{title:t,content:r?()=>[f(je,{icon:r}),t]:null,order:e.O,index:e.I}:null});const s_=at({enhance:({app:e,router:t})=>{const{scrollBehavior:n}=t.options;t.options.scrollBehavior=async(...r)=>(await uu().wait(),n(...r)),r1(e),e.component("HopeIcon",je),e.component("VPLink",et)},setup:()=>{o1(),c1()},layouts:{Layout:i_,NotFound:l_}}),Dr=[pp,Lv,Cv,Nv,Hv,Uv,Qv,im,hm,wm,Dm,jm,s_],c_=[["v-8daa1a0e","/",{y:"h",t:"Home",i:"home"},["/README.md"]],["v-fffb8e28","/guide/",{y:"a",t:"Guide",i:"terminal"},["/guide/README.md"]],["v-43c96c34","/more/collaborative_projects.html",{y:"a",t:"Collaborative Projects",i:"circle-info"},[":md"]],["v-17f2914c","/more/contact.html",{y:"a",t:"Contact US",i:"circle-info"},[":md"]],["v-07f943d9","/more/license.html",{y:"a",t:"License",i:"circle-info"},[":md"]],["v-9e2e7e22","/more/thanks.html",{y:"a",t:"Acknowledgments",i:"circle-info"},[":md"]],["v-1d3d20e2","/more/use_cases.html",{y:"a",t:"Use Cases",i:"circle-info"},[":md"]],["v-639495b8","/tutorial/",{y:"a",t:"Tutorial",i:"lightbulb"},["/tutorial/README.md"]],["v-2d0ad528","/zh/",{y:"h",t:"首页",i:"home"},["/zh/README.md"]],["v-58ff8a76","/guide/code/",{y:"a",t:"Code interpretation",i:"code"},["/guide/code/README.md"]],["v-07e28fb7","/guide/code/oncetoken.html",{y:"a",t:"onceToken"},[":md"]],["v-5d588a76","/guide/faq/",{y:"a",t:"FAQ",i:"question"},["/guide/faq/README.md"]],["v-67fe8904","/guide/faq/not_recommended_qq.html",{y:"a",t:"Why is it not recommended to consult questions via QQ private chat?"},[":md"]],["v-9ef794be","/guide/faq/rtmp_playback_compatibility_issues.html",{y:"a",t:"RTMP Playback Compatibility Issues"},[":md"]],["v-26771ae0","/guide/install/",{y:"a",t:"Install",i:"box-archive"},["/guide/install/README.md"]],["v-7c5f89f1","/guide/install/compilation_instructions_for_windows_version.html",{y:"a",t:"Building Instructions for Windows"},[":md"]],["v-2a95408c","/guide/install/install_zlmediakit_using_vcpkg.html",{y:"a",t:"Installing zlmediakit with vcpkg"},[":md"]],["v-410226d2","/guide/install/start.html",{y:"a",t:"Start",O:1},[":md"]],["v-1a355af6","/guide/media_server/",{y:"a",t:"Media Server",i:"gears",O:3},["/guide/media_server/README.md"]],["v-f17856b6","/guide/media_server/config_file.html",{y:"a",t:"Configuration File Explanation"},[":md"]],["v-326b1b06","/guide/media_server/generate_ssl_self-signed_certificate_and_test.html",{y:"a",t:"Generate SSL self-signed certificate and test"},[":md"]],["v-f90651dc","/guide/media_server/how_to_enable_https_related_functions.html",{y:"a",t:"How to Enable HTTPS Related Functions"},[":md"]],["v-629229d1","/guide/media_server/on-demand_push_streaming.html",{y:"a",t:"Implement on-demand push streaming"},[":md"]],["v-a3ed6f7c","/guide/media_server/on-demand_streaming.html",{y:"a",t:"Implement on-demand pull streaming"},[":md"]],["v-22d780d8","/guide/media_server/play_url_rules.html",{y:"a",t:"Playing URL Rules",i:"circle-info"},[":md"]],["v-40777a42","/guide/media_server/playback_authentication.html",{y:"a",t:"Implementing Playback Authentication"},[":md"]],["v-1c8baf7e","/guide/media_server/push_authentication.html",{y:"a",t:"Implementing Push Streaming Authentication"},[":md"]],["v-d003c332","/guide/media_server/push_test.html",{y:"a",t:"Push and Playback Testing"},[":md"]],["v-992f244c","/guide/media_server/restful_api.html",{y:"a",t:"RESTful API"},[":md"]],["v-1563923f","/guide/media_server/sequence_diagram.html",{y:"a",t:"Sequence diagram"},[":md"]],["v-3f9e2b34","/guide/media_server/start_server.html",{y:"a",t:"Starting and Stopping the Server",i:"circle-info"},[":md"]],["v-4436fd0b","/guide/media_server/web_hook_api.html",{y:"a",t:"Web Hook"},[":md"]],["v-fa0f55aa","/guide/protocol/",{y:"a",t:"Protocol",i:"lightbulb"},["/guide/protocol/README.md"]],["v-5d4ca3be","/guide/sdk/",{y:"a",t:"SDK API",i:"lightbulb"},["/guide/sdk/README.md"]],["v-29126422","/guide/sdk/how_to_create_a_live_steam.html",{y:"a",t:"How to create a live stream"},[":md"]],["v-b1256428","/reference/development_log/",{y:"a",t:"Development log",i:"code-commit"},["/reference/development_log/README.md"]],["v-099b9809","/reference/development_log/hls_high_performance_journey.html",{y:"a",t:"zlmediakit的hls高性能之旅"},[":md"]],["v-c75d9fee","/reference/development_log/rtsp_performance_optimization.html",{y:"a",t:"RTSP性能优化",O:1},[":md"]],["v-27716634","/reference/documents/",{y:"a",t:"Related documents",i:"file-code"},["/reference/documents/README.md"]],["v-3d1bfe27","/reference/documents/exclusive_features.html",{y:"a",t:"Exclusive Features of ZLMediakit"},[":md"]],["v-61f35635","/reference/documents/high_concurrency_implementation_principle.html",{y:"a",t:"ZLMediaKit高并发实现原理"},[":md"]],["v-60e3ff20","/reference/documents/introduction_to_streaming_media_related_technologies.html",{y:"a",t:"流媒体相关技术介绍"},[":md"]],["v-716fbfe3","/reference/documents/rtsp_push_process.html",{y:"a",t:"RTSP push streaming process"},[":md"]],["v-159648d6","/reference/documents/the_nature_of_live_broadcast_delay.html",{y:"a",t:"The Essence of Live Streaming Delay"},[":md"]],["v-07cf6867","/reference/resources/",{y:"a",t:"Resources",i:"font-awesome"},["/reference/resources/README.md"]],["v-2894bdb2","/reference/resources/dependency.html",{y:"a",t:"Dependency and Copyright"},[":md"]],["v-630bfad5","/reference/resources/rtmp_support_for_h265_and_opus.html",{y:"a",t:"RTMP supports H265 and OPUS"},[":md"]],["v-a9be237a","/reference/resources/video_conferencing_related_resources.html",{y:"a",t:"Video Conference Related Resources"},[":md"]],["v-770cb196","/reference/resources/zltoolkit_source_code_study_notes.html",{y:"a",t:"ZLToolKit source code study notes"},[":md"]],["v-60c5ec00","/reference/test/",{y:"a",t:"Testing",i:"vials"},["/reference/test/README.md"]],["v-7cf84008","/reference/test/benchmark.html",{y:"a",t:"Benchmark"},[":md"]],["v-d8f6ac6a","/reference/test/delay_test.html",{y:"a",t:"Delay Testing"},[":md"]],["v-adc6a8e4","/reference/test/how_to_test_delay.html",{y:"a",t:"How to test the delay?"},[":md"]],["v-ea3f92ca","/reference/test/online_test.html",{y:"a",t:"Online test"},[":md"]],["v-210a0a78","/reference/test/performance_testing.html",{y:"a",t:"Performance Testing"},[":md"]],["v-27157219","/reference/test/rtmp_pull_stream_performance_test.html",{y:"a",t:"rtmp pull stream performance test"},[":md"]],["v-927f8538","/reference/test/rtmp_push_stream_performance_test.html",{y:"a",t:"rtmp push stream performance test"},[":md"]],["v-3ede775a","/reference/test/rtsp_pull_stream_performance_test.html",{y:"a",t:"rtsp pull stream performance test"},[":md"]],["v-703b8f9e","/reference/test/rtsp_push_stream_performance_test.html",{y:"a",t:"rtsp push stream performance test"},[":md"]],["v-47357bdb","/zh/guide/",{y:"a",t:"指南",i:"terminal"},["/zh/guide/README.md"]],["v-0a3cd263","/zh/more/collaborative_projects.html",{y:"a",t:"合作项目",i:"circle-info"},[":md"]],["v-8b20cdea","/zh/more/contact.html",{y:"a",t:"联系我们",i:"circle-info"},[":md"]],["v-633bb4ec","/zh/more/license.html",{y:"a",t:"授权协议",i:"circle-info"},[":md"]],["v-4bf4651e","/zh/more/thanks.html",{y:"a",t:"致谢",i:"circle-info"},[":md"]],["v-7dceae00","/zh/more/use_cases.html",{y:"a",t:"使用案例",i:"circle-info"},[":md"]],["v-ec228f2e","/zh/tutorial/",{y:"a",t:"快速开始",i:"lightbulb"},["/zh/tutorial/README.md"]],["v-cb3c3b8e","/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html",{y:"a",t:"GB28181 SIP信令抓包"},[":md"]],["v-6fbaec55","/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html",{y:"a",t:"GB28181怎么用设备ID作为流ID"},[":md"]],["v-079ebd6a","/guide/protocol/gb28181/push_streaming.html",{y:"a",t:"GB28181推流"},[":md"]],["v-114c6ef6","/guide/protocol/srt/",{y:"a",t:"SRT"},["/guide/protocol/srt/README.md"]],["v-d73f5e1e","/guide/protocol/webrtc/webrtc_compilation_and_use.html",{y:"a",t:"Compiling and Using WebRTC"},[":md"]],["v-284ed9d6","/guide/protocol/webrtc/webrtc_signaling_interaction_format.html",{y:"a",t:"WebRTC Signaling Interaction Format"},[":md"]],["v-515bc4e7","/zh/guide/code/",{y:"a",t:"代码解读",i:"code"},["/zh/guide/code/README.md"]],["v-e1a99f30","/zh/guide/code/oncetoken.html",{y:"a",t:"代码篇之onceToken"},[":md"]],["v-763dee34","/zh/guide/faq/",{y:"a",t:"常见问题",i:"question"},["/zh/guide/faq/README.md"]],["v-6ff7e8b5","/zh/guide/faq/not_recommended_qq.html",{y:"a",t:"为什么不建议QQ私聊咨询问题?"},[":md"]],["v-75521352","/zh/guide/faq/rtmp_playback_compatibility_issues.html",{y:"a",t:"RTMP播放兼容性问题"},[":md"]],["v-1b2bfecf","/zh/guide/install/",{y:"a",t:"安装",i:"box-archive"},["/zh/guide/install/README.md"]],["v-3c49c43c","/zh/guide/install/compilation_instructions_for_windows_version.html",{y:"a",t:"Windows 版编译说明"},[":md"]],["v-2139c386","/zh/guide/install/install_zlmediakit_using_vcpkg.html",{y:"a",t:"vcpkg方式安装zlmediakit"},[":md"]],["v-4f36f1c6","/zh/guide/install/start.html",{y:"a",t:"快速开始",O:1},[":md"]],["v-7ac6e814","/zh/guide/media_server/",{y:"a",t:"Media Server",i:"gears"},["/zh/guide/media_server/README.md"]],["v-76640c16","/zh/guide/media_server/config_file.html",{y:"a",t:"配置文件详解"},[":md"]],["v-04c98dae","/zh/guide/media_server/generate_ssl_self-signed_certificate_and_test.html",{y:"a",t:"生成SSL自签名证书并测试"},[":md"]],["v-fc02997a","/zh/guide/media_server/how_to_enable_https_related_functions.html",{y:"a",t:"怎么开启https相关功能"},[":md"]],["v-60a95200","/zh/guide/media_server/on-demand_push_streaming.html",{y:"a",t:"实现按需推流"},[":md"]],["v-b991029a","/zh/guide/media_server/on-demand_streaming.html",{y:"a",t:"实现按需拉流"},[":md"]],["v-78eb47c7","/zh/guide/media_server/play_url_rules.html",{y:"a",t:"播放url规则",i:"circle-info"},[":md"]],["v-2459df9a","/zh/guide/media_server/playback_authentication.html",{y:"a",t:"实现播放鉴权"},[":md"]],["v-322f429c","/zh/guide/media_server/push_authentication.html",{y:"a",t:"实现推流鉴权"},[":md"]],["v-c01103d0","/zh/guide/media_server/push_test.html",{y:"a",t:"推流播放测试"},[":md"]],["v-baeeb56a","/zh/guide/media_server/restful_api.html",{y:"a",t:"RESTful 接口"},[":md"]],["v-35a1596e","/zh/guide/media_server/sequence_diagram.html",{y:"a",t:"时序图"},[":md"]],["v-3484e1e3","/zh/guide/media_server/start_server.html",{y:"a",t:"服务器的启动与关闭",i:"circle-info"},[":md"]],["v-391db3ba","/zh/guide/media_server/web_hook_api.html",{y:"a",t:"Web Hook 接口"},[":md"]],["v-24dfef1c","/zh/guide/protocol/",{y:"a",t:"协议相关",i:"lightbulb"},["/zh/guide/protocol/README.md"]],["v-7643e190","/zh/guide/sdk/",{y:"a",t:"SDK API",i:"cube"},["/zh/guide/sdk/README.md"]],["v-5a1c26c0","/zh/guide/sdk/how_to_create_a_live_steam.html",{y:"a",t:"怎样创建直播流"},[":md"]],["v-0938c35b","/zh/reference/development_log/",{y:"a",t:"开发日志",i:"code-commit"},["/zh/reference/development_log/README.md"]],["v-5298cc7a","/zh/reference/development_log/hls_high_performance_journey.html",{y:"a",t:"zlmediakit的hls高性能之旅"},[":md"]],["v-72fa89b8","/zh/reference/development_log/rtsp_performance_optimization.html",{y:"a",t:"RTSP性能优化",O:1},[":md"]],["v-4ea15ae3","/zh/reference/documents/",{y:"a",t:"相关文档",i:"file-code"},["/zh/reference/documents/README.md"]],["v-324a3498","/zh/reference/documents/exclusive_features.html",{y:"a",t:"ZLMediakit独家特性介绍"},[":md"]],["v-09d870a4","/zh/reference/documents/high_concurrency_implementation_principle.html",{y:"a",t:"ZLMediaKit高并发实现原理"},[":md"]],["v-175b5aa1","/zh/reference/documents/introduction_to_streaming_media_related_technologies.html",{y:"a",t:"流媒体相关技术介绍"},[":md"]],["v-79587752","/zh/reference/documents/rtsp_push_process.html",{y:"a",t:"RTSP推流流程"},[":md"]],["v-3e321006","/zh/reference/documents/the_nature_of_live_broadcast_delay.html",{y:"a",t:"直播延时的本质"},[":md"]],["v-2eff5d16","/zh/reference/resources/",{y:"a",t:"相关资源",i:"font-awesome"},["/zh/reference/resources/README.md"]],["v-4a544ed0","/zh/reference/resources/dependency.html",{y:"a",t:"代码依赖与版权声明",i:"code"},[":md"]],["v-2321e074","/zh/reference/resources/rtmp_support_for_h265_and_opus.html",{y:"a",t:"RTMP对H265和OPUS的支持"},[":md"]],["v-acba6b18","/zh/reference/resources/video_conferencing_related_resources.html",{y:"a",t:"视频会议相关资源"},[":md"]],["v-164eab05","/zh/reference/resources/zltoolkit_source_code_study_notes.html",{y:"a",t:"ZLToolKit源码学习笔记"},[":md"]],["v-7184a3f1","/zh/reference/test/",{y:"a",t:"测试",i:"vials"},["/zh/reference/test/README.md"]],["v-3d3ac02d","/zh/reference/test/benchmark.html",{y:"a",t:"Benchmark"},[":md"]],["v-e2ac608c","/zh/reference/test/delay_test.html",{y:"a",t:"延时测试"},[":md"]],["v-510ccabf","/zh/reference/test/how_to_test_delay.html",{y:"a",t:"怎么测试ZLMediaKit的延时?"},[":md"]],["v-174062e8","/zh/reference/test/online_test.html",{y:"a",t:"在线测试"},[":md"]],["v-e521bd2e","/zh/reference/test/performance_testing.html",{y:"a",t:"性能测试"},[":md"]],["v-1d29e16c","/zh/reference/test/rtmp_pull_stream_performance_test.html",{y:"a",t:"rtmp 拉流性能测试"},[":md"]],["v-fdd44ad6","/zh/reference/test/rtmp_push_stream_performance_test.html",{y:"a",t:"rtmp 推流性能测试"},[":md"]],["v-aa333cf8","/zh/reference/test/rtsp_pull_stream_performance_test.html",{y:"a",t:"rtsp拉流性能测试"},[":md"]],["v-3a912ccf","/zh/reference/test/rtsp_push_stream_performance_test.html",{y:"a",t:"rtsp推流性能测试"},[":md"]],["v-374e6730","/zh/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html",{y:"a",t:"GB28181 SIP信令抓包"},[":md"]],["v-6e3cc886","/zh/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html",{y:"a",t:"GB28181怎么用设备ID作为流ID"},[":md"]],["v-041958ba","/zh/guide/protocol/gb28181/push_streaming.html",{y:"a",t:"GB28181推流"},[":md"]],["v-71ddfc14","/zh/guide/protocol/srt/",{y:"a",t:"SRT"},["/zh/guide/protocol/srt/README.md"]],["v-5eb5ee22","/zh/guide/protocol/webrtc/webrtc_compilation_and_use.html",{y:"a",t:"webrtc 编译与使用"},[":md"]],["v-84db85f8","/zh/guide/protocol/webrtc/webrtc_signaling_interaction_format.html",{y:"a",t:"webrtc信令交互格式"},[":md"]],["v-3706649a","/404.html",{y:"p",t:""},[]],["v-14f73021","/more/",{y:"p",t:"More"},[]],["v-22a2f9fd","/reference/",{y:"p",t:"Reference"},[]],["v-2be85352","/zh/more/",{y:"p",t:"More"},[]],["v-0f8c4891","/guide/protocol/gb28181/",{y:"p",t:"Gb28181"},[]],["v-35ba27b7","/guide/protocol/webrtc/",{y:"p",t:"Webrtc"},[]],["v-70e5a528","/zh/reference/",{y:"p",t:"Reference"},[]],["v-55376182","/zh/guide/protocol/gb28181/",{y:"p",t:"Gb28181"},[]],["v-50bfaca6","/zh/guide/protocol/webrtc/",{y:"p",t:"Webrtc"},[]]];var vl=U({name:"Vuepress",setup(){const e=sp();return()=>f(e.value)}}),u_=()=>c_.reduce((e,[t,n,r,o])=>(e.push({name:t,path:n,component:vl,meta:r},{path:n.endsWith("/")?n+"index.html":n.substring(0,n.length-5),redirect:n},...o.map(i=>({path:i===":md"?n.substring(0,n.length-5)+".md":i,redirect:n}))),e),[{name:"404",path:"/:catchAll(.*)",component:vl}]),f_=kp,d_=()=>{const e=hh({history:f_(Ri("/")),routes:u_(),scrollBehavior:(t,n,r)=>r||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{var r;(t.path!==n.path||n===Lt)&&([t.meta._data]=await Promise.all([At.resolvePageData(t.name),(r=ys[t.name])==null?void 0:r.__asyncLoader()]))}),e},p_=e=>{e.component("ClientOnly",ro),e.component("Content",Is)},h_=(e,t,n)=>{const r=Za(()=>t.currentRoute.value.path),o=Za(()=>At.resolveRouteLocale(vn.value.locales,r.value)),i=lo(r,()=>t.currentRoute.value.meta._data),a=I(()=>At.resolveLayouts(n)),l=I(()=>At.resolveSiteLocaleData(vn.value,o.value)),s=I(()=>At.resolvePageFrontmatter(i.value)),c=I(()=>At.resolvePageHeadTitle(i.value,l.value)),u=I(()=>At.resolvePageHead(c.value,s.value,l.value)),d=I(()=>At.resolvePageLang(i.value,l.value)),p=I(()=>At.resolvePageLayout(i.value,a.value));return e.provide(op,a),e.provide(Es,i),e.provide(ws,s),e.provide(lp,c),e.provide(Ts,u),e.provide(As,d),e.provide(Ls,p),e.provide(Oi,o),e.provide(Rs,l),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>s.value},$head:{get:()=>u.value},$headTitle:{get:()=>c.value},$lang:{get:()=>d.value},$page:{get:()=>i.value},$routeLocale:{get:()=>o.value},$site:{get:()=>vn.value},$siteLocale:{get:()=>l.value},$withBase:{get:()=>Ve}}),{layouts:a,pageData:i,pageFrontmatter:s,pageHead:u,pageHeadTitle:c,pageLang:d,pageLayout:p,routeLocale:o,siteData:vn,siteLocaleData:l}},v_=()=>{const e=ap(),t=Ii(),n=ee([]),r=()=>{e.value.forEach(i=>{const a=m_(i);a&&n.value.push(a)})},o=()=>{document.documentElement.lang=t.value,n.value.forEach(i=>{i.parentNode===document.head&&document.head.removeChild(i)}),n.value.splice(0,n.value.length),e.value.forEach(i=>{const a=__(i);a!==null&&(document.head.appendChild(a),n.value.push(a))})};tn(up,o),ge(()=>{r(),o(),fe(()=>e.value,o)})},m_=([e,t,n=""])=>{const r=Object.entries(t).map(([l,s])=>ue(s)?`[${l}=${JSON.stringify(s)}]`:s===!0?`[${l}]`:"").join(""),o=`head > ${e}${r}`;return Array.from(document.querySelectorAll(o)).find(l=>l.innerText===n)||null},__=([e,t,n])=>{if(!ue(e))return null;const r=document.createElement(e);return Pi(t)&&Object.entries(t).forEach(([o,i])=>{ue(i)?r.setAttribute(o,i):i===!0&&r.setAttribute(o,"")}),ue(n)&&r.appendChild(document.createTextNode(n)),r},g_=Kd,b_=async()=>{var n;const e=g_({name:"VuepressApp",setup(){var r;v_();for(const o of Dr)(r=o.setup)==null||r.call(o);return()=>[f(zs),...Dr.flatMap(({rootComponents:o=[]})=>o.map(i=>f(i)))]}}),t=d_();p_(e),h_(e,t,Dr);for(const r of Dr)await((n=r.enhance)==null?void 0:n.call(r,{app:e,router:t,siteData:vn}));return e.use(t),{app:e,router:t}};b_().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{h as _,as as a,Le as b,y_ as c,b_ as createVueApp,ls as d,E_ as e,w_ as f,ed as o,nt as r,mf as w}; +function __vite__mapDeps(indexes) { + if (!__vite__mapDeps.viteFileDeps) { + __vite__mapDeps.viteFileDeps = ["assets/index.html-CSg2VFea.js","assets/plugin-vue_export-helper-x3n3nnut.js","assets/index.html-ckFP_gFB.js","assets/collaborative_projects.html-UkPV-L0J.js","assets/contact.html-xnD8I3Nc.js","assets/license.html-kMl7iYce.js","assets/thanks.html-bZ4iyCmp.js","assets/use_cases.html-Ga8uwVa2.js","assets/index.html-UtNsP0-c.js","assets/vs_code_zh-ltEPcFYF.js","assets/index.html-lGRuHLpD.js","assets/index.html-ea4s8txi.js","assets/oncetoken.html-87LqB-OG.js","assets/index.html-ysHWzV3Z.js","assets/not_recommended_qq.html-Y9F7iYsf.js","assets/rtmp_playback_compatibility_issues.html-iFgHmMMS.js","assets/index.html-c9EfxXZy.js","assets/compilation_instructions_for_windows_version.html-coo8ZcK6.js","assets/install_zlmediakit_using_vcpkg.html-ii7HljTN.js","assets/install_zlmediakit_using_vcpkg_2-1HFW-yNt.js","assets/start.html-T6-Hncwi.js","assets/index.html-vbFGRJHC.js","assets/config_file.html-54NJpUMh.js","assets/generate_ssl_self-signed_certificate_and_test.html-MI1uDkfZ.js","assets/generate_ssl_self-signed_certificate_and_test-D4Sbj3Ls.js","assets/how_to_enable_https_related_functions.html-Dxu_FBYc.js","assets/how_to_enable_https_related_functions_zh_10-dp8gREln.js","assets/on-demand_push_streaming.html-AlawaJGx.js","assets/on-demand_push_streaming_zh-CK4xj1dh.js","assets/on-demand_streaming.html-6YNYtYZR.js","assets/on-demand_streaming_zh-h19pTlmd.js","assets/play_url_rules.html-f7mxplY_.js","assets/playback_authentication.html-3VR0HbK8.js","assets/playback_authentication_zh-gjAAn9Yd.js","assets/push_authentication.html-8OJ18L-5.js","assets/push_authentication_zh-OS4qAsfx.js","assets/push_test.html-zDMue1Qy.js","assets/push_test-WgKOKRFc.js","assets/restful_api.html-INg-XF77.js","assets/sequence_diagram.html-SYfON6Mt.js","assets/start_server.html-yxCpNJvw.js","assets/start_server_3-RVnx99XR.js","assets/web_hook_api.html-OmnDRkZ1.js","assets/index.html-Wn9fL8rF.js","assets/index.html-9fZsvbS8.js","assets/how_to_create_a_live_steam.html-LWbU8h87.js","assets/how_to_create_a_live_stream-3lt6j2fI.js","assets/index.html-1UKx3tTB.js","assets/hls_high_performance_journey.html-v74JJlub.js","assets/rtsp_performance_optimization.html-TWn6Egp8.js","assets/index.html-plxXlLQP.js","assets/exclusive_features.html-t4K_S5d4.js","assets/high_concurrency_implementation_principle.html-x1-J41yC.js","assets/introduction_to_streaming_media_related_technologies.html-qLQLZbA3.js","assets/rtsp_push_process.html-gk6hQwdn.js","assets/the_nature_of_live_broadcast_delay.html-9a3MrQ9p.js","assets/index.html-0qJyAU8Q.js","assets/dependency.html-IB8qgUUu.js","assets/rtmp_support_for_h265_and_opus.html-UXqjeTtH.js","assets/video_conferencing_related_resources.html-cJ9at7Xc.js","assets/zltoolkit_source_code_study_notes.html-JWQ-N5Wz.js","assets/index.html-8kcJLd-q.js","assets/benchmark.html-PVLgEM3u.js","assets/delay_test.html-jKr5-1Rj.js","assets/how_to_test_delay.html-P7CoGGgx.js","assets/online_test.html-UiWsenDR.js","assets/performance_testing.html-Cgq3dIgv.js","assets/rtmp_pull_stream_performance_test.html-hMTKB3GA.js","assets/rtmp_push_stream_performance_test.html-LfVKdEym.js","assets/rtsp_pull_stream_performance_test.html-KdEDWBLu.js","assets/rtsp_push_stream_performance_test.html-zFl0_4_8.js","assets/index.html-B81jBW2G.js","assets/collaborative_projects.html-19-TEwrL.js","assets/contact.html-JAOAqjBA.js","assets/license.html-vCBKTTMs.js","assets/thanks.html-7ORVp6Jc.js","assets/use_cases.html-Ztr99Hiu.js","assets/index.html-4w7NJvOq.js","assets/gb28181_sip_signaling_packet_capture.html-z_vnDm71.js","assets/how_to_use_device_id_as_stream_id.html-yxD34jok.js","assets/how_to_use_device_id_as_stream_id_6-sfQ1h9Fe.js","assets/push_streaming.html-o6HXGEGb.js","assets/gb28181_push_streaming_4-qWTnfswt.js","assets/index.html-XHP9LdII.js","assets/webrtc_compilation_and_use.html-EzMJU7Jv.js","assets/webrtc_signaling_interaction_format.html-QfhUllLQ.js","assets/index.html-LudGOU3A.js","assets/oncetoken.html-VjVkUYP3.js","assets/index.html-4MOf5u_i.js","assets/not_recommended_qq.html-CiG918se.js","assets/rtmp_playback_compatibility_issues.html-wBkT5hGE.js","assets/index.html-ocl34mDF.js","assets/compilation_instructions_for_windows_version.html-d1DmfQc5.js","assets/install_zlmediakit_using_vcpkg.html-NCcA9KPG.js","assets/start.html-KblEw28K.js","assets/index.html-IZsaCX79.js","assets/config_file.html-v84_YU9d.js","assets/generate_ssl_self-signed_certificate_and_test.html-tLIkOOZS.js","assets/how_to_enable_https_related_functions.html-pBy5oO-R.js","assets/on-demand_push_streaming.html-efCX-3qM.js","assets/on-demand_streaming.html-yNrWu3de.js","assets/play_url_rules.html-OaEuncfX.js","assets/playback_authentication.html-4kXdTj5T.js","assets/push_authentication.html-Ov0yMs1o.js","assets/push_test.html-44HoghM7.js","assets/restful_api.html-W3f4X4lL.js","assets/sequence_diagram.html-FlbOL2Y8.js","assets/start_server.html-kjQal3He.js","assets/web_hook_api.html-QYXcFVoT.js","assets/index.html-zeRiEjXy.js","assets/index.html-ybOFrWXT.js","assets/how_to_create_a_live_steam.html-Q-m7tYG5.js","assets/index.html-HppSEYlS.js","assets/hls_high_performance_journey.html-pNH0gpXw.js","assets/rtsp_performance_optimization.html-TdeED4XC.js","assets/index.html-AIAMrVKp.js","assets/exclusive_features.html-dQadFX3J.js","assets/high_concurrency_implementation_principle.html-FgHSxlv4.js","assets/introduction_to_streaming_media_related_technologies.html-aLJXiBgK.js","assets/rtsp_push_process.html-zH-D_jAF.js","assets/the_nature_of_live_broadcast_delay.html-wpUMkFJz.js","assets/index.html-CKp0mPwh.js","assets/dependency.html-gwWfr65O.js","assets/rtmp_support_for_h265_and_opus.html-IiMCf774.js","assets/video_conferencing_related_resources.html-U1qNLSQN.js","assets/zltoolkit_source_code_study_notes.html-ypL46AQc.js","assets/index.html-2LWO62N7.js","assets/benchmark.html-vh5mU2vV.js","assets/delay_test.html-QwzTearq.js","assets/how_to_test_delay.html-GLErIksL.js","assets/online_test.html-_0lwAxTN.js","assets/performance_testing.html-mjt6ZXJJ.js","assets/rtmp_pull_stream_performance_test.html-ukcH42DI.js","assets/rtmp_push_stream_performance_test.html-4ywCdN8c.js","assets/rtsp_pull_stream_performance_test.html-cK-OpNrS.js","assets/rtsp_push_stream_performance_test.html-RMobzxOL.js","assets/gb28181_sip_signaling_packet_capture.html-ZYkWywxi.js","assets/how_to_use_device_id_as_stream_id.html-r5nxplI0.js","assets/push_streaming.html-VOPU_Vgm.js","assets/index.html-lKh2cFAq.js","assets/webrtc_compilation_and_use.html-ZhDB0Qu6.js","assets/webrtc_signaling_interaction_format.html-QJ72-nhn.js","assets/404.html-GPYBV8Ha.js","assets/index.html-6AFjdEoA.js","assets/index.html-35KxtpZI.js","assets/index.html-ZukUTvpe.js","assets/index.html-CmVSRxAE.js","assets/index.html-aTnTwBPS.js","assets/index.html-hD6JZq1M.js","assets/index.html-D9OOw5jZ.js","assets/index.html-c5z6Iek2.js"] + } + return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) +} \ No newline at end of file diff --git a/assets/arc-kFrifBKJ.js b/assets/arc-upp1iHW0.js similarity index 96% rename from assets/arc-kFrifBKJ.js rename to assets/arc-upp1iHW0.js index 79bb35d..4f6f6fb 100644 --- a/assets/arc-kFrifBKJ.js +++ b/assets/arc-upp1iHW0.js @@ -1 +1 @@ -import{w as ln,c as U}from"./path-aUcfwwLI.js";import{aO as an,aP as Y,aQ as O,aR as rn,aS as y,aK as on,aT as z,aU as _,aV as un,aW as t,aX as sn,aY as tn,aZ as fn}from"./mermaid.core-zy7cM8l9.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function mn(l){return l.endAngle}function pn(l){return l&&l.padAngle}function dn(l,h,D,S,v,R,V,a){var E=D-l,i=S-h,n=V-v,m=a-R,r=m*E-n*i;if(!(r*ru*u+X*X&&(K=w,Q=d),{cx:K,cy:Q,x01:-n,y01:-m,x11:K*(v/T-1),y11:Q*(v/T-1)}}function vn(){var l=cn,h=yn,D=U(0),S=null,v=gn,R=mn,V=pn,a=null,E=ln(i);function i(){var n,m,r=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-rn,c=R.apply(this,arguments)-rn,W=un(c-f),o=c>f;if(a||(a=n=E()),sy))a.moveTo(0,0);else if(W>on-y)a.moveTo(s*Y(f),s*O(f)),a.arc(0,0,s,f,c,!o),r>y&&(a.moveTo(r*Y(c),r*O(c)),a.arc(0,0,r,c,f,o));else{var p=f,g=c,A=f,T=c,P=W,I=W,K=V.apply(this,arguments)/2,Q=K>y&&(S?+S.apply(this,arguments):z(r*r+s*s)),w=_(un(s-r)/2,+D.apply(this,arguments)),d=w,x=w,e,u;if(Q>y){var X=sn(Q/r*O(K)),B=sn(Q/s*O(K));(P-=X*2)>y?(X*=o?1:-1,A+=X,T-=X):(P=0,A=T=(f+c)/2),(I-=B*2)>y?(B*=o?1:-1,p+=B,g-=B):(I=0,p=g=(f+c)/2)}var Z=s*Y(p),j=s*O(p),C=r*Y(T),F=r*O(T);if(w>y){var G=s*Y(g),H=s*O(g),L=r*Y(A),M=r*O(A),q;if(Wy?x>y?(e=J(L,M,Z,j,s,x,o),u=J(G,H,C,F,s,x,o),a.moveTo(e.cx+e.x01,e.cy+e.y01),xy)||!(P>y)?a.lineTo(C,F):d>y?(e=J(C,F,G,H,r,-d,o),u=J(Z,j,L,M,r,-d,o),a.lineTo(e.cx+e.x01,e.cy+e.y01),du*u+X*X&&(K=w,Q=d),{cx:K,cy:Q,x01:-n,y01:-m,x11:K*(v/T-1),y11:Q*(v/T-1)}}function vn(){var l=cn,h=yn,D=U(0),S=null,v=gn,R=mn,V=pn,a=null,E=ln(i);function i(){var n,m,r=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-rn,c=R.apply(this,arguments)-rn,W=un(c-f),o=c>f;if(a||(a=n=E()),sy))a.moveTo(0,0);else if(W>on-y)a.moveTo(s*Y(f),s*O(f)),a.arc(0,0,s,f,c,!o),r>y&&(a.moveTo(r*Y(c),r*O(c)),a.arc(0,0,r,c,f,o));else{var p=f,g=c,A=f,T=c,P=W,I=W,K=V.apply(this,arguments)/2,Q=K>y&&(S?+S.apply(this,arguments):z(r*r+s*s)),w=_(un(s-r)/2,+D.apply(this,arguments)),d=w,x=w,e,u;if(Q>y){var X=sn(Q/r*O(K)),B=sn(Q/s*O(K));(P-=X*2)>y?(X*=o?1:-1,A+=X,T-=X):(P=0,A=T=(f+c)/2),(I-=B*2)>y?(B*=o?1:-1,p+=B,g-=B):(I=0,p=g=(f+c)/2)}var Z=s*Y(p),j=s*O(p),C=r*Y(T),F=r*O(T);if(w>y){var G=s*Y(g),H=s*O(g),L=r*Y(A),M=r*O(A),q;if(Wy?x>y?(e=J(L,M,Z,j,s,x,o),u=J(G,H,C,F,s,x,o),a.moveTo(e.cx+e.x01,e.cy+e.y01),xy)||!(P>y)?a.lineTo(C,F):d>y?(e=J(C,F,G,H,r,-d,o),u=J(Z,j,L,M,r,-d,o),a.lineTo(e.cx+e.x01,e.cy+e.y01),d

This test is severely outdated and is not indicative.

Test Environment

  • System: Linux core 3.16.0-7-amd64 #1 SMP Debian 3.16.59-1 (2018-10-03) x86_64 GNU/Linux
  • Memory: 15GB
  • CPU: Intel(R) Xeon(R) CPU E3-1220 v5 @ 3.00GHz; 4 cores
  • Network: Gigabit Ethernet
  • The test is conducted by accessing the server through a loopback network on the test client.

Test Tools

ZLMeidaKit comes with a test benchmark program called test_benchmark, which uses a single-process multi-threaded model.

Test Server

ZLMeidaKit includes a test server called test_server, which supports RTSP/RTMP/HLS protocols and uses a multi-threaded model.

Test Media Stream

The test_server pulls an RTMP stream rtmp://live.hkstv.hk.lxdns.com/live/hks1 and then forwards it using the test_server. The approximate bitrate of the stream is around 300-400 Kbit/s.

Test Results

Note

When building with CMake, use the command cmake .. -DCMAKE_BUILD_TYPE=Release to compile the optimized version.

Number of Players (RTMP)CPU (Max 400%)Memory (VIRT/RES)Bandwidth (Average)Packet Loss
100020%702M/13M40 MByte/sNone
200039%702M/18M80 MByte/sNone
500092%702M/32M200 MByte/sNone
10000170%702M/59M400 MByte/sNone
Number of Players (RTSP/TCP)CPU (Max 400%)Memory (VIRT/RES)Bandwidth (Average)Packet Loss
100018%702M/13M42 MByte/sNone
200035%702M/19M82 MByte/sNone
500080%702M/35M198 MByte/sNone
10000130%702M/62M405 MByte/sNone

Comparison with SRS Performance

Number of Players (RTMP)CPU (Max 400%)Memory (VIRT/RES)Bandwidth (Average)Packet Loss
100010%310M/53M41.17 MByte/sNone
200018%604M/117M83.86 MByte/sNone
',15),h=[s];function i(o,n){return e(),d("div",null,h)}const m=t(a,[["render",i],["__file","benchmark.html.vue"]]);export{m as default}; +import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as e,c as d,e as r}from"./app-oTlYPy8h.js";const a={},s=r('

This test is severely outdated and is not indicative.

Test Environment

  • System: Linux core 3.16.0-7-amd64 #1 SMP Debian 3.16.59-1 (2018-10-03) x86_64 GNU/Linux
  • Memory: 15GB
  • CPU: Intel(R) Xeon(R) CPU E3-1220 v5 @ 3.00GHz; 4 cores
  • Network: Gigabit Ethernet
  • The test is conducted by accessing the server through a loopback network on the test client.

Test Tools

ZLMeidaKit comes with a test benchmark program called test_benchmark, which uses a single-process multi-threaded model.

Test Server

ZLMeidaKit includes a test server called test_server, which supports RTSP/RTMP/HLS protocols and uses a multi-threaded model.

Test Media Stream

The test_server pulls an RTMP stream rtmp://live.hkstv.hk.lxdns.com/live/hks1 and then forwards it using the test_server. The approximate bitrate of the stream is around 300-400 Kbit/s.

Test Results

Note

When building with CMake, use the command cmake .. -DCMAKE_BUILD_TYPE=Release to compile the optimized version.

Number of Players (RTMP)CPU (Max 400%)Memory (VIRT/RES)Bandwidth (Average)Packet Loss
100020%702M/13M40 MByte/sNone
200039%702M/18M80 MByte/sNone
500092%702M/32M200 MByte/sNone
10000170%702M/59M400 MByte/sNone
Number of Players (RTSP/TCP)CPU (Max 400%)Memory (VIRT/RES)Bandwidth (Average)Packet Loss
100018%702M/13M42 MByte/sNone
200035%702M/19M82 MByte/sNone
500080%702M/35M198 MByte/sNone
10000130%702M/62M405 MByte/sNone

Comparison with SRS Performance

Number of Players (RTMP)CPU (Max 400%)Memory (VIRT/RES)Bandwidth (Average)Packet Loss
100010%310M/53M41.17 MByte/sNone
200018%604M/117M83.86 MByte/sNone
',15),h=[s];function i(o,n){return e(),d("div",null,h)}const m=t(a,[["render",i],["__file","benchmark.html.vue"]]);export{m as default}; diff --git a/assets/benchmark.html-Nx9hqFos.js b/assets/benchmark.html-vh5mU2vV.js similarity index 98% rename from assets/benchmark.html-Nx9hqFos.js rename to assets/benchmark.html-vh5mU2vV.js index f19c7d5..52def94 100644 --- a/assets/benchmark.html-Nx9hqFos.js +++ b/assets/benchmark.html-vh5mU2vV.js @@ -1 +1 @@ -import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as d,c as e,e as r}from"./app-BrxqtzGY.js";const a={},h=r('

注意

此测试已经严重过时,不具备参考性。

测试环境

  • 系统:Linux core 3.16.0-7-amd64 #1 SMP Debian 3.16.59-1 (2018-10-03) x86_64 GNU/Linux
  • 内存:15G
  • CPU:Intel(R) Xeon(R) CPU E3-1220 v5 @ 3.00GHz;4 核
  • 网络:千兆网卡
  • 测试端采用回环网络方式访问服务器

测试工具

ZLMeidaKit 自带测试程序 test_benchmark,其为单进程多线程模型

测试服务器

ZLMeidaKit 自带测试服务器 test_server,支持 RTSP/RTMP/HLS 服务器;多线程模型。

测试媒体流

使用 test_server 拉取的 rtmp 流rtmp://live.hkstv.hk.lxdns.com/live/hks1;然后通过 test_server 转发代理。 该码流大概 300~400Kbit/s 左右。

测试结果

说明:在 cmake 构建时,输入cmake .. -DCMAKE_BUILD_TYPE=Release以编译优化版本。

播放器个数(rtmp)CPU(最大 400%)内存(VIRT/RES)带宽(平均)丢包
100020%702M/13M40 MByte/s
200039%702M/18M80 MByte/s
500092%702M/32M200 MByte/s
10000170%702M/59M400 MByte/s
播放器个数(rtsp/tcp)CPU(最大 400%)内存(VIRT/RES)带宽(平均)丢包
100018%702M/13M42 MByte/s
200035%702M/19M82 MByte/s
500080%702M/35M198 MByte/s
10000130%702M/62M405 MByte/s

srs 性能对比

播放器个数(rtmp)CPU(最大 400%)内存(VIRT/RES)带宽(平均)丢包
100010%310M/53M41.17 MByte/s
200018%604M/117M83.86 MByte/s
',16),i=[h];function s(c,n){return d(),e("div",null,i)}const M=t(a,[["render",s],["__file","benchmark.html.vue"]]);export{M as default}; +import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as d,c as e,e as r}from"./app-oTlYPy8h.js";const a={},h=r('

注意

此测试已经严重过时,不具备参考性。

测试环境

  • 系统:Linux core 3.16.0-7-amd64 #1 SMP Debian 3.16.59-1 (2018-10-03) x86_64 GNU/Linux
  • 内存:15G
  • CPU:Intel(R) Xeon(R) CPU E3-1220 v5 @ 3.00GHz;4 核
  • 网络:千兆网卡
  • 测试端采用回环网络方式访问服务器

测试工具

ZLMeidaKit 自带测试程序 test_benchmark,其为单进程多线程模型

测试服务器

ZLMeidaKit 自带测试服务器 test_server,支持 RTSP/RTMP/HLS 服务器;多线程模型。

测试媒体流

使用 test_server 拉取的 rtmp 流rtmp://live.hkstv.hk.lxdns.com/live/hks1;然后通过 test_server 转发代理。 该码流大概 300~400Kbit/s 左右。

测试结果

说明:在 cmake 构建时,输入cmake .. -DCMAKE_BUILD_TYPE=Release以编译优化版本。

播放器个数(rtmp)CPU(最大 400%)内存(VIRT/RES)带宽(平均)丢包
100020%702M/13M40 MByte/s
200039%702M/18M80 MByte/s
500092%702M/32M200 MByte/s
10000170%702M/59M400 MByte/s
播放器个数(rtsp/tcp)CPU(最大 400%)内存(VIRT/RES)带宽(平均)丢包
100018%702M/13M42 MByte/s
200035%702M/19M82 MByte/s
500080%702M/35M198 MByte/s
10000130%702M/62M405 MByte/s

srs 性能对比

播放器个数(rtmp)CPU(最大 400%)内存(VIRT/RES)带宽(平均)丢包
100010%310M/53M41.17 MByte/s
200018%604M/117M83.86 MByte/s
',16),i=[h];function s(c,n){return d(),e("div",null,i)}const M=t(a,[["render",s],["__file","benchmark.html.vue"]]);export{M as default}; diff --git a/assets/c4Diagram-817c8e44-BMi5WAvg.js b/assets/c4Diagram-817c8e44-EI6Ep_s6.js similarity index 99% rename from assets/c4Diagram-817c8e44-BMi5WAvg.js rename to assets/c4Diagram-817c8e44-EI6Ep_s6.js index 5865ff4..6ec66b2 100644 --- a/assets/c4Diagram-817c8e44-BMi5WAvg.js +++ b/assets/c4Diagram-817c8e44-EI6Ep_s6.js @@ -1,4 +1,4 @@ -import{s as Ce,g as we,a as Oe,b as Te,c as Dt,d as ue,e as Re,f as wt,h as Nt,l as le,i as De,w as Se,j as Kt,k as oe,m as Pe}from"./mermaid.core-zy7cM8l9.js";import{d as Me,g as Le}from"./svgDrawCommon-ad5ef572-eI41Wm50.js";import"./app-BrxqtzGY.js";var Yt=function(){var e=function(bt,_,x,m){for(x=x||{},m=bt.length;m--;x[bt[m]]=_);return x},t=[1,24],a=[1,25],o=[1,26],l=[1,27],i=[1,28],s=[1,63],r=[1,64],n=[1,65],h=[1,66],f=[1,67],d=[1,68],p=[1,69],E=[1,29],O=[1,30],R=[1,31],S=[1,32],L=[1,33],Y=[1,34],Q=[1,35],H=[1,36],q=[1,37],G=[1,38],K=[1,39],J=[1,40],Z=[1,41],$=[1,42],tt=[1,43],et=[1,44],it=[1,45],nt=[1,46],st=[1,47],at=[1,48],rt=[1,50],lt=[1,51],ot=[1,52],ct=[1,53],ht=[1,54],ut=[1,55],dt=[1,56],ft=[1,57],pt=[1,58],yt=[1,59],gt=[1,60],At=[14,42],Vt=[14,34,36,37,38,39,40,41,42,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],Ot=[12,14,34,36,37,38,39,40,41,42,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],v=[1,82],k=[1,83],A=[1,84],C=[1,85],w=[12,14,42],ne=[12,14,33,42],Pt=[12,14,33,42,76,77,79,80],mt=[12,33],zt=[34,36,37,38,39,40,41,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],Xt={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:function(_,x,m,g,T,u,Tt){var y=u.length-1;switch(T){case 3:g.setDirection("TB");break;case 4:g.setDirection("BT");break;case 5:g.setDirection("RL");break;case 6:g.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:g.setC4Type(u[y-3]);break;case 19:g.setTitle(u[y].substring(6)),this.$=u[y].substring(6);break;case 20:g.setAccDescription(u[y].substring(15)),this.$=u[y].substring(15);break;case 21:this.$=u[y].trim(),g.setTitle(this.$);break;case 22:case 23:this.$=u[y].trim(),g.setAccDescription(this.$);break;case 28:case 29:u[y].splice(2,0,"ENTERPRISE"),g.addPersonOrSystemBoundary(...u[y]),this.$=u[y];break;case 30:g.addPersonOrSystemBoundary(...u[y]),this.$=u[y];break;case 31:u[y].splice(2,0,"CONTAINER"),g.addContainerBoundary(...u[y]),this.$=u[y];break;case 32:g.addDeploymentNode("node",...u[y]),this.$=u[y];break;case 33:g.addDeploymentNode("nodeL",...u[y]),this.$=u[y];break;case 34:g.addDeploymentNode("nodeR",...u[y]),this.$=u[y];break;case 35:g.popBoundaryParseStack();break;case 39:g.addPersonOrSystem("person",...u[y]),this.$=u[y];break;case 40:g.addPersonOrSystem("external_person",...u[y]),this.$=u[y];break;case 41:g.addPersonOrSystem("system",...u[y]),this.$=u[y];break;case 42:g.addPersonOrSystem("system_db",...u[y]),this.$=u[y];break;case 43:g.addPersonOrSystem("system_queue",...u[y]),this.$=u[y];break;case 44:g.addPersonOrSystem("external_system",...u[y]),this.$=u[y];break;case 45:g.addPersonOrSystem("external_system_db",...u[y]),this.$=u[y];break;case 46:g.addPersonOrSystem("external_system_queue",...u[y]),this.$=u[y];break;case 47:g.addContainer("container",...u[y]),this.$=u[y];break;case 48:g.addContainer("container_db",...u[y]),this.$=u[y];break;case 49:g.addContainer("container_queue",...u[y]),this.$=u[y];break;case 50:g.addContainer("external_container",...u[y]),this.$=u[y];break;case 51:g.addContainer("external_container_db",...u[y]),this.$=u[y];break;case 52:g.addContainer("external_container_queue",...u[y]),this.$=u[y];break;case 53:g.addComponent("component",...u[y]),this.$=u[y];break;case 54:g.addComponent("component_db",...u[y]),this.$=u[y];break;case 55:g.addComponent("component_queue",...u[y]),this.$=u[y];break;case 56:g.addComponent("external_component",...u[y]),this.$=u[y];break;case 57:g.addComponent("external_component_db",...u[y]),this.$=u[y];break;case 58:g.addComponent("external_component_queue",...u[y]),this.$=u[y];break;case 60:g.addRel("rel",...u[y]),this.$=u[y];break;case 61:g.addRel("birel",...u[y]),this.$=u[y];break;case 62:g.addRel("rel_u",...u[y]),this.$=u[y];break;case 63:g.addRel("rel_d",...u[y]),this.$=u[y];break;case 64:g.addRel("rel_l",...u[y]),this.$=u[y];break;case 65:g.addRel("rel_r",...u[y]),this.$=u[y];break;case 66:g.addRel("rel_b",...u[y]),this.$=u[y];break;case 67:u[y].splice(0,1),g.addRel("rel",...u[y]),this.$=u[y];break;case 68:g.updateElStyle("update_el_style",...u[y]),this.$=u[y];break;case 69:g.updateRelStyle("update_rel_style",...u[y]),this.$=u[y];break;case 70:g.updateLayoutConfig("update_layout_config",...u[y]),this.$=u[y];break;case 71:this.$=[u[y]];break;case 72:u[y].unshift(u[y-1]),this.$=u[y];break;case 73:case 75:this.$=u[y].trim();break;case 74:let Et={};Et[u[y-1].trim()]=u[y].trim(),this.$=Et;break;case 76:this.$="";break}},table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{13:70,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{13:71,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{13:72,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{13:73,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{14:[1,74]},e(At,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:r,37:n,38:h,39:f,40:d,41:p,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt}),e(At,[2,14]),e(Vt,[2,16],{12:[1,76]}),e(At,[2,36],{12:[1,77]}),e(Ot,[2,19]),e(Ot,[2,20]),{25:[1,78]},{27:[1,79]},e(Ot,[2,23]),{35:80,75:81,76:v,77:k,79:A,80:C},{35:86,75:81,76:v,77:k,79:A,80:C},{35:87,75:81,76:v,77:k,79:A,80:C},{35:88,75:81,76:v,77:k,79:A,80:C},{35:89,75:81,76:v,77:k,79:A,80:C},{35:90,75:81,76:v,77:k,79:A,80:C},{35:91,75:81,76:v,77:k,79:A,80:C},{35:92,75:81,76:v,77:k,79:A,80:C},{35:93,75:81,76:v,77:k,79:A,80:C},{35:94,75:81,76:v,77:k,79:A,80:C},{35:95,75:81,76:v,77:k,79:A,80:C},{35:96,75:81,76:v,77:k,79:A,80:C},{35:97,75:81,76:v,77:k,79:A,80:C},{35:98,75:81,76:v,77:k,79:A,80:C},{35:99,75:81,76:v,77:k,79:A,80:C},{35:100,75:81,76:v,77:k,79:A,80:C},{35:101,75:81,76:v,77:k,79:A,80:C},{35:102,75:81,76:v,77:k,79:A,80:C},{35:103,75:81,76:v,77:k,79:A,80:C},{35:104,75:81,76:v,77:k,79:A,80:C},e(w,[2,59]),{35:105,75:81,76:v,77:k,79:A,80:C},{35:106,75:81,76:v,77:k,79:A,80:C},{35:107,75:81,76:v,77:k,79:A,80:C},{35:108,75:81,76:v,77:k,79:A,80:C},{35:109,75:81,76:v,77:k,79:A,80:C},{35:110,75:81,76:v,77:k,79:A,80:C},{35:111,75:81,76:v,77:k,79:A,80:C},{35:112,75:81,76:v,77:k,79:A,80:C},{35:113,75:81,76:v,77:k,79:A,80:C},{35:114,75:81,76:v,77:k,79:A,80:C},{35:115,75:81,76:v,77:k,79:A,80:C},{20:116,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{12:[1,118],33:[1,117]},{35:119,75:81,76:v,77:k,79:A,80:C},{35:120,75:81,76:v,77:k,79:A,80:C},{35:121,75:81,76:v,77:k,79:A,80:C},{35:122,75:81,76:v,77:k,79:A,80:C},{35:123,75:81,76:v,77:k,79:A,80:C},{35:124,75:81,76:v,77:k,79:A,80:C},{35:125,75:81,76:v,77:k,79:A,80:C},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},e(At,[2,15]),e(Vt,[2,17],{21:22,19:130,22:t,23:a,24:o,26:l,28:i}),e(At,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:t,23:a,24:o,26:l,28:i,34:s,36:r,37:n,38:h,39:f,40:d,41:p,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt}),e(Ot,[2,21]),e(Ot,[2,22]),e(w,[2,39]),e(ne,[2,71],{75:81,35:132,76:v,77:k,79:A,80:C}),e(Pt,[2,73]),{78:[1,133]},e(Pt,[2,75]),e(Pt,[2,76]),e(w,[2,40]),e(w,[2,41]),e(w,[2,42]),e(w,[2,43]),e(w,[2,44]),e(w,[2,45]),e(w,[2,46]),e(w,[2,47]),e(w,[2,48]),e(w,[2,49]),e(w,[2,50]),e(w,[2,51]),e(w,[2,52]),e(w,[2,53]),e(w,[2,54]),e(w,[2,55]),e(w,[2,56]),e(w,[2,57]),e(w,[2,58]),e(w,[2,60]),e(w,[2,61]),e(w,[2,62]),e(w,[2,63]),e(w,[2,64]),e(w,[2,65]),e(w,[2,66]),e(w,[2,67]),e(w,[2,68]),e(w,[2,69]),e(w,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},e(mt,[2,28]),e(mt,[2,29]),e(mt,[2,30]),e(mt,[2,31]),e(mt,[2,32]),e(mt,[2,33]),e(mt,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},e(Vt,[2,18]),e(At,[2,38]),e(ne,[2,72]),e(Pt,[2,74]),e(w,[2,24]),e(w,[2,35]),e(zt,[2,25]),e(zt,[2,26],{12:[1,138]}),e(zt,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:function(_,x){if(x.recoverable)this.trace(_);else{var m=new Error(_);throw m.hash=x,m}},parse:function(_){var x=this,m=[0],g=[],T=[null],u=[],Tt=this.table,y="",Et=0,se=0,Ee=2,ae=1,ve=u.slice.call(arguments,1),D=Object.create(this.lexer),vt={yy:{}};for(var Qt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Qt)&&(vt.yy[Qt]=this.yy[Qt]);D.setInput(_,vt.yy),vt.yy.lexer=D,vt.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var Ht=D.yylloc;u.push(Ht);var ke=D.options&&D.options.ranges;typeof vt.yy.parseError=="function"?this.parseError=vt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ae(){var X;return X=g.pop()||D.lex()||ae,typeof X!="number"&&(X instanceof Array&&(g=X,X=g.pop()),X=x.symbols_[X]||X),X}for(var M,kt,N,qt,Ct={},Mt,z,re,Lt;;){if(kt=m[m.length-1],this.defaultActions[kt]?N=this.defaultActions[kt]:((M===null||typeof M>"u")&&(M=Ae()),N=Tt[kt]&&Tt[kt][M]),typeof N>"u"||!N.length||!N[0]){var Gt="";Lt=[];for(Mt in Tt[kt])this.terminals_[Mt]&&Mt>Ee&&Lt.push("'"+this.terminals_[Mt]+"'");D.showPosition?Gt="Parse error on line "+(Et+1)+`: +import{s as Ce,g as we,a as Oe,b as Te,c as Dt,d as ue,e as Re,f as wt,h as Nt,l as le,i as De,w as Se,j as Kt,k as oe,m as Pe}from"./mermaid.core-QJnSHCal.js";import{d as Me,g as Le}from"./svgDrawCommon-ad5ef572-WW-Kq4zg.js";import"./app-oTlYPy8h.js";var Yt=function(){var e=function(bt,_,x,m){for(x=x||{},m=bt.length;m--;x[bt[m]]=_);return x},t=[1,24],a=[1,25],o=[1,26],l=[1,27],i=[1,28],s=[1,63],r=[1,64],n=[1,65],h=[1,66],f=[1,67],d=[1,68],p=[1,69],E=[1,29],O=[1,30],R=[1,31],S=[1,32],L=[1,33],Y=[1,34],Q=[1,35],H=[1,36],q=[1,37],G=[1,38],K=[1,39],J=[1,40],Z=[1,41],$=[1,42],tt=[1,43],et=[1,44],it=[1,45],nt=[1,46],st=[1,47],at=[1,48],rt=[1,50],lt=[1,51],ot=[1,52],ct=[1,53],ht=[1,54],ut=[1,55],dt=[1,56],ft=[1,57],pt=[1,58],yt=[1,59],gt=[1,60],At=[14,42],Vt=[14,34,36,37,38,39,40,41,42,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],Ot=[12,14,34,36,37,38,39,40,41,42,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],v=[1,82],k=[1,83],A=[1,84],C=[1,85],w=[12,14,42],ne=[12,14,33,42],Pt=[12,14,33,42,76,77,79,80],mt=[12,33],zt=[34,36,37,38,39,40,41,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],Xt={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:function(_,x,m,g,T,u,Tt){var y=u.length-1;switch(T){case 3:g.setDirection("TB");break;case 4:g.setDirection("BT");break;case 5:g.setDirection("RL");break;case 6:g.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:g.setC4Type(u[y-3]);break;case 19:g.setTitle(u[y].substring(6)),this.$=u[y].substring(6);break;case 20:g.setAccDescription(u[y].substring(15)),this.$=u[y].substring(15);break;case 21:this.$=u[y].trim(),g.setTitle(this.$);break;case 22:case 23:this.$=u[y].trim(),g.setAccDescription(this.$);break;case 28:case 29:u[y].splice(2,0,"ENTERPRISE"),g.addPersonOrSystemBoundary(...u[y]),this.$=u[y];break;case 30:g.addPersonOrSystemBoundary(...u[y]),this.$=u[y];break;case 31:u[y].splice(2,0,"CONTAINER"),g.addContainerBoundary(...u[y]),this.$=u[y];break;case 32:g.addDeploymentNode("node",...u[y]),this.$=u[y];break;case 33:g.addDeploymentNode("nodeL",...u[y]),this.$=u[y];break;case 34:g.addDeploymentNode("nodeR",...u[y]),this.$=u[y];break;case 35:g.popBoundaryParseStack();break;case 39:g.addPersonOrSystem("person",...u[y]),this.$=u[y];break;case 40:g.addPersonOrSystem("external_person",...u[y]),this.$=u[y];break;case 41:g.addPersonOrSystem("system",...u[y]),this.$=u[y];break;case 42:g.addPersonOrSystem("system_db",...u[y]),this.$=u[y];break;case 43:g.addPersonOrSystem("system_queue",...u[y]),this.$=u[y];break;case 44:g.addPersonOrSystem("external_system",...u[y]),this.$=u[y];break;case 45:g.addPersonOrSystem("external_system_db",...u[y]),this.$=u[y];break;case 46:g.addPersonOrSystem("external_system_queue",...u[y]),this.$=u[y];break;case 47:g.addContainer("container",...u[y]),this.$=u[y];break;case 48:g.addContainer("container_db",...u[y]),this.$=u[y];break;case 49:g.addContainer("container_queue",...u[y]),this.$=u[y];break;case 50:g.addContainer("external_container",...u[y]),this.$=u[y];break;case 51:g.addContainer("external_container_db",...u[y]),this.$=u[y];break;case 52:g.addContainer("external_container_queue",...u[y]),this.$=u[y];break;case 53:g.addComponent("component",...u[y]),this.$=u[y];break;case 54:g.addComponent("component_db",...u[y]),this.$=u[y];break;case 55:g.addComponent("component_queue",...u[y]),this.$=u[y];break;case 56:g.addComponent("external_component",...u[y]),this.$=u[y];break;case 57:g.addComponent("external_component_db",...u[y]),this.$=u[y];break;case 58:g.addComponent("external_component_queue",...u[y]),this.$=u[y];break;case 60:g.addRel("rel",...u[y]),this.$=u[y];break;case 61:g.addRel("birel",...u[y]),this.$=u[y];break;case 62:g.addRel("rel_u",...u[y]),this.$=u[y];break;case 63:g.addRel("rel_d",...u[y]),this.$=u[y];break;case 64:g.addRel("rel_l",...u[y]),this.$=u[y];break;case 65:g.addRel("rel_r",...u[y]),this.$=u[y];break;case 66:g.addRel("rel_b",...u[y]),this.$=u[y];break;case 67:u[y].splice(0,1),g.addRel("rel",...u[y]),this.$=u[y];break;case 68:g.updateElStyle("update_el_style",...u[y]),this.$=u[y];break;case 69:g.updateRelStyle("update_rel_style",...u[y]),this.$=u[y];break;case 70:g.updateLayoutConfig("update_layout_config",...u[y]),this.$=u[y];break;case 71:this.$=[u[y]];break;case 72:u[y].unshift(u[y-1]),this.$=u[y];break;case 73:case 75:this.$=u[y].trim();break;case 74:let Et={};Et[u[y-1].trim()]=u[y].trim(),this.$=Et;break;case 76:this.$="";break}},table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{13:70,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{13:71,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{13:72,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{13:73,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{14:[1,74]},e(At,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:r,37:n,38:h,39:f,40:d,41:p,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt}),e(At,[2,14]),e(Vt,[2,16],{12:[1,76]}),e(At,[2,36],{12:[1,77]}),e(Ot,[2,19]),e(Ot,[2,20]),{25:[1,78]},{27:[1,79]},e(Ot,[2,23]),{35:80,75:81,76:v,77:k,79:A,80:C},{35:86,75:81,76:v,77:k,79:A,80:C},{35:87,75:81,76:v,77:k,79:A,80:C},{35:88,75:81,76:v,77:k,79:A,80:C},{35:89,75:81,76:v,77:k,79:A,80:C},{35:90,75:81,76:v,77:k,79:A,80:C},{35:91,75:81,76:v,77:k,79:A,80:C},{35:92,75:81,76:v,77:k,79:A,80:C},{35:93,75:81,76:v,77:k,79:A,80:C},{35:94,75:81,76:v,77:k,79:A,80:C},{35:95,75:81,76:v,77:k,79:A,80:C},{35:96,75:81,76:v,77:k,79:A,80:C},{35:97,75:81,76:v,77:k,79:A,80:C},{35:98,75:81,76:v,77:k,79:A,80:C},{35:99,75:81,76:v,77:k,79:A,80:C},{35:100,75:81,76:v,77:k,79:A,80:C},{35:101,75:81,76:v,77:k,79:A,80:C},{35:102,75:81,76:v,77:k,79:A,80:C},{35:103,75:81,76:v,77:k,79:A,80:C},{35:104,75:81,76:v,77:k,79:A,80:C},e(w,[2,59]),{35:105,75:81,76:v,77:k,79:A,80:C},{35:106,75:81,76:v,77:k,79:A,80:C},{35:107,75:81,76:v,77:k,79:A,80:C},{35:108,75:81,76:v,77:k,79:A,80:C},{35:109,75:81,76:v,77:k,79:A,80:C},{35:110,75:81,76:v,77:k,79:A,80:C},{35:111,75:81,76:v,77:k,79:A,80:C},{35:112,75:81,76:v,77:k,79:A,80:C},{35:113,75:81,76:v,77:k,79:A,80:C},{35:114,75:81,76:v,77:k,79:A,80:C},{35:115,75:81,76:v,77:k,79:A,80:C},{20:116,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{12:[1,118],33:[1,117]},{35:119,75:81,76:v,77:k,79:A,80:C},{35:120,75:81,76:v,77:k,79:A,80:C},{35:121,75:81,76:v,77:k,79:A,80:C},{35:122,75:81,76:v,77:k,79:A,80:C},{35:123,75:81,76:v,77:k,79:A,80:C},{35:124,75:81,76:v,77:k,79:A,80:C},{35:125,75:81,76:v,77:k,79:A,80:C},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},e(At,[2,15]),e(Vt,[2,17],{21:22,19:130,22:t,23:a,24:o,26:l,28:i}),e(At,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:t,23:a,24:o,26:l,28:i,34:s,36:r,37:n,38:h,39:f,40:d,41:p,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt}),e(Ot,[2,21]),e(Ot,[2,22]),e(w,[2,39]),e(ne,[2,71],{75:81,35:132,76:v,77:k,79:A,80:C}),e(Pt,[2,73]),{78:[1,133]},e(Pt,[2,75]),e(Pt,[2,76]),e(w,[2,40]),e(w,[2,41]),e(w,[2,42]),e(w,[2,43]),e(w,[2,44]),e(w,[2,45]),e(w,[2,46]),e(w,[2,47]),e(w,[2,48]),e(w,[2,49]),e(w,[2,50]),e(w,[2,51]),e(w,[2,52]),e(w,[2,53]),e(w,[2,54]),e(w,[2,55]),e(w,[2,56]),e(w,[2,57]),e(w,[2,58]),e(w,[2,60]),e(w,[2,61]),e(w,[2,62]),e(w,[2,63]),e(w,[2,64]),e(w,[2,65]),e(w,[2,66]),e(w,[2,67]),e(w,[2,68]),e(w,[2,69]),e(w,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},e(mt,[2,28]),e(mt,[2,29]),e(mt,[2,30]),e(mt,[2,31]),e(mt,[2,32]),e(mt,[2,33]),e(mt,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},e(Vt,[2,18]),e(At,[2,38]),e(ne,[2,72]),e(Pt,[2,74]),e(w,[2,24]),e(w,[2,35]),e(zt,[2,25]),e(zt,[2,26],{12:[1,138]}),e(zt,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:function(_,x){if(x.recoverable)this.trace(_);else{var m=new Error(_);throw m.hash=x,m}},parse:function(_){var x=this,m=[0],g=[],T=[null],u=[],Tt=this.table,y="",Et=0,se=0,Ee=2,ae=1,ve=u.slice.call(arguments,1),D=Object.create(this.lexer),vt={yy:{}};for(var Qt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Qt)&&(vt.yy[Qt]=this.yy[Qt]);D.setInput(_,vt.yy),vt.yy.lexer=D,vt.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var Ht=D.yylloc;u.push(Ht);var ke=D.options&&D.options.ranges;typeof vt.yy.parseError=="function"?this.parseError=vt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ae(){var X;return X=g.pop()||D.lex()||ae,typeof X!="number"&&(X instanceof Array&&(g=X,X=g.pop()),X=x.symbols_[X]||X),X}for(var M,kt,N,qt,Ct={},Mt,z,re,Lt;;){if(kt=m[m.length-1],this.defaultActions[kt]?N=this.defaultActions[kt]:((M===null||typeof M>"u")&&(M=Ae()),N=Tt[kt]&&Tt[kt][M]),typeof N>"u"||!N.length||!N[0]){var Gt="";Lt=[];for(Mt in Tt[kt])this.terminals_[Mt]&&Mt>Ee&&Lt.push("'"+this.terminals_[Mt]+"'");D.showPosition?Gt="Parse error on line "+(Et+1)+`: `+D.showPosition()+` Expecting `+Lt.join(", ")+", got '"+(this.terminals_[M]||M)+"'":Gt="Parse error on line "+(Et+1)+": Unexpected "+(M==ae?"end of input":"'"+(this.terminals_[M]||M)+"'"),this.parseError(Gt,{text:D.match,token:this.terminals_[M]||M,line:D.yylineno,loc:Ht,expected:Lt})}if(N[0]instanceof Array&&N.length>1)throw new Error("Parse Error: multiple actions possible at state: "+kt+", token: "+M);switch(N[0]){case 1:m.push(M),T.push(D.yytext),u.push(D.yylloc),m.push(N[1]),M=null,se=D.yyleng,y=D.yytext,Et=D.yylineno,Ht=D.yylloc;break;case 2:if(z=this.productions_[N[1]][1],Ct.$=T[T.length-z],Ct._$={first_line:u[u.length-(z||1)].first_line,last_line:u[u.length-1].last_line,first_column:u[u.length-(z||1)].first_column,last_column:u[u.length-1].last_column},ke&&(Ct._$.range=[u[u.length-(z||1)].range[0],u[u.length-1].range[1]]),qt=this.performAction.apply(Ct,[y,se,Et,vt.yy,N[1],T,u].concat(ve)),typeof qt<"u")return qt;z&&(m=m.slice(0,-1*z*2),T=T.slice(0,-1*z),u=u.slice(0,-1*z)),m.push(this.productions_[N[1]][0]),T.push(Ct.$),u.push(Ct._$),re=Tt[m[m.length-2]][m[m.length-1]],m.push(re);break;case 3:return!0}}return!0}},me=function(){var bt={EOF:1,parseError:function(x,m){if(this.yy.parser)this.yy.parser.parseError(x,m);else throw new Error(x)},setInput:function(_,x){return this.yy=x||this.yy||{},this._input=_,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var _=this._input[0];this.yytext+=_,this.yyleng++,this.offset++,this.match+=_,this.matched+=_;var x=_.match(/(?:\r\n?|\n).*/g);return x?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),_},unput:function(_){var x=_.length,m=_.split(/(?:\r\n?|\n)/g);this._input=_+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-x),this.offset-=x;var g=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),m.length-1&&(this.yylineno-=m.length-1);var T=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:m?(m.length===g.length?this.yylloc.first_column:0)+g[g.length-m.length].length-m[0].length:this.yylloc.first_column-x},this.options.ranges&&(this.yylloc.range=[T[0],T[0]+this.yyleng-x]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(_){this.unput(this.match.slice(_))},pastInput:function(){var _=this.matched.substr(0,this.matched.length-this.match.length);return(_.length>20?"...":"")+_.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var _=this.match;return _.length<20&&(_+=this._input.substr(0,20-_.length)),(_.substr(0,20)+(_.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var _=this.pastInput(),x=new Array(_.length+1).join("-");return _+this.upcomingInput()+` diff --git a/assets/classDiagram-48ab76fb-B-1nPr5u.js b/assets/classDiagram-48ab76fb-YrjwxOfN.js similarity index 97% rename from assets/classDiagram-48ab76fb-B-1nPr5u.js rename to assets/classDiagram-48ab76fb-YrjwxOfN.js index 33de3b8..5301547 100644 --- a/assets/classDiagram-48ab76fb-B-1nPr5u.js +++ b/assets/classDiagram-48ab76fb-YrjwxOfN.js @@ -1,2 +1,2 @@ -import{p as A,d as S,s as G}from"./styles-4ba6ed67-HTbB9pbZ.js";import{c as v,l as y,h as B,i as W,ao as $,y as M,ar as I}from"./mermaid.core-zy7cM8l9.js";import{G as O,l as P}from"./layout-1ugHHiNm.js";import{l as X}from"./line-TqRW8de4.js";import"./app-BrxqtzGY.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";let H=0;const Y=function(i,a,t,o,p){const g=function(e){switch(e){case p.db.relationType.AGGREGATION:return"aggregation";case p.db.relationType.EXTENSION:return"extension";case p.db.relationType.COMPOSITION:return"composition";case p.db.relationType.DEPENDENCY:return"dependency";case p.db.relationType.LOLLIPOP:return"lollipop"}};a.points=a.points.filter(e=>!Number.isNaN(e.y));const s=a.points,c=X().x(function(e){return e.x}).y(function(e){return e.y}).curve($),n=i.append("path").attr("d",c(s)).attr("id","edge"+H).attr("class","relation");let r="";o.arrowMarkerAbsolute&&(r=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,r=r.replace(/\(/g,"\\("),r=r.replace(/\)/g,"\\)")),t.relation.lineType==1&&n.attr("class","relation dashed-line"),t.relation.lineType==10&&n.attr("class","relation dotted-line"),t.relation.type1!=="none"&&n.attr("marker-start","url("+r+"#"+g(t.relation.type1)+"Start)"),t.relation.type2!=="none"&&n.attr("marker-end","url("+r+"#"+g(t.relation.type2)+"End)");let f,h;const x=a.points.length;let b=M.calcLabelPosition(a.points);f=b.x,h=b.y;let u,m,w,k;if(x%2!==0&&x>1){let e=M.calcCardinalityPosition(t.relation.type1!=="none",a.points,a.points[0]),d=M.calcCardinalityPosition(t.relation.type2!=="none",a.points,a.points[x-1]);y.debug("cardinality_1_point "+JSON.stringify(e)),y.debug("cardinality_2_point "+JSON.stringify(d)),u=e.x,m=e.y,w=d.x,k=d.y}if(t.title!==void 0){const e=i.append("g").attr("class","classLabel"),d=e.append("text").attr("class","label").attr("x",f).attr("y",h).attr("fill","red").attr("text-anchor","middle").text(t.title);window.label=d;const l=d.node().getBBox();e.insert("rect",":first-child").attr("class","box").attr("x",l.x-o.padding/2).attr("y",l.y-o.padding/2).attr("width",l.width+o.padding).attr("height",l.height+o.padding)}y.info("Rendering relation "+JSON.stringify(t)),t.relationTitle1!==void 0&&t.relationTitle1!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",u).attr("y",m).attr("fill","black").attr("font-size","6").text(t.relationTitle1),t.relationTitle2!==void 0&&t.relationTitle2!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",w).attr("y",k).attr("fill","black").attr("font-size","6").text(t.relationTitle2),H++},J=function(i,a,t,o){y.debug("Rendering class ",a,t);const p=a.id,g={id:p,label:a.id,width:0,height:0},s=i.append("g").attr("id",o.db.lookUpDomId(p)).attr("class","classGroup");let c;a.link?c=s.append("svg:a").attr("xlink:href",a.link).attr("target",a.linkTarget).append("text").attr("y",t.textHeight+t.padding).attr("x",0):c=s.append("text").attr("y",t.textHeight+t.padding).attr("x",0);let n=!0;a.annotations.forEach(function(d){const l=c.append("tspan").text("«"+d+"»");n||l.attr("dy",t.textHeight),n=!1});let r=C(a);const f=c.append("tspan").text(r).attr("class","title");n||f.attr("dy",t.textHeight);const h=c.node().getBBox().height;let x,b,u;if(a.members.length>0){x=s.append("line").attr("x1",0).attr("y1",t.padding+h+t.dividerMargin/2).attr("y2",t.padding+h+t.dividerMargin/2);const d=s.append("text").attr("x",t.padding).attr("y",h+t.dividerMargin+t.textHeight).attr("fill","white").attr("class","classText");n=!0,a.members.forEach(function(l){_(d,l,n,t),n=!1}),b=d.node().getBBox()}if(a.methods.length>0){u=s.append("line").attr("x1",0).attr("y1",t.padding+h+t.dividerMargin+b.height).attr("y2",t.padding+h+t.dividerMargin+b.height);const d=s.append("text").attr("x",t.padding).attr("y",h+2*t.dividerMargin+b.height+t.textHeight).attr("fill","white").attr("class","classText");n=!0,a.methods.forEach(function(l){_(d,l,n,t),n=!1})}const m=s.node().getBBox();var w=" ";a.cssClasses.length>0&&(w=w+a.cssClasses.join(" "));const e=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",m.width+2*t.padding).attr("height",m.height+t.padding+.5*t.dividerMargin).attr("class",w).node().getBBox().width;return c.node().childNodes.forEach(function(d){d.setAttribute("x",(e-d.getBBox().width)/2)}),a.tooltip&&c.insert("title").text(a.tooltip),x&&x.attr("x2",e),u&&u.attr("x2",e),g.width=e,g.height=m.height+t.padding+.5*t.dividerMargin,g},C=function(i){let a=i.id;return i.type&&(a+="<"+I(i.type)+">"),a},Z=function(i,a,t,o){y.debug("Rendering note ",a,t);const p=a.id,g={id:p,text:a.text,width:0,height:0},s=i.append("g").attr("id",p).attr("class","classGroup");let c=s.append("text").attr("y",t.textHeight+t.padding).attr("x",0);const n=JSON.parse(`"${a.text}"`).split(` +import{p as A,d as S,s as G}from"./styles-4ba6ed67-qSs9rwsT.js";import{c as v,l as y,h as B,i as W,ao as $,y as M,ar as I}from"./mermaid.core-QJnSHCal.js";import{G as O,l as P}from"./layout-Vth69vlg.js";import{l as X}from"./line-ZVNdUhg2.js";import"./app-oTlYPy8h.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";let H=0;const Y=function(i,a,t,o,p){const g=function(e){switch(e){case p.db.relationType.AGGREGATION:return"aggregation";case p.db.relationType.EXTENSION:return"extension";case p.db.relationType.COMPOSITION:return"composition";case p.db.relationType.DEPENDENCY:return"dependency";case p.db.relationType.LOLLIPOP:return"lollipop"}};a.points=a.points.filter(e=>!Number.isNaN(e.y));const s=a.points,c=X().x(function(e){return e.x}).y(function(e){return e.y}).curve($),n=i.append("path").attr("d",c(s)).attr("id","edge"+H).attr("class","relation");let r="";o.arrowMarkerAbsolute&&(r=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,r=r.replace(/\(/g,"\\("),r=r.replace(/\)/g,"\\)")),t.relation.lineType==1&&n.attr("class","relation dashed-line"),t.relation.lineType==10&&n.attr("class","relation dotted-line"),t.relation.type1!=="none"&&n.attr("marker-start","url("+r+"#"+g(t.relation.type1)+"Start)"),t.relation.type2!=="none"&&n.attr("marker-end","url("+r+"#"+g(t.relation.type2)+"End)");let f,h;const x=a.points.length;let b=M.calcLabelPosition(a.points);f=b.x,h=b.y;let u,m,w,k;if(x%2!==0&&x>1){let e=M.calcCardinalityPosition(t.relation.type1!=="none",a.points,a.points[0]),d=M.calcCardinalityPosition(t.relation.type2!=="none",a.points,a.points[x-1]);y.debug("cardinality_1_point "+JSON.stringify(e)),y.debug("cardinality_2_point "+JSON.stringify(d)),u=e.x,m=e.y,w=d.x,k=d.y}if(t.title!==void 0){const e=i.append("g").attr("class","classLabel"),d=e.append("text").attr("class","label").attr("x",f).attr("y",h).attr("fill","red").attr("text-anchor","middle").text(t.title);window.label=d;const l=d.node().getBBox();e.insert("rect",":first-child").attr("class","box").attr("x",l.x-o.padding/2).attr("y",l.y-o.padding/2).attr("width",l.width+o.padding).attr("height",l.height+o.padding)}y.info("Rendering relation "+JSON.stringify(t)),t.relationTitle1!==void 0&&t.relationTitle1!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",u).attr("y",m).attr("fill","black").attr("font-size","6").text(t.relationTitle1),t.relationTitle2!==void 0&&t.relationTitle2!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",w).attr("y",k).attr("fill","black").attr("font-size","6").text(t.relationTitle2),H++},J=function(i,a,t,o){y.debug("Rendering class ",a,t);const p=a.id,g={id:p,label:a.id,width:0,height:0},s=i.append("g").attr("id",o.db.lookUpDomId(p)).attr("class","classGroup");let c;a.link?c=s.append("svg:a").attr("xlink:href",a.link).attr("target",a.linkTarget).append("text").attr("y",t.textHeight+t.padding).attr("x",0):c=s.append("text").attr("y",t.textHeight+t.padding).attr("x",0);let n=!0;a.annotations.forEach(function(d){const l=c.append("tspan").text("«"+d+"»");n||l.attr("dy",t.textHeight),n=!1});let r=C(a);const f=c.append("tspan").text(r).attr("class","title");n||f.attr("dy",t.textHeight);const h=c.node().getBBox().height;let x,b,u;if(a.members.length>0){x=s.append("line").attr("x1",0).attr("y1",t.padding+h+t.dividerMargin/2).attr("y2",t.padding+h+t.dividerMargin/2);const d=s.append("text").attr("x",t.padding).attr("y",h+t.dividerMargin+t.textHeight).attr("fill","white").attr("class","classText");n=!0,a.members.forEach(function(l){_(d,l,n,t),n=!1}),b=d.node().getBBox()}if(a.methods.length>0){u=s.append("line").attr("x1",0).attr("y1",t.padding+h+t.dividerMargin+b.height).attr("y2",t.padding+h+t.dividerMargin+b.height);const d=s.append("text").attr("x",t.padding).attr("y",h+2*t.dividerMargin+b.height+t.textHeight).attr("fill","white").attr("class","classText");n=!0,a.methods.forEach(function(l){_(d,l,n,t),n=!1})}const m=s.node().getBBox();var w=" ";a.cssClasses.length>0&&(w=w+a.cssClasses.join(" "));const e=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",m.width+2*t.padding).attr("height",m.height+t.padding+.5*t.dividerMargin).attr("class",w).node().getBBox().width;return c.node().childNodes.forEach(function(d){d.setAttribute("x",(e-d.getBBox().width)/2)}),a.tooltip&&c.insert("title").text(a.tooltip),x&&x.attr("x2",e),u&&u.attr("x2",e),g.width=e,g.height=m.height+t.padding+.5*t.dividerMargin,g},C=function(i){let a=i.id;return i.type&&(a+="<"+I(i.type)+">"),a},Z=function(i,a,t,o){y.debug("Rendering note ",a,t);const p=a.id,g={id:p,text:a.text,width:0,height:0},s=i.append("g").attr("id",p).attr("class","classGroup");let c=s.append("text").attr("y",t.textHeight+t.padding).attr("x",0);const n=JSON.parse(`"${a.text}"`).split(` `);n.forEach(function(x){y.debug(`Adding line: ${x}`),c.append("tspan").text(x).attr("class","title").attr("dy",t.textHeight)});const r=s.node().getBBox(),h=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",r.width+2*t.padding).attr("height",r.height+n.length*t.textHeight+t.padding+.5*t.dividerMargin).node().getBBox().width;return c.node().childNodes.forEach(function(x){x.setAttribute("x",(h-x.getBBox().width)/2)}),g.width=h,g.height=r.height+n.length*t.textHeight+t.padding+.5*t.dividerMargin,g},_=function(i,a,t,o){const{displayText:p,cssStyle:g}=a.getDisplayDetails(),s=i.append("tspan").attr("x",o.padding).text(p);g!==""&&s.attr("style",a.cssStyle),t||s.attr("dy",o.textHeight)},N={getClassTitleString:C,drawClass:J,drawEdge:Y,drawNote:Z};let T={};const E=20,L=function(i){const a=Object.entries(T).find(t=>t[1].label===i);if(a)return a[0]},R=function(i){i.append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),i.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),i.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},F=function(i,a,t,o){const p=v().class;T={},y.info("Rendering diagram "+i);const g=v().securityLevel;let s;g==="sandbox"&&(s=B("#i"+a));const c=g==="sandbox"?B(s.nodes()[0].contentDocument.body):B("body"),n=c.select(`[id='${a}']`);R(n);const r=new O({multigraph:!0});r.setGraph({isMultiGraph:!0}),r.setDefaultEdgeLabel(function(){return{}});const f=o.db.getClasses(),h=Object.keys(f);for(const e of h){const d=f[e],l=N.drawClass(n,d,p,o);T[l.id]=l,r.setNode(l.id,l),y.info("Org height: "+l.height)}o.db.getRelations().forEach(function(e){y.info("tjoho"+L(e.id1)+L(e.id2)+JSON.stringify(e)),r.setEdge(L(e.id1),L(e.id2),{relation:e},e.title||"DEFAULT")}),o.db.getNotes().forEach(function(e){y.debug(`Adding note: ${JSON.stringify(e)}`);const d=N.drawNote(n,e,p,o);T[d.id]=d,r.setNode(d.id,d),e.class&&e.class in f&&r.setEdge(e.id,L(e.class),{relation:{id1:e.id,id2:e.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")}),P(r),r.nodes().forEach(function(e){e!==void 0&&r.node(e)!==void 0&&(y.debug("Node "+e+": "+JSON.stringify(r.node(e))),c.select("#"+(o.db.lookUpDomId(e)||e)).attr("transform","translate("+(r.node(e).x-r.node(e).width/2)+","+(r.node(e).y-r.node(e).height/2)+" )"))}),r.edges().forEach(function(e){e!==void 0&&r.edge(e)!==void 0&&(y.debug("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(r.edge(e))),N.drawEdge(n,r.edge(e),r.edge(e).relation,p,o))});const u=n.node().getBBox(),m=u.width+E*2,w=u.height+E*2;W(n,w,m,p.useMaxWidth);const k=`${u.x-E} ${u.y-E} ${m} ${w}`;y.debug(`viewBox ${k}`),n.attr("viewBox",k)},U={draw:F},tt={parser:A,db:S,renderer:U,styles:G,init:i=>{i.class||(i.class={}),i.class.arrowMarkerAbsolute=i.arrowMarkerAbsolute,S.clear()}};export{tt as diagram}; diff --git a/assets/classDiagram-v2-8ecb0bfc-6PoF2wPP.js b/assets/classDiagram-v2-8ecb0bfc-uyvLMQh4.js similarity index 93% rename from assets/classDiagram-v2-8ecb0bfc-6PoF2wPP.js rename to assets/classDiagram-v2-8ecb0bfc-uyvLMQh4.js index fbf9a8f..fff4e9e 100644 --- a/assets/classDiagram-v2-8ecb0bfc-6PoF2wPP.js +++ b/assets/classDiagram-v2-8ecb0bfc-uyvLMQh4.js @@ -1,2 +1,2 @@ -import{p as M,d as N,s as $}from"./styles-4ba6ed67-HTbB9pbZ.js";import{l as d,c,h as w,y as R,t as B,r as E,o as _,p as G,j as C}from"./mermaid.core-zy7cM8l9.js";import{G as z}from"./layout-1ugHHiNm.js";import{r as P}from"./index-67a42d7d-p9ZYh1Xw.js";import"./app-BrxqtzGY.js";import"./edges-80f1ebb6--gcvlmof.js";import"./createText-aebacdfe-JILF3Vy1.js";import"./line-TqRW8de4.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";const S=s=>C.sanitizeText(s,c());let k={dividerMargin:10,padding:5,textHeight:10,curve:void 0};const q=function(s,t,y,n){const e=Object.keys(s);d.info("keys:",e),d.info(s),e.forEach(function(i){var o,r;const l=s[i],p={shape:"rect",id:l.id,domId:l.domId,labelText:S(l.id),labelStyle:"",style:"fill: none; stroke: black",padding:((o=c().flowchart)==null?void 0:o.padding)??((r=c().class)==null?void 0:r.padding)};t.setNode(l.id,p),A(l.classes,t,y,n,l.id),d.info("setNode",p)})},A=function(s,t,y,n,e){const i=Object.keys(s);d.info("keys:",i),d.info(s),i.filter(o=>s[o].parent==e).forEach(function(o){var r,l;const a=s[o],p=a.cssClasses.join(" "),f={labelStyle:"",style:""},m=a.label??a.id,b=0,h="class_box",u={labelStyle:f.labelStyle,shape:h,labelText:S(m),classData:a,rx:b,ry:b,class:p,style:f.style,id:a.id,domId:a.domId,tooltip:n.db.getTooltip(a.id,e)||"",haveCallback:a.haveCallback,link:a.link,width:a.type==="group"?500:void 0,type:a.type,padding:((r=c().flowchart)==null?void 0:r.padding)??((l=c().class)==null?void 0:l.padding)};t.setNode(a.id,u),e&&t.setParent(a.id,e),d.info("setNode",u)})},F=function(s,t,y,n){d.info(s),s.forEach(function(e,i){var o,r;const l=e,a="",p={labelStyle:"",style:""},f=l.text,m=0,b="note",h={labelStyle:p.labelStyle,shape:b,labelText:S(f),noteData:l,rx:m,ry:m,class:a,style:p.style,id:l.id,domId:l.id,tooltip:"",type:"note",padding:((o=c().flowchart)==null?void 0:o.padding)??((r=c().class)==null?void 0:r.padding)};if(t.setNode(l.id,h),d.info("setNode",h),!l.class||!(l.class in n))return;const u=y+i,g={id:`edgeNote${u}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:E(k.curve,_)};t.setEdge(l.id,l.class,g,u)})},H=function(s,t){const y=c().flowchart;let n=0;s.forEach(function(e){var i;n++;const o={classes:"relation",pattern:e.relation.lineType==1?"dashed":"solid",id:"id"+n,arrowhead:e.type==="arrow_open"?"none":"normal",startLabelRight:e.relationTitle1==="none"?"":e.relationTitle1,endLabelLeft:e.relationTitle2==="none"?"":e.relationTitle2,arrowTypeStart:D(e.relation.type1),arrowTypeEnd:D(e.relation.type2),style:"fill:none",labelStyle:"",curve:E(y==null?void 0:y.curve,_)};if(d.info(o,e),e.style!==void 0){const r=G(e.style);o.style=r.style,o.labelStyle=r.labelStyle}e.text=e.title,e.text===void 0?e.style!==void 0&&(o.arrowheadStyle="fill: #333"):(o.arrowheadStyle="fill: #333",o.labelpos="c",((i=c().flowchart)==null?void 0:i.htmlLabels)??c().htmlLabels?(o.labelType="html",o.label=''+e.text+""):(o.labelType="text",o.label=e.text.replace(C.lineBreakRegex,` +import{p as M,d as N,s as $}from"./styles-4ba6ed67-qSs9rwsT.js";import{l as d,c,h as w,y as R,t as B,r as E,o as _,p as G,j as C}from"./mermaid.core-QJnSHCal.js";import{G as z}from"./layout-Vth69vlg.js";import{r as P}from"./index-67a42d7d-TJSwJJ1D.js";import"./app-oTlYPy8h.js";import"./edges-80f1ebb6-kOLp6foW.js";import"./createText-aebacdfe-8FzA6VnR.js";import"./line-ZVNdUhg2.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";const S=s=>C.sanitizeText(s,c());let k={dividerMargin:10,padding:5,textHeight:10,curve:void 0};const q=function(s,t,y,n){const e=Object.keys(s);d.info("keys:",e),d.info(s),e.forEach(function(i){var o,r;const l=s[i],p={shape:"rect",id:l.id,domId:l.domId,labelText:S(l.id),labelStyle:"",style:"fill: none; stroke: black",padding:((o=c().flowchart)==null?void 0:o.padding)??((r=c().class)==null?void 0:r.padding)};t.setNode(l.id,p),A(l.classes,t,y,n,l.id),d.info("setNode",p)})},A=function(s,t,y,n,e){const i=Object.keys(s);d.info("keys:",i),d.info(s),i.filter(o=>s[o].parent==e).forEach(function(o){var r,l;const a=s[o],p=a.cssClasses.join(" "),f={labelStyle:"",style:""},m=a.label??a.id,b=0,h="class_box",u={labelStyle:f.labelStyle,shape:h,labelText:S(m),classData:a,rx:b,ry:b,class:p,style:f.style,id:a.id,domId:a.domId,tooltip:n.db.getTooltip(a.id,e)||"",haveCallback:a.haveCallback,link:a.link,width:a.type==="group"?500:void 0,type:a.type,padding:((r=c().flowchart)==null?void 0:r.padding)??((l=c().class)==null?void 0:l.padding)};t.setNode(a.id,u),e&&t.setParent(a.id,e),d.info("setNode",u)})},F=function(s,t,y,n){d.info(s),s.forEach(function(e,i){var o,r;const l=e,a="",p={labelStyle:"",style:""},f=l.text,m=0,b="note",h={labelStyle:p.labelStyle,shape:b,labelText:S(f),noteData:l,rx:m,ry:m,class:a,style:p.style,id:l.id,domId:l.id,tooltip:"",type:"note",padding:((o=c().flowchart)==null?void 0:o.padding)??((r=c().class)==null?void 0:r.padding)};if(t.setNode(l.id,h),d.info("setNode",h),!l.class||!(l.class in n))return;const u=y+i,g={id:`edgeNote${u}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:E(k.curve,_)};t.setEdge(l.id,l.class,g,u)})},H=function(s,t){const y=c().flowchart;let n=0;s.forEach(function(e){var i;n++;const o={classes:"relation",pattern:e.relation.lineType==1?"dashed":"solid",id:"id"+n,arrowhead:e.type==="arrow_open"?"none":"normal",startLabelRight:e.relationTitle1==="none"?"":e.relationTitle1,endLabelLeft:e.relationTitle2==="none"?"":e.relationTitle2,arrowTypeStart:D(e.relation.type1),arrowTypeEnd:D(e.relation.type2),style:"fill:none",labelStyle:"",curve:E(y==null?void 0:y.curve,_)};if(d.info(o,e),e.style!==void 0){const r=G(e.style);o.style=r.style,o.labelStyle=r.labelStyle}e.text=e.title,e.text===void 0?e.style!==void 0&&(o.arrowheadStyle="fill: #333"):(o.arrowheadStyle="fill: #333",o.labelpos="c",((i=c().flowchart)==null?void 0:i.htmlLabels)??c().htmlLabels?(o.labelType="html",o.label=''+e.text+""):(o.labelType="text",o.label=e.text.replace(C.lineBreakRegex,` `),e.style===void 0&&(o.style=o.style||"stroke: #333; stroke-width: 1.5px;fill:none"),o.labelStyle=o.labelStyle.replace("color:","fill:"))),t.setEdge(e.id1,e.id2,o,n)})},V=function(s){k={...k,...s}},W=async function(s,t,y,n){d.info("Drawing class - ",t);const e=c().flowchart??c().class,i=c().securityLevel;d.info("config:",e);const o=(e==null?void 0:e.nodeSpacing)??50,r=(e==null?void 0:e.rankSpacing)??50,l=new z({multigraph:!0,compound:!0}).setGraph({rankdir:n.db.getDirection(),nodesep:o,ranksep:r,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),a=n.db.getNamespaces(),p=n.db.getClasses(),f=n.db.getRelations(),m=n.db.getNotes();d.info(f),q(a,l,t,n),A(p,l,t,n),H(f,l),F(m,l,f.length+1,p);let b;i==="sandbox"&&(b=w("#i"+t));const h=i==="sandbox"?w(b.nodes()[0].contentDocument.body):w("body"),u=h.select(`[id="${t}"]`),g=h.select("#"+t+" g");if(await P(g,l,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",t),R.insertTitle(u,"classTitleText",(e==null?void 0:e.titleTopMargin)??5,n.db.getDiagramTitle()),B(l,u,e==null?void 0:e.diagramPadding,e==null?void 0:e.useMaxWidth),!(e!=null&&e.htmlLabels)){const T=i==="sandbox"?b.nodes()[0].contentDocument:document,I=T.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const x of I){const L=x.getBBox(),v=T.createElementNS("http://www.w3.org/2000/svg","rect");v.setAttribute("rx",0),v.setAttribute("ry",0),v.setAttribute("width",L.width),v.setAttribute("height",L.height),x.insertBefore(v,x.firstChild)}}};function D(s){let t;switch(s){case 0:t="aggregation";break;case 1:t="extension";break;case 2:t="composition";break;case 3:t="dependency";break;case 4:t="lollipop";break;default:t="none"}return t}const J={setConf:V,draw:W},oe={parser:M,db:N,renderer:J,styles:$,init:s=>{s.class||(s.class={}),s.class.arrowMarkerAbsolute=s.arrowMarkerAbsolute,N.clear()}};export{oe as diagram}; diff --git a/assets/collaborative_projects.html-pOhMHRMF.js b/assets/collaborative_projects.html-19-TEwrL.js similarity index 98% rename from assets/collaborative_projects.html-pOhMHRMF.js rename to assets/collaborative_projects.html-19-TEwrL.js index 0f889c0..fcb80b0 100644 --- a/assets/collaborative_projects.html-pOhMHRMF.js +++ b/assets/collaborative_projects.html-19-TEwrL.js @@ -1 +1 @@ -import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as a,c as i,a as e,d as t,b as o}from"./app-BrxqtzGY.js";const s={},h=e("p",null,"视频管理平台",-1),_={href:"https://github.com/648540858/wvp-GB28181-pro",target:"_blank",rel:"noopener noreferrer"},c={href:"https://github.com/chatop2020/AKStream",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/any12345com/BXC_SipServer",target:"_blank",rel:"noopener noreferrer"},p={href:"https://github.com/panjjo/gosip",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/tsingeye/FreeEhome",target:"_blank",rel:"noopener noreferrer"},b=e("p",null,"播放器",-1),f={href:"https://github.com/numberwolf/h265web.js",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/langhuihui/jessibuca",target:"_blank",rel:"noopener noreferrer"},d={href:"https://github.com/v354412101/wsPlayer",target:"_blank",rel:"noopener noreferrer"},k={href:"https://github.com/any12345com/BXC_gb28181Player",target:"_blank",rel:"noopener noreferrer"},B=e("p",null,"WEB 管理网站",-1),w={href:"https://github.com/1002victor/zlm_webassist",target:"_blank",rel:"noopener noreferrer"},S={href:"https://github.com/langmansh/AKStreamNVR",target:"_blank",rel:"noopener noreferrer"},v=e("p",null,"SDK",-1),M={href:"https://github.com/malegend/ZLMediaKit.Autogen",target:"_blank",rel:"noopener noreferrer"},C={href:"https://github.com/metartc/metaRTC",target:"_blank",rel:"noopener noreferrer"},K=e("p",null,"其他项目(已停止更新)",-1),L={href:"https://gitee.com/hfwudao/GB28181_Node_Http",target:"_blank",rel:"noopener noreferrer"},N={href:"https://gitee.com/kkkkk5G/MediaServerUI",target:"_blank",rel:"noopener noreferrer"},E={href:"https://github.com/chenxiaolei/ZLMediaKit_NVR_UI",target:"_blank",rel:"noopener noreferrer"},G={href:"https://github.com/MingZhuLiu/ZLMediaServerManagent",target:"_blank",rel:"noopener noreferrer"},Z={href:"https://github.com/hctym1995/ZLM_ApiDemo",target:"_blank",rel:"noopener noreferrer"},j={href:"https://github.com/chengxiaosheng/ZLMediaKit.HttpApi",target:"_blank",rel:"noopener noreferrer"},x={href:"https://github.com/MingZhuLiu/ZLMediaKit.DotNetCore.Sdk",target:"_blank",rel:"noopener noreferrer"};function y(A,R){const r=l("ExternalLinkIcon");return a(),i("div",null,[e("ul",null,[e("li",null,[h,e("ul",null,[e("li",null,[e("a",_,[t("wvp-GB28181-pro"),o(r)]),t(" java 实现的开箱即用的 GB28181 协议视频平台")]),e("li",null,[e("a",c,[t("AKStream"),o(r)]),t(" c#实现的全功能的软 NVR 接口/GB28181 平台")]),e("li",null,[e("a",u,[t("BXC_SipServer"),o(r)]),t(" c++实现的国标 GB28181 流媒体信令服务器")]),e("li",null,[e("a",p,[t("gosip"),o(r)]),t(" golang 实现的 GB28181 服务器")]),e("li",null,[e("a",g,[t("FreeEhome"),o(r)]),t(" golang 实现的海康 ehome 服务器")])])]),e("li",null,[b,e("ul",null,[e("li",null,[e("a",f,[t("h265web.js"),o(r)]),t(" 基于 wasm 支持 H265 的播放器,支持本项目多种专属协议")]),e("li",null,[e("a",m,[t("jessibuca"),o(r)]),t(" 基于 wasm 支持 H265 的播放器")]),e("li",null,[e("a",d,[t("wsPlayer"),o(r)]),t(" 基于 MSE 的 websocket-fmp4 播放器")]),e("li",null,[e("a",k,[t("BXC_gb28181Player"),o(r)]),t(" C++开发的支持国标 GB28181 协议的视频流播放器")])])]),e("li",null,[B,e("ul",null,[e("li",null,[e("a",w,[t("zlm_webassist"),o(r)]),t(" 本项目配套的前后端分离 web 管理项目")]),e("li",null,[e("a",S,[t("AKStreamNVR"),o(r)]),t(" 前后端分离 web 项目,支持 webrtc 播放")])])]),e("li",null,[v,e("ul",null,[e("li",null,[e("a",M,[t("c# sdk"),o(r)]),t(" 本项目 c sdk 完整 c#包装库")]),e("li",null,[e("a",C,[t("metaRTC"),o(r)]),t(" 全国产纯 c webrtc sdk")])])]),e("li",null,[K,e("ul",null,[e("li",null,[e("a",L,[t("NodeJS 实现的 GB28181 平台"),o(r)])]),e("li",null,[e("a",N,[t("基于 ZLMediaKit 主线的管理 WEB 网站 "),o(r)])]),e("li",null,[e("a",E,[t("基于 ZLMediaKit 分支的管理 WEB 网站"),o(r)])]),e("li",null,[e("a",G,[t("一个非常漂亮的可视化后台管理系统"),o(r)])]),e("li",null,[e("a",Z,[t("基于 C SDK 实现的推流客户端"),o(r)])]),e("li",null,[e("a",j,[t("C#版本的 Http API 与 Hook"),o(r)])]),e("li",null,[e("a",x,[t("DotNetCore 的 RESTful 客户端"),o(r)])])])])])])}const D=n(s,[["render",y],["__file","collaborative_projects.html.vue"]]);export{D as default}; +import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as a,c as i,a as e,d as t,b as o}from"./app-oTlYPy8h.js";const s={},h=e("p",null,"视频管理平台",-1),_={href:"https://github.com/648540858/wvp-GB28181-pro",target:"_blank",rel:"noopener noreferrer"},c={href:"https://github.com/chatop2020/AKStream",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/any12345com/BXC_SipServer",target:"_blank",rel:"noopener noreferrer"},p={href:"https://github.com/panjjo/gosip",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/tsingeye/FreeEhome",target:"_blank",rel:"noopener noreferrer"},b=e("p",null,"播放器",-1),f={href:"https://github.com/numberwolf/h265web.js",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/langhuihui/jessibuca",target:"_blank",rel:"noopener noreferrer"},d={href:"https://github.com/v354412101/wsPlayer",target:"_blank",rel:"noopener noreferrer"},k={href:"https://github.com/any12345com/BXC_gb28181Player",target:"_blank",rel:"noopener noreferrer"},B=e("p",null,"WEB 管理网站",-1),w={href:"https://github.com/1002victor/zlm_webassist",target:"_blank",rel:"noopener noreferrer"},S={href:"https://github.com/langmansh/AKStreamNVR",target:"_blank",rel:"noopener noreferrer"},v=e("p",null,"SDK",-1),M={href:"https://github.com/malegend/ZLMediaKit.Autogen",target:"_blank",rel:"noopener noreferrer"},C={href:"https://github.com/metartc/metaRTC",target:"_blank",rel:"noopener noreferrer"},K=e("p",null,"其他项目(已停止更新)",-1),L={href:"https://gitee.com/hfwudao/GB28181_Node_Http",target:"_blank",rel:"noopener noreferrer"},N={href:"https://gitee.com/kkkkk5G/MediaServerUI",target:"_blank",rel:"noopener noreferrer"},E={href:"https://github.com/chenxiaolei/ZLMediaKit_NVR_UI",target:"_blank",rel:"noopener noreferrer"},G={href:"https://github.com/MingZhuLiu/ZLMediaServerManagent",target:"_blank",rel:"noopener noreferrer"},Z={href:"https://github.com/hctym1995/ZLM_ApiDemo",target:"_blank",rel:"noopener noreferrer"},j={href:"https://github.com/chengxiaosheng/ZLMediaKit.HttpApi",target:"_blank",rel:"noopener noreferrer"},x={href:"https://github.com/MingZhuLiu/ZLMediaKit.DotNetCore.Sdk",target:"_blank",rel:"noopener noreferrer"};function y(A,R){const r=l("ExternalLinkIcon");return a(),i("div",null,[e("ul",null,[e("li",null,[h,e("ul",null,[e("li",null,[e("a",_,[t("wvp-GB28181-pro"),o(r)]),t(" java 实现的开箱即用的 GB28181 协议视频平台")]),e("li",null,[e("a",c,[t("AKStream"),o(r)]),t(" c#实现的全功能的软 NVR 接口/GB28181 平台")]),e("li",null,[e("a",u,[t("BXC_SipServer"),o(r)]),t(" c++实现的国标 GB28181 流媒体信令服务器")]),e("li",null,[e("a",p,[t("gosip"),o(r)]),t(" golang 实现的 GB28181 服务器")]),e("li",null,[e("a",g,[t("FreeEhome"),o(r)]),t(" golang 实现的海康 ehome 服务器")])])]),e("li",null,[b,e("ul",null,[e("li",null,[e("a",f,[t("h265web.js"),o(r)]),t(" 基于 wasm 支持 H265 的播放器,支持本项目多种专属协议")]),e("li",null,[e("a",m,[t("jessibuca"),o(r)]),t(" 基于 wasm 支持 H265 的播放器")]),e("li",null,[e("a",d,[t("wsPlayer"),o(r)]),t(" 基于 MSE 的 websocket-fmp4 播放器")]),e("li",null,[e("a",k,[t("BXC_gb28181Player"),o(r)]),t(" C++开发的支持国标 GB28181 协议的视频流播放器")])])]),e("li",null,[B,e("ul",null,[e("li",null,[e("a",w,[t("zlm_webassist"),o(r)]),t(" 本项目配套的前后端分离 web 管理项目")]),e("li",null,[e("a",S,[t("AKStreamNVR"),o(r)]),t(" 前后端分离 web 项目,支持 webrtc 播放")])])]),e("li",null,[v,e("ul",null,[e("li",null,[e("a",M,[t("c# sdk"),o(r)]),t(" 本项目 c sdk 完整 c#包装库")]),e("li",null,[e("a",C,[t("metaRTC"),o(r)]),t(" 全国产纯 c webrtc sdk")])])]),e("li",null,[K,e("ul",null,[e("li",null,[e("a",L,[t("NodeJS 实现的 GB28181 平台"),o(r)])]),e("li",null,[e("a",N,[t("基于 ZLMediaKit 主线的管理 WEB 网站 "),o(r)])]),e("li",null,[e("a",E,[t("基于 ZLMediaKit 分支的管理 WEB 网站"),o(r)])]),e("li",null,[e("a",G,[t("一个非常漂亮的可视化后台管理系统"),o(r)])]),e("li",null,[e("a",Z,[t("基于 C SDK 实现的推流客户端"),o(r)])]),e("li",null,[e("a",j,[t("C#版本的 Http API 与 Hook"),o(r)])]),e("li",null,[e("a",x,[t("DotNetCore 的 RESTful 客户端"),o(r)])])])])])])}const D=n(s,[["render",y],["__file","collaborative_projects.html.vue"]]);export{D as default}; diff --git a/assets/collaborative_projects.html-F54TwnSU.js b/assets/collaborative_projects.html-UkPV-L0J.js similarity index 98% rename from assets/collaborative_projects.html-F54TwnSU.js rename to assets/collaborative_projects.html-UkPV-L0J.js index 1ab2fce..eca98b1 100644 --- a/assets/collaborative_projects.html-F54TwnSU.js +++ b/assets/collaborative_projects.html-UkPV-L0J.js @@ -1 +1 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as a,c as i,a as e,d as r,b as n}from"./app-BrxqtzGY.js";const s={},h=e("p",null,"Visual management website",-1),c={href:"https://github.com/langmansh/AKStreamNVR",target:"_blank",rel:"noopener noreferrer"},p={href:"https://gitee.com/kkkkk5G/MediaServerUI",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/chenxiaolei/ZLMediaKit_NVR_UI",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/MingZhuLiu/ZLMediaServerManagent",target:"_blank",rel:"noopener noreferrer"},m=e("p",null,"Media management platform",-1),d={href:"https://github.com/648540858/wvp-GB28181-pro",target:"_blank",rel:"noopener noreferrer"},b={href:"https://github.com/chatop2020/AKStream",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/any12345com/BXC_SipServer",target:"_blank",rel:"noopener noreferrer"},f={href:"https://github.com/panjjo/gosip",target:"_blank",rel:"noopener noreferrer"},k={href:"https://gitee.com/hfwudao/GB28181_Node_Http",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/tsingeye/FreeEhome",target:"_blank",rel:"noopener noreferrer"},v=e("p",null,"Client",-1),M={href:"https://github.com/malegend/ZLMediaKit.Autogen",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/hctym1995/ZLM_ApiDemo",target:"_blank",rel:"noopener noreferrer"},C={href:"https://github.com/chengxiaosheng/ZLMediaKit.HttpApi",target:"_blank",rel:"noopener noreferrer"},B={href:"https://github.com/MingZhuLiu/ZLMediaKit.DotNetCore.Sdk",target:"_blank",rel:"noopener noreferrer"},L=e("p",null,"Player",-1),G={href:"https://github.com/numberwolf/h265web.js",target:"_blank",rel:"noopener noreferrer"},S={href:"https://github.com/v354412101/wsPlayer",target:"_blank",rel:"noopener noreferrer"},Z={href:"https://github.com/metartc/metaRTC",target:"_blank",rel:"noopener noreferrer"},K={href:"https://github.com/any12345com/BXC_gb28181Player",target:"_blank",rel:"noopener noreferrer"};function N(x,j){const t=l("ExternalLinkIcon");return a(),i("div",null,[e("ul",null,[e("li",null,[h,e("ul",null,[e("li",null,[e("a",c,[r("The latest web project with front-end and back-end separation, supporting webrtc playback"),n(t)])]),e("li",null,[e("a",p,[r("Management web site based on ZLMediaKit master branch"),n(t)])]),e("li",null,[e("a",_,[r("Management web site based on ZLMediaKit branch"),n(t)])]),e("li",null,[e("a",u,[r("A very beautiful visual background management system"),n(t)])])])]),e("li",null,[m,e("ul",null,[e("li",null,[e("a",d,[r("GB28181 complete solution with web management website, supporting webrtc and h265 playback"),n(t)])]),e("li",null,[e("a",b,[r("Powerful media control and management interface platform, supporting GB28181"),n(t)])]),e("li",null,[e("a",g,[r("GB28181 server implemented in C++"),n(t)])]),e("li",null,[e("a",f,[r("GB28181 server implemented in Go"),n(t)])]),e("li",null,[e("a",k,[r("Node-js version of GB28181 platform"),n(t)])]),e("li",null,[e("a",w,[r("Hikvision ehome server implemented in Go"),n(t)])])])]),e("li",null,[v,e("ul",null,[e("li",null,[e("a",M,[r("Complete C# wrapper library for c sdk"),n(t)])]),e("li",null,[e("a",y,[r("Push client implemented based on C SDK"),n(t)])]),e("li",null,[e("a",C,[r("Http API and Hook in C#"),n(t)])]),e("li",null,[e("a",B,[r("RESTful client in DotNetCore"),n(t)])])])]),e("li",null,[L,e("ul",null,[e("li",null,[e("a",G,[r("Player supporting H265 based on wasm"),n(t)])]),e("li",null,[e("a",S,[r("WebSocket-fmp4 player based on MSE"),n(t)])]),e("li",null,[e("a",Z,[r("Domestic webrtc sdk(metaRTC)"),n(t)])]),e("li",null,[e("a",K,[r("GB28181 player implemented in C++"),n(t)])])])])])])}const E=o(s,[["render",N],["__file","collaborative_projects.html.vue"]]);export{E as default}; +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as a,c as i,a as e,d as r,b as n}from"./app-oTlYPy8h.js";const s={},h=e("p",null,"Visual management website",-1),c={href:"https://github.com/langmansh/AKStreamNVR",target:"_blank",rel:"noopener noreferrer"},p={href:"https://gitee.com/kkkkk5G/MediaServerUI",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/chenxiaolei/ZLMediaKit_NVR_UI",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/MingZhuLiu/ZLMediaServerManagent",target:"_blank",rel:"noopener noreferrer"},m=e("p",null,"Media management platform",-1),d={href:"https://github.com/648540858/wvp-GB28181-pro",target:"_blank",rel:"noopener noreferrer"},b={href:"https://github.com/chatop2020/AKStream",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/any12345com/BXC_SipServer",target:"_blank",rel:"noopener noreferrer"},f={href:"https://github.com/panjjo/gosip",target:"_blank",rel:"noopener noreferrer"},k={href:"https://gitee.com/hfwudao/GB28181_Node_Http",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/tsingeye/FreeEhome",target:"_blank",rel:"noopener noreferrer"},v=e("p",null,"Client",-1),M={href:"https://github.com/malegend/ZLMediaKit.Autogen",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/hctym1995/ZLM_ApiDemo",target:"_blank",rel:"noopener noreferrer"},C={href:"https://github.com/chengxiaosheng/ZLMediaKit.HttpApi",target:"_blank",rel:"noopener noreferrer"},B={href:"https://github.com/MingZhuLiu/ZLMediaKit.DotNetCore.Sdk",target:"_blank",rel:"noopener noreferrer"},L=e("p",null,"Player",-1),G={href:"https://github.com/numberwolf/h265web.js",target:"_blank",rel:"noopener noreferrer"},S={href:"https://github.com/v354412101/wsPlayer",target:"_blank",rel:"noopener noreferrer"},Z={href:"https://github.com/metartc/metaRTC",target:"_blank",rel:"noopener noreferrer"},K={href:"https://github.com/any12345com/BXC_gb28181Player",target:"_blank",rel:"noopener noreferrer"};function N(x,j){const t=l("ExternalLinkIcon");return a(),i("div",null,[e("ul",null,[e("li",null,[h,e("ul",null,[e("li",null,[e("a",c,[r("The latest web project with front-end and back-end separation, supporting webrtc playback"),n(t)])]),e("li",null,[e("a",p,[r("Management web site based on ZLMediaKit master branch"),n(t)])]),e("li",null,[e("a",_,[r("Management web site based on ZLMediaKit branch"),n(t)])]),e("li",null,[e("a",u,[r("A very beautiful visual background management system"),n(t)])])])]),e("li",null,[m,e("ul",null,[e("li",null,[e("a",d,[r("GB28181 complete solution with web management website, supporting webrtc and h265 playback"),n(t)])]),e("li",null,[e("a",b,[r("Powerful media control and management interface platform, supporting GB28181"),n(t)])]),e("li",null,[e("a",g,[r("GB28181 server implemented in C++"),n(t)])]),e("li",null,[e("a",f,[r("GB28181 server implemented in Go"),n(t)])]),e("li",null,[e("a",k,[r("Node-js version of GB28181 platform"),n(t)])]),e("li",null,[e("a",w,[r("Hikvision ehome server implemented in Go"),n(t)])])])]),e("li",null,[v,e("ul",null,[e("li",null,[e("a",M,[r("Complete C# wrapper library for c sdk"),n(t)])]),e("li",null,[e("a",y,[r("Push client implemented based on C SDK"),n(t)])]),e("li",null,[e("a",C,[r("Http API and Hook in C#"),n(t)])]),e("li",null,[e("a",B,[r("RESTful client in DotNetCore"),n(t)])])])]),e("li",null,[L,e("ul",null,[e("li",null,[e("a",G,[r("Player supporting H265 based on wasm"),n(t)])]),e("li",null,[e("a",S,[r("WebSocket-fmp4 player based on MSE"),n(t)])]),e("li",null,[e("a",Z,[r("Domestic webrtc sdk(metaRTC)"),n(t)])]),e("li",null,[e("a",K,[r("GB28181 player implemented in C++"),n(t)])])])])])])}const E=o(s,[["render",N],["__file","collaborative_projects.html.vue"]]);export{E as default}; diff --git a/assets/compilation_instructions_for_windows_version.html-B01AYnQQ.js b/assets/compilation_instructions_for_windows_version.html-coo8ZcK6.js similarity index 98% rename from assets/compilation_instructions_for_windows_version.html-B01AYnQQ.js rename to assets/compilation_instructions_for_windows_version.html-coo8ZcK6.js index 0431451..c84aea3 100644 --- a/assets/compilation_instructions_for_windows_version.html-B01AYnQQ.js +++ b/assets/compilation_instructions_for_windows_version.html-coo8ZcK6.js @@ -1,4 +1,4 @@ -import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as d,c as t,a as n,d as e,b as a,e as o}from"./app-BrxqtzGY.js";const c={},r=n("h1",{id:"building-instructions-for-windows",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#building-instructions-for-windows","aria-hidden":"true"},"#"),e(" Building Instructions for Windows")],-1),p=n("code",null,"ZLMediaKit",-1),u={href:"https://github.com/lukesampson/scoop",target:"_blank",rel:"noopener noreferrer"},v={href:"https://github.com/microsoft/vcpkg",target:"_blank",rel:"noopener noreferrer"},m=o(`
  • scoop: A package installation manager for Windows command-line.
  • vcpkg: A C++ library manager initiated by Microsoft, which includes many commonly used open-source libraries.

Since these tools can be used from the command line, they enable convenient automation and integration. We recommend giving them a try.

Please note that the following steps have only been tested on Windows 10 and may not work on other Windows versions.

Unless specified otherwise, all operations should be performed in PowerShell command line.

Installing Build Dependencies using scoop and vcpkg

Download and Install scoop, and use scoop to install dependency tools

The following steps are for installing the dependency tools cmake and ninja (optional but recommended) using scoop. If you already have them installed, you can skip these steps.

For detailed instructions, please refer to the official scoop documentation. Below are the summarized steps:

  1. Set the environment variable SCOOP to configure the download and installation directory for scoop (including the managed software packages). Run the following command:

    $env:SCOOP = 'C:\\work\\develop\\scoop'
    +import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as d,c as t,a as n,d as e,b as a,e as o}from"./app-oTlYPy8h.js";const c={},r=n("h1",{id:"building-instructions-for-windows",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#building-instructions-for-windows","aria-hidden":"true"},"#"),e(" Building Instructions for Windows")],-1),p=n("code",null,"ZLMediaKit",-1),u={href:"https://github.com/lukesampson/scoop",target:"_blank",rel:"noopener noreferrer"},v={href:"https://github.com/microsoft/vcpkg",target:"_blank",rel:"noopener noreferrer"},m=o(`
    • scoop: A package installation manager for Windows command-line.
    • vcpkg: A C++ library manager initiated by Microsoft, which includes many commonly used open-source libraries.

    Since these tools can be used from the command line, they enable convenient automation and integration. We recommend giving them a try.

    Please note that the following steps have only been tested on Windows 10 and may not work on other Windows versions.

    Unless specified otherwise, all operations should be performed in PowerShell command line.

    Installing Build Dependencies using scoop and vcpkg

    Download and Install scoop, and use scoop to install dependency tools

    The following steps are for installing the dependency tools cmake and ninja (optional but recommended) using scoop. If you already have them installed, you can skip these steps.

    For detailed instructions, please refer to the official scoop documentation. Below are the summarized steps:

    1. Set the environment variable SCOOP to configure the download and installation directory for scoop (including the managed software packages). Run the following command:

      $env:SCOOP = 'C:\\work\\develop\\scoop'
       
    2. Allow the execution of PowerShell scripts for the current user by running the following command:

      Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
       
    3. Install scoop by running the following command:

      iwr -useb get.scoop.sh | iex
       
    4. Add the extras software repository to scoop by running the following command:

      scoop bucket add extras
      diff --git a/assets/compilation_instructions_for_windows_version.html-qtHU9-nX.js b/assets/compilation_instructions_for_windows_version.html-d1DmfQc5.js
      similarity index 98%
      rename from assets/compilation_instructions_for_windows_version.html-qtHU9-nX.js
      rename to assets/compilation_instructions_for_windows_version.html-d1DmfQc5.js
      index 7aee095..69170c0 100644
      --- a/assets/compilation_instructions_for_windows_version.html-qtHU9-nX.js
      +++ b/assets/compilation_instructions_for_windows_version.html-d1DmfQc5.js
      @@ -1,4 +1,4 @@
      -import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as c,o as l,c as d,a as s,d as e,b as n,e as o}from"./app-BrxqtzGY.js";const t={},p=s("h1",{id:"基于-scoop-vcpkg-的-windows-版编译说明",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#基于-scoop-vcpkg-的-windows-版编译说明","aria-hidden":"true"},"#"),e(" 基于 scoop + vcpkg 的 Windows 版编译说明")],-1),r={href:"https://github.com/lukesampson/scoop",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/microsoft/vcpkg",target:"_blank",rel:"noopener noreferrer"},v=s("code",null,"ZLMediaKit",-1),b=o(`
      • scoop: Windows 命令行下使用的软件包安装管理工具;
      • vcpkg: 微软发起的 C++ 库管理器, 其中有大量常用开源库;

      由于可以在命令行下使用, 可以非常方便的进行自动化集成. 推荐大家试用.

      以下步骤仅在 Windows 10 下测试, 未使用其他 Windows 版本进行测试, 不保证其他 Windows 版本的可用性.

      以下所有操作如无特殊说明均需在 PowerShell 命令行下进行.

      基于 scoop 及 vcpkg 安装编译依赖

      下载安装 scoop 并使用 scoop 安装依赖工具

      以下是为了安装依赖工具 cmakeninja(可选, 但建议安装), 如已安装, 可跳过.

      具体可参考其官网说明, 以下仅列出相关简要步骤.

      1. 设置环境变量 SCOOP, 用于配置 scoop 的下载安装目录(包括其管理的软件包):

        $env:SCOOP = 'C:\\work\\develop\\scoop'
        +import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as c,o as l,c as d,a as s,d as e,b as n,e as o}from"./app-oTlYPy8h.js";const t={},p=s("h1",{id:"基于-scoop-vcpkg-的-windows-版编译说明",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#基于-scoop-vcpkg-的-windows-版编译说明","aria-hidden":"true"},"#"),e(" 基于 scoop + vcpkg 的 Windows 版编译说明")],-1),r={href:"https://github.com/lukesampson/scoop",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/microsoft/vcpkg",target:"_blank",rel:"noopener noreferrer"},v=s("code",null,"ZLMediaKit",-1),b=o(`
        • scoop: Windows 命令行下使用的软件包安装管理工具;
        • vcpkg: 微软发起的 C++ 库管理器, 其中有大量常用开源库;

        由于可以在命令行下使用, 可以非常方便的进行自动化集成. 推荐大家试用.

        以下步骤仅在 Windows 10 下测试, 未使用其他 Windows 版本进行测试, 不保证其他 Windows 版本的可用性.

        以下所有操作如无特殊说明均需在 PowerShell 命令行下进行.

        基于 scoop 及 vcpkg 安装编译依赖

        下载安装 scoop 并使用 scoop 安装依赖工具

        以下是为了安装依赖工具 cmakeninja(可选, 但建议安装), 如已安装, 可跳过.

        具体可参考其官网说明, 以下仅列出相关简要步骤.

        1. 设置环境变量 SCOOP, 用于配置 scoop 的下载安装目录(包括其管理的软件包):

          $env:SCOOP = 'C:\\work\\develop\\scoop'
           
        2. 为当前用户设置允许执行 powershell 脚本:

          Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
           
        3. 安装 scoop:

          iwr -useb get.scoop.sh | iex
           
        4. scoop 添加 extras 软件仓库:

          scoop bucket add extras
          diff --git a/assets/config_file.html-nDM3m-gp.js b/assets/config_file.html-54NJpUMh.js
          similarity index 99%
          rename from assets/config_file.html-nDM3m-gp.js
          rename to assets/config_file.html-54NJpUMh.js
          index 420cb66..4a74066 100644
          --- a/assets/config_file.html-nDM3m-gp.js
          +++ b/assets/config_file.html-54NJpUMh.js
          @@ -1,4 +1,4 @@
          -import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as t,c as i,a as l,d as n,b as o,w as c,e as p}from"./app-BrxqtzGY.js";const r={},m=p(`
          #!!!! This configuration file is an example configuration file intended to inform the reader about the specific meanings and functions of each configuration item.
          +import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as t,c as i,a as l,d as n,b as o,w as c,e as p}from"./app-oTlYPy8h.js";const r={},m=p(`
          #!!!! This configuration file is an example configuration file intended to inform the reader about the specific meanings and functions of each configuration item.
           #!!!! When executing cmake, this configuration file will be copied to the release/\${operating_system_type}/\${build_type} (e.g., release/linux/Debug) folder.
           #!!!! This folder (release/\${operating_system_type}/\${build_type}) is also the target path for generating executable programs. When executing the MediaServer process, it will default to load the config.ini file in the same directory as the configuration file.
           #!!!! If you modify this example configuration file (conf/config.ini), it will not be loaded by the MediaServer process because the MediaServer process defaults to loading release/\${operating_system_type}/\${build_type}/config.ini.
          diff --git a/assets/config_file.html-sJf41F3S.js b/assets/config_file.html-v84_YU9d.js
          similarity index 81%
          rename from assets/config_file.html-sJf41F3S.js
          rename to assets/config_file.html-v84_YU9d.js
          index 7b1b495..89a6424 100644
          --- a/assets/config_file.html-sJf41F3S.js
          +++ b/assets/config_file.html-v84_YU9d.js
          @@ -1 +1 @@
          -import{_ as c}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as i,c as _,a as o,d as e,b as n,w as l}from"./app-BrxqtzGY.js";const s={},f={href:"https://github.com/zlmediakit/ZLMediaKit/blob/master/conf/config.ini",target:"_blank",rel:"noopener noreferrer"};function m(d,p){const r=t("ExternalLinkIcon"),a=t("RouterLink");return i(),_("div",null,[o("p",null,[o("a",f,[e("配置文件范例以及注释"),n(r)])]),o("p",null,[e("也可以参考"),n(a,{to:"/zh/guide/media_server/web_hook_api.html"},{default:l(()=>[e("MediaServer 支持的 HTTP-HOOK-API")]),_:1}),e("了解 hook 相关的配置")])])}const k=c(s,[["render",m],["__file","config_file.html.vue"]]);export{k as default};
          +import{_ as c}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as i,c as _,a as o,d as e,b as n,w as l}from"./app-oTlYPy8h.js";const s={},f={href:"https://github.com/zlmediakit/ZLMediaKit/blob/master/conf/config.ini",target:"_blank",rel:"noopener noreferrer"};function m(d,p){const r=t("ExternalLinkIcon"),a=t("RouterLink");return i(),_("div",null,[o("p",null,[o("a",f,[e("配置文件范例以及注释"),n(r)])]),o("p",null,[e("也可以参考"),n(a,{to:"/zh/guide/media_server/web_hook_api.html"},{default:l(()=>[e("MediaServer 支持的 HTTP-HOOK-API")]),_:1}),e("了解 hook 相关的配置")])])}const k=c(s,[["render",m],["__file","config_file.html.vue"]]);export{k as default};
          diff --git a/assets/contact.html-inPGOeaD.js b/assets/contact.html-JAOAqjBA.js
          similarity index 94%
          rename from assets/contact.html-inPGOeaD.js
          rename to assets/contact.html-JAOAqjBA.js
          index 8eba05c..200e983 100644
          --- a/assets/contact.html-inPGOeaD.js
          +++ b/assets/contact.html-JAOAqjBA.js
          @@ -1 +1 @@
          -import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as e,c as i,e as a}from"./app-BrxqtzGY.js";const c={},o=a('

          联系信息

          • 邮箱:1213642868@qq.com(本项目相关或流媒体相关问题请走 issue 流程,否则恕不邮件答复)

          • 请关注微信公众号获取最新消息推送:

            图片
            图片
          • 也可以自愿有偿加入知识星球咨询和获取资料:

            图片
            图片
          ',2),n=[o];function r(s,l){return e(),i("div",null,n)}const p=t(c,[["render",r],["__file","contact.html.vue"]]);export{p as default}; +import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as e,c as i,e as a}from"./app-oTlYPy8h.js";const c={},o=a('

          联系信息

          • 邮箱:1213642868@qq.com(本项目相关或流媒体相关问题请走 issue 流程,否则恕不邮件答复)

          • 请关注微信公众号获取最新消息推送:

            图片
            图片
          • 也可以自愿有偿加入知识星球咨询和获取资料:

            图片
            图片
          ',2),n=[o];function r(s,l){return e(),i("div",null,n)}const p=t(c,[["render",r],["__file","contact.html.vue"]]);export{p as default}; diff --git a/assets/contact.html-F5mmsRL_.js b/assets/contact.html-xnD8I3Nc.js similarity index 95% rename from assets/contact.html-F5mmsRL_.js rename to assets/contact.html-xnD8I3Nc.js index ac97638..521ac0d 100644 --- a/assets/contact.html-F5mmsRL_.js +++ b/assets/contact.html-xnD8I3Nc.js @@ -1 +1 @@ -import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as l,c as r,a as e,d as t,b as i}from"./app-BrxqtzGY.js";const s={},c=e("h2",{id:"contact-information",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contact-information","aria-hidden":"true"},"#"),t(" Contact Information")],-1),u=e("li",null,[e("p",null,[t("Email: "),e("a",{href:"mailto:1213642868@qq.com"},"1213642868@qq.com"),t(" (For project-related or streaming media-related questions, please follow the issue process. Otherwise, we will not reply to emails.)")])],-1),d={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/2364",target:"_blank",rel:"noopener noreferrer"},h=e("li",null,[e("p",null,"Follow WeChat Official Account:"),e("figure",null,[e("img",{src:"https://user-images.githubusercontent.com/11495632/232451702-4c50bc72-84d8-4c94-af2b-57290088ba7a.png",alt:"图片",width:"200",tabindex:"0",loading:"lazy"}),e("figcaption",null,"图片")])],-1);function m(p,f){const o=a("ExternalLinkIcon");return l(),r("div",null,[c,e("ul",null,[u,e("li",null,[e("p",null,[t("QQ groups: Both QQ groups with a total of 4000 members are full. We will not create new QQ groups in the future. Users can join the "),e("a",d,[t("Knowledge Planet"),i(o)]),t(" to ask questions and support this project.")])]),h])])}const b=n(s,[["render",m],["__file","contact.html.vue"]]);export{b as default}; +import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as l,c as r,a as e,d as t,b as i}from"./app-oTlYPy8h.js";const s={},c=e("h2",{id:"contact-information",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contact-information","aria-hidden":"true"},"#"),t(" Contact Information")],-1),u=e("li",null,[e("p",null,[t("Email: "),e("a",{href:"mailto:1213642868@qq.com"},"1213642868@qq.com"),t(" (For project-related or streaming media-related questions, please follow the issue process. Otherwise, we will not reply to emails.)")])],-1),d={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/2364",target:"_blank",rel:"noopener noreferrer"},h=e("li",null,[e("p",null,"Follow WeChat Official Account:"),e("figure",null,[e("img",{src:"https://user-images.githubusercontent.com/11495632/232451702-4c50bc72-84d8-4c94-af2b-57290088ba7a.png",alt:"图片",width:"200",tabindex:"0",loading:"lazy"}),e("figcaption",null,"图片")])],-1);function m(p,f){const o=a("ExternalLinkIcon");return l(),r("div",null,[c,e("ul",null,[u,e("li",null,[e("p",null,[t("QQ groups: Both QQ groups with a total of 4000 members are full. We will not create new QQ groups in the future. Users can join the "),e("a",d,[t("Knowledge Planet"),i(o)]),t(" to ask questions and support this project.")])]),h])])}const b=n(s,[["render",m],["__file","contact.html.vue"]]);export{b as default}; diff --git a/assets/createText-aebacdfe-JILF3Vy1.js b/assets/createText-aebacdfe-8FzA6VnR.js similarity index 99% rename from assets/createText-aebacdfe-JILF3Vy1.js rename to assets/createText-aebacdfe-8FzA6VnR.js index 0d12bf6..1c48f5d 100644 --- a/assets/createText-aebacdfe-JILF3Vy1.js +++ b/assets/createText-aebacdfe-8FzA6VnR.js @@ -1,4 +1,4 @@ -import{l as At,an as zt,ap as It}from"./mermaid.core-zy7cM8l9.js";const Tt={};function Bt(n,r){const t=r||Tt,e=typeof t.includeImageAlt=="boolean"?t.includeImageAlt:!0,u=typeof t.includeHtml=="boolean"?t.includeHtml:!0;return et(n,e,u)}function et(n,r,t){if(Lt(n)){if("value"in n)return n.type==="html"&&!t?"":n.value;if(r&&"alt"in n&&n.alt)return n.alt;if("children"in n)return Vn(n.children,r,t)}return Array.isArray(n)?Vn(n,r,t):""}function Vn(n,r,t){const e=[];let u=-1;for(;++uu?0:u+r:r=r>u?u:r,t=t>0?t:0,e.length<1e4)l=Array.from(e),l.unshift(r,t),n.splice(...l);else for(t&&n.splice(r,t);i0?(tn(n,n.length,0,r),n):r}const Wn={}.hasOwnProperty;function Ot(n){const r={};let t=-1;for(;++tl))return;const T=r.events.length;let H=T,N,V;for(;H--;)if(r.events[H][0]==="exit"&&r.events[H][1].type==="chunkFlow"){if(N){V=r.events[H][1].end;break}N=!0}for(b(e),k=T;kF;){const _=t[D];r.containerState=_[1],_[0].exit.call(r,n)}t.length=F}function j(){u.write([null]),i=void 0,u=void 0,r.containerState._closeFlow=void 0}}function Ut(n,r,t){return O(n,n.attempt(this.parser.constructs.document,r,t),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Un(n){if(n===null||Z(n)||Ht(n))return 1;if(qt(n))return 2}function Ln(n,r,t){const e=[];let u=-1;for(;++u1&&n[t][1].end.offset-n[t][1].start.offset>1?2:1;const f=Object.assign({},n[e][1].end),x=Object.assign({},n[t][1].start);$n(f,-m),$n(x,m),l={type:m>1?"strongSequence":"emphasisSequence",start:f,end:Object.assign({},n[e][1].end)},a={type:m>1?"strongSequence":"emphasisSequence",start:Object.assign({},n[t][1].start),end:x},i={type:m>1?"strongText":"emphasisText",start:Object.assign({},n[e][1].end),end:Object.assign({},n[t][1].start)},u={type:m>1?"strong":"emphasis",start:Object.assign({},l.start),end:Object.assign({},a.end)},n[e][1].end=Object.assign({},l.start),n[t][1].start=Object.assign({},a.end),c=[],n[e][1].end.offset-n[e][1].start.offset&&(c=Y(c,[["enter",n[e][1],r],["exit",n[e][1],r]])),c=Y(c,[["enter",u,r],["enter",l,r],["exit",l,r],["enter",i,r]]),c=Y(c,Ln(r.parser.constructs.insideSpan.null,n.slice(e+1,t),r)),c=Y(c,[["exit",i,r],["enter",a,r],["exit",a,r],["exit",u,r]]),n[t][1].end.offset-n[t][1].start.offset?(p=2,c=Y(c,[["enter",n[t][1],r],["exit",n[t][1],r]])):p=0,tn(n,e-1,t-e+3,c),t=e+c.length-p-2;break}}for(t=-1;++t0&&z(k)?O(n,j,"linePrefix",i+1)(k):j(k)}function j(k){return k===null||C(k)?n.check(Yn,I,D)(k):(n.enter("codeFlowValue"),F(k))}function F(k){return k===null||C(k)?(n.exit("codeFlowValue"),j(k)):(n.consume(k),F)}function D(k){return n.exit("codeFenced"),r(k)}function _(k,T,H){let N=0;return V;function V(w){return k.enter("lineEnding"),k.consume(w),k.exit("lineEnding"),y}function y(w){return k.enter("codeFencedFence"),z(w)?O(k,S,"linePrefix",e.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(w):S(w)}function S(w){return w===a?(k.enter("codeFencedFenceSequence"),P(w)):H(w)}function P(w){return w===a?(N++,k.consume(w),P):N>=l?(k.exit("codeFencedFenceSequence"),z(w)?O(k,R,"whitespace")(w):R(w)):H(w)}function R(w){return w===null||C(w)?(k.exit("codeFencedFence"),T(w)):H(w)}}}function re(n,r,t){const e=this;return u;function u(l){return l===null?t(l):(n.enter("lineEnding"),n.consume(l),n.exit("lineEnding"),i)}function i(l){return e.parser.lazy[e.now().line]?t(l):r(l)}}const Cn={name:"codeIndented",tokenize:ue},ie={tokenize:le,partial:!0};function ue(n,r,t){const e=this;return u;function u(c){return n.enter("codeIndented"),O(n,i,"linePrefix",5)(c)}function i(c){const p=e.events[e.events.length-1];return p&&p[1].type==="linePrefix"&&p[2].sliceSerialize(p[1],!0).length>=4?l(c):t(c)}function l(c){return c===null?m(c):C(c)?n.attempt(ie,l,m)(c):(n.enter("codeFlowValue"),a(c))}function a(c){return c===null||C(c)?(n.exit("codeFlowValue"),l(c)):(n.consume(c),a)}function m(c){return n.exit("codeIndented"),r(c)}}function le(n,r,t){const e=this;return u;function u(l){return e.parser.lazy[e.now().line]?t(l):C(l)?(n.enter("lineEnding"),n.consume(l),n.exit("lineEnding"),u):O(n,i,"linePrefix",5)(l)}function i(l){const a=e.events[e.events.length-1];return a&&a[1].type==="linePrefix"&&a[2].sliceSerialize(a[1],!0).length>=4?r(l):C(l)?u(l):t(l)}}const ae={name:"codeText",tokenize:ce,resolve:oe,previous:se};function oe(n){let r=n.length-4,t=3,e,u;if((n[t][1].type==="lineEnding"||n[t][1].type==="space")&&(n[r][1].type==="lineEnding"||n[r][1].type==="space")){for(e=t;++e=4?r(l):n.interrupt(e.parser.constructs.flow,t,r)(l)}}function at(n,r,t,e,u,i,l,a,m){const c=m||Number.POSITIVE_INFINITY;let p=0;return f;function f(b){return b===60?(n.enter(e),n.enter(u),n.enter(i),n.consume(b),n.exit(i),x):b===null||b===32||b===41||An(b)?t(b):(n.enter(e),n.enter(l),n.enter(a),n.enter("chunkString",{contentType:"string"}),I(b))}function x(b){return b===62?(n.enter(i),n.consume(b),n.exit(i),n.exit(u),n.exit(e),r):(n.enter(a),n.enter("chunkString",{contentType:"string"}),h(b))}function h(b){return b===62?(n.exit("chunkString"),n.exit(a),x(b)):b===null||b===60||C(b)?t(b):(n.consume(b),b===92?A:h)}function A(b){return b===60||b===62||b===92?(n.consume(b),h):h(b)}function I(b){return!p&&(b===null||b===41||Z(b))?(n.exit("chunkString"),n.exit(a),n.exit(l),n.exit(e),r(b)):p999||h===null||h===91||h===93&&!m||h===94&&!a&&"_hiddenFootnoteSupport"in l.parser.constructs?t(h):h===93?(n.exit(i),n.enter(u),n.consume(h),n.exit(u),n.exit(e),r):C(h)?(n.enter("lineEnding"),n.consume(h),n.exit("lineEnding"),p):(n.enter("chunkString",{contentType:"string"}),f(h))}function f(h){return h===null||h===91||h===93||C(h)||a++>999?(n.exit("chunkString"),p(h)):(n.consume(h),m||(m=!z(h)),h===92?x:f)}function x(h){return h===91||h===92||h===93?(n.consume(h),a++,f):f(h)}}function st(n,r,t,e,u,i){let l;return a;function a(x){return x===34||x===39||x===40?(n.enter(e),n.enter(u),n.consume(x),n.exit(u),l=x===40?41:x,m):t(x)}function m(x){return x===l?(n.enter(u),n.consume(x),n.exit(u),n.exit(e),r):(n.enter(i),c(x))}function c(x){return x===l?(n.exit(i),m(l)):x===null?t(x):C(x)?(n.enter("lineEnding"),n.consume(x),n.exit("lineEnding"),O(n,c,"linePrefix")):(n.enter("chunkString",{contentType:"string"}),p(x))}function p(x){return x===l||x===null||C(x)?(n.exit("chunkString"),c(x)):(n.consume(x),x===92?f:p)}function f(x){return x===l||x===92?(n.consume(x),p):p(x)}}function dn(n,r){let t;return e;function e(u){return C(u)?(n.enter("lineEnding"),n.consume(u),n.exit("lineEnding"),t=!0,e):z(u)?O(n,e,t?"linePrefix":"lineSuffix")(u):r(u)}}function xn(n){return n.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const ke={name:"definition",tokenize:be},de={tokenize:ye,partial:!0};function be(n,r,t){const e=this;let u;return i;function i(h){return n.enter("definition"),l(h)}function l(h){return ot.call(e,n,a,t,"definitionLabel","definitionLabelMarker","definitionLabelString")(h)}function a(h){return u=xn(e.sliceSerialize(e.events[e.events.length-1][1]).slice(1,-1)),h===58?(n.enter("definitionMarker"),n.consume(h),n.exit("definitionMarker"),m):t(h)}function m(h){return Z(h)?dn(n,c)(h):c(h)}function c(h){return at(n,p,t,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(h)}function p(h){return n.attempt(de,f,f)(h)}function f(h){return z(h)?O(n,x,"whitespace")(h):x(h)}function x(h){return h===null||C(h)?(n.exit("definition"),e.parser.defined.push(u),r(h)):t(h)}}function ye(n,r,t){return e;function e(a){return Z(a)?dn(n,u)(a):t(a)}function u(a){return st(n,i,t,"definitionTitle","definitionTitleMarker","definitionTitleString")(a)}function i(a){return z(a)?O(n,l,"whitespace")(a):l(a)}function l(a){return a===null||C(a)?r(a):t(a)}}const Se={name:"hardBreakEscape",tokenize:Fe};function Fe(n,r,t){return e;function e(i){return n.enter("hardBreakEscape"),n.consume(i),u}function u(i){return C(i)?(n.exit("hardBreakEscape"),r(i)):t(i)}}const Ee={name:"headingAtx",tokenize:we,resolve:Ce};function Ce(n,r){let t=n.length-2,e=3,u,i;return n[e][1].type==="whitespace"&&(e+=2),t-2>e&&n[t][1].type==="whitespace"&&(t-=2),n[t][1].type==="atxHeadingSequence"&&(e===t-1||t-4>e&&n[t-2][1].type==="whitespace")&&(t-=e+1===t?2:4),t>e&&(u={type:"atxHeadingText",start:n[e][1].start,end:n[t][1].end},i={type:"chunkText",start:n[e][1].start,end:n[t][1].end,contentType:"text"},tn(n,e,t-e+1,[["enter",u,r],["enter",i,r],["exit",i,r],["exit",u,r]])),n}function we(n,r,t){let e=0;return u;function u(p){return n.enter("atxHeading"),i(p)}function i(p){return n.enter("atxHeadingSequence"),l(p)}function l(p){return p===35&&e++<6?(n.consume(p),l):p===null||Z(p)?(n.exit("atxHeadingSequence"),a(p)):t(p)}function a(p){return p===35?(n.enter("atxHeadingSequence"),m(p)):p===null||C(p)?(n.exit("atxHeading"),r(p)):z(p)?O(n,a,"whitespace")(p):(n.enter("atxHeadingText"),c(p))}function m(p){return p===35?(n.consume(p),m):(n.exit("atxHeadingSequence"),a(p))}function c(p){return p===null||p===35||Z(p)?(n.exit("atxHeadingText"),a(p)):(n.consume(p),c)}}const Ae=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],Jn=["pre","script","style","textarea"],ze={name:"htmlFlow",tokenize:Le,resolveTo:Be,concrete:!0},Ie={tokenize:De,partial:!0},Te={tokenize:Oe,partial:!0};function Be(n){let r=n.length;for(;r--&&!(n[r][0]==="enter"&&n[r][1].type==="htmlFlow"););return r>1&&n[r-2][1].type==="linePrefix"&&(n[r][1].start=n[r-2][1].start,n[r+1][1].start=n[r-2][1].start,n.splice(r-2,2)),n}function Le(n,r,t){const e=this;let u,i,l,a,m;return c;function c(s){return p(s)}function p(s){return n.enter("htmlFlow"),n.enter("htmlFlowData"),n.consume(s),f}function f(s){return s===33?(n.consume(s),x):s===47?(n.consume(s),i=!0,I):s===63?(n.consume(s),u=3,e.interrupt?r:o):nn(s)?(n.consume(s),l=String.fromCharCode(s),M):t(s)}function x(s){return s===45?(n.consume(s),u=2,h):s===91?(n.consume(s),u=5,a=0,A):nn(s)?(n.consume(s),u=4,e.interrupt?r:o):t(s)}function h(s){return s===45?(n.consume(s),e.interrupt?r:o):t(s)}function A(s){const K="CDATA[";return s===K.charCodeAt(a++)?(n.consume(s),a===K.length?e.interrupt?r:S:A):t(s)}function I(s){return nn(s)?(n.consume(s),l=String.fromCharCode(s),M):t(s)}function M(s){if(s===null||s===47||s===62||Z(s)){const K=s===47,hn=l.toLowerCase();return!K&&!i&&Jn.includes(hn)?(u=1,e.interrupt?r(s):S(s)):Ae.includes(l.toLowerCase())?(u=6,K?(n.consume(s),b):e.interrupt?r(s):S(s)):(u=7,e.interrupt&&!e.parser.lazy[e.now().line]?t(s):i?j(s):F(s))}return s===45||v(s)?(n.consume(s),l+=String.fromCharCode(s),M):t(s)}function b(s){return s===62?(n.consume(s),e.interrupt?r:S):t(s)}function j(s){return z(s)?(n.consume(s),j):V(s)}function F(s){return s===47?(n.consume(s),V):s===58||s===95||nn(s)?(n.consume(s),D):z(s)?(n.consume(s),F):V(s)}function D(s){return s===45||s===46||s===58||s===95||v(s)?(n.consume(s),D):_(s)}function _(s){return s===61?(n.consume(s),k):z(s)?(n.consume(s),_):F(s)}function k(s){return s===null||s===60||s===61||s===62||s===96?t(s):s===34||s===39?(n.consume(s),m=s,T):z(s)?(n.consume(s),k):H(s)}function T(s){return s===m?(n.consume(s),m=null,N):s===null||C(s)?t(s):(n.consume(s),T)}function H(s){return s===null||s===34||s===39||s===47||s===60||s===61||s===62||s===96||Z(s)?_(s):(n.consume(s),H)}function N(s){return s===47||s===62||z(s)?F(s):t(s)}function V(s){return s===62?(n.consume(s),y):t(s)}function y(s){return s===null||C(s)?S(s):z(s)?(n.consume(s),y):t(s)}function S(s){return s===45&&u===2?(n.consume(s),U):s===60&&u===1?(n.consume(s),W):s===62&&u===4?(n.consume(s),J):s===63&&u===3?(n.consume(s),o):s===93&&u===5?(n.consume(s),en):C(s)&&(u===6||u===7)?(n.exit("htmlFlowData"),n.check(Ie,rn,P)(s)):s===null||C(s)?(n.exit("htmlFlowData"),P(s)):(n.consume(s),S)}function P(s){return n.check(Te,R,rn)(s)}function R(s){return n.enter("lineEnding"),n.consume(s),n.exit("lineEnding"),w}function w(s){return s===null||C(s)?P(s):(n.enter("htmlFlowData"),S(s))}function U(s){return s===45?(n.consume(s),o):S(s)}function W(s){return s===47?(n.consume(s),l="",G):S(s)}function G(s){if(s===62){const K=l.toLowerCase();return Jn.includes(K)?(n.consume(s),J):S(s)}return nn(s)&&l.length<8?(n.consume(s),l+=String.fromCharCode(s),G):S(s)}function en(s){return s===93?(n.consume(s),o):S(s)}function o(s){return s===62?(n.consume(s),J):s===45&&u===2?(n.consume(s),o):S(s)}function J(s){return s===null||C(s)?(n.exit("htmlFlowData"),rn(s)):(n.consume(s),J)}function rn(s){return n.exit("htmlFlow"),r(s)}}function Oe(n,r,t){const e=this;return u;function u(l){return C(l)?(n.enter("lineEnding"),n.consume(l),n.exit("lineEnding"),i):t(l)}function i(l){return e.parser.lazy[e.now().line]?t(l):r(l)}}function De(n,r,t){return e;function e(u){return n.enter("lineEnding"),n.consume(u),n.exit("lineEnding"),n.attempt(Sn,r,t)}}const Pe={name:"htmlText",tokenize:_e};function _e(n,r,t){const e=this;let u,i,l;return a;function a(o){return n.enter("htmlText"),n.enter("htmlTextData"),n.consume(o),m}function m(o){return o===33?(n.consume(o),c):o===47?(n.consume(o),_):o===63?(n.consume(o),F):nn(o)?(n.consume(o),H):t(o)}function c(o){return o===45?(n.consume(o),p):o===91?(n.consume(o),i=0,A):nn(o)?(n.consume(o),j):t(o)}function p(o){return o===45?(n.consume(o),h):t(o)}function f(o){return o===null?t(o):o===45?(n.consume(o),x):C(o)?(l=f,W(o)):(n.consume(o),f)}function x(o){return o===45?(n.consume(o),h):f(o)}function h(o){return o===62?U(o):o===45?x(o):f(o)}function A(o){const J="CDATA[";return o===J.charCodeAt(i++)?(n.consume(o),i===J.length?I:A):t(o)}function I(o){return o===null?t(o):o===93?(n.consume(o),M):C(o)?(l=I,W(o)):(n.consume(o),I)}function M(o){return o===93?(n.consume(o),b):I(o)}function b(o){return o===62?U(o):o===93?(n.consume(o),b):I(o)}function j(o){return o===null||o===62?U(o):C(o)?(l=j,W(o)):(n.consume(o),j)}function F(o){return o===null?t(o):o===63?(n.consume(o),D):C(o)?(l=F,W(o)):(n.consume(o),F)}function D(o){return o===62?U(o):F(o)}function _(o){return nn(o)?(n.consume(o),k):t(o)}function k(o){return o===45||v(o)?(n.consume(o),k):T(o)}function T(o){return C(o)?(l=T,W(o)):z(o)?(n.consume(o),T):U(o)}function H(o){return o===45||v(o)?(n.consume(o),H):o===47||o===62||Z(o)?N(o):t(o)}function N(o){return o===47?(n.consume(o),U):o===58||o===95||nn(o)?(n.consume(o),V):C(o)?(l=N,W(o)):z(o)?(n.consume(o),N):U(o)}function V(o){return o===45||o===46||o===58||o===95||v(o)?(n.consume(o),V):y(o)}function y(o){return o===61?(n.consume(o),S):C(o)?(l=y,W(o)):z(o)?(n.consume(o),y):N(o)}function S(o){return o===null||o===60||o===61||o===62||o===96?t(o):o===34||o===39?(n.consume(o),u=o,P):C(o)?(l=S,W(o)):z(o)?(n.consume(o),S):(n.consume(o),R)}function P(o){return o===u?(n.consume(o),u=void 0,w):o===null?t(o):C(o)?(l=P,W(o)):(n.consume(o),P)}function R(o){return o===null||o===34||o===39||o===60||o===61||o===96?t(o):o===47||o===62||Z(o)?N(o):(n.consume(o),R)}function w(o){return o===47||o===62||Z(o)?N(o):t(o)}function U(o){return o===62?(n.consume(o),n.exit("htmlTextData"),n.exit("htmlText"),r):t(o)}function W(o){return n.exit("htmlTextData"),n.enter("lineEnding"),n.consume(o),n.exit("lineEnding"),G}function G(o){return z(o)?O(n,en,"linePrefix",e.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(o):en(o)}function en(o){return n.enter("htmlTextData"),l(o)}}const Dn={name:"labelEnd",tokenize:Ne,resolveTo:He,resolveAll:qe},Me={tokenize:Ve},je={tokenize:We},Re={tokenize:Qe};function qe(n){let r=-1;for(;++r=3&&(c===null||C(c))?(n.exit("thematicBreak"),r(c)):t(c)}function m(c){return c===u?(n.consume(c),e++,m):(n.exit("thematicBreakSequence"),z(c)?O(n,a,"whitespace")(c):a(c))}}const $={name:"list",tokenize:ve,continuation:{tokenize:nr},exit:er},Ke={tokenize:rr,partial:!0},Xe={tokenize:tr,partial:!0};function ve(n,r,t){const e=this,u=e.events[e.events.length-1];let i=u&&u[1].type==="linePrefix"?u[2].sliceSerialize(u[1],!0).length:0,l=0;return a;function a(h){const A=e.containerState.type||(h===42||h===43||h===45?"listUnordered":"listOrdered");if(A==="listUnordered"?!e.containerState.marker||h===e.containerState.marker:zn(h)){if(e.containerState.type||(e.containerState.type=A,n.enter(A,{_container:!0})),A==="listUnordered")return n.enter("listItemPrefix"),h===42||h===45?n.check(bn,t,c)(h):c(h);if(!e.interrupt||h===49)return n.enter("listItemPrefix"),n.enter("listItemValue"),m(h)}return t(h)}function m(h){return zn(h)&&++l<10?(n.consume(h),m):(!e.interrupt||l<2)&&(e.containerState.marker?h===e.containerState.marker:h===41||h===46)?(n.exit("listItemValue"),c(h)):t(h)}function c(h){return n.enter("listItemMarker"),n.consume(h),n.exit("listItemMarker"),e.containerState.marker=e.containerState.marker||h,n.check(Sn,e.interrupt?t:p,n.attempt(Ke,x,f))}function p(h){return e.containerState.initialBlankLine=!0,i++,x(h)}function f(h){return z(h)?(n.enter("listItemPrefixWhitespace"),n.consume(h),n.exit("listItemPrefixWhitespace"),x):t(h)}function x(h){return e.containerState.size=i+e.sliceSerialize(n.exit("listItemPrefix"),!0).length,r(h)}}function nr(n,r,t){const e=this;return e.containerState._closeFlow=void 0,n.check(Sn,u,i);function u(a){return e.containerState.furtherBlankLines=e.containerState.furtherBlankLines||e.containerState.initialBlankLine,O(n,r,"listItemIndent",e.containerState.size+1)(a)}function i(a){return e.containerState.furtherBlankLines||!z(a)?(e.containerState.furtherBlankLines=void 0,e.containerState.initialBlankLine=void 0,l(a)):(e.containerState.furtherBlankLines=void 0,e.containerState.initialBlankLine=void 0,n.attempt(Xe,r,l)(a))}function l(a){return e.containerState._closeFlow=!0,e.interrupt=void 0,O(n,n.attempt($,r,t),"linePrefix",e.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(a)}}function tr(n,r,t){const e=this;return O(n,u,"listItemIndent",e.containerState.size+1);function u(i){const l=e.events[e.events.length-1];return l&&l[1].type==="listItemIndent"&&l[2].sliceSerialize(l[1],!0).length===e.containerState.size?r(i):t(i)}}function er(n){n.exit(this.containerState.type)}function rr(n,r,t){const e=this;return O(n,u,"listItemPrefixWhitespace",e.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function u(i){const l=e.events[e.events.length-1];return!z(i)&&l&&l[1].type==="listItemPrefixWhitespace"?r(i):t(i)}}const Kn={name:"setextUnderline",tokenize:ur,resolveTo:ir};function ir(n,r){let t=n.length,e,u,i;for(;t--;)if(n[t][0]==="enter"){if(n[t][1].type==="content"){e=t;break}n[t][1].type==="paragraph"&&(u=t)}else n[t][1].type==="content"&&n.splice(t,1),!i&&n[t][1].type==="definition"&&(i=t);const l={type:"setextHeading",start:Object.assign({},n[u][1].start),end:Object.assign({},n[n.length-1][1].end)};return n[u][1].type="setextHeadingText",i?(n.splice(u,0,["enter",l,r]),n.splice(i+1,0,["exit",n[e][1],r]),n[e][1].end=Object.assign({},n[i][1].end)):n[e][1]=l,n.push(["exit",l,r]),n}function ur(n,r,t){const e=this;let u;return i;function i(c){let p=e.events.length,f;for(;p--;)if(e.events[p][1].type!=="lineEnding"&&e.events[p][1].type!=="linePrefix"&&e.events[p][1].type!=="content"){f=e.events[p][1].type==="paragraph";break}return!e.parser.lazy[e.now().line]&&(e.interrupt||f)?(n.enter("setextHeadingLine"),u=c,l(c)):t(c)}function l(c){return n.enter("setextHeadingLineSequence"),a(c)}function a(c){return c===u?(n.consume(c),a):(n.exit("setextHeadingLineSequence"),z(c)?O(n,m,"lineSuffix")(c):m(c))}function m(c){return c===null||C(c)?(n.exit("setextHeadingLine"),r(c)):t(c)}}const lr={tokenize:ar};function ar(n){const r=this,t=n.attempt(Sn,e,n.attempt(this.parser.constructs.flowInitial,u,O(n,n.attempt(this.parser.constructs.flow,u,n.attempt(pe,u)),"linePrefix")));return t;function e(i){if(i===null){n.consume(i);return}return n.enter("lineEndingBlank"),n.consume(i),n.exit("lineEndingBlank"),r.currentConstruct=void 0,t}function u(i){if(i===null){n.consume(i);return}return n.enter("lineEnding"),n.consume(i),n.exit("lineEnding"),r.currentConstruct=void 0,t}}const or={resolveAll:ht()},sr=ct("string"),cr=ct("text");function ct(n){return{tokenize:r,resolveAll:ht(n==="text"?hr:void 0)};function r(t){const e=this,u=this.parser.constructs[n],i=t.attempt(u,l,a);return l;function l(p){return c(p)?i(p):a(p)}function a(p){if(p===null){t.consume(p);return}return t.enter("data"),t.consume(p),m}function m(p){return c(p)?(t.exit("data"),i(p)):(t.consume(p),m)}function c(p){if(p===null)return!0;const f=u[p];let x=-1;if(f)for(;++x-1){const a=l[0];typeof a=="string"?l[0]=a.slice(e):l.shift()}i>0&&l.push(n[u].slice(0,i))}return l}function mr(n,r){let t=-1;const e=[];let u;for(;++tu?0:u+r:r=r>u?u:r,t=t>0?t:0,e.length<1e4)l=Array.from(e),l.unshift(r,t),n.splice(...l);else for(t&&n.splice(r,t);i0?(tn(n,n.length,0,r),n):r}const Wn={}.hasOwnProperty;function Ot(n){const r={};let t=-1;for(;++tl))return;const T=r.events.length;let H=T,N,V;for(;H--;)if(r.events[H][0]==="exit"&&r.events[H][1].type==="chunkFlow"){if(N){V=r.events[H][1].end;break}N=!0}for(b(e),k=T;kF;){const _=t[D];r.containerState=_[1],_[0].exit.call(r,n)}t.length=F}function j(){u.write([null]),i=void 0,u=void 0,r.containerState._closeFlow=void 0}}function Ut(n,r,t){return O(n,n.attempt(this.parser.constructs.document,r,t),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Un(n){if(n===null||Z(n)||Ht(n))return 1;if(qt(n))return 2}function Ln(n,r,t){const e=[];let u=-1;for(;++u1&&n[t][1].end.offset-n[t][1].start.offset>1?2:1;const f=Object.assign({},n[e][1].end),x=Object.assign({},n[t][1].start);$n(f,-m),$n(x,m),l={type:m>1?"strongSequence":"emphasisSequence",start:f,end:Object.assign({},n[e][1].end)},a={type:m>1?"strongSequence":"emphasisSequence",start:Object.assign({},n[t][1].start),end:x},i={type:m>1?"strongText":"emphasisText",start:Object.assign({},n[e][1].end),end:Object.assign({},n[t][1].start)},u={type:m>1?"strong":"emphasis",start:Object.assign({},l.start),end:Object.assign({},a.end)},n[e][1].end=Object.assign({},l.start),n[t][1].start=Object.assign({},a.end),c=[],n[e][1].end.offset-n[e][1].start.offset&&(c=Y(c,[["enter",n[e][1],r],["exit",n[e][1],r]])),c=Y(c,[["enter",u,r],["enter",l,r],["exit",l,r],["enter",i,r]]),c=Y(c,Ln(r.parser.constructs.insideSpan.null,n.slice(e+1,t),r)),c=Y(c,[["exit",i,r],["enter",a,r],["exit",a,r],["exit",u,r]]),n[t][1].end.offset-n[t][1].start.offset?(p=2,c=Y(c,[["enter",n[t][1],r],["exit",n[t][1],r]])):p=0,tn(n,e-1,t-e+3,c),t=e+c.length-p-2;break}}for(t=-1;++t0&&z(k)?O(n,j,"linePrefix",i+1)(k):j(k)}function j(k){return k===null||C(k)?n.check(Yn,I,D)(k):(n.enter("codeFlowValue"),F(k))}function F(k){return k===null||C(k)?(n.exit("codeFlowValue"),j(k)):(n.consume(k),F)}function D(k){return n.exit("codeFenced"),r(k)}function _(k,T,H){let N=0;return V;function V(w){return k.enter("lineEnding"),k.consume(w),k.exit("lineEnding"),y}function y(w){return k.enter("codeFencedFence"),z(w)?O(k,S,"linePrefix",e.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(w):S(w)}function S(w){return w===a?(k.enter("codeFencedFenceSequence"),P(w)):H(w)}function P(w){return w===a?(N++,k.consume(w),P):N>=l?(k.exit("codeFencedFenceSequence"),z(w)?O(k,R,"whitespace")(w):R(w)):H(w)}function R(w){return w===null||C(w)?(k.exit("codeFencedFence"),T(w)):H(w)}}}function re(n,r,t){const e=this;return u;function u(l){return l===null?t(l):(n.enter("lineEnding"),n.consume(l),n.exit("lineEnding"),i)}function i(l){return e.parser.lazy[e.now().line]?t(l):r(l)}}const Cn={name:"codeIndented",tokenize:ue},ie={tokenize:le,partial:!0};function ue(n,r,t){const e=this;return u;function u(c){return n.enter("codeIndented"),O(n,i,"linePrefix",5)(c)}function i(c){const p=e.events[e.events.length-1];return p&&p[1].type==="linePrefix"&&p[2].sliceSerialize(p[1],!0).length>=4?l(c):t(c)}function l(c){return c===null?m(c):C(c)?n.attempt(ie,l,m)(c):(n.enter("codeFlowValue"),a(c))}function a(c){return c===null||C(c)?(n.exit("codeFlowValue"),l(c)):(n.consume(c),a)}function m(c){return n.exit("codeIndented"),r(c)}}function le(n,r,t){const e=this;return u;function u(l){return e.parser.lazy[e.now().line]?t(l):C(l)?(n.enter("lineEnding"),n.consume(l),n.exit("lineEnding"),u):O(n,i,"linePrefix",5)(l)}function i(l){const a=e.events[e.events.length-1];return a&&a[1].type==="linePrefix"&&a[2].sliceSerialize(a[1],!0).length>=4?r(l):C(l)?u(l):t(l)}}const ae={name:"codeText",tokenize:ce,resolve:oe,previous:se};function oe(n){let r=n.length-4,t=3,e,u;if((n[t][1].type==="lineEnding"||n[t][1].type==="space")&&(n[r][1].type==="lineEnding"||n[r][1].type==="space")){for(e=t;++e=4?r(l):n.interrupt(e.parser.constructs.flow,t,r)(l)}}function at(n,r,t,e,u,i,l,a,m){const c=m||Number.POSITIVE_INFINITY;let p=0;return f;function f(b){return b===60?(n.enter(e),n.enter(u),n.enter(i),n.consume(b),n.exit(i),x):b===null||b===32||b===41||An(b)?t(b):(n.enter(e),n.enter(l),n.enter(a),n.enter("chunkString",{contentType:"string"}),I(b))}function x(b){return b===62?(n.enter(i),n.consume(b),n.exit(i),n.exit(u),n.exit(e),r):(n.enter(a),n.enter("chunkString",{contentType:"string"}),h(b))}function h(b){return b===62?(n.exit("chunkString"),n.exit(a),x(b)):b===null||b===60||C(b)?t(b):(n.consume(b),b===92?A:h)}function A(b){return b===60||b===62||b===92?(n.consume(b),h):h(b)}function I(b){return!p&&(b===null||b===41||Z(b))?(n.exit("chunkString"),n.exit(a),n.exit(l),n.exit(e),r(b)):p999||h===null||h===91||h===93&&!m||h===94&&!a&&"_hiddenFootnoteSupport"in l.parser.constructs?t(h):h===93?(n.exit(i),n.enter(u),n.consume(h),n.exit(u),n.exit(e),r):C(h)?(n.enter("lineEnding"),n.consume(h),n.exit("lineEnding"),p):(n.enter("chunkString",{contentType:"string"}),f(h))}function f(h){return h===null||h===91||h===93||C(h)||a++>999?(n.exit("chunkString"),p(h)):(n.consume(h),m||(m=!z(h)),h===92?x:f)}function x(h){return h===91||h===92||h===93?(n.consume(h),a++,f):f(h)}}function st(n,r,t,e,u,i){let l;return a;function a(x){return x===34||x===39||x===40?(n.enter(e),n.enter(u),n.consume(x),n.exit(u),l=x===40?41:x,m):t(x)}function m(x){return x===l?(n.enter(u),n.consume(x),n.exit(u),n.exit(e),r):(n.enter(i),c(x))}function c(x){return x===l?(n.exit(i),m(l)):x===null?t(x):C(x)?(n.enter("lineEnding"),n.consume(x),n.exit("lineEnding"),O(n,c,"linePrefix")):(n.enter("chunkString",{contentType:"string"}),p(x))}function p(x){return x===l||x===null||C(x)?(n.exit("chunkString"),c(x)):(n.consume(x),x===92?f:p)}function f(x){return x===l||x===92?(n.consume(x),p):p(x)}}function dn(n,r){let t;return e;function e(u){return C(u)?(n.enter("lineEnding"),n.consume(u),n.exit("lineEnding"),t=!0,e):z(u)?O(n,e,t?"linePrefix":"lineSuffix")(u):r(u)}}function xn(n){return n.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const ke={name:"definition",tokenize:be},de={tokenize:ye,partial:!0};function be(n,r,t){const e=this;let u;return i;function i(h){return n.enter("definition"),l(h)}function l(h){return ot.call(e,n,a,t,"definitionLabel","definitionLabelMarker","definitionLabelString")(h)}function a(h){return u=xn(e.sliceSerialize(e.events[e.events.length-1][1]).slice(1,-1)),h===58?(n.enter("definitionMarker"),n.consume(h),n.exit("definitionMarker"),m):t(h)}function m(h){return Z(h)?dn(n,c)(h):c(h)}function c(h){return at(n,p,t,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(h)}function p(h){return n.attempt(de,f,f)(h)}function f(h){return z(h)?O(n,x,"whitespace")(h):x(h)}function x(h){return h===null||C(h)?(n.exit("definition"),e.parser.defined.push(u),r(h)):t(h)}}function ye(n,r,t){return e;function e(a){return Z(a)?dn(n,u)(a):t(a)}function u(a){return st(n,i,t,"definitionTitle","definitionTitleMarker","definitionTitleString")(a)}function i(a){return z(a)?O(n,l,"whitespace")(a):l(a)}function l(a){return a===null||C(a)?r(a):t(a)}}const Se={name:"hardBreakEscape",tokenize:Fe};function Fe(n,r,t){return e;function e(i){return n.enter("hardBreakEscape"),n.consume(i),u}function u(i){return C(i)?(n.exit("hardBreakEscape"),r(i)):t(i)}}const Ee={name:"headingAtx",tokenize:we,resolve:Ce};function Ce(n,r){let t=n.length-2,e=3,u,i;return n[e][1].type==="whitespace"&&(e+=2),t-2>e&&n[t][1].type==="whitespace"&&(t-=2),n[t][1].type==="atxHeadingSequence"&&(e===t-1||t-4>e&&n[t-2][1].type==="whitespace")&&(t-=e+1===t?2:4),t>e&&(u={type:"atxHeadingText",start:n[e][1].start,end:n[t][1].end},i={type:"chunkText",start:n[e][1].start,end:n[t][1].end,contentType:"text"},tn(n,e,t-e+1,[["enter",u,r],["enter",i,r],["exit",i,r],["exit",u,r]])),n}function we(n,r,t){let e=0;return u;function u(p){return n.enter("atxHeading"),i(p)}function i(p){return n.enter("atxHeadingSequence"),l(p)}function l(p){return p===35&&e++<6?(n.consume(p),l):p===null||Z(p)?(n.exit("atxHeadingSequence"),a(p)):t(p)}function a(p){return p===35?(n.enter("atxHeadingSequence"),m(p)):p===null||C(p)?(n.exit("atxHeading"),r(p)):z(p)?O(n,a,"whitespace")(p):(n.enter("atxHeadingText"),c(p))}function m(p){return p===35?(n.consume(p),m):(n.exit("atxHeadingSequence"),a(p))}function c(p){return p===null||p===35||Z(p)?(n.exit("atxHeadingText"),a(p)):(n.consume(p),c)}}const Ae=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],Jn=["pre","script","style","textarea"],ze={name:"htmlFlow",tokenize:Le,resolveTo:Be,concrete:!0},Ie={tokenize:De,partial:!0},Te={tokenize:Oe,partial:!0};function Be(n){let r=n.length;for(;r--&&!(n[r][0]==="enter"&&n[r][1].type==="htmlFlow"););return r>1&&n[r-2][1].type==="linePrefix"&&(n[r][1].start=n[r-2][1].start,n[r+1][1].start=n[r-2][1].start,n.splice(r-2,2)),n}function Le(n,r,t){const e=this;let u,i,l,a,m;return c;function c(s){return p(s)}function p(s){return n.enter("htmlFlow"),n.enter("htmlFlowData"),n.consume(s),f}function f(s){return s===33?(n.consume(s),x):s===47?(n.consume(s),i=!0,I):s===63?(n.consume(s),u=3,e.interrupt?r:o):nn(s)?(n.consume(s),l=String.fromCharCode(s),M):t(s)}function x(s){return s===45?(n.consume(s),u=2,h):s===91?(n.consume(s),u=5,a=0,A):nn(s)?(n.consume(s),u=4,e.interrupt?r:o):t(s)}function h(s){return s===45?(n.consume(s),e.interrupt?r:o):t(s)}function A(s){const K="CDATA[";return s===K.charCodeAt(a++)?(n.consume(s),a===K.length?e.interrupt?r:S:A):t(s)}function I(s){return nn(s)?(n.consume(s),l=String.fromCharCode(s),M):t(s)}function M(s){if(s===null||s===47||s===62||Z(s)){const K=s===47,hn=l.toLowerCase();return!K&&!i&&Jn.includes(hn)?(u=1,e.interrupt?r(s):S(s)):Ae.includes(l.toLowerCase())?(u=6,K?(n.consume(s),b):e.interrupt?r(s):S(s)):(u=7,e.interrupt&&!e.parser.lazy[e.now().line]?t(s):i?j(s):F(s))}return s===45||v(s)?(n.consume(s),l+=String.fromCharCode(s),M):t(s)}function b(s){return s===62?(n.consume(s),e.interrupt?r:S):t(s)}function j(s){return z(s)?(n.consume(s),j):V(s)}function F(s){return s===47?(n.consume(s),V):s===58||s===95||nn(s)?(n.consume(s),D):z(s)?(n.consume(s),F):V(s)}function D(s){return s===45||s===46||s===58||s===95||v(s)?(n.consume(s),D):_(s)}function _(s){return s===61?(n.consume(s),k):z(s)?(n.consume(s),_):F(s)}function k(s){return s===null||s===60||s===61||s===62||s===96?t(s):s===34||s===39?(n.consume(s),m=s,T):z(s)?(n.consume(s),k):H(s)}function T(s){return s===m?(n.consume(s),m=null,N):s===null||C(s)?t(s):(n.consume(s),T)}function H(s){return s===null||s===34||s===39||s===47||s===60||s===61||s===62||s===96||Z(s)?_(s):(n.consume(s),H)}function N(s){return s===47||s===62||z(s)?F(s):t(s)}function V(s){return s===62?(n.consume(s),y):t(s)}function y(s){return s===null||C(s)?S(s):z(s)?(n.consume(s),y):t(s)}function S(s){return s===45&&u===2?(n.consume(s),U):s===60&&u===1?(n.consume(s),W):s===62&&u===4?(n.consume(s),J):s===63&&u===3?(n.consume(s),o):s===93&&u===5?(n.consume(s),en):C(s)&&(u===6||u===7)?(n.exit("htmlFlowData"),n.check(Ie,rn,P)(s)):s===null||C(s)?(n.exit("htmlFlowData"),P(s)):(n.consume(s),S)}function P(s){return n.check(Te,R,rn)(s)}function R(s){return n.enter("lineEnding"),n.consume(s),n.exit("lineEnding"),w}function w(s){return s===null||C(s)?P(s):(n.enter("htmlFlowData"),S(s))}function U(s){return s===45?(n.consume(s),o):S(s)}function W(s){return s===47?(n.consume(s),l="",G):S(s)}function G(s){if(s===62){const K=l.toLowerCase();return Jn.includes(K)?(n.consume(s),J):S(s)}return nn(s)&&l.length<8?(n.consume(s),l+=String.fromCharCode(s),G):S(s)}function en(s){return s===93?(n.consume(s),o):S(s)}function o(s){return s===62?(n.consume(s),J):s===45&&u===2?(n.consume(s),o):S(s)}function J(s){return s===null||C(s)?(n.exit("htmlFlowData"),rn(s)):(n.consume(s),J)}function rn(s){return n.exit("htmlFlow"),r(s)}}function Oe(n,r,t){const e=this;return u;function u(l){return C(l)?(n.enter("lineEnding"),n.consume(l),n.exit("lineEnding"),i):t(l)}function i(l){return e.parser.lazy[e.now().line]?t(l):r(l)}}function De(n,r,t){return e;function e(u){return n.enter("lineEnding"),n.consume(u),n.exit("lineEnding"),n.attempt(Sn,r,t)}}const Pe={name:"htmlText",tokenize:_e};function _e(n,r,t){const e=this;let u,i,l;return a;function a(o){return n.enter("htmlText"),n.enter("htmlTextData"),n.consume(o),m}function m(o){return o===33?(n.consume(o),c):o===47?(n.consume(o),_):o===63?(n.consume(o),F):nn(o)?(n.consume(o),H):t(o)}function c(o){return o===45?(n.consume(o),p):o===91?(n.consume(o),i=0,A):nn(o)?(n.consume(o),j):t(o)}function p(o){return o===45?(n.consume(o),h):t(o)}function f(o){return o===null?t(o):o===45?(n.consume(o),x):C(o)?(l=f,W(o)):(n.consume(o),f)}function x(o){return o===45?(n.consume(o),h):f(o)}function h(o){return o===62?U(o):o===45?x(o):f(o)}function A(o){const J="CDATA[";return o===J.charCodeAt(i++)?(n.consume(o),i===J.length?I:A):t(o)}function I(o){return o===null?t(o):o===93?(n.consume(o),M):C(o)?(l=I,W(o)):(n.consume(o),I)}function M(o){return o===93?(n.consume(o),b):I(o)}function b(o){return o===62?U(o):o===93?(n.consume(o),b):I(o)}function j(o){return o===null||o===62?U(o):C(o)?(l=j,W(o)):(n.consume(o),j)}function F(o){return o===null?t(o):o===63?(n.consume(o),D):C(o)?(l=F,W(o)):(n.consume(o),F)}function D(o){return o===62?U(o):F(o)}function _(o){return nn(o)?(n.consume(o),k):t(o)}function k(o){return o===45||v(o)?(n.consume(o),k):T(o)}function T(o){return C(o)?(l=T,W(o)):z(o)?(n.consume(o),T):U(o)}function H(o){return o===45||v(o)?(n.consume(o),H):o===47||o===62||Z(o)?N(o):t(o)}function N(o){return o===47?(n.consume(o),U):o===58||o===95||nn(o)?(n.consume(o),V):C(o)?(l=N,W(o)):z(o)?(n.consume(o),N):U(o)}function V(o){return o===45||o===46||o===58||o===95||v(o)?(n.consume(o),V):y(o)}function y(o){return o===61?(n.consume(o),S):C(o)?(l=y,W(o)):z(o)?(n.consume(o),y):N(o)}function S(o){return o===null||o===60||o===61||o===62||o===96?t(o):o===34||o===39?(n.consume(o),u=o,P):C(o)?(l=S,W(o)):z(o)?(n.consume(o),S):(n.consume(o),R)}function P(o){return o===u?(n.consume(o),u=void 0,w):o===null?t(o):C(o)?(l=P,W(o)):(n.consume(o),P)}function R(o){return o===null||o===34||o===39||o===60||o===61||o===96?t(o):o===47||o===62||Z(o)?N(o):(n.consume(o),R)}function w(o){return o===47||o===62||Z(o)?N(o):t(o)}function U(o){return o===62?(n.consume(o),n.exit("htmlTextData"),n.exit("htmlText"),r):t(o)}function W(o){return n.exit("htmlTextData"),n.enter("lineEnding"),n.consume(o),n.exit("lineEnding"),G}function G(o){return z(o)?O(n,en,"linePrefix",e.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(o):en(o)}function en(o){return n.enter("htmlTextData"),l(o)}}const Dn={name:"labelEnd",tokenize:Ne,resolveTo:He,resolveAll:qe},Me={tokenize:Ve},je={tokenize:We},Re={tokenize:Qe};function qe(n){let r=-1;for(;++r=3&&(c===null||C(c))?(n.exit("thematicBreak"),r(c)):t(c)}function m(c){return c===u?(n.consume(c),e++,m):(n.exit("thematicBreakSequence"),z(c)?O(n,a,"whitespace")(c):a(c))}}const $={name:"list",tokenize:ve,continuation:{tokenize:nr},exit:er},Ke={tokenize:rr,partial:!0},Xe={tokenize:tr,partial:!0};function ve(n,r,t){const e=this,u=e.events[e.events.length-1];let i=u&&u[1].type==="linePrefix"?u[2].sliceSerialize(u[1],!0).length:0,l=0;return a;function a(h){const A=e.containerState.type||(h===42||h===43||h===45?"listUnordered":"listOrdered");if(A==="listUnordered"?!e.containerState.marker||h===e.containerState.marker:zn(h)){if(e.containerState.type||(e.containerState.type=A,n.enter(A,{_container:!0})),A==="listUnordered")return n.enter("listItemPrefix"),h===42||h===45?n.check(bn,t,c)(h):c(h);if(!e.interrupt||h===49)return n.enter("listItemPrefix"),n.enter("listItemValue"),m(h)}return t(h)}function m(h){return zn(h)&&++l<10?(n.consume(h),m):(!e.interrupt||l<2)&&(e.containerState.marker?h===e.containerState.marker:h===41||h===46)?(n.exit("listItemValue"),c(h)):t(h)}function c(h){return n.enter("listItemMarker"),n.consume(h),n.exit("listItemMarker"),e.containerState.marker=e.containerState.marker||h,n.check(Sn,e.interrupt?t:p,n.attempt(Ke,x,f))}function p(h){return e.containerState.initialBlankLine=!0,i++,x(h)}function f(h){return z(h)?(n.enter("listItemPrefixWhitespace"),n.consume(h),n.exit("listItemPrefixWhitespace"),x):t(h)}function x(h){return e.containerState.size=i+e.sliceSerialize(n.exit("listItemPrefix"),!0).length,r(h)}}function nr(n,r,t){const e=this;return e.containerState._closeFlow=void 0,n.check(Sn,u,i);function u(a){return e.containerState.furtherBlankLines=e.containerState.furtherBlankLines||e.containerState.initialBlankLine,O(n,r,"listItemIndent",e.containerState.size+1)(a)}function i(a){return e.containerState.furtherBlankLines||!z(a)?(e.containerState.furtherBlankLines=void 0,e.containerState.initialBlankLine=void 0,l(a)):(e.containerState.furtherBlankLines=void 0,e.containerState.initialBlankLine=void 0,n.attempt(Xe,r,l)(a))}function l(a){return e.containerState._closeFlow=!0,e.interrupt=void 0,O(n,n.attempt($,r,t),"linePrefix",e.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(a)}}function tr(n,r,t){const e=this;return O(n,u,"listItemIndent",e.containerState.size+1);function u(i){const l=e.events[e.events.length-1];return l&&l[1].type==="listItemIndent"&&l[2].sliceSerialize(l[1],!0).length===e.containerState.size?r(i):t(i)}}function er(n){n.exit(this.containerState.type)}function rr(n,r,t){const e=this;return O(n,u,"listItemPrefixWhitespace",e.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function u(i){const l=e.events[e.events.length-1];return!z(i)&&l&&l[1].type==="listItemPrefixWhitespace"?r(i):t(i)}}const Kn={name:"setextUnderline",tokenize:ur,resolveTo:ir};function ir(n,r){let t=n.length,e,u,i;for(;t--;)if(n[t][0]==="enter"){if(n[t][1].type==="content"){e=t;break}n[t][1].type==="paragraph"&&(u=t)}else n[t][1].type==="content"&&n.splice(t,1),!i&&n[t][1].type==="definition"&&(i=t);const l={type:"setextHeading",start:Object.assign({},n[u][1].start),end:Object.assign({},n[n.length-1][1].end)};return n[u][1].type="setextHeadingText",i?(n.splice(u,0,["enter",l,r]),n.splice(i+1,0,["exit",n[e][1],r]),n[e][1].end=Object.assign({},n[i][1].end)):n[e][1]=l,n.push(["exit",l,r]),n}function ur(n,r,t){const e=this;let u;return i;function i(c){let p=e.events.length,f;for(;p--;)if(e.events[p][1].type!=="lineEnding"&&e.events[p][1].type!=="linePrefix"&&e.events[p][1].type!=="content"){f=e.events[p][1].type==="paragraph";break}return!e.parser.lazy[e.now().line]&&(e.interrupt||f)?(n.enter("setextHeadingLine"),u=c,l(c)):t(c)}function l(c){return n.enter("setextHeadingLineSequence"),a(c)}function a(c){return c===u?(n.consume(c),a):(n.exit("setextHeadingLineSequence"),z(c)?O(n,m,"lineSuffix")(c):m(c))}function m(c){return c===null||C(c)?(n.exit("setextHeadingLine"),r(c)):t(c)}}const lr={tokenize:ar};function ar(n){const r=this,t=n.attempt(Sn,e,n.attempt(this.parser.constructs.flowInitial,u,O(n,n.attempt(this.parser.constructs.flow,u,n.attempt(pe,u)),"linePrefix")));return t;function e(i){if(i===null){n.consume(i);return}return n.enter("lineEndingBlank"),n.consume(i),n.exit("lineEndingBlank"),r.currentConstruct=void 0,t}function u(i){if(i===null){n.consume(i);return}return n.enter("lineEnding"),n.consume(i),n.exit("lineEnding"),r.currentConstruct=void 0,t}}const or={resolveAll:ht()},sr=ct("string"),cr=ct("text");function ct(n){return{tokenize:r,resolveAll:ht(n==="text"?hr:void 0)};function r(t){const e=this,u=this.parser.constructs[n],i=t.attempt(u,l,a);return l;function l(p){return c(p)?i(p):a(p)}function a(p){if(p===null){t.consume(p);return}return t.enter("data"),t.consume(p),m}function m(p){return c(p)?(t.exit("data"),i(p)):(t.consume(p),m)}function c(p){if(p===null)return!0;const f=u[p];let x=-1;if(f)for(;++x-1){const a=l[0];typeof a=="string"?l[0]=a.slice(e):l.shift()}i>0&&l.push(n[u].slice(0,i))}return l}function mr(n,r){let t=-1;const e=[];let u;for(;++t13&&t<32||t>126&&t<160||t>55295&&t<57344||t>64975&&t<65008||(t&65535)===65535||(t&65535)===65534||t>1114111?"�":String.fromCharCode(t)}const Ir=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function Tr(n){return n.replace(Ir,Br)}function Br(n,r,t){if(r)return r;if(t.charCodeAt(0)===35){const u=t.charCodeAt(1),i=u===120||u===88;return pt(t.slice(i?2:1),i?16:10)}return On(t)||n}function yn(n){return!n||typeof n!="object"?"":"position"in n||"type"in n?vn(n.position):"start"in n||"end"in n?vn(n):"line"in n||"column"in n?Tn(n):""}function Tn(n){return nt(n&&n.line)+":"+nt(n&&n.column)}function vn(n){return Tn(n&&n.start)+"-"+Tn(n&&n.end)}function nt(n){return n&&typeof n=="number"?n:1}const ft={}.hasOwnProperty,mt=function(n,r,t){return typeof r!="string"&&(t=r,r=void 0),Lr(t)(zr(wr(t).document().write(Ar()(n,r,!0))))};function Lr(n){const r={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:a(Hn),autolinkProtocol:y,autolinkEmail:y,atxHeading:a(jn),blockQuote:a(Fn),characterEscape:y,characterReference:y,codeFenced:a(Mn),codeFencedFenceInfo:m,codeFencedFenceMeta:m,codeIndented:a(Mn,m),codeText:a(kt,m),codeTextData:y,data:y,codeFlowValue:y,definition:a(dt),definitionDestinationString:m,definitionLabelString:m,definitionTitleString:m,emphasis:a(bt),hardBreakEscape:a(Rn),hardBreakTrailing:a(Rn),htmlFlow:a(qn,m),htmlFlowData:y,htmlText:a(qn,m),htmlTextData:y,image:a(yt),label:m,link:a(Hn),listItem:a(St),listItemValue:A,listOrdered:a(Nn,h),listUnordered:a(Nn),paragraph:a(Ft),reference:hn,referenceString:m,resourceDestinationString:m,resourceTitleString:m,setextHeading:a(jn),strong:a(Et),thematicBreak:a(wt)},exit:{atxHeading:p(),atxHeadingSequence:T,autolink:p(),autolinkEmail:mn,autolinkProtocol:fn,blockQuote:p(),characterEscapeValue:S,characterReferenceMarkerHexadecimal:pn,characterReferenceMarkerNumeric:pn,characterReferenceValue:an,codeFenced:p(j),codeFencedFence:b,codeFencedFenceInfo:I,codeFencedFenceMeta:M,codeFlowValue:S,codeIndented:p(F),codeText:p(W),codeTextData:S,data:S,definition:p(),definitionDestinationString:k,definitionLabelString:D,definitionTitleString:_,emphasis:p(),hardBreakEscape:p(R),hardBreakTrailing:p(R),htmlFlow:p(w),htmlFlowData:S,htmlText:p(U),htmlTextData:S,image:p(en),label:J,labelText:o,lineEnding:P,link:p(G),listItem:p(),listOrdered:p(),listUnordered:p(),paragraph:p(),referenceString:Q,resourceDestinationString:rn,resourceTitleString:s,resource:K,setextHeading:p(V),setextHeadingLineSequence:N,setextHeadingText:H,strong:p(),thematicBreak:p()}};xt(r,(n||{}).mdastExtensions||[]);const t={};return e;function e(g){let d={type:"root",children:[]};const E={stack:[d],tokenStack:[],config:r,enter:c,exit:f,buffer:m,resume:x,setData:i,getData:l},B=[];let L=-1;for(;++L0){const X=E.tokenStack[E.tokenStack.length-1];(X[1]||tt).call(E,void 0,X[0])}for(d.position={start:sn(g.length>0?g[0][1].start:{line:1,column:1,offset:0}),end:sn(g.length>0?g[g.length-2][1].end:{line:1,column:1,offset:0})},L=-1;++L 注意

          此测试时间比较早,部分内容已失效;其中ultraLowDelay配置项已经删除;合并写延时改成 0 时(默认为 0)即为最低延时模式; 大家测试延时时,可以使用 webrtc 播放来测试。

          网络环境

          • localhost

          操作系统

          • macOS

          服务器

          • MediaServer,启动参数 -t 1 ,单线程启动
          • 配置文件打开ultraLowDelay模式

          推流器

          • obs rtmp 推流到 localhost
          • 速率控制CBR
          • 比特率: 2500
          • 自定义缓存大小: 100
          • 关键帧将:2 秒
          • CPU使用预设: ultrafast
          • profile: baseline
          • Tune: zerolatency
          • 分辨率: 1280x720
          • fps: 30 image

          播放器

          • 内置 test_player
          • localhost 播放 rtsp(udp、tcp 模式都测试)或 rtmp

          测试方法

          • 打开浏览器,打开在线秒表网页 https://miaobiao.51240.com/
          • 设置 OBS,截取浏览器秒表部分图像,开始推流给 MediaServer
          • 打开 test_player,播放对应的 rtsp 或 rtmp url
          • 使用截图工具,定格画面,并对比网页与 test_player 播放器画面在线秒表时间差

          测试结果

          • 播放 rtmp,延时 200ms ~ 400ms imageimage

          • 播放 rtsp(tcp 模式),延时 200ms ~ 400ms imageimage

          • 播放 rtsp(udp 模式),延时 200ms ~ 400ms imageimage

          测试结论

          • 在单线程下,播放器和推流器在同一个线程,没有跨线程切换问题,延时稍微稳定并低点
          • 开启 TCP_NODELAY 关闭 MSG_MORE 在本轮测试中对优化延时效果不大
          • 多次截图平均下来有 300ms 左右的延时,最低 200ms 左右,最高有 400+ms
          • 17 年我自己写推流器(很遗憾没保存下 exe 文件)的情况下,最低延时能达到 120ms 左右,目前根本达不到,怀疑 obs 推流延时还是较高
          • 推流时建议关闭音频再测试,像 AAC 这种编码格式,编码延时能达到 100ms 以上
          • 本次测试都是再 macOS 下测试的,理想情况下,服务器是 linux,推流器 windows,播放器渲染自己做的话延时可能还能更低
          • 感兴趣的朋友们可以在 windows 下测试下,17 年我是在局域网中测试的,推流器、服务器、播放器都不是同一台主机,延时尚且低至 120ms,如果 localhost 应该能更低。
          ',18),t=[d];function o(r,s){return i(),a("div",null,t)}const u=e(c,[["render",o],["__file","delay_test.html.vue"]]);export{u as default}; +import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as i,c as a,e as l}from"./app-oTlYPy8h.js";const c={},d=l('

          注意

          此测试时间比较早,部分内容已失效;其中ultraLowDelay配置项已经删除;合并写延时改成 0 时(默认为 0)即为最低延时模式; 大家测试延时时,可以使用 webrtc 播放来测试。

          网络环境

          • localhost

          操作系统

          • macOS

          服务器

          • MediaServer,启动参数 -t 1 ,单线程启动
          • 配置文件打开ultraLowDelay模式

          推流器

          • obs rtmp 推流到 localhost
          • 速率控制CBR
          • 比特率: 2500
          • 自定义缓存大小: 100
          • 关键帧将:2 秒
          • CPU使用预设: ultrafast
          • profile: baseline
          • Tune: zerolatency
          • 分辨率: 1280x720
          • fps: 30 image

          播放器

          • 内置 test_player
          • localhost 播放 rtsp(udp、tcp 模式都测试)或 rtmp

          测试方法

          • 打开浏览器,打开在线秒表网页 https://miaobiao.51240.com/
          • 设置 OBS,截取浏览器秒表部分图像,开始推流给 MediaServer
          • 打开 test_player,播放对应的 rtsp 或 rtmp url
          • 使用截图工具,定格画面,并对比网页与 test_player 播放器画面在线秒表时间差

          测试结果

          • 播放 rtmp,延时 200ms ~ 400ms imageimage

          • 播放 rtsp(tcp 模式),延时 200ms ~ 400ms imageimage

          • 播放 rtsp(udp 模式),延时 200ms ~ 400ms imageimage

          测试结论

          • 在单线程下,播放器和推流器在同一个线程,没有跨线程切换问题,延时稍微稳定并低点
          • 开启 TCP_NODELAY 关闭 MSG_MORE 在本轮测试中对优化延时效果不大
          • 多次截图平均下来有 300ms 左右的延时,最低 200ms 左右,最高有 400+ms
          • 17 年我自己写推流器(很遗憾没保存下 exe 文件)的情况下,最低延时能达到 120ms 左右,目前根本达不到,怀疑 obs 推流延时还是较高
          • 推流时建议关闭音频再测试,像 AAC 这种编码格式,编码延时能达到 100ms 以上
          • 本次测试都是再 macOS 下测试的,理想情况下,服务器是 linux,推流器 windows,播放器渲染自己做的话延时可能还能更低
          • 感兴趣的朋友们可以在 windows 下测试下,17 年我是在局域网中测试的,推流器、服务器、播放器都不是同一台主机,延时尚且低至 120ms,如果 localhost 应该能更低。
          ',18),t=[d];function o(r,s){return i(),a("div",null,t)}const u=e(c,[["render",o],["__file","delay_test.html.vue"]]);export{u as default}; diff --git a/assets/delay_test.html-0tF1gV92.js b/assets/delay_test.html-jKr5-1Rj.js similarity index 98% rename from assets/delay_test.html-0tF1gV92.js rename to assets/delay_test.html-jKr5-1Rj.js index 95a22a2..57b27f1 100644 --- a/assets/delay_test.html-0tF1gV92.js +++ b/assets/delay_test.html-jKr5-1Rj.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as t,c as a,e as i}from"./app-BrxqtzGY.js";const o={},l=i('

          Note

          This test was conducted earlier, and some content may have become outdated. The ultraLowDelay configuration option has been removed. To achieve the lowest delay mode, set the combined write delay to 0 (default is 0). When testing the delay, you can use WebRTC playback.

          Network Environment

          • localhost

          Operating System

          • macOS

          Server

          • MediaServer, startup parameter -t 1, single-threaded startup
          • Open the configuration file and enable ultraLowDelay mode

          Streaming Software

          • obs, RTMP streaming to localhost
          • Rate Control: CBR
          • Bitrate: 2500
          • Custom Buffer Size: 100
          • Keyframe Interval: 2 seconds
          • CPU Usage Preset: ultrafast
          • Profile: baseline
          • Tune: zerolatency
          • Resolution: 1280x720
          • FPS: 30 image

          Player

          • Built-in test_player
          • Play RTSP (test both UDP and TCP modes) or RTMP on localhost

          Testing Method

          • Open a browser and go to the online stopwatch webpage https://miaobiao.51240.com/
          • Configure OBS to capture the stopwatch section of the browser image and start streaming to MediaServer
          • Open the test_player and play the corresponding RTSP or RTMP URL
          • Use a screenshot tool to capture the frames and compare the time difference between the online stopwatch webpage and the test_player

          Test Results

          • RTMP playback, delay of 200ms to 400ms imageimage

          • RTSP playback (TCP mode), delay of 200ms to 400ms imageimage

          • RTSP playback (UDP mode), delay of 200ms to 400ms imageimage

          Test Conclusion

          • In the single-threaded mode, where the player and streaming software are in the same thread without any thread switching, the delay is slightly more stable and lower.
          • Enabling TCP_NODELAY and disabling MSG_MORE did not significantly optimize the delay in this test.
          • The average delay from multiple screenshots is around 300ms, with a minimum of around 200ms and a maximum of over 400ms.
          • Back in 2017, when I developed my own streaming software (unfortunately, I didn't save the .exe file), I was able to achieve a minimum delay of around 120ms, which is currently not achievable. It is suspected that OBS still has relatively high streaming delay.
          • It is recommended to disable audio during streaming tests. For encoding formats like AAC, the encoding delay can exceed 100ms.
          • This test was conducted on macOS. Ideally, the server would be Linux, the streaming software would be on Windows, and if the player rendering is done independently, the delay could be even lower.
          • Those interested can conduct tests on Windows. In 2017, when I tested it on a local network, with the streaming software, server, and player not on the same host, the delay was as low as 120ms. It should be even lower with localhost.
          ',17),n=[l];function s(d,r){return t(),a("div",null,n)}const m=e(o,[["render",s],["__file","delay_test.html.vue"]]);export{m as default}; +import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as t,c as a,e as i}from"./app-oTlYPy8h.js";const o={},l=i('

          Note

          This test was conducted earlier, and some content may have become outdated. The ultraLowDelay configuration option has been removed. To achieve the lowest delay mode, set the combined write delay to 0 (default is 0). When testing the delay, you can use WebRTC playback.

          Network Environment

          • localhost

          Operating System

          • macOS

          Server

          • MediaServer, startup parameter -t 1, single-threaded startup
          • Open the configuration file and enable ultraLowDelay mode

          Streaming Software

          • obs, RTMP streaming to localhost
          • Rate Control: CBR
          • Bitrate: 2500
          • Custom Buffer Size: 100
          • Keyframe Interval: 2 seconds
          • CPU Usage Preset: ultrafast
          • Profile: baseline
          • Tune: zerolatency
          • Resolution: 1280x720
          • FPS: 30 image

          Player

          • Built-in test_player
          • Play RTSP (test both UDP and TCP modes) or RTMP on localhost

          Testing Method

          • Open a browser and go to the online stopwatch webpage https://miaobiao.51240.com/
          • Configure OBS to capture the stopwatch section of the browser image and start streaming to MediaServer
          • Open the test_player and play the corresponding RTSP or RTMP URL
          • Use a screenshot tool to capture the frames and compare the time difference between the online stopwatch webpage and the test_player

          Test Results

          • RTMP playback, delay of 200ms to 400ms imageimage

          • RTSP playback (TCP mode), delay of 200ms to 400ms imageimage

          • RTSP playback (UDP mode), delay of 200ms to 400ms imageimage

          Test Conclusion

          • In the single-threaded mode, where the player and streaming software are in the same thread without any thread switching, the delay is slightly more stable and lower.
          • Enabling TCP_NODELAY and disabling MSG_MORE did not significantly optimize the delay in this test.
          • The average delay from multiple screenshots is around 300ms, with a minimum of around 200ms and a maximum of over 400ms.
          • Back in 2017, when I developed my own streaming software (unfortunately, I didn't save the .exe file), I was able to achieve a minimum delay of around 120ms, which is currently not achievable. It is suspected that OBS still has relatively high streaming delay.
          • It is recommended to disable audio during streaming tests. For encoding formats like AAC, the encoding delay can exceed 100ms.
          • This test was conducted on macOS. Ideally, the server would be Linux, the streaming software would be on Windows, and if the player rendering is done independently, the delay could be even lower.
          • Those interested can conduct tests on Windows. In 2017, when I tested it on a local network, with the streaming software, server, and player not on the same host, the delay was as low as 120ms. It should be even lower with localhost.
          ',17),n=[l];function s(d,r){return t(),a("div",null,n)}const m=e(o,[["render",s],["__file","delay_test.html.vue"]]);export{m as default}; diff --git a/assets/dependency.html-bJgf-XNv.js b/assets/dependency.html-IB8qgUUu.js similarity index 98% rename from assets/dependency.html-bJgf-XNv.js rename to assets/dependency.html-IB8qgUUu.js index d3c4c7c..56ae7a8 100644 --- a/assets/dependency.html-bJgf-XNv.js +++ b/assets/dependency.html-IB8qgUUu.js @@ -1 +1 @@ -import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as a,c as d,a as e,d as t,b as r,e as o}from"./app-BrxqtzGY.js";const s={},c=o('

          I. ZLMediaKit's List of Dependent Libraries

          Dependent ComponentsLicense TypeRemarksProject Address
          ZLToolKitMITStrong dependency, ZLToolKit also partially depends on some open-source codeshttps://github.com/ZLMediaKit/ZLToolKit
          ireader/media-serverMITDefault dependency, can be removed when ENABLE_HLS, ENABLE_MP4, ENABLE_RTPPROXY are set to disabled at compile timehttps://github.com/ireader/media-server
          jsoncppMITMediaServer dependencyhttps://github.com/open-source-parsers/jsoncpp
          opensslApache-2.0Dependency when enabling SSL and WebRTC related features, can be removed when ENABLE_OPENSSL, ENABLE_WEBRTC are set to disabled at compile timehttps://github.com/openssl/openssl
          srtpSimilar to MITDependency when enabling WebRTC related features, can be removed when ENABLE_WEBRTC is set to disabled at compile timehttps://github.com/cisco/libsrtp
          usrsctpBSD-3-ClauseDependency when enabling WebRTC datachannel related features, can be removed when ENABLE_SCTP is set to disabled at compile timehttps://github.com/sctplab/usrsctp
          mediasoupISCSome WebRTC source code extracted from mediasoup, can be removed when ENABLE_WEBRTC is set to disabled at compile timehttps://github.com/versatica/mediasoup
          ffmpegGPL/LGPLThere's minor dependency with the transcoding branch and mk_api, can be removed when ENABLE_FFMPEG is set to disabled at compile time, default is disabledhttps://github.com/FFmpeg/FFmpeg
          wepollSimilar to MITDependency when ENABLE_WPOLL is enabled during Windows compilation, default is disabledhttps://github.com/piscisaureus/wepoll
          SPSParsersps/pps related parsing code, originated from a friend, modified, initially extracted from ffmpeg, copyright doubtfulhttps://github.com/ZLMediaKit/ZLMediaKit/blob/master/src/Extension/SPSParser.h

          II. Other Dependencies

          • SDL dependency when enabling the compilation of the test_player test program.
          • Dependencies on libx264 and libfacc when enabling x264/faac related features, default is disabled.
          • jemalloc dependency when enabling jemalloc, default is disabled.
          • Dependency on libmysql-clinet when enabling mysql connection pool feature, default is disabled.
          ',5),h={href:"https://github.com/ZLMediaKit/ZLToolKit/tree/master/src/win32",target:"_blank",rel:"noopener noreferrer"},p={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/uv_errno.h",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/strptime_win.cpp",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/mini.h",target:"_blank",rel:"noopener noreferrer"},b={href:"https://github.com/r-lyeh-archived/mINI",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/function_traits.h",target:"_blank",rel:"noopener noreferrer"},f={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/base64.h",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/SHA1.h",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/vog/sha1",target:"_blank",rel:"noopener noreferrer"},x={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/MD5.h",target:"_blank",rel:"noopener noreferrer"};function L(E,T){const n=l("ExternalLinkIcon");return a(),d("div",null,[c,e("ul",null,[e("li",null,[e("a",h,[t("getopt"),r(n)]),t(" is a command-line parsing tool for Windows, not needed for other platforms.")]),e("li",null,[e("a",p,[t("uv_errno"),r(n)]),t(" some error handling code is derived from libuv.")]),e("li",null,[e("a",m,[t("strptime_win"),r(n)]),t(" is the strptime porting function code for Windows, sourced from the internet, origin unknown.")]),e("li",null,[e("a",g,[t("mini"),r(n)])])]),e("p",null,[t("is sourced from "),e("a",b,[t("github"),r(n)]),t(", after arrangement and modification.")]),e("ul",null,[e("li",null,[e("a",u,[t("function_traits"),r(n)]),t(" is sourced from the internet, likely from Qi Yu.")]),e("li",null,[e("a",f,[t("base64"),r(n)]),t(" is sourced from the internet, modified, likely originated from ffmpeg.")]),e("li",null,[e("a",y,[t("SHA1"),r(n)]),t(" is arranged from "),e("a",_,[t("GitHub"),r(n)])]),e("li",null,[e("a",x,[t("MD5"),r(n)]),t(" is arranged from GitHub, the original source is no longer findable.")])])])}const Z=i(s,[["render",L],["__file","dependency.html.vue"]]);export{Z as default}; +import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as a,c as d,a as e,d as t,b as r,e as o}from"./app-oTlYPy8h.js";const s={},c=o('

          I. ZLMediaKit's List of Dependent Libraries

          Dependent ComponentsLicense TypeRemarksProject Address
          ZLToolKitMITStrong dependency, ZLToolKit also partially depends on some open-source codeshttps://github.com/ZLMediaKit/ZLToolKit
          ireader/media-serverMITDefault dependency, can be removed when ENABLE_HLS, ENABLE_MP4, ENABLE_RTPPROXY are set to disabled at compile timehttps://github.com/ireader/media-server
          jsoncppMITMediaServer dependencyhttps://github.com/open-source-parsers/jsoncpp
          opensslApache-2.0Dependency when enabling SSL and WebRTC related features, can be removed when ENABLE_OPENSSL, ENABLE_WEBRTC are set to disabled at compile timehttps://github.com/openssl/openssl
          srtpSimilar to MITDependency when enabling WebRTC related features, can be removed when ENABLE_WEBRTC is set to disabled at compile timehttps://github.com/cisco/libsrtp
          usrsctpBSD-3-ClauseDependency when enabling WebRTC datachannel related features, can be removed when ENABLE_SCTP is set to disabled at compile timehttps://github.com/sctplab/usrsctp
          mediasoupISCSome WebRTC source code extracted from mediasoup, can be removed when ENABLE_WEBRTC is set to disabled at compile timehttps://github.com/versatica/mediasoup
          ffmpegGPL/LGPLThere's minor dependency with the transcoding branch and mk_api, can be removed when ENABLE_FFMPEG is set to disabled at compile time, default is disabledhttps://github.com/FFmpeg/FFmpeg
          wepollSimilar to MITDependency when ENABLE_WPOLL is enabled during Windows compilation, default is disabledhttps://github.com/piscisaureus/wepoll
          SPSParsersps/pps related parsing code, originated from a friend, modified, initially extracted from ffmpeg, copyright doubtfulhttps://github.com/ZLMediaKit/ZLMediaKit/blob/master/src/Extension/SPSParser.h

          II. Other Dependencies

          • SDL dependency when enabling the compilation of the test_player test program.
          • Dependencies on libx264 and libfacc when enabling x264/faac related features, default is disabled.
          • jemalloc dependency when enabling jemalloc, default is disabled.
          • Dependency on libmysql-clinet when enabling mysql connection pool feature, default is disabled.
          ',5),h={href:"https://github.com/ZLMediaKit/ZLToolKit/tree/master/src/win32",target:"_blank",rel:"noopener noreferrer"},p={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/uv_errno.h",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/strptime_win.cpp",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/mini.h",target:"_blank",rel:"noopener noreferrer"},b={href:"https://github.com/r-lyeh-archived/mINI",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/function_traits.h",target:"_blank",rel:"noopener noreferrer"},f={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/base64.h",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/SHA1.h",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/vog/sha1",target:"_blank",rel:"noopener noreferrer"},x={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/MD5.h",target:"_blank",rel:"noopener noreferrer"};function L(E,T){const n=l("ExternalLinkIcon");return a(),d("div",null,[c,e("ul",null,[e("li",null,[e("a",h,[t("getopt"),r(n)]),t(" is a command-line parsing tool for Windows, not needed for other platforms.")]),e("li",null,[e("a",p,[t("uv_errno"),r(n)]),t(" some error handling code is derived from libuv.")]),e("li",null,[e("a",m,[t("strptime_win"),r(n)]),t(" is the strptime porting function code for Windows, sourced from the internet, origin unknown.")]),e("li",null,[e("a",g,[t("mini"),r(n)])])]),e("p",null,[t("is sourced from "),e("a",b,[t("github"),r(n)]),t(", after arrangement and modification.")]),e("ul",null,[e("li",null,[e("a",u,[t("function_traits"),r(n)]),t(" is sourced from the internet, likely from Qi Yu.")]),e("li",null,[e("a",f,[t("base64"),r(n)]),t(" is sourced from the internet, modified, likely originated from ffmpeg.")]),e("li",null,[e("a",y,[t("SHA1"),r(n)]),t(" is arranged from "),e("a",_,[t("GitHub"),r(n)])]),e("li",null,[e("a",x,[t("MD5"),r(n)]),t(" is arranged from GitHub, the original source is no longer findable.")])])])}const Z=i(s,[["render",L],["__file","dependency.html.vue"]]);export{Z as default}; diff --git a/assets/dependency.html-mty2X7tk.js b/assets/dependency.html-gwWfr65O.js similarity index 98% rename from assets/dependency.html-mty2X7tk.js rename to assets/dependency.html-gwWfr65O.js index e8e6e0a..9804228 100644 --- a/assets/dependency.html-mty2X7tk.js +++ b/assets/dependency.html-gwWfr65O.js @@ -1 +1 @@ -import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as a,c as s,a as t,d as e,b as l,e as o}from"./app-BrxqtzGY.js";const d={},c=o('

          一、zlmediakit 依赖的库列表

          依赖组件协议类型备注项目地址
          ZLToolKitMIT强依赖,ZLToolKit 也部分依赖某些开源代码https://github.com/ZLMediaKit/ZLToolKit
          ireader/media-serverMIT默认依赖,编译时指定 ENABLE_HLS,ENABLE_MP4,ENABLE_RTPPROXY 为关闭时可以去除依赖https://github.com/ireader/media-server
          jsoncppMITMediaServer 依赖https://github.com/open-source-parsers/jsoncpp
          opensslApache-2.0开启 ssl 和 webrtc 相关功能时依赖,编译时指定 ENABLE_OPENSSL,ENABLE_WEBRTC 为关闭时可以去除依赖https://github.com/openssl/openssl
          srtp类 MIT开启 webrtc 相关功能时依赖,编译时指定 ENABLE_WEBRTC 为关闭时可以去除依赖https://github.com/cisco/libsrtp
          usrsctpBSD-3-Clause开启 webrtc datachannel 相关功能时依赖,编译时指定 ENABLE_SCTP 为关闭时可以去除依赖https://github.com/sctplab/usrsctp
          mediasoupISC部分 webrtc 源码提取自 mediasoup,编译时指定 ENABLE_WEBRTC 为关闭时可以去除依赖https://github.com/versatica/mediasoup
          ffmpegGPL/LGPL转码分支与 mk_api 有轻微依赖,编译时指定 ENABLE_FFMPEG 为关闭时可以去除依赖,默认关闭https://github.com/FFmpeg/FFmpeg
          wepoll类 MITWindows 下编译 ENABLE_WPOLL 为开始时依赖,默认关闭https://github.com/piscisaureus/wepoll
          SPSParsersps/pps 相关解析代码,来自朋友,经过修改,应该最开始提取自 ffmpeg,版权存疑https://github.com/ZLMediaKit/ZLMediaKit/blob/master/src/Extension/SPSParser.h

          二、其他依赖

          • 开启编译 test_player 测试程序时依赖 sdl。
          • 开启 x264/faac 相关功能时依赖 libx264 与 libfacc,默认关闭。
          • 开启 jemalloc 时依赖 jemalloc,默认关闭。
          • 开始 mysql 连接池功能时依赖 libmysql-clinet,默认关闭。

          三、ZLToolkit 相关依赖

          ',5),h={href:"https://github.com/ZLMediaKit/ZLToolKit/tree/master/src/win32",target:"_blank",rel:"noopener noreferrer"},p={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/uv_errno.h",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/strptime_win.cpp",target:"_blank",rel:"noopener noreferrer"},b={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/mini.h",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/r-lyeh-archived/mINI",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/function_traits.h",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/base64.h",target:"_blank",rel:"noopener noreferrer"},x={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/SHA1.h",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/vog/sha1",target:"_blank",rel:"noopener noreferrer"},L={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/MD5.h",target:"_blank",rel:"noopener noreferrer"};function f(E,T){const r=i("ExternalLinkIcon");return a(),s("div",null,[c,t("ul",null,[t("li",null,[t("p",null,[t("a",h,[e("getopt"),l(r)]),e(" windows 下命令行解析工具,其他平台不依赖。")])]),t("li",null,[t("p",null,[t("a",p,[e("uv_errno"),l(r)]),e(" 部分错误处理代码来自 libuv。")])]),t("li",null,[t("p",null,[t("a",g,[e("strptime_win"),l(r)]),e(" windows 下 strptime 移植函数代码,来源网络,出处已不可考。")])]),t("li",null,[t("p",null,[t("a",b,[e("mini"),l(r)]),e(" 来源于"),t("a",u,[e("github"),l(r)]),e(",经过整理和修改。")])]),t("li",null,[t("p",null,[t("a",_,[e("function_traits"),l(r)]),e("来源自网络,应该出自祁宇。")])]),t("li",null,[t("p",null,[t("a",m,[e("base64"),l(r)]),e(" 来源自网络,经过修改,应该出自 ffmpeg。")])]),t("li",null,[t("p",null,[t("a",x,[e("SHA1"),l(r)]),e(" 整理自"),t("a",y,[e("GitHub"),l(r)])])]),t("li",null,[t("p",null,[t("a",L,[e("MD5"),l(r)]),e(" 整理自 GitHub,已无法找到原始出处。")])])])])}const k=n(d,[["render",f],["__file","dependency.html.vue"]]);export{k as default}; +import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as a,c as s,a as t,d as e,b as l,e as o}from"./app-oTlYPy8h.js";const d={},c=o('

          一、zlmediakit 依赖的库列表

          依赖组件协议类型备注项目地址
          ZLToolKitMIT强依赖,ZLToolKit 也部分依赖某些开源代码https://github.com/ZLMediaKit/ZLToolKit
          ireader/media-serverMIT默认依赖,编译时指定 ENABLE_HLS,ENABLE_MP4,ENABLE_RTPPROXY 为关闭时可以去除依赖https://github.com/ireader/media-server
          jsoncppMITMediaServer 依赖https://github.com/open-source-parsers/jsoncpp
          opensslApache-2.0开启 ssl 和 webrtc 相关功能时依赖,编译时指定 ENABLE_OPENSSL,ENABLE_WEBRTC 为关闭时可以去除依赖https://github.com/openssl/openssl
          srtp类 MIT开启 webrtc 相关功能时依赖,编译时指定 ENABLE_WEBRTC 为关闭时可以去除依赖https://github.com/cisco/libsrtp
          usrsctpBSD-3-Clause开启 webrtc datachannel 相关功能时依赖,编译时指定 ENABLE_SCTP 为关闭时可以去除依赖https://github.com/sctplab/usrsctp
          mediasoupISC部分 webrtc 源码提取自 mediasoup,编译时指定 ENABLE_WEBRTC 为关闭时可以去除依赖https://github.com/versatica/mediasoup
          ffmpegGPL/LGPL转码分支与 mk_api 有轻微依赖,编译时指定 ENABLE_FFMPEG 为关闭时可以去除依赖,默认关闭https://github.com/FFmpeg/FFmpeg
          wepoll类 MITWindows 下编译 ENABLE_WPOLL 为开始时依赖,默认关闭https://github.com/piscisaureus/wepoll
          SPSParsersps/pps 相关解析代码,来自朋友,经过修改,应该最开始提取自 ffmpeg,版权存疑https://github.com/ZLMediaKit/ZLMediaKit/blob/master/src/Extension/SPSParser.h

          二、其他依赖

          • 开启编译 test_player 测试程序时依赖 sdl。
          • 开启 x264/faac 相关功能时依赖 libx264 与 libfacc,默认关闭。
          • 开启 jemalloc 时依赖 jemalloc,默认关闭。
          • 开始 mysql 连接池功能时依赖 libmysql-clinet,默认关闭。

          三、ZLToolkit 相关依赖

          ',5),h={href:"https://github.com/ZLMediaKit/ZLToolKit/tree/master/src/win32",target:"_blank",rel:"noopener noreferrer"},p={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/uv_errno.h",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/strptime_win.cpp",target:"_blank",rel:"noopener noreferrer"},b={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/mini.h",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/r-lyeh-archived/mINI",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/function_traits.h",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/base64.h",target:"_blank",rel:"noopener noreferrer"},x={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/SHA1.h",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/vog/sha1",target:"_blank",rel:"noopener noreferrer"},L={href:"https://github.com/ZLMediaKit/ZLToolKit/blob/master/src/Util/MD5.h",target:"_blank",rel:"noopener noreferrer"};function f(E,T){const r=i("ExternalLinkIcon");return a(),s("div",null,[c,t("ul",null,[t("li",null,[t("p",null,[t("a",h,[e("getopt"),l(r)]),e(" windows 下命令行解析工具,其他平台不依赖。")])]),t("li",null,[t("p",null,[t("a",p,[e("uv_errno"),l(r)]),e(" 部分错误处理代码来自 libuv。")])]),t("li",null,[t("p",null,[t("a",g,[e("strptime_win"),l(r)]),e(" windows 下 strptime 移植函数代码,来源网络,出处已不可考。")])]),t("li",null,[t("p",null,[t("a",b,[e("mini"),l(r)]),e(" 来源于"),t("a",u,[e("github"),l(r)]),e(",经过整理和修改。")])]),t("li",null,[t("p",null,[t("a",_,[e("function_traits"),l(r)]),e("来源自网络,应该出自祁宇。")])]),t("li",null,[t("p",null,[t("a",m,[e("base64"),l(r)]),e(" 来源自网络,经过修改,应该出自 ffmpeg。")])]),t("li",null,[t("p",null,[t("a",x,[e("SHA1"),l(r)]),e(" 整理自"),t("a",y,[e("GitHub"),l(r)])])]),t("li",null,[t("p",null,[t("a",L,[e("MD5"),l(r)]),e(" 整理自 GitHub,已无法找到原始出处。")])])])])}const k=n(d,[["render",f],["__file","dependency.html.vue"]]);export{k as default}; diff --git a/assets/edges-80f1ebb6--gcvlmof.js b/assets/edges-80f1ebb6-kOLp6foW.js similarity index 99% rename from assets/edges-80f1ebb6--gcvlmof.js rename to assets/edges-80f1ebb6-kOLp6foW.js index 0285937..2d374c5 100644 --- a/assets/edges-80f1ebb6--gcvlmof.js +++ b/assets/edges-80f1ebb6-kOLp6foW.js @@ -1,4 +1,4 @@ -import{q as $,c as w,d as q,an as Q,h as M,l as x,y as j,ao as nt}from"./mermaid.core-zy7cM8l9.js";import{c as at}from"./createText-aebacdfe-JILF3Vy1.js";import{l as lt}from"./line-TqRW8de4.js";const ct=(a,t,r,n)=>{t.forEach(e=>{ut[e](a,r,n)})},ht=(a,t,r)=>{x.trace("Making markers for ",r),a.append("defs").append("marker").attr("id",r+"_"+t+"-extensionStart").attr("class","marker extension "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),a.append("defs").append("marker").attr("id",r+"_"+t+"-extensionEnd").attr("class","marker extension "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},ot=(a,t,r)=>{a.append("defs").append("marker").attr("id",r+"_"+t+"-compositionStart").attr("class","marker composition "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),a.append("defs").append("marker").attr("id",r+"_"+t+"-compositionEnd").attr("class","marker composition "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},ft=(a,t,r)=>{a.append("defs").append("marker").attr("id",r+"_"+t+"-aggregationStart").attr("class","marker aggregation "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),a.append("defs").append("marker").attr("id",r+"_"+t+"-aggregationEnd").attr("class","marker aggregation "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},pt=(a,t,r)=>{a.append("defs").append("marker").attr("id",r+"_"+t+"-dependencyStart").attr("class","marker dependency "+t).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),a.append("defs").append("marker").attr("id",r+"_"+t+"-dependencyEnd").attr("class","marker dependency "+t).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},yt=(a,t,r)=>{a.append("defs").append("marker").attr("id",r+"_"+t+"-lollipopStart").attr("class","marker lollipop "+t).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),a.append("defs").append("marker").attr("id",r+"_"+t+"-lollipopEnd").attr("class","marker lollipop "+t).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},dt=(a,t,r)=>{a.append("marker").attr("id",r+"_"+t+"-pointEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),a.append("marker").attr("id",r+"_"+t+"-pointStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},xt=(a,t,r)=>{a.append("marker").attr("id",r+"_"+t+"-circleEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),a.append("marker").attr("id",r+"_"+t+"-circleStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},bt=(a,t,r)=>{a.append("marker").attr("id",r+"_"+t+"-crossEnd").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),a.append("marker").attr("id",r+"_"+t+"-crossStart").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},gt=(a,t,r)=>{a.append("defs").append("marker").attr("id",r+"_"+t+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},ut={extension:ht,composition:ot,aggregation:ft,dependency:pt,lollipop:yt,point:dt,circle:xt,cross:bt,barb:gt},rr=ct;function wt(a,t){t&&a.attr("style",t)}function mt(a){const t=M(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=t.append("xhtml:div"),n=a.label,e=a.isNode?"nodeLabel":"edgeLabel";return r.html('"+n+""),wt(r,a.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),t.node()}const kt=(a,t,r,n)=>{let e=a||"";if(typeof e=="object"&&(e=e[0]),$(w().flowchart.htmlLabels)){e=e.replace(/\\n|\n/g,"
          "),x.info("vertexText"+e);const i={isNode:n,label:Q(e).replace(/fa[blrs]?:fa-[\w-]+/g,l=>``),labelStyle:t.replace("fill:","color:")};return mt(i)}else{const i=document.createElementNS("http://www.w3.org/2000/svg","text");i.setAttribute("style",t.replace("color:","fill:"));let s=[];typeof e=="string"?s=e.split(/\\n|\n|/gi):Array.isArray(e)?s=e:s=[];for(const l of s){const c=document.createElementNS("http://www.w3.org/2000/svg","tspan");c.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),c.setAttribute("dy","1em"),c.setAttribute("x","0"),r?c.setAttribute("class","title-row"):c.setAttribute("class","row"),c.textContent=l.trim(),i.appendChild(c)}return i}},I=kt,_=async(a,t,r,n)=>{let e;const i=t.useHtmlLabels||$(w().flowchart.htmlLabels);r?e=r:e="node default";const s=a.insert("g").attr("class",e).attr("id",t.domId||t.id),l=s.insert("g").attr("class","label").attr("style",t.labelStyle);let c;t.labelText===void 0?c="":c=typeof t.labelText=="string"?t.labelText:t.labelText[0];const o=l.node();let h;t.labelType==="markdown"?h=at(l,q(Q(c),w()),{useHtmlLabels:i,width:t.width||w().flowchart.wrappingWidth,classes:"markdown-node-label"}):h=o.appendChild(I(q(Q(c),w()),t.labelStyle,!1,n));let f=h.getBBox();const y=t.padding/2;if($(w().flowchart.htmlLabels)){const p=h.children[0],u=M(h),k=p.getElementsByTagName("img");if(k){const g=c.replace(/]*>/g,"").trim()==="";await Promise.all([...k].map(d=>new Promise(b=>{function B(){if(d.style.display="flex",d.style.flexDirection="column",g){const C=w().fontSize?w().fontSize:window.getComputedStyle(document.body).fontSize,X=5;d.style.width=parseInt(C,10)*X+"px"}else d.style.width="100%";b(d)}setTimeout(()=>{d.complete&&B()}),d.addEventListener("error",B),d.addEventListener("load",B)})))}f=p.getBoundingClientRect(),u.attr("width",f.width),u.attr("height",f.height)}return i?l.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"):l.attr("transform","translate(0, "+-f.height/2+")"),t.centerLabel&&l.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),l.insert("rect",":first-child"),{shapeSvg:s,bbox:f,halfPadding:y,label:l}},v=(a,t)=>{const r=t.node().getBBox();a.width=r.width,a.height=r.height};function N(a,t,r,n){return a.insert("polygon",":first-child").attr("points",n.map(function(e){return e.x+","+e.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-t/2+","+r/2+")")}function vt(a,t){return a.intersect(t)}function et(a,t,r,n){var e=a.x,i=a.y,s=e-n.x,l=i-n.y,c=Math.sqrt(t*t*l*l+r*r*s*s),o=Math.abs(t*r*s/c);n.x0}function Et(a,t,r){var n=a.x,e=a.y,i=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof t.forEach=="function"?t.forEach(function(u){s=Math.min(s,u.x),l=Math.min(l,u.y)}):(s=Math.min(s,t.x),l=Math.min(l,t.y));for(var c=n-a.width/2-s,o=e-a.height/2-l,h=0;h1&&i.sort(function(u,k){var g=u.x-r.x,d=u.y-r.y,b=Math.sqrt(g*g+d*d),B=k.x-r.x,C=k.y-r.y,X=Math.sqrt(B*B+C*C);return b{var r=a.x,n=a.y,e=t.x-r,i=t.y-n,s=a.width/2,l=a.height/2,c,o;return Math.abs(i)*s>Math.abs(e)*l?(i<0&&(l=-l),c=i===0?0:l*e/i,o=l):(e<0&&(s=-s),c=s,o=e===0?0:s*i/e),{x:r+c,y:n+o}},Mt=Bt,m={node:vt,circle:Lt,ellipse:et,polygon:Et,rect:Mt},_t=async(a,t)=>{t.useHtmlLabels||w().flowchart.htmlLabels||(t.centerLabel=!0);const{shapeSvg:n,bbox:e,halfPadding:i}=await _(a,t,"node "+t.classes,!0);x.info("Classes = ",t.classes);const s=n.insert("rect",":first-child");return s.attr("rx",t.rx).attr("ry",t.ry).attr("x",-e.width/2-i).attr("y",-e.height/2-i).attr("width",e.width+t.padding).attr("height",e.height+t.padding),v(t,s),t.intersect=function(l){return m.rect(t,l)},n},Ct=_t,K=a=>a?" "+a:"",R=(a,t)=>`${t||"node default"}${K(a.classes)} ${K(a.class)}`,G=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.width+t.padding,i=n.height+t.padding,s=e+i,l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];x.info("Question main (Circle)");const c=N(r,s,s,l);return c.attr("style",t.style),v(t,c),t.intersect=function(o){return x.warn("Intersect called"),m.polygon(t,l,o)},r},Tt=(a,t)=>{const r=a.insert("g").attr("class","node default").attr("id",t.domId||t.id),n=28,e=[{x:0,y:n/2},{x:n/2,y:0},{x:0,y:-n/2},{x:-n/2,y:0}];return r.insert("polygon",":first-child").attr("points",e.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),t.width=28,t.height=28,t.intersect=function(s){return m.circle(t,14,s)},r},Rt=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=4,i=n.height+t.padding,s=i/e,l=n.width+2*s+t.padding,c=[{x:s,y:0},{x:l-s,y:0},{x:l,y:-i/2},{x:l-s,y:-i},{x:s,y:-i},{x:0,y:-i/2}],o=N(r,l,i,c);return o.attr("style",t.style),v(t,o),t.intersect=function(h){return m.polygon(t,c,h)},r},It=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.width+t.padding,i=n.height+t.padding,s=[{x:-i/2,y:0},{x:e,y:0},{x:e,y:-i},{x:-i/2,y:-i},{x:0,y:-i/2}];return N(r,e,i,s).attr("style",t.style),t.width=e+i,t.height=i,t.intersect=function(c){return m.polygon(t,s,c)},r},$t=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t),!0),e=n.width+t.padding,i=n.height+t.padding,s=[{x:-2*i/6,y:0},{x:e-i/6,y:0},{x:e+2*i/6,y:-i},{x:i/6,y:-i}],l=N(r,e,i,s);return l.attr("style",t.style),v(t,l),t.intersect=function(c){return m.polygon(t,s,c)},r},Ht=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.width+t.padding,i=n.height+t.padding,s=[{x:2*i/6,y:0},{x:e+i/6,y:0},{x:e-2*i/6,y:-i},{x:-i/6,y:-i}],l=N(r,e,i,s);return l.attr("style",t.style),v(t,l),t.intersect=function(c){return m.polygon(t,s,c)},r},Nt=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.width+t.padding,i=n.height+t.padding,s=[{x:-2*i/6,y:0},{x:e+2*i/6,y:0},{x:e-i/6,y:-i},{x:i/6,y:-i}],l=N(r,e,i,s);return l.attr("style",t.style),v(t,l),t.intersect=function(c){return m.polygon(t,s,c)},r},Ot=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.width+t.padding,i=n.height+t.padding,s=[{x:i/6,y:0},{x:e-i/6,y:0},{x:e+2*i/6,y:-i},{x:-2*i/6,y:-i}],l=N(r,e,i,s);return l.attr("style",t.style),v(t,l),t.intersect=function(c){return m.polygon(t,s,c)},r},Xt=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.width+t.padding,i=n.height+t.padding,s=[{x:0,y:0},{x:e+i/2,y:0},{x:e,y:-i/2},{x:e+i/2,y:-i},{x:0,y:-i}],l=N(r,e,i,s);return l.attr("style",t.style),v(t,l),t.intersect=function(c){return m.polygon(t,s,c)},r},Yt=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.width+t.padding,i=e/2,s=i/(2.5+e/50),l=n.height+s+t.padding,c="M 0,"+s+" a "+i+","+s+" 0,0,0 "+e+" 0 a "+i+","+s+" 0,0,0 "+-e+" 0 l 0,"+l+" a "+i+","+s+" 0,0,0 "+e+" 0 l 0,"+-l,o=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",t.style).attr("d",c).attr("transform","translate("+-e/2+","+-(l/2+s)+")");return v(t,o),t.intersect=function(h){const f=m.rect(t,h),y=f.x-t.x;if(i!=0&&(Math.abs(y)t.height/2-s)){let p=s*s*(1-y*y/(i*i));p!=0&&(p=Math.sqrt(p)),p=s-p,h.y-t.y>0&&(p=-p),f.y+=p}return f},r},Wt=async(a,t)=>{const{shapeSvg:r,bbox:n,halfPadding:e}=await _(a,t,"node "+t.classes+" "+t.class,!0),i=r.insert("rect",":first-child"),s=n.width+t.padding,l=n.height+t.padding;if(i.attr("class","basic label-container").attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",-n.width/2-e).attr("y",-n.height/2-e).attr("width",s).attr("height",l),t.props){const c=new Set(Object.keys(t.props));t.props.borders&&(st(i,t.props.borders,s,l),c.delete("borders")),c.forEach(o=>{x.warn(`Unknown node property ${o}`)})}return v(t,i),t.intersect=function(c){return m.rect(t,c)},r},Dt=async(a,t)=>{const{shapeSvg:r}=await _(a,t,"label",!0);x.trace("Classes = ",t.class);const n=r.insert("rect",":first-child"),e=0,i=0;if(n.attr("width",e).attr("height",i),r.attr("class","label edgeLabel"),t.props){const s=new Set(Object.keys(t.props));t.props.borders&&(st(n,t.props.borders,e,i),s.delete("borders")),s.forEach(l=>{x.warn(`Unknown node property ${l}`)})}return v(t,n),t.intersect=function(s){return m.rect(t,s)},r};function st(a,t,r,n){const e=[],i=l=>{e.push(l,0)},s=l=>{e.push(0,l)};t.includes("t")?(x.debug("add top border"),i(r)):s(r),t.includes("r")?(x.debug("add right border"),i(n)):s(n),t.includes("b")?(x.debug("add bottom border"),i(r)):s(r),t.includes("l")?(x.debug("add left border"),i(n)):s(n),a.attr("stroke-dasharray",e.join(" "))}const jt=(a,t)=>{let r;t.classes?r="node "+t.classes:r="node default";const n=a.insert("g").attr("class",r).attr("id",t.domId||t.id),e=n.insert("rect",":first-child"),i=n.insert("line"),s=n.insert("g").attr("class","label"),l=t.labelText.flat?t.labelText.flat():t.labelText;let c="";typeof l=="object"?c=l[0]:c=l,x.info("Label text abc79",c,l,typeof l=="object");const o=s.node().appendChild(I(c,t.labelStyle,!0,!0));let h={width:0,height:0};if($(w().flowchart.htmlLabels)){const k=o.children[0],g=M(o);h=k.getBoundingClientRect(),g.attr("width",h.width),g.attr("height",h.height)}x.info("Text 2",l);const f=l.slice(1,l.length);let y=o.getBBox();const p=s.node().appendChild(I(f.join?f.join("
          "):f,t.labelStyle,!0,!0));if($(w().flowchart.htmlLabels)){const k=p.children[0],g=M(p);h=k.getBoundingClientRect(),g.attr("width",h.width),g.attr("height",h.height)}const u=t.padding/2;return M(p).attr("transform","translate( "+(h.width>y.width?0:(y.width-h.width)/2)+", "+(y.height+u+5)+")"),M(o).attr("transform","translate( "+(h.width{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.height+t.padding,i=n.width+e/4+t.padding,s=r.insert("rect",":first-child").attr("style",t.style).attr("rx",e/2).attr("ry",e/2).attr("x",-i/2).attr("y",-e/2).attr("width",i).attr("height",e);return v(t,s),t.intersect=function(l){return m.rect(t,l)},r},Ut=async(a,t)=>{const{shapeSvg:r,bbox:n,halfPadding:e}=await _(a,t,R(t,void 0),!0),i=r.insert("circle",":first-child");return i.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",n.width/2+e).attr("width",n.width+t.padding).attr("height",n.height+t.padding),x.info("Circle main"),v(t,i),t.intersect=function(s){return x.info("Circle intersect",t,n.width/2+e,s),m.circle(t,n.width/2+e,s)},r},zt=async(a,t)=>{const{shapeSvg:r,bbox:n,halfPadding:e}=await _(a,t,R(t,void 0),!0),i=5,s=r.insert("g",":first-child"),l=s.insert("circle"),c=s.insert("circle");return s.attr("class",t.class),l.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",n.width/2+e+i).attr("width",n.width+t.padding+i*2).attr("height",n.height+t.padding+i*2),c.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",n.width/2+e).attr("width",n.width+t.padding).attr("height",n.height+t.padding),x.info("DoubleCircle main"),v(t,l),t.intersect=function(o){return x.info("DoubleCircle intersect",t,n.width/2+e+i,o),m.circle(t,n.width/2+e+i,o)},r},Zt=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.width+t.padding,i=n.height+t.padding,s=[{x:0,y:0},{x:e,y:0},{x:e,y:-i},{x:0,y:-i},{x:0,y:0},{x:-8,y:0},{x:e+8,y:0},{x:e+8,y:-i},{x:-8,y:-i},{x:-8,y:0}],l=N(r,e,i,s);return l.attr("style",t.style),v(t,l),t.intersect=function(c){return m.polygon(t,s,c)},r},Ft=(a,t)=>{const r=a.insert("g").attr("class","node default").attr("id",t.domId||t.id),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),v(t,n),t.intersect=function(e){return m.circle(t,7,e)},r},P=(a,t,r)=>{const n=a.insert("g").attr("class","node default").attr("id",t.domId||t.id);let e=70,i=10;r==="LR"&&(e=10,i=70);const s=n.append("rect").attr("x",-1*e/2).attr("y",-1*i/2).attr("width",e).attr("height",i).attr("class","fork-join");return v(t,s),t.height=t.height+t.padding/2,t.width=t.width+t.padding/2,t.intersect=function(l){return m.rect(t,l)},n},Qt=(a,t)=>{const r=a.insert("g").attr("class","node default").attr("id",t.domId||t.id),n=r.insert("circle",":first-child"),e=r.insert("circle",":first-child");return e.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),n.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),v(t,e),t.intersect=function(i){return m.circle(t,7,i)},r},Vt=(a,t)=>{const r=t.padding/2,n=4,e=8;let i;t.classes?i="node "+t.classes:i="node default";const s=a.insert("g").attr("class",i).attr("id",t.domId||t.id),l=s.insert("rect",":first-child"),c=s.insert("line"),o=s.insert("line");let h=0,f=n;const y=s.insert("g").attr("class","label");let p=0;const u=t.classData.annotations&&t.classData.annotations[0],k=t.classData.annotations[0]?"«"+t.classData.annotations[0]+"»":"",g=y.node().appendChild(I(k,t.labelStyle,!0,!0));let d=g.getBBox();if($(w().flowchart.htmlLabels)){const L=g.children[0],S=M(g);d=L.getBoundingClientRect(),S.attr("width",d.width),S.attr("height",d.height)}t.classData.annotations[0]&&(f+=d.height+n,h+=d.width);let b=t.classData.label;t.classData.type!==void 0&&t.classData.type!==""&&(w().flowchart.htmlLabels?b+="<"+t.classData.type+">":b+="<"+t.classData.type+">");const B=y.node().appendChild(I(b,t.labelStyle,!0,!0));M(B).attr("class","classTitle");let C=B.getBBox();if($(w().flowchart.htmlLabels)){const L=B.children[0],S=M(B);C=L.getBoundingClientRect(),S.attr("width",C.width),S.attr("height",C.height)}f+=C.height+n,C.width>h&&(h=C.width);const X=[];t.classData.members.forEach(L=>{const S=L.getDisplayDetails();let Y=S.displayText;w().flowchart.htmlLabels&&(Y=Y.replace(//g,">"));const H=y.node().appendChild(I(Y,S.cssStyle?S.cssStyle:t.labelStyle,!0,!0));let T=H.getBBox();if($(w().flowchart.htmlLabels)){const F=H.children[0],D=M(H);T=F.getBoundingClientRect(),D.attr("width",T.width),D.attr("height",T.height)}T.width>h&&(h=T.width),f+=T.height+n,X.push(H)}),f+=e;const V=[];if(t.classData.methods.forEach(L=>{const S=L.getDisplayDetails();let Y=S.displayText;w().flowchart.htmlLabels&&(Y=Y.replace(//g,">"));const H=y.node().appendChild(I(Y,S.cssStyle?S.cssStyle:t.labelStyle,!0,!0));let T=H.getBBox();if($(w().flowchart.htmlLabels)){const F=H.children[0],D=M(H);T=F.getBoundingClientRect(),D.attr("width",T.width),D.attr("height",T.height)}T.width>h&&(h=T.width),f+=T.height+n,V.push(H)}),f+=e,u){let L=(h-d.width)/2;M(g).attr("transform","translate( "+(-1*h/2+L)+", "+-1*f/2+")"),p=d.height+n}let it=(h-C.width)/2;return M(B).attr("transform","translate( "+(-1*h/2+it)+", "+(-1*f/2+p)+")"),p+=C.height+n,c.attr("class","divider").attr("x1",-h/2-r).attr("x2",h/2+r).attr("y1",-f/2-r+e+p).attr("y2",-f/2-r+e+p),p+=e,X.forEach(L=>{M(L).attr("transform","translate( "+-h/2+", "+(-1*f/2+p+e/2)+")");const S=L==null?void 0:L.getBBox();p+=((S==null?void 0:S.height)??0)+n}),p+=e,o.attr("class","divider").attr("x1",-h/2-r).attr("x2",h/2+r).attr("y1",-f/2-r+e+p).attr("y2",-f/2-r+e+p),p+=e,V.forEach(L=>{M(L).attr("transform","translate( "+-h/2+", "+(-1*f/2+p)+")");const S=L==null?void 0:L.getBBox();p+=((S==null?void 0:S.height)??0)+n}),l.attr("class","outer title-state").attr("x",-h/2-r).attr("y",-(f/2)-r).attr("width",h+t.padding).attr("height",f+t.padding),v(t,l),t.intersect=function(L){return m.rect(t,L)},s},tt={rhombus:G,question:G,rect:Wt,labelRect:Dt,rectWithTitle:jt,choice:Tt,circle:Ut,doublecircle:zt,stadium:At,hexagon:Rt,rect_left_inv_arrow:It,lean_right:$t,lean_left:Ht,trapezoid:Nt,inv_trapezoid:Ot,rect_right_inv_arrow:Xt,cylinder:Yt,start:Ft,end:Qt,note:Ct,subroutine:Zt,fork:P,join:P,class_box:Vt};let W={};const ar=async(a,t,r)=>{let n,e;if(t.link){let i;w().securityLevel==="sandbox"?i="_top":t.linkTarget&&(i=t.linkTarget||"_blank"),n=a.insert("svg:a").attr("xlink:href",t.link).attr("target",i),e=await tt[t.shape](n,t,r)}else e=await tt[t.shape](a,t,r),n=e;return t.tooltip&&e.attr("title",t.tooltip),t.class&&e.attr("class","node default "+t.class),W[t.id]=n,t.haveCallback&&W[t.id].attr("class",W[t.id].attr("class")+" clickable"),n},er=(a,t)=>{W[t.id]=a},sr=()=>{W={}},ir=a=>{const t=W[a.id];x.trace("Transforming node",a.diff,a,"translate("+(a.x-a.width/2-5)+", "+a.width/2+")");const r=8,n=a.diff||0;return a.clusterNode?t.attr("transform","translate("+(a.x+n-a.width/2)+", "+(a.y-a.height/2-r)+")"):t.attr("transform","translate("+a.x+", "+a.y+")"),n},O={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:5.3};function A(a,t){a=z(a),t=z(t);const[r,n]=[a.x,a.y],[e,i]=[t.x,t.y],s=e-r,l=i-n;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}const z=a=>Array.isArray(a)?{x:a[0],y:a[1]}:a,qt=a=>({x:function(t,r,n){let e=0;if(r===0&&Object.hasOwn(O,a.arrowTypeStart)){const{angle:i,deltaX:s}=A(n[0],n[1]);e=O[a.arrowTypeStart]*Math.cos(i)*(s>=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(O,a.arrowTypeEnd)){const{angle:i,deltaX:s}=A(n[n.length-1],n[n.length-2]);e=O[a.arrowTypeEnd]*Math.cos(i)*(s>=0?1:-1)}return z(t).x+e},y:function(t,r,n){let e=0;if(r===0&&Object.hasOwn(O,a.arrowTypeStart)){const{angle:i,deltaY:s}=A(n[0],n[1]);e=O[a.arrowTypeStart]*Math.abs(Math.sin(i))*(s>=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(O,a.arrowTypeEnd)){const{angle:i,deltaY:s}=A(n[n.length-1],n[n.length-2]);e=O[a.arrowTypeEnd]*Math.abs(Math.sin(i))*(s>=0?1:-1)}return z(t).y+e}});let Z={},E={};const nr=()=>{Z={},E={}},lr=(a,t)=>{const r=$(w().flowchart.htmlLabels),n=t.labelType==="markdown"?at(a,t.label,{style:t.labelStyle,useHtmlLabels:r,addSvgBackground:!0}):I(t.label,t.labelStyle);x.info("abc82",t,t.labelType);const e=a.insert("g").attr("class","edgeLabel"),i=e.insert("g").attr("class","label");i.node().appendChild(n);let s=n.getBBox();if(r){const c=n.children[0],o=M(n);s=c.getBoundingClientRect(),o.attr("width",s.width),o.attr("height",s.height)}i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),Z[t.id]=e,t.width=s.width,t.height=s.height;let l;if(t.startLabelLeft){const c=I(t.startLabelLeft,t.labelStyle),o=a.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");l=h.node().appendChild(c);const f=c.getBBox();h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),E[t.id]||(E[t.id]={}),E[t.id].startLeft=o,U(l,t.startLabelLeft)}if(t.startLabelRight){const c=I(t.startLabelRight,t.labelStyle),o=a.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");l=o.node().appendChild(c),h.node().appendChild(c);const f=c.getBBox();h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),E[t.id]||(E[t.id]={}),E[t.id].startRight=o,U(l,t.startLabelRight)}if(t.endLabelLeft){const c=I(t.endLabelLeft,t.labelStyle),o=a.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");l=h.node().appendChild(c);const f=c.getBBox();h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),o.node().appendChild(c),E[t.id]||(E[t.id]={}),E[t.id].endLeft=o,U(l,t.endLabelLeft)}if(t.endLabelRight){const c=I(t.endLabelRight,t.labelStyle),o=a.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");l=h.node().appendChild(c);const f=c.getBBox();h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),o.node().appendChild(c),E[t.id]||(E[t.id]={}),E[t.id].endRight=o,U(l,t.endLabelRight)}return n};function U(a,t){w().flowchart.htmlLabels&&a&&(a.style.width=t.length*9+"px",a.style.height="12px")}const cr=(a,t)=>{x.info("Moving label abc78 ",a.id,a.label,Z[a.id]);let r=t.updatedPath?t.updatedPath:t.originalPath;if(a.label){const n=Z[a.id];let e=a.x,i=a.y;if(r){const s=j.calcLabelPosition(r);x.info("Moving label "+a.label+" from (",e,",",i,") to (",s.x,",",s.y,") abc78"),t.updatedPath&&(e=s.x,i=s.y)}n.attr("transform","translate("+e+", "+i+")")}if(a.startLabelLeft){const n=E[a.id].startLeft;let e=a.x,i=a.y;if(r){const s=j.calcTerminalLabelPosition(a.arrowTypeStart?10:0,"start_left",r);e=s.x,i=s.y}n.attr("transform","translate("+e+", "+i+")")}if(a.startLabelRight){const n=E[a.id].startRight;let e=a.x,i=a.y;if(r){const s=j.calcTerminalLabelPosition(a.arrowTypeStart?10:0,"start_right",r);e=s.x,i=s.y}n.attr("transform","translate("+e+", "+i+")")}if(a.endLabelLeft){const n=E[a.id].endLeft;let e=a.x,i=a.y;if(r){const s=j.calcTerminalLabelPosition(a.arrowTypeEnd?10:0,"end_left",r);e=s.x,i=s.y}n.attr("transform","translate("+e+", "+i+")")}if(a.endLabelRight){const n=E[a.id].endRight;let e=a.x,i=a.y;if(r){const s=j.calcTerminalLabelPosition(a.arrowTypeEnd?10:0,"end_right",r);e=s.x,i=s.y}n.attr("transform","translate("+e+", "+i+")")}},Jt=(a,t)=>{const r=a.x,n=a.y,e=Math.abs(t.x-r),i=Math.abs(t.y-n),s=a.width/2,l=a.height/2;return e>=s||i>=l},Kt=(a,t,r)=>{x.warn(`intersection calc abc89: +import{q as $,c as w,d as q,an as Q,h as M,l as x,y as j,ao as nt}from"./mermaid.core-QJnSHCal.js";import{c as at}from"./createText-aebacdfe-8FzA6VnR.js";import{l as lt}from"./line-ZVNdUhg2.js";const ct=(a,t,r,n)=>{t.forEach(e=>{ut[e](a,r,n)})},ht=(a,t,r)=>{x.trace("Making markers for ",r),a.append("defs").append("marker").attr("id",r+"_"+t+"-extensionStart").attr("class","marker extension "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),a.append("defs").append("marker").attr("id",r+"_"+t+"-extensionEnd").attr("class","marker extension "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},ot=(a,t,r)=>{a.append("defs").append("marker").attr("id",r+"_"+t+"-compositionStart").attr("class","marker composition "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),a.append("defs").append("marker").attr("id",r+"_"+t+"-compositionEnd").attr("class","marker composition "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},ft=(a,t,r)=>{a.append("defs").append("marker").attr("id",r+"_"+t+"-aggregationStart").attr("class","marker aggregation "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),a.append("defs").append("marker").attr("id",r+"_"+t+"-aggregationEnd").attr("class","marker aggregation "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},pt=(a,t,r)=>{a.append("defs").append("marker").attr("id",r+"_"+t+"-dependencyStart").attr("class","marker dependency "+t).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),a.append("defs").append("marker").attr("id",r+"_"+t+"-dependencyEnd").attr("class","marker dependency "+t).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},yt=(a,t,r)=>{a.append("defs").append("marker").attr("id",r+"_"+t+"-lollipopStart").attr("class","marker lollipop "+t).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),a.append("defs").append("marker").attr("id",r+"_"+t+"-lollipopEnd").attr("class","marker lollipop "+t).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},dt=(a,t,r)=>{a.append("marker").attr("id",r+"_"+t+"-pointEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),a.append("marker").attr("id",r+"_"+t+"-pointStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},xt=(a,t,r)=>{a.append("marker").attr("id",r+"_"+t+"-circleEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),a.append("marker").attr("id",r+"_"+t+"-circleStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},bt=(a,t,r)=>{a.append("marker").attr("id",r+"_"+t+"-crossEnd").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),a.append("marker").attr("id",r+"_"+t+"-crossStart").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},gt=(a,t,r)=>{a.append("defs").append("marker").attr("id",r+"_"+t+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},ut={extension:ht,composition:ot,aggregation:ft,dependency:pt,lollipop:yt,point:dt,circle:xt,cross:bt,barb:gt},rr=ct;function wt(a,t){t&&a.attr("style",t)}function mt(a){const t=M(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=t.append("xhtml:div"),n=a.label,e=a.isNode?"nodeLabel":"edgeLabel";return r.html('"+n+""),wt(r,a.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),t.node()}const kt=(a,t,r,n)=>{let e=a||"";if(typeof e=="object"&&(e=e[0]),$(w().flowchart.htmlLabels)){e=e.replace(/\\n|\n/g,"
          "),x.info("vertexText"+e);const i={isNode:n,label:Q(e).replace(/fa[blrs]?:fa-[\w-]+/g,l=>``),labelStyle:t.replace("fill:","color:")};return mt(i)}else{const i=document.createElementNS("http://www.w3.org/2000/svg","text");i.setAttribute("style",t.replace("color:","fill:"));let s=[];typeof e=="string"?s=e.split(/\\n|\n|/gi):Array.isArray(e)?s=e:s=[];for(const l of s){const c=document.createElementNS("http://www.w3.org/2000/svg","tspan");c.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),c.setAttribute("dy","1em"),c.setAttribute("x","0"),r?c.setAttribute("class","title-row"):c.setAttribute("class","row"),c.textContent=l.trim(),i.appendChild(c)}return i}},I=kt,_=async(a,t,r,n)=>{let e;const i=t.useHtmlLabels||$(w().flowchart.htmlLabels);r?e=r:e="node default";const s=a.insert("g").attr("class",e).attr("id",t.domId||t.id),l=s.insert("g").attr("class","label").attr("style",t.labelStyle);let c;t.labelText===void 0?c="":c=typeof t.labelText=="string"?t.labelText:t.labelText[0];const o=l.node();let h;t.labelType==="markdown"?h=at(l,q(Q(c),w()),{useHtmlLabels:i,width:t.width||w().flowchart.wrappingWidth,classes:"markdown-node-label"}):h=o.appendChild(I(q(Q(c),w()),t.labelStyle,!1,n));let f=h.getBBox();const y=t.padding/2;if($(w().flowchart.htmlLabels)){const p=h.children[0],u=M(h),k=p.getElementsByTagName("img");if(k){const g=c.replace(/]*>/g,"").trim()==="";await Promise.all([...k].map(d=>new Promise(b=>{function B(){if(d.style.display="flex",d.style.flexDirection="column",g){const C=w().fontSize?w().fontSize:window.getComputedStyle(document.body).fontSize,X=5;d.style.width=parseInt(C,10)*X+"px"}else d.style.width="100%";b(d)}setTimeout(()=>{d.complete&&B()}),d.addEventListener("error",B),d.addEventListener("load",B)})))}f=p.getBoundingClientRect(),u.attr("width",f.width),u.attr("height",f.height)}return i?l.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"):l.attr("transform","translate(0, "+-f.height/2+")"),t.centerLabel&&l.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),l.insert("rect",":first-child"),{shapeSvg:s,bbox:f,halfPadding:y,label:l}},v=(a,t)=>{const r=t.node().getBBox();a.width=r.width,a.height=r.height};function N(a,t,r,n){return a.insert("polygon",":first-child").attr("points",n.map(function(e){return e.x+","+e.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-t/2+","+r/2+")")}function vt(a,t){return a.intersect(t)}function et(a,t,r,n){var e=a.x,i=a.y,s=e-n.x,l=i-n.y,c=Math.sqrt(t*t*l*l+r*r*s*s),o=Math.abs(t*r*s/c);n.x0}function Et(a,t,r){var n=a.x,e=a.y,i=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof t.forEach=="function"?t.forEach(function(u){s=Math.min(s,u.x),l=Math.min(l,u.y)}):(s=Math.min(s,t.x),l=Math.min(l,t.y));for(var c=n-a.width/2-s,o=e-a.height/2-l,h=0;h1&&i.sort(function(u,k){var g=u.x-r.x,d=u.y-r.y,b=Math.sqrt(g*g+d*d),B=k.x-r.x,C=k.y-r.y,X=Math.sqrt(B*B+C*C);return b{var r=a.x,n=a.y,e=t.x-r,i=t.y-n,s=a.width/2,l=a.height/2,c,o;return Math.abs(i)*s>Math.abs(e)*l?(i<0&&(l=-l),c=i===0?0:l*e/i,o=l):(e<0&&(s=-s),c=s,o=e===0?0:s*i/e),{x:r+c,y:n+o}},Mt=Bt,m={node:vt,circle:Lt,ellipse:et,polygon:Et,rect:Mt},_t=async(a,t)=>{t.useHtmlLabels||w().flowchart.htmlLabels||(t.centerLabel=!0);const{shapeSvg:n,bbox:e,halfPadding:i}=await _(a,t,"node "+t.classes,!0);x.info("Classes = ",t.classes);const s=n.insert("rect",":first-child");return s.attr("rx",t.rx).attr("ry",t.ry).attr("x",-e.width/2-i).attr("y",-e.height/2-i).attr("width",e.width+t.padding).attr("height",e.height+t.padding),v(t,s),t.intersect=function(l){return m.rect(t,l)},n},Ct=_t,K=a=>a?" "+a:"",R=(a,t)=>`${t||"node default"}${K(a.classes)} ${K(a.class)}`,G=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.width+t.padding,i=n.height+t.padding,s=e+i,l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];x.info("Question main (Circle)");const c=N(r,s,s,l);return c.attr("style",t.style),v(t,c),t.intersect=function(o){return x.warn("Intersect called"),m.polygon(t,l,o)},r},Tt=(a,t)=>{const r=a.insert("g").attr("class","node default").attr("id",t.domId||t.id),n=28,e=[{x:0,y:n/2},{x:n/2,y:0},{x:0,y:-n/2},{x:-n/2,y:0}];return r.insert("polygon",":first-child").attr("points",e.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),t.width=28,t.height=28,t.intersect=function(s){return m.circle(t,14,s)},r},Rt=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=4,i=n.height+t.padding,s=i/e,l=n.width+2*s+t.padding,c=[{x:s,y:0},{x:l-s,y:0},{x:l,y:-i/2},{x:l-s,y:-i},{x:s,y:-i},{x:0,y:-i/2}],o=N(r,l,i,c);return o.attr("style",t.style),v(t,o),t.intersect=function(h){return m.polygon(t,c,h)},r},It=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.width+t.padding,i=n.height+t.padding,s=[{x:-i/2,y:0},{x:e,y:0},{x:e,y:-i},{x:-i/2,y:-i},{x:0,y:-i/2}];return N(r,e,i,s).attr("style",t.style),t.width=e+i,t.height=i,t.intersect=function(c){return m.polygon(t,s,c)},r},$t=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t),!0),e=n.width+t.padding,i=n.height+t.padding,s=[{x:-2*i/6,y:0},{x:e-i/6,y:0},{x:e+2*i/6,y:-i},{x:i/6,y:-i}],l=N(r,e,i,s);return l.attr("style",t.style),v(t,l),t.intersect=function(c){return m.polygon(t,s,c)},r},Ht=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.width+t.padding,i=n.height+t.padding,s=[{x:2*i/6,y:0},{x:e+i/6,y:0},{x:e-2*i/6,y:-i},{x:-i/6,y:-i}],l=N(r,e,i,s);return l.attr("style",t.style),v(t,l),t.intersect=function(c){return m.polygon(t,s,c)},r},Nt=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.width+t.padding,i=n.height+t.padding,s=[{x:-2*i/6,y:0},{x:e+2*i/6,y:0},{x:e-i/6,y:-i},{x:i/6,y:-i}],l=N(r,e,i,s);return l.attr("style",t.style),v(t,l),t.intersect=function(c){return m.polygon(t,s,c)},r},Ot=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.width+t.padding,i=n.height+t.padding,s=[{x:i/6,y:0},{x:e-i/6,y:0},{x:e+2*i/6,y:-i},{x:-2*i/6,y:-i}],l=N(r,e,i,s);return l.attr("style",t.style),v(t,l),t.intersect=function(c){return m.polygon(t,s,c)},r},Xt=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.width+t.padding,i=n.height+t.padding,s=[{x:0,y:0},{x:e+i/2,y:0},{x:e,y:-i/2},{x:e+i/2,y:-i},{x:0,y:-i}],l=N(r,e,i,s);return l.attr("style",t.style),v(t,l),t.intersect=function(c){return m.polygon(t,s,c)},r},Yt=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.width+t.padding,i=e/2,s=i/(2.5+e/50),l=n.height+s+t.padding,c="M 0,"+s+" a "+i+","+s+" 0,0,0 "+e+" 0 a "+i+","+s+" 0,0,0 "+-e+" 0 l 0,"+l+" a "+i+","+s+" 0,0,0 "+e+" 0 l 0,"+-l,o=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",t.style).attr("d",c).attr("transform","translate("+-e/2+","+-(l/2+s)+")");return v(t,o),t.intersect=function(h){const f=m.rect(t,h),y=f.x-t.x;if(i!=0&&(Math.abs(y)t.height/2-s)){let p=s*s*(1-y*y/(i*i));p!=0&&(p=Math.sqrt(p)),p=s-p,h.y-t.y>0&&(p=-p),f.y+=p}return f},r},Wt=async(a,t)=>{const{shapeSvg:r,bbox:n,halfPadding:e}=await _(a,t,"node "+t.classes+" "+t.class,!0),i=r.insert("rect",":first-child"),s=n.width+t.padding,l=n.height+t.padding;if(i.attr("class","basic label-container").attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",-n.width/2-e).attr("y",-n.height/2-e).attr("width",s).attr("height",l),t.props){const c=new Set(Object.keys(t.props));t.props.borders&&(st(i,t.props.borders,s,l),c.delete("borders")),c.forEach(o=>{x.warn(`Unknown node property ${o}`)})}return v(t,i),t.intersect=function(c){return m.rect(t,c)},r},Dt=async(a,t)=>{const{shapeSvg:r}=await _(a,t,"label",!0);x.trace("Classes = ",t.class);const n=r.insert("rect",":first-child"),e=0,i=0;if(n.attr("width",e).attr("height",i),r.attr("class","label edgeLabel"),t.props){const s=new Set(Object.keys(t.props));t.props.borders&&(st(n,t.props.borders,e,i),s.delete("borders")),s.forEach(l=>{x.warn(`Unknown node property ${l}`)})}return v(t,n),t.intersect=function(s){return m.rect(t,s)},r};function st(a,t,r,n){const e=[],i=l=>{e.push(l,0)},s=l=>{e.push(0,l)};t.includes("t")?(x.debug("add top border"),i(r)):s(r),t.includes("r")?(x.debug("add right border"),i(n)):s(n),t.includes("b")?(x.debug("add bottom border"),i(r)):s(r),t.includes("l")?(x.debug("add left border"),i(n)):s(n),a.attr("stroke-dasharray",e.join(" "))}const jt=(a,t)=>{let r;t.classes?r="node "+t.classes:r="node default";const n=a.insert("g").attr("class",r).attr("id",t.domId||t.id),e=n.insert("rect",":first-child"),i=n.insert("line"),s=n.insert("g").attr("class","label"),l=t.labelText.flat?t.labelText.flat():t.labelText;let c="";typeof l=="object"?c=l[0]:c=l,x.info("Label text abc79",c,l,typeof l=="object");const o=s.node().appendChild(I(c,t.labelStyle,!0,!0));let h={width:0,height:0};if($(w().flowchart.htmlLabels)){const k=o.children[0],g=M(o);h=k.getBoundingClientRect(),g.attr("width",h.width),g.attr("height",h.height)}x.info("Text 2",l);const f=l.slice(1,l.length);let y=o.getBBox();const p=s.node().appendChild(I(f.join?f.join("
          "):f,t.labelStyle,!0,!0));if($(w().flowchart.htmlLabels)){const k=p.children[0],g=M(p);h=k.getBoundingClientRect(),g.attr("width",h.width),g.attr("height",h.height)}const u=t.padding/2;return M(p).attr("transform","translate( "+(h.width>y.width?0:(y.width-h.width)/2)+", "+(y.height+u+5)+")"),M(o).attr("transform","translate( "+(h.width{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.height+t.padding,i=n.width+e/4+t.padding,s=r.insert("rect",":first-child").attr("style",t.style).attr("rx",e/2).attr("ry",e/2).attr("x",-i/2).attr("y",-e/2).attr("width",i).attr("height",e);return v(t,s),t.intersect=function(l){return m.rect(t,l)},r},Ut=async(a,t)=>{const{shapeSvg:r,bbox:n,halfPadding:e}=await _(a,t,R(t,void 0),!0),i=r.insert("circle",":first-child");return i.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",n.width/2+e).attr("width",n.width+t.padding).attr("height",n.height+t.padding),x.info("Circle main"),v(t,i),t.intersect=function(s){return x.info("Circle intersect",t,n.width/2+e,s),m.circle(t,n.width/2+e,s)},r},zt=async(a,t)=>{const{shapeSvg:r,bbox:n,halfPadding:e}=await _(a,t,R(t,void 0),!0),i=5,s=r.insert("g",":first-child"),l=s.insert("circle"),c=s.insert("circle");return s.attr("class",t.class),l.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",n.width/2+e+i).attr("width",n.width+t.padding+i*2).attr("height",n.height+t.padding+i*2),c.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",n.width/2+e).attr("width",n.width+t.padding).attr("height",n.height+t.padding),x.info("DoubleCircle main"),v(t,l),t.intersect=function(o){return x.info("DoubleCircle intersect",t,n.width/2+e+i,o),m.circle(t,n.width/2+e+i,o)},r},Zt=async(a,t)=>{const{shapeSvg:r,bbox:n}=await _(a,t,R(t,void 0),!0),e=n.width+t.padding,i=n.height+t.padding,s=[{x:0,y:0},{x:e,y:0},{x:e,y:-i},{x:0,y:-i},{x:0,y:0},{x:-8,y:0},{x:e+8,y:0},{x:e+8,y:-i},{x:-8,y:-i},{x:-8,y:0}],l=N(r,e,i,s);return l.attr("style",t.style),v(t,l),t.intersect=function(c){return m.polygon(t,s,c)},r},Ft=(a,t)=>{const r=a.insert("g").attr("class","node default").attr("id",t.domId||t.id),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),v(t,n),t.intersect=function(e){return m.circle(t,7,e)},r},P=(a,t,r)=>{const n=a.insert("g").attr("class","node default").attr("id",t.domId||t.id);let e=70,i=10;r==="LR"&&(e=10,i=70);const s=n.append("rect").attr("x",-1*e/2).attr("y",-1*i/2).attr("width",e).attr("height",i).attr("class","fork-join");return v(t,s),t.height=t.height+t.padding/2,t.width=t.width+t.padding/2,t.intersect=function(l){return m.rect(t,l)},n},Qt=(a,t)=>{const r=a.insert("g").attr("class","node default").attr("id",t.domId||t.id),n=r.insert("circle",":first-child"),e=r.insert("circle",":first-child");return e.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),n.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),v(t,e),t.intersect=function(i){return m.circle(t,7,i)},r},Vt=(a,t)=>{const r=t.padding/2,n=4,e=8;let i;t.classes?i="node "+t.classes:i="node default";const s=a.insert("g").attr("class",i).attr("id",t.domId||t.id),l=s.insert("rect",":first-child"),c=s.insert("line"),o=s.insert("line");let h=0,f=n;const y=s.insert("g").attr("class","label");let p=0;const u=t.classData.annotations&&t.classData.annotations[0],k=t.classData.annotations[0]?"«"+t.classData.annotations[0]+"»":"",g=y.node().appendChild(I(k,t.labelStyle,!0,!0));let d=g.getBBox();if($(w().flowchart.htmlLabels)){const L=g.children[0],S=M(g);d=L.getBoundingClientRect(),S.attr("width",d.width),S.attr("height",d.height)}t.classData.annotations[0]&&(f+=d.height+n,h+=d.width);let b=t.classData.label;t.classData.type!==void 0&&t.classData.type!==""&&(w().flowchart.htmlLabels?b+="<"+t.classData.type+">":b+="<"+t.classData.type+">");const B=y.node().appendChild(I(b,t.labelStyle,!0,!0));M(B).attr("class","classTitle");let C=B.getBBox();if($(w().flowchart.htmlLabels)){const L=B.children[0],S=M(B);C=L.getBoundingClientRect(),S.attr("width",C.width),S.attr("height",C.height)}f+=C.height+n,C.width>h&&(h=C.width);const X=[];t.classData.members.forEach(L=>{const S=L.getDisplayDetails();let Y=S.displayText;w().flowchart.htmlLabels&&(Y=Y.replace(//g,">"));const H=y.node().appendChild(I(Y,S.cssStyle?S.cssStyle:t.labelStyle,!0,!0));let T=H.getBBox();if($(w().flowchart.htmlLabels)){const F=H.children[0],D=M(H);T=F.getBoundingClientRect(),D.attr("width",T.width),D.attr("height",T.height)}T.width>h&&(h=T.width),f+=T.height+n,X.push(H)}),f+=e;const V=[];if(t.classData.methods.forEach(L=>{const S=L.getDisplayDetails();let Y=S.displayText;w().flowchart.htmlLabels&&(Y=Y.replace(//g,">"));const H=y.node().appendChild(I(Y,S.cssStyle?S.cssStyle:t.labelStyle,!0,!0));let T=H.getBBox();if($(w().flowchart.htmlLabels)){const F=H.children[0],D=M(H);T=F.getBoundingClientRect(),D.attr("width",T.width),D.attr("height",T.height)}T.width>h&&(h=T.width),f+=T.height+n,V.push(H)}),f+=e,u){let L=(h-d.width)/2;M(g).attr("transform","translate( "+(-1*h/2+L)+", "+-1*f/2+")"),p=d.height+n}let it=(h-C.width)/2;return M(B).attr("transform","translate( "+(-1*h/2+it)+", "+(-1*f/2+p)+")"),p+=C.height+n,c.attr("class","divider").attr("x1",-h/2-r).attr("x2",h/2+r).attr("y1",-f/2-r+e+p).attr("y2",-f/2-r+e+p),p+=e,X.forEach(L=>{M(L).attr("transform","translate( "+-h/2+", "+(-1*f/2+p+e/2)+")");const S=L==null?void 0:L.getBBox();p+=((S==null?void 0:S.height)??0)+n}),p+=e,o.attr("class","divider").attr("x1",-h/2-r).attr("x2",h/2+r).attr("y1",-f/2-r+e+p).attr("y2",-f/2-r+e+p),p+=e,V.forEach(L=>{M(L).attr("transform","translate( "+-h/2+", "+(-1*f/2+p)+")");const S=L==null?void 0:L.getBBox();p+=((S==null?void 0:S.height)??0)+n}),l.attr("class","outer title-state").attr("x",-h/2-r).attr("y",-(f/2)-r).attr("width",h+t.padding).attr("height",f+t.padding),v(t,l),t.intersect=function(L){return m.rect(t,L)},s},tt={rhombus:G,question:G,rect:Wt,labelRect:Dt,rectWithTitle:jt,choice:Tt,circle:Ut,doublecircle:zt,stadium:At,hexagon:Rt,rect_left_inv_arrow:It,lean_right:$t,lean_left:Ht,trapezoid:Nt,inv_trapezoid:Ot,rect_right_inv_arrow:Xt,cylinder:Yt,start:Ft,end:Qt,note:Ct,subroutine:Zt,fork:P,join:P,class_box:Vt};let W={};const ar=async(a,t,r)=>{let n,e;if(t.link){let i;w().securityLevel==="sandbox"?i="_top":t.linkTarget&&(i=t.linkTarget||"_blank"),n=a.insert("svg:a").attr("xlink:href",t.link).attr("target",i),e=await tt[t.shape](n,t,r)}else e=await tt[t.shape](a,t,r),n=e;return t.tooltip&&e.attr("title",t.tooltip),t.class&&e.attr("class","node default "+t.class),W[t.id]=n,t.haveCallback&&W[t.id].attr("class",W[t.id].attr("class")+" clickable"),n},er=(a,t)=>{W[t.id]=a},sr=()=>{W={}},ir=a=>{const t=W[a.id];x.trace("Transforming node",a.diff,a,"translate("+(a.x-a.width/2-5)+", "+a.width/2+")");const r=8,n=a.diff||0;return a.clusterNode?t.attr("transform","translate("+(a.x+n-a.width/2)+", "+(a.y-a.height/2-r)+")"):t.attr("transform","translate("+a.x+", "+a.y+")"),n},O={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:5.3};function A(a,t){a=z(a),t=z(t);const[r,n]=[a.x,a.y],[e,i]=[t.x,t.y],s=e-r,l=i-n;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}const z=a=>Array.isArray(a)?{x:a[0],y:a[1]}:a,qt=a=>({x:function(t,r,n){let e=0;if(r===0&&Object.hasOwn(O,a.arrowTypeStart)){const{angle:i,deltaX:s}=A(n[0],n[1]);e=O[a.arrowTypeStart]*Math.cos(i)*(s>=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(O,a.arrowTypeEnd)){const{angle:i,deltaX:s}=A(n[n.length-1],n[n.length-2]);e=O[a.arrowTypeEnd]*Math.cos(i)*(s>=0?1:-1)}return z(t).x+e},y:function(t,r,n){let e=0;if(r===0&&Object.hasOwn(O,a.arrowTypeStart)){const{angle:i,deltaY:s}=A(n[0],n[1]);e=O[a.arrowTypeStart]*Math.abs(Math.sin(i))*(s>=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(O,a.arrowTypeEnd)){const{angle:i,deltaY:s}=A(n[n.length-1],n[n.length-2]);e=O[a.arrowTypeEnd]*Math.abs(Math.sin(i))*(s>=0?1:-1)}return z(t).y+e}});let Z={},E={};const nr=()=>{Z={},E={}},lr=(a,t)=>{const r=$(w().flowchart.htmlLabels),n=t.labelType==="markdown"?at(a,t.label,{style:t.labelStyle,useHtmlLabels:r,addSvgBackground:!0}):I(t.label,t.labelStyle);x.info("abc82",t,t.labelType);const e=a.insert("g").attr("class","edgeLabel"),i=e.insert("g").attr("class","label");i.node().appendChild(n);let s=n.getBBox();if(r){const c=n.children[0],o=M(n);s=c.getBoundingClientRect(),o.attr("width",s.width),o.attr("height",s.height)}i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),Z[t.id]=e,t.width=s.width,t.height=s.height;let l;if(t.startLabelLeft){const c=I(t.startLabelLeft,t.labelStyle),o=a.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");l=h.node().appendChild(c);const f=c.getBBox();h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),E[t.id]||(E[t.id]={}),E[t.id].startLeft=o,U(l,t.startLabelLeft)}if(t.startLabelRight){const c=I(t.startLabelRight,t.labelStyle),o=a.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");l=o.node().appendChild(c),h.node().appendChild(c);const f=c.getBBox();h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),E[t.id]||(E[t.id]={}),E[t.id].startRight=o,U(l,t.startLabelRight)}if(t.endLabelLeft){const c=I(t.endLabelLeft,t.labelStyle),o=a.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");l=h.node().appendChild(c);const f=c.getBBox();h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),o.node().appendChild(c),E[t.id]||(E[t.id]={}),E[t.id].endLeft=o,U(l,t.endLabelLeft)}if(t.endLabelRight){const c=I(t.endLabelRight,t.labelStyle),o=a.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");l=h.node().appendChild(c);const f=c.getBBox();h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),o.node().appendChild(c),E[t.id]||(E[t.id]={}),E[t.id].endRight=o,U(l,t.endLabelRight)}return n};function U(a,t){w().flowchart.htmlLabels&&a&&(a.style.width=t.length*9+"px",a.style.height="12px")}const cr=(a,t)=>{x.info("Moving label abc78 ",a.id,a.label,Z[a.id]);let r=t.updatedPath?t.updatedPath:t.originalPath;if(a.label){const n=Z[a.id];let e=a.x,i=a.y;if(r){const s=j.calcLabelPosition(r);x.info("Moving label "+a.label+" from (",e,",",i,") to (",s.x,",",s.y,") abc78"),t.updatedPath&&(e=s.x,i=s.y)}n.attr("transform","translate("+e+", "+i+")")}if(a.startLabelLeft){const n=E[a.id].startLeft;let e=a.x,i=a.y;if(r){const s=j.calcTerminalLabelPosition(a.arrowTypeStart?10:0,"start_left",r);e=s.x,i=s.y}n.attr("transform","translate("+e+", "+i+")")}if(a.startLabelRight){const n=E[a.id].startRight;let e=a.x,i=a.y;if(r){const s=j.calcTerminalLabelPosition(a.arrowTypeStart?10:0,"start_right",r);e=s.x,i=s.y}n.attr("transform","translate("+e+", "+i+")")}if(a.endLabelLeft){const n=E[a.id].endLeft;let e=a.x,i=a.y;if(r){const s=j.calcTerminalLabelPosition(a.arrowTypeEnd?10:0,"end_left",r);e=s.x,i=s.y}n.attr("transform","translate("+e+", "+i+")")}if(a.endLabelRight){const n=E[a.id].endRight;let e=a.x,i=a.y;if(r){const s=j.calcTerminalLabelPosition(a.arrowTypeEnd?10:0,"end_right",r);e=s.x,i=s.y}n.attr("transform","translate("+e+", "+i+")")}},Jt=(a,t)=>{const r=a.x,n=a.y,e=Math.abs(t.x-r),i=Math.abs(t.y-n),s=a.width/2,l=a.height/2;return e>=s||i>=l},Kt=(a,t,r)=>{x.warn(`intersection calc abc89: outsidePoint: ${JSON.stringify(t)} insidePoint : ${JSON.stringify(r)} node : x:${a.x} y:${a.y} w:${a.width} h:${a.height}`);const n=a.x,e=a.y,i=Math.abs(n-r.x),s=a.width/2;let l=r.xMath.abs(n-t.x)*c){let f=r.y{x.warn("abc88 cutPathAtIntersect",a,t);let r=[],n=a[0],e=!1;return a.forEach(i=>{if(x.info("abc88 checking point",i,t),!Jt(t,i)&&!e){const s=Kt(t,n,i);x.warn("abc88 inside",i,n,s),x.warn("abc88 intersection",s);let l=!1;r.forEach(c=>{l=l||c.x===s.x&&c.y===s.y}),r.some(c=>c.x===s.x&&c.y===s.y)?x.warn("abc88 no intersect",s,r):r.push(s),e=!0}else x.warn("abc88 outside",i,n),n=i,e||r.push(i)}),x.warn("abc88 returning points",r),r},hr=function(a,t,r,n,e,i,s){let l=r.points,c=!1;const o=i.node(t.v);var h=i.node(t.w);x.info("abc88 InsertEdge: ",r),h.intersect&&o.intersect&&(l=l.slice(1,r.points.length-1),l.unshift(o.intersect(l[0])),x.info("Last point",l[l.length-1],h,h.intersect(l[l.length-1])),l.push(h.intersect(l[l.length-1]))),r.toCluster&&(x.info("to cluster abc88",n[r.toCluster]),l=rt(r.points,n[r.toCluster].node),c=!0),r.fromCluster&&(x.info("from cluster abc88",n[r.fromCluster]),l=rt(l.reverse(),n[r.fromCluster].node).reverse(),c=!0);const f=l.filter(C=>!Number.isNaN(C.y));let y=nt;r.curve&&(e==="graph"||e==="flowchart")&&(y=r.curve);const{x:p,y:u}=qt(r),k=lt().x(p).y(u).curve(y);let g;switch(r.thickness){case"normal":g="edge-thickness-normal";break;case"thick":g="edge-thickness-thick";break;case"invisible":g="edge-thickness-thick";break;default:g=""}switch(r.pattern){case"solid":g+=" edge-pattern-solid";break;case"dotted":g+=" edge-pattern-dotted";break;case"dashed":g+=" edge-pattern-dashed";break}const d=a.append("path").attr("d",k(f)).attr("id",r.id).attr("class"," "+g+(r.classes?" "+r.classes:"")).attr("style",r.style);let b="";switch((w().flowchart.arrowMarkerAbsolute||w().state.arrowMarkerAbsolute)&&(b=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,b=b.replace(/\(/g,"\\("),b=b.replace(/\)/g,"\\)")),x.info("arrowTypeStart",r.arrowTypeStart),x.info("arrowTypeEnd",r.arrowTypeEnd),r.arrowTypeStart){case"arrow_cross":d.attr("marker-start","url("+b+"#"+s+"_"+e+"-crossStart)");break;case"arrow_point":d.attr("marker-start","url("+b+"#"+s+"_"+e+"-pointStart)");break;case"arrow_barb":d.attr("marker-start","url("+b+"#"+s+"_"+e+"-barbStart)");break;case"arrow_circle":d.attr("marker-start","url("+b+"#"+s+"_"+e+"-circleStart)");break;case"aggregation":d.attr("marker-start","url("+b+"#"+s+"_"+e+"-aggregationStart)");break;case"extension":d.attr("marker-start","url("+b+"#"+s+"_"+e+"-extensionStart)");break;case"composition":d.attr("marker-start","url("+b+"#"+s+"_"+e+"-compositionStart)");break;case"dependency":d.attr("marker-start","url("+b+"#"+s+"_"+e+"-dependencyStart)");break;case"lollipop":d.attr("marker-start","url("+b+"#"+s+"_"+e+"-lollipopStart)");break}switch(r.arrowTypeEnd){case"arrow_cross":d.attr("marker-end","url("+b+"#"+s+"_"+e+"-crossEnd)");break;case"arrow_point":d.attr("marker-end","url("+b+"#"+s+"_"+e+"-pointEnd)");break;case"arrow_barb":d.attr("marker-end","url("+b+"#"+s+"_"+e+"-barbEnd)");break;case"arrow_circle":d.attr("marker-end","url("+b+"#"+s+"_"+e+"-circleEnd)");break;case"aggregation":d.attr("marker-end","url("+b+"#"+s+"_"+e+"-aggregationEnd)");break;case"extension":d.attr("marker-end","url("+b+"#"+s+"_"+e+"-extensionEnd)");break;case"composition":d.attr("marker-end","url("+b+"#"+s+"_"+e+"-compositionEnd)");break;case"dependency":d.attr("marker-end","url("+b+"#"+s+"_"+e+"-dependencyEnd)");break;case"lollipop":d.attr("marker-end","url("+b+"#"+s+"_"+e+"-lollipopEnd)");break}let B={};return c&&(B.updatedPath=l),B.originalPath=r.points,B};export{ar as a,lr as b,hr as c,cr as d,sr as e,nr as f,I as g,Mt as h,rr as i,qt as j,_ as l,ir as p,er as s,v as u}; diff --git a/assets/erDiagram-9cfc3649-Q00KLrXp.js b/assets/erDiagram-9cfc3649-wxfL-kce.js similarity index 99% rename from assets/erDiagram-9cfc3649-Q00KLrXp.js rename to assets/erDiagram-9cfc3649-wxfL-kce.js index 81dd54f..7566c86 100644 --- a/assets/erDiagram-9cfc3649-Q00KLrXp.js +++ b/assets/erDiagram-9cfc3649-wxfL-kce.js @@ -1,4 +1,4 @@ -import{c as Z,s as Et,g as mt,b as gt,a as kt,v as xt,x as Rt,l as V,z as Ot,h as rt,y as bt,i as Nt,ao as Tt,ar as At}from"./mermaid.core-zy7cM8l9.js";import{G as Mt,l as St}from"./layout-1ugHHiNm.js";import{l as wt}from"./line-TqRW8de4.js";import"./app-BrxqtzGY.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";const It=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function vt(t){return typeof t=="string"&&It.test(t)}const A=[];for(let t=0;t<256;++t)A.push((t+256).toString(16).slice(1));function Dt(t,e=0){return A[t[e+0]]+A[t[e+1]]+A[t[e+2]]+A[t[e+3]]+"-"+A[t[e+4]]+A[t[e+5]]+"-"+A[t[e+6]]+A[t[e+7]]+"-"+A[t[e+8]]+A[t[e+9]]+"-"+A[t[e+10]]+A[t[e+11]]+A[t[e+12]]+A[t[e+13]]+A[t[e+14]]+A[t[e+15]]}function Lt(t){if(!vt(t))throw TypeError("Invalid UUID");let e;const r=new Uint8Array(16);return r[0]=(e=parseInt(t.slice(0,8),16))>>>24,r[1]=e>>>16&255,r[2]=e>>>8&255,r[3]=e&255,r[4]=(e=parseInt(t.slice(9,13),16))>>>8,r[5]=e&255,r[6]=(e=parseInt(t.slice(14,18),16))>>>8,r[7]=e&255,r[8]=(e=parseInt(t.slice(19,23),16))>>>8,r[9]=e&255,r[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=e/4294967296&255,r[12]=e>>>24&255,r[13]=e>>>16&255,r[14]=e>>>8&255,r[15]=e&255,r}function Bt(t){t=unescape(encodeURIComponent(t));const e=[];for(let r=0;r>>32-e}function Ft(t){const e=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof t=="string"){const f=unescape(encodeURIComponent(t));t=[];for(let o=0;o>>0;x=g,g=m,m=it(_,30)>>>0,_=h,h=I}r[0]=r[0]+h>>>0,r[1]=r[1]+_>>>0,r[2]=r[2]+m>>>0,r[3]=r[3]+g>>>0,r[4]=r[4]+x>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,r[0]&255,r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,r[1]&255,r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,r[2]&255,r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,r[3]&255,r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,r[4]&255]}const Wt=Yt("v5",80,Ft),Ut=Wt;var at=function(){var t=function(S,a,n,c){for(n=n||{},c=S.length;c--;n[S[c]]=a);return n},e=[6,8,10,20,22,24,26,27,28],r=[1,10],u=[1,11],l=[1,12],p=[1,13],f=[1,14],o=[1,15],h=[1,21],_=[1,22],m=[1,23],g=[1,24],x=[1,25],y=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],N=[1,34],I=[27,28,46,47],F=[41,42,43,44,45],W=[17,34],C=[1,54],T=[1,53],M=[17,34,36,38],R={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,":":13,role:14,BLOCK_START:15,attributes:16,BLOCK_STOP:17,SQS:18,SQE:19,title:20,title_value:21,acc_title:22,acc_title_value:23,acc_descr:24,acc_descr_value:25,acc_descr_multiline_value:26,ALPHANUM:27,ENTITY_NAME:28,attribute:29,attributeType:30,attributeName:31,attributeKeyTypeList:32,attributeComment:33,ATTRIBUTE_WORD:34,attributeKeyType:35,COMMA:36,ATTRIBUTE_KEY:37,COMMENT:38,cardinality:39,relType:40,ZERO_OR_ONE:41,ZERO_OR_MORE:42,ONE_OR_MORE:43,ONLY_ONE:44,MD_PARENT:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:":",15:"BLOCK_START",17:"BLOCK_STOP",18:"SQS",19:"SQE",20:"title",21:"title_value",22:"acc_title",23:"acc_title_value",24:"acc_descr",25:"acc_descr_value",26:"acc_descr_multiline_value",27:"ALPHANUM",28:"ENTITY_NAME",34:"ATTRIBUTE_WORD",36:"COMMA",37:"ATTRIBUTE_KEY",38:"COMMENT",41:"ZERO_OR_ONE",42:"ZERO_OR_MORE",43:"ONE_OR_MORE",44:"ONLY_ONE",45:"MD_PARENT",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],performAction:function(a,n,c,d,E,i,K){var s=i.length-1;switch(E){case 1:break;case 2:this.$=[];break;case 3:i[s-1].push(i[s]),this.$=i[s-1];break;case 4:case 5:this.$=i[s];break;case 6:case 7:this.$=[];break;case 8:d.addEntity(i[s-4]),d.addEntity(i[s-2]),d.addRelationship(i[s-4],i[s],i[s-2],i[s-3]);break;case 9:d.addEntity(i[s-3]),d.addAttributes(i[s-3],i[s-1]);break;case 10:d.addEntity(i[s-2]);break;case 11:d.addEntity(i[s]);break;case 12:d.addEntity(i[s-6],i[s-4]),d.addAttributes(i[s-6],i[s-1]);break;case 13:d.addEntity(i[s-5],i[s-3]);break;case 14:d.addEntity(i[s-3],i[s-1]);break;case 15:case 16:this.$=i[s].trim(),d.setAccTitle(this.$);break;case 17:case 18:this.$=i[s].trim(),d.setAccDescription(this.$);break;case 19:case 43:this.$=i[s];break;case 20:case 41:case 42:this.$=i[s].replace(/"/g,"");break;case 21:case 29:this.$=[i[s]];break;case 22:i[s].push(i[s-1]),this.$=i[s];break;case 23:this.$={attributeType:i[s-1],attributeName:i[s]};break;case 24:this.$={attributeType:i[s-2],attributeName:i[s-1],attributeKeyTypeList:i[s]};break;case 25:this.$={attributeType:i[s-2],attributeName:i[s-1],attributeComment:i[s]};break;case 26:this.$={attributeType:i[s-3],attributeName:i[s-2],attributeKeyTypeList:i[s-1],attributeComment:i[s]};break;case 27:case 28:case 31:this.$=i[s];break;case 30:i[s-2].push(i[s]),this.$=i[s-2];break;case 32:this.$=i[s].replace(/"/g,"");break;case 33:this.$={cardA:i[s],relType:i[s-1],cardB:i[s-2]};break;case 34:this.$=d.Cardinality.ZERO_OR_ONE;break;case 35:this.$=d.Cardinality.ZERO_OR_MORE;break;case 36:this.$=d.Cardinality.ONE_OR_MORE;break;case 37:this.$=d.Cardinality.ONLY_ONE;break;case 38:this.$=d.Cardinality.MD_PARENT;break;case 39:this.$=d.Identification.NON_IDENTIFYING;break;case 40:this.$=d.Identification.IDENTIFYING;break}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:r,22:u,24:l,26:p,27:f,28:o},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:16,11:9,20:r,22:u,24:l,26:p,27:f,28:o},t(e,[2,5]),t(e,[2,6]),t(e,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:h,42:_,43:m,44:g,45:x}),{21:[1,26]},{23:[1,27]},{25:[1,28]},t(e,[2,18]),t(y,[2,19]),t(y,[2,20]),t(e,[2,4]),{11:29,27:f,28:o},{16:30,17:[1,31],29:32,30:33,34:N},{11:35,27:f,28:o},{40:36,46:[1,37],47:[1,38]},t(I,[2,34]),t(I,[2,35]),t(I,[2,36]),t(I,[2,37]),t(I,[2,38]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),{13:[1,39]},{17:[1,40]},t(e,[2,10]),{16:41,17:[2,21],29:32,30:33,34:N},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:h,42:_,43:m,44:g,45:x},t(F,[2,39]),t(F,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},t(e,[2,9]),{17:[2,22]},t(W,[2,23],{32:50,33:51,35:52,37:C,38:T}),t([17,34,37,38],[2,28]),t(e,[2,14],{15:[1,55]}),t([27,28],[2,33]),t(e,[2,8]),t(e,[2,41]),t(e,[2,42]),t(e,[2,43]),t(W,[2,24],{33:56,36:[1,57],38:T}),t(W,[2,25]),t(M,[2,29]),t(W,[2,32]),t(M,[2,31]),{16:58,17:[1,59],29:32,30:33,34:N},t(W,[2,26]),{35:60,37:C},{17:[1,61]},t(e,[2,13]),t(M,[2,30]),t(e,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:function(a,n){if(n.recoverable)this.trace(a);else{var c=new Error(a);throw c.hash=n,c}},parse:function(a){var n=this,c=[0],d=[],E=[null],i=[],K=this.table,s="",Q=0,st=0,ft=2,ot=1,yt=i.slice.call(arguments,1),b=Object.create(this.lexer),z={yy:{}};for(var J in this.yy)Object.prototype.hasOwnProperty.call(this.yy,J)&&(z.yy[J]=this.yy[J]);b.setInput(a,z.yy),z.yy.lexer=b,z.yy.parser=this,typeof b.yylloc>"u"&&(b.yylloc={});var $=b.yylloc;i.push($);var pt=b.options&&b.options.ranges;typeof z.yy.parseError=="function"?this.parseError=z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function _t(){var Y;return Y=d.pop()||b.lex()||ot,typeof Y!="number"&&(Y instanceof Array&&(d=Y,Y=d.pop()),Y=n.symbols_[Y]||Y),Y}for(var w,H,v,tt,G={},j,P,lt,q;;){if(H=c[c.length-1],this.defaultActions[H]?v=this.defaultActions[H]:((w===null||typeof w>"u")&&(w=_t()),v=K[H]&&K[H][w]),typeof v>"u"||!v.length||!v[0]){var et="";q=[];for(j in K[H])this.terminals_[j]&&j>ft&&q.push("'"+this.terminals_[j]+"'");b.showPosition?et="Parse error on line "+(Q+1)+`: +import{c as Z,s as Et,g as mt,b as gt,a as kt,v as xt,x as Rt,l as V,z as Ot,h as rt,y as bt,i as Nt,ao as Tt,ar as At}from"./mermaid.core-QJnSHCal.js";import{G as Mt,l as St}from"./layout-Vth69vlg.js";import{l as wt}from"./line-ZVNdUhg2.js";import"./app-oTlYPy8h.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";const It=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function vt(t){return typeof t=="string"&&It.test(t)}const A=[];for(let t=0;t<256;++t)A.push((t+256).toString(16).slice(1));function Dt(t,e=0){return A[t[e+0]]+A[t[e+1]]+A[t[e+2]]+A[t[e+3]]+"-"+A[t[e+4]]+A[t[e+5]]+"-"+A[t[e+6]]+A[t[e+7]]+"-"+A[t[e+8]]+A[t[e+9]]+"-"+A[t[e+10]]+A[t[e+11]]+A[t[e+12]]+A[t[e+13]]+A[t[e+14]]+A[t[e+15]]}function Lt(t){if(!vt(t))throw TypeError("Invalid UUID");let e;const r=new Uint8Array(16);return r[0]=(e=parseInt(t.slice(0,8),16))>>>24,r[1]=e>>>16&255,r[2]=e>>>8&255,r[3]=e&255,r[4]=(e=parseInt(t.slice(9,13),16))>>>8,r[5]=e&255,r[6]=(e=parseInt(t.slice(14,18),16))>>>8,r[7]=e&255,r[8]=(e=parseInt(t.slice(19,23),16))>>>8,r[9]=e&255,r[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=e/4294967296&255,r[12]=e>>>24&255,r[13]=e>>>16&255,r[14]=e>>>8&255,r[15]=e&255,r}function Bt(t){t=unescape(encodeURIComponent(t));const e=[];for(let r=0;r>>32-e}function Ft(t){const e=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof t=="string"){const f=unescape(encodeURIComponent(t));t=[];for(let o=0;o>>0;x=g,g=m,m=it(_,30)>>>0,_=h,h=I}r[0]=r[0]+h>>>0,r[1]=r[1]+_>>>0,r[2]=r[2]+m>>>0,r[3]=r[3]+g>>>0,r[4]=r[4]+x>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,r[0]&255,r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,r[1]&255,r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,r[2]&255,r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,r[3]&255,r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,r[4]&255]}const Wt=Yt("v5",80,Ft),Ut=Wt;var at=function(){var t=function(S,a,n,c){for(n=n||{},c=S.length;c--;n[S[c]]=a);return n},e=[6,8,10,20,22,24,26,27,28],r=[1,10],u=[1,11],l=[1,12],p=[1,13],f=[1,14],o=[1,15],h=[1,21],_=[1,22],m=[1,23],g=[1,24],x=[1,25],y=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],N=[1,34],I=[27,28,46,47],F=[41,42,43,44,45],W=[17,34],C=[1,54],T=[1,53],M=[17,34,36,38],R={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,":":13,role:14,BLOCK_START:15,attributes:16,BLOCK_STOP:17,SQS:18,SQE:19,title:20,title_value:21,acc_title:22,acc_title_value:23,acc_descr:24,acc_descr_value:25,acc_descr_multiline_value:26,ALPHANUM:27,ENTITY_NAME:28,attribute:29,attributeType:30,attributeName:31,attributeKeyTypeList:32,attributeComment:33,ATTRIBUTE_WORD:34,attributeKeyType:35,COMMA:36,ATTRIBUTE_KEY:37,COMMENT:38,cardinality:39,relType:40,ZERO_OR_ONE:41,ZERO_OR_MORE:42,ONE_OR_MORE:43,ONLY_ONE:44,MD_PARENT:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:":",15:"BLOCK_START",17:"BLOCK_STOP",18:"SQS",19:"SQE",20:"title",21:"title_value",22:"acc_title",23:"acc_title_value",24:"acc_descr",25:"acc_descr_value",26:"acc_descr_multiline_value",27:"ALPHANUM",28:"ENTITY_NAME",34:"ATTRIBUTE_WORD",36:"COMMA",37:"ATTRIBUTE_KEY",38:"COMMENT",41:"ZERO_OR_ONE",42:"ZERO_OR_MORE",43:"ONE_OR_MORE",44:"ONLY_ONE",45:"MD_PARENT",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],performAction:function(a,n,c,d,E,i,K){var s=i.length-1;switch(E){case 1:break;case 2:this.$=[];break;case 3:i[s-1].push(i[s]),this.$=i[s-1];break;case 4:case 5:this.$=i[s];break;case 6:case 7:this.$=[];break;case 8:d.addEntity(i[s-4]),d.addEntity(i[s-2]),d.addRelationship(i[s-4],i[s],i[s-2],i[s-3]);break;case 9:d.addEntity(i[s-3]),d.addAttributes(i[s-3],i[s-1]);break;case 10:d.addEntity(i[s-2]);break;case 11:d.addEntity(i[s]);break;case 12:d.addEntity(i[s-6],i[s-4]),d.addAttributes(i[s-6],i[s-1]);break;case 13:d.addEntity(i[s-5],i[s-3]);break;case 14:d.addEntity(i[s-3],i[s-1]);break;case 15:case 16:this.$=i[s].trim(),d.setAccTitle(this.$);break;case 17:case 18:this.$=i[s].trim(),d.setAccDescription(this.$);break;case 19:case 43:this.$=i[s];break;case 20:case 41:case 42:this.$=i[s].replace(/"/g,"");break;case 21:case 29:this.$=[i[s]];break;case 22:i[s].push(i[s-1]),this.$=i[s];break;case 23:this.$={attributeType:i[s-1],attributeName:i[s]};break;case 24:this.$={attributeType:i[s-2],attributeName:i[s-1],attributeKeyTypeList:i[s]};break;case 25:this.$={attributeType:i[s-2],attributeName:i[s-1],attributeComment:i[s]};break;case 26:this.$={attributeType:i[s-3],attributeName:i[s-2],attributeKeyTypeList:i[s-1],attributeComment:i[s]};break;case 27:case 28:case 31:this.$=i[s];break;case 30:i[s-2].push(i[s]),this.$=i[s-2];break;case 32:this.$=i[s].replace(/"/g,"");break;case 33:this.$={cardA:i[s],relType:i[s-1],cardB:i[s-2]};break;case 34:this.$=d.Cardinality.ZERO_OR_ONE;break;case 35:this.$=d.Cardinality.ZERO_OR_MORE;break;case 36:this.$=d.Cardinality.ONE_OR_MORE;break;case 37:this.$=d.Cardinality.ONLY_ONE;break;case 38:this.$=d.Cardinality.MD_PARENT;break;case 39:this.$=d.Identification.NON_IDENTIFYING;break;case 40:this.$=d.Identification.IDENTIFYING;break}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:r,22:u,24:l,26:p,27:f,28:o},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:16,11:9,20:r,22:u,24:l,26:p,27:f,28:o},t(e,[2,5]),t(e,[2,6]),t(e,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:h,42:_,43:m,44:g,45:x}),{21:[1,26]},{23:[1,27]},{25:[1,28]},t(e,[2,18]),t(y,[2,19]),t(y,[2,20]),t(e,[2,4]),{11:29,27:f,28:o},{16:30,17:[1,31],29:32,30:33,34:N},{11:35,27:f,28:o},{40:36,46:[1,37],47:[1,38]},t(I,[2,34]),t(I,[2,35]),t(I,[2,36]),t(I,[2,37]),t(I,[2,38]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),{13:[1,39]},{17:[1,40]},t(e,[2,10]),{16:41,17:[2,21],29:32,30:33,34:N},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:h,42:_,43:m,44:g,45:x},t(F,[2,39]),t(F,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},t(e,[2,9]),{17:[2,22]},t(W,[2,23],{32:50,33:51,35:52,37:C,38:T}),t([17,34,37,38],[2,28]),t(e,[2,14],{15:[1,55]}),t([27,28],[2,33]),t(e,[2,8]),t(e,[2,41]),t(e,[2,42]),t(e,[2,43]),t(W,[2,24],{33:56,36:[1,57],38:T}),t(W,[2,25]),t(M,[2,29]),t(W,[2,32]),t(M,[2,31]),{16:58,17:[1,59],29:32,30:33,34:N},t(W,[2,26]),{35:60,37:C},{17:[1,61]},t(e,[2,13]),t(M,[2,30]),t(e,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:function(a,n){if(n.recoverable)this.trace(a);else{var c=new Error(a);throw c.hash=n,c}},parse:function(a){var n=this,c=[0],d=[],E=[null],i=[],K=this.table,s="",Q=0,st=0,ft=2,ot=1,yt=i.slice.call(arguments,1),b=Object.create(this.lexer),z={yy:{}};for(var J in this.yy)Object.prototype.hasOwnProperty.call(this.yy,J)&&(z.yy[J]=this.yy[J]);b.setInput(a,z.yy),z.yy.lexer=b,z.yy.parser=this,typeof b.yylloc>"u"&&(b.yylloc={});var $=b.yylloc;i.push($);var pt=b.options&&b.options.ranges;typeof z.yy.parseError=="function"?this.parseError=z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function _t(){var Y;return Y=d.pop()||b.lex()||ot,typeof Y!="number"&&(Y instanceof Array&&(d=Y,Y=d.pop()),Y=n.symbols_[Y]||Y),Y}for(var w,H,v,tt,G={},j,P,lt,q;;){if(H=c[c.length-1],this.defaultActions[H]?v=this.defaultActions[H]:((w===null||typeof w>"u")&&(w=_t()),v=K[H]&&K[H][w]),typeof v>"u"||!v.length||!v[0]){var et="";q=[];for(j in K[H])this.terminals_[j]&&j>ft&&q.push("'"+this.terminals_[j]+"'");b.showPosition?et="Parse error on line "+(Q+1)+`: `+b.showPosition()+` Expecting `+q.join(", ")+", got '"+(this.terminals_[w]||w)+"'":et="Parse error on line "+(Q+1)+": Unexpected "+(w==ot?"end of input":"'"+(this.terminals_[w]||w)+"'"),this.parseError(et,{text:b.match,token:this.terminals_[w]||w,line:b.yylineno,loc:$,expected:q})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+H+", token: "+w);switch(v[0]){case 1:c.push(w),E.push(b.yytext),i.push(b.yylloc),c.push(v[1]),w=null,st=b.yyleng,s=b.yytext,Q=b.yylineno,$=b.yylloc;break;case 2:if(P=this.productions_[v[1]][1],G.$=E[E.length-P],G._$={first_line:i[i.length-(P||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(P||1)].first_column,last_column:i[i.length-1].last_column},pt&&(G._$.range=[i[i.length-(P||1)].range[0],i[i.length-1].range[1]]),tt=this.performAction.apply(G,[s,st,Q,z.yy,v[1],E,i].concat(yt)),typeof tt<"u")return tt;P&&(c=c.slice(0,-1*P*2),E=E.slice(0,-1*P),i=i.slice(0,-1*P)),c.push(this.productions_[v[1]][0]),E.push(G.$),i.push(G._$),lt=K[c[c.length-2]][c[c.length-1]],c.push(lt);break;case 3:return!0}}return!0}},O=function(){var S={EOF:1,parseError:function(n,c){if(this.yy.parser)this.yy.parser.parseError(n,c);else throw new Error(n)},setInput:function(a,n){return this.yy=n||this.yy||{},this._input=a,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var n=a.match(/(?:\r\n?|\n).*/g);return n?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var n=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var E=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[E[0],E[0]+this.yyleng-n]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),n=new Array(a.length+1).join("-");return a+this.upcomingInput()+` diff --git a/assets/exclusive_features.html-mvtkr6Zx.js b/assets/exclusive_features.html-dQadFX3J.js similarity index 99% rename from assets/exclusive_features.html-mvtkr6Zx.js rename to assets/exclusive_features.html-dQadFX3J.js index 8998116..ff4c9b3 100644 --- a/assets/exclusive_features.html-mvtkr6Zx.js +++ b/assets/exclusive_features.html-dQadFX3J.js @@ -1,4 +1,4 @@ -import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as p,o as c,c as u,a as n,d as s,b as e,w as o,e as a}from"./app-BrxqtzGY.js";const r={},d=a(`

          1、先播放后推流

          • 痛点:推流成功前不能提前播放

          • 场景介绍:

            有些及时推流的场景,存在推流和播放同时发生的场景,这种场景一般是一对一的,譬如说基于 rtmp 推流的行车记录仪,用户在调阅车载摄像头视频的,下发推流命令给设备时,同时开始播放视频,如果播放请求先于推流到达流媒体服务器,那么流媒体服务器通常会立即返回流未找到的错误,为了解决这个问题,一般的解决方案是,通过设备确认推流成功再开启播放,但是这样往往会增加视频打开延时,拉低用户体验。zlmediakit 针对此场景作出特别优化,可以在流不存在时,先不回复播放器,等推流成功后再返回播放成功,如果超时时间内,推流还不上线,那么再返回播放流不存在错误,通过配置文件可以修改此延时:

            [general]
            +import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as p,o as c,c as u,a as n,d as s,b as e,w as o,e as a}from"./app-oTlYPy8h.js";const r={},d=a(`

            1、先播放后推流

            • 痛点:推流成功前不能提前播放

            • 场景介绍:

              有些及时推流的场景,存在推流和播放同时发生的场景,这种场景一般是一对一的,譬如说基于 rtmp 推流的行车记录仪,用户在调阅车载摄像头视频的,下发推流命令给设备时,同时开始播放视频,如果播放请求先于推流到达流媒体服务器,那么流媒体服务器通常会立即返回流未找到的错误,为了解决这个问题,一般的解决方案是,通过设备确认推流成功再开启播放,但是这样往往会增加视频打开延时,拉低用户体验。zlmediakit 针对此场景作出特别优化,可以在流不存在时,先不回复播放器,等推流成功后再返回播放成功,如果超时时间内,推流还不上线,那么再返回播放流不存在错误,通过配置文件可以修改此延时:

              [general]
               #播放最多等待时间,单位毫秒
               #播放在播放某个流时,如果该流不存在,
               #ZLMediaKit会最多让播放器等待maxStreamWaitMS毫秒
              diff --git a/assets/exclusive_features.html-q7ecjqC1.js b/assets/exclusive_features.html-t4K_S5d4.js
              similarity index 99%
              rename from assets/exclusive_features.html-q7ecjqC1.js
              rename to assets/exclusive_features.html-t4K_S5d4.js
              index 477884d..3bd2ffc 100644
              --- a/assets/exclusive_features.html-q7ecjqC1.js
              +++ b/assets/exclusive_features.html-t4K_S5d4.js
              @@ -1,4 +1,4 @@
              -import{_ as r}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as c,c as p,a as e,d as n,b as a,w as o,e as s}from"./app-BrxqtzGY.js";const u={},d=s(`

              1. Play before Publishing

              • Pain point: Unable to play before successful publishing.

              • Scenario:

                In some real-time streaming scenarios, there is a need for simultaneous streaming and playback, typically in a one-to-one setting. For example, in a car recorder based on RTMP streaming, when a user requests to view the live video from the onboard camera and sends a publishing command to the device, the playback of the video starts simultaneously. If the playback request arrives at the media server before the publishing, the server usually returns an error indicating that the stream is not found. To solve this problem, a common approach is to confirm the successful publishing before starting the playback. However, this often increases the delay in opening the video, resulting in a poor user experience. ZLMediakit optimizes this scenario by allowing the server to hold the player's response if the stream does not exist, and only returns a successful playback response after the publishing is successful. If the publishing does not come online within a timeout period, an error indicating the stream is not found is returned. The delay can be modified through the configuration file:

                [general]
                +import{_ as r}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as c,c as p,a as e,d as n,b as a,w as o,e as s}from"./app-oTlYPy8h.js";const u={},d=s(`

                1. Play before Publishing

                • Pain point: Unable to play before successful publishing.

                • Scenario:

                  In some real-time streaming scenarios, there is a need for simultaneous streaming and playback, typically in a one-to-one setting. For example, in a car recorder based on RTMP streaming, when a user requests to view the live video from the onboard camera and sends a publishing command to the device, the playback of the video starts simultaneously. If the playback request arrives at the media server before the publishing, the server usually returns an error indicating that the stream is not found. To solve this problem, a common approach is to confirm the successful publishing before starting the playback. However, this often increases the delay in opening the video, resulting in a poor user experience. ZLMediakit optimizes this scenario by allowing the server to hold the player's response if the stream does not exist, and only returns a successful playback response after the publishing is successful. If the publishing does not come online within a timeout period, an error indicating the stream is not found is returned. The delay can be modified through the configuration file:

                  [general]
                   # Maximum waiting time for playback in milliseconds
                   # When playing a stream that does not exist, ZLMediaKit will allow the player to wait for a maximum of maxStreamWaitMS milliseconds
                   # If the stream is registered successfully within this time, it will immediately return a successful playback response to the player
                  diff --git a/assets/flowDb-170db09d-q-5Qwvam.js b/assets/flowDb-170db09d-41y1nEiW.js
                  similarity index 99%
                  rename from assets/flowDb-170db09d-q-5Qwvam.js
                  rename to assets/flowDb-170db09d-41y1nEiW.js
                  index b24686c..b8bff11 100644
                  --- a/assets/flowDb-170db09d-q-5Qwvam.js
                  +++ b/assets/flowDb-170db09d-41y1nEiW.js
                  @@ -1,4 +1,4 @@
                  -import{c as ft,u as ye,s as me,g as ve,a as Ve,b as Le,v as Ie,x as Re,l as Z1,y as At,z as Ne,j as Oe,h as N1}from"./mermaid.core-zy7cM8l9.js";var ht=function(){var e=function(h1,a,o,p){for(o=o||{},p=h1.length;p--;o[h1[p]]=a);return o},u=[1,4],i=[1,3],n=[1,5],c=[1,8,9,10,11,27,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],l=[2,2],h=[1,13],U=[1,14],F=[1,15],O=[1,16],z=[1,23],c1=[1,25],f1=[1,26],A1=[1,27],S=[1,49],k=[1,48],o1=[1,29],w1=[1,30],U1=[1,31],G1=[1,32],M1=[1,33],B=[1,44],x=[1,46],y=[1,42],m=[1,47],v=[1,43],V=[1,50],L=[1,45],I=[1,51],R=[1,52],K1=[1,34],j1=[1,35],Y1=[1,36],X1=[1,37],L1=[1,57],b=[1,8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],W=[1,61],q=[1,60],Q=[1,62],z1=[8,9,11,73,75],k1=[1,88],b1=[1,93],g1=[1,92],D1=[1,89],F1=[1,85],T1=[1,91],C1=[1,87],S1=[1,94],_1=[1,90],B1=[1,95],x1=[1,86],H1=[8,9,10,11,73,75],N=[8,9,10,11,44,73,75],M=[8,9,10,11,29,42,44,46,48,50,52,54,56,58,61,63,65,66,68,73,75,86,99,102,103,106,108,111,112,113],Et=[8,9,11,42,58,73,75,86,99,102,103,106,108,111,112,113],I1=[42,58,86,99,102,103,106,108,111,112,113],kt=[1,121],bt=[1,120],gt=[1,128],Dt=[1,142],Ft=[1,143],Tt=[1,144],Ct=[1,145],St=[1,130],_t=[1,132],Bt=[1,136],xt=[1,137],yt=[1,138],mt=[1,139],vt=[1,140],Vt=[1,141],Lt=[1,146],It=[1,147],Rt=[1,126],Nt=[1,127],Ot=[1,134],Pt=[1,129],wt=[1,133],Ut=[1,131],it=[8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],Gt=[1,149],T=[8,9,11],K=[8,9,10,11,14,42,58,86,102,103,106,108,111,112,113],f=[1,169],P=[1,165],w=[1,166],A=[1,170],d=[1,167],E=[1,168],y1=[75,113,116],g=[8,9,10,11,12,14,27,29,32,42,58,73,81,82,83,84,85,86,87,102,106,108,111,112,113],Mt=[10,103],l1=[31,47,49,51,53,55,60,62,64,65,67,69,113,114,115],Z=[1,235],J=[1,233],$=[1,237],t1=[1,231],e1=[1,232],s1=[1,234],u1=[1,236],i1=[1,238],m1=[1,255],Kt=[8,9,11,103],H=[8,9,10,11,58,81,102,103,106,107,108,109],rt={trace:function(){},yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeperator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,verticeStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,link:39,node:40,styledVertex:41,AMP:42,vertex:43,STYLE_SEPARATOR:44,idString:45,DOUBLECIRCLESTART:46,DOUBLECIRCLEEND:47,PS:48,PE:49,"(-":50,"-)":51,STADIUMSTART:52,STADIUMEND:53,SUBROUTINESTART:54,SUBROUTINEEND:55,VERTEX_WITH_PROPS_START:56,"NODE_STRING[field]":57,COLON:58,"NODE_STRING[value]":59,PIPE:60,CYLINDERSTART:61,CYLINDEREND:62,DIAMOND_START:63,DIAMOND_STOP:64,TAGEND:65,TRAPSTART:66,TRAPEND:67,INVTRAPSTART:68,INVTRAPEND:69,linkStatement:70,arrowText:71,TESTSTR:72,START_LINK:73,edgeText:74,LINK:75,edgeTextToken:76,STR:77,MD_STR:78,textToken:79,keywords:80,STYLE:81,LINKSTYLE:82,CLASSDEF:83,CLASS:84,CLICK:85,DOWN:86,UP:87,textNoTagsToken:88,stylesOpt:89,"idString[vertex]":90,"idString[class]":91,CALLBACKNAME:92,CALLBACKARGS:93,HREF:94,LINK_TARGET:95,"STR[link]":96,"STR[tooltip]":97,alphaNum:98,DEFAULT:99,numList:100,INTERPOLATE:101,NUM:102,COMMA:103,style:104,styleComponent:105,NODE_STRING:106,UNIT:107,BRKT:108,PCT:109,idStringToken:110,MINUS:111,MULT:112,UNICODE_TEXT:113,TEXT:114,TAGSTART:115,EDGE_TEXT:116,alphaNumToken:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",42:"AMP",44:"STYLE_SEPARATOR",46:"DOUBLECIRCLESTART",47:"DOUBLECIRCLEEND",48:"PS",49:"PE",50:"(-",51:"-)",52:"STADIUMSTART",53:"STADIUMEND",54:"SUBROUTINESTART",55:"SUBROUTINEEND",56:"VERTEX_WITH_PROPS_START",57:"NODE_STRING[field]",58:"COLON",59:"NODE_STRING[value]",60:"PIPE",61:"CYLINDERSTART",62:"CYLINDEREND",63:"DIAMOND_START",64:"DIAMOND_STOP",65:"TAGEND",66:"TRAPSTART",67:"TRAPEND",68:"INVTRAPSTART",69:"INVTRAPEND",72:"TESTSTR",73:"START_LINK",75:"LINK",77:"STR",78:"MD_STR",81:"STYLE",82:"LINKSTYLE",83:"CLASSDEF",84:"CLASS",85:"CLICK",86:"DOWN",87:"UP",90:"idString[vertex]",91:"idString[class]",92:"CALLBACKNAME",93:"CALLBACKARGS",94:"HREF",95:"LINK_TARGET",96:"STR[link]",97:"STR[tooltip]",99:"DEFAULT",101:"INTERPOLATE",102:"NUM",103:"COMMA",106:"NODE_STRING",107:"UNIT",108:"BRKT",109:"PCT",111:"MINUS",112:"MULT",113:"UNICODE_TEXT",114:"TEXT",115:"TAGSTART",116:"EDGE_TEXT",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[20,3],[20,4],[20,2],[20,1],[40,1],[40,5],[41,1],[41,3],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,8],[43,4],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,4],[43,4],[43,1],[39,2],[39,3],[39,3],[39,1],[39,3],[74,1],[74,2],[74,1],[74,1],[70,1],[71,3],[30,1],[30,2],[30,1],[30,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[100,1],[100,3],[89,1],[89,3],[104,1],[104,2],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[79,1],[79,1],[79,1],[79,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[76,1],[76,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[45,1],[45,2],[98,1],[98,2],[33,1],[33,1],[33,1],[33,1]],performAction:function(a,o,p,r,C,t,R1){var s=t.length-1;switch(C){case 2:this.$=[];break;case 3:(!Array.isArray(t[s])||t[s].length>0)&&t[s-1].push(t[s]),this.$=t[s-1];break;case 4:case 176:this.$=t[s];break;case 11:r.setDirection("TB"),this.$="TB";break;case 12:r.setDirection(t[s-1]),this.$=t[s-1];break;case 27:this.$=t[s-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=r.addSubGraph(t[s-6],t[s-1],t[s-4]);break;case 34:this.$=r.addSubGraph(t[s-3],t[s-1],t[s-3]);break;case 35:this.$=r.addSubGraph(void 0,t[s-1],void 0);break;case 37:this.$=t[s].trim(),r.setAccTitle(this.$);break;case 38:case 39:this.$=t[s].trim(),r.setAccDescription(this.$);break;case 43:r.addLink(t[s-2].stmt,t[s],t[s-1]),this.$={stmt:t[s],nodes:t[s].concat(t[s-2].nodes)};break;case 44:r.addLink(t[s-3].stmt,t[s-1],t[s-2]),this.$={stmt:t[s-1],nodes:t[s-1].concat(t[s-3].nodes)};break;case 45:this.$={stmt:t[s-1],nodes:t[s-1]};break;case 46:this.$={stmt:t[s],nodes:t[s]};break;case 47:this.$=[t[s]];break;case 48:this.$=t[s-4].concat(t[s]);break;case 49:this.$=t[s];break;case 50:this.$=t[s-2],r.setClass(t[s-2],t[s]);break;case 51:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"square");break;case 52:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"doublecircle");break;case 53:this.$=t[s-5],r.addVertex(t[s-5],t[s-2],"circle");break;case 54:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"ellipse");break;case 55:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"stadium");break;case 56:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"subroutine");break;case 57:this.$=t[s-7],r.addVertex(t[s-7],t[s-1],"rect",void 0,void 0,void 0,Object.fromEntries([[t[s-5],t[s-3]]]));break;case 58:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"cylinder");break;case 59:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"round");break;case 60:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"diamond");break;case 61:this.$=t[s-5],r.addVertex(t[s-5],t[s-2],"hexagon");break;case 62:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"odd");break;case 63:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"trapezoid");break;case 64:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"inv_trapezoid");break;case 65:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"lean_right");break;case 66:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"lean_left");break;case 67:this.$=t[s],r.addVertex(t[s]);break;case 68:t[s-1].text=t[s],this.$=t[s-1];break;case 69:case 70:t[s-2].text=t[s-1],this.$=t[s-2];break;case 71:this.$=t[s];break;case 72:var j=r.destructLink(t[s],t[s-2]);this.$={type:j.type,stroke:j.stroke,length:j.length,text:t[s-1]};break;case 73:this.$={text:t[s],type:"text"};break;case 74:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 75:this.$={text:t[s],type:"string"};break;case 76:this.$={text:t[s],type:"markdown"};break;case 77:var j=r.destructLink(t[s]);this.$={type:j.type,stroke:j.stroke,length:j.length};break;case 78:this.$=t[s-1];break;case 79:this.$={text:t[s],type:"text"};break;case 80:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 81:this.$={text:t[s],type:"string"};break;case 82:case 97:this.$={text:t[s],type:"markdown"};break;case 94:this.$={text:t[s],type:"text"};break;case 95:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 96:this.$={text:t[s],type:"text"};break;case 98:this.$=t[s-4],r.addClass(t[s-2],t[s]);break;case 99:this.$=t[s-4],r.setClass(t[s-2],t[s]);break;case 100:case 108:this.$=t[s-1],r.setClickEvent(t[s-1],t[s]);break;case 101:case 109:this.$=t[s-3],r.setClickEvent(t[s-3],t[s-2]),r.setTooltip(t[s-3],t[s]);break;case 102:this.$=t[s-2],r.setClickEvent(t[s-2],t[s-1],t[s]);break;case 103:this.$=t[s-4],r.setClickEvent(t[s-4],t[s-3],t[s-2]),r.setTooltip(t[s-4],t[s]);break;case 104:this.$=t[s-2],r.setLink(t[s-2],t[s]);break;case 105:this.$=t[s-4],r.setLink(t[s-4],t[s-2]),r.setTooltip(t[s-4],t[s]);break;case 106:this.$=t[s-4],r.setLink(t[s-4],t[s-2],t[s]);break;case 107:this.$=t[s-6],r.setLink(t[s-6],t[s-4],t[s]),r.setTooltip(t[s-6],t[s-2]);break;case 110:this.$=t[s-1],r.setLink(t[s-1],t[s]);break;case 111:this.$=t[s-3],r.setLink(t[s-3],t[s-2]),r.setTooltip(t[s-3],t[s]);break;case 112:this.$=t[s-3],r.setLink(t[s-3],t[s-2],t[s]);break;case 113:this.$=t[s-5],r.setLink(t[s-5],t[s-4],t[s]),r.setTooltip(t[s-5],t[s-2]);break;case 114:this.$=t[s-4],r.addVertex(t[s-2],void 0,void 0,t[s]);break;case 115:this.$=t[s-4],r.updateLink([t[s-2]],t[s]);break;case 116:this.$=t[s-4],r.updateLink(t[s-2],t[s]);break;case 117:this.$=t[s-8],r.updateLinkInterpolate([t[s-6]],t[s-2]),r.updateLink([t[s-6]],t[s]);break;case 118:this.$=t[s-8],r.updateLinkInterpolate(t[s-6],t[s-2]),r.updateLink(t[s-6],t[s]);break;case 119:this.$=t[s-6],r.updateLinkInterpolate([t[s-4]],t[s]);break;case 120:this.$=t[s-6],r.updateLinkInterpolate(t[s-4],t[s]);break;case 121:case 123:this.$=[t[s]];break;case 122:case 124:t[s-2].push(t[s]),this.$=t[s-2];break;case 126:this.$=t[s-1]+t[s];break;case 174:this.$=t[s];break;case 175:this.$=t[s-1]+""+t[s];break;case 177:this.$=t[s-1]+""+t[s];break;case 178:this.$={stmt:"dir",value:"TB"};break;case 179:this.$={stmt:"dir",value:"BT"};break;case 180:this.$={stmt:"dir",value:"RL"};break;case 181:this.$={stmt:"dir",value:"LR"};break}},table:[{3:1,4:2,9:u,10:i,12:n},{1:[3]},e(c,l,{5:6}),{4:7,9:u,10:i,12:n},{4:8,9:u,10:i,12:n},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:h,9:U,10:F,11:O,20:17,22:18,23:19,24:20,25:21,26:22,27:z,33:24,34:c1,36:f1,38:A1,40:28,41:38,42:S,43:39,45:40,58:k,81:o1,82:w1,83:U1,84:G1,85:M1,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R,118:K1,119:j1,120:Y1,121:X1},e(c,[2,9]),e(c,[2,10]),e(c,[2,11]),{8:[1,54],9:[1,55],10:L1,15:53,18:56},e(b,[2,3]),e(b,[2,4]),e(b,[2,5]),e(b,[2,6]),e(b,[2,7]),e(b,[2,8]),{8:W,9:q,11:Q,21:58,39:59,70:63,73:[1,64],75:[1,65]},{8:W,9:q,11:Q,21:66},{8:W,9:q,11:Q,21:67},{8:W,9:q,11:Q,21:68},{8:W,9:q,11:Q,21:69},{8:W,9:q,11:Q,21:70},{8:W,9:q,10:[1,71],11:Q,21:72},e(b,[2,36]),{35:[1,73]},{37:[1,74]},e(b,[2,39]),e(z1,[2,46],{18:75,10:L1}),{10:[1,76]},{10:[1,77]},{10:[1,78]},{10:[1,79]},{14:k1,42:b1,58:g1,77:[1,83],86:D1,92:[1,80],94:[1,81],98:82,102:F1,103:T1,106:C1,108:S1,111:_1,112:B1,113:x1,117:84},e(b,[2,178]),e(b,[2,179]),e(b,[2,180]),e(b,[2,181]),e(H1,[2,47]),e(H1,[2,49],{44:[1,96]}),e(N,[2,67],{110:109,29:[1,97],42:S,46:[1,98],48:[1,99],50:[1,100],52:[1,101],54:[1,102],56:[1,103],58:k,61:[1,104],63:[1,105],65:[1,106],66:[1,107],68:[1,108],86:B,99:x,102:y,103:m,106:v,108:V,111:L,112:I,113:R}),e(M,[2,174]),e(M,[2,135]),e(M,[2,136]),e(M,[2,137]),e(M,[2,138]),e(M,[2,139]),e(M,[2,140]),e(M,[2,141]),e(M,[2,142]),e(M,[2,143]),e(M,[2,144]),e(M,[2,145]),e(c,[2,12]),e(c,[2,18]),e(c,[2,19]),{9:[1,110]},e(Et,[2,26],{18:111,10:L1}),e(b,[2,27]),{40:112,41:38,42:S,43:39,45:40,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R},e(b,[2,40]),e(b,[2,41]),e(b,[2,42]),e(I1,[2,71],{71:113,60:[1,115],72:[1,114]}),{74:116,76:117,77:[1,118],78:[1,119],113:kt,116:bt},e([42,58,60,72,86,99,102,103,106,108,111,112,113],[2,77]),e(b,[2,28]),e(b,[2,29]),e(b,[2,30]),e(b,[2,31]),e(b,[2,32]),{10:gt,12:Dt,14:Ft,27:Tt,28:122,32:Ct,42:St,58:_t,73:Bt,77:[1,124],78:[1,125],80:135,81:xt,82:yt,83:mt,84:vt,85:Vt,86:Lt,87:It,88:123,102:Rt,106:Nt,108:Ot,111:Pt,112:wt,113:Ut},e(it,l,{5:148}),e(b,[2,37]),e(b,[2,38]),e(z1,[2,45],{42:Gt}),{42:S,45:150,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R},{99:[1,151],100:152,102:[1,153]},{42:S,45:154,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R},{42:S,45:155,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R},e(T,[2,100],{10:[1,156],93:[1,157]}),{77:[1,158]},e(T,[2,108],{117:160,10:[1,159],14:k1,42:b1,58:g1,86:D1,102:F1,103:T1,106:C1,108:S1,111:_1,112:B1,113:x1}),e(T,[2,110],{10:[1,161]}),e(K,[2,176]),e(K,[2,163]),e(K,[2,164]),e(K,[2,165]),e(K,[2,166]),e(K,[2,167]),e(K,[2,168]),e(K,[2,169]),e(K,[2,170]),e(K,[2,171]),e(K,[2,172]),e(K,[2,173]),{42:S,45:162,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R},{30:163,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:171,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:173,48:[1,172],65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:174,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:175,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:176,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{106:[1,177]},{30:178,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:179,63:[1,180],65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:181,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:182,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:183,65:f,77:P,78:w,79:164,113:A,114:d,115:E},e(M,[2,175]),e(c,[2,20]),e(Et,[2,25]),e(z1,[2,43],{18:184,10:L1}),e(I1,[2,68],{10:[1,185]}),{10:[1,186]},{30:187,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{75:[1,188],76:189,113:kt,116:bt},e(y1,[2,73]),e(y1,[2,75]),e(y1,[2,76]),e(y1,[2,161]),e(y1,[2,162]),{8:W,9:q,10:gt,11:Q,12:Dt,14:Ft,21:191,27:Tt,29:[1,190],32:Ct,42:St,58:_t,73:Bt,80:135,81:xt,82:yt,83:mt,84:vt,85:Vt,86:Lt,87:It,88:192,102:Rt,106:Nt,108:Ot,111:Pt,112:wt,113:Ut},e(g,[2,94]),e(g,[2,96]),e(g,[2,97]),e(g,[2,150]),e(g,[2,151]),e(g,[2,152]),e(g,[2,153]),e(g,[2,154]),e(g,[2,155]),e(g,[2,156]),e(g,[2,157]),e(g,[2,158]),e(g,[2,159]),e(g,[2,160]),e(g,[2,83]),e(g,[2,84]),e(g,[2,85]),e(g,[2,86]),e(g,[2,87]),e(g,[2,88]),e(g,[2,89]),e(g,[2,90]),e(g,[2,91]),e(g,[2,92]),e(g,[2,93]),{6:11,7:12,8:h,9:U,10:F,11:O,20:17,22:18,23:19,24:20,25:21,26:22,27:z,32:[1,193],33:24,34:c1,36:f1,38:A1,40:28,41:38,42:S,43:39,45:40,58:k,81:o1,82:w1,83:U1,84:G1,85:M1,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R,118:K1,119:j1,120:Y1,121:X1},{10:L1,18:194},{10:[1,195],42:S,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:109,111:L,112:I,113:R},{10:[1,196]},{10:[1,197],103:[1,198]},e(Mt,[2,121]),{10:[1,199],42:S,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:109,111:L,112:I,113:R},{10:[1,200],42:S,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:109,111:L,112:I,113:R},{77:[1,201]},e(T,[2,102],{10:[1,202]}),e(T,[2,104],{10:[1,203]}),{77:[1,204]},e(K,[2,177]),{77:[1,205],95:[1,206]},e(H1,[2,50],{110:109,42:S,58:k,86:B,99:x,102:y,103:m,106:v,108:V,111:L,112:I,113:R}),{31:[1,207],65:f,79:208,113:A,114:d,115:E},e(l1,[2,79]),e(l1,[2,81]),e(l1,[2,82]),e(l1,[2,146]),e(l1,[2,147]),e(l1,[2,148]),e(l1,[2,149]),{47:[1,209],65:f,79:208,113:A,114:d,115:E},{30:210,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{49:[1,211],65:f,79:208,113:A,114:d,115:E},{51:[1,212],65:f,79:208,113:A,114:d,115:E},{53:[1,213],65:f,79:208,113:A,114:d,115:E},{55:[1,214],65:f,79:208,113:A,114:d,115:E},{58:[1,215]},{62:[1,216],65:f,79:208,113:A,114:d,115:E},{64:[1,217],65:f,79:208,113:A,114:d,115:E},{30:218,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{31:[1,219],65:f,79:208,113:A,114:d,115:E},{65:f,67:[1,220],69:[1,221],79:208,113:A,114:d,115:E},{65:f,67:[1,223],69:[1,222],79:208,113:A,114:d,115:E},e(z1,[2,44],{42:Gt}),e(I1,[2,70]),e(I1,[2,69]),{60:[1,224],65:f,79:208,113:A,114:d,115:E},e(I1,[2,72]),e(y1,[2,74]),{30:225,65:f,77:P,78:w,79:164,113:A,114:d,115:E},e(it,l,{5:226}),e(g,[2,95]),e(b,[2,35]),{41:227,42:S,43:39,45:40,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R},{10:Z,58:J,81:$,89:228,102:t1,104:229,105:230,106:e1,107:s1,108:u1,109:i1},{10:Z,58:J,81:$,89:239,101:[1,240],102:t1,104:229,105:230,106:e1,107:s1,108:u1,109:i1},{10:Z,58:J,81:$,89:241,101:[1,242],102:t1,104:229,105:230,106:e1,107:s1,108:u1,109:i1},{102:[1,243]},{10:Z,58:J,81:$,89:244,102:t1,104:229,105:230,106:e1,107:s1,108:u1,109:i1},{42:S,45:245,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R},e(T,[2,101]),{77:[1,246]},{77:[1,247],95:[1,248]},e(T,[2,109]),e(T,[2,111],{10:[1,249]}),e(T,[2,112]),e(N,[2,51]),e(l1,[2,80]),e(N,[2,52]),{49:[1,250],65:f,79:208,113:A,114:d,115:E},e(N,[2,59]),e(N,[2,54]),e(N,[2,55]),e(N,[2,56]),{106:[1,251]},e(N,[2,58]),e(N,[2,60]),{64:[1,252],65:f,79:208,113:A,114:d,115:E},e(N,[2,62]),e(N,[2,63]),e(N,[2,65]),e(N,[2,64]),e(N,[2,66]),e([10,42,58,86,99,102,103,106,108,111,112,113],[2,78]),{31:[1,253],65:f,79:208,113:A,114:d,115:E},{6:11,7:12,8:h,9:U,10:F,11:O,20:17,22:18,23:19,24:20,25:21,26:22,27:z,32:[1,254],33:24,34:c1,36:f1,38:A1,40:28,41:38,42:S,43:39,45:40,58:k,81:o1,82:w1,83:U1,84:G1,85:M1,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R,118:K1,119:j1,120:Y1,121:X1},e(H1,[2,48]),e(T,[2,114],{103:m1}),e(Kt,[2,123],{105:256,10:Z,58:J,81:$,102:t1,106:e1,107:s1,108:u1,109:i1}),e(H,[2,125]),e(H,[2,127]),e(H,[2,128]),e(H,[2,129]),e(H,[2,130]),e(H,[2,131]),e(H,[2,132]),e(H,[2,133]),e(H,[2,134]),e(T,[2,115],{103:m1}),{10:[1,257]},e(T,[2,116],{103:m1}),{10:[1,258]},e(Mt,[2,122]),e(T,[2,98],{103:m1}),e(T,[2,99],{110:109,42:S,58:k,86:B,99:x,102:y,103:m,106:v,108:V,111:L,112:I,113:R}),e(T,[2,103]),e(T,[2,105],{10:[1,259]}),e(T,[2,106]),{95:[1,260]},{49:[1,261]},{60:[1,262]},{64:[1,263]},{8:W,9:q,11:Q,21:264},e(b,[2,34]),{10:Z,58:J,81:$,102:t1,104:265,105:230,106:e1,107:s1,108:u1,109:i1},e(H,[2,126]),{14:k1,42:b1,58:g1,86:D1,98:266,102:F1,103:T1,106:C1,108:S1,111:_1,112:B1,113:x1,117:84},{14:k1,42:b1,58:g1,86:D1,98:267,102:F1,103:T1,106:C1,108:S1,111:_1,112:B1,113:x1,117:84},{95:[1,268]},e(T,[2,113]),e(N,[2,53]),{30:269,65:f,77:P,78:w,79:164,113:A,114:d,115:E},e(N,[2,61]),e(it,l,{5:270}),e(Kt,[2,124],{105:256,10:Z,58:J,81:$,102:t1,106:e1,107:s1,108:u1,109:i1}),e(T,[2,119],{117:160,10:[1,271],14:k1,42:b1,58:g1,86:D1,102:F1,103:T1,106:C1,108:S1,111:_1,112:B1,113:x1}),e(T,[2,120],{117:160,10:[1,272],14:k1,42:b1,58:g1,86:D1,102:F1,103:T1,106:C1,108:S1,111:_1,112:B1,113:x1}),e(T,[2,107]),{31:[1,273],65:f,79:208,113:A,114:d,115:E},{6:11,7:12,8:h,9:U,10:F,11:O,20:17,22:18,23:19,24:20,25:21,26:22,27:z,32:[1,274],33:24,34:c1,36:f1,38:A1,40:28,41:38,42:S,43:39,45:40,58:k,81:o1,82:w1,83:U1,84:G1,85:M1,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R,118:K1,119:j1,120:Y1,121:X1},{10:Z,58:J,81:$,89:275,102:t1,104:229,105:230,106:e1,107:s1,108:u1,109:i1},{10:Z,58:J,81:$,89:276,102:t1,104:229,105:230,106:e1,107:s1,108:u1,109:i1},e(N,[2,57]),e(b,[2,33]),e(T,[2,117],{103:m1}),e(T,[2,118],{103:m1})],defaultActions:{},parseError:function(a,o){if(o.recoverable)this.trace(a);else{var p=new Error(a);throw p.hash=o,p}},parse:function(a){var o=this,p=[0],r=[],C=[null],t=[],R1=this.table,s="",j=0,jt=0,Se=2,Yt=1,_e=t.slice.call(arguments,1),_=Object.create(this.lexer),d1={yy:{}};for(var at in this.yy)Object.prototype.hasOwnProperty.call(this.yy,at)&&(d1.yy[at]=this.yy[at]);_.setInput(a,d1.yy),d1.yy.lexer=_,d1.yy.parser=this,typeof _.yylloc>"u"&&(_.yylloc={});var ct=_.yylloc;t.push(ct);var Be=_.options&&_.options.ranges;typeof d1.yy.parseError=="function"?this.parseError=d1.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function xe(){var n1;return n1=r.pop()||_.lex()||Yt,typeof n1!="number"&&(n1 instanceof Array&&(r=n1,n1=r.pop()),n1=o.symbols_[n1]||n1),n1}for(var G,E1,Y,ot,v1={},W1,r1,Xt,q1;;){if(E1=p[p.length-1],this.defaultActions[E1]?Y=this.defaultActions[E1]:((G===null||typeof G>"u")&&(G=xe()),Y=R1[E1]&&R1[E1][G]),typeof Y>"u"||!Y.length||!Y[0]){var lt="";q1=[];for(W1 in R1[E1])this.terminals_[W1]&&W1>Se&&q1.push("'"+this.terminals_[W1]+"'");_.showPosition?lt="Parse error on line "+(j+1)+`:
                  +import{c as ft,u as ye,s as me,g as ve,a as Ve,b as Le,v as Ie,x as Re,l as Z1,y as At,z as Ne,j as Oe,h as N1}from"./mermaid.core-QJnSHCal.js";var ht=function(){var e=function(h1,a,o,p){for(o=o||{},p=h1.length;p--;o[h1[p]]=a);return o},u=[1,4],i=[1,3],n=[1,5],c=[1,8,9,10,11,27,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],l=[2,2],h=[1,13],U=[1,14],F=[1,15],O=[1,16],z=[1,23],c1=[1,25],f1=[1,26],A1=[1,27],S=[1,49],k=[1,48],o1=[1,29],w1=[1,30],U1=[1,31],G1=[1,32],M1=[1,33],B=[1,44],x=[1,46],y=[1,42],m=[1,47],v=[1,43],V=[1,50],L=[1,45],I=[1,51],R=[1,52],K1=[1,34],j1=[1,35],Y1=[1,36],X1=[1,37],L1=[1,57],b=[1,8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],W=[1,61],q=[1,60],Q=[1,62],z1=[8,9,11,73,75],k1=[1,88],b1=[1,93],g1=[1,92],D1=[1,89],F1=[1,85],T1=[1,91],C1=[1,87],S1=[1,94],_1=[1,90],B1=[1,95],x1=[1,86],H1=[8,9,10,11,73,75],N=[8,9,10,11,44,73,75],M=[8,9,10,11,29,42,44,46,48,50,52,54,56,58,61,63,65,66,68,73,75,86,99,102,103,106,108,111,112,113],Et=[8,9,11,42,58,73,75,86,99,102,103,106,108,111,112,113],I1=[42,58,86,99,102,103,106,108,111,112,113],kt=[1,121],bt=[1,120],gt=[1,128],Dt=[1,142],Ft=[1,143],Tt=[1,144],Ct=[1,145],St=[1,130],_t=[1,132],Bt=[1,136],xt=[1,137],yt=[1,138],mt=[1,139],vt=[1,140],Vt=[1,141],Lt=[1,146],It=[1,147],Rt=[1,126],Nt=[1,127],Ot=[1,134],Pt=[1,129],wt=[1,133],Ut=[1,131],it=[8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],Gt=[1,149],T=[8,9,11],K=[8,9,10,11,14,42,58,86,102,103,106,108,111,112,113],f=[1,169],P=[1,165],w=[1,166],A=[1,170],d=[1,167],E=[1,168],y1=[75,113,116],g=[8,9,10,11,12,14,27,29,32,42,58,73,81,82,83,84,85,86,87,102,106,108,111,112,113],Mt=[10,103],l1=[31,47,49,51,53,55,60,62,64,65,67,69,113,114,115],Z=[1,235],J=[1,233],$=[1,237],t1=[1,231],e1=[1,232],s1=[1,234],u1=[1,236],i1=[1,238],m1=[1,255],Kt=[8,9,11,103],H=[8,9,10,11,58,81,102,103,106,107,108,109],rt={trace:function(){},yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeperator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,verticeStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,link:39,node:40,styledVertex:41,AMP:42,vertex:43,STYLE_SEPARATOR:44,idString:45,DOUBLECIRCLESTART:46,DOUBLECIRCLEEND:47,PS:48,PE:49,"(-":50,"-)":51,STADIUMSTART:52,STADIUMEND:53,SUBROUTINESTART:54,SUBROUTINEEND:55,VERTEX_WITH_PROPS_START:56,"NODE_STRING[field]":57,COLON:58,"NODE_STRING[value]":59,PIPE:60,CYLINDERSTART:61,CYLINDEREND:62,DIAMOND_START:63,DIAMOND_STOP:64,TAGEND:65,TRAPSTART:66,TRAPEND:67,INVTRAPSTART:68,INVTRAPEND:69,linkStatement:70,arrowText:71,TESTSTR:72,START_LINK:73,edgeText:74,LINK:75,edgeTextToken:76,STR:77,MD_STR:78,textToken:79,keywords:80,STYLE:81,LINKSTYLE:82,CLASSDEF:83,CLASS:84,CLICK:85,DOWN:86,UP:87,textNoTagsToken:88,stylesOpt:89,"idString[vertex]":90,"idString[class]":91,CALLBACKNAME:92,CALLBACKARGS:93,HREF:94,LINK_TARGET:95,"STR[link]":96,"STR[tooltip]":97,alphaNum:98,DEFAULT:99,numList:100,INTERPOLATE:101,NUM:102,COMMA:103,style:104,styleComponent:105,NODE_STRING:106,UNIT:107,BRKT:108,PCT:109,idStringToken:110,MINUS:111,MULT:112,UNICODE_TEXT:113,TEXT:114,TAGSTART:115,EDGE_TEXT:116,alphaNumToken:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",42:"AMP",44:"STYLE_SEPARATOR",46:"DOUBLECIRCLESTART",47:"DOUBLECIRCLEEND",48:"PS",49:"PE",50:"(-",51:"-)",52:"STADIUMSTART",53:"STADIUMEND",54:"SUBROUTINESTART",55:"SUBROUTINEEND",56:"VERTEX_WITH_PROPS_START",57:"NODE_STRING[field]",58:"COLON",59:"NODE_STRING[value]",60:"PIPE",61:"CYLINDERSTART",62:"CYLINDEREND",63:"DIAMOND_START",64:"DIAMOND_STOP",65:"TAGEND",66:"TRAPSTART",67:"TRAPEND",68:"INVTRAPSTART",69:"INVTRAPEND",72:"TESTSTR",73:"START_LINK",75:"LINK",77:"STR",78:"MD_STR",81:"STYLE",82:"LINKSTYLE",83:"CLASSDEF",84:"CLASS",85:"CLICK",86:"DOWN",87:"UP",90:"idString[vertex]",91:"idString[class]",92:"CALLBACKNAME",93:"CALLBACKARGS",94:"HREF",95:"LINK_TARGET",96:"STR[link]",97:"STR[tooltip]",99:"DEFAULT",101:"INTERPOLATE",102:"NUM",103:"COMMA",106:"NODE_STRING",107:"UNIT",108:"BRKT",109:"PCT",111:"MINUS",112:"MULT",113:"UNICODE_TEXT",114:"TEXT",115:"TAGSTART",116:"EDGE_TEXT",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[20,3],[20,4],[20,2],[20,1],[40,1],[40,5],[41,1],[41,3],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,8],[43,4],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,4],[43,4],[43,1],[39,2],[39,3],[39,3],[39,1],[39,3],[74,1],[74,2],[74,1],[74,1],[70,1],[71,3],[30,1],[30,2],[30,1],[30,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[100,1],[100,3],[89,1],[89,3],[104,1],[104,2],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[79,1],[79,1],[79,1],[79,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[76,1],[76,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[45,1],[45,2],[98,1],[98,2],[33,1],[33,1],[33,1],[33,1]],performAction:function(a,o,p,r,C,t,R1){var s=t.length-1;switch(C){case 2:this.$=[];break;case 3:(!Array.isArray(t[s])||t[s].length>0)&&t[s-1].push(t[s]),this.$=t[s-1];break;case 4:case 176:this.$=t[s];break;case 11:r.setDirection("TB"),this.$="TB";break;case 12:r.setDirection(t[s-1]),this.$=t[s-1];break;case 27:this.$=t[s-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=r.addSubGraph(t[s-6],t[s-1],t[s-4]);break;case 34:this.$=r.addSubGraph(t[s-3],t[s-1],t[s-3]);break;case 35:this.$=r.addSubGraph(void 0,t[s-1],void 0);break;case 37:this.$=t[s].trim(),r.setAccTitle(this.$);break;case 38:case 39:this.$=t[s].trim(),r.setAccDescription(this.$);break;case 43:r.addLink(t[s-2].stmt,t[s],t[s-1]),this.$={stmt:t[s],nodes:t[s].concat(t[s-2].nodes)};break;case 44:r.addLink(t[s-3].stmt,t[s-1],t[s-2]),this.$={stmt:t[s-1],nodes:t[s-1].concat(t[s-3].nodes)};break;case 45:this.$={stmt:t[s-1],nodes:t[s-1]};break;case 46:this.$={stmt:t[s],nodes:t[s]};break;case 47:this.$=[t[s]];break;case 48:this.$=t[s-4].concat(t[s]);break;case 49:this.$=t[s];break;case 50:this.$=t[s-2],r.setClass(t[s-2],t[s]);break;case 51:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"square");break;case 52:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"doublecircle");break;case 53:this.$=t[s-5],r.addVertex(t[s-5],t[s-2],"circle");break;case 54:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"ellipse");break;case 55:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"stadium");break;case 56:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"subroutine");break;case 57:this.$=t[s-7],r.addVertex(t[s-7],t[s-1],"rect",void 0,void 0,void 0,Object.fromEntries([[t[s-5],t[s-3]]]));break;case 58:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"cylinder");break;case 59:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"round");break;case 60:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"diamond");break;case 61:this.$=t[s-5],r.addVertex(t[s-5],t[s-2],"hexagon");break;case 62:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"odd");break;case 63:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"trapezoid");break;case 64:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"inv_trapezoid");break;case 65:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"lean_right");break;case 66:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"lean_left");break;case 67:this.$=t[s],r.addVertex(t[s]);break;case 68:t[s-1].text=t[s],this.$=t[s-1];break;case 69:case 70:t[s-2].text=t[s-1],this.$=t[s-2];break;case 71:this.$=t[s];break;case 72:var j=r.destructLink(t[s],t[s-2]);this.$={type:j.type,stroke:j.stroke,length:j.length,text:t[s-1]};break;case 73:this.$={text:t[s],type:"text"};break;case 74:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 75:this.$={text:t[s],type:"string"};break;case 76:this.$={text:t[s],type:"markdown"};break;case 77:var j=r.destructLink(t[s]);this.$={type:j.type,stroke:j.stroke,length:j.length};break;case 78:this.$=t[s-1];break;case 79:this.$={text:t[s],type:"text"};break;case 80:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 81:this.$={text:t[s],type:"string"};break;case 82:case 97:this.$={text:t[s],type:"markdown"};break;case 94:this.$={text:t[s],type:"text"};break;case 95:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 96:this.$={text:t[s],type:"text"};break;case 98:this.$=t[s-4],r.addClass(t[s-2],t[s]);break;case 99:this.$=t[s-4],r.setClass(t[s-2],t[s]);break;case 100:case 108:this.$=t[s-1],r.setClickEvent(t[s-1],t[s]);break;case 101:case 109:this.$=t[s-3],r.setClickEvent(t[s-3],t[s-2]),r.setTooltip(t[s-3],t[s]);break;case 102:this.$=t[s-2],r.setClickEvent(t[s-2],t[s-1],t[s]);break;case 103:this.$=t[s-4],r.setClickEvent(t[s-4],t[s-3],t[s-2]),r.setTooltip(t[s-4],t[s]);break;case 104:this.$=t[s-2],r.setLink(t[s-2],t[s]);break;case 105:this.$=t[s-4],r.setLink(t[s-4],t[s-2]),r.setTooltip(t[s-4],t[s]);break;case 106:this.$=t[s-4],r.setLink(t[s-4],t[s-2],t[s]);break;case 107:this.$=t[s-6],r.setLink(t[s-6],t[s-4],t[s]),r.setTooltip(t[s-6],t[s-2]);break;case 110:this.$=t[s-1],r.setLink(t[s-1],t[s]);break;case 111:this.$=t[s-3],r.setLink(t[s-3],t[s-2]),r.setTooltip(t[s-3],t[s]);break;case 112:this.$=t[s-3],r.setLink(t[s-3],t[s-2],t[s]);break;case 113:this.$=t[s-5],r.setLink(t[s-5],t[s-4],t[s]),r.setTooltip(t[s-5],t[s-2]);break;case 114:this.$=t[s-4],r.addVertex(t[s-2],void 0,void 0,t[s]);break;case 115:this.$=t[s-4],r.updateLink([t[s-2]],t[s]);break;case 116:this.$=t[s-4],r.updateLink(t[s-2],t[s]);break;case 117:this.$=t[s-8],r.updateLinkInterpolate([t[s-6]],t[s-2]),r.updateLink([t[s-6]],t[s]);break;case 118:this.$=t[s-8],r.updateLinkInterpolate(t[s-6],t[s-2]),r.updateLink(t[s-6],t[s]);break;case 119:this.$=t[s-6],r.updateLinkInterpolate([t[s-4]],t[s]);break;case 120:this.$=t[s-6],r.updateLinkInterpolate(t[s-4],t[s]);break;case 121:case 123:this.$=[t[s]];break;case 122:case 124:t[s-2].push(t[s]),this.$=t[s-2];break;case 126:this.$=t[s-1]+t[s];break;case 174:this.$=t[s];break;case 175:this.$=t[s-1]+""+t[s];break;case 177:this.$=t[s-1]+""+t[s];break;case 178:this.$={stmt:"dir",value:"TB"};break;case 179:this.$={stmt:"dir",value:"BT"};break;case 180:this.$={stmt:"dir",value:"RL"};break;case 181:this.$={stmt:"dir",value:"LR"};break}},table:[{3:1,4:2,9:u,10:i,12:n},{1:[3]},e(c,l,{5:6}),{4:7,9:u,10:i,12:n},{4:8,9:u,10:i,12:n},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:h,9:U,10:F,11:O,20:17,22:18,23:19,24:20,25:21,26:22,27:z,33:24,34:c1,36:f1,38:A1,40:28,41:38,42:S,43:39,45:40,58:k,81:o1,82:w1,83:U1,84:G1,85:M1,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R,118:K1,119:j1,120:Y1,121:X1},e(c,[2,9]),e(c,[2,10]),e(c,[2,11]),{8:[1,54],9:[1,55],10:L1,15:53,18:56},e(b,[2,3]),e(b,[2,4]),e(b,[2,5]),e(b,[2,6]),e(b,[2,7]),e(b,[2,8]),{8:W,9:q,11:Q,21:58,39:59,70:63,73:[1,64],75:[1,65]},{8:W,9:q,11:Q,21:66},{8:W,9:q,11:Q,21:67},{8:W,9:q,11:Q,21:68},{8:W,9:q,11:Q,21:69},{8:W,9:q,11:Q,21:70},{8:W,9:q,10:[1,71],11:Q,21:72},e(b,[2,36]),{35:[1,73]},{37:[1,74]},e(b,[2,39]),e(z1,[2,46],{18:75,10:L1}),{10:[1,76]},{10:[1,77]},{10:[1,78]},{10:[1,79]},{14:k1,42:b1,58:g1,77:[1,83],86:D1,92:[1,80],94:[1,81],98:82,102:F1,103:T1,106:C1,108:S1,111:_1,112:B1,113:x1,117:84},e(b,[2,178]),e(b,[2,179]),e(b,[2,180]),e(b,[2,181]),e(H1,[2,47]),e(H1,[2,49],{44:[1,96]}),e(N,[2,67],{110:109,29:[1,97],42:S,46:[1,98],48:[1,99],50:[1,100],52:[1,101],54:[1,102],56:[1,103],58:k,61:[1,104],63:[1,105],65:[1,106],66:[1,107],68:[1,108],86:B,99:x,102:y,103:m,106:v,108:V,111:L,112:I,113:R}),e(M,[2,174]),e(M,[2,135]),e(M,[2,136]),e(M,[2,137]),e(M,[2,138]),e(M,[2,139]),e(M,[2,140]),e(M,[2,141]),e(M,[2,142]),e(M,[2,143]),e(M,[2,144]),e(M,[2,145]),e(c,[2,12]),e(c,[2,18]),e(c,[2,19]),{9:[1,110]},e(Et,[2,26],{18:111,10:L1}),e(b,[2,27]),{40:112,41:38,42:S,43:39,45:40,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R},e(b,[2,40]),e(b,[2,41]),e(b,[2,42]),e(I1,[2,71],{71:113,60:[1,115],72:[1,114]}),{74:116,76:117,77:[1,118],78:[1,119],113:kt,116:bt},e([42,58,60,72,86,99,102,103,106,108,111,112,113],[2,77]),e(b,[2,28]),e(b,[2,29]),e(b,[2,30]),e(b,[2,31]),e(b,[2,32]),{10:gt,12:Dt,14:Ft,27:Tt,28:122,32:Ct,42:St,58:_t,73:Bt,77:[1,124],78:[1,125],80:135,81:xt,82:yt,83:mt,84:vt,85:Vt,86:Lt,87:It,88:123,102:Rt,106:Nt,108:Ot,111:Pt,112:wt,113:Ut},e(it,l,{5:148}),e(b,[2,37]),e(b,[2,38]),e(z1,[2,45],{42:Gt}),{42:S,45:150,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R},{99:[1,151],100:152,102:[1,153]},{42:S,45:154,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R},{42:S,45:155,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R},e(T,[2,100],{10:[1,156],93:[1,157]}),{77:[1,158]},e(T,[2,108],{117:160,10:[1,159],14:k1,42:b1,58:g1,86:D1,102:F1,103:T1,106:C1,108:S1,111:_1,112:B1,113:x1}),e(T,[2,110],{10:[1,161]}),e(K,[2,176]),e(K,[2,163]),e(K,[2,164]),e(K,[2,165]),e(K,[2,166]),e(K,[2,167]),e(K,[2,168]),e(K,[2,169]),e(K,[2,170]),e(K,[2,171]),e(K,[2,172]),e(K,[2,173]),{42:S,45:162,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R},{30:163,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:171,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:173,48:[1,172],65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:174,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:175,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:176,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{106:[1,177]},{30:178,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:179,63:[1,180],65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:181,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:182,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{30:183,65:f,77:P,78:w,79:164,113:A,114:d,115:E},e(M,[2,175]),e(c,[2,20]),e(Et,[2,25]),e(z1,[2,43],{18:184,10:L1}),e(I1,[2,68],{10:[1,185]}),{10:[1,186]},{30:187,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{75:[1,188],76:189,113:kt,116:bt},e(y1,[2,73]),e(y1,[2,75]),e(y1,[2,76]),e(y1,[2,161]),e(y1,[2,162]),{8:W,9:q,10:gt,11:Q,12:Dt,14:Ft,21:191,27:Tt,29:[1,190],32:Ct,42:St,58:_t,73:Bt,80:135,81:xt,82:yt,83:mt,84:vt,85:Vt,86:Lt,87:It,88:192,102:Rt,106:Nt,108:Ot,111:Pt,112:wt,113:Ut},e(g,[2,94]),e(g,[2,96]),e(g,[2,97]),e(g,[2,150]),e(g,[2,151]),e(g,[2,152]),e(g,[2,153]),e(g,[2,154]),e(g,[2,155]),e(g,[2,156]),e(g,[2,157]),e(g,[2,158]),e(g,[2,159]),e(g,[2,160]),e(g,[2,83]),e(g,[2,84]),e(g,[2,85]),e(g,[2,86]),e(g,[2,87]),e(g,[2,88]),e(g,[2,89]),e(g,[2,90]),e(g,[2,91]),e(g,[2,92]),e(g,[2,93]),{6:11,7:12,8:h,9:U,10:F,11:O,20:17,22:18,23:19,24:20,25:21,26:22,27:z,32:[1,193],33:24,34:c1,36:f1,38:A1,40:28,41:38,42:S,43:39,45:40,58:k,81:o1,82:w1,83:U1,84:G1,85:M1,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R,118:K1,119:j1,120:Y1,121:X1},{10:L1,18:194},{10:[1,195],42:S,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:109,111:L,112:I,113:R},{10:[1,196]},{10:[1,197],103:[1,198]},e(Mt,[2,121]),{10:[1,199],42:S,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:109,111:L,112:I,113:R},{10:[1,200],42:S,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:109,111:L,112:I,113:R},{77:[1,201]},e(T,[2,102],{10:[1,202]}),e(T,[2,104],{10:[1,203]}),{77:[1,204]},e(K,[2,177]),{77:[1,205],95:[1,206]},e(H1,[2,50],{110:109,42:S,58:k,86:B,99:x,102:y,103:m,106:v,108:V,111:L,112:I,113:R}),{31:[1,207],65:f,79:208,113:A,114:d,115:E},e(l1,[2,79]),e(l1,[2,81]),e(l1,[2,82]),e(l1,[2,146]),e(l1,[2,147]),e(l1,[2,148]),e(l1,[2,149]),{47:[1,209],65:f,79:208,113:A,114:d,115:E},{30:210,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{49:[1,211],65:f,79:208,113:A,114:d,115:E},{51:[1,212],65:f,79:208,113:A,114:d,115:E},{53:[1,213],65:f,79:208,113:A,114:d,115:E},{55:[1,214],65:f,79:208,113:A,114:d,115:E},{58:[1,215]},{62:[1,216],65:f,79:208,113:A,114:d,115:E},{64:[1,217],65:f,79:208,113:A,114:d,115:E},{30:218,65:f,77:P,78:w,79:164,113:A,114:d,115:E},{31:[1,219],65:f,79:208,113:A,114:d,115:E},{65:f,67:[1,220],69:[1,221],79:208,113:A,114:d,115:E},{65:f,67:[1,223],69:[1,222],79:208,113:A,114:d,115:E},e(z1,[2,44],{42:Gt}),e(I1,[2,70]),e(I1,[2,69]),{60:[1,224],65:f,79:208,113:A,114:d,115:E},e(I1,[2,72]),e(y1,[2,74]),{30:225,65:f,77:P,78:w,79:164,113:A,114:d,115:E},e(it,l,{5:226}),e(g,[2,95]),e(b,[2,35]),{41:227,42:S,43:39,45:40,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R},{10:Z,58:J,81:$,89:228,102:t1,104:229,105:230,106:e1,107:s1,108:u1,109:i1},{10:Z,58:J,81:$,89:239,101:[1,240],102:t1,104:229,105:230,106:e1,107:s1,108:u1,109:i1},{10:Z,58:J,81:$,89:241,101:[1,242],102:t1,104:229,105:230,106:e1,107:s1,108:u1,109:i1},{102:[1,243]},{10:Z,58:J,81:$,89:244,102:t1,104:229,105:230,106:e1,107:s1,108:u1,109:i1},{42:S,45:245,58:k,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R},e(T,[2,101]),{77:[1,246]},{77:[1,247],95:[1,248]},e(T,[2,109]),e(T,[2,111],{10:[1,249]}),e(T,[2,112]),e(N,[2,51]),e(l1,[2,80]),e(N,[2,52]),{49:[1,250],65:f,79:208,113:A,114:d,115:E},e(N,[2,59]),e(N,[2,54]),e(N,[2,55]),e(N,[2,56]),{106:[1,251]},e(N,[2,58]),e(N,[2,60]),{64:[1,252],65:f,79:208,113:A,114:d,115:E},e(N,[2,62]),e(N,[2,63]),e(N,[2,65]),e(N,[2,64]),e(N,[2,66]),e([10,42,58,86,99,102,103,106,108,111,112,113],[2,78]),{31:[1,253],65:f,79:208,113:A,114:d,115:E},{6:11,7:12,8:h,9:U,10:F,11:O,20:17,22:18,23:19,24:20,25:21,26:22,27:z,32:[1,254],33:24,34:c1,36:f1,38:A1,40:28,41:38,42:S,43:39,45:40,58:k,81:o1,82:w1,83:U1,84:G1,85:M1,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R,118:K1,119:j1,120:Y1,121:X1},e(H1,[2,48]),e(T,[2,114],{103:m1}),e(Kt,[2,123],{105:256,10:Z,58:J,81:$,102:t1,106:e1,107:s1,108:u1,109:i1}),e(H,[2,125]),e(H,[2,127]),e(H,[2,128]),e(H,[2,129]),e(H,[2,130]),e(H,[2,131]),e(H,[2,132]),e(H,[2,133]),e(H,[2,134]),e(T,[2,115],{103:m1}),{10:[1,257]},e(T,[2,116],{103:m1}),{10:[1,258]},e(Mt,[2,122]),e(T,[2,98],{103:m1}),e(T,[2,99],{110:109,42:S,58:k,86:B,99:x,102:y,103:m,106:v,108:V,111:L,112:I,113:R}),e(T,[2,103]),e(T,[2,105],{10:[1,259]}),e(T,[2,106]),{95:[1,260]},{49:[1,261]},{60:[1,262]},{64:[1,263]},{8:W,9:q,11:Q,21:264},e(b,[2,34]),{10:Z,58:J,81:$,102:t1,104:265,105:230,106:e1,107:s1,108:u1,109:i1},e(H,[2,126]),{14:k1,42:b1,58:g1,86:D1,98:266,102:F1,103:T1,106:C1,108:S1,111:_1,112:B1,113:x1,117:84},{14:k1,42:b1,58:g1,86:D1,98:267,102:F1,103:T1,106:C1,108:S1,111:_1,112:B1,113:x1,117:84},{95:[1,268]},e(T,[2,113]),e(N,[2,53]),{30:269,65:f,77:P,78:w,79:164,113:A,114:d,115:E},e(N,[2,61]),e(it,l,{5:270}),e(Kt,[2,124],{105:256,10:Z,58:J,81:$,102:t1,106:e1,107:s1,108:u1,109:i1}),e(T,[2,119],{117:160,10:[1,271],14:k1,42:b1,58:g1,86:D1,102:F1,103:T1,106:C1,108:S1,111:_1,112:B1,113:x1}),e(T,[2,120],{117:160,10:[1,272],14:k1,42:b1,58:g1,86:D1,102:F1,103:T1,106:C1,108:S1,111:_1,112:B1,113:x1}),e(T,[2,107]),{31:[1,273],65:f,79:208,113:A,114:d,115:E},{6:11,7:12,8:h,9:U,10:F,11:O,20:17,22:18,23:19,24:20,25:21,26:22,27:z,32:[1,274],33:24,34:c1,36:f1,38:A1,40:28,41:38,42:S,43:39,45:40,58:k,81:o1,82:w1,83:U1,84:G1,85:M1,86:B,99:x,102:y,103:m,106:v,108:V,110:41,111:L,112:I,113:R,118:K1,119:j1,120:Y1,121:X1},{10:Z,58:J,81:$,89:275,102:t1,104:229,105:230,106:e1,107:s1,108:u1,109:i1},{10:Z,58:J,81:$,89:276,102:t1,104:229,105:230,106:e1,107:s1,108:u1,109:i1},e(N,[2,57]),e(b,[2,33]),e(T,[2,117],{103:m1}),e(T,[2,118],{103:m1})],defaultActions:{},parseError:function(a,o){if(o.recoverable)this.trace(a);else{var p=new Error(a);throw p.hash=o,p}},parse:function(a){var o=this,p=[0],r=[],C=[null],t=[],R1=this.table,s="",j=0,jt=0,Se=2,Yt=1,_e=t.slice.call(arguments,1),_=Object.create(this.lexer),d1={yy:{}};for(var at in this.yy)Object.prototype.hasOwnProperty.call(this.yy,at)&&(d1.yy[at]=this.yy[at]);_.setInput(a,d1.yy),d1.yy.lexer=_,d1.yy.parser=this,typeof _.yylloc>"u"&&(_.yylloc={});var ct=_.yylloc;t.push(ct);var Be=_.options&&_.options.ranges;typeof d1.yy.parseError=="function"?this.parseError=d1.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function xe(){var n1;return n1=r.pop()||_.lex()||Yt,typeof n1!="number"&&(n1 instanceof Array&&(r=n1,n1=r.pop()),n1=o.symbols_[n1]||n1),n1}for(var G,E1,Y,ot,v1={},W1,r1,Xt,q1;;){if(E1=p[p.length-1],this.defaultActions[E1]?Y=this.defaultActions[E1]:((G===null||typeof G>"u")&&(G=xe()),Y=R1[E1]&&R1[E1][G]),typeof Y>"u"||!Y.length||!Y[0]){var lt="";q1=[];for(W1 in R1[E1])this.terminals_[W1]&&W1>Se&&q1.push("'"+this.terminals_[W1]+"'");_.showPosition?lt="Parse error on line "+(j+1)+`:
                   `+_.showPosition()+`
                   Expecting `+q1.join(", ")+", got '"+(this.terminals_[G]||G)+"'":lt="Parse error on line "+(j+1)+": Unexpected "+(G==Yt?"end of input":"'"+(this.terminals_[G]||G)+"'"),this.parseError(lt,{text:_.match,token:this.terminals_[G]||G,line:_.yylineno,loc:ct,expected:q1})}if(Y[0]instanceof Array&&Y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+E1+", token: "+G);switch(Y[0]){case 1:p.push(G),C.push(_.yytext),t.push(_.yylloc),p.push(Y[1]),G=null,jt=_.yyleng,s=_.yytext,j=_.yylineno,ct=_.yylloc;break;case 2:if(r1=this.productions_[Y[1]][1],v1.$=C[C.length-r1],v1._$={first_line:t[t.length-(r1||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(r1||1)].first_column,last_column:t[t.length-1].last_column},Be&&(v1._$.range=[t[t.length-(r1||1)].range[0],t[t.length-1].range[1]]),ot=this.performAction.apply(v1,[s,jt,j,d1.yy,Y[1],C,t].concat(_e)),typeof ot<"u")return ot;r1&&(p=p.slice(0,-1*r1*2),C=C.slice(0,-1*r1),t=t.slice(0,-1*r1)),p.push(this.productions_[Y[1]][0]),C.push(v1.$),t.push(v1._$),Xt=R1[p[p.length-2]][p[p.length-1]],p.push(Xt);break;case 3:return!0}}return!0}},Ce=function(){var h1={EOF:1,parseError:function(o,p){if(this.yy.parser)this.yy.parser.parseError(o,p);else throw new Error(o)},setInput:function(a,o){return this.yy=o||this.yy||{},this._input=a,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var o=a.match(/(?:\r\n?|\n).*/g);return o?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var o=a.length,p=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-o),this.offset-=o;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),p.length-1&&(this.yylineno-=p.length-1);var C=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:p?(p.length===r.length?this.yylloc.first_column:0)+r[r.length-p.length].length-p[0].length:this.yylloc.first_column-o},this.options.ranges&&(this.yylloc.range=[C[0],C[0]+this.yyleng-o]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
                   `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),o=new Array(a.length+1).join("-");return a+this.upcomingInput()+`
                  diff --git a/assets/flowDiagram-61eb444c-niCbBEPW.js b/assets/flowDiagram-61eb444c-DuMoGt9F.js
                  similarity index 97%
                  rename from assets/flowDiagram-61eb444c-niCbBEPW.js
                  rename to assets/flowDiagram-61eb444c-DuMoGt9F.js
                  index fb463c2..e9e8b1c 100644
                  --- a/assets/flowDiagram-61eb444c-niCbBEPW.js
                  +++ b/assets/flowDiagram-61eb444c-DuMoGt9F.js
                  @@ -1,4 +1,4 @@
                  -import{p as St,f as W}from"./flowDb-170db09d-q-5Qwvam.js";import{h as S,u as Lt,r as Et,p as _t,l as Tt,d as M,f as tt,G as Nt}from"./layout-1ugHHiNm.js";import{h as x,o as P,p as z,q as et,c as J,j as rt,l as R,r as V,t as At}from"./mermaid.core-zy7cM8l9.js";import{a as N,b as at,i as nt,c as _,e as st,d as it,f as Ct,g as It,s as Bt}from"./styles-b966c4ae-H6tCXVxS.js";import{l as Mt}from"./line-TqRW8de4.js";import"./app-BrxqtzGY.js";import"./index-67a42d7d-p9ZYh1Xw.js";import"./edges-80f1ebb6--gcvlmof.js";import"./createText-aebacdfe-JILF3Vy1.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";function Dt(r){if(!r.ok)throw new Error(r.status+" "+r.statusText);return r.text()}function Rt(r,e){return fetch(r,e).then(Dt)}function Gt(r){return(e,t)=>Rt(e,t).then(n=>new DOMParser().parseFromString(n,r))}var Pt=Gt("image/svg+xml"),Y={normal:$t,vee:Wt,undirected:Vt};function Ut(r){Y=r}function $t(r,e,t,n){var a=r.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),s=a.append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");N(s,t[n+"Style"]),t[n+"Class"]&&s.attr("class",t[n+"Class"])}function Wt(r,e,t,n){var a=r.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),s=a.append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");N(s,t[n+"Style"]),t[n+"Class"]&&s.attr("class",t[n+"Class"])}function Vt(r,e,t,n){var a=r.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),s=a.append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");N(s,t[n+"Style"]),t[n+"Class"]&&s.attr("class",t[n+"Class"])}function zt(r,e){var t=r;return t.node().appendChild(e.label),N(t,e.labelStyle),t}function Yt(r,e){for(var t=r.append("text"),n=Ht(e.label).split(`
                  +import{p as St,f as W}from"./flowDb-170db09d-41y1nEiW.js";import{h as S,u as Lt,r as Et,p as _t,l as Tt,d as M,f as tt,G as Nt}from"./layout-Vth69vlg.js";import{h as x,o as P,p as z,q as et,c as J,j as rt,l as R,r as V,t as At}from"./mermaid.core-QJnSHCal.js";import{a as N,b as at,i as nt,c as _,e as st,d as it,f as Ct,g as It,s as Bt}from"./styles-b966c4ae-B_U_A2hx.js";import{l as Mt}from"./line-ZVNdUhg2.js";import"./app-oTlYPy8h.js";import"./index-67a42d7d-TJSwJJ1D.js";import"./edges-80f1ebb6-kOLp6foW.js";import"./createText-aebacdfe-8FzA6VnR.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";function Dt(r){if(!r.ok)throw new Error(r.status+" "+r.statusText);return r.text()}function Rt(r,e){return fetch(r,e).then(Dt)}function Gt(r){return(e,t)=>Rt(e,t).then(n=>new DOMParser().parseFromString(n,r))}var Pt=Gt("image/svg+xml"),Y={normal:$t,vee:Wt,undirected:Vt};function Ut(r){Y=r}function $t(r,e,t,n){var a=r.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),s=a.append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");N(s,t[n+"Style"]),t[n+"Class"]&&s.attr("class",t[n+"Class"])}function Wt(r,e,t,n){var a=r.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),s=a.append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");N(s,t[n+"Style"]),t[n+"Class"]&&s.attr("class",t[n+"Class"])}function Vt(r,e,t,n){var a=r.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),s=a.append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");N(s,t[n+"Style"]),t[n+"Class"]&&s.attr("class",t[n+"Class"])}function zt(r,e){var t=r;return t.node().appendChild(e.label),N(t,e.labelStyle),t}function Yt(r,e){for(var t=r.append("text"),n=Ht(e.label).split(`
                   `),a=0;a0}function T(r,e,t){var n=r.x,a=r.y,s=[],i=Number.POSITIVE_INFINITY,o=Number.POSITIVE_INFINITY;e.forEach(function(p){i=Math.min(i,p.x),o=Math.min(o,p.y)});for(var c=n-r.width/2-i,d=a-r.height/2-o,l=0;l1&&s.sort(function(p,g){var f=p.x-t.x,y=p.y-t.y,k=Math.sqrt(f*f+y*y),I=g.x-t.x,E=g.y-t.y,U=Math.sqrt(I*I+E*E);return kMath.abs(a)*o?(s<0&&(o=-o),c=s===0?0:o*a/s,d=o):(a<0&&(i=-i),c=i,d=a===0?0:i*s/a),{x:t+c,y:n+d}}var Q={rect:ie,ellipse:oe,circle:le,diamond:ce};function se(r){Q=r}function ie(r,e,t){var n=r.insert("rect",":first-child").attr("rx",t.rx).attr("ry",t.ry).attr("x",-e.width/2).attr("y",-e.height/2).attr("width",e.width).attr("height",e.height);return t.intersect=function(a){return Z(t,a)},n}function oe(r,e,t){var n=e.width/2,a=e.height/2,s=r.insert("ellipse",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("rx",n).attr("ry",a);return t.intersect=function(i){return lt(t,n,a,i)},s}function le(r,e,t){var n=Math.max(e.width,e.height)/2,a=r.insert("circle",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("r",n);return t.intersect=function(s){return ae(t,n,s)},a}function ce(r,e,t){var n=e.width*Math.SQRT2/2,a=e.height*Math.SQRT2/2,s=[{x:0,y:-a},{x:-n,y:0},{x:0,y:a},{x:n,y:0}],i=r.insert("polygon",":first-child").attr("points",s.map(function(o){return o.x+","+o.y}).join(" "));return t.intersect=function(o){return T(t,s,o)},i}function de(){var r=function(e,t){fe(t);var n=D(e,"output"),a=D(n,"clusters"),s=D(n,"edgePaths"),i=X(D(n,"edgeLabels"),t),o=q(D(n,"nodes"),t,Q);Tt(t),re(o,t),ee(i,t),F(s,t,Y);var c=H(a,t);te(c,t),pe(t)};return r.createNodes=function(e){return arguments.length?(jt(e),r):q},r.createClusters=function(e){return arguments.length?(Xt(e),r):H},r.createEdgeLabels=function(e){return arguments.length?(Ft(e),r):X},r.createEdgePaths=function(e){return arguments.length?(qt(e),r):F},r.shapes=function(e){return arguments.length?(se(e),r):Q},r.arrows=function(e){return arguments.length?(Ut(e),r):Y},r}var he={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},ue={arrowhead:"normal",curve:P};function fe(r){r.nodes().forEach(function(e){var t=r.node(e);!S(t,"label")&&!r.children(e).length&&(t.label=e),S(t,"paddingX")&&M(t,{paddingLeft:t.paddingX,paddingRight:t.paddingX}),S(t,"paddingY")&&M(t,{paddingTop:t.paddingY,paddingBottom:t.paddingY}),S(t,"padding")&&M(t,{paddingLeft:t.padding,paddingRight:t.padding,paddingTop:t.padding,paddingBottom:t.padding}),M(t,he),tt(["paddingLeft","paddingRight","paddingTop","paddingBottom"],function(n){t[n]=Number(t[n])}),S(t,"width")&&(t._prevWidth=t.width),S(t,"height")&&(t._prevHeight=t.height)}),r.edges().forEach(function(e){var t=r.edge(e);S(t,"label")||(t.label=""),M(t,ue)})}function pe(r){tt(r.nodes(),function(e){var t=r.node(e);S(t,"_prevWidth")?t.width=t._prevWidth:delete t.width,S(t,"_prevHeight")?t.height=t._prevHeight:delete t.height,delete t._prevWidth,delete t._prevHeight})}function D(r,e){var t=r.select("g."+e);return t.empty()&&(t=r.append("g").attr("class",e)),t}function ct(r,e,t){const n=e.width,a=e.height,s=(n+a)*.9,i=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}],o=A(r,s,s,i);return t.intersect=function(c){return T(t,i,c)},o}function dt(r,e,t){const a=e.height,s=a/4,i=e.width+2*s,o=[{x:s,y:0},{x:i-s,y:0},{x:i,y:-a/2},{x:i-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],c=A(r,i,a,o);return t.intersect=function(d){return T(t,o,d)},c}function ht(r,e,t){const n=e.width,a=e.height,s=[{x:-a/2,y:0},{x:n,y:0},{x:n,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}],i=A(r,n,a,s);return t.intersect=function(o){return T(t,s,o)},i}function ut(r,e,t){const n=e.width,a=e.height,s=[{x:-2*a/6,y:0},{x:n-a/6,y:0},{x:n+2*a/6,y:-a},{x:a/6,y:-a}],i=A(r,n,a,s);return t.intersect=function(o){return T(t,s,o)},i}function ft(r,e,t){const n=e.width,a=e.height,s=[{x:2*a/6,y:0},{x:n+a/6,y:0},{x:n-2*a/6,y:-a},{x:-a/6,y:-a}],i=A(r,n,a,s);return t.intersect=function(o){return T(t,s,o)},i}function pt(r,e,t){const n=e.width,a=e.height,s=[{x:-2*a/6,y:0},{x:n+2*a/6,y:0},{x:n-a/6,y:-a},{x:a/6,y:-a}],i=A(r,n,a,s);return t.intersect=function(o){return T(t,s,o)},i}function vt(r,e,t){const n=e.width,a=e.height,s=[{x:a/6,y:0},{x:n-a/6,y:0},{x:n+2*a/6,y:-a},{x:-2*a/6,y:-a}],i=A(r,n,a,s);return t.intersect=function(o){return T(t,s,o)},i}function yt(r,e,t){const n=e.width,a=e.height,s=[{x:0,y:0},{x:n+a/2,y:0},{x:n,y:-a/2},{x:n+a/2,y:-a},{x:0,y:-a}],i=A(r,n,a,s);return t.intersect=function(o){return T(t,s,o)},i}function gt(r,e,t){const n=e.height,a=e.width+n/4,s=r.insert("rect",":first-child").attr("rx",n/2).attr("ry",n/2).attr("x",-a/2).attr("y",-n/2).attr("width",a).attr("height",n);return t.intersect=function(i){return Z(t,i)},s}function wt(r,e,t){const n=e.width,a=e.height,s=[{x:0,y:0},{x:n,y:0},{x:n,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:n+8,y:0},{x:n+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],i=A(r,n,a,s);return t.intersect=function(o){return T(t,s,o)},i}function mt(r,e,t){const n=e.width,a=n/2,s=a/(2.5+n/50),i=e.height+s,o="M 0,"+s+" a "+a+","+s+" 0,0,0 "+n+" 0 a "+a+","+s+" 0,0,0 "+-n+" 0 l 0,"+i+" a "+a+","+s+" 0,0,0 "+n+" 0 l 0,"+-i,c=r.attr("label-offset-y",s).insert("path",":first-child").attr("d",o).attr("transform","translate("+-n/2+","+-(i/2+s)+")");return t.intersect=function(d){const l=Z(t,d),v=l.x-t.x;if(a!=0&&(Math.abs(v)t.height/2-s)){let h=s*s*(1-v*v/(a*a));h!=0&&(h=Math.sqrt(h)),h=s-h,d.y-t.y>0&&(h=-h),l.y+=h}return l},c}function ve(r){r.shapes().question=ct,r.shapes().hexagon=dt,r.shapes().stadium=gt,r.shapes().subroutine=wt,r.shapes().cylinder=mt,r.shapes().rect_left_inv_arrow=ht,r.shapes().lean_right=ut,r.shapes().lean_left=ft,r.shapes().trapezoid=pt,r.shapes().inv_trapezoid=vt,r.shapes().rect_right_inv_arrow=yt}function ye(r){r({question:ct}),r({hexagon:dt}),r({stadium:gt}),r({subroutine:wt}),r({cylinder:mt}),r({rect_left_inv_arrow:ht}),r({lean_right:ut}),r({lean_left:ft}),r({trapezoid:pt}),r({inv_trapezoid:vt}),r({rect_right_inv_arrow:yt})}function A(r,e,t,n){return r.insert("polygon",":first-child").attr("points",n.map(function(a){return a.x+","+a.y}).join(" ")).attr("transform","translate("+-e/2+","+t/2+")")}const ge={addToRender:ve,addToRenderV2:ye},xt={},we=function(r){const e=Object.keys(r);for(const t of e)xt[t]=r[t]},bt=function(r,e,t,n,a,s){const i=n?n.select(`[id="${t}"]`):x(`[id="${t}"]`),o=a||document;Object.keys(r).forEach(function(d){const l=r[d];let v="default";l.classes.length>0&&(v=l.classes.join(" "));const h=z(l.styles);let u=l.text!==void 0?l.text:l.id,p;if(et(J().flowchart.htmlLabels)){const y={label:u.replace(/fa[blrs]?:fa-[\w-]+/g,k=>``)};p=at(i,y).node(),p.parentNode.removeChild(p)}else{const y=o.createElementNS("http://www.w3.org/2000/svg","text");y.setAttribute("style",h.labelStyle.replace("color:","fill:"));const k=u.split(rt.lineBreakRegex);for(const I of k){const E=o.createElementNS("http://www.w3.org/2000/svg","tspan");E.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),E.setAttribute("dy","1em"),E.setAttribute("x","1"),E.textContent=I,y.appendChild(E)}p=y}let g=0,f="";switch(l.type){case"round":g=5,f="rect";break;case"square":f="rect";break;case"diamond":f="question";break;case"hexagon":f="hexagon";break;case"odd":f="rect_left_inv_arrow";break;case"lean_right":f="lean_right";break;case"lean_left":f="lean_left";break;case"trapezoid":f="trapezoid";break;case"inv_trapezoid":f="inv_trapezoid";break;case"odd_right":f="rect_left_inv_arrow";break;case"circle":f="circle";break;case"ellipse":f="ellipse";break;case"stadium":f="stadium";break;case"subroutine":f="subroutine";break;case"cylinder":f="cylinder";break;case"group":f="rect";break;default:f="rect"}R.warn("Adding node",l.id,l.domId),e.setNode(s.db.lookUpDomId(l.id),{labelType:"svg",labelStyle:h.labelStyle,shape:f,label:p,rx:g,ry:g,class:v,style:h.style,id:s.db.lookUpDomId(l.id)})})},kt=function(r,e,t){let n=0,a,s;if(r.defaultStyle!==void 0){const i=z(r.defaultStyle);a=i.style,s=i.labelStyle}r.forEach(function(i){n++;const o="L-"+i.start+"-"+i.end,c="LS-"+i.start,d="LE-"+i.end,l={};i.type==="arrow_open"?l.arrowhead="none":l.arrowhead="normal";let v="",h="";if(i.style!==void 0){const u=z(i.style);v=u.style,h=u.labelStyle}else switch(i.stroke){case"normal":v="fill:none",a!==void 0&&(v=a),s!==void 0&&(h=s);break;case"dotted":v="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":v=" stroke-width: 3.5px;fill:none";break}l.style=v,l.labelStyle=h,i.interpolate!==void 0?l.curve=V(i.interpolate,P):r.defaultInterpolate!==void 0?l.curve=V(r.defaultInterpolate,P):l.curve=V(xt.curve,P),i.text===void 0?i.style!==void 0&&(l.arrowheadStyle="fill: #333"):(l.arrowheadStyle="fill: #333",l.labelpos="c",et(J().flowchart.htmlLabels)?(l.labelType="html",l.label=`${i.text.replace(/fa[blrs]?:fa-[\w-]+/g,u=>``)}`):(l.labelType="text",l.label=i.text.replace(rt.lineBreakRegex,`
                   `),i.style===void 0&&(l.style=l.style||"stroke: #333; stroke-width: 1.5px;fill:none"),l.labelStyle=l.labelStyle.replace("color:","fill:"))),l.id=o,l.class=c+" "+d,l.minlen=i.length||1,e.setEdge(t.db.lookUpDomId(i.start),t.db.lookUpDomId(i.end),l,n)})},me=function(r,e){return R.info("Extracting classes"),e.db.getClasses()},xe=function(r,e,t,n){R.info("Drawing flowchart");const{securityLevel:a,flowchart:s}=J();let i;a==="sandbox"&&(i=x("#i"+e));const o=a==="sandbox"?x(i.nodes()[0].contentDocument.body):x("body"),c=a==="sandbox"?i.nodes()[0].contentDocument:document;let d=n.db.getDirection();d===void 0&&(d="TD");const l=s.nodeSpacing||50,v=s.rankSpacing||50,h=new Nt({multigraph:!0,compound:!0}).setGraph({rankdir:d,nodesep:l,ranksep:v,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});let u;const p=n.db.getSubGraphs();for(let w=p.length-1;w>=0;w--)u=p[w],n.db.addVertex(u.id,u.title,"group",void 0,u.classes);const g=n.db.getVertices();R.warn("Get vertices",g);const f=n.db.getEdges();let y=0;for(y=p.length-1;y>=0;y--){u=p[y],Bt("cluster").append("text");for(let w=0;w{r.flowchart||(r.flowchart={}),r.flowchart.arrowMarkerAbsolute=r.arrowMarkerAbsolute,be.setConf(r.flowchart),W.clear(),W.setGen("gen-1")}};export{Me as diagram};
                  diff --git a/assets/flowDiagram-v2-2f8f667a-Ob2Hpvk_.js b/assets/flowDiagram-v2-2f8f667a-Ob2Hpvk_.js
                  new file mode 100644
                  index 0000000..740da9b
                  --- /dev/null
                  +++ b/assets/flowDiagram-v2-2f8f667a-Ob2Hpvk_.js
                  @@ -0,0 +1 @@
                  +import{p as e,f as o}from"./flowDb-170db09d-41y1nEiW.js";import{f as t,g as a}from"./styles-b966c4ae-B_U_A2hx.js";import{aq as s}from"./mermaid.core-QJnSHCal.js";import"./layout-Vth69vlg.js";import"./index-67a42d7d-TJSwJJ1D.js";import"./edges-80f1ebb6-kOLp6foW.js";import"./createText-aebacdfe-8FzA6VnR.js";import"./line-ZVNdUhg2.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";import"./app-oTlYPy8h.js";const u={parser:e,db:o,renderer:t,styles:a,init:r=>{r.flowchart||(r.flowchart={}),r.flowchart.arrowMarkerAbsolute=r.arrowMarkerAbsolute,s({flowchart:{arrowMarkerAbsolute:r.arrowMarkerAbsolute}}),t.setConf(r.flowchart),o.clear(),o.setGen("gen-2")}};export{u as diagram};
                  diff --git a/assets/flowDiagram-v2-2f8f667a-kIE4L_ig.js b/assets/flowDiagram-v2-2f8f667a-kIE4L_ig.js
                  deleted file mode 100644
                  index 3a7de50..0000000
                  --- a/assets/flowDiagram-v2-2f8f667a-kIE4L_ig.js
                  +++ /dev/null
                  @@ -1 +0,0 @@
                  -import{p as e,f as o}from"./flowDb-170db09d-q-5Qwvam.js";import{f as t,g as a}from"./styles-b966c4ae-H6tCXVxS.js";import{aq as s}from"./mermaid.core-zy7cM8l9.js";import"./layout-1ugHHiNm.js";import"./index-67a42d7d-p9ZYh1Xw.js";import"./edges-80f1ebb6--gcvlmof.js";import"./createText-aebacdfe-JILF3Vy1.js";import"./line-TqRW8de4.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";import"./app-BrxqtzGY.js";const u={parser:e,db:o,renderer:t,styles:a,init:r=>{r.flowchart||(r.flowchart={}),r.flowchart.arrowMarkerAbsolute=r.arrowMarkerAbsolute,s({flowchart:{arrowMarkerAbsolute:r.arrowMarkerAbsolute}}),t.setConf(r.flowchart),o.clear(),o.setGen("gen-2")}};export{u as diagram};
                  diff --git a/assets/flowchart-elk-definition-e097735e-aDa6k5ld.js b/assets/flowchart-elk-definition-e097735e-Zb7AIGeW.js
                  similarity index 99%
                  rename from assets/flowchart-elk-definition-e097735e-aDa6k5ld.js
                  rename to assets/flowchart-elk-definition-e097735e-Zb7AIGeW.js
                  index fae01b0..3a811ed 100644
                  --- a/assets/flowchart-elk-definition-e097735e-aDa6k5ld.js
                  +++ b/assets/flowchart-elk-definition-e097735e-Zb7AIGeW.js
                  @@ -1,4 +1,4 @@
                  -import{d as bMe,p as wMe}from"./flowDb-170db09d-q-5Qwvam.js";import{aB as Hee,aC as gMe,l as K1,h as lI,a$ as OH,t as pMe,p as V1n,r as X1n,o as IH,j as vMe}from"./mermaid.core-zy7cM8l9.js";import{i as mMe,a as kMe,l as yMe,b as jMe,j as EMe}from"./edges-80f1ebb6--gcvlmof.js";import{l as CMe}from"./line-TqRW8de4.js";import"./app-BrxqtzGY.js";import"./createText-aebacdfe-JILF3Vy1.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";function PH(Ae){throw new Error('Could not dynamically require "'+Ae+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var Uee={exports:{}};(function(Ae,At){(function(ft){Ae.exports=ft()})(function(){return function(){function ft(dt,Vt,Et){function y(Bt,qt){if(!Vt[Bt]){if(!dt[Bt]){var Ge=typeof PH=="function"&&PH;if(!qt&&Ge)return Ge(Bt,!0);if(Ht)return Ht(Bt,!0);var Ki=new Error("Cannot find module '"+Bt+"'");throw Ki.code="MODULE_NOT_FOUND",Ki}var Ii=Vt[Bt]={exports:{}};dt[Bt][0].call(Ii.exports,function(An){var Uc=dt[Bt][1][An];return y(Uc||An)},Ii,Ii.exports,ft,dt,Vt,Et)}return Vt[Bt].exports}for(var Ht=typeof PH=="function"&&PH,Lc=0;Lc0&&arguments[0]!==void 0?arguments[0]:{},Ki=Ge.defaultLayoutOptions,Ii=Ki===void 0?{}:Ki,An=Ge.algorithms,Uc=An===void 0?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:An,Nc=Ge.workerFactory,ju=Ge.workerUrl;if(y(this,Bt),this.defaultLayoutOptions=Ii,this.initialized=!1,typeof ju>"u"&&typeof Nc>"u")throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var vr=Nc;typeof ju<"u"&&typeof Nc>"u"&&(vr=function(q1){return new Worker(q1)});var Jo=vr(ju);if(typeof Jo.postMessage!="function")throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new Lc(Jo),this.worker.postMessage({cmd:"register",algorithms:Uc}).then(function(H1){return qt.initialized=!0}).catch(console.err)}return Et(Bt,[{key:"layout",value:function(Ge){var Ki=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Ii=Ki.layoutOptions,An=Ii===void 0?this.defaultLayoutOptions:Ii,Uc=Ki.logging,Nc=Uc===void 0?!1:Uc,ju=Ki.measureExecutionTime,vr=ju===void 0?!1:ju;return Ge?this.worker.postMessage({cmd:"layout",graph:Ge,layoutOptions:An,options:{logging:Nc,measureExecutionTime:vr}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker.terminate()}}]),Bt}();Vt.default=Ht;var Lc=function(){function Bt(qt){var Ge=this;if(y(this,Bt),qt===void 0)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=qt,this.worker.onmessage=function(Ki){setTimeout(function(){Ge.receive(Ge,Ki)},0)}}return Et(Bt,[{key:"postMessage",value:function(Ge){var Ki=this.id||0;this.id=Ki+1,Ge.id=Ki;var Ii=this;return new Promise(function(An,Uc){Ii.resolvers[Ki]=function(Nc,ju){Nc?(Ii.convertGwtStyleError(Nc),Uc(Nc)):An(ju)},Ii.worker.postMessage(Ge)})}},{key:"receive",value:function(Ge,Ki){var Ii=Ki.data,An=Ge.resolvers[Ii.id];An&&(delete Ge.resolvers[Ii.id],Ii.error?An(Ii.error):An(null,Ii.data))}},{key:"terminate",value:function(){this.worker.terminate&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(Ge){if(Ge){var Ki=Ge.__java$exception;Ki&&(Ki.cause&&Ki.cause.backingJsObject&&(Ge.cause=Ki.cause.backingJsObject,this.convertGwtStyleError(Ge.cause)),delete Ge.__java$exception)}}}]),Bt}()},{}],2:[function(ft,dt,Vt){(function(Et){(function(){var y;typeof window<"u"?y=window:typeof Et<"u"?y=Et:typeof self<"u"&&(y=self);var Ht;function Lc(){}function Bt(){}function qt(){}function Ge(){}function Ki(){}function Ii(){}function An(){}function Uc(){}function Nc(){}function ju(){}function vr(){}function Jo(){}function H1(){}function q1(){}function ww(){}function Np(){}function G1(){}function Th(){}function Q1n(){}function J1n(){}function zy(){}function Y1n(){}function Z1n(){}function nln(){}function eln(){}function Xg(){}function N(){}function tln(){}function aI(){}function iln(){}function rln(){}function cln(){}function uln(){}function DH(){}function sln(){}function oln(){}function fln(){}function z1(){}function U1(){}function dI(){}function hln(){}function lln(){}function aln(){}function $H(){}function dln(){}function bln(){}function Vg(){}function Qg(){}function wln(){}function gln(){}function pln(){}function vln(){}function FH(){}function W1(){}function Jg(){}function Yg(){}function mln(){}function Vee(){}function bI(){}function kln(){}function yln(){}function jln(){}function Eln(){}function Cln(){}function Tln(){}function Mln(){}function Aln(){}function Sln(){}function Pln(){}function Iln(){}function Oln(){}function Dln(){}function $ln(){}function Fln(){}function xln(){}function Lln(){}function Nln(){}function Bln(){}function Rln(){}function _ln(){}function Kln(){}function Hln(){}function qln(){}function Gln(){}function zln(){}function Uln(){}function Wln(){}function Xln(){}function Vln(){}function Qln(){}function Jln(){}function Yln(){}function xH(){}function Zln(){}function nan(){}function ean(){}function tan(){}function wI(){}function gI(){}function Uy(){}function ian(){}function ran(){}function pI(){}function can(){}function uan(){}function san(){}function Wy(){}function oan(){}function fan(){}function han(){}function lan(){}function aan(){}function dan(){}function ban(){}function wan(){}function gan(){}function LH(){}function pan(){}function van(){}function man(){}function kan(){}function yan(){}function NH(){}function jan(){}function Ean(){}function Can(){}function Tan(){}function Man(){}function Aan(){}function San(){}function Pan(){}function Ian(){}function Oan(){}function Dan(){}function $an(){}function Fan(){}function xan(){}function vI(){}function Lan(){}function Nan(){}function Ban(){}function Ran(){}function _an(){}function BH(){}function Kan(){}function Han(){}function qan(){}function Gan(){}function zan(){}function Uan(){}function Wan(){}function Xan(){}function Van(){}function Qan(){}function Jan(){}function Yan(){}function Zan(){}function ndn(){}function edn(){}function tdn(){}function idn(){}function rdn(){}function cdn(){}function udn(){}function sdn(){}function odn(){}function fdn(){}function hdn(){}function ldn(){}function adn(){}function ddn(){}function bdn(){}function wdn(){}function gdn(){}function pdn(){}function vdn(){}function mdn(){}function kdn(){}function ydn(){}function jdn(){}function Edn(){}function Cdn(){}function Tdn(){}function Mdn(){}function Adn(){}function Sdn(){}function Pdn(){}function Idn(){}function Odn(){}function Ddn(){}function $dn(){}function Fdn(){}function xdn(){}function Ldn(){}function Ndn(){}function Bdn(){}function Rdn(){}function _dn(){}function Kdn(){}function Hdn(){}function qdn(){}function Gdn(){}function zdn(){}function Udn(){}function Wdn(){}function Xdn(){}function Vdn(){}function Qdn(){}function Jdn(){}function Ydn(){}function Zdn(){}function n0n(){}function e0n(){}function t0n(){}function i0n(){}function r0n(){}function c0n(){}function u0n(){}function s0n(){}function o0n(){}function f0n(){}function h0n(){}function l0n(){}function a0n(){}function d0n(){}function b0n(){}function w0n(){}function g0n(){}function p0n(){}function v0n(){}function m0n(){}function k0n(){}function y0n(){}function j0n(){}function E0n(){}function C0n(){}function T0n(){}function M0n(){}function A0n(){}function S0n(){}function P0n(){}function I0n(){}function O0n(){}function D0n(){}function RH(){}function $0n(){}function F0n(){}function x0n(){}function L0n(){}function N0n(){}function B0n(){}function R0n(){}function _0n(){}function K0n(){}function H0n(){}function q0n(){}function G0n(){}function z0n(){}function U0n(){}function W0n(){}function X0n(){}function V0n(){}function Q0n(){}function J0n(){}function Y0n(){}function Z0n(){}function nbn(){}function ebn(){}function tbn(){}function ibn(){}function rbn(){}function cbn(){}function ubn(){}function sbn(){}function obn(){}function fbn(){}function hbn(){}function lbn(){}function abn(){}function dbn(){}function bbn(){}function wbn(){}function gbn(){}function pbn(){}function vbn(){}function mbn(){}function kbn(){}function ybn(){}function jbn(){}function Ebn(){}function Cbn(){}function Tbn(){}function Mbn(){}function Abn(){}function Sbn(){}function Pbn(){}function Ibn(){}function Obn(){}function Dbn(){}function $bn(){}function Fbn(){}function xbn(){}function Lbn(){}function Nbn(){}function Bbn(){}function Rbn(){}function _bn(){}function Kbn(){}function Hbn(){}function qbn(){}function Gbn(){}function zbn(){}function _H(){}function Ubn(){}function Wbn(){}function Xbn(){}function Vbn(){}function Qbn(){}function Jbn(){}function Ybn(){}function Zbn(){}function nwn(){}function ewn(){}function twn(){}function iwn(){}function rwn(){}function cwn(){}function uwn(){}function swn(){}function own(){}function fwn(){}function hwn(){}function lwn(){}function KH(){}function awn(){}function dwn(){}function bwn(){}function wwn(){}function gwn(){}function pwn(){}function HH(){}function qH(){}function vwn(){}function GH(){}function zH(){}function mwn(){}function kwn(){}function ywn(){}function jwn(){}function Ewn(){}function Cwn(){}function Twn(){}function Mwn(){}function Awn(){}function UH(){}function Swn(){}function Pwn(){}function Iwn(){}function Own(){}function Dwn(){}function $wn(){}function Fwn(){}function xwn(){}function Lwn(){}function Nwn(){}function Bwn(){}function Rwn(){}function _wn(){}function Kwn(){}function Hwn(){}function qwn(){}function Gwn(){}function zwn(){}function Uwn(){}function Wwn(){}function Xwn(){}function Vwn(){}function Qwn(){}function Jwn(){}function Ywn(){}function Zwn(){}function ngn(){}function egn(){}function tgn(){}function ign(){}function rgn(){}function cgn(){}function ugn(){}function sgn(){}function ogn(){}function fgn(){}function hgn(){}function lgn(){}function agn(){}function dgn(){}function bgn(){}function wgn(){}function ggn(){}function pgn(){}function vgn(){}function mgn(){}function kgn(){}function ygn(){}function jgn(){}function Egn(){}function Cgn(){}function Tgn(){}function Mgn(){}function Agn(){}function Sgn(){}function Pgn(){}function Ign(){}function Ogn(){}function Dgn(){}function $gn(){}function Fgn(){}function xgn(){}function Lgn(){}function Ngn(){}function Bgn(){}function Rgn(){}function _gn(){}function Kgn(){}function mI(){}function kI(){}function yI(){}function Hgn(){}function qgn(){}function Ggn(){}function zgn(){}function Ugn(){}function WH(){}function Wgn(){}function Xgn(){}function Qee(){}function Vgn(){}function Qgn(){}function Jgn(){}function Ygn(){}function Zgn(){}function n2n(){}function e2n(){}function Zl(){}function t2n(){}function Zg(){}function XH(){}function i2n(){}function r2n(){}function c2n(){}function u2n(){}function s2n(){}function o2n(){}function f2n(){}function h2n(){}function l2n(){}function a2n(){}function d2n(){}function b2n(){}function w2n(){}function g2n(){}function p2n(){}function v2n(){}function m2n(){}function k2n(){}function y2n(){}function j2n(){}function E2n(){}function dn(){}function C2n(){}function T2n(){}function M2n(){}function A2n(){}function S2n(){}function P2n(){}function I2n(){}function O2n(){}function D2n(){}function $2n(){}function jI(){}function F2n(){}function x2n(){}function L2n(){}function N2n(){}function B2n(){}function VH(){}function Xy(){}function Vy(){}function R2n(){}function QH(){}function Qy(){}function _2n(){}function K2n(){}function H2n(){}function q2n(){}function G2n(){}function z2n(){}function Jy(){}function U2n(){}function W2n(){}function X2n(){}function Yy(){}function V2n(){}function JH(){}function Q2n(){}function EI(){}function YH(){}function J2n(){}function Y2n(){}function Z2n(){}function npn(){}function Jee(){}function epn(){}function tpn(){}function ipn(){}function rpn(){}function cpn(){}function upn(){}function spn(){}function opn(){}function fpn(){}function hpn(){}function Bp(){}function CI(){}function lpn(){}function apn(){}function dpn(){}function bpn(){}function wpn(){}function gpn(){}function ppn(){}function vpn(){}function mpn(){}function kpn(){}function ypn(){}function jpn(){}function Epn(){}function Cpn(){}function Tpn(){}function Mpn(){}function Apn(){}function Spn(){}function Ppn(){}function Ipn(){}function Opn(){}function Dpn(){}function $pn(){}function Fpn(){}function xpn(){}function Lpn(){}function Npn(){}function Bpn(){}function Rpn(){}function _pn(){}function Kpn(){}function Hpn(){}function qpn(){}function Gpn(){}function zpn(){}function Upn(){}function Wpn(){}function Xpn(){}function Vpn(){}function Qpn(){}function Jpn(){}function Ypn(){}function Zpn(){}function n3n(){}function e3n(){}function t3n(){}function i3n(){}function r3n(){}function c3n(){}function u3n(){}function s3n(){}function o3n(){}function f3n(){}function h3n(){}function l3n(){}function a3n(){}function d3n(){}function b3n(){}function w3n(){}function g3n(){}function p3n(){}function v3n(){}function m3n(){}function k3n(){}function y3n(){}function j3n(){}function E3n(){}function C3n(){}function T3n(){}function M3n(){}function A3n(){}function S3n(){}function P3n(){}function I3n(){}function O3n(){}function D3n(){}function $3n(){}function F3n(){}function x3n(){}function L3n(){}function N3n(){}function B3n(){}function R3n(){}function _3n(){}function K3n(){}function H3n(){}function q3n(){}function G3n(){}function z3n(){}function U3n(){}function W3n(){}function X3n(){}function V3n(){}function Q3n(){}function J3n(){}function Y3n(){}function Z3n(){}function n4n(){}function e4n(){}function t4n(){}function i4n(){}function ZH(){}function r4n(){}function c4n(){}function TI(){Rv()}function u4n(){pF()}function s4n(){a6()}function o4n(){WT()}function f4n(){YJ()}function h4n(){Go()}function l4n(){fJ()}function a4n(){C7()}function d4n(){q9()}function b4n(){H9()}function w4n(){w8()}function g4n(){v7n()}function p4n(){x2()}function v4n(){Sj()}function m4n(){PSn()}function k4n(){HIn()}function y4n(){sPn()}function j4n(){CMn()}function E4n(){V3()}function C4n(){yl()}function T4n(){qIn()}function M4n(){pAn()}function A4n(){zZ()}function S4n(){IFn()}function P4n(){TMn()}function I4n(){nn()}function O4n(){EMn()}function D4n(){GIn()}function $4n(){WOn()}function F4n(){AMn()}function x4n(){aPn()}function L4n(){m7n()}function N4n(){$Y()}function B4n(){gb()}function R4n(){pOn()}function _4n(){S7()}function K4n(){Ux()}function H4n(){ZF()}function q4n(){Zd()}function G4n(){PV()}function z4n(){MMn()}function U4n(){BBn()}function W4n(){IY()}function X4n(){Bx()}function V4n(){DC()}function Q4n(){nM()}function nq(){Xe()}function J4n(){wT()}function Y4n(){NQ()}function eq(){mM()}function Fo(){dEn()}function tq(){eF()}function Z4n(){pZ()}function iq(n){_n(n)}function nvn(n){this.a=n}function Zy(n){this.a=n}function evn(n){this.a=n}function tvn(n){this.a=n}function ivn(n){this.a=n}function rvn(n){this.a=n}function cvn(n){this.a=n}function uvn(n){this.a=n}function rq(n){this.a=n}function cq(n){this.a=n}function svn(n){this.a=n}function MI(n){this.a=n}function ovn(n){this.a=n}function AI(n){this.a=n}function fvn(n){this.a=n}function SI(n){this.a=n}function hvn(n){this.a=n}function PI(n){this.a=n}function lvn(n){this.a=n}function avn(n){this.a=n}function dvn(n){this.a=n}function uq(n){this.b=n}function bvn(n){this.c=n}function wvn(n){this.a=n}function gvn(n){this.a=n}function pvn(n){this.a=n}function vvn(n){this.a=n}function mvn(n){this.a=n}function kvn(n){this.a=n}function yvn(n){this.a=n}function jvn(n){this.a=n}function Evn(n){this.a=n}function Cvn(n){this.a=n}function Tvn(n){this.a=n}function Mvn(n){this.a=n}function Avn(n){this.a=n}function sq(n){this.a=n}function oq(n){this.a=n}function nj(n){this.a=n}function M9(n){this.a=n}function na(){this.a=[]}function Svn(n,e){n.a=e}function Yee(n,e){n.a=e}function Zee(n,e){n.b=e}function nte(n,e){n.b=e}function ete(n,e){n.b=e}function fq(n,e){n.j=e}function tte(n,e){n.g=e}function ite(n,e){n.i=e}function rte(n,e){n.c=e}function cte(n,e){n.d=e}function ute(n,e){n.d=e}function ste(n,e){n.c=e}function ea(n,e){n.k=e}function ote(n,e){n.c=e}function hq(n,e){n.c=e}function lq(n,e){n.a=e}function fte(n,e){n.a=e}function hte(n,e){n.f=e}function lte(n,e){n.a=e}function ate(n,e){n.b=e}function II(n,e){n.d=e}function ej(n,e){n.i=e}function aq(n,e){n.o=e}function dte(n,e){n.r=e}function bte(n,e){n.a=e}function wte(n,e){n.b=e}function Pvn(n,e){n.e=e}function gte(n,e){n.f=e}function dq(n,e){n.g=e}function pte(n,e){n.e=e}function vte(n,e){n.f=e}function mte(n,e){n.f=e}function kte(n,e){n.n=e}function yte(n,e){n.a=e}function jte(n,e){n.a=e}function Ete(n,e){n.c=e}function Cte(n,e){n.c=e}function Tte(n,e){n.d=e}function Mte(n,e){n.e=e}function Ate(n,e){n.g=e}function Ste(n,e){n.a=e}function Pte(n,e){n.c=e}function Ite(n,e){n.d=e}function Ote(n,e){n.e=e}function Dte(n,e){n.f=e}function $te(n,e){n.j=e}function Fte(n,e){n.a=e}function xte(n,e){n.b=e}function Lte(n,e){n.a=e}function Ivn(n){n.b=n.a}function Ovn(n){n.c=n.d.d}function $v(n){this.d=n}function ta(n){this.a=n}function Rp(n){this.a=n}function bq(n){this.a=n}function Mh(n){this.a=n}function A9(n){this.a=n}function Dvn(n){this.a=n}function wq(n){this.a=n}function S9(n){this.a=n}function gq(n){this.a=n}function pq(n){this.a=n}function vq(n){this.a=n}function L0(n){this.a=n}function P9(n){this.a=n}function I9(n){this.a=n}function mq(n){this.b=n}function _p(n){this.b=n}function Kp(n){this.b=n}function OI(n){this.a=n}function $vn(n){this.a=n}function kq(n){this.a=n}function DI(n){this.c=n}function E(n){this.c=n}function Fvn(n){this.c=n}function yq(n){this.a=n}function jq(n){this.a=n}function Eq(n){this.a=n}function Cq(n){this.a=n}function ut(n){this.a=n}function xvn(n){this.a=n}function Tq(n){this.a=n}function Mq(n){this.a=n}function Lvn(n){this.a=n}function Nvn(n){this.a=n}function Fv(n){this.a=n}function Bvn(n){this.a=n}function Rvn(n){this.a=n}function _vn(n){this.a=n}function Kvn(n){this.a=n}function Hvn(n){this.a=n}function qvn(n){this.a=n}function Gvn(n){this.a=n}function zvn(n){this.a=n}function Uvn(n){this.a=n}function Wvn(n){this.a=n}function Xvn(n){this.a=n}function Vvn(n){this.a=n}function Qvn(n){this.a=n}function Jvn(n){this.a=n}function Yvn(n){this.a=n}function Zvn(n){this.a=n}function n5n(n){this.a=n}function O9(n){this.a=n}function e5n(n){this.a=n}function t5n(n){this.a=n}function tj(n){this.a=n}function i5n(n){this.a=n}function r5n(n){this.a=n}function Hp(n){this.a=n}function Aq(n){this.a=n}function c5n(n){this.a=n}function u5n(n){this.a=n}function s5n(n){this.a=n}function o5n(n){this.a=n}function f5n(n){this.a=n}function Sq(n){this.a=n}function Pq(n){this.a=n}function Iq(n){this.a=n}function ij(n){this.a=n}function rj(n){this.e=n}function qp(n){this.a=n}function h5n(n){this.a=n}function n2(n){this.a=n}function Oq(n){this.a=n}function l5n(n){this.a=n}function a5n(n){this.a=n}function d5n(n){this.a=n}function b5n(n){this.a=n}function w5n(n){this.a=n}function g5n(n){this.a=n}function p5n(n){this.a=n}function v5n(n){this.a=n}function m5n(n){this.a=n}function k5n(n){this.a=n}function y5n(n){this.a=n}function Dq(n){this.a=n}function j5n(n){this.a=n}function E5n(n){this.a=n}function C5n(n){this.a=n}function T5n(n){this.a=n}function M5n(n){this.a=n}function A5n(n){this.a=n}function S5n(n){this.a=n}function P5n(n){this.a=n}function I5n(n){this.a=n}function O5n(n){this.a=n}function D5n(n){this.a=n}function $5n(n){this.a=n}function F5n(n){this.a=n}function x5n(n){this.a=n}function L5n(n){this.a=n}function N5n(n){this.a=n}function B5n(n){this.a=n}function R5n(n){this.a=n}function _5n(n){this.a=n}function K5n(n){this.a=n}function H5n(n){this.a=n}function q5n(n){this.a=n}function G5n(n){this.a=n}function z5n(n){this.a=n}function U5n(n){this.a=n}function W5n(n){this.a=n}function X5n(n){this.a=n}function V5n(n){this.a=n}function Q5n(n){this.a=n}function J5n(n){this.a=n}function Y5n(n){this.a=n}function Z5n(n){this.a=n}function n6n(n){this.a=n}function e6n(n){this.a=n}function t6n(n){this.a=n}function i6n(n){this.a=n}function r6n(n){this.a=n}function c6n(n){this.c=n}function u6n(n){this.b=n}function s6n(n){this.a=n}function o6n(n){this.a=n}function f6n(n){this.a=n}function h6n(n){this.a=n}function l6n(n){this.a=n}function a6n(n){this.a=n}function d6n(n){this.a=n}function b6n(n){this.a=n}function w6n(n){this.a=n}function g6n(n){this.a=n}function p6n(n){this.a=n}function v6n(n){this.a=n}function m6n(n){this.a=n}function k6n(n){this.a=n}function y6n(n){this.a=n}function j6n(n){this.a=n}function E6n(n){this.a=n}function C6n(n){this.a=n}function T6n(n){this.a=n}function M6n(n){this.a=n}function A6n(n){this.a=n}function S6n(n){this.a=n}function P6n(n){this.a=n}function I6n(n){this.a=n}function X1(n){this.a=n}function e2(n){this.a=n}function O6n(n){this.a=n}function D6n(n){this.a=n}function $6n(n){this.a=n}function F6n(n){this.a=n}function x6n(n){this.a=n}function L6n(n){this.a=n}function N6n(n){this.a=n}function B6n(n){this.a=n}function R6n(n){this.a=n}function _6n(n){this.a=n}function K6n(n){this.a=n}function H6n(n){this.a=n}function q6n(n){this.a=n}function G6n(n){this.a=n}function z6n(n){this.a=n}function U6n(n){this.a=n}function cj(n){this.a=n}function W6n(n){this.a=n}function X6n(n){this.a=n}function V6n(n){this.a=n}function Q6n(n){this.a=n}function J6n(n){this.a=n}function Y6n(n){this.a=n}function Z6n(n){this.a=n}function nmn(n){this.a=n}function emn(n){this.a=n}function tmn(n){this.a=n}function imn(n){this.a=n}function rmn(n){this.a=n}function cmn(n){this.a=n}function umn(n){this.a=n}function smn(n){this.a=n}function omn(n){this.a=n}function fmn(n){this.a=n}function hmn(n){this.a=n}function lmn(n){this.a=n}function amn(n){this.a=n}function dmn(n){this.a=n}function bmn(n){this.a=n}function wmn(n){this.a=n}function gmn(n){this.a=n}function pmn(n){this.a=n}function vmn(n){this.a=n}function mmn(n){this.a=n}function kmn(n){this.a=n}function $q(n){this.a=n}function kt(n){this.b=n}function ymn(n){this.f=n}function Fq(n){this.a=n}function jmn(n){this.a=n}function Emn(n){this.a=n}function Cmn(n){this.a=n}function Tmn(n){this.a=n}function Mmn(n){this.a=n}function Amn(n){this.a=n}function Smn(n){this.a=n}function Pmn(n){this.a=n}function D9(n){this.a=n}function Imn(n){this.a=n}function Omn(n){this.b=n}function xq(n){this.c=n}function uj(n){this.e=n}function Dmn(n){this.a=n}function sj(n){this.a=n}function oj(n){this.a=n}function $I(n){this.a=n}function $mn(n){this.a=n}function Fmn(n){this.d=n}function Lq(n){this.a=n}function Nq(n){this.a=n}function cd(n){this.e=n}function Nte(){this.a=0}function gw(){dyn(this)}function X(){RO(this)}function we(){Cu(this)}function FI(){pTn(this)}function xmn(){}function ud(){this.c=p1n}function Bte(n,e){e.Wb(n)}function Lmn(n,e){n.b+=e}function Nmn(n){n.b=new JI}function T(n){return n.e}function Rte(n){return n.a}function _te(n){return n.a}function Kte(n){return n.a}function Hte(n){return n.a}function qte(n){return n.a}function Gte(){return null}function zte(){return null}function Ute(){EG(),iTe()}function Wte(n){n.b.tf(n.e)}function xv(n,e){n.b=e-n.b}function Lv(n,e){n.a=e-n.a}function Bmn(n,e){e.ad(n.a)}function Xte(n,e){si(e,n)}function Vte(n,e,t){n.Od(t,e)}function $9(n,e){n.e=e,e.b=n}function Bq(n){$f(),this.a=n}function Rmn(n){$f(),this.a=n}function _mn(n){$f(),this.a=n}function Rq(n){nb(),this.a=n}function Kmn(n){k3(),aR.be(n)}function ia(){Qyn.call(this)}function _q(){Qyn.call(this)}function Kq(){ia.call(this)}function xI(){ia.call(this)}function Hmn(){ia.call(this)}function F9(){ia.call(this)}function fu(){ia.call(this)}function Nv(){ia.call(this)}function ye(){ia.call(this)}function vs(){ia.call(this)}function qmn(){ia.call(this)}function ic(){ia.call(this)}function Gmn(){ia.call(this)}function zmn(){this.a=this}function fj(){this.Bb|=256}function Umn(){this.b=new Xkn}function Hq(){Hq=N,new we}function qq(){Kq.call(this)}function Wmn(n,e){n.length=e}function hj(n,e){W(n.a,e)}function Qte(n,e){nY(n.c,e)}function Jte(n,e){ci(n.b,e)}function Yte(n,e){KT(n.a,e)}function Zte(n,e){MF(n.a,e)}function Gp(n,e){et(n.e,e)}function t2(n){iM(n.c,n.b)}function nie(n,e){n.kc().Nb(e)}function Gq(n){this.a=Yge(n)}function hi(){this.a=new we}function Xmn(){this.a=new we}function lj(){this.a=new X}function LI(){this.a=new X}function zq(){this.a=new X}function Ns(){this.a=new Oln}function ra(){this.a=new TSn}function Uq(){this.a=new LH}function Wq(){this.a=new h7n}function Vmn(){this.a=new YMn}function Xq(){this.a=new bMn}function Vq(){this.a=new Bjn}function Qmn(){this.a=new X}function Qq(){this.a=new X}function Jmn(){this.a=new X}function Ymn(){this.a=new X}function Zmn(){this.d=new X}function n9n(){this.a=new hi}function e9n(){this.a=new we}function t9n(){this.b=new we}function i9n(){this.b=new X}function Jq(){this.e=new X}function r9n(){this.d=new X}function c9n(){this.a=new C4n}function u9n(){X.call(this)}function Yq(){lj.call(this)}function s9n(){kE.call(this)}function o9n(){Qq.call(this)}function NI(){Bv.call(this)}function Bv(){xmn.call(this)}function i2(){xmn.call(this)}function Zq(){i2.call(this)}function f9n(){zTn.call(this)}function h9n(){zTn.call(this)}function l9n(){uG.call(this)}function a9n(){uG.call(this)}function d9n(){uG.call(this)}function b9n(){sG.call(this)}function hu(){Tt.call(this)}function nG(){B2n.call(this)}function eG(){B2n.call(this)}function w9n(){O9n.call(this)}function g9n(){O9n.call(this)}function p9n(){we.call(this)}function v9n(){we.call(this)}function m9n(){we.call(this)}function k9n(){hi.call(this)}function BI(){RIn.call(this)}function y9n(){fj.call(this)}function RI(){Oz.call(this)}function _I(){Oz.call(this)}function tG(){we.call(this)}function KI(){we.call(this)}function j9n(){we.call(this)}function iG(){Yy.call(this)}function E9n(){Yy.call(this)}function C9n(){iG.call(this)}function T9n(){ZH.call(this)}function M9n(n){hIn.call(this,n)}function A9n(n){hIn.call(this,n)}function rG(n){rq.call(this,n)}function cG(n){n7n.call(this,n)}function eie(n){cG.call(this,n)}function tie(n){n7n.call(this,n)}function zp(){this.a=new Tt}function uG(){this.a=new hi}function sG(){this.a=new we}function S9n(){this.a=new X}function P9n(){this.j=new X}function oG(){this.a=new Rgn}function I9n(){this.a=new T8n}function O9n(){this.a=new X2n}function HI(){HI=N,uR=new V9n}function qI(){qI=N,cR=new X9n}function Rv(){Rv=N,rR=new Bt}function aj(){aj=N,fR=new Xyn}function iie(n){cG.call(this,n)}function rie(n){cG.call(this,n)}function D9n(n){m$.call(this,n)}function $9n(n){m$.call(this,n)}function F9n(n){uEn.call(this,n)}function GI(n){C5e.call(this,n)}function sd(n){_0.call(this,n)}function _v(n){Cj.call(this,n)}function fG(n){Cj.call(this,n)}function x9n(n){Cj.call(this,n)}function _r(n){kCn.call(this,n)}function L9n(n){_r.call(this,n)}function r2(){M9.call(this,{})}function dj(n){c3(),this.a=n}function Kv(n){n.b=null,n.c=0}function cie(n,e){n.e=e,NNn(n,e)}function uie(n,e){n.a=e,h6e(n)}function zI(n,e,t){n.a[e.g]=t}function sie(n,e,t){M4e(t,n,e)}function oie(n,e){$ue(e.i,n.n)}function N9n(n,e){Fwe(n).td(e)}function fie(n,e){return n*n/e}function B9n(n,e){return n.g-e.g}function hie(n){return new nj(n)}function lie(n){return new Z0(n)}function bj(n){_r.call(this,n)}function mr(n){_r.call(this,n)}function R9n(n){_r.call(this,n)}function UI(n){kCn.call(this,n)}function WI(n){AV(),this.a=n}function _9n(n){aEn(),this.a=n}function N0(n){ED(),this.f=n}function XI(n){ED(),this.f=n}function Up(n){_r.call(this,n)}function Hn(n){_r.call(this,n)}function $r(n){_r.call(this,n)}function K9n(n){_r.call(this,n)}function c2(n){_r.call(this,n)}function on(n){return _n(n),n}function K(n){return _n(n),n}function x9(n){return _n(n),n}function hG(n){return _n(n),n}function aie(n){return _n(n),n}function Hv(n){return n.b==n.c}function B0(n){return!!n&&n.b}function die(n){return!!n&&n.k}function bie(n){return!!n&&n.j}function Hu(n){_n(n),this.a=n}function lG(n){return ja(n),n}function qv(n){EW(n,n.length)}function t1(n){_r.call(this,n)}function Sf(n){_r.call(this,n)}function VI(n){_r.call(this,n)}function pw(n){_r.call(this,n)}function Gv(n){_r.call(this,n)}function Ee(n){_r.call(this,n)}function QI(n){Vz.call(this,n,0)}function JI(){iX.call(this,12,3)}function aG(){aG=N,din=new Q1n}function H9n(){H9n=N,ain=new Lc}function wj(){wj=N,dm=new H1}function q9n(){q9n=N,vzn=new ww}function G9n(){throw T(new ye)}function dG(){throw T(new ye)}function z9n(){throw T(new ye)}function wie(){throw T(new ye)}function gie(){throw T(new ye)}function pie(){throw T(new ye)}function YI(){this.a=Ce(pe(Ji))}function u2(n){$f(),this.a=pe(n)}function U9n(n,e){n.Td(e),e.Sd(n)}function vie(n,e){n.a.ec().Mc(e)}function mie(n,e,t){n.c.lf(e,t)}function bG(n){mr.call(this,n)}function Pf(n){Hn.call(this,n)}function i1(){A9.call(this,"")}function zv(){A9.call(this,"")}function V1(){A9.call(this,"")}function R0(){A9.call(this,"")}function wG(n){mr.call(this,n)}function Wp(n){_p.call(this,n)}function ZI(n){lE.call(this,n)}function W9n(n){Wp.call(this,n)}function X9n(){AI.call(this,null)}function V9n(){AI.call(this,null)}function gj(){gj=N,k3()}function Q9n(){Q9n=N,Szn=Z4e()}function J9n(n){return n.a?n.b:0}function kie(n){return n.a?n.b:0}function yie(n,e){return n.a-e.a}function jie(n,e){return n.a-e.a}function Eie(n,e){return n.a-e.a}function pj(n,e){return WX(n,e)}function M(n,e){return pMn(n,e)}function Cie(n,e){return e in n.a}function Y9n(n,e){return n.f=e,n}function Tie(n,e){return n.b=e,n}function Z9n(n,e){return n.c=e,n}function Mie(n,e){return n.g=e,n}function gG(n,e){return n.a=e,n}function pG(n,e){return n.f=e,n}function Aie(n,e){return n.k=e,n}function vG(n,e){return n.a=e,n}function Sie(n,e){return n.e=e,n}function mG(n,e){return n.e=e,n}function Pie(n,e){return n.f=e,n}function Iie(n,e){n.b=!0,n.d=e}function Oie(n,e){n.b=new kr(e)}function Die(n,e,t){e.td(n.a[t])}function $ie(n,e,t){e.we(n.a[t])}function Fie(n,e){return n.b-e.b}function xie(n,e){return n.g-e.g}function Lie(n,e){return n.s-e.s}function Nie(n,e){return n?0:e-1}function n8n(n,e){return n?0:e-1}function Bie(n,e){return n?e-1:0}function Rie(n,e){return e.Yf(n)}function od(n,e){return n.b=e,n}function vj(n,e){return n.a=e,n}function fd(n,e){return n.c=e,n}function hd(n,e){return n.d=e,n}function ld(n,e){return n.e=e,n}function kG(n,e){return n.f=e,n}function Uv(n,e){return n.a=e,n}function Xp(n,e){return n.b=e,n}function Vp(n,e){return n.c=e,n}function gn(n,e){return n.c=e,n}function Dn(n,e){return n.b=e,n}function pn(n,e){return n.d=e,n}function vn(n,e){return n.e=e,n}function _ie(n,e){return n.f=e,n}function mn(n,e){return n.g=e,n}function kn(n,e){return n.a=e,n}function yn(n,e){return n.i=e,n}function jn(n,e){return n.j=e,n}function e8n(n,e){return n.k=e,n}function Kie(n,e){return n.j=e,n}function Hie(n,e){yl(),Hr(e,n)}function qie(n,e,t){Nfe(n.a,e,t)}function t8n(n){mTn.call(this,n)}function yG(n){mTn.call(this,n)}function mj(n){uD.call(this,n)}function i8n(n){u2e.call(this,n)}function Q1(n){Ld.call(this,n)}function r8n(n){XD.call(this,n)}function c8n(n){XD.call(this,n)}function u8n(){Mz.call(this,"")}function Li(){this.a=0,this.b=0}function s8n(){this.b=0,this.a=0}function o8n(n,e){n.b=0,hb(n,e)}function Gie(n,e){n.c=e,n.b=!0}function f8n(n,e){return n.c._b(e)}function xo(n){return n.e&&n.e()}function nO(n){return n?n.d:null}function h8n(n,e){return LDn(n.b,e)}function zie(n){return n?n.g:null}function Uie(n){return n?n.i:null}function J1(n){return Ph(n),n.o}function ad(){ad=N,Mne=h4e()}function l8n(){l8n=N,mi=jve()}function Qp(){Qp=N,g1n=a4e()}function a8n(){a8n=N,hee=l4e()}function jG(){jG=N,oc=s6e()}function EG(){EG=N,Wl=N3()}function d8n(){throw T(new ye)}function b8n(){throw T(new ye)}function w8n(){throw T(new ye)}function g8n(){throw T(new ye)}function p8n(){throw T(new ye)}function v8n(){throw T(new ye)}function kj(n){this.a=new s2(n)}function CG(n){d_n(),gTe(this,n)}function Y1(n){this.a=new AD(n)}function vw(n,e){for(;n.ye(e););}function TG(n,e){for(;n.sd(e););}function mw(n,e){return n.a+=e,n}function eO(n,e){return n.a+=e,n}function r1(n,e){return n.a+=e,n}function dd(n,e){return n.a+=e,n}function Wv(n){return fl(n),n.a}function yj(n){return n.b!=n.d.c}function m8n(n){return n.l|n.m<<22}function MG(n,e){return n.d[e.p]}function k8n(n,e){return Q8e(n,e)}function AG(n,e,t){n.splice(e,t)}function y8n(n){n.c?rBn(n):cBn(n)}function jj(n){this.a=0,this.b=n}function j8n(){this.a=new B7(Pon)}function E8n(){this.b=new B7(won)}function C8n(){this.b=new B7(OK)}function T8n(){this.b=new B7(OK)}function M8n(){throw T(new ye)}function A8n(){throw T(new ye)}function S8n(){throw T(new ye)}function P8n(){throw T(new ye)}function I8n(){throw T(new ye)}function O8n(){throw T(new ye)}function D8n(){throw T(new ye)}function $8n(){throw T(new ye)}function F8n(){throw T(new ye)}function x8n(){throw T(new ye)}function Wie(){throw T(new ic)}function Xie(){throw T(new ic)}function L9(n){this.a=new L8n(n)}function L8n(n){cbe(this,n,cve())}function N9(n){return!n||iTn(n)}function B9(n){return Mf[n]!=-1}function Vie(){_A!=0&&(_A=0),KA=-1}function N8n(){iR==null&&(iR=[])}function Qie(n,e){$x(R(n.a),e)}function Jie(n,e){$x(R(n.a),e)}function R9(n,e){Sw.call(this,n,e)}function Jp(n,e){R9.call(this,n,e)}function SG(n,e){this.b=n,this.c=e}function B8n(n,e){this.b=n,this.a=e}function R8n(n,e){this.a=n,this.b=e}function _8n(n,e){this.a=n,this.b=e}function K8n(n,e){this.a=n,this.b=e}function H8n(n,e){this.a=n,this.b=e}function q8n(n,e){this.a=n,this.b=e}function G8n(n,e){this.a=n,this.b=e}function z8n(n,e){this.a=n,this.b=e}function U8n(n,e){this.a=n,this.b=e}function W8n(n,e){this.b=n,this.a=e}function X8n(n,e){this.b=n,this.a=e}function V8n(n,e){this.b=n,this.a=e}function Q8n(n,e){this.b=n,this.a=e}function Oe(n,e){this.f=n,this.g=e}function Yp(n,e){this.e=n,this.d=e}function bd(n,e){this.g=n,this.i=e}function tO(n,e){this.a=n,this.b=e}function J8n(n,e){this.a=n,this.f=e}function Y8n(n,e){this.b=n,this.c=e}function Yie(n,e){this.a=n,this.b=e}function Z8n(n,e){this.a=n,this.b=e}function iO(n,e){this.a=n,this.b=e}function n7n(n){Bz(n.dc()),this.c=n}function Ej(n){this.b=u(pe(n),83)}function e7n(n){this.a=u(pe(n),83)}function _0(n){this.a=u(pe(n),15)}function t7n(n){this.a=u(pe(n),15)}function Cj(n){this.b=u(pe(n),47)}function Tj(){this.q=new y.Date}function nh(){nh=N,Sin=new tln}function Zp(){Zp=N,X4=new nln}function Xv(n){return n.f.c+n.g.c}function _9(n,e){return n.b.Hc(e)}function i7n(n,e){return n.b.Ic(e)}function r7n(n,e){return n.b.Qc(e)}function c7n(n,e){return n.b.Hc(e)}function u7n(n,e){return n.c.uc(e)}function Ah(n,e){return n.a._b(e)}function s7n(n,e){return tt(n.c,e)}function o7n(n,e){return Uu(n.b,e)}function f7n(n,e){return n>e&&e0}function cO(n,e){return fc(n,e)<0}function n5(n,e){return n.a.get(e)}function lre(n,e){return e.split(n)}function S7n(n,e){return Uu(n.e,e)}function LG(n){return _n(n),!1}function xj(n){xn.call(this,n,21)}function are(n,e){cMn.call(this,n,e)}function Lj(n,e){Oe.call(this,n,e)}function uO(n,e){Oe.call(this,n,e)}function NG(n){_D(),uEn.call(this,n)}function BG(n,e){fCn(n,n.length,e)}function z9(n,e){BCn(n,n.length,e)}function dre(n,e,t){e.ud(n.a.Ge(t))}function bre(n,e,t){e.we(n.a.Fe(t))}function wre(n,e,t){e.td(n.a.Kb(t))}function gre(n,e,t){n.Mb(t)&&e.td(t)}function e5(n,e,t){n.splice(e,0,t)}function pre(n,e){return au(n.e,e)}function Nj(n,e){this.d=n,this.e=e}function P7n(n,e){this.b=n,this.a=e}function I7n(n,e){this.b=n,this.a=e}function RG(n,e){this.b=n,this.a=e}function O7n(n,e){this.a=n,this.b=e}function D7n(n,e){this.a=n,this.b=e}function $7n(n,e){this.a=n,this.b=e}function F7n(n,e){this.a=n,this.b=e}function f2(n,e){this.a=n,this.b=e}function _G(n,e){this.b=n,this.a=e}function KG(n,e){this.b=n,this.a=e}function Bj(n,e){Oe.call(this,n,e)}function Rj(n,e){Oe.call(this,n,e)}function HG(n,e){Oe.call(this,n,e)}function qG(n,e){Oe.call(this,n,e)}function kw(n,e){Oe.call(this,n,e)}function sO(n,e){Oe.call(this,n,e)}function oO(n,e){Oe.call(this,n,e)}function fO(n,e){Oe.call(this,n,e)}function _j(n,e){Oe.call(this,n,e)}function GG(n,e){Oe.call(this,n,e)}function hO(n,e){Oe.call(this,n,e)}function U9(n,e){Oe.call(this,n,e)}function Kj(n,e){Oe.call(this,n,e)}function lO(n,e){Oe.call(this,n,e)}function t5(n,e){Oe.call(this,n,e)}function zG(n,e){Oe.call(this,n,e)}function zt(n,e){Oe.call(this,n,e)}function Hj(n,e){Oe.call(this,n,e)}function x7n(n,e){this.a=n,this.b=e}function L7n(n,e){this.a=n,this.b=e}function N7n(n,e){this.a=n,this.b=e}function B7n(n,e){this.a=n,this.b=e}function R7n(n,e){this.a=n,this.b=e}function _7n(n,e){this.a=n,this.b=e}function K7n(n,e){this.a=n,this.b=e}function H7n(n,e){this.a=n,this.b=e}function q7n(n,e){this.a=n,this.b=e}function UG(n,e){this.b=n,this.a=e}function G7n(n,e){this.b=n,this.a=e}function z7n(n,e){this.b=n,this.a=e}function U7n(n,e){this.b=n,this.a=e}function t3(n,e){this.c=n,this.d=e}function W7n(n,e){this.e=n,this.d=e}function X7n(n,e){this.a=n,this.b=e}function V7n(n,e){this.b=e,this.c=n}function qj(n,e){Oe.call(this,n,e)}function W9(n,e){Oe.call(this,n,e)}function aO(n,e){Oe.call(this,n,e)}function i5(n,e){Oe.call(this,n,e)}function WG(n,e){Oe.call(this,n,e)}function dO(n,e){Oe.call(this,n,e)}function bO(n,e){Oe.call(this,n,e)}function X9(n,e){Oe.call(this,n,e)}function XG(n,e){Oe.call(this,n,e)}function wO(n,e){Oe.call(this,n,e)}function r5(n,e){Oe.call(this,n,e)}function VG(n,e){Oe.call(this,n,e)}function c5(n,e){Oe.call(this,n,e)}function u5(n,e){Oe.call(this,n,e)}function H0(n,e){Oe.call(this,n,e)}function gO(n,e){Oe.call(this,n,e)}function pO(n,e){Oe.call(this,n,e)}function QG(n,e){Oe.call(this,n,e)}function s5(n,e){Oe.call(this,n,e)}function vO(n,e){Oe.call(this,n,e)}function Gj(n,e){Oe.call(this,n,e)}function V9(n,e){Oe.call(this,n,e)}function Q9(n,e){Oe.call(this,n,e)}function h2(n,e){Oe.call(this,n,e)}function mO(n,e){Oe.call(this,n,e)}function JG(n,e){Oe.call(this,n,e)}function kO(n,e){Oe.call(this,n,e)}function yO(n,e){Oe.call(this,n,e)}function YG(n,e){Oe.call(this,n,e)}function jO(n,e){Oe.call(this,n,e)}function EO(n,e){Oe.call(this,n,e)}function CO(n,e){Oe.call(this,n,e)}function TO(n,e){Oe.call(this,n,e)}function ZG(n,e){Oe.call(this,n,e)}function Q7n(n,e){this.b=n,this.a=e}function J7n(n,e){this.a=n,this.b=e}function Y7n(n,e){this.a=n,this.b=e}function Z7n(n,e){this.a=n,this.b=e}function nkn(n,e){this.a=n,this.b=e}function nz(n,e){Oe.call(this,n,e)}function ez(n,e){Oe.call(this,n,e)}function ekn(n,e){this.b=n,this.d=e}function tz(n,e){Oe.call(this,n,e)}function iz(n,e){Oe.call(this,n,e)}function tkn(n,e){this.a=n,this.b=e}function ikn(n,e){this.a=n,this.b=e}function zj(n,e){Oe.call(this,n,e)}function o5(n,e){Oe.call(this,n,e)}function rz(n,e){Oe.call(this,n,e)}function cz(n,e){Oe.call(this,n,e)}function uz(n,e){Oe.call(this,n,e)}function MO(n,e){Oe.call(this,n,e)}function sz(n,e){Oe.call(this,n,e)}function AO(n,e){Oe.call(this,n,e)}function Uj(n,e){Oe.call(this,n,e)}function SO(n,e){Oe.call(this,n,e)}function PO(n,e){Oe.call(this,n,e)}function J9(n,e){Oe.call(this,n,e)}function IO(n,e){Oe.call(this,n,e)}function oz(n,e){Oe.call(this,n,e)}function Y9(n,e){Oe.call(this,n,e)}function fz(n,e){Oe.call(this,n,e)}function vre(n,e){return au(n.c,e)}function mre(n,e){return au(e.b,n)}function kre(n,e){return-n.b.Je(e)}function hz(n,e){return au(n.g,e)}function Z9(n,e){Oe.call(this,n,e)}function l2(n,e){Oe.call(this,n,e)}function rkn(n,e){this.a=n,this.b=e}function ckn(n,e){this.a=n,this.b=e}function fn(n,e){this.a=n,this.b=e}function f5(n,e){Oe.call(this,n,e)}function h5(n,e){Oe.call(this,n,e)}function n8(n,e){Oe.call(this,n,e)}function OO(n,e){Oe.call(this,n,e)}function Wj(n,e){Oe.call(this,n,e)}function l5(n,e){Oe.call(this,n,e)}function DO(n,e){Oe.call(this,n,e)}function Xj(n,e){Oe.call(this,n,e)}function yw(n,e){Oe.call(this,n,e)}function e8(n,e){Oe.call(this,n,e)}function a5(n,e){Oe.call(this,n,e)}function d5(n,e){Oe.call(this,n,e)}function t8(n,e){Oe.call(this,n,e)}function Vj(n,e){Oe.call(this,n,e)}function jw(n,e){Oe.call(this,n,e)}function Qj(n,e){Oe.call(this,n,e)}function ukn(n,e){this.a=n,this.b=e}function skn(n,e){this.a=n,this.b=e}function okn(n,e){this.a=n,this.b=e}function fkn(n,e){this.a=n,this.b=e}function hkn(n,e){this.a=n,this.b=e}function lkn(n,e){this.a=n,this.b=e}function Si(n,e){this.a=n,this.b=e}function Jj(n,e){Oe.call(this,n,e)}function akn(n,e){this.a=n,this.b=e}function dkn(n,e){this.a=n,this.b=e}function bkn(n,e){this.a=n,this.b=e}function wkn(n,e){this.a=n,this.b=e}function gkn(n,e){this.a=n,this.b=e}function pkn(n,e){this.a=n,this.b=e}function vkn(n,e){this.b=n,this.a=e}function mkn(n,e){this.b=n,this.a=e}function kkn(n,e){this.b=n,this.a=e}function ykn(n,e){this.b=n,this.a=e}function jkn(n,e){this.a=n,this.b=e}function Ekn(n,e){this.a=n,this.b=e}function yre(n,e){J9e(n.a,u(e,56))}function Ckn(n,e){f0e(n.a,u(e,11))}function jre(n,e){return h3(),e!=n}function Tkn(){return Q9n(),new Szn}function Mkn(){c$(),this.b=new hi}function Akn(){hM(),this.a=new hi}function Skn(){tX(),lW.call(this)}function a2(n,e){Oe.call(this,n,e)}function Pkn(n,e){this.a=n,this.b=e}function Ikn(n,e){this.a=n,this.b=e}function Yj(n,e){this.a=n,this.b=e}function Okn(n,e){this.a=n,this.b=e}function Dkn(n,e){this.a=n,this.b=e}function $kn(n,e){this.a=n,this.b=e}function Fkn(n,e){this.d=n,this.b=e}function lz(n,e){this.d=n,this.e=e}function xkn(n,e){this.f=n,this.c=e}function i8(n,e){this.b=n,this.c=e}function az(n,e){this.i=n,this.g=e}function Lkn(n,e){this.e=n,this.a=e}function Nkn(n,e){this.a=n,this.b=e}function dz(n,e){n.i=null,nT(n,e)}function Ere(n,e){n&&it($y,n,e)}function Bkn(n,e){return NF(n.a,e)}function Zj(n){return g7(n.c,n.b)}function Vr(n){return n?n.dd():null}function B(n){return n??null}function q0(n){return typeof n===X2}function G0(n){return typeof n===UZ}function ki(n){return typeof n===EL}function el(n,e){return n.Hd().Xb(e)}function nE(n,e){return Rbe(n.Kc(),e)}function gd(n,e){return fc(n,e)==0}function Cre(n,e){return fc(n,e)>=0}function b5(n,e){return fc(n,e)!=0}function Tre(n){return""+(_n(n),n)}function r8(n,e){return n.substr(e)}function Rkn(n){return Fu(n),n.d.gc()}function $O(n){return yme(n,n.c),n}function eE(n){return A5(n==null),n}function w5(n,e){return n.a+=""+e,n}function dr(n,e){return n.a+=""+e,n}function g5(n,e){return n.a+=""+e,n}function rc(n,e){return n.a+=""+e,n}function De(n,e){return n.a+=""+e,n}function bz(n,e){return n.a+=""+e,n}function _kn(n,e){Kt(n,e,n.a,n.a.a)}function ua(n,e){Kt(n,e,n.c.b,n.c)}function Mre(n,e,t){VFn(e,Mx(n,t))}function Are(n,e,t){VFn(e,Mx(n,t))}function Sre(n,e){k0e(new ie(n),e)}function Kkn(n,e){n.q.setTime($d(e))}function Hkn(n,e){kW.call(this,n,e)}function qkn(n,e){kW.call(this,n,e)}function FO(n,e){kW.call(this,n,e)}function Gkn(n){Cu(this),Z5(this,n)}function wz(n){return Ln(n,0),null}function Lo(n){return n.a=0,n.b=0,n}function zkn(n,e){return n.a=e.g+1,n}function Pre(n,e){return n.j[e.p]==2}function gz(n){return lhe(u(n,79))}function Ukn(){Ukn=N,jUn=Fe(qF())}function Wkn(){Wkn=N,RWn=Fe(PNn())}function Xkn(){this.b=new s2(sb(12))}function Vkn(){this.b=0,this.a=!1}function Qkn(){this.b=0,this.a=!1}function p5(n){this.a=n,TI.call(this)}function Jkn(n){this.a=n,TI.call(this)}function In(n,e){ri.call(this,n,e)}function xO(n,e){V0.call(this,n,e)}function Ew(n,e){az.call(this,n,e)}function LO(n,e){H3.call(this,n,e)}function Ykn(n,e){c8.call(this,n,e)}function He(n,e){$j(),it(eI,n,e)}function NO(n,e){return Zu(n.a,0,e)}function Zkn(n,e){return n.a.a.a.cc(e)}function nyn(n,e){return B(n)===B(e)}function Ire(n,e){return ni(n.a,e.a)}function Ore(n,e){return Wc(n.a,e.a)}function Dre(n,e){return xCn(n.a,e.a)}function If(n,e){return n.indexOf(e)}function pd(n,e){return n==e?0:n?1:-1}function tE(n){return n<10?"0"+n:""+n}function $re(n){return pe(n),new p5(n)}function eyn(n){return Bc(n.l,n.m,n.h)}function i3(n){return Gt((_n(n),n))}function Fre(n){return Gt((_n(n),n))}function tyn(n,e){return Wc(n.g,e.g)}function Fr(n){return typeof n===UZ}function xre(n){return n==b0||n==Hb}function Lre(n){return n==b0||n==Kb}function pz(n){return xr(n.b.b,n,0)}function iyn(n){this.a=Tkn(),this.b=n}function ryn(n){this.a=Tkn(),this.b=n}function Nre(n,e){return W(n.a,e),e}function Bre(n,e){return W(n.c,e),n}function cyn(n,e){return cs(n.a,e),n}function Rre(n,e){return wo(),e.a+=n}function _re(n,e){return wo(),e.a+=n}function Kre(n,e){return wo(),e.c+=n}function vz(n,e){S3(n,0,n.length,e)}function Sh(){Tq.call(this,new ba)}function uyn(){xE.call(this,0,0,0,0)}function d2(){ys.call(this,0,0,0,0)}function kr(n){this.a=n.a,this.b=n.b}function tl(n){return n==Zs||n==Ao}function r3(n){return n==Yh||n==Jh}function syn(n){return n==xg||n==Fg}function Cw(n){return n!=Ef&&n!=ql}function qu(n){return n.Lg()&&n.Mg()}function oyn(n){return JE(u(n,118))}function iE(n){return cs(new li,n)}function fyn(n,e){return new H3(e,n)}function Hre(n,e){return new H3(e,n)}function mz(n,e,t){UC(n,e),WC(n,t)}function rE(n,e,t){Rd(n,e),Bd(n,t)}function Yo(n,e,t){nu(n,e),eu(n,t)}function cE(n,e,t){D3(n,e),F3(n,t)}function uE(n,e,t){$3(n,e),x3(n,t)}function BO(n,e){X3(n,e),L3(n,n.D)}function kz(n){xkn.call(this,n,!0)}function hyn(n,e,t){fU.call(this,n,e,t)}function il(n){jl(),qbe.call(this,n)}function lyn(){Lj.call(this,"Head",1)}function ayn(){Lj.call(this,"Tail",3)}function RO(n){n.c=F(Zn,rn,1,0,5,1)}function dyn(n){n.a=F(Zn,rn,1,8,5,1)}function byn(n){Zc(n.xf(),new t5n(n))}function Tw(n){return n!=null?mt(n):0}function qre(n,e){return ob(e,ef(n))}function Gre(n,e){return ob(e,ef(n))}function zre(n,e){return n[n.length]=e}function Ure(n,e){return n[n.length]=e}function yz(n){return zoe(n.b.Kc(),n.a)}function Wre(n,e){return ZC(BD(n.d),e)}function Xre(n,e){return ZC(BD(n.g),e)}function Vre(n,e){return ZC(BD(n.j),e)}function tr(n,e){ri.call(this,n.b,e)}function vd(n){xE.call(this,n,n,n,n)}function jz(n){return n.b&&uL(n),n.a}function Ez(n){return n.b&&uL(n),n.c}function Qre(n,e){vf||(n.b=e)}function _O(n,e,t){return St(n,e,t),t}function wyn(n,e,t){St(n.c[e.g],e.g,t)}function Jre(n,e,t){u(n.c,69).Xh(e,t)}function Yre(n,e,t){Yo(t,t.i+n,t.j+e)}function Zre(n,e){me(bc(n.a),PMn(e))}function nce(n,e){me(Du(n.a),IMn(e))}function v5(n){Je(),cd.call(this,n)}function ece(n){return n==null?0:mt(n)}function gyn(){gyn=N,hK=new f6(cH)}function je(){je=N,new pyn,new X}function pyn(){new we,new we,new we}function Cz(){Cz=N,Hq(),bin=new we}function Zo(){Zo=N,y.Math.log(2)}function ms(){ms=N,Ch=(E7n(),Dne)}function tce(){throw T(new t1(izn))}function ice(){throw T(new t1(izn))}function rce(){throw T(new t1(rzn))}function cce(){throw T(new t1(rzn))}function vyn(n){this.a=n,HU.call(this,n)}function KO(n){this.a=n,Ej.call(this,n)}function HO(n){this.a=n,Ej.call(this,n)}function wi(n,e){mD(n.c,n.c.length,e)}function Kr(n){return n.ae?1:0}function kyn(n,e){return fc(n,e)>0?n:e}function Bc(n,e,t){return{l:n,m:e,h:t}}function uce(n,e){n.a!=null&&Ckn(e,n.a)}function yyn(n){n.a=new aI,n.c=new aI}function sE(n){this.b=n,this.a=new X}function jyn(n){this.b=new san,this.a=n}function Mz(n){vU.call(this),this.a=n}function Eyn(){Lj.call(this,"Range",2)}function Cyn(){kJ(),this.a=new B7(Hrn)}function sce(n,e){pe(e),Iw(n).Jc(new ju)}function oce(n,e){return ns(),e.n.b+=n}function fce(n,e,t){return it(n.g,t,e)}function hce(n,e,t){return it(n.k,t,e)}function lce(n,e){return it(n.a,e.a,e)}function Mw(n,e,t){return _Q(e,t,n.c)}function Az(n){return new fn(n.c,n.d)}function ace(n){return new fn(n.c,n.d)}function Qr(n){return new fn(n.a,n.b)}function Tyn(n,e){return xEe(n.a,e,null)}function dce(n){Hi(n,null),Ci(n,null)}function Myn(n){s$(n,null),o$(n,null)}function Ayn(){c8.call(this,null,null)}function Syn(){wE.call(this,null,null)}function Sz(n){this.a=n,we.call(this)}function bce(n){this.b=(Pn(),new DI(n))}function oE(n){n.j=F(Ain,q,310,0,0,1)}function wce(n,e,t){n.c.Vc(e,u(t,133))}function gce(n,e,t){n.c.ji(e,u(t,133))}function Pyn(n,e){de(n),n.Gc(u(e,15))}function m5(n,e){return Jje(n.c,n.b,e)}function pce(n,e){return new Jyn(n.Kc(),e)}function qO(n,e){return gwe(n.Kc(),e)!=-1}function Pz(n,e){return n.a.Bc(e)!=null}function fE(n){return n.Ob()?n.Pb():null}function Iyn(n){return Hs(n,0,n.length)}function I(n,e){return n!=null&&WF(n,e)}function vce(n,e){n.q.setHours(e),S6(n,e)}function Oyn(n,e){n.c&&(ZU(e),iMn(e))}function mce(n,e,t){u(n.Kb(t),164).Nb(e)}function kce(n,e,t){return SEe(n,e,t),t}function Dyn(n,e,t){n.a=e^1502,n.b=t^tN}function GO(n,e,t){return n.a[e.g][t.g]}function nf(n,e){return n.a[e.c.p][e.p]}function yce(n,e){return n.e[e.c.p][e.p]}function jce(n,e){return n.c[e.c.p][e.p]}function Ece(n,e){return n.j[e.p]=D9e(e)}function Cce(n,e){return DX(n.f,e.tg())}function Tce(n,e){return DX(n.b,e.tg())}function Mce(n,e){return n.a0?e*e/n:e*e*100}function Jce(n,e){return n>0?e/(n*n):e*100}function Yce(n,e,t){return W(e,e$n(n,t))}function Zce(n,e,t){DC(),n.Xe(e)&&t.td(n)}function s3(n,e,t){var i;i=n.Zc(e),i.Rb(t)}function U0(n,e,t){return n.a+=e,n.b+=t,n}function nue(n,e,t){return n.a*=e,n.b*=t,n}function o8(n,e,t){return n.a-=e,n.b-=t,n}function Zz(n,e){return n.a=e.a,n.b=e.b,n}function vE(n){return n.a=-n.a,n.b=-n.b,n}function fjn(n){this.c=n,this.a=1,this.b=1}function hjn(n){this.c=n,nu(n,0),eu(n,0)}function ljn(n){Tt.call(this),V5(this,n)}function ajn(n){yL(),Nmn(this),this.mf(n)}function djn(n,e){Zv(),c8.call(this,n,e)}function nU(n,e){c1(),wE.call(this,n,e)}function bjn(n,e){c1(),wE.call(this,n,e)}function wjn(n,e){c1(),nU.call(this,n,e)}function Gu(n,e,t){Xu.call(this,n,e,t,2)}function JO(n,e){ms(),FE.call(this,n,e)}function gjn(n,e){ms(),JO.call(this,n,e)}function eU(n,e){ms(),JO.call(this,n,e)}function pjn(n,e){ms(),eU.call(this,n,e)}function tU(n,e){ms(),FE.call(this,n,e)}function vjn(n,e){ms(),tU.call(this,n,e)}function mjn(n,e){ms(),FE.call(this,n,e)}function eue(n,e){return n.c.Fc(u(e,133))}function iU(n,e,t){return jM(G8(n,e),t)}function tue(n,e,t){return e.Qk(n.e,n.c,t)}function iue(n,e,t){return e.Rk(n.e,n.c,t)}function YO(n,e){return pl(n.e,u(e,49))}function rue(n,e,t){s6(Du(n.a),e,IMn(t))}function cue(n,e,t){s6(bc(n.a),e,PMn(t))}function rU(n,e){e.$modCount=n.$modCount}function C5(){C5=N,Xm=new kt("root")}function o3(){o3=N,xy=new w9n,new g9n}function kjn(){this.a=new Od,this.b=new Od}function cU(){RIn.call(this),this.Bb|=Yi}function yjn(){Oe.call(this,"GROW_TREE",0)}function uue(n){return n==null?null:CCe(n)}function sue(n){return n==null?null:D5e(n)}function oue(n){return n==null?null:Nr(n)}function fue(n){return n==null?null:Nr(n)}function Ph(n){n.o==null&&u9e(n)}function sn(n){return A5(n==null||q0(n)),n}function Y(n){return A5(n==null||G0(n)),n}function Ce(n){return A5(n==null||ki(n)),n}function uU(n){this.q=new y.Date($d(n))}function f8(n,e){this.c=n,Yp.call(this,n,e)}function mE(n,e){this.a=n,f8.call(this,n,e)}function hue(n,e){this.d=n,Ovn(this),this.b=e}function sU(n,e){P$.call(this,n),this.a=e}function oU(n,e){P$.call(this,n),this.a=e}function lue(n){xQ.call(this,0,0),this.f=n}function fU(n,e,t){IC.call(this,n,e,t,null)}function jjn(n,e,t){IC.call(this,n,e,t,null)}function aue(n,e,t){return n.ue(e,t)<=0?t:e}function due(n,e,t){return n.ue(e,t)<=0?e:t}function bue(n,e){return u(xd(n.b,e),149)}function wue(n,e){return u(xd(n.c,e),229)}function ZO(n){return u(un(n.a,n.b),287)}function Ejn(n){return new fn(n.c,n.d+n.a)}function Cjn(n){return ns(),syn(u(n,197))}function W0(){W0=N,prn=Cn((Qu(),id))}function gue(n,e){e.a?e7e(n,e):zO(n.a,e.b)}function Tjn(n,e){vf||W(n.a,e)}function pue(n,e){return H9(),K3(e.d.i,n)}function vue(n,e){return x2(),new ABn(e,n)}function Df(n,e){return T8(e,ann),n.f=e,n}function hU(n,e,t){return t=os(n,e,3,t),t}function lU(n,e,t){return t=os(n,e,6,t),t}function aU(n,e,t){return t=os(n,e,9,t),t}function h8(n,e,t){++n.j,n.Ki(),A$(n,e,t)}function Mjn(n,e,t){++n.j,n.Hi(e,n.oi(e,t))}function Ajn(n,e,t){var i;i=n.Zc(e),i.Rb(t)}function Sjn(n,e,t){return MZ(n.c,n.b,e,t)}function dU(n,e){return(e&nt)%n.d.length}function ri(n,e){kt.call(this,n),this.a=e}function bU(n,e){xq.call(this,n),this.a=e}function nD(n,e){xq.call(this,n),this.a=e}function Pjn(n,e){this.c=n,Ld.call(this,e)}function Ijn(n,e){this.a=n,Omn.call(this,e)}function l8(n,e){this.a=n,Omn.call(this,e)}function Ojn(n){this.a=(rs(n,Pb),new Pc(n))}function Djn(n){this.a=(rs(n,Pb),new Pc(n))}function a8(n){return!n.a&&(n.a=new vr),n.a}function $jn(n){return n>8?0:n+1}function mue(n,e){return qn(),n==e?0:n?1:-1}function wU(n,e,t){return m2(n,u(e,22),t)}function kue(n,e,t){return n.apply(e,t)}function Fjn(n,e,t){return n.a+=Hs(e,0,t),n}function gU(n,e){var t;return t=n.e,n.e=e,t}function yue(n,e){var t;t=n[eN],t.call(n,e)}function jue(n,e){var t;t=n[eN],t.call(n,e)}function X0(n,e){n.a.Vc(n.b,e),++n.b,n.c=-1}function xjn(n){Cu(n.e),n.d.b=n.d,n.d.a=n.d}function d8(n){n.b?d8(n.b):n.f.c.zc(n.e,n.d)}function Eue(n,e,t){ca(),Svn(n,e.Ce(n.a,t))}function Cue(n,e){return nO(p$n(n.a,e,!0))}function Tue(n,e){return nO(v$n(n.a,e,!0))}function bo(n,e){return pj(new Array(e),n)}function eD(n){return String.fromCharCode(n)}function Mue(n){return n==null?null:n.message}function Ljn(){this.a=new X,this.b=new X}function Njn(){this.a=new LH,this.b=new Umn}function Bjn(){this.b=new Li,this.c=new X}function pU(){this.d=new Li,this.e=new Li}function vU(){this.n=new Li,this.o=new Li}function kE(){this.n=new i2,this.i=new d2}function Rjn(){this.a=new v4n,this.b=new cwn}function _jn(){this.a=new X,this.d=new X}function Kjn(){this.b=new hi,this.a=new hi}function Hjn(){this.b=new we,this.a=new we}function qjn(){this.b=new E8n,this.a=new sgn}function Gjn(){kE.call(this),this.a=new Li}function T5(n){Jbe.call(this,n,(FC(),vR))}function mU(n,e,t,i){xE.call(this,n,e,t,i)}function Aue(n,e,t){t!=null&&JC(e,rx(n,t))}function Sue(n,e,t){t!=null&&YC(e,rx(n,t))}function kU(n,e,t){return t=os(n,e,11,t),t}function st(n,e){return n.a+=e.a,n.b+=e.b,n}function yi(n,e){return n.a-=e.a,n.b-=e.b,n}function Pue(n,e){return n.n.a=(_n(e),e+10)}function Iue(n,e){return n.n.a=(_n(e),e+10)}function Oue(n,e){return e==n||o4(sM(e),n)}function zjn(n,e){return it(n.a,e,"")==null}function Due(n,e){return H9(),!K3(e.d.i,n)}function $ue(n,e){tl(n.f)?Qme(n,e):Fve(n,e)}function Fue(n,e){var t;return t=e.Hh(n.a),t}function V0(n,e){mr.call(this,rm+n+Ra+e)}function g2(n,e,t,i){V.call(this,n,e,t,i)}function yU(n,e,t,i){V.call(this,n,e,t,i)}function Ujn(n,e,t,i){yU.call(this,n,e,t,i)}function Wjn(n,e,t,i){zE.call(this,n,e,t,i)}function tD(n,e,t,i){zE.call(this,n,e,t,i)}function jU(n,e,t,i){zE.call(this,n,e,t,i)}function Xjn(n,e,t,i){tD.call(this,n,e,t,i)}function EU(n,e,t,i){tD.call(this,n,e,t,i)}function Fn(n,e,t,i){jU.call(this,n,e,t,i)}function Vjn(n,e,t,i){EU.call(this,n,e,t,i)}function Qjn(n,e,t,i){yW.call(this,n,e,t,i)}function Jjn(n,e,t){this.a=n,Vz.call(this,e,t)}function Yjn(n,e,t){this.c=e,this.b=t,this.a=n}function xue(n,e,t){return n.d=u(e.Kb(t),164)}function CU(n,e){return n.Aj().Nh().Kh(n,e)}function TU(n,e){return n.Aj().Nh().Ih(n,e)}function Zjn(n,e){return _n(n),B(n)===B(e)}function Mn(n,e){return _n(n),B(n)===B(e)}function iD(n,e){return nO(p$n(n.a,e,!1))}function rD(n,e){return nO(v$n(n.a,e,!1))}function Lue(n,e){return n.b.sd(new D7n(n,e))}function Nue(n,e){return n.b.sd(new $7n(n,e))}function nEn(n,e){return n.b.sd(new F7n(n,e))}function MU(n,e,t){return n.lastIndexOf(e,t)}function Bue(n,e,t){return ni(n[e.b],n[t.b])}function Rue(n,e){return H(e,(nn(),Jk),n)}function _ue(n,e){return Wc(e.a.d.p,n.a.d.p)}function Kue(n,e){return Wc(n.a.d.p,e.a.d.p)}function Hue(n,e){return ni(n.c-n.s,e.c-e.s)}function eEn(n){return n.c?xr(n.c.a,n,0):-1}function que(n){return n<100?null:new Q1(n)}function p2(n){return n==td||n==Eh||n==Ac}function tEn(n,e){return I(e,15)&&oBn(n.c,e)}function Gue(n,e){vf||e&&(n.d=e)}function cD(n,e){var t;return t=e,!!VV(n,t)}function AU(n,e){this.c=n,DD.call(this,n,e)}function iEn(n){this.c=n,FO.call(this,IM,0)}function rEn(n,e){Voe.call(this,n,n.length,e)}function zue(n,e,t){return u(n.c,69).lk(e,t)}function yE(n,e,t){return u(n.c,69).mk(e,t)}function Uue(n,e,t){return tue(n,u(e,332),t)}function SU(n,e,t){return iue(n,u(e,332),t)}function Wue(n,e,t){return txn(n,u(e,332),t)}function cEn(n,e,t){return zve(n,u(e,332),t)}function M5(n,e){return e==null?null:ab(n.b,e)}function PU(n){return G0(n)?(_n(n),n):n.ke()}function jE(n){return!isNaN(n)&&!isFinite(n)}function uEn(n){$f(),this.a=(Pn(),new Wp(n))}function b8(n){h3(),this.d=n,this.a=new gw}function ks(n,e,t){this.a=n,this.b=e,this.c=t}function sEn(n,e,t){this.a=n,this.b=e,this.c=t}function oEn(n,e,t){this.d=n,this.b=t,this.a=e}function uD(n){yyn(this),_s(this),Vi(this,n)}function du(n){RO(this),GU(this.c,0,n.Pc())}function fEn(n){Wu(n.a),uPn(n.c,n.b),n.b=null}function hEn(n){this.a=n,nh(),tu(Date.now())}function lEn(){lEn=N,Xin=new Lc,XA=new Lc}function sD(){sD=N,Rin=new iln,Pzn=new rln}function aEn(){aEn=N,Nne=F(Zn,rn,1,0,5,1)}function dEn(){dEn=N,eee=F(Zn,rn,1,0,5,1)}function IU(){IU=N,tee=F(Zn,rn,1,0,5,1)}function $f(){$f=N,new Bq((Pn(),Pn(),cr))}function Xue(n){return FC(),$e((pPn(),Dzn),n)}function Vue(n){return lf(),$e((LSn(),Bzn),n)}function Que(n){return $T(),$e((qAn(),Gzn),n)}function Jue(n){return RC(),$e((GAn(),zzn),n)}function Yue(n){return dM(),$e((IOn(),Uzn),n)}function Zue(n){return _o(),$e(($Sn(),Vzn),n)}function nse(n){return Tu(),$e((FSn(),Jzn),n)}function ese(n){return Yc(),$e((xSn(),Zzn),n)}function tse(n){return SM(),$e((Ukn(),jUn),n)}function ise(n){return Hd(),$e((mPn(),CUn),n)}function rse(n){return K2(),$e((kPn(),MUn),n)}function cse(n){return d6(),$e((yPn(),PUn),n)}function use(n){return Aj(),$e((yAn(),IUn),n)}function sse(n){return _C(),$e((zAn(),WUn),n)}function ose(n){return W5(),$e((NSn(),bWn),n)}function fse(n){return Qi(),$e((JPn(),vWn),n)}function hse(n){return G3(),$e((vPn(),EWn),n)}function lse(n){return qd(),$e((BSn(),PWn),n)}function OU(n,e){if(!n)throw T(new Hn(e))}function ase(n){return Qn(),$e((vIn(),$Wn),n)}function DU(n){xE.call(this,n.d,n.c,n.a,n.b)}function oD(n){xE.call(this,n.d,n.c,n.a,n.b)}function $U(n,e,t){this.b=n,this.c=e,this.a=t}function EE(n,e,t){this.b=n,this.a=e,this.c=t}function bEn(n,e,t){this.a=n,this.b=e,this.c=t}function FU(n,e,t){this.a=n,this.b=e,this.c=t}function wEn(n,e,t){this.a=n,this.b=e,this.c=t}function xU(n,e,t){this.a=n,this.b=e,this.c=t}function gEn(n,e,t){this.b=n,this.a=e,this.c=t}function CE(n,e,t){this.e=e,this.b=n,this.d=t}function dse(n,e,t){return ca(),n.a.Od(e,t),e}function fD(n){var e;return e=new Dln,e.e=n,e}function LU(n){var e;return e=new Zmn,e.b=n,e}function w8(){w8=N,sS=new Fdn,oS=new xdn}function wo(){wo=N,WWn=new pbn,XWn=new vbn}function bse(n){return aT(),$e((EPn(),HWn),n)}function wse(n){return hf(),$e((TPn(),JWn),n)}function gse(n){return lM(),$e((mOn(),cXn),n)}function pse(n){return q2(),$e((yIn(),uXn),n)}function vse(n){return OC(),$e((JAn(),sXn),n)}function mse(n){return F2(),$e((RSn(),oXn),n)}function kse(n){return Vw(),$e((UPn(),ZWn),n)}function yse(n){return Kd(),$e((HSn(),rXn),n)}function jse(n){return VC(),$e((_Sn(),fXn),n)}function Ese(n){return Pa(),$e((GPn(),hXn),n)}function Cse(n){return V8(),$e((WAn(),lXn),n)}function Tse(n){return ya(),$e((KSn(),dXn),n)}function Mse(n){return eM(),$e((TIn(),bXn),n)}function Ase(n){return K8(),$e((XAn(),wXn),n)}function Sse(n){return A7(),$e((EIn(),gXn),n)}function Pse(n){return h4(),$e((jIn(),pXn),n)}function Ise(n){return or(),$e((zOn(),vXn),n)}function Ose(n){return q3(),$e((GSn(),mXn),n)}function Dse(n){return Nh(),$e((qSn(),yXn),n)}function $se(n){return kC(),$e((YAn(),jXn),n)}function Fse(n){return Ss(),$e((WPn(),EXn),n)}function xse(n){return JT(),$e((CIn(),BQn),n)}function Lse(n){return i6(),$e((zSn(),RQn),n)}function Nse(n){return wb(),$e((MPn(),_Qn),n)}function Bse(n){return ur(),$e((XSn(),UQn),n)}function Rse(n){return Zw(),$e((vOn(),HQn),n)}function _se(n){return Rh(),$e((WSn(),qQn),n)}function Kse(n){return z8(),$e((QAn(),GQn),n)}function Hse(n){return oT(),$e((USn(),WQn),n)}function qse(n){return b6(),$e((zPn(),KQn),n)}function Gse(n){return x8(),$e((VAn(),XQn),n)}function zse(n){return Q3(),$e((QSn(),VQn),n)}function Use(n){return uT(),$e((JSn(),QQn),n)}function Wse(n){return dT(),$e((VSn(),JQn),n)}function Xse(n){return _d(),$e((YSn(),hJn),n)}function Vse(n){return z5(),$e((nSn(),wJn),n)}function Qse(n){return xf(),$e((eSn(),jJn),n)}function Jse(n){return tf(),$e((tSn(),CJn),n)}function Yse(n){return No(),$e((ZAn(),RJn),n)}function Zse(n){return Id(),$e((iSn(),UJn),n)}function noe(n){return c4(),$e((jPn(),WJn),n)}function eoe(n){return k6(),$e((MIn(),VJn),n)}function toe(n){return aC(),$e((uSn(),fYn),n)}function ioe(n){return iT(),$e((cSn(),wYn),n)}function roe(n){return gC(),$e((rSn(),hYn),n)}function coe(n){return CT(),$e((ZSn(),pYn),n)}function uoe(n){return $C(),$e((sSn(),vYn),n)}function soe(n){return f7(),$e((nPn(),mYn),n)}function ooe(n){return qT(),$e((CPn(),FYn),n)}function foe(n){return sT(),$e((tPn(),xYn),n)}function hoe(n){return ET(),$e((ePn(),LYn),n)}function loe(n){return g4(),$e((QPn(),tZn),n)}function aoe(n){return w7(),$e((iPn(),iZn),n)}function doe(n){return Pj(),$e((mAn(),rZn),n)}function boe(n){return Ij(),$e((vAn(),uZn),n)}function woe(n){return L8(),$e((fSn(),sZn),n)}function goe(n){return P7(),$e((XPn(),oZn),n)}function poe(n){return Jv(),$e((kAn(),CZn),n)}function voe(n){return c7(),$e((oSn(),TZn),n)}function moe(n){return Ho(),$e((VPn(),OZn),n)}function koe(n){return y1(),$e((kOn(),$Zn),n)}function yoe(n){return fh(),$e((kIn(),FZn),n)}function joe(n){return vb(),$e((mIn(),_Zn),n)}function Eoe(n){return rr(),$e((Wkn(),RWn),n)}function Coe(n){return B3(),$e((UAn(),BWn),n)}function Toe(n){return sr(),$e((YPn(),ene),n)}function Moe(n){return of(),$e((cPn(),tne),n)}function Aoe(n){return Hh(),$e((PPn(),ine),n)}function Soe(n){return ZT(),$e((SIn(),rne),n)}function Poe(n){return _h(),$e((rPn(),une),n)}function Ioe(n){return us(),$e((SPn(),one),n)}function Ooe(n){return jb(),$e((POn(),fne),n)}function Doe(n){return qw(),$e((ZPn(),hne),n)}function $oe(n){return Mi(),$e((bIn(),lne),n)}function Foe(n){return Mu(),$e((AIn(),ane),n)}function xoe(n){return Qu(),$e((OPn(),vne),n)}function Loe(n){return Lu(),$e((UOn(),mne),n)}function Noe(n){return J(),$e((nIn(),dne),n)}function Boe(n){return AT(),$e((IPn(),kne),n)}function Roe(n){return Vu(),$e((APn(),Ene),n)}function _oe(n){return d4(),$e((yOn(),Lne),n)}function Koe(n,e){return _n(n),n+(_n(e),e)}function Hoe(n,e){return nh(),me(R(n.a),e)}function qoe(n,e){return nh(),me(R(n.a),e)}function hD(n,e){this.c=n,this.a=e,this.b=e-n}function pEn(n,e,t){this.a=n,this.b=e,this.c=t}function NU(n,e,t){this.a=n,this.b=e,this.c=t}function BU(n,e,t){this.a=n,this.b=e,this.c=t}function vEn(n,e,t){this.a=n,this.b=e,this.c=t}function mEn(n,e,t){this.a=n,this.b=e,this.c=t}function s1(n,e,t){this.e=n,this.a=e,this.c=t}function kEn(n,e,t){ms(),QW.call(this,n,e,t)}function lD(n,e,t){ms(),FW.call(this,n,e,t)}function RU(n,e,t){ms(),FW.call(this,n,e,t)}function _U(n,e,t){ms(),FW.call(this,n,e,t)}function yEn(n,e,t){ms(),lD.call(this,n,e,t)}function KU(n,e,t){ms(),lD.call(this,n,e,t)}function jEn(n,e,t){ms(),KU.call(this,n,e,t)}function EEn(n,e,t){ms(),RU.call(this,n,e,t)}function CEn(n,e,t){ms(),_U.call(this,n,e,t)}function g8(n,e){return pe(n),pe(e),new z8n(n,e)}function v2(n,e){return pe(n),pe(e),new NEn(n,e)}function Goe(n,e){return pe(n),pe(e),new BEn(n,e)}function zoe(n,e){return pe(n),pe(e),new W8n(n,e)}function u(n,e){return A5(n==null||WF(n,e)),n}function f3(n){var e;return e=new X,_$(e,n),e}function Uoe(n){var e;return e=new hi,_$(e,n),e}function TEn(n){var e;return e=new Wq,nF(e,n),e}function p8(n){var e;return e=new Tt,nF(e,n),e}function Woe(n){return!n.e&&(n.e=new X),n.e}function Xoe(n){return!n.c&&(n.c=new Bp),n.c}function W(n,e){return n.c[n.c.length]=e,!0}function MEn(n,e){this.c=n,this.b=e,this.a=!1}function HU(n){this.d=n,Ovn(this),this.b=_fe(n.d)}function AEn(){this.a=";,;",this.b="",this.c=""}function Voe(n,e,t){SCn.call(this,e,t),this.a=n}function SEn(n,e,t){this.b=n,Hkn.call(this,e,t)}function qU(n,e,t){this.c=n,Nj.call(this,e,t)}function GU(n,e,t){aY(t,0,n,e,t.length,!1)}function th(n,e,t,i,r){n.b=e,n.c=t,n.d=i,n.a=r}function Qoe(n,e){e&&(n.b=e,n.a=(fl(e),e.a))}function zU(n,e,t,i,r){n.d=e,n.c=t,n.a=i,n.b=r}function UU(n){var e,t;e=n.b,t=n.c,n.b=t,n.c=e}function WU(n){var e,t;t=n.d,e=n.a,n.d=e,n.a=t}function XU(n){return bl(the(Fr(n)?Ks(n):n))}function Joe(n,e){return Wc(GEn(n.d),GEn(e.d))}function Yoe(n,e){return e==(J(),Gn)?n.c:n.d}function h3(){h3=N,don=(J(),Gn),dP=Vn}function PEn(){this.b=K(Y(cn((Go(),xR))))}function IEn(n){return ca(),F(Zn,rn,1,n,5,1)}function Zoe(n){return new fn(n.c+n.b,n.d+n.a)}function nfe(n,e){return Sj(),Wc(n.d.p,e.d.p)}function aD(n){return ne(n.b!=0),Ts(n,n.a.a)}function efe(n){return ne(n.b!=0),Ts(n,n.c.b)}function VU(n,e){if(!n)throw T(new R9n(e))}function TE(n,e){if(!n)throw T(new Hn(e))}function QU(n,e,t){t3.call(this,n,e),this.b=t}function v8(n,e,t){lz.call(this,n,e),this.c=t}function OEn(n,e,t){oIn.call(this,e,t),this.d=n}function JU(n){IU(),Yy.call(this),this.th(n)}function DEn(n,e,t){this.a=n,Ew.call(this,e,t)}function $En(n,e,t){this.a=n,Ew.call(this,e,t)}function ME(n,e,t){lz.call(this,n,e),this.c=t}function FEn(){T3(),khe.call(this,(Z1(),uo))}function xEn(n){return n!=null&&!$F(n,a9,d9)}function tfe(n,e){return(GDn(n)<<4|GDn(e))&Ut}function ife(n,e){return QE(),ex(n,e),new oTn(n,e)}function sa(n,e){var t;n.n&&(t=e,W(n.f,t))}function l3(n,e,t){var i;i=new Z0(t),Ro(n,e,i)}function rfe(n,e){var t;return t=n.c,wV(n,e),t}function YU(n,e){return e<0?n.g=-1:n.g=e,n}function AE(n,e){return H0e(n),n.a*=e,n.b*=e,n}function LEn(n,e,t,i,r){n.c=e,n.d=t,n.b=i,n.a=r}function Ke(n,e){return Kt(n,e,n.c.b,n.c),!0}function ZU(n){n.a.b=n.b,n.b.a=n.a,n.a=n.b=null}function dD(n){this.b=n,this.a=Ed(this.b.a).Ed()}function NEn(n,e){this.b=n,this.a=e,TI.call(this)}function BEn(n,e){this.a=n,this.b=e,TI.call(this)}function REn(n,e){SCn.call(this,e,1040),this.a=n}function m8(n){return n==0||isNaN(n)?n:n<0?-1:1}function cfe(n){return C2(),hh(n)==Pt(ml(n))}function ufe(n){return C2(),ml(n)==Pt(hh(n))}function jd(n,e){return v6(n,new t3(e.a,e.b))}function sfe(n){return!Xi(n)&&n.c.i.c==n.d.i.c}function SE(n){var e;return e=n.n,n.a.b+e.d+e.a}function _En(n){var e;return e=n.n,n.e.b+e.d+e.a}function nW(n){var e;return e=n.n,n.e.a+e.b+e.c}function KEn(n){return Je(),new ih(0,n)}function ofe(n){return n.a?n.a:WD(n)}function A5(n){if(!n)throw T(new Up(null))}function HEn(){HEn=N,mH=(Pn(),new OI(XB))}function PE(){PE=N,new JQ((HI(),uR),(qI(),cR))}function qEn(){qEn=N,jin=F(Wi,q,19,256,0,1)}function bD(n,e,t,i){MQ.call(this,n,e,t,i,0,0)}function ffe(n,e,t){return it(n.b,u(t.b,17),e)}function hfe(n,e,t){return it(n.b,u(t.b,17),e)}function lfe(n,e){return W(n,new fn(e.a,e.b))}function afe(n,e){return n.c=e)throw T(new qq)}function Xfe(n,e,t){return St(e,0,rW(e[0],t[0])),e}function Vfe(n,e,t){e.Ye(t,K(Y(te(n.b,t)))*n.a)}function ACn(n,e,t){return eg(),R3(n,e)&&R3(n,t)}function D5(n){return Mu(),!n.Hc(n1)&&!n.Hc(Gl)}function qE(n){return new fn(n.c+n.b/2,n.d+n.a/2)}function MD(n,e){return e.kh()?pl(n.b,u(e,49)):e}function kW(n,e){this.e=n,this.d=e&64?e|Bf:e}function SCn(n,e){this.c=0,this.d=n,this.b=e|64|Bf}function GE(n){this.b=new Pc(11),this.a=(Ow(),n)}function AD(n){this.b=null,this.a=(Ow(),n||Lin)}function PCn(n){this.a=Y$n(n.a),this.b=new du(n.b)}function ICn(n){this.b=n,b2.call(this,n),$yn(this)}function OCn(n){this.b=n,u8.call(this,n),Fyn(this)}function Y0(n,e,t){this.a=n,g2.call(this,e,t,5,6)}function yW(n,e,t,i){this.b=n,Yt.call(this,e,t,i)}function gi(n,e,t,i,r){D$.call(this,n,e,t,i,r,-1)}function $5(n,e,t,i,r){R8.call(this,n,e,t,i,r,-1)}function V(n,e,t,i){Yt.call(this,n,e,t),this.b=i}function zE(n,e,t,i){v8.call(this,n,e,t),this.b=i}function DCn(n){xkn.call(this,n,!1),this.a=!1}function $Cn(n,e){this.b=n,bvn.call(this,n.b),this.a=e}function FCn(n,e){nb(),Yie.call(this,n,mT(new Hu(e)))}function UE(n,e){return Je(),new xW(n,e,0)}function SD(n,e){return Je(),new xW(6,n,e)}function Qfe(n,e){return Mn(n.substr(0,e.length),e)}function Uu(n,e){return ki(e)?QD(n,e):!!Sr(n.f,e)}function Oi(n,e){for(_n(e);n.Ob();)e.td(n.Pb())}function Pw(n,e,t){jl(),this.e=n,this.d=e,this.a=t}function o1(n,e,t,i){var r;r=n.i,r.i=e,r.a=t,r.b=i}function jW(n){var e;for(e=n;e.f;)e=e.f;return e}function y2(n){var e;return e=t6(n),ne(e!=null),e}function Jfe(n){var e;return e=Lge(n),ne(e!=null),e}function d3(n,e){var t;return t=n.a.gc(),$X(e,t),t-e}function EW(n,e){var t;for(t=0;t0?y.Math.log(n/e):-100}function xCn(n,e){return fc(n,e)<0?-1:fc(n,e)>0?1:0}function SW(n,e,t){return MRn(n,u(e,46),u(t,167))}function LCn(n,e){return u(vW(Ed(n.a)).Xb(e),42).cd()}function uhe(n,e){return P0e(e,n.length),new REn(n,e)}function DD(n,e){this.d=n,ie.call(this,n),this.e=e}function Cd(n){this.d=(_n(n),n),this.a=0,this.c=IM}function PW(n,e){cd.call(this,1),this.a=n,this.b=e}function NCn(n,e){return n.c?NCn(n.c,e):W(n.b,e),n}function she(n,e,t){var i;return i=ub(n,e),g$(n,e,t),i}function IW(n,e){var t;return t=n.slice(0,e),WX(t,n)}function BCn(n,e,t){var i;for(i=0;i=n.g}function KD(n,e,t){var i;return i=Y$(n,e,t),rZ(n,i)}function j2(n,e){var t;t=n.a.length,ub(n,t),g$(n,t,e)}function ZCn(n,e){var t;t=console[n],t.call(console,e)}function nTn(n,e){var t;++n.j,t=n.Vi(),n.Ii(n.oi(t,e))}function mhe(n,e,t){u(e.b,65),Zc(e.a,new NU(n,t,e))}function FW(n,e,t){uj.call(this,e),this.a=n,this.b=t}function xW(n,e,t){cd.call(this,n),this.a=e,this.b=t}function LW(n,e,t){this.a=n,xq.call(this,e),this.b=t}function eTn(n,e,t){this.a=n,aX.call(this,8,e,null,t)}function khe(n){this.a=(_n(xe),xe),this.b=n,new tG}function tTn(n){this.c=n,this.b=this.c.a,this.a=this.c.e}function NW(n){this.c=n,this.b=n.a.d.a,rU(n.a.e,this)}function Wu(n){z0(n.c!=-1),n.d.$c(n.c),n.b=n.c,n.c=-1}function L5(n){return y.Math.sqrt(n.a*n.a+n.b*n.b)}function Md(n,e){return a3(e,n.a.c.length),un(n.a,e)}function Ff(n,e){return B(n)===B(e)||n!=null&&tt(n,e)}function yhe(n){return 0>=n?new PG:sbe(n-1)}function jhe(n){return aw?QD(aw,n):!1}function iTn(n){return n?n.dc():!n.Kc().Ob()}function Gi(n){return!n.a&&n.c?n.c.b:n.a}function Ehe(n){return!n.a&&(n.a=new Yt(zl,n,4)),n.a}function Ad(n){return!n.d&&(n.d=new Yt(ar,n,1)),n.d}function _n(n){if(n==null)throw T(new Nv);return n}function N5(n){n.c?n.c.He():(n.d=!0,S8e(n))}function fl(n){n.c?fl(n.c):(Ta(n),n.d=!0)}function rTn(n){KW(n.a),n.b=F(Zn,rn,1,n.b.length,5,1)}function Che(n,e){return Wc(e.j.c.length,n.j.c.length)}function The(n,e){n.c<0||n.b.b=0?n.Bh(t):bY(n,e)}function cTn(n){var e,t;return e=n.c.i.c,t=n.d.i.c,e==t}function Ahe(n){if(n.p!=4)throw T(new fu);return n.e}function She(n){if(n.p!=3)throw T(new fu);return n.e}function Phe(n){if(n.p!=6)throw T(new fu);return n.f}function Ihe(n){if(n.p!=6)throw T(new fu);return n.k}function Ohe(n){if(n.p!=3)throw T(new fu);return n.j}function Dhe(n){if(n.p!=4)throw T(new fu);return n.j}function BW(n){return!n.b&&(n.b=new sj(new KI)),n.b}function Sd(n){return n.c==-2&&Pte(n,Qve(n.g,n.b)),n.c}function g3(n,e){var t;return t=LD("",n),t.n=e,t.i=1,t}function $he(n,e){yD(u(e.b,65),n),Zc(e.a,new Aq(n))}function Fhe(n,e){me((!n.a&&(n.a=new l8(n,n)),n.a),e)}function uTn(n,e){this.b=n,DD.call(this,n,e),$yn(this)}function sTn(n,e){this.b=n,AU.call(this,n,e),Fyn(this)}function RW(n,e,t,i){bd.call(this,n,e),this.d=t,this.a=i}function VE(n,e,t,i){bd.call(this,n,t),this.a=e,this.f=i}function oTn(n,e){bce.call(this,obe(pe(n),pe(e))),this.a=e}function fTn(){UJ.call(this,Ka,(a8n(),hee)),tEe(this)}function hTn(){UJ.call(this,Vs,(Qp(),g1n)),lje(this)}function lTn(){Oe.call(this,"DELAUNAY_TRIANGULATION",0)}function xhe(n){return String.fromCharCode.apply(null,n)}function it(n,e,t){return ki(e)?yr(n,e,t):_c(n.f,e,t)}function _W(n){return Pn(),n?n.ve():(Ow(),Ow(),Bin)}function Lhe(n,e,t){return L2(),t.pg(n,u(e.cd(),146))}function aTn(n,e){return PE(),new JQ(new Wyn(n),new Uyn(e))}function Nhe(n){return rs(n,AL),KC(qi(qi(5,n),n/10|0))}function QE(){QE=N,fzn=new GI(A(M(Ha,1),OM,42,0,[]))}function dTn(n){return!n.d&&(n.d=new _p(n.c.Cc())),n.d}function p3(n){return!n.a&&(n.a=new W9n(n.c.vc())),n.a}function bTn(n){return!n.b&&(n.b=new Wp(n.c.ec())),n.b}function ch(n,e){for(;e-- >0;)n=n<<1|(n<0?1:0);return n}function pc(n,e){return B(n)===B(e)||n!=null&&tt(n,e)}function Bhe(n,e){return qn(),u(e.b,19).ai&&++i,i}function Oh(n){var e,t;return t=(e=new ud,e),O3(t,n),t}function UD(n){var e,t;return t=(e=new ud,e),VJ(t,n),t}function Zhe(n,e){var t;return t=te(n.f,e),MV(e,t),null}function WD(n){var e;return e=hbe(n),e||null}function CTn(n){return!n.b&&(n.b=new V(bi,n,12,3)),n.b}function n1e(n){return n!=null&&_9(tI,n.toLowerCase())}function e1e(n,e){return ni(bu(n)*zu(n),bu(e)*zu(e))}function t1e(n,e){return ni(bu(n)*zu(n),bu(e)*zu(e))}function i1e(n,e){return ni(n.d.c+n.d.b/2,e.d.c+e.d.b/2)}function r1e(n,e){return ni(n.g.c+n.g.b/2,e.g.c+e.g.b/2)}function TTn(n,e,t){t.a?eu(n,e.b-n.f/2):nu(n,e.a-n.g/2)}function MTn(n,e,t,i){this.a=n,this.b=e,this.c=t,this.d=i}function ATn(n,e,t,i){this.a=n,this.b=e,this.c=t,this.d=i}function ha(n,e,t,i){this.e=n,this.a=e,this.c=t,this.d=i}function STn(n,e,t,i){this.a=n,this.c=e,this.d=t,this.b=i}function PTn(n,e,t,i){ms(),ySn.call(this,e,t,i),this.a=n}function ITn(n,e,t,i){ms(),ySn.call(this,e,t,i),this.a=n}function OTn(n,e){this.a=n,hue.call(this,n,u(n.d,15).Zc(e))}function XD(n){this.f=n,this.c=this.f.e,n.f>0&&qFn(this)}function DTn(n,e,t,i){this.b=n,this.c=i,FO.call(this,e,t)}function $Tn(n){return ne(n.b=0&&Mn(n.substr(t,e.length),e)}function hl(n,e,t,i,r,c,o){return new v$(n.e,e,t,i,r,c,o)}function QTn(n,e,t,i,r,c){this.a=n,z$.call(this,e,t,i,r,c)}function JTn(n,e,t,i,r,c){this.a=n,z$.call(this,e,t,i,r,c)}function YTn(n,e){this.g=n,this.d=A(M(mh,1),E1,10,0,[e])}function f1(n,e){this.e=n,this.a=Zn,this.b=yBn(e),this.c=e}function ZTn(n,e){kE.call(this),eV(this),this.a=n,this.c=e}function M8(n,e,t,i){St(n.c[e.g],t.g,i),St(n.c[t.g],e.g,i)}function ZD(n,e,t,i){St(n.c[e.g],e.g,t),St(n.b[e.g],e.g,i)}function M1e(){return x8(),A(M(ron,1),z,376,0,[uK,iy])}function A1e(){return K8(),A(M(Qcn,1),z,479,0,[Vcn,xS])}function S1e(){return V8(),A(M(Wcn,1),z,419,0,[$S,Ucn])}function P1e(){return OC(),A(M(Rcn,1),z,422,0,[Bcn,s_])}function I1e(){return kC(),A(M(fun,1),z,420,0,[j_,oun])}function O1e(){return z8(),A(M(non,1),z,421,0,[iK,rK])}function D1e(){return z5(),A(M(bJn,1),z,523,0,[Hm,Km])}function $1e(){return No(),A(M(BJn,1),z,520,0,[tw,Bl])}function F1e(){return xf(),A(M(yJn,1),z,516,0,[M0,I1])}function x1e(){return tf(),A(M(EJn,1),z,515,0,[Ja,yf])}function L1e(){return Id(),A(M(zJn,1),z,455,0,[Rl,Lg])}function N1e(){return gC(),A(M(Son,1),z,425,0,[yK,Aon])}function B1e(){return aC(),A(M(Mon,1),z,480,0,[kK,Ton])}function R1e(){return iT(),A(M(Pon,1),z,495,0,[EP,mv])}function _1e(){return $C(),A(M(Oon,1),z,426,0,[Ion,TK])}function K1e(){return c7(),A(M(Ffn,1),z,429,0,[DP,$fn])}function H1e(){return L8(),A(M(afn,1),z,430,0,[FK,IP])}function q1e(){return $T(),A(M(Jin,1),z,428,0,[yR,Qin])}function G1e(){return RC(),A(M(Zin,1),z,427,0,[Yin,jR])}function z1e(){return _C(),A(M(Arn,1),z,424,0,[$R,tS])}function U1e(){return B3(),A(M(NWn,1),z,511,0,[_k,UR])}function sC(n,e,t,i){return t>=0?n.jh(e,t,i):n.Sg(null,t,i)}function n$(n){return n.b.b==0?n.a.$e():aD(n.b)}function W1e(n){if(n.p!=5)throw T(new fu);return ge(n.f)}function X1e(n){if(n.p!=5)throw T(new fu);return ge(n.k)}function VW(n){return B(n.a)===B((eF(),gH))&&Vje(n),n.a}function nMn(n){this.a=u(pe(n),271),this.b=(Pn(),new Hz(n))}function eMn(n,e){bte(this,new fn(n.a,n.b)),wte(this,p8(e))}function Id(){Id=N,Rl=new iz(Y2,0),Lg=new iz(Z2,1)}function xf(){xf=N,M0=new ez(Z2,0),I1=new ez(Y2,1)}function Od(){rie.call(this,new s2(sb(12))),Bz(!0),this.a=2}function e$(n,e,t){Je(),cd.call(this,n),this.b=e,this.a=t}function QW(n,e,t){ms(),uj.call(this,e),this.a=n,this.b=t}function tMn(n){kE.call(this),eV(this),this.a=n,this.c=!0}function iMn(n){var e;e=n.c.d.b,n.b=e,n.a=n.c.d,e.a=n.c.d.b=n}function oC(n){var e;ebe(n.a),byn(n.a),e=new tj(n.a),TQ(e)}function V1e(n,e){aBn(n,!0),Zc(n.e.wf(),new $U(n,!0,e))}function fC(n,e){return LAn(e),Y0e(n,F(be,Le,25,e,15,1),e)}function Q1e(n,e){return C2(),n==Pt(hh(e))||n==Pt(ml(e))}function vc(n,e){return e==null?Vr(Sr(n.f,null)):n5(n.g,e)}function J1e(n){return n.b==0?null:(ne(n.b!=0),Ts(n,n.a.a))}function Gt(n){return Math.max(Math.min(n,nt),-2147483648)|0}function Y1e(n,e){var t=lR[n.charCodeAt(0)];return t??n}function hC(n,e){return tC(n,"set1"),tC(e,"set2"),new Z8n(n,e)}function Z1e(n,e){var t;return t=W0e(n.f,e),st(vE(t),n.f.d)}function R5(n,e){var t,i;return t=e,i=new dI,n_n(n,t,i),i.d}function t$(n,e,t,i){var r;r=new Gjn,e.a[t.g]=r,m2(n.b,i,r)}function JW(n,e,t){var i;i=n.Yg(e),i>=0?n.sh(i,t):_Y(n,e,t)}function Dw(n,e,t){dC(),n&&it(dH,n,e),n&&it($y,n,t)}function rMn(n,e,t){this.i=new X,this.b=n,this.g=e,this.a=t}function lC(n,e,t){this.c=new X,this.e=n,this.f=e,this.b=t}function YW(n,e,t){this.a=new X,this.e=n,this.f=e,this.c=t}function cMn(n,e){oE(this),this.f=e,this.g=n,eC(this),this._d()}function A8(n,e){var t;t=n.q.getHours(),n.q.setDate(e),S6(n,t)}function uMn(n,e){var t;for(pe(e),t=n.a;t;t=t.c)e.Od(t.g,t.i)}function sMn(n){var e;return e=new kj(sb(n.length)),qV(e,n),e}function nle(n){function e(){}return e.prototype=n||{},new e}function ele(n,e){return LOn(n,e)?(FIn(n),!0):!1}function Dh(n,e){if(e==null)throw T(new Nv);return Y2e(n,e)}function tle(n){if(n.qe())return null;var e=n.n;return RA[e]}function S8(n){return n.Db>>16!=3?null:u(n.Cb,33)}function ef(n){return n.Db>>16!=9?null:u(n.Cb,33)}function oMn(n){return n.Db>>16!=6?null:u(n.Cb,79)}function fMn(n){return n.Db>>16!=7?null:u(n.Cb,235)}function hMn(n){return n.Db>>16!=7?null:u(n.Cb,160)}function Pt(n){return n.Db>>16!=11?null:u(n.Cb,33)}function lMn(n,e){var t;return t=n.Yg(e),t>=0?n.lh(t):Ox(n,e)}function aMn(n,e){var t;return t=new iW(e),dxn(t,n),new du(t)}function ZW(n){var e;return e=n.d,e=n.si(n.f),me(n,e),e.Ob()}function dMn(n,e){return n.b+=e.b,n.c+=e.c,n.d+=e.d,n.a+=e.a,n}function i$(n,e){return y.Math.abs(n)0}function bMn(){this.a=new Sh,this.e=new hi,this.g=0,this.i=0}function wMn(n){this.a=n,this.b=F(lJn,q,1944,n.e.length,0,2)}function r$(n,e,t){var i;i=tDn(n,e,t),n.b=new tT(i.c.length)}function tf(){tf=N,Ja=new nz(hN,0),yf=new nz("UP",1)}function aC(){aC=N,kK=new rz(PHn,0),Ton=new rz("FAN",1)}function dC(){dC=N,dH=new we,$y=new we,Ere(Azn,new z2n)}function rle(n){if(n.p!=0)throw T(new fu);return b5(n.f,0)}function cle(n){if(n.p!=0)throw T(new fu);return b5(n.k,0)}function gMn(n){return n.Db>>16!=3?null:u(n.Cb,147)}function y3(n){return n.Db>>16!=6?null:u(n.Cb,235)}function eb(n){return n.Db>>16!=17?null:u(n.Cb,26)}function pMn(n,e){var t=n.a=n.a||[];return t[e]||(t[e]=n.le(e))}function ule(n,e){var t;return t=n.a.get(e),t??new Array}function sle(n,e){var t;t=n.q.getHours(),n.q.setMonth(e),S6(n,t)}function yr(n,e,t){return e==null?_c(n.f,null,t):Gd(n.g,e,t)}function _5(n,e,t,i,r,c){return new Lh(n.e,e,n.aj(),t,i,r,c)}function P8(n,e,t){return n.a=Zu(n.a,0,e)+(""+t)+r8(n.a,e),n}function ole(n,e,t){return W(n.a,(QE(),ex(e,t),new bd(e,t))),n}function nX(n){return _z(n.c),n.e=n.a=n.c,n.c=n.c.c,++n.d,n.a.f}function vMn(n){return _z(n.e),n.c=n.a=n.e,n.e=n.e.e,--n.d,n.a.f}function Ci(n,e){n.d&&Jc(n.d.e,n),n.d=e,n.d&&W(n.d.e,n)}function Hi(n,e){n.c&&Jc(n.c.g,n),n.c=e,n.c&&W(n.c.g,n)}function jr(n,e){n.c&&Jc(n.c.a,n),n.c=e,n.c&&W(n.c.a,n)}function Hr(n,e){n.i&&Jc(n.i.j,n),n.i=e,n.i&&W(n.i.j,n)}function mMn(n,e,t){this.a=e,this.c=n,this.b=(pe(t),new du(t))}function kMn(n,e,t){this.a=e,this.c=n,this.b=(pe(t),new du(t))}function yMn(n,e){this.a=n,this.c=Qr(this.a),this.b=new uC(e)}function fle(n){var e;return Ta(n),e=new hi,gt(n,new Vvn(e))}function tb(n,e){if(n<0||n>e)throw T(new mr(cnn+n+unn+e))}function eX(n,e){return lCn(n.a,e)?TW(n,u(e,22).g,null):null}function hle(n){return yF(),qn(),u(n.a,81).d.e!=0}function jMn(){jMn=N,azn=Fe((aj(),A(M(lzn,1),z,538,0,[fR])))}function EMn(){EMn=N,YQn=Eu(new li,(Qi(),Or),(rr(),Kk))}function tX(){tX=N,ZQn=Eu(new li,(Qi(),Or),(rr(),Kk))}function CMn(){CMn=N,eJn=Eu(new li,(Qi(),Or),(rr(),Kk))}function TMn(){TMn=N,gJn=Ze(new li,(Qi(),Or),(rr(),km))}function ns(){ns=N,mJn=Ze(new li,(Qi(),Or),(rr(),km))}function MMn(){MMn=N,kJn=Ze(new li,(Qi(),Or),(rr(),km))}function c$(){c$=N,TJn=Ze(new li,(Qi(),Or),(rr(),km))}function AMn(){AMn=N,lYn=Eu(new li,(c4(),Gm),(k6(),lK))}function aa(n,e,t,i){this.c=n,this.d=i,s$(this,e),o$(this,t)}function M2(n){this.c=new Tt,this.b=n.b,this.d=n.c,this.a=n.a}function u$(n){this.a=y.Math.cos(n),this.b=y.Math.sin(n)}function s$(n,e){n.a&&Jc(n.a.k,n),n.a=e,n.a&&W(n.a.k,n)}function o$(n,e){n.b&&Jc(n.b.f,n),n.b=e,n.b&&W(n.b.f,n)}function SMn(n,e){mhe(n,n.b,n.c),u(n.b.b,65),e&&u(e.b,65).b}function lle(n,e){vQ(n,e),I(n.Cb,88)&&yb(Ou(u(n.Cb,88)),2)}function f$(n,e){I(n.Cb,88)&&yb(Ou(u(n.Cb,88)),4),Ic(n,e)}function bC(n,e){I(n.Cb,179)&&(u(n.Cb,179).tb=null),Ic(n,e)}function mc(n,e){return er(),R$(e)?new IE(e,n):new i8(e,n)}function ale(n,e){var t,i;t=e.c,i=t!=null,i&&j2(n,new Z0(e.c))}function PMn(n){var e,t;return t=(Qp(),e=new ud,e),O3(t,n),t}function IMn(n){var e,t;return t=(Qp(),e=new ud,e),O3(t,n),t}function OMn(n,e){var t;return t=new Rs(n),e.c[e.c.length]=t,t}function DMn(n,e){var t;return t=u(ab(T2(n.a),e),14),t?t.gc():0}function $Mn(n){var e;return Ta(n),e=(Ow(),Ow(),Nin),qC(n,e)}function FMn(n){for(var e;;)if(e=n.Pb(),!n.Ob())return e}function iX(n,e){tie.call(this,new s2(sb(n))),rs(e,W_n),this.a=e}function uh(n,e,t){KDn(e,t,n.gc()),this.c=n,this.a=e,this.b=t-e}function xMn(n,e,t){var i;KDn(e,t,n.c.length),i=t-e,AG(n.c,e,i)}function dle(n,e){Dyn(n,ge(ui(cl(e,24),FM)),ge(ui(e,FM)))}function Ln(n,e){if(n<0||n>=e)throw T(new mr(cnn+n+unn+e))}function Te(n,e){if(n<0||n>=e)throw T(new wG(cnn+n+unn+e))}function xn(n,e){this.b=(_n(n),n),this.a=e&Ib?e:e|64|Bf}function LMn(n){dyn(this),Wmn(this.a,KV(y.Math.max(8,n))<<1)}function rf(n){return Gr(A(M(di,1),q,8,0,[n.i.n,n.n,n.a]))}function ble(){return lf(),A(M(Bu,1),z,132,0,[Win,ls,Rb])}function wle(){return _o(),A(M(_b,1),z,232,0,[Zr,Fc,nc])}function gle(){return Tu(),A(M(Qzn,1),z,461,0,[Vf,Ol,Co])}function ple(){return Yc(),A(M(Yzn,1),z,462,0,[Wo,Dl,To])}function vle(){return qd(),A(M(zrn,1),z,423,0,[yg,Grn,qR])}function mle(){return W5(),A(M(Krn,1),z,379,0,[NR,LR,BR])}function kle(){return i6(),A(M(Gsn,1),z,378,0,[J_,qsn,oP])}function yle(){return F2(),A(M(Kcn,1),z,314,0,[ap,qk,_cn])}function jle(){return VC(),A(M(qcn,1),z,337,0,[Hcn,DS,o_])}function Ele(){return ya(),A(M(aXn,1),z,450,0,[l_,cv,Tg])}function Cle(){return Kd(),A(M(YR,1),z,361,0,[g0,Fl,w0])}function Tle(){return Nh(),A(M(kXn,1),z,303,0,[zk,Ag,dp])}function Mle(){return q3(),A(M(y_,1),z,292,0,[m_,k_,Gk])}function Ale(){return ur(),A(M(zQn,1),z,452,0,[Bm,Su,xc])}function Sle(){return Rh(),A(M(Zsn,1),z,339,0,[Nl,Ysn,tK])}function Ple(){return oT(),A(M(ion,1),z,375,0,[eon,cK,ton])}function Ile(){return dT(),A(M(hon,1),z,377,0,[fK,pv,ew])}function Ole(){return Q3(),A(M(uon,1),z,336,0,[sK,con,Rm])}function Dle(){return uT(),A(M(fon,1),z,338,0,[oon,oK,son])}function $le(){return _d(),A(M(fJn,1),z,454,0,[ry,_m,aP])}function Fle(){return CT(),A(M(gYn,1),z,442,0,[CK,jK,EK])}function xle(){return f7(),A(M(Fon,1),z,380,0,[CP,Don,$on])}function Lle(){return ET(),A(M(Yon,1),z,381,0,[Jon,IK,Qon])}function Nle(){return sT(),A(M(Xon,1),z,293,0,[PK,Won,Uon])}function Ble(){return w7(),A(M(OK,1),z,437,0,[AP,SP,PP])}function Rle(){return _h(),A(M(Khn,1),z,334,0,[HP,F1,i9])}function _le(){return of(),A(M(Phn,1),z,272,0,[jv,cw,Ev])}function Kle(n,e){return o9e(n,e,I(e,99)&&(u(e,18).Bb&Yi)!=0)}function Hle(n,e,t){var i;return i=O6(n,e,!1),i.b<=e&&i.a<=t}function NMn(n,e,t){var i;i=new Jwn,i.b=e,i.a=t,++e.b,W(n.d,i)}function qle(n,e){var t;return t=(_n(n),n).g,Yz(!!t),_n(e),t(e)}function rX(n,e){var t,i;return i=d3(n,e),t=n.a.Zc(i),new Y8n(n,t)}function Gle(n){return n.Db>>16!=6?null:u(Fx(n),235)}function zle(n){if(n.p!=2)throw T(new fu);return ge(n.f)&Ut}function Ule(n){if(n.p!=2)throw T(new fu);return ge(n.k)&Ut}function Wle(n){return n.a==(T3(),uI)&&Ste(n,C9e(n.g,n.b)),n.a}function A2(n){return n.d==(T3(),uI)&&Ite(n,pke(n.g,n.b)),n.d}function j(n){return ne(n.ai?1:0}function BMn(n,e){var t,i;return t=F$(e),i=t,u(te(n.c,i),19).a}function RMn(n,e){var t;for(t=n+"";t.length0&&n.a[--n.d]==0;);n.a[n.d++]==0&&(n.e=0)}function rAn(n){return n.a?n.e.length==0?n.a.a:n.a.a+(""+n.e):n.c}function rae(n){return!!n.a&&Du(n.a.a).i!=0&&!(n.b&&YF(n.b))}function cae(n){return!!n.u&&bc(n.u.a).i!=0&&!(n.n&&JF(n.n))}function cAn(n){return gD(n.e.Hd().gc()*n.c.Hd().gc(),16,new tvn(n))}function uae(n,e){return xCn(tu(n.q.getTime()),tu(e.q.getTime()))}function Lf(n){return u(af(n,F(GR,MN,17,n.c.length,0,1)),474)}function I8(n){return u(af(n,F(mh,E1,10,n.c.length,0,1)),193)}function sae(n){return ns(),!Xi(n)&&!(!Xi(n)&&n.c.i.c==n.d.i.c)}function uAn(n,e,t){var i;i=(pe(n),new du(n)),N3e(new mMn(i,e,t))}function O8(n,e,t){var i;i=(pe(n),new du(n)),B3e(new kMn(i,e,t))}function sAn(n,e){var t;return t=1-e,n.a[t]=eT(n.a[t],t),eT(n,e)}function oAn(n,e){var t;n.e=new oG,t=Cb(e),wi(t,n.c),eBn(n,t,0)}function Ti(n,e,t,i){var r;r=new XH,r.a=e,r.b=t,r.c=i,Ke(n.a,r)}function Z(n,e,t,i){var r;r=new XH,r.a=e,r.b=t,r.c=i,Ke(n.b,r)}function po(n){var e,t,i;return e=new HCn,t=Zx(e,n),UEe(e),i=t,i}function hX(){var n,e,t;return e=(t=(n=new ud,n),t),W(M1n,e),e}function pC(n){return n.j.c=F(Zn,rn,1,0,5,1),KW(n.c),Khe(n.a),n}function $w(n){return Qv(),I(n.g,10)?u(n.g,10):null}function oae(n){return Iw(n).dc()?!1:(sce(n,new Np),!0)}function fae(n){if(!("stack"in n))try{throw n}catch{}return n}function D8(n,e){if(n<0||n>=e)throw T(new mr(j6e(n,e)));return n}function fAn(n,e,t){if(n<0||et)throw T(new mr(W5e(n,e,t)))}function d$(n,e){if(ci(n.a,e),e.d)throw T(new _r(wKn));e.d=n}function b$(n,e){if(e.$modCount!=n.$modCount)throw T(new vs)}function hAn(n,e){return I(e,42)?ix(n.a,u(e,42)):!1}function lAn(n,e){return I(e,42)?ix(n.a,u(e,42)):!1}function aAn(n,e){return I(e,42)?ix(n.a,u(e,42)):!1}function hae(n,e){return n.a<=n.b?(e.ud(n.a++),!0):!1}function $d(n){var e;return Fr(n)?(e=n,e==-0?0:e):m0e(n)}function vC(n){var e;return fl(n),e=new fln,vw(n.a,new Wvn(e)),e}function dAn(n){var e;return fl(n),e=new oln,vw(n.a,new Uvn(e)),e}function Pi(n,e){this.a=n,$v.call(this,n),tb(e,n.gc()),this.b=e}function lX(n){this.e=n,this.b=this.e.a.entries(),this.a=new Array}function lae(n){return gD(n.e.Hd().gc()*n.c.Hd().gc(),273,new evn(n))}function mC(n){return new Pc((rs(n,AL),KC(qi(qi(5,n),n/10|0))))}function bAn(n){return u(af(n,F(FWn,UKn,11,n.c.length,0,1)),1943)}function aae(n,e,t){return t.f.c.length>0?SW(n.a,e,t):SW(n.b,e,t)}function dae(n,e,t){n.d&&Jc(n.d.e,n),n.d=e,n.d&&Q0(n.d.e,t,n)}function w$(n,e){uTe(e,n),WU(n.d),WU(u(k(n,(nn(),eP)),207))}function H5(n,e){cTe(e,n),UU(n.d),UU(u(k(n,(nn(),eP)),207))}function Fd(n,e){var t,i;return t=Dh(n,e),i=null,t&&(i=t.fe()),i}function j3(n,e){var t,i;return t=ub(n,e),i=null,t&&(i=t.ie()),i}function q5(n,e){var t,i;return t=Dh(n,e),i=null,t&&(i=t.ie()),i}function $h(n,e){var t,i;return t=Dh(n,e),i=null,t&&(i=tY(t)),i}function bae(n,e,t){var i;return i=i4(t),gM(n.g,i,e),gM(n.i,e,t),e}function wae(n,e,t){var i;i=q2e();try{return kue(n,e,t)}finally{Mae(i)}}function wAn(n){var e;e=n.Wg(),this.a=I(e,69)?u(e,69).Zh():e.Kc()}function li(){P9n.call(this),this.j.c=F(Zn,rn,1,0,5,1),this.a=-1}function aX(n,e,t,i){this.d=n,this.n=e,this.g=t,this.o=i,this.p=-1}function gAn(n,e,t,i){this.e=i,this.d=null,this.c=n,this.a=e,this.b=t}function dX(n,e,t){this.d=new r6n(this),this.e=n,this.i=e,this.f=t}function kC(){kC=N,j_=new QG(I4,0),oun=new QG("TOP_LEFT",1)}function pAn(){pAn=N,aon=aTn(Q(1),Q(4)),lon=aTn(Q(1),Q(2))}function vAn(){vAn=N,uZn=Fe((Ij(),A(M(cZn,1),z,551,0,[$K])))}function mAn(){mAn=N,rZn=Fe((Pj(),A(M(lfn,1),z,482,0,[DK])))}function kAn(){kAn=N,CZn=Fe((Jv(),A(M(Dfn,1),z,530,0,[hy])))}function yAn(){yAn=N,IUn=Fe((Aj(),A(M(krn,1),z,481,0,[SR])))}function gae(){return Hd(),A(M(EUn,1),z,406,0,[Ok,Ik,MR,AR])}function pae(){return FC(),A(M(WA,1),z,297,0,[vR,qin,Gin,zin])}function vae(){return d6(),A(M(SUn,1),z,394,0,[Lk,YA,ZA,Nk])}function mae(){return K2(),A(M(TUn,1),z,323,0,[$k,Dk,Fk,xk])}function kae(){return G3(),A(M(jWn,1),z,405,0,[b0,Hb,Kb,kg])}function yae(){return aT(),A(M(KWn,1),z,360,0,[QR,TS,MS,Hk])}function jAn(n,e,t,i){return I(t,54)?new ojn(n,e,t,i):new pW(n,e,t,i)}function jae(){return hf(),A(M(QWn,1),z,411,0,[lp,nv,ev,JR])}function Eae(n){var e;return n.j==(J(),ae)&&(e=GLn(n),au(e,Vn))}function Cae(n,e){var t;t=e.a,Hi(t,e.c.d),Ci(t,e.d.d),fb(t.a,n.n)}function EAn(n,e){return u(yd(KE(u(ct(n.k,e),15).Oc(),jg)),113)}function CAn(n,e){return u(yd(HE(u(ct(n.k,e),15).Oc(),jg)),113)}function Tae(n){return new xn(jbe(u(n.a.dd(),14).gc(),n.a.cd()),16)}function E3(n){return I(n,14)?u(n,14).dc():!n.Kc().Ob()}function S2(n){return Qv(),I(n.g,145)?u(n.g,145):null}function TAn(n){if(n.e.g!=n.b)throw T(new vs);return!!n.c&&n.d>0}function Re(n){return ne(n.b!=n.d.c),n.c=n.b,n.b=n.b.a,++n.a,n.c.c}function bX(n,e){_n(e),St(n.a,n.c,e),n.c=n.c+1&n.a.length-1,MFn(n)}function ll(n,e){_n(e),n.b=n.b-1&n.a.length-1,St(n.a,n.b,e),MFn(n)}function MAn(n,e){var t;for(t=n.j.c.length;t0&&gc(n.g,0,e,0,n.i),e}function IAn(n,e){$j();var t;return t=u(te(eI,n),55),!t||t.wj(e)}function Bae(n){if(n.p!=1)throw T(new fu);return ge(n.f)<<24>>24}function Rae(n){if(n.p!=1)throw T(new fu);return ge(n.k)<<24>>24}function _ae(n){if(n.p!=7)throw T(new fu);return ge(n.k)<<16>>16}function Kae(n){if(n.p!=7)throw T(new fu);return ge(n.f)<<16>>16}function Fh(n){var e;for(e=0;n.Ob();)n.Pb(),e=qi(e,1);return KC(e)}function OAn(n,e){var t;return t=new R0,n.xd(t),t.a+="..",e.yd(t),t.a}function Hae(n,e,t){var i;i=u(te(n.g,t),57),W(n.a.c,new Si(e,i))}function qae(n,e,t){return TD(Y(Vr(Sr(n.f,e))),Y(Vr(Sr(n.f,t))))}function yC(n,e,t){return vM(n,e,t,I(e,99)&&(u(e,18).Bb&Yi)!=0)}function Gae(n,e,t){return m4(n,e,t,I(e,99)&&(u(e,18).Bb&Yi)!=0)}function zae(n,e,t){return b9e(n,e,t,I(e,99)&&(u(e,18).Bb&Yi)!=0)}function pX(n,e){return n==(Qn(),ii)&&e==ii?4:n==ii||e==ii?8:32}function DAn(n,e){return B(e)===B(n)?"(this Map)":e==null?ru:Nr(e)}function Uae(n,e){return u(e==null?Vr(Sr(n.f,null)):n5(n.g,e),281)}function $An(n,e,t){var i;return i=i4(t),it(n.b,i,e),it(n.c,e,t),e}function FAn(n,e){var t;for(t=e;t;)U0(n,t.i,t.j),t=Pt(t);return n}function vX(n,e){var t;return t=C8(f3(new x$(n,e))),DE(new x$(n,e)),t}function sh(n,e){er();var t;return t=u(n,66).Mj(),M5e(t,e),t.Ok(e)}function Wae(n,e,t,i,r){var c;c=m9e(r,t,i),W(e,p6e(r,c)),o5e(n,r,e)}function xAn(n,e,t){n.i=0,n.e=0,e!=t&&(uDn(n,e,t),cDn(n,e,t))}function mX(n,e){var t;t=n.q.getHours(),n.q.setFullYear(e+Tl),S6(n,t)}function Xae(n,e,t){if(t){var i=t.ee();n.a[e]=i(t)}else delete n.a[e]}function g$(n,e,t){if(t){var i=t.ee();t=i(t)}else t=void 0;n.a[e]=t}function LAn(n){if(n<0)throw T(new K9n("Negative array size: "+n))}function bc(n){return n.n||(Ou(n),n.n=new wCn(n,ar,n),Ar(n)),n.n}function G5(n){return ne(n.a=0&&n.a[t]===e[t];t--);return t<0}function KAn(n,e){V3();var t;return t=n.j.g-e.j.g,t!=0?t:0}function HAn(n,e){return _n(e),n.a!=null?$fe(e.Kb(n.a)):UA}function jC(n){var e;return n?new iW(n):(e=new Sh,nF(e,n),e)}function ts(n,e){var t;return e.b.Kb(FPn(n,e.c.Ee(),(t=new Jvn(e),t)))}function EC(n){_J(),Dyn(this,ge(ui(cl(n,24),FM)),ge(ui(n,FM)))}function qAn(){qAn=N,Gzn=Fe(($T(),A(M(Jin,1),z,428,0,[yR,Qin])))}function GAn(){GAn=N,zzn=Fe((RC(),A(M(Zin,1),z,427,0,[Yin,jR])))}function zAn(){zAn=N,WUn=Fe((_C(),A(M(Arn,1),z,424,0,[$R,tS])))}function UAn(){UAn=N,BWn=Fe((B3(),A(M(NWn,1),z,511,0,[_k,UR])))}function WAn(){WAn=N,lXn=Fe((V8(),A(M(Wcn,1),z,419,0,[$S,Ucn])))}function XAn(){XAn=N,wXn=Fe((K8(),A(M(Qcn,1),z,479,0,[Vcn,xS])))}function VAn(){VAn=N,XQn=Fe((x8(),A(M(ron,1),z,376,0,[uK,iy])))}function QAn(){QAn=N,GQn=Fe((z8(),A(M(non,1),z,421,0,[iK,rK])))}function JAn(){JAn=N,sXn=Fe((OC(),A(M(Rcn,1),z,422,0,[Bcn,s_])))}function YAn(){YAn=N,jXn=Fe((kC(),A(M(fun,1),z,420,0,[j_,oun])))}function ZAn(){ZAn=N,RJn=Fe((No(),A(M(BJn,1),z,520,0,[tw,Bl])))}function nSn(){nSn=N,wJn=Fe((z5(),A(M(bJn,1),z,523,0,[Hm,Km])))}function eSn(){eSn=N,jJn=Fe((xf(),A(M(yJn,1),z,516,0,[M0,I1])))}function tSn(){tSn=N,CJn=Fe((tf(),A(M(EJn,1),z,515,0,[Ja,yf])))}function iSn(){iSn=N,UJn=Fe((Id(),A(M(zJn,1),z,455,0,[Rl,Lg])))}function rSn(){rSn=N,hYn=Fe((gC(),A(M(Son,1),z,425,0,[yK,Aon])))}function cSn(){cSn=N,wYn=Fe((iT(),A(M(Pon,1),z,495,0,[EP,mv])))}function uSn(){uSn=N,fYn=Fe((aC(),A(M(Mon,1),z,480,0,[kK,Ton])))}function sSn(){sSn=N,vYn=Fe(($C(),A(M(Oon,1),z,426,0,[Ion,TK])))}function oSn(){oSn=N,TZn=Fe((c7(),A(M(Ffn,1),z,429,0,[DP,$fn])))}function fSn(){fSn=N,sZn=Fe((L8(),A(M(afn,1),z,430,0,[FK,IP])))}function z5(){z5=N,Hm=new ZG("UPPER",0),Km=new ZG("LOWER",1)}function Yae(n,e){var t;t=new r2,la(t,"x",e.a),la(t,"y",e.b),j2(n,t)}function Zae(n,e){var t;t=new r2,la(t,"x",e.a),la(t,"y",e.b),j2(n,t)}function nde(n,e){var t,i;i=!1;do t=JOn(n,e),i=i|t;while(t);return i}function jX(n,e){var t,i;for(t=e,i=0;t>0;)i+=n.a[t],t-=t&-t;return i}function hSn(n,e){var t;for(t=e;t;)U0(n,-t.i,-t.j),t=Pt(t);return n}function $i(n,e){var t,i;for(_n(e),i=n.Kc();i.Ob();)t=i.Pb(),e.td(t)}function lSn(n,e){var t;return t=e.cd(),new bd(t,n.e.pc(t,u(e.dd(),14)))}function Kt(n,e,t,i){var r;r=new aI,r.c=e,r.b=t,r.a=i,i.b=t.a=r,++n.b}function Es(n,e,t){var i;return i=(Ln(e,n.c.length),n.c[e]),n.c[e]=t,i}function ede(n,e,t){return u(e==null?_c(n.f,null,t):Gd(n.g,e,t),281)}function k$(n){return n.c&&n.d?cX(n.c)+"->"+cX(n.d):"e_"+md(n)}function C3(n,e){return(Ta(n),Wv(new $n(n,new UX(e,n.a)))).sd(V4)}function tde(){return Qi(),A(M(Hrn,1),z,356,0,[Qf,$l,Hc,Cc,Or])}function ide(){return J(),A(M(Zi,1),hc,61,0,[Xr,Kn,Vn,ae,Gn])}function rde(n){return gj(),function(){return wae(n,this,arguments)}}function cde(){return Date.now?Date.now():new Date().getTime()}function Xi(n){return!n.c||!n.d?!1:!!n.c.i&&n.c.i==n.d.i}function aSn(n){if(!n.c.Sb())throw T(new ic);return n.a=!0,n.c.Ub()}function $8(n){n.i=0,z9(n.b,null),z9(n.c,null),n.a=null,n.e=null,++n.g}function EX(n){are.call(this,n==null?ru:Nr(n),I(n,78)?u(n,78):null)}function dSn(n){B_n(),Nmn(this),this.a=new Tt,QV(this,n),Ke(this.a,n)}function bSn(){RO(this),this.b=new fn(Ft,Ft),this.a=new fn(Qt,Qt)}function wSn(n,e){this.c=0,this.b=e,qkn.call(this,n,17493),this.a=this.c}function y$(n){CC(),!vf&&(this.c=n,this.e=!0,this.a=new X)}function CC(){CC=N,vf=!0,Fzn=!1,xzn=!1,Nzn=!1,Lzn=!1}function CX(n,e){return I(e,149)?Mn(n.c,u(e,149).c):!1}function TX(n,e){var t;return t=0,n&&(t+=n.f.a/2),e&&(t+=e.f.a/2),t}function j$(n,e){var t;return t=u(xd(n.d,e),23),t||u(xd(n.e,e),23)}function gSn(n){this.b=n,ie.call(this,n),this.a=u(Rn(this.b.a,4),126)}function pSn(n){this.b=n,w2.call(this,n),this.a=u(Rn(this.b.a,4),126)}function Ou(n){return n.t||(n.t=new Amn(n),s6(new _9n(n),0,n.t)),n.t}function ude(){return sr(),A(M(e9,1),z,103,0,[kh,Ao,Zs,Jh,Yh])}function sde(){return qw(),A(M(c9,1),z,249,0,[Hl,Cy,Hhn,r9,qhn])}function ode(){return Ho(),A(M($1,1),z,175,0,[Xn,vi,Zf,Ya,D1])}function fde(){return P7(),A(M(gfn,1),z,316,0,[dfn,xK,wfn,LK,bfn])}function hde(){return b6(),A(M(Usn,1),z,315,0,[zsn,nK,eK,Lm,Nm])}function lde(){return Pa(),A(M(zcn,1),z,335,0,[f_,Gcn,h_,Em,jm])}function ade(){return g4(),A(M(eZn,1),z,355,0,[Ng,Ep,Qm,Vm,Jm])}function dde(){return Vw(),A(M(YWn,1),z,363,0,[SS,IS,OS,PS,AS])}function bde(){return Ss(),A(M(jun,1),z,163,0,[Qk,Sm,xl,Pm,Ub])}function T3(){T3=N;var n,e;cI=(Qp(),e=new fj,e),uI=(n=new BI,n)}function vSn(n){var e;return n.c||(e=n.r,I(e,88)&&(n.c=u(e,26))),n.c}function wde(n){return n.e=3,n.d=n.Yb(),n.e!=2?(n.e=0,!0):!1}function E$(n){var e,t,i;return e=n&Nu,t=n>>22&Nu,i=n<0?Wh:0,Bc(e,t,i)}function gde(n){var e,t,i,r;for(t=n,i=0,r=t.length;i0?g$n(n,e):BNn(n,-e)}function MX(n,e){return e==0||n.e==0?n:e>0?BNn(n,e):g$n(n,-e)}function ve(n){if(Se(n))return n.c=n.a,n.a.Pb();throw T(new ic)}function kSn(n){var e,t;return e=n.c.i,t=n.d.i,e.k==(Qn(),Xt)&&t.k==Xt}function C$(n){var e;return e=new Pd,Pr(e,n),H(e,(nn(),Mr),null),e}function T$(n,e,t){var i;return i=n.Yg(e),i>=0?n._g(i,t,!0):Yd(n,e,t)}function AX(n,e,t,i){var r;for(r=0;re)throw T(new mr(fY(n,e,"index")));return n}function M$(n,e,t,i){var r;return r=F(be,Le,25,e,15,1),Pve(r,n,e,t,i),r}function vde(n,e){var t;t=n.q.getHours()+(e/60|0),n.q.setMinutes(e),S6(n,t)}function mde(n,e){return y.Math.min(al(e.a,n.d.d.c),al(e.b,n.d.d.c))}function O2(n,e){return ki(e)?e==null?MY(n.f,null):$On(n.g,e):MY(n.f,e)}function sf(n){this.c=n,this.a=new E(this.c.a),this.b=new E(this.c.b)}function TC(){this.e=new X,this.c=new X,this.d=new X,this.b=new X}function TSn(){this.g=new zq,this.b=new zq,this.a=new X,this.k=new X}function MSn(n,e,t){this.a=n,this.c=e,this.d=t,W(e.e,this),W(t.b,this)}function ASn(n,e){Hkn.call(this,e.rd(),e.qd()&-6),_n(n),this.a=n,this.b=e}function SSn(n,e){qkn.call(this,e.rd(),e.qd()&-6),_n(n),this.a=n,this.b=e}function FX(n,e){FO.call(this,e.rd(),e.qd()&-6),_n(n),this.a=n,this.b=e}function MC(n,e,t){this.a=n,this.b=e,this.c=t,W(n.t,this),W(e.i,this)}function AC(){this.b=new Tt,this.a=new Tt,this.b=new Tt,this.a=new Tt}function SC(){SC=N,Ym=new kt("org.eclipse.elk.labels.labelManager")}function PSn(){PSn=N,$cn=new ri("separateLayerConnections",(aT(),QR))}function No(){No=N,tw=new tz("REGULAR",0),Bl=new tz("CRITICAL",1)}function x8(){x8=N,uK=new YG("STACKED",0),iy=new YG("SEQUENCED",1)}function L8(){L8=N,FK=new oz("FIXED",0),IP=new oz("CENTER_NODE",1)}function kde(n,e){var t;return t=CEe(n,e),n.b=new tT(t.c.length),Lje(n,t)}function yde(n,e,t){var i;return++n.e,--n.f,i=u(n.d[e].$c(t),133),i.dd()}function ISn(n){var e;return n.a||(e=n.r,I(e,148)&&(n.a=u(e,148))),n.a}function xX(n){if(n.a){if(n.e)return xX(n.e)}else return n;return null}function jde(n,e){return n.pe.p?-1:0}function PC(n,e){return _n(e),n.c=0,"Initial capacity must not be negative")}function $Sn(){$Sn=N,Vzn=Fe((_o(),A(M(_b,1),z,232,0,[Zr,Fc,nc])))}function FSn(){FSn=N,Jzn=Fe((Tu(),A(M(Qzn,1),z,461,0,[Vf,Ol,Co])))}function xSn(){xSn=N,Zzn=Fe((Yc(),A(M(Yzn,1),z,462,0,[Wo,Dl,To])))}function LSn(){LSn=N,Bzn=Fe((lf(),A(M(Bu,1),z,132,0,[Win,ls,Rb])))}function NSn(){NSn=N,bWn=Fe((W5(),A(M(Krn,1),z,379,0,[NR,LR,BR])))}function BSn(){BSn=N,PWn=Fe((qd(),A(M(zrn,1),z,423,0,[yg,Grn,qR])))}function RSn(){RSn=N,oXn=Fe((F2(),A(M(Kcn,1),z,314,0,[ap,qk,_cn])))}function _Sn(){_Sn=N,fXn=Fe((VC(),A(M(qcn,1),z,337,0,[Hcn,DS,o_])))}function KSn(){KSn=N,dXn=Fe((ya(),A(M(aXn,1),z,450,0,[l_,cv,Tg])))}function HSn(){HSn=N,rXn=Fe((Kd(),A(M(YR,1),z,361,0,[g0,Fl,w0])))}function qSn(){qSn=N,yXn=Fe((Nh(),A(M(kXn,1),z,303,0,[zk,Ag,dp])))}function GSn(){GSn=N,mXn=Fe((q3(),A(M(y_,1),z,292,0,[m_,k_,Gk])))}function zSn(){zSn=N,RQn=Fe((i6(),A(M(Gsn,1),z,378,0,[J_,qsn,oP])))}function USn(){USn=N,WQn=Fe((oT(),A(M(ion,1),z,375,0,[eon,cK,ton])))}function WSn(){WSn=N,qQn=Fe((Rh(),A(M(Zsn,1),z,339,0,[Nl,Ysn,tK])))}function XSn(){XSn=N,UQn=Fe((ur(),A(M(zQn,1),z,452,0,[Bm,Su,xc])))}function VSn(){VSn=N,JQn=Fe((dT(),A(M(hon,1),z,377,0,[fK,pv,ew])))}function QSn(){QSn=N,VQn=Fe((Q3(),A(M(uon,1),z,336,0,[sK,con,Rm])))}function JSn(){JSn=N,QQn=Fe((uT(),A(M(fon,1),z,338,0,[oon,oK,son])))}function YSn(){YSn=N,hJn=Fe((_d(),A(M(fJn,1),z,454,0,[ry,_m,aP])))}function ZSn(){ZSn=N,pYn=Fe((CT(),A(M(gYn,1),z,442,0,[CK,jK,EK])))}function nPn(){nPn=N,mYn=Fe((f7(),A(M(Fon,1),z,380,0,[CP,Don,$on])))}function ePn(){ePn=N,LYn=Fe((ET(),A(M(Yon,1),z,381,0,[Jon,IK,Qon])))}function tPn(){tPn=N,xYn=Fe((sT(),A(M(Xon,1),z,293,0,[PK,Won,Uon])))}function iPn(){iPn=N,iZn=Fe((w7(),A(M(OK,1),z,437,0,[AP,SP,PP])))}function rPn(){rPn=N,une=Fe((_h(),A(M(Khn,1),z,334,0,[HP,F1,i9])))}function cPn(){cPn=N,tne=Fe((of(),A(M(Phn,1),z,272,0,[jv,cw,Ev])))}function Pde(){return Mi(),A(M(Ghn,1),z,98,0,[ql,Ef,Tv,td,Eh,Ac])}function wa(n,e){return!n.o&&(n.o=new Xu((Dc(),Ul),S0,n,0)),NF(n.o,e)}function Ide(n){return!n.g&&(n.g=new Qy),!n.g.d&&(n.g.d=new Cmn(n)),n.g.d}function Ode(n){return!n.g&&(n.g=new Qy),!n.g.a&&(n.g.a=new Tmn(n)),n.g.a}function Dde(n){return!n.g&&(n.g=new Qy),!n.g.b&&(n.g.b=new Emn(n)),n.g.b}function N8(n){return!n.g&&(n.g=new Qy),!n.g.c&&(n.g.c=new Mmn(n)),n.g.c}function $de(n,e,t){var i,r;for(r=new H3(e,n),i=0;it||e=0?n._g(t,!0,!0):Yd(n,e,!0)}function Qde(n,e){return ni(K(Y(k(n,(G(),k0)))),K(Y(k(e,k0))))}function aPn(){aPn=N,aYn=Xd(Xd(Dj(new li,(c4(),qm)),(k6(),pP)),aK)}function Jde(n,e,t){var i;return i=tDn(n,e,t),n.b=new tT(i.c.length),JY(n,i)}function Yde(n){if(n.b<=0)throw T(new ic);return--n.b,n.a-=n.c.c,Q(n.a)}function Zde(n){var e;if(!n.a)throw T(new gTn);return e=n.a,n.a=Pt(n.a),e}function n0e(n){for(;!n.a;)if(!nEn(n.c,new Xvn(n)))return!1;return!0}function $2(n){var e;return pe(n),I(n,198)?(e=u(n,198),e):new dvn(n)}function e0e(n){DC(),u(n.We((Xe(),rw)),174).Fc((Mu(),Ty)),n.Ye(eH,null)}function DC(){DC=N,SZn=new n2n,IZn=new e2n,PZn=Rwe((Xe(),eH),SZn,_l,IZn)}function $C(){$C=N,Ion=new sz("LEAF_NUMBER",0),TK=new sz("NODE_SIZE",1)}function t0e(n,e,t){n.a=e,n.c=t,n.b.a.$b(),_s(n.d),n.e.a.c=F(Zn,rn,1,0,5,1)}function $$(n){n.a=F(be,Le,25,n.b+1,15,1),n.c=F(be,Le,25,n.b,15,1),n.d=0}function i0e(n,e){n.a.ue(e.d,n.b)>0&&(W(n.c,new QU(e.c,e.d,n.d)),n.b=e.d)}function zX(n,e){if(n.g==null||e>=n.i)throw T(new xO(e,n.i));return n.g[e]}function dPn(n,e,t){if(W3(n,t),t!=null&&!n.wj(t))throw T(new xI);return t}function bPn(n){var e;if(n.Ek())for(e=n.i-1;e>=0;--e)D(n,e);return gX(n)}function r0e(n){var e,t;if(!n.b)return null;for(t=n.b;e=t.a[0];)t=e;return t}function c0e(n,e){var t,i;return LAn(e),t=(i=n.slice(0,e),WX(i,n)),t.length=e,t}function S3(n,e,t,i){var r;i=(Ow(),i||Lin),r=n.slice(e,t),hY(r,n,e,t,-e,i)}function Cs(n,e,t,i,r){return e<0?Yd(n,t,i):u(t,66).Nj().Pj(n,n.yh(),e,i,r)}function u0e(n){return I(n,172)?""+u(n,172).a:n==null?null:Nr(n)}function s0e(n){return I(n,172)?""+u(n,172).a:n==null?null:Nr(n)}function wPn(n,e){if(e.a)throw T(new _r(wKn));ci(n.a,e),e.a=n,!n.j&&(n.j=e)}function UX(n,e){FO.call(this,e.rd(),e.qd()&-16449),_n(n),this.a=n,this.c=e}function gPn(n,e){var t,i;return i=e/n.c.Hd().gc()|0,t=e%n.c.Hd().gc(),D2(n,i,t)}function Tu(){Tu=N,Vf=new oO(Y2,0),Ol=new oO(I4,1),Co=new oO(Z2,2)}function FC(){FC=N,vR=new Lj("All",0),qin=new lyn,Gin=new Eyn,zin=new ayn}function pPn(){pPn=N,Dzn=Fe((FC(),A(M(WA,1),z,297,0,[vR,qin,Gin,zin])))}function vPn(){vPn=N,EWn=Fe((G3(),A(M(jWn,1),z,405,0,[b0,Hb,Kb,kg])))}function mPn(){mPn=N,CUn=Fe((Hd(),A(M(EUn,1),z,406,0,[Ok,Ik,MR,AR])))}function kPn(){kPn=N,MUn=Fe((K2(),A(M(TUn,1),z,323,0,[$k,Dk,Fk,xk])))}function yPn(){yPn=N,PUn=Fe((d6(),A(M(SUn,1),z,394,0,[Lk,YA,ZA,Nk])))}function jPn(){jPn=N,WJn=Fe((c4(),A(M(won,1),z,393,0,[gP,qm,uy,Gm])))}function EPn(){EPn=N,HWn=Fe((aT(),A(M(KWn,1),z,360,0,[QR,TS,MS,Hk])))}function CPn(){CPn=N,FYn=Fe((qT(),A(M(zon,1),z,340,0,[SK,qon,Gon,Hon])))}function TPn(){TPn=N,JWn=Fe((hf(),A(M(QWn,1),z,411,0,[lp,nv,ev,JR])))}function MPn(){MPn=N,_Qn=Fe((wb(),A(M(Z_,1),z,197,0,[fP,Y_,xg,Fg])))}function APn(){APn=N,Ene=Fe((Vu(),A(M(jne,1),z,396,0,[gs,Yhn,Jhn,Zhn])))}function SPn(){SPn=N,one=Fe((us(),A(M(sne,1),z,285,0,[Ey,yh,Kl,jy])))}function PPn(){PPn=N,ine=Fe((Hh(),A(M(cH,1),z,218,0,[rH,yy,Cv,Sp])))}function IPn(){IPn=N,kne=Fe((AT(),A(M(Qhn,1),z,311,0,[oH,Whn,Vhn,Xhn])))}function OPn(){OPn=N,vne=Fe((Qu(),A(M(o9,1),z,374,0,[Ay,id,My,uw])))}function DPn(){DPn=N,mM(),F1n=Ft,Tee=Qt,x1n=new S9(Ft),Mee=new S9(Qt)}function K8(){K8=N,Vcn=new VG(Xh,0),xS=new VG("IMPROVE_STRAIGHTNESS",1)}function o0e(n,e){return h3(),W(n,new Si(e,Q(e.e.c.length+e.g.c.length)))}function f0e(n,e){return h3(),W(n,new Si(e,Q(e.e.c.length+e.g.c.length)))}function WX(n,e){return U8(e)!=10&&A($u(e),e.hm,e.__elementTypeId$,U8(e),n),n}function Jc(n,e){var t;return t=xr(n,e,0),t==-1?!1:(h1(n,t),!0)}function $Pn(n,e){var t;return t=u(O2(n.e,e),387),t?(ZU(t),t.e):null}function P3(n){var e;return Fr(n)&&(e=0-n,!isNaN(e))?e:bl(z3(n))}function xr(n,e,t){for(;t=0?BT(n,t,!0,!0):Yd(n,e,!0)}function YX(n,e){Qv();var t,i;return t=S2(n),i=S2(e),!!t&&!!i&&!V$n(t.k,i.k)}function a0e(n,e){nu(n,e==null||jE((_n(e),e))||isNaN((_n(e),e))?0:(_n(e),e))}function d0e(n,e){eu(n,e==null||jE((_n(e),e))||isNaN((_n(e),e))?0:(_n(e),e))}function b0e(n,e){Rd(n,e==null||jE((_n(e),e))||isNaN((_n(e),e))?0:(_n(e),e))}function w0e(n,e){Bd(n,e==null||jE((_n(e),e))||isNaN((_n(e),e))?0:(_n(e),e))}function BPn(n){(this.q?this.q:(Pn(),Pn(),vh)).Ac(n.q?n.q:(Pn(),Pn(),vh))}function g0e(n,e){return I(e,99)&&u(e,18).Bb&Yi?new LO(e,n):new H3(e,n)}function p0e(n,e){return I(e,99)&&u(e,18).Bb&Yi?new LO(e,n):new H3(e,n)}function RPn(n,e){vrn=new Wy,AUn=e,gm=n,u(gm.b,65),BX(gm,vrn,null),DRn(gm)}function B$(n,e,t){var i;return i=n.g[e],k5(n,e,n.oi(e,t)),n.gi(e,t,i),n.ci(),i}function BC(n,e){var t;return t=n.Xc(e),t>=0?(n.$c(t),!0):!1}function R$(n){var e;return n.d!=n.r&&(e=qs(n),n.e=!!e&&e.Cj()==kGn,n.d=e),n.e}function _$(n,e){var t;for(pe(n),pe(e),t=!1;e.Ob();)t=t|n.Fc(e.Pb());return t}function xd(n,e){var t;return t=u(te(n.e,e),387),t?(Oyn(n,t),t.e):null}function _Pn(n){var e,t;return e=n/60|0,t=n%60,t==0?""+e:""+e+":"+(""+t)}function qr(n,e){var t,i;return Ta(n),i=new FX(e,n.a),t=new iEn(i),new $n(n,t)}function ub(n,e){var t=n.a[e],i=(cF(),dR)[typeof t];return i?i(t):tQ(typeof t)}function v0e(n){switch(n.g){case 0:return nt;case 1:return-1;default:return 0}}function m0e(n){return mJ(n,(I3(),pin))<0?-xce(z3(n)):n.l+n.m*J2+n.h*$a}function U8(n){return n.__elementTypeCategory$==null?10:n.__elementTypeCategory$}function K$(n){var e;return e=n.b.c.length==0?null:un(n.b,0),e!=null&&J$(n,0),e}function KPn(n,e){for(;e[0]0&&arguments[0]!==void 0?arguments[0]:{},Ki=Ge.defaultLayoutOptions,Ii=Ki===void 0?{}:Ki,An=Ge.algorithms,Uc=An===void 0?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:An,Nc=Ge.workerFactory,ju=Ge.workerUrl;if(y(this,Bt),this.defaultLayoutOptions=Ii,this.initialized=!1,typeof ju>"u"&&typeof Nc>"u")throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var vr=Nc;typeof ju<"u"&&typeof Nc>"u"&&(vr=function(q1){return new Worker(q1)});var Jo=vr(ju);if(typeof Jo.postMessage!="function")throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new Lc(Jo),this.worker.postMessage({cmd:"register",algorithms:Uc}).then(function(H1){return qt.initialized=!0}).catch(console.err)}return Et(Bt,[{key:"layout",value:function(Ge){var Ki=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Ii=Ki.layoutOptions,An=Ii===void 0?this.defaultLayoutOptions:Ii,Uc=Ki.logging,Nc=Uc===void 0?!1:Uc,ju=Ki.measureExecutionTime,vr=ju===void 0?!1:ju;return Ge?this.worker.postMessage({cmd:"layout",graph:Ge,layoutOptions:An,options:{logging:Nc,measureExecutionTime:vr}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker.terminate()}}]),Bt}();Vt.default=Ht;var Lc=function(){function Bt(qt){var Ge=this;if(y(this,Bt),qt===void 0)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=qt,this.worker.onmessage=function(Ki){setTimeout(function(){Ge.receive(Ge,Ki)},0)}}return Et(Bt,[{key:"postMessage",value:function(Ge){var Ki=this.id||0;this.id=Ki+1,Ge.id=Ki;var Ii=this;return new Promise(function(An,Uc){Ii.resolvers[Ki]=function(Nc,ju){Nc?(Ii.convertGwtStyleError(Nc),Uc(Nc)):An(ju)},Ii.worker.postMessage(Ge)})}},{key:"receive",value:function(Ge,Ki){var Ii=Ki.data,An=Ge.resolvers[Ii.id];An&&(delete Ge.resolvers[Ii.id],Ii.error?An(Ii.error):An(null,Ii.data))}},{key:"terminate",value:function(){this.worker.terminate&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(Ge){if(Ge){var Ki=Ge.__java$exception;Ki&&(Ki.cause&&Ki.cause.backingJsObject&&(Ge.cause=Ki.cause.backingJsObject,this.convertGwtStyleError(Ge.cause)),delete Ge.__java$exception)}}}]),Bt}()},{}],2:[function(ft,dt,Vt){(function(Et){(function(){var y;typeof window<"u"?y=window:typeof Et<"u"?y=Et:typeof self<"u"&&(y=self);var Ht;function Lc(){}function Bt(){}function qt(){}function Ge(){}function Ki(){}function Ii(){}function An(){}function Uc(){}function Nc(){}function ju(){}function vr(){}function Jo(){}function H1(){}function q1(){}function ww(){}function Np(){}function G1(){}function Th(){}function Q1n(){}function J1n(){}function zy(){}function Y1n(){}function Z1n(){}function nln(){}function eln(){}function Xg(){}function N(){}function tln(){}function aI(){}function iln(){}function rln(){}function cln(){}function uln(){}function DH(){}function sln(){}function oln(){}function fln(){}function z1(){}function U1(){}function dI(){}function hln(){}function lln(){}function aln(){}function $H(){}function dln(){}function bln(){}function Vg(){}function Qg(){}function wln(){}function gln(){}function pln(){}function vln(){}function FH(){}function W1(){}function Jg(){}function Yg(){}function mln(){}function Vee(){}function bI(){}function kln(){}function yln(){}function jln(){}function Eln(){}function Cln(){}function Tln(){}function Mln(){}function Aln(){}function Sln(){}function Pln(){}function Iln(){}function Oln(){}function Dln(){}function $ln(){}function Fln(){}function xln(){}function Lln(){}function Nln(){}function Bln(){}function Rln(){}function _ln(){}function Kln(){}function Hln(){}function qln(){}function Gln(){}function zln(){}function Uln(){}function Wln(){}function Xln(){}function Vln(){}function Qln(){}function Jln(){}function Yln(){}function xH(){}function Zln(){}function nan(){}function ean(){}function tan(){}function wI(){}function gI(){}function Uy(){}function ian(){}function ran(){}function pI(){}function can(){}function uan(){}function san(){}function Wy(){}function oan(){}function fan(){}function han(){}function lan(){}function aan(){}function dan(){}function ban(){}function wan(){}function gan(){}function LH(){}function pan(){}function van(){}function man(){}function kan(){}function yan(){}function NH(){}function jan(){}function Ean(){}function Can(){}function Tan(){}function Man(){}function Aan(){}function San(){}function Pan(){}function Ian(){}function Oan(){}function Dan(){}function $an(){}function Fan(){}function xan(){}function vI(){}function Lan(){}function Nan(){}function Ban(){}function Ran(){}function _an(){}function BH(){}function Kan(){}function Han(){}function qan(){}function Gan(){}function zan(){}function Uan(){}function Wan(){}function Xan(){}function Van(){}function Qan(){}function Jan(){}function Yan(){}function Zan(){}function ndn(){}function edn(){}function tdn(){}function idn(){}function rdn(){}function cdn(){}function udn(){}function sdn(){}function odn(){}function fdn(){}function hdn(){}function ldn(){}function adn(){}function ddn(){}function bdn(){}function wdn(){}function gdn(){}function pdn(){}function vdn(){}function mdn(){}function kdn(){}function ydn(){}function jdn(){}function Edn(){}function Cdn(){}function Tdn(){}function Mdn(){}function Adn(){}function Sdn(){}function Pdn(){}function Idn(){}function Odn(){}function Ddn(){}function $dn(){}function Fdn(){}function xdn(){}function Ldn(){}function Ndn(){}function Bdn(){}function Rdn(){}function _dn(){}function Kdn(){}function Hdn(){}function qdn(){}function Gdn(){}function zdn(){}function Udn(){}function Wdn(){}function Xdn(){}function Vdn(){}function Qdn(){}function Jdn(){}function Ydn(){}function Zdn(){}function n0n(){}function e0n(){}function t0n(){}function i0n(){}function r0n(){}function c0n(){}function u0n(){}function s0n(){}function o0n(){}function f0n(){}function h0n(){}function l0n(){}function a0n(){}function d0n(){}function b0n(){}function w0n(){}function g0n(){}function p0n(){}function v0n(){}function m0n(){}function k0n(){}function y0n(){}function j0n(){}function E0n(){}function C0n(){}function T0n(){}function M0n(){}function A0n(){}function S0n(){}function P0n(){}function I0n(){}function O0n(){}function D0n(){}function RH(){}function $0n(){}function F0n(){}function x0n(){}function L0n(){}function N0n(){}function B0n(){}function R0n(){}function _0n(){}function K0n(){}function H0n(){}function q0n(){}function G0n(){}function z0n(){}function U0n(){}function W0n(){}function X0n(){}function V0n(){}function Q0n(){}function J0n(){}function Y0n(){}function Z0n(){}function nbn(){}function ebn(){}function tbn(){}function ibn(){}function rbn(){}function cbn(){}function ubn(){}function sbn(){}function obn(){}function fbn(){}function hbn(){}function lbn(){}function abn(){}function dbn(){}function bbn(){}function wbn(){}function gbn(){}function pbn(){}function vbn(){}function mbn(){}function kbn(){}function ybn(){}function jbn(){}function Ebn(){}function Cbn(){}function Tbn(){}function Mbn(){}function Abn(){}function Sbn(){}function Pbn(){}function Ibn(){}function Obn(){}function Dbn(){}function $bn(){}function Fbn(){}function xbn(){}function Lbn(){}function Nbn(){}function Bbn(){}function Rbn(){}function _bn(){}function Kbn(){}function Hbn(){}function qbn(){}function Gbn(){}function zbn(){}function _H(){}function Ubn(){}function Wbn(){}function Xbn(){}function Vbn(){}function Qbn(){}function Jbn(){}function Ybn(){}function Zbn(){}function nwn(){}function ewn(){}function twn(){}function iwn(){}function rwn(){}function cwn(){}function uwn(){}function swn(){}function own(){}function fwn(){}function hwn(){}function lwn(){}function KH(){}function awn(){}function dwn(){}function bwn(){}function wwn(){}function gwn(){}function pwn(){}function HH(){}function qH(){}function vwn(){}function GH(){}function zH(){}function mwn(){}function kwn(){}function ywn(){}function jwn(){}function Ewn(){}function Cwn(){}function Twn(){}function Mwn(){}function Awn(){}function UH(){}function Swn(){}function Pwn(){}function Iwn(){}function Own(){}function Dwn(){}function $wn(){}function Fwn(){}function xwn(){}function Lwn(){}function Nwn(){}function Bwn(){}function Rwn(){}function _wn(){}function Kwn(){}function Hwn(){}function qwn(){}function Gwn(){}function zwn(){}function Uwn(){}function Wwn(){}function Xwn(){}function Vwn(){}function Qwn(){}function Jwn(){}function Ywn(){}function Zwn(){}function ngn(){}function egn(){}function tgn(){}function ign(){}function rgn(){}function cgn(){}function ugn(){}function sgn(){}function ogn(){}function fgn(){}function hgn(){}function lgn(){}function agn(){}function dgn(){}function bgn(){}function wgn(){}function ggn(){}function pgn(){}function vgn(){}function mgn(){}function kgn(){}function ygn(){}function jgn(){}function Egn(){}function Cgn(){}function Tgn(){}function Mgn(){}function Agn(){}function Sgn(){}function Pgn(){}function Ign(){}function Ogn(){}function Dgn(){}function $gn(){}function Fgn(){}function xgn(){}function Lgn(){}function Ngn(){}function Bgn(){}function Rgn(){}function _gn(){}function Kgn(){}function mI(){}function kI(){}function yI(){}function Hgn(){}function qgn(){}function Ggn(){}function zgn(){}function Ugn(){}function WH(){}function Wgn(){}function Xgn(){}function Qee(){}function Vgn(){}function Qgn(){}function Jgn(){}function Ygn(){}function Zgn(){}function n2n(){}function e2n(){}function Zl(){}function t2n(){}function Zg(){}function XH(){}function i2n(){}function r2n(){}function c2n(){}function u2n(){}function s2n(){}function o2n(){}function f2n(){}function h2n(){}function l2n(){}function a2n(){}function d2n(){}function b2n(){}function w2n(){}function g2n(){}function p2n(){}function v2n(){}function m2n(){}function k2n(){}function y2n(){}function j2n(){}function E2n(){}function dn(){}function C2n(){}function T2n(){}function M2n(){}function A2n(){}function S2n(){}function P2n(){}function I2n(){}function O2n(){}function D2n(){}function $2n(){}function jI(){}function F2n(){}function x2n(){}function L2n(){}function N2n(){}function B2n(){}function VH(){}function Xy(){}function Vy(){}function R2n(){}function QH(){}function Qy(){}function _2n(){}function K2n(){}function H2n(){}function q2n(){}function G2n(){}function z2n(){}function Jy(){}function U2n(){}function W2n(){}function X2n(){}function Yy(){}function V2n(){}function JH(){}function Q2n(){}function EI(){}function YH(){}function J2n(){}function Y2n(){}function Z2n(){}function npn(){}function Jee(){}function epn(){}function tpn(){}function ipn(){}function rpn(){}function cpn(){}function upn(){}function spn(){}function opn(){}function fpn(){}function hpn(){}function Bp(){}function CI(){}function lpn(){}function apn(){}function dpn(){}function bpn(){}function wpn(){}function gpn(){}function ppn(){}function vpn(){}function mpn(){}function kpn(){}function ypn(){}function jpn(){}function Epn(){}function Cpn(){}function Tpn(){}function Mpn(){}function Apn(){}function Spn(){}function Ppn(){}function Ipn(){}function Opn(){}function Dpn(){}function $pn(){}function Fpn(){}function xpn(){}function Lpn(){}function Npn(){}function Bpn(){}function Rpn(){}function _pn(){}function Kpn(){}function Hpn(){}function qpn(){}function Gpn(){}function zpn(){}function Upn(){}function Wpn(){}function Xpn(){}function Vpn(){}function Qpn(){}function Jpn(){}function Ypn(){}function Zpn(){}function n3n(){}function e3n(){}function t3n(){}function i3n(){}function r3n(){}function c3n(){}function u3n(){}function s3n(){}function o3n(){}function f3n(){}function h3n(){}function l3n(){}function a3n(){}function d3n(){}function b3n(){}function w3n(){}function g3n(){}function p3n(){}function v3n(){}function m3n(){}function k3n(){}function y3n(){}function j3n(){}function E3n(){}function C3n(){}function T3n(){}function M3n(){}function A3n(){}function S3n(){}function P3n(){}function I3n(){}function O3n(){}function D3n(){}function $3n(){}function F3n(){}function x3n(){}function L3n(){}function N3n(){}function B3n(){}function R3n(){}function _3n(){}function K3n(){}function H3n(){}function q3n(){}function G3n(){}function z3n(){}function U3n(){}function W3n(){}function X3n(){}function V3n(){}function Q3n(){}function J3n(){}function Y3n(){}function Z3n(){}function n4n(){}function e4n(){}function t4n(){}function i4n(){}function ZH(){}function r4n(){}function c4n(){}function TI(){Rv()}function u4n(){pF()}function s4n(){a6()}function o4n(){WT()}function f4n(){YJ()}function h4n(){Go()}function l4n(){fJ()}function a4n(){C7()}function d4n(){q9()}function b4n(){H9()}function w4n(){w8()}function g4n(){v7n()}function p4n(){x2()}function v4n(){Sj()}function m4n(){PSn()}function k4n(){HIn()}function y4n(){sPn()}function j4n(){CMn()}function E4n(){V3()}function C4n(){yl()}function T4n(){qIn()}function M4n(){pAn()}function A4n(){zZ()}function S4n(){IFn()}function P4n(){TMn()}function I4n(){nn()}function O4n(){EMn()}function D4n(){GIn()}function $4n(){WOn()}function F4n(){AMn()}function x4n(){aPn()}function L4n(){m7n()}function N4n(){$Y()}function B4n(){gb()}function R4n(){pOn()}function _4n(){S7()}function K4n(){Ux()}function H4n(){ZF()}function q4n(){Zd()}function G4n(){PV()}function z4n(){MMn()}function U4n(){BBn()}function W4n(){IY()}function X4n(){Bx()}function V4n(){DC()}function Q4n(){nM()}function nq(){Xe()}function J4n(){wT()}function Y4n(){NQ()}function eq(){mM()}function Fo(){dEn()}function tq(){eF()}function Z4n(){pZ()}function iq(n){_n(n)}function nvn(n){this.a=n}function Zy(n){this.a=n}function evn(n){this.a=n}function tvn(n){this.a=n}function ivn(n){this.a=n}function rvn(n){this.a=n}function cvn(n){this.a=n}function uvn(n){this.a=n}function rq(n){this.a=n}function cq(n){this.a=n}function svn(n){this.a=n}function MI(n){this.a=n}function ovn(n){this.a=n}function AI(n){this.a=n}function fvn(n){this.a=n}function SI(n){this.a=n}function hvn(n){this.a=n}function PI(n){this.a=n}function lvn(n){this.a=n}function avn(n){this.a=n}function dvn(n){this.a=n}function uq(n){this.b=n}function bvn(n){this.c=n}function wvn(n){this.a=n}function gvn(n){this.a=n}function pvn(n){this.a=n}function vvn(n){this.a=n}function mvn(n){this.a=n}function kvn(n){this.a=n}function yvn(n){this.a=n}function jvn(n){this.a=n}function Evn(n){this.a=n}function Cvn(n){this.a=n}function Tvn(n){this.a=n}function Mvn(n){this.a=n}function Avn(n){this.a=n}function sq(n){this.a=n}function oq(n){this.a=n}function nj(n){this.a=n}function M9(n){this.a=n}function na(){this.a=[]}function Svn(n,e){n.a=e}function Yee(n,e){n.a=e}function Zee(n,e){n.b=e}function nte(n,e){n.b=e}function ete(n,e){n.b=e}function fq(n,e){n.j=e}function tte(n,e){n.g=e}function ite(n,e){n.i=e}function rte(n,e){n.c=e}function cte(n,e){n.d=e}function ute(n,e){n.d=e}function ste(n,e){n.c=e}function ea(n,e){n.k=e}function ote(n,e){n.c=e}function hq(n,e){n.c=e}function lq(n,e){n.a=e}function fte(n,e){n.a=e}function hte(n,e){n.f=e}function lte(n,e){n.a=e}function ate(n,e){n.b=e}function II(n,e){n.d=e}function ej(n,e){n.i=e}function aq(n,e){n.o=e}function dte(n,e){n.r=e}function bte(n,e){n.a=e}function wte(n,e){n.b=e}function Pvn(n,e){n.e=e}function gte(n,e){n.f=e}function dq(n,e){n.g=e}function pte(n,e){n.e=e}function vte(n,e){n.f=e}function mte(n,e){n.f=e}function kte(n,e){n.n=e}function yte(n,e){n.a=e}function jte(n,e){n.a=e}function Ete(n,e){n.c=e}function Cte(n,e){n.c=e}function Tte(n,e){n.d=e}function Mte(n,e){n.e=e}function Ate(n,e){n.g=e}function Ste(n,e){n.a=e}function Pte(n,e){n.c=e}function Ite(n,e){n.d=e}function Ote(n,e){n.e=e}function Dte(n,e){n.f=e}function $te(n,e){n.j=e}function Fte(n,e){n.a=e}function xte(n,e){n.b=e}function Lte(n,e){n.a=e}function Ivn(n){n.b=n.a}function Ovn(n){n.c=n.d.d}function $v(n){this.d=n}function ta(n){this.a=n}function Rp(n){this.a=n}function bq(n){this.a=n}function Mh(n){this.a=n}function A9(n){this.a=n}function Dvn(n){this.a=n}function wq(n){this.a=n}function S9(n){this.a=n}function gq(n){this.a=n}function pq(n){this.a=n}function vq(n){this.a=n}function L0(n){this.a=n}function P9(n){this.a=n}function I9(n){this.a=n}function mq(n){this.b=n}function _p(n){this.b=n}function Kp(n){this.b=n}function OI(n){this.a=n}function $vn(n){this.a=n}function kq(n){this.a=n}function DI(n){this.c=n}function E(n){this.c=n}function Fvn(n){this.c=n}function yq(n){this.a=n}function jq(n){this.a=n}function Eq(n){this.a=n}function Cq(n){this.a=n}function ut(n){this.a=n}function xvn(n){this.a=n}function Tq(n){this.a=n}function Mq(n){this.a=n}function Lvn(n){this.a=n}function Nvn(n){this.a=n}function Fv(n){this.a=n}function Bvn(n){this.a=n}function Rvn(n){this.a=n}function _vn(n){this.a=n}function Kvn(n){this.a=n}function Hvn(n){this.a=n}function qvn(n){this.a=n}function Gvn(n){this.a=n}function zvn(n){this.a=n}function Uvn(n){this.a=n}function Wvn(n){this.a=n}function Xvn(n){this.a=n}function Vvn(n){this.a=n}function Qvn(n){this.a=n}function Jvn(n){this.a=n}function Yvn(n){this.a=n}function Zvn(n){this.a=n}function n5n(n){this.a=n}function O9(n){this.a=n}function e5n(n){this.a=n}function t5n(n){this.a=n}function tj(n){this.a=n}function i5n(n){this.a=n}function r5n(n){this.a=n}function Hp(n){this.a=n}function Aq(n){this.a=n}function c5n(n){this.a=n}function u5n(n){this.a=n}function s5n(n){this.a=n}function o5n(n){this.a=n}function f5n(n){this.a=n}function Sq(n){this.a=n}function Pq(n){this.a=n}function Iq(n){this.a=n}function ij(n){this.a=n}function rj(n){this.e=n}function qp(n){this.a=n}function h5n(n){this.a=n}function n2(n){this.a=n}function Oq(n){this.a=n}function l5n(n){this.a=n}function a5n(n){this.a=n}function d5n(n){this.a=n}function b5n(n){this.a=n}function w5n(n){this.a=n}function g5n(n){this.a=n}function p5n(n){this.a=n}function v5n(n){this.a=n}function m5n(n){this.a=n}function k5n(n){this.a=n}function y5n(n){this.a=n}function Dq(n){this.a=n}function j5n(n){this.a=n}function E5n(n){this.a=n}function C5n(n){this.a=n}function T5n(n){this.a=n}function M5n(n){this.a=n}function A5n(n){this.a=n}function S5n(n){this.a=n}function P5n(n){this.a=n}function I5n(n){this.a=n}function O5n(n){this.a=n}function D5n(n){this.a=n}function $5n(n){this.a=n}function F5n(n){this.a=n}function x5n(n){this.a=n}function L5n(n){this.a=n}function N5n(n){this.a=n}function B5n(n){this.a=n}function R5n(n){this.a=n}function _5n(n){this.a=n}function K5n(n){this.a=n}function H5n(n){this.a=n}function q5n(n){this.a=n}function G5n(n){this.a=n}function z5n(n){this.a=n}function U5n(n){this.a=n}function W5n(n){this.a=n}function X5n(n){this.a=n}function V5n(n){this.a=n}function Q5n(n){this.a=n}function J5n(n){this.a=n}function Y5n(n){this.a=n}function Z5n(n){this.a=n}function n6n(n){this.a=n}function e6n(n){this.a=n}function t6n(n){this.a=n}function i6n(n){this.a=n}function r6n(n){this.a=n}function c6n(n){this.c=n}function u6n(n){this.b=n}function s6n(n){this.a=n}function o6n(n){this.a=n}function f6n(n){this.a=n}function h6n(n){this.a=n}function l6n(n){this.a=n}function a6n(n){this.a=n}function d6n(n){this.a=n}function b6n(n){this.a=n}function w6n(n){this.a=n}function g6n(n){this.a=n}function p6n(n){this.a=n}function v6n(n){this.a=n}function m6n(n){this.a=n}function k6n(n){this.a=n}function y6n(n){this.a=n}function j6n(n){this.a=n}function E6n(n){this.a=n}function C6n(n){this.a=n}function T6n(n){this.a=n}function M6n(n){this.a=n}function A6n(n){this.a=n}function S6n(n){this.a=n}function P6n(n){this.a=n}function I6n(n){this.a=n}function X1(n){this.a=n}function e2(n){this.a=n}function O6n(n){this.a=n}function D6n(n){this.a=n}function $6n(n){this.a=n}function F6n(n){this.a=n}function x6n(n){this.a=n}function L6n(n){this.a=n}function N6n(n){this.a=n}function B6n(n){this.a=n}function R6n(n){this.a=n}function _6n(n){this.a=n}function K6n(n){this.a=n}function H6n(n){this.a=n}function q6n(n){this.a=n}function G6n(n){this.a=n}function z6n(n){this.a=n}function U6n(n){this.a=n}function cj(n){this.a=n}function W6n(n){this.a=n}function X6n(n){this.a=n}function V6n(n){this.a=n}function Q6n(n){this.a=n}function J6n(n){this.a=n}function Y6n(n){this.a=n}function Z6n(n){this.a=n}function nmn(n){this.a=n}function emn(n){this.a=n}function tmn(n){this.a=n}function imn(n){this.a=n}function rmn(n){this.a=n}function cmn(n){this.a=n}function umn(n){this.a=n}function smn(n){this.a=n}function omn(n){this.a=n}function fmn(n){this.a=n}function hmn(n){this.a=n}function lmn(n){this.a=n}function amn(n){this.a=n}function dmn(n){this.a=n}function bmn(n){this.a=n}function wmn(n){this.a=n}function gmn(n){this.a=n}function pmn(n){this.a=n}function vmn(n){this.a=n}function mmn(n){this.a=n}function kmn(n){this.a=n}function $q(n){this.a=n}function kt(n){this.b=n}function ymn(n){this.f=n}function Fq(n){this.a=n}function jmn(n){this.a=n}function Emn(n){this.a=n}function Cmn(n){this.a=n}function Tmn(n){this.a=n}function Mmn(n){this.a=n}function Amn(n){this.a=n}function Smn(n){this.a=n}function Pmn(n){this.a=n}function D9(n){this.a=n}function Imn(n){this.a=n}function Omn(n){this.b=n}function xq(n){this.c=n}function uj(n){this.e=n}function Dmn(n){this.a=n}function sj(n){this.a=n}function oj(n){this.a=n}function $I(n){this.a=n}function $mn(n){this.a=n}function Fmn(n){this.d=n}function Lq(n){this.a=n}function Nq(n){this.a=n}function cd(n){this.e=n}function Nte(){this.a=0}function gw(){dyn(this)}function X(){RO(this)}function we(){Cu(this)}function FI(){pTn(this)}function xmn(){}function ud(){this.c=p1n}function Bte(n,e){e.Wb(n)}function Lmn(n,e){n.b+=e}function Nmn(n){n.b=new JI}function T(n){return n.e}function Rte(n){return n.a}function _te(n){return n.a}function Kte(n){return n.a}function Hte(n){return n.a}function qte(n){return n.a}function Gte(){return null}function zte(){return null}function Ute(){EG(),iTe()}function Wte(n){n.b.tf(n.e)}function xv(n,e){n.b=e-n.b}function Lv(n,e){n.a=e-n.a}function Bmn(n,e){e.ad(n.a)}function Xte(n,e){si(e,n)}function Vte(n,e,t){n.Od(t,e)}function $9(n,e){n.e=e,e.b=n}function Bq(n){$f(),this.a=n}function Rmn(n){$f(),this.a=n}function _mn(n){$f(),this.a=n}function Rq(n){nb(),this.a=n}function Kmn(n){k3(),aR.be(n)}function ia(){Qyn.call(this)}function _q(){Qyn.call(this)}function Kq(){ia.call(this)}function xI(){ia.call(this)}function Hmn(){ia.call(this)}function F9(){ia.call(this)}function fu(){ia.call(this)}function Nv(){ia.call(this)}function ye(){ia.call(this)}function vs(){ia.call(this)}function qmn(){ia.call(this)}function ic(){ia.call(this)}function Gmn(){ia.call(this)}function zmn(){this.a=this}function fj(){this.Bb|=256}function Umn(){this.b=new Xkn}function Hq(){Hq=N,new we}function qq(){Kq.call(this)}function Wmn(n,e){n.length=e}function hj(n,e){W(n.a,e)}function Qte(n,e){nY(n.c,e)}function Jte(n,e){ci(n.b,e)}function Yte(n,e){KT(n.a,e)}function Zte(n,e){MF(n.a,e)}function Gp(n,e){et(n.e,e)}function t2(n){iM(n.c,n.b)}function nie(n,e){n.kc().Nb(e)}function Gq(n){this.a=Yge(n)}function hi(){this.a=new we}function Xmn(){this.a=new we}function lj(){this.a=new X}function LI(){this.a=new X}function zq(){this.a=new X}function Ns(){this.a=new Oln}function ra(){this.a=new TSn}function Uq(){this.a=new LH}function Wq(){this.a=new h7n}function Vmn(){this.a=new YMn}function Xq(){this.a=new bMn}function Vq(){this.a=new Bjn}function Qmn(){this.a=new X}function Qq(){this.a=new X}function Jmn(){this.a=new X}function Ymn(){this.a=new X}function Zmn(){this.d=new X}function n9n(){this.a=new hi}function e9n(){this.a=new we}function t9n(){this.b=new we}function i9n(){this.b=new X}function Jq(){this.e=new X}function r9n(){this.d=new X}function c9n(){this.a=new C4n}function u9n(){X.call(this)}function Yq(){lj.call(this)}function s9n(){kE.call(this)}function o9n(){Qq.call(this)}function NI(){Bv.call(this)}function Bv(){xmn.call(this)}function i2(){xmn.call(this)}function Zq(){i2.call(this)}function f9n(){zTn.call(this)}function h9n(){zTn.call(this)}function l9n(){uG.call(this)}function a9n(){uG.call(this)}function d9n(){uG.call(this)}function b9n(){sG.call(this)}function hu(){Tt.call(this)}function nG(){B2n.call(this)}function eG(){B2n.call(this)}function w9n(){O9n.call(this)}function g9n(){O9n.call(this)}function p9n(){we.call(this)}function v9n(){we.call(this)}function m9n(){we.call(this)}function k9n(){hi.call(this)}function BI(){RIn.call(this)}function y9n(){fj.call(this)}function RI(){Oz.call(this)}function _I(){Oz.call(this)}function tG(){we.call(this)}function KI(){we.call(this)}function j9n(){we.call(this)}function iG(){Yy.call(this)}function E9n(){Yy.call(this)}function C9n(){iG.call(this)}function T9n(){ZH.call(this)}function M9n(n){hIn.call(this,n)}function A9n(n){hIn.call(this,n)}function rG(n){rq.call(this,n)}function cG(n){n7n.call(this,n)}function eie(n){cG.call(this,n)}function tie(n){n7n.call(this,n)}function zp(){this.a=new Tt}function uG(){this.a=new hi}function sG(){this.a=new we}function S9n(){this.a=new X}function P9n(){this.j=new X}function oG(){this.a=new Rgn}function I9n(){this.a=new T8n}function O9n(){this.a=new X2n}function HI(){HI=N,uR=new V9n}function qI(){qI=N,cR=new X9n}function Rv(){Rv=N,rR=new Bt}function aj(){aj=N,fR=new Xyn}function iie(n){cG.call(this,n)}function rie(n){cG.call(this,n)}function D9n(n){m$.call(this,n)}function $9n(n){m$.call(this,n)}function F9n(n){uEn.call(this,n)}function GI(n){C5e.call(this,n)}function sd(n){_0.call(this,n)}function _v(n){Cj.call(this,n)}function fG(n){Cj.call(this,n)}function x9n(n){Cj.call(this,n)}function _r(n){kCn.call(this,n)}function L9n(n){_r.call(this,n)}function r2(){M9.call(this,{})}function dj(n){c3(),this.a=n}function Kv(n){n.b=null,n.c=0}function cie(n,e){n.e=e,NNn(n,e)}function uie(n,e){n.a=e,h6e(n)}function zI(n,e,t){n.a[e.g]=t}function sie(n,e,t){M4e(t,n,e)}function oie(n,e){$ue(e.i,n.n)}function N9n(n,e){Fwe(n).td(e)}function fie(n,e){return n*n/e}function B9n(n,e){return n.g-e.g}function hie(n){return new nj(n)}function lie(n){return new Z0(n)}function bj(n){_r.call(this,n)}function mr(n){_r.call(this,n)}function R9n(n){_r.call(this,n)}function UI(n){kCn.call(this,n)}function WI(n){AV(),this.a=n}function _9n(n){aEn(),this.a=n}function N0(n){ED(),this.f=n}function XI(n){ED(),this.f=n}function Up(n){_r.call(this,n)}function Hn(n){_r.call(this,n)}function $r(n){_r.call(this,n)}function K9n(n){_r.call(this,n)}function c2(n){_r.call(this,n)}function on(n){return _n(n),n}function K(n){return _n(n),n}function x9(n){return _n(n),n}function hG(n){return _n(n),n}function aie(n){return _n(n),n}function Hv(n){return n.b==n.c}function B0(n){return!!n&&n.b}function die(n){return!!n&&n.k}function bie(n){return!!n&&n.j}function Hu(n){_n(n),this.a=n}function lG(n){return ja(n),n}function qv(n){EW(n,n.length)}function t1(n){_r.call(this,n)}function Sf(n){_r.call(this,n)}function VI(n){_r.call(this,n)}function pw(n){_r.call(this,n)}function Gv(n){_r.call(this,n)}function Ee(n){_r.call(this,n)}function QI(n){Vz.call(this,n,0)}function JI(){iX.call(this,12,3)}function aG(){aG=N,din=new Q1n}function H9n(){H9n=N,ain=new Lc}function wj(){wj=N,dm=new H1}function q9n(){q9n=N,vzn=new ww}function G9n(){throw T(new ye)}function dG(){throw T(new ye)}function z9n(){throw T(new ye)}function wie(){throw T(new ye)}function gie(){throw T(new ye)}function pie(){throw T(new ye)}function YI(){this.a=Ce(pe(Ji))}function u2(n){$f(),this.a=pe(n)}function U9n(n,e){n.Td(e),e.Sd(n)}function vie(n,e){n.a.ec().Mc(e)}function mie(n,e,t){n.c.lf(e,t)}function bG(n){mr.call(this,n)}function Pf(n){Hn.call(this,n)}function i1(){A9.call(this,"")}function zv(){A9.call(this,"")}function V1(){A9.call(this,"")}function R0(){A9.call(this,"")}function wG(n){mr.call(this,n)}function Wp(n){_p.call(this,n)}function ZI(n){lE.call(this,n)}function W9n(n){Wp.call(this,n)}function X9n(){AI.call(this,null)}function V9n(){AI.call(this,null)}function gj(){gj=N,k3()}function Q9n(){Q9n=N,Szn=Z4e()}function J9n(n){return n.a?n.b:0}function kie(n){return n.a?n.b:0}function yie(n,e){return n.a-e.a}function jie(n,e){return n.a-e.a}function Eie(n,e){return n.a-e.a}function pj(n,e){return WX(n,e)}function M(n,e){return pMn(n,e)}function Cie(n,e){return e in n.a}function Y9n(n,e){return n.f=e,n}function Tie(n,e){return n.b=e,n}function Z9n(n,e){return n.c=e,n}function Mie(n,e){return n.g=e,n}function gG(n,e){return n.a=e,n}function pG(n,e){return n.f=e,n}function Aie(n,e){return n.k=e,n}function vG(n,e){return n.a=e,n}function Sie(n,e){return n.e=e,n}function mG(n,e){return n.e=e,n}function Pie(n,e){return n.f=e,n}function Iie(n,e){n.b=!0,n.d=e}function Oie(n,e){n.b=new kr(e)}function Die(n,e,t){e.td(n.a[t])}function $ie(n,e,t){e.we(n.a[t])}function Fie(n,e){return n.b-e.b}function xie(n,e){return n.g-e.g}function Lie(n,e){return n.s-e.s}function Nie(n,e){return n?0:e-1}function n8n(n,e){return n?0:e-1}function Bie(n,e){return n?e-1:0}function Rie(n,e){return e.Yf(n)}function od(n,e){return n.b=e,n}function vj(n,e){return n.a=e,n}function fd(n,e){return n.c=e,n}function hd(n,e){return n.d=e,n}function ld(n,e){return n.e=e,n}function kG(n,e){return n.f=e,n}function Uv(n,e){return n.a=e,n}function Xp(n,e){return n.b=e,n}function Vp(n,e){return n.c=e,n}function gn(n,e){return n.c=e,n}function Dn(n,e){return n.b=e,n}function pn(n,e){return n.d=e,n}function vn(n,e){return n.e=e,n}function _ie(n,e){return n.f=e,n}function mn(n,e){return n.g=e,n}function kn(n,e){return n.a=e,n}function yn(n,e){return n.i=e,n}function jn(n,e){return n.j=e,n}function e8n(n,e){return n.k=e,n}function Kie(n,e){return n.j=e,n}function Hie(n,e){yl(),Hr(e,n)}function qie(n,e,t){Nfe(n.a,e,t)}function t8n(n){mTn.call(this,n)}function yG(n){mTn.call(this,n)}function mj(n){uD.call(this,n)}function i8n(n){u2e.call(this,n)}function Q1(n){Ld.call(this,n)}function r8n(n){XD.call(this,n)}function c8n(n){XD.call(this,n)}function u8n(){Mz.call(this,"")}function Li(){this.a=0,this.b=0}function s8n(){this.b=0,this.a=0}function o8n(n,e){n.b=0,hb(n,e)}function Gie(n,e){n.c=e,n.b=!0}function f8n(n,e){return n.c._b(e)}function xo(n){return n.e&&n.e()}function nO(n){return n?n.d:null}function h8n(n,e){return LDn(n.b,e)}function zie(n){return n?n.g:null}function Uie(n){return n?n.i:null}function J1(n){return Ph(n),n.o}function ad(){ad=N,Mne=h4e()}function l8n(){l8n=N,mi=jve()}function Qp(){Qp=N,g1n=a4e()}function a8n(){a8n=N,hee=l4e()}function jG(){jG=N,oc=s6e()}function EG(){EG=N,Wl=N3()}function d8n(){throw T(new ye)}function b8n(){throw T(new ye)}function w8n(){throw T(new ye)}function g8n(){throw T(new ye)}function p8n(){throw T(new ye)}function v8n(){throw T(new ye)}function kj(n){this.a=new s2(n)}function CG(n){d_n(),gTe(this,n)}function Y1(n){this.a=new AD(n)}function vw(n,e){for(;n.ye(e););}function TG(n,e){for(;n.sd(e););}function mw(n,e){return n.a+=e,n}function eO(n,e){return n.a+=e,n}function r1(n,e){return n.a+=e,n}function dd(n,e){return n.a+=e,n}function Wv(n){return fl(n),n.a}function yj(n){return n.b!=n.d.c}function m8n(n){return n.l|n.m<<22}function MG(n,e){return n.d[e.p]}function k8n(n,e){return Q8e(n,e)}function AG(n,e,t){n.splice(e,t)}function y8n(n){n.c?rBn(n):cBn(n)}function jj(n){this.a=0,this.b=n}function j8n(){this.a=new B7(Pon)}function E8n(){this.b=new B7(won)}function C8n(){this.b=new B7(OK)}function T8n(){this.b=new B7(OK)}function M8n(){throw T(new ye)}function A8n(){throw T(new ye)}function S8n(){throw T(new ye)}function P8n(){throw T(new ye)}function I8n(){throw T(new ye)}function O8n(){throw T(new ye)}function D8n(){throw T(new ye)}function $8n(){throw T(new ye)}function F8n(){throw T(new ye)}function x8n(){throw T(new ye)}function Wie(){throw T(new ic)}function Xie(){throw T(new ic)}function L9(n){this.a=new L8n(n)}function L8n(n){cbe(this,n,cve())}function N9(n){return!n||iTn(n)}function B9(n){return Mf[n]!=-1}function Vie(){_A!=0&&(_A=0),KA=-1}function N8n(){iR==null&&(iR=[])}function Qie(n,e){$x(R(n.a),e)}function Jie(n,e){$x(R(n.a),e)}function R9(n,e){Sw.call(this,n,e)}function Jp(n,e){R9.call(this,n,e)}function SG(n,e){this.b=n,this.c=e}function B8n(n,e){this.b=n,this.a=e}function R8n(n,e){this.a=n,this.b=e}function _8n(n,e){this.a=n,this.b=e}function K8n(n,e){this.a=n,this.b=e}function H8n(n,e){this.a=n,this.b=e}function q8n(n,e){this.a=n,this.b=e}function G8n(n,e){this.a=n,this.b=e}function z8n(n,e){this.a=n,this.b=e}function U8n(n,e){this.a=n,this.b=e}function W8n(n,e){this.b=n,this.a=e}function X8n(n,e){this.b=n,this.a=e}function V8n(n,e){this.b=n,this.a=e}function Q8n(n,e){this.b=n,this.a=e}function Oe(n,e){this.f=n,this.g=e}function Yp(n,e){this.e=n,this.d=e}function bd(n,e){this.g=n,this.i=e}function tO(n,e){this.a=n,this.b=e}function J8n(n,e){this.a=n,this.f=e}function Y8n(n,e){this.b=n,this.c=e}function Yie(n,e){this.a=n,this.b=e}function Z8n(n,e){this.a=n,this.b=e}function iO(n,e){this.a=n,this.b=e}function n7n(n){Bz(n.dc()),this.c=n}function Ej(n){this.b=u(pe(n),83)}function e7n(n){this.a=u(pe(n),83)}function _0(n){this.a=u(pe(n),15)}function t7n(n){this.a=u(pe(n),15)}function Cj(n){this.b=u(pe(n),47)}function Tj(){this.q=new y.Date}function nh(){nh=N,Sin=new tln}function Zp(){Zp=N,X4=new nln}function Xv(n){return n.f.c+n.g.c}function _9(n,e){return n.b.Hc(e)}function i7n(n,e){return n.b.Ic(e)}function r7n(n,e){return n.b.Qc(e)}function c7n(n,e){return n.b.Hc(e)}function u7n(n,e){return n.c.uc(e)}function Ah(n,e){return n.a._b(e)}function s7n(n,e){return tt(n.c,e)}function o7n(n,e){return Uu(n.b,e)}function f7n(n,e){return n>e&&e0}function cO(n,e){return fc(n,e)<0}function n5(n,e){return n.a.get(e)}function lre(n,e){return e.split(n)}function S7n(n,e){return Uu(n.e,e)}function LG(n){return _n(n),!1}function xj(n){xn.call(this,n,21)}function are(n,e){cMn.call(this,n,e)}function Lj(n,e){Oe.call(this,n,e)}function uO(n,e){Oe.call(this,n,e)}function NG(n){_D(),uEn.call(this,n)}function BG(n,e){fCn(n,n.length,e)}function z9(n,e){BCn(n,n.length,e)}function dre(n,e,t){e.ud(n.a.Ge(t))}function bre(n,e,t){e.we(n.a.Fe(t))}function wre(n,e,t){e.td(n.a.Kb(t))}function gre(n,e,t){n.Mb(t)&&e.td(t)}function e5(n,e,t){n.splice(e,0,t)}function pre(n,e){return au(n.e,e)}function Nj(n,e){this.d=n,this.e=e}function P7n(n,e){this.b=n,this.a=e}function I7n(n,e){this.b=n,this.a=e}function RG(n,e){this.b=n,this.a=e}function O7n(n,e){this.a=n,this.b=e}function D7n(n,e){this.a=n,this.b=e}function $7n(n,e){this.a=n,this.b=e}function F7n(n,e){this.a=n,this.b=e}function f2(n,e){this.a=n,this.b=e}function _G(n,e){this.b=n,this.a=e}function KG(n,e){this.b=n,this.a=e}function Bj(n,e){Oe.call(this,n,e)}function Rj(n,e){Oe.call(this,n,e)}function HG(n,e){Oe.call(this,n,e)}function qG(n,e){Oe.call(this,n,e)}function kw(n,e){Oe.call(this,n,e)}function sO(n,e){Oe.call(this,n,e)}function oO(n,e){Oe.call(this,n,e)}function fO(n,e){Oe.call(this,n,e)}function _j(n,e){Oe.call(this,n,e)}function GG(n,e){Oe.call(this,n,e)}function hO(n,e){Oe.call(this,n,e)}function U9(n,e){Oe.call(this,n,e)}function Kj(n,e){Oe.call(this,n,e)}function lO(n,e){Oe.call(this,n,e)}function t5(n,e){Oe.call(this,n,e)}function zG(n,e){Oe.call(this,n,e)}function zt(n,e){Oe.call(this,n,e)}function Hj(n,e){Oe.call(this,n,e)}function x7n(n,e){this.a=n,this.b=e}function L7n(n,e){this.a=n,this.b=e}function N7n(n,e){this.a=n,this.b=e}function B7n(n,e){this.a=n,this.b=e}function R7n(n,e){this.a=n,this.b=e}function _7n(n,e){this.a=n,this.b=e}function K7n(n,e){this.a=n,this.b=e}function H7n(n,e){this.a=n,this.b=e}function q7n(n,e){this.a=n,this.b=e}function UG(n,e){this.b=n,this.a=e}function G7n(n,e){this.b=n,this.a=e}function z7n(n,e){this.b=n,this.a=e}function U7n(n,e){this.b=n,this.a=e}function t3(n,e){this.c=n,this.d=e}function W7n(n,e){this.e=n,this.d=e}function X7n(n,e){this.a=n,this.b=e}function V7n(n,e){this.b=e,this.c=n}function qj(n,e){Oe.call(this,n,e)}function W9(n,e){Oe.call(this,n,e)}function aO(n,e){Oe.call(this,n,e)}function i5(n,e){Oe.call(this,n,e)}function WG(n,e){Oe.call(this,n,e)}function dO(n,e){Oe.call(this,n,e)}function bO(n,e){Oe.call(this,n,e)}function X9(n,e){Oe.call(this,n,e)}function XG(n,e){Oe.call(this,n,e)}function wO(n,e){Oe.call(this,n,e)}function r5(n,e){Oe.call(this,n,e)}function VG(n,e){Oe.call(this,n,e)}function c5(n,e){Oe.call(this,n,e)}function u5(n,e){Oe.call(this,n,e)}function H0(n,e){Oe.call(this,n,e)}function gO(n,e){Oe.call(this,n,e)}function pO(n,e){Oe.call(this,n,e)}function QG(n,e){Oe.call(this,n,e)}function s5(n,e){Oe.call(this,n,e)}function vO(n,e){Oe.call(this,n,e)}function Gj(n,e){Oe.call(this,n,e)}function V9(n,e){Oe.call(this,n,e)}function Q9(n,e){Oe.call(this,n,e)}function h2(n,e){Oe.call(this,n,e)}function mO(n,e){Oe.call(this,n,e)}function JG(n,e){Oe.call(this,n,e)}function kO(n,e){Oe.call(this,n,e)}function yO(n,e){Oe.call(this,n,e)}function YG(n,e){Oe.call(this,n,e)}function jO(n,e){Oe.call(this,n,e)}function EO(n,e){Oe.call(this,n,e)}function CO(n,e){Oe.call(this,n,e)}function TO(n,e){Oe.call(this,n,e)}function ZG(n,e){Oe.call(this,n,e)}function Q7n(n,e){this.b=n,this.a=e}function J7n(n,e){this.a=n,this.b=e}function Y7n(n,e){this.a=n,this.b=e}function Z7n(n,e){this.a=n,this.b=e}function nkn(n,e){this.a=n,this.b=e}function nz(n,e){Oe.call(this,n,e)}function ez(n,e){Oe.call(this,n,e)}function ekn(n,e){this.b=n,this.d=e}function tz(n,e){Oe.call(this,n,e)}function iz(n,e){Oe.call(this,n,e)}function tkn(n,e){this.a=n,this.b=e}function ikn(n,e){this.a=n,this.b=e}function zj(n,e){Oe.call(this,n,e)}function o5(n,e){Oe.call(this,n,e)}function rz(n,e){Oe.call(this,n,e)}function cz(n,e){Oe.call(this,n,e)}function uz(n,e){Oe.call(this,n,e)}function MO(n,e){Oe.call(this,n,e)}function sz(n,e){Oe.call(this,n,e)}function AO(n,e){Oe.call(this,n,e)}function Uj(n,e){Oe.call(this,n,e)}function SO(n,e){Oe.call(this,n,e)}function PO(n,e){Oe.call(this,n,e)}function J9(n,e){Oe.call(this,n,e)}function IO(n,e){Oe.call(this,n,e)}function oz(n,e){Oe.call(this,n,e)}function Y9(n,e){Oe.call(this,n,e)}function fz(n,e){Oe.call(this,n,e)}function vre(n,e){return au(n.c,e)}function mre(n,e){return au(e.b,n)}function kre(n,e){return-n.b.Je(e)}function hz(n,e){return au(n.g,e)}function Z9(n,e){Oe.call(this,n,e)}function l2(n,e){Oe.call(this,n,e)}function rkn(n,e){this.a=n,this.b=e}function ckn(n,e){this.a=n,this.b=e}function fn(n,e){this.a=n,this.b=e}function f5(n,e){Oe.call(this,n,e)}function h5(n,e){Oe.call(this,n,e)}function n8(n,e){Oe.call(this,n,e)}function OO(n,e){Oe.call(this,n,e)}function Wj(n,e){Oe.call(this,n,e)}function l5(n,e){Oe.call(this,n,e)}function DO(n,e){Oe.call(this,n,e)}function Xj(n,e){Oe.call(this,n,e)}function yw(n,e){Oe.call(this,n,e)}function e8(n,e){Oe.call(this,n,e)}function a5(n,e){Oe.call(this,n,e)}function d5(n,e){Oe.call(this,n,e)}function t8(n,e){Oe.call(this,n,e)}function Vj(n,e){Oe.call(this,n,e)}function jw(n,e){Oe.call(this,n,e)}function Qj(n,e){Oe.call(this,n,e)}function ukn(n,e){this.a=n,this.b=e}function skn(n,e){this.a=n,this.b=e}function okn(n,e){this.a=n,this.b=e}function fkn(n,e){this.a=n,this.b=e}function hkn(n,e){this.a=n,this.b=e}function lkn(n,e){this.a=n,this.b=e}function Si(n,e){this.a=n,this.b=e}function Jj(n,e){Oe.call(this,n,e)}function akn(n,e){this.a=n,this.b=e}function dkn(n,e){this.a=n,this.b=e}function bkn(n,e){this.a=n,this.b=e}function wkn(n,e){this.a=n,this.b=e}function gkn(n,e){this.a=n,this.b=e}function pkn(n,e){this.a=n,this.b=e}function vkn(n,e){this.b=n,this.a=e}function mkn(n,e){this.b=n,this.a=e}function kkn(n,e){this.b=n,this.a=e}function ykn(n,e){this.b=n,this.a=e}function jkn(n,e){this.a=n,this.b=e}function Ekn(n,e){this.a=n,this.b=e}function yre(n,e){J9e(n.a,u(e,56))}function Ckn(n,e){f0e(n.a,u(e,11))}function jre(n,e){return h3(),e!=n}function Tkn(){return Q9n(),new Szn}function Mkn(){c$(),this.b=new hi}function Akn(){hM(),this.a=new hi}function Skn(){tX(),lW.call(this)}function a2(n,e){Oe.call(this,n,e)}function Pkn(n,e){this.a=n,this.b=e}function Ikn(n,e){this.a=n,this.b=e}function Yj(n,e){this.a=n,this.b=e}function Okn(n,e){this.a=n,this.b=e}function Dkn(n,e){this.a=n,this.b=e}function $kn(n,e){this.a=n,this.b=e}function Fkn(n,e){this.d=n,this.b=e}function lz(n,e){this.d=n,this.e=e}function xkn(n,e){this.f=n,this.c=e}function i8(n,e){this.b=n,this.c=e}function az(n,e){this.i=n,this.g=e}function Lkn(n,e){this.e=n,this.a=e}function Nkn(n,e){this.a=n,this.b=e}function dz(n,e){n.i=null,nT(n,e)}function Ere(n,e){n&&it($y,n,e)}function Bkn(n,e){return NF(n.a,e)}function Zj(n){return g7(n.c,n.b)}function Vr(n){return n?n.dd():null}function B(n){return n??null}function q0(n){return typeof n===X2}function G0(n){return typeof n===UZ}function ki(n){return typeof n===EL}function el(n,e){return n.Hd().Xb(e)}function nE(n,e){return Rbe(n.Kc(),e)}function gd(n,e){return fc(n,e)==0}function Cre(n,e){return fc(n,e)>=0}function b5(n,e){return fc(n,e)!=0}function Tre(n){return""+(_n(n),n)}function r8(n,e){return n.substr(e)}function Rkn(n){return Fu(n),n.d.gc()}function $O(n){return yme(n,n.c),n}function eE(n){return A5(n==null),n}function w5(n,e){return n.a+=""+e,n}function dr(n,e){return n.a+=""+e,n}function g5(n,e){return n.a+=""+e,n}function rc(n,e){return n.a+=""+e,n}function De(n,e){return n.a+=""+e,n}function bz(n,e){return n.a+=""+e,n}function _kn(n,e){Kt(n,e,n.a,n.a.a)}function ua(n,e){Kt(n,e,n.c.b,n.c)}function Mre(n,e,t){VFn(e,Mx(n,t))}function Are(n,e,t){VFn(e,Mx(n,t))}function Sre(n,e){k0e(new ie(n),e)}function Kkn(n,e){n.q.setTime($d(e))}function Hkn(n,e){kW.call(this,n,e)}function qkn(n,e){kW.call(this,n,e)}function FO(n,e){kW.call(this,n,e)}function Gkn(n){Cu(this),Z5(this,n)}function wz(n){return Ln(n,0),null}function Lo(n){return n.a=0,n.b=0,n}function zkn(n,e){return n.a=e.g+1,n}function Pre(n,e){return n.j[e.p]==2}function gz(n){return lhe(u(n,79))}function Ukn(){Ukn=N,jUn=Fe(qF())}function Wkn(){Wkn=N,RWn=Fe(PNn())}function Xkn(){this.b=new s2(sb(12))}function Vkn(){this.b=0,this.a=!1}function Qkn(){this.b=0,this.a=!1}function p5(n){this.a=n,TI.call(this)}function Jkn(n){this.a=n,TI.call(this)}function In(n,e){ri.call(this,n,e)}function xO(n,e){V0.call(this,n,e)}function Ew(n,e){az.call(this,n,e)}function LO(n,e){H3.call(this,n,e)}function Ykn(n,e){c8.call(this,n,e)}function He(n,e){$j(),it(eI,n,e)}function NO(n,e){return Zu(n.a,0,e)}function Zkn(n,e){return n.a.a.a.cc(e)}function nyn(n,e){return B(n)===B(e)}function Ire(n,e){return ni(n.a,e.a)}function Ore(n,e){return Wc(n.a,e.a)}function Dre(n,e){return xCn(n.a,e.a)}function If(n,e){return n.indexOf(e)}function pd(n,e){return n==e?0:n?1:-1}function tE(n){return n<10?"0"+n:""+n}function $re(n){return pe(n),new p5(n)}function eyn(n){return Bc(n.l,n.m,n.h)}function i3(n){return Gt((_n(n),n))}function Fre(n){return Gt((_n(n),n))}function tyn(n,e){return Wc(n.g,e.g)}function Fr(n){return typeof n===UZ}function xre(n){return n==b0||n==Hb}function Lre(n){return n==b0||n==Kb}function pz(n){return xr(n.b.b,n,0)}function iyn(n){this.a=Tkn(),this.b=n}function ryn(n){this.a=Tkn(),this.b=n}function Nre(n,e){return W(n.a,e),e}function Bre(n,e){return W(n.c,e),n}function cyn(n,e){return cs(n.a,e),n}function Rre(n,e){return wo(),e.a+=n}function _re(n,e){return wo(),e.a+=n}function Kre(n,e){return wo(),e.c+=n}function vz(n,e){S3(n,0,n.length,e)}function Sh(){Tq.call(this,new ba)}function uyn(){xE.call(this,0,0,0,0)}function d2(){ys.call(this,0,0,0,0)}function kr(n){this.a=n.a,this.b=n.b}function tl(n){return n==Zs||n==Ao}function r3(n){return n==Yh||n==Jh}function syn(n){return n==xg||n==Fg}function Cw(n){return n!=Ef&&n!=ql}function qu(n){return n.Lg()&&n.Mg()}function oyn(n){return JE(u(n,118))}function iE(n){return cs(new li,n)}function fyn(n,e){return new H3(e,n)}function Hre(n,e){return new H3(e,n)}function mz(n,e,t){UC(n,e),WC(n,t)}function rE(n,e,t){Rd(n,e),Bd(n,t)}function Yo(n,e,t){nu(n,e),eu(n,t)}function cE(n,e,t){D3(n,e),F3(n,t)}function uE(n,e,t){$3(n,e),x3(n,t)}function BO(n,e){X3(n,e),L3(n,n.D)}function kz(n){xkn.call(this,n,!0)}function hyn(n,e,t){fU.call(this,n,e,t)}function il(n){jl(),qbe.call(this,n)}function lyn(){Lj.call(this,"Head",1)}function ayn(){Lj.call(this,"Tail",3)}function RO(n){n.c=F(Zn,rn,1,0,5,1)}function dyn(n){n.a=F(Zn,rn,1,8,5,1)}function byn(n){Zc(n.xf(),new t5n(n))}function Tw(n){return n!=null?mt(n):0}function qre(n,e){return ob(e,ef(n))}function Gre(n,e){return ob(e,ef(n))}function zre(n,e){return n[n.length]=e}function Ure(n,e){return n[n.length]=e}function yz(n){return zoe(n.b.Kc(),n.a)}function Wre(n,e){return ZC(BD(n.d),e)}function Xre(n,e){return ZC(BD(n.g),e)}function Vre(n,e){return ZC(BD(n.j),e)}function tr(n,e){ri.call(this,n.b,e)}function vd(n){xE.call(this,n,n,n,n)}function jz(n){return n.b&&uL(n),n.a}function Ez(n){return n.b&&uL(n),n.c}function Qre(n,e){vf||(n.b=e)}function _O(n,e,t){return St(n,e,t),t}function wyn(n,e,t){St(n.c[e.g],e.g,t)}function Jre(n,e,t){u(n.c,69).Xh(e,t)}function Yre(n,e,t){Yo(t,t.i+n,t.j+e)}function Zre(n,e){me(bc(n.a),PMn(e))}function nce(n,e){me(Du(n.a),IMn(e))}function v5(n){Je(),cd.call(this,n)}function ece(n){return n==null?0:mt(n)}function gyn(){gyn=N,hK=new f6(cH)}function je(){je=N,new pyn,new X}function pyn(){new we,new we,new we}function Cz(){Cz=N,Hq(),bin=new we}function Zo(){Zo=N,y.Math.log(2)}function ms(){ms=N,Ch=(E7n(),Dne)}function tce(){throw T(new t1(izn))}function ice(){throw T(new t1(izn))}function rce(){throw T(new t1(rzn))}function cce(){throw T(new t1(rzn))}function vyn(n){this.a=n,HU.call(this,n)}function KO(n){this.a=n,Ej.call(this,n)}function HO(n){this.a=n,Ej.call(this,n)}function wi(n,e){mD(n.c,n.c.length,e)}function Kr(n){return n.ae?1:0}function kyn(n,e){return fc(n,e)>0?n:e}function Bc(n,e,t){return{l:n,m:e,h:t}}function uce(n,e){n.a!=null&&Ckn(e,n.a)}function yyn(n){n.a=new aI,n.c=new aI}function sE(n){this.b=n,this.a=new X}function jyn(n){this.b=new san,this.a=n}function Mz(n){vU.call(this),this.a=n}function Eyn(){Lj.call(this,"Range",2)}function Cyn(){kJ(),this.a=new B7(Hrn)}function sce(n,e){pe(e),Iw(n).Jc(new ju)}function oce(n,e){return ns(),e.n.b+=n}function fce(n,e,t){return it(n.g,t,e)}function hce(n,e,t){return it(n.k,t,e)}function lce(n,e){return it(n.a,e.a,e)}function Mw(n,e,t){return _Q(e,t,n.c)}function Az(n){return new fn(n.c,n.d)}function ace(n){return new fn(n.c,n.d)}function Qr(n){return new fn(n.a,n.b)}function Tyn(n,e){return xEe(n.a,e,null)}function dce(n){Hi(n,null),Ci(n,null)}function Myn(n){s$(n,null),o$(n,null)}function Ayn(){c8.call(this,null,null)}function Syn(){wE.call(this,null,null)}function Sz(n){this.a=n,we.call(this)}function bce(n){this.b=(Pn(),new DI(n))}function oE(n){n.j=F(Ain,q,310,0,0,1)}function wce(n,e,t){n.c.Vc(e,u(t,133))}function gce(n,e,t){n.c.ji(e,u(t,133))}function Pyn(n,e){de(n),n.Gc(u(e,15))}function m5(n,e){return Jje(n.c,n.b,e)}function pce(n,e){return new Jyn(n.Kc(),e)}function qO(n,e){return gwe(n.Kc(),e)!=-1}function Pz(n,e){return n.a.Bc(e)!=null}function fE(n){return n.Ob()?n.Pb():null}function Iyn(n){return Hs(n,0,n.length)}function I(n,e){return n!=null&&WF(n,e)}function vce(n,e){n.q.setHours(e),S6(n,e)}function Oyn(n,e){n.c&&(ZU(e),iMn(e))}function mce(n,e,t){u(n.Kb(t),164).Nb(e)}function kce(n,e,t){return SEe(n,e,t),t}function Dyn(n,e,t){n.a=e^1502,n.b=t^tN}function GO(n,e,t){return n.a[e.g][t.g]}function nf(n,e){return n.a[e.c.p][e.p]}function yce(n,e){return n.e[e.c.p][e.p]}function jce(n,e){return n.c[e.c.p][e.p]}function Ece(n,e){return n.j[e.p]=D9e(e)}function Cce(n,e){return DX(n.f,e.tg())}function Tce(n,e){return DX(n.b,e.tg())}function Mce(n,e){return n.a0?e*e/n:e*e*100}function Jce(n,e){return n>0?e/(n*n):e*100}function Yce(n,e,t){return W(e,e$n(n,t))}function Zce(n,e,t){DC(),n.Xe(e)&&t.td(n)}function s3(n,e,t){var i;i=n.Zc(e),i.Rb(t)}function U0(n,e,t){return n.a+=e,n.b+=t,n}function nue(n,e,t){return n.a*=e,n.b*=t,n}function o8(n,e,t){return n.a-=e,n.b-=t,n}function Zz(n,e){return n.a=e.a,n.b=e.b,n}function vE(n){return n.a=-n.a,n.b=-n.b,n}function fjn(n){this.c=n,this.a=1,this.b=1}function hjn(n){this.c=n,nu(n,0),eu(n,0)}function ljn(n){Tt.call(this),V5(this,n)}function ajn(n){yL(),Nmn(this),this.mf(n)}function djn(n,e){Zv(),c8.call(this,n,e)}function nU(n,e){c1(),wE.call(this,n,e)}function bjn(n,e){c1(),wE.call(this,n,e)}function wjn(n,e){c1(),nU.call(this,n,e)}function Gu(n,e,t){Xu.call(this,n,e,t,2)}function JO(n,e){ms(),FE.call(this,n,e)}function gjn(n,e){ms(),JO.call(this,n,e)}function eU(n,e){ms(),JO.call(this,n,e)}function pjn(n,e){ms(),eU.call(this,n,e)}function tU(n,e){ms(),FE.call(this,n,e)}function vjn(n,e){ms(),tU.call(this,n,e)}function mjn(n,e){ms(),FE.call(this,n,e)}function eue(n,e){return n.c.Fc(u(e,133))}function iU(n,e,t){return jM(G8(n,e),t)}function tue(n,e,t){return e.Qk(n.e,n.c,t)}function iue(n,e,t){return e.Rk(n.e,n.c,t)}function YO(n,e){return pl(n.e,u(e,49))}function rue(n,e,t){s6(Du(n.a),e,IMn(t))}function cue(n,e,t){s6(bc(n.a),e,PMn(t))}function rU(n,e){e.$modCount=n.$modCount}function C5(){C5=N,Xm=new kt("root")}function o3(){o3=N,xy=new w9n,new g9n}function kjn(){this.a=new Od,this.b=new Od}function cU(){RIn.call(this),this.Bb|=Yi}function yjn(){Oe.call(this,"GROW_TREE",0)}function uue(n){return n==null?null:CCe(n)}function sue(n){return n==null?null:D5e(n)}function oue(n){return n==null?null:Nr(n)}function fue(n){return n==null?null:Nr(n)}function Ph(n){n.o==null&&u9e(n)}function sn(n){return A5(n==null||q0(n)),n}function Y(n){return A5(n==null||G0(n)),n}function Ce(n){return A5(n==null||ki(n)),n}function uU(n){this.q=new y.Date($d(n))}function f8(n,e){this.c=n,Yp.call(this,n,e)}function mE(n,e){this.a=n,f8.call(this,n,e)}function hue(n,e){this.d=n,Ovn(this),this.b=e}function sU(n,e){P$.call(this,n),this.a=e}function oU(n,e){P$.call(this,n),this.a=e}function lue(n){xQ.call(this,0,0),this.f=n}function fU(n,e,t){IC.call(this,n,e,t,null)}function jjn(n,e,t){IC.call(this,n,e,t,null)}function aue(n,e,t){return n.ue(e,t)<=0?t:e}function due(n,e,t){return n.ue(e,t)<=0?e:t}function bue(n,e){return u(xd(n.b,e),149)}function wue(n,e){return u(xd(n.c,e),229)}function ZO(n){return u(un(n.a,n.b),287)}function Ejn(n){return new fn(n.c,n.d+n.a)}function Cjn(n){return ns(),syn(u(n,197))}function W0(){W0=N,prn=Cn((Qu(),id))}function gue(n,e){e.a?e7e(n,e):zO(n.a,e.b)}function Tjn(n,e){vf||W(n.a,e)}function pue(n,e){return H9(),K3(e.d.i,n)}function vue(n,e){return x2(),new ABn(e,n)}function Df(n,e){return T8(e,ann),n.f=e,n}function hU(n,e,t){return t=os(n,e,3,t),t}function lU(n,e,t){return t=os(n,e,6,t),t}function aU(n,e,t){return t=os(n,e,9,t),t}function h8(n,e,t){++n.j,n.Ki(),A$(n,e,t)}function Mjn(n,e,t){++n.j,n.Hi(e,n.oi(e,t))}function Ajn(n,e,t){var i;i=n.Zc(e),i.Rb(t)}function Sjn(n,e,t){return MZ(n.c,n.b,e,t)}function dU(n,e){return(e&nt)%n.d.length}function ri(n,e){kt.call(this,n),this.a=e}function bU(n,e){xq.call(this,n),this.a=e}function nD(n,e){xq.call(this,n),this.a=e}function Pjn(n,e){this.c=n,Ld.call(this,e)}function Ijn(n,e){this.a=n,Omn.call(this,e)}function l8(n,e){this.a=n,Omn.call(this,e)}function Ojn(n){this.a=(rs(n,Pb),new Pc(n))}function Djn(n){this.a=(rs(n,Pb),new Pc(n))}function a8(n){return!n.a&&(n.a=new vr),n.a}function $jn(n){return n>8?0:n+1}function mue(n,e){return qn(),n==e?0:n?1:-1}function wU(n,e,t){return m2(n,u(e,22),t)}function kue(n,e,t){return n.apply(e,t)}function Fjn(n,e,t){return n.a+=Hs(e,0,t),n}function gU(n,e){var t;return t=n.e,n.e=e,t}function yue(n,e){var t;t=n[eN],t.call(n,e)}function jue(n,e){var t;t=n[eN],t.call(n,e)}function X0(n,e){n.a.Vc(n.b,e),++n.b,n.c=-1}function xjn(n){Cu(n.e),n.d.b=n.d,n.d.a=n.d}function d8(n){n.b?d8(n.b):n.f.c.zc(n.e,n.d)}function Eue(n,e,t){ca(),Svn(n,e.Ce(n.a,t))}function Cue(n,e){return nO(p$n(n.a,e,!0))}function Tue(n,e){return nO(v$n(n.a,e,!0))}function bo(n,e){return pj(new Array(e),n)}function eD(n){return String.fromCharCode(n)}function Mue(n){return n==null?null:n.message}function Ljn(){this.a=new X,this.b=new X}function Njn(){this.a=new LH,this.b=new Umn}function Bjn(){this.b=new Li,this.c=new X}function pU(){this.d=new Li,this.e=new Li}function vU(){this.n=new Li,this.o=new Li}function kE(){this.n=new i2,this.i=new d2}function Rjn(){this.a=new v4n,this.b=new cwn}function _jn(){this.a=new X,this.d=new X}function Kjn(){this.b=new hi,this.a=new hi}function Hjn(){this.b=new we,this.a=new we}function qjn(){this.b=new E8n,this.a=new sgn}function Gjn(){kE.call(this),this.a=new Li}function T5(n){Jbe.call(this,n,(FC(),vR))}function mU(n,e,t,i){xE.call(this,n,e,t,i)}function Aue(n,e,t){t!=null&&JC(e,rx(n,t))}function Sue(n,e,t){t!=null&&YC(e,rx(n,t))}function kU(n,e,t){return t=os(n,e,11,t),t}function st(n,e){return n.a+=e.a,n.b+=e.b,n}function yi(n,e){return n.a-=e.a,n.b-=e.b,n}function Pue(n,e){return n.n.a=(_n(e),e+10)}function Iue(n,e){return n.n.a=(_n(e),e+10)}function Oue(n,e){return e==n||o4(sM(e),n)}function zjn(n,e){return it(n.a,e,"")==null}function Due(n,e){return H9(),!K3(e.d.i,n)}function $ue(n,e){tl(n.f)?Qme(n,e):Fve(n,e)}function Fue(n,e){var t;return t=e.Hh(n.a),t}function V0(n,e){mr.call(this,rm+n+Ra+e)}function g2(n,e,t,i){V.call(this,n,e,t,i)}function yU(n,e,t,i){V.call(this,n,e,t,i)}function Ujn(n,e,t,i){yU.call(this,n,e,t,i)}function Wjn(n,e,t,i){zE.call(this,n,e,t,i)}function tD(n,e,t,i){zE.call(this,n,e,t,i)}function jU(n,e,t,i){zE.call(this,n,e,t,i)}function Xjn(n,e,t,i){tD.call(this,n,e,t,i)}function EU(n,e,t,i){tD.call(this,n,e,t,i)}function Fn(n,e,t,i){jU.call(this,n,e,t,i)}function Vjn(n,e,t,i){EU.call(this,n,e,t,i)}function Qjn(n,e,t,i){yW.call(this,n,e,t,i)}function Jjn(n,e,t){this.a=n,Vz.call(this,e,t)}function Yjn(n,e,t){this.c=e,this.b=t,this.a=n}function xue(n,e,t){return n.d=u(e.Kb(t),164)}function CU(n,e){return n.Aj().Nh().Kh(n,e)}function TU(n,e){return n.Aj().Nh().Ih(n,e)}function Zjn(n,e){return _n(n),B(n)===B(e)}function Mn(n,e){return _n(n),B(n)===B(e)}function iD(n,e){return nO(p$n(n.a,e,!1))}function rD(n,e){return nO(v$n(n.a,e,!1))}function Lue(n,e){return n.b.sd(new D7n(n,e))}function Nue(n,e){return n.b.sd(new $7n(n,e))}function nEn(n,e){return n.b.sd(new F7n(n,e))}function MU(n,e,t){return n.lastIndexOf(e,t)}function Bue(n,e,t){return ni(n[e.b],n[t.b])}function Rue(n,e){return H(e,(nn(),Jk),n)}function _ue(n,e){return Wc(e.a.d.p,n.a.d.p)}function Kue(n,e){return Wc(n.a.d.p,e.a.d.p)}function Hue(n,e){return ni(n.c-n.s,e.c-e.s)}function eEn(n){return n.c?xr(n.c.a,n,0):-1}function que(n){return n<100?null:new Q1(n)}function p2(n){return n==td||n==Eh||n==Ac}function tEn(n,e){return I(e,15)&&oBn(n.c,e)}function Gue(n,e){vf||e&&(n.d=e)}function cD(n,e){var t;return t=e,!!VV(n,t)}function AU(n,e){this.c=n,DD.call(this,n,e)}function iEn(n){this.c=n,FO.call(this,IM,0)}function rEn(n,e){Voe.call(this,n,n.length,e)}function zue(n,e,t){return u(n.c,69).lk(e,t)}function yE(n,e,t){return u(n.c,69).mk(e,t)}function Uue(n,e,t){return tue(n,u(e,332),t)}function SU(n,e,t){return iue(n,u(e,332),t)}function Wue(n,e,t){return txn(n,u(e,332),t)}function cEn(n,e,t){return zve(n,u(e,332),t)}function M5(n,e){return e==null?null:ab(n.b,e)}function PU(n){return G0(n)?(_n(n),n):n.ke()}function jE(n){return!isNaN(n)&&!isFinite(n)}function uEn(n){$f(),this.a=(Pn(),new Wp(n))}function b8(n){h3(),this.d=n,this.a=new gw}function ks(n,e,t){this.a=n,this.b=e,this.c=t}function sEn(n,e,t){this.a=n,this.b=e,this.c=t}function oEn(n,e,t){this.d=n,this.b=t,this.a=e}function uD(n){yyn(this),_s(this),Vi(this,n)}function du(n){RO(this),GU(this.c,0,n.Pc())}function fEn(n){Wu(n.a),uPn(n.c,n.b),n.b=null}function hEn(n){this.a=n,nh(),tu(Date.now())}function lEn(){lEn=N,Xin=new Lc,XA=new Lc}function sD(){sD=N,Rin=new iln,Pzn=new rln}function aEn(){aEn=N,Nne=F(Zn,rn,1,0,5,1)}function dEn(){dEn=N,eee=F(Zn,rn,1,0,5,1)}function IU(){IU=N,tee=F(Zn,rn,1,0,5,1)}function $f(){$f=N,new Bq((Pn(),Pn(),cr))}function Xue(n){return FC(),$e((pPn(),Dzn),n)}function Vue(n){return lf(),$e((LSn(),Bzn),n)}function Que(n){return $T(),$e((qAn(),Gzn),n)}function Jue(n){return RC(),$e((GAn(),zzn),n)}function Yue(n){return dM(),$e((IOn(),Uzn),n)}function Zue(n){return _o(),$e(($Sn(),Vzn),n)}function nse(n){return Tu(),$e((FSn(),Jzn),n)}function ese(n){return Yc(),$e((xSn(),Zzn),n)}function tse(n){return SM(),$e((Ukn(),jUn),n)}function ise(n){return Hd(),$e((mPn(),CUn),n)}function rse(n){return K2(),$e((kPn(),MUn),n)}function cse(n){return d6(),$e((yPn(),PUn),n)}function use(n){return Aj(),$e((yAn(),IUn),n)}function sse(n){return _C(),$e((zAn(),WUn),n)}function ose(n){return W5(),$e((NSn(),bWn),n)}function fse(n){return Qi(),$e((JPn(),vWn),n)}function hse(n){return G3(),$e((vPn(),EWn),n)}function lse(n){return qd(),$e((BSn(),PWn),n)}function OU(n,e){if(!n)throw T(new Hn(e))}function ase(n){return Qn(),$e((vIn(),$Wn),n)}function DU(n){xE.call(this,n.d,n.c,n.a,n.b)}function oD(n){xE.call(this,n.d,n.c,n.a,n.b)}function $U(n,e,t){this.b=n,this.c=e,this.a=t}function EE(n,e,t){this.b=n,this.a=e,this.c=t}function bEn(n,e,t){this.a=n,this.b=e,this.c=t}function FU(n,e,t){this.a=n,this.b=e,this.c=t}function wEn(n,e,t){this.a=n,this.b=e,this.c=t}function xU(n,e,t){this.a=n,this.b=e,this.c=t}function gEn(n,e,t){this.b=n,this.a=e,this.c=t}function CE(n,e,t){this.e=e,this.b=n,this.d=t}function dse(n,e,t){return ca(),n.a.Od(e,t),e}function fD(n){var e;return e=new Dln,e.e=n,e}function LU(n){var e;return e=new Zmn,e.b=n,e}function w8(){w8=N,sS=new Fdn,oS=new xdn}function wo(){wo=N,WWn=new pbn,XWn=new vbn}function bse(n){return aT(),$e((EPn(),HWn),n)}function wse(n){return hf(),$e((TPn(),JWn),n)}function gse(n){return lM(),$e((mOn(),cXn),n)}function pse(n){return q2(),$e((yIn(),uXn),n)}function vse(n){return OC(),$e((JAn(),sXn),n)}function mse(n){return F2(),$e((RSn(),oXn),n)}function kse(n){return Vw(),$e((UPn(),ZWn),n)}function yse(n){return Kd(),$e((HSn(),rXn),n)}function jse(n){return VC(),$e((_Sn(),fXn),n)}function Ese(n){return Pa(),$e((GPn(),hXn),n)}function Cse(n){return V8(),$e((WAn(),lXn),n)}function Tse(n){return ya(),$e((KSn(),dXn),n)}function Mse(n){return eM(),$e((TIn(),bXn),n)}function Ase(n){return K8(),$e((XAn(),wXn),n)}function Sse(n){return A7(),$e((EIn(),gXn),n)}function Pse(n){return h4(),$e((jIn(),pXn),n)}function Ise(n){return or(),$e((zOn(),vXn),n)}function Ose(n){return q3(),$e((GSn(),mXn),n)}function Dse(n){return Nh(),$e((qSn(),yXn),n)}function $se(n){return kC(),$e((YAn(),jXn),n)}function Fse(n){return Ss(),$e((WPn(),EXn),n)}function xse(n){return JT(),$e((CIn(),BQn),n)}function Lse(n){return i6(),$e((zSn(),RQn),n)}function Nse(n){return wb(),$e((MPn(),_Qn),n)}function Bse(n){return ur(),$e((XSn(),UQn),n)}function Rse(n){return Zw(),$e((vOn(),HQn),n)}function _se(n){return Rh(),$e((WSn(),qQn),n)}function Kse(n){return z8(),$e((QAn(),GQn),n)}function Hse(n){return oT(),$e((USn(),WQn),n)}function qse(n){return b6(),$e((zPn(),KQn),n)}function Gse(n){return x8(),$e((VAn(),XQn),n)}function zse(n){return Q3(),$e((QSn(),VQn),n)}function Use(n){return uT(),$e((JSn(),QQn),n)}function Wse(n){return dT(),$e((VSn(),JQn),n)}function Xse(n){return _d(),$e((YSn(),hJn),n)}function Vse(n){return z5(),$e((nSn(),wJn),n)}function Qse(n){return xf(),$e((eSn(),jJn),n)}function Jse(n){return tf(),$e((tSn(),CJn),n)}function Yse(n){return No(),$e((ZAn(),RJn),n)}function Zse(n){return Id(),$e((iSn(),UJn),n)}function noe(n){return c4(),$e((jPn(),WJn),n)}function eoe(n){return k6(),$e((MIn(),VJn),n)}function toe(n){return aC(),$e((uSn(),fYn),n)}function ioe(n){return iT(),$e((cSn(),wYn),n)}function roe(n){return gC(),$e((rSn(),hYn),n)}function coe(n){return CT(),$e((ZSn(),pYn),n)}function uoe(n){return $C(),$e((sSn(),vYn),n)}function soe(n){return f7(),$e((nPn(),mYn),n)}function ooe(n){return qT(),$e((CPn(),FYn),n)}function foe(n){return sT(),$e((tPn(),xYn),n)}function hoe(n){return ET(),$e((ePn(),LYn),n)}function loe(n){return g4(),$e((QPn(),tZn),n)}function aoe(n){return w7(),$e((iPn(),iZn),n)}function doe(n){return Pj(),$e((mAn(),rZn),n)}function boe(n){return Ij(),$e((vAn(),uZn),n)}function woe(n){return L8(),$e((fSn(),sZn),n)}function goe(n){return P7(),$e((XPn(),oZn),n)}function poe(n){return Jv(),$e((kAn(),CZn),n)}function voe(n){return c7(),$e((oSn(),TZn),n)}function moe(n){return Ho(),$e((VPn(),OZn),n)}function koe(n){return y1(),$e((kOn(),$Zn),n)}function yoe(n){return fh(),$e((kIn(),FZn),n)}function joe(n){return vb(),$e((mIn(),_Zn),n)}function Eoe(n){return rr(),$e((Wkn(),RWn),n)}function Coe(n){return B3(),$e((UAn(),BWn),n)}function Toe(n){return sr(),$e((YPn(),ene),n)}function Moe(n){return of(),$e((cPn(),tne),n)}function Aoe(n){return Hh(),$e((PPn(),ine),n)}function Soe(n){return ZT(),$e((SIn(),rne),n)}function Poe(n){return _h(),$e((rPn(),une),n)}function Ioe(n){return us(),$e((SPn(),one),n)}function Ooe(n){return jb(),$e((POn(),fne),n)}function Doe(n){return qw(),$e((ZPn(),hne),n)}function $oe(n){return Mi(),$e((bIn(),lne),n)}function Foe(n){return Mu(),$e((AIn(),ane),n)}function xoe(n){return Qu(),$e((OPn(),vne),n)}function Loe(n){return Lu(),$e((UOn(),mne),n)}function Noe(n){return J(),$e((nIn(),dne),n)}function Boe(n){return AT(),$e((IPn(),kne),n)}function Roe(n){return Vu(),$e((APn(),Ene),n)}function _oe(n){return d4(),$e((yOn(),Lne),n)}function Koe(n,e){return _n(n),n+(_n(e),e)}function Hoe(n,e){return nh(),me(R(n.a),e)}function qoe(n,e){return nh(),me(R(n.a),e)}function hD(n,e){this.c=n,this.a=e,this.b=e-n}function pEn(n,e,t){this.a=n,this.b=e,this.c=t}function NU(n,e,t){this.a=n,this.b=e,this.c=t}function BU(n,e,t){this.a=n,this.b=e,this.c=t}function vEn(n,e,t){this.a=n,this.b=e,this.c=t}function mEn(n,e,t){this.a=n,this.b=e,this.c=t}function s1(n,e,t){this.e=n,this.a=e,this.c=t}function kEn(n,e,t){ms(),QW.call(this,n,e,t)}function lD(n,e,t){ms(),FW.call(this,n,e,t)}function RU(n,e,t){ms(),FW.call(this,n,e,t)}function _U(n,e,t){ms(),FW.call(this,n,e,t)}function yEn(n,e,t){ms(),lD.call(this,n,e,t)}function KU(n,e,t){ms(),lD.call(this,n,e,t)}function jEn(n,e,t){ms(),KU.call(this,n,e,t)}function EEn(n,e,t){ms(),RU.call(this,n,e,t)}function CEn(n,e,t){ms(),_U.call(this,n,e,t)}function g8(n,e){return pe(n),pe(e),new z8n(n,e)}function v2(n,e){return pe(n),pe(e),new NEn(n,e)}function Goe(n,e){return pe(n),pe(e),new BEn(n,e)}function zoe(n,e){return pe(n),pe(e),new W8n(n,e)}function u(n,e){return A5(n==null||WF(n,e)),n}function f3(n){var e;return e=new X,_$(e,n),e}function Uoe(n){var e;return e=new hi,_$(e,n),e}function TEn(n){var e;return e=new Wq,nF(e,n),e}function p8(n){var e;return e=new Tt,nF(e,n),e}function Woe(n){return!n.e&&(n.e=new X),n.e}function Xoe(n){return!n.c&&(n.c=new Bp),n.c}function W(n,e){return n.c[n.c.length]=e,!0}function MEn(n,e){this.c=n,this.b=e,this.a=!1}function HU(n){this.d=n,Ovn(this),this.b=_fe(n.d)}function AEn(){this.a=";,;",this.b="",this.c=""}function Voe(n,e,t){SCn.call(this,e,t),this.a=n}function SEn(n,e,t){this.b=n,Hkn.call(this,e,t)}function qU(n,e,t){this.c=n,Nj.call(this,e,t)}function GU(n,e,t){aY(t,0,n,e,t.length,!1)}function th(n,e,t,i,r){n.b=e,n.c=t,n.d=i,n.a=r}function Qoe(n,e){e&&(n.b=e,n.a=(fl(e),e.a))}function zU(n,e,t,i,r){n.d=e,n.c=t,n.a=i,n.b=r}function UU(n){var e,t;e=n.b,t=n.c,n.b=t,n.c=e}function WU(n){var e,t;t=n.d,e=n.a,n.d=e,n.a=t}function XU(n){return bl(the(Fr(n)?Ks(n):n))}function Joe(n,e){return Wc(GEn(n.d),GEn(e.d))}function Yoe(n,e){return e==(J(),Gn)?n.c:n.d}function h3(){h3=N,don=(J(),Gn),dP=Vn}function PEn(){this.b=K(Y(cn((Go(),xR))))}function IEn(n){return ca(),F(Zn,rn,1,n,5,1)}function Zoe(n){return new fn(n.c+n.b,n.d+n.a)}function nfe(n,e){return Sj(),Wc(n.d.p,e.d.p)}function aD(n){return ne(n.b!=0),Ts(n,n.a.a)}function efe(n){return ne(n.b!=0),Ts(n,n.c.b)}function VU(n,e){if(!n)throw T(new R9n(e))}function TE(n,e){if(!n)throw T(new Hn(e))}function QU(n,e,t){t3.call(this,n,e),this.b=t}function v8(n,e,t){lz.call(this,n,e),this.c=t}function OEn(n,e,t){oIn.call(this,e,t),this.d=n}function JU(n){IU(),Yy.call(this),this.th(n)}function DEn(n,e,t){this.a=n,Ew.call(this,e,t)}function $En(n,e,t){this.a=n,Ew.call(this,e,t)}function ME(n,e,t){lz.call(this,n,e),this.c=t}function FEn(){T3(),khe.call(this,(Z1(),uo))}function xEn(n){return n!=null&&!$F(n,a9,d9)}function tfe(n,e){return(GDn(n)<<4|GDn(e))&Ut}function ife(n,e){return QE(),ex(n,e),new oTn(n,e)}function sa(n,e){var t;n.n&&(t=e,W(n.f,t))}function l3(n,e,t){var i;i=new Z0(t),Ro(n,e,i)}function rfe(n,e){var t;return t=n.c,wV(n,e),t}function YU(n,e){return e<0?n.g=-1:n.g=e,n}function AE(n,e){return H0e(n),n.a*=e,n.b*=e,n}function LEn(n,e,t,i,r){n.c=e,n.d=t,n.b=i,n.a=r}function Ke(n,e){return Kt(n,e,n.c.b,n.c),!0}function ZU(n){n.a.b=n.b,n.b.a=n.a,n.a=n.b=null}function dD(n){this.b=n,this.a=Ed(this.b.a).Ed()}function NEn(n,e){this.b=n,this.a=e,TI.call(this)}function BEn(n,e){this.a=n,this.b=e,TI.call(this)}function REn(n,e){SCn.call(this,e,1040),this.a=n}function m8(n){return n==0||isNaN(n)?n:n<0?-1:1}function cfe(n){return C2(),hh(n)==Pt(ml(n))}function ufe(n){return C2(),ml(n)==Pt(hh(n))}function jd(n,e){return v6(n,new t3(e.a,e.b))}function sfe(n){return!Xi(n)&&n.c.i.c==n.d.i.c}function SE(n){var e;return e=n.n,n.a.b+e.d+e.a}function _En(n){var e;return e=n.n,n.e.b+e.d+e.a}function nW(n){var e;return e=n.n,n.e.a+e.b+e.c}function KEn(n){return Je(),new ih(0,n)}function ofe(n){return n.a?n.a:WD(n)}function A5(n){if(!n)throw T(new Up(null))}function HEn(){HEn=N,mH=(Pn(),new OI(XB))}function PE(){PE=N,new JQ((HI(),uR),(qI(),cR))}function qEn(){qEn=N,jin=F(Wi,q,19,256,0,1)}function bD(n,e,t,i){MQ.call(this,n,e,t,i,0,0)}function ffe(n,e,t){return it(n.b,u(t.b,17),e)}function hfe(n,e,t){return it(n.b,u(t.b,17),e)}function lfe(n,e){return W(n,new fn(e.a,e.b))}function afe(n,e){return n.c=e)throw T(new qq)}function Xfe(n,e,t){return St(e,0,rW(e[0],t[0])),e}function Vfe(n,e,t){e.Ye(t,K(Y(te(n.b,t)))*n.a)}function ACn(n,e,t){return eg(),R3(n,e)&&R3(n,t)}function D5(n){return Mu(),!n.Hc(n1)&&!n.Hc(Gl)}function qE(n){return new fn(n.c+n.b/2,n.d+n.a/2)}function MD(n,e){return e.kh()?pl(n.b,u(e,49)):e}function kW(n,e){this.e=n,this.d=e&64?e|Bf:e}function SCn(n,e){this.c=0,this.d=n,this.b=e|64|Bf}function GE(n){this.b=new Pc(11),this.a=(Ow(),n)}function AD(n){this.b=null,this.a=(Ow(),n||Lin)}function PCn(n){this.a=Y$n(n.a),this.b=new du(n.b)}function ICn(n){this.b=n,b2.call(this,n),$yn(this)}function OCn(n){this.b=n,u8.call(this,n),Fyn(this)}function Y0(n,e,t){this.a=n,g2.call(this,e,t,5,6)}function yW(n,e,t,i){this.b=n,Yt.call(this,e,t,i)}function gi(n,e,t,i,r){D$.call(this,n,e,t,i,r,-1)}function $5(n,e,t,i,r){R8.call(this,n,e,t,i,r,-1)}function V(n,e,t,i){Yt.call(this,n,e,t),this.b=i}function zE(n,e,t,i){v8.call(this,n,e,t),this.b=i}function DCn(n){xkn.call(this,n,!1),this.a=!1}function $Cn(n,e){this.b=n,bvn.call(this,n.b),this.a=e}function FCn(n,e){nb(),Yie.call(this,n,mT(new Hu(e)))}function UE(n,e){return Je(),new xW(n,e,0)}function SD(n,e){return Je(),new xW(6,n,e)}function Qfe(n,e){return Mn(n.substr(0,e.length),e)}function Uu(n,e){return ki(e)?QD(n,e):!!Sr(n.f,e)}function Oi(n,e){for(_n(e);n.Ob();)e.td(n.Pb())}function Pw(n,e,t){jl(),this.e=n,this.d=e,this.a=t}function o1(n,e,t,i){var r;r=n.i,r.i=e,r.a=t,r.b=i}function jW(n){var e;for(e=n;e.f;)e=e.f;return e}function y2(n){var e;return e=t6(n),ne(e!=null),e}function Jfe(n){var e;return e=Lge(n),ne(e!=null),e}function d3(n,e){var t;return t=n.a.gc(),$X(e,t),t-e}function EW(n,e){var t;for(t=0;t0?y.Math.log(n/e):-100}function xCn(n,e){return fc(n,e)<0?-1:fc(n,e)>0?1:0}function SW(n,e,t){return MRn(n,u(e,46),u(t,167))}function LCn(n,e){return u(vW(Ed(n.a)).Xb(e),42).cd()}function uhe(n,e){return P0e(e,n.length),new REn(n,e)}function DD(n,e){this.d=n,ie.call(this,n),this.e=e}function Cd(n){this.d=(_n(n),n),this.a=0,this.c=IM}function PW(n,e){cd.call(this,1),this.a=n,this.b=e}function NCn(n,e){return n.c?NCn(n.c,e):W(n.b,e),n}function she(n,e,t){var i;return i=ub(n,e),g$(n,e,t),i}function IW(n,e){var t;return t=n.slice(0,e),WX(t,n)}function BCn(n,e,t){var i;for(i=0;i=n.g}function KD(n,e,t){var i;return i=Y$(n,e,t),rZ(n,i)}function j2(n,e){var t;t=n.a.length,ub(n,t),g$(n,t,e)}function ZCn(n,e){var t;t=console[n],t.call(console,e)}function nTn(n,e){var t;++n.j,t=n.Vi(),n.Ii(n.oi(t,e))}function mhe(n,e,t){u(e.b,65),Zc(e.a,new NU(n,t,e))}function FW(n,e,t){uj.call(this,e),this.a=n,this.b=t}function xW(n,e,t){cd.call(this,n),this.a=e,this.b=t}function LW(n,e,t){this.a=n,xq.call(this,e),this.b=t}function eTn(n,e,t){this.a=n,aX.call(this,8,e,null,t)}function khe(n){this.a=(_n(xe),xe),this.b=n,new tG}function tTn(n){this.c=n,this.b=this.c.a,this.a=this.c.e}function NW(n){this.c=n,this.b=n.a.d.a,rU(n.a.e,this)}function Wu(n){z0(n.c!=-1),n.d.$c(n.c),n.b=n.c,n.c=-1}function L5(n){return y.Math.sqrt(n.a*n.a+n.b*n.b)}function Md(n,e){return a3(e,n.a.c.length),un(n.a,e)}function Ff(n,e){return B(n)===B(e)||n!=null&&tt(n,e)}function yhe(n){return 0>=n?new PG:sbe(n-1)}function jhe(n){return aw?QD(aw,n):!1}function iTn(n){return n?n.dc():!n.Kc().Ob()}function Gi(n){return!n.a&&n.c?n.c.b:n.a}function Ehe(n){return!n.a&&(n.a=new Yt(zl,n,4)),n.a}function Ad(n){return!n.d&&(n.d=new Yt(ar,n,1)),n.d}function _n(n){if(n==null)throw T(new Nv);return n}function N5(n){n.c?n.c.He():(n.d=!0,S8e(n))}function fl(n){n.c?fl(n.c):(Ta(n),n.d=!0)}function rTn(n){KW(n.a),n.b=F(Zn,rn,1,n.b.length,5,1)}function Che(n,e){return Wc(e.j.c.length,n.j.c.length)}function The(n,e){n.c<0||n.b.b=0?n.Bh(t):bY(n,e)}function cTn(n){var e,t;return e=n.c.i.c,t=n.d.i.c,e==t}function Ahe(n){if(n.p!=4)throw T(new fu);return n.e}function She(n){if(n.p!=3)throw T(new fu);return n.e}function Phe(n){if(n.p!=6)throw T(new fu);return n.f}function Ihe(n){if(n.p!=6)throw T(new fu);return n.k}function Ohe(n){if(n.p!=3)throw T(new fu);return n.j}function Dhe(n){if(n.p!=4)throw T(new fu);return n.j}function BW(n){return!n.b&&(n.b=new sj(new KI)),n.b}function Sd(n){return n.c==-2&&Pte(n,Qve(n.g,n.b)),n.c}function g3(n,e){var t;return t=LD("",n),t.n=e,t.i=1,t}function $he(n,e){yD(u(e.b,65),n),Zc(e.a,new Aq(n))}function Fhe(n,e){me((!n.a&&(n.a=new l8(n,n)),n.a),e)}function uTn(n,e){this.b=n,DD.call(this,n,e),$yn(this)}function sTn(n,e){this.b=n,AU.call(this,n,e),Fyn(this)}function RW(n,e,t,i){bd.call(this,n,e),this.d=t,this.a=i}function VE(n,e,t,i){bd.call(this,n,t),this.a=e,this.f=i}function oTn(n,e){bce.call(this,obe(pe(n),pe(e))),this.a=e}function fTn(){UJ.call(this,Ka,(a8n(),hee)),tEe(this)}function hTn(){UJ.call(this,Vs,(Qp(),g1n)),lje(this)}function lTn(){Oe.call(this,"DELAUNAY_TRIANGULATION",0)}function xhe(n){return String.fromCharCode.apply(null,n)}function it(n,e,t){return ki(e)?yr(n,e,t):_c(n.f,e,t)}function _W(n){return Pn(),n?n.ve():(Ow(),Ow(),Bin)}function Lhe(n,e,t){return L2(),t.pg(n,u(e.cd(),146))}function aTn(n,e){return PE(),new JQ(new Wyn(n),new Uyn(e))}function Nhe(n){return rs(n,AL),KC(qi(qi(5,n),n/10|0))}function QE(){QE=N,fzn=new GI(A(M(Ha,1),OM,42,0,[]))}function dTn(n){return!n.d&&(n.d=new _p(n.c.Cc())),n.d}function p3(n){return!n.a&&(n.a=new W9n(n.c.vc())),n.a}function bTn(n){return!n.b&&(n.b=new Wp(n.c.ec())),n.b}function ch(n,e){for(;e-- >0;)n=n<<1|(n<0?1:0);return n}function pc(n,e){return B(n)===B(e)||n!=null&&tt(n,e)}function Bhe(n,e){return qn(),u(e.b,19).ai&&++i,i}function Oh(n){var e,t;return t=(e=new ud,e),O3(t,n),t}function UD(n){var e,t;return t=(e=new ud,e),VJ(t,n),t}function Zhe(n,e){var t;return t=te(n.f,e),MV(e,t),null}function WD(n){var e;return e=hbe(n),e||null}function CTn(n){return!n.b&&(n.b=new V(bi,n,12,3)),n.b}function n1e(n){return n!=null&&_9(tI,n.toLowerCase())}function e1e(n,e){return ni(bu(n)*zu(n),bu(e)*zu(e))}function t1e(n,e){return ni(bu(n)*zu(n),bu(e)*zu(e))}function i1e(n,e){return ni(n.d.c+n.d.b/2,e.d.c+e.d.b/2)}function r1e(n,e){return ni(n.g.c+n.g.b/2,e.g.c+e.g.b/2)}function TTn(n,e,t){t.a?eu(n,e.b-n.f/2):nu(n,e.a-n.g/2)}function MTn(n,e,t,i){this.a=n,this.b=e,this.c=t,this.d=i}function ATn(n,e,t,i){this.a=n,this.b=e,this.c=t,this.d=i}function ha(n,e,t,i){this.e=n,this.a=e,this.c=t,this.d=i}function STn(n,e,t,i){this.a=n,this.c=e,this.d=t,this.b=i}function PTn(n,e,t,i){ms(),ySn.call(this,e,t,i),this.a=n}function ITn(n,e,t,i){ms(),ySn.call(this,e,t,i),this.a=n}function OTn(n,e){this.a=n,hue.call(this,n,u(n.d,15).Zc(e))}function XD(n){this.f=n,this.c=this.f.e,n.f>0&&qFn(this)}function DTn(n,e,t,i){this.b=n,this.c=i,FO.call(this,e,t)}function $Tn(n){return ne(n.b=0&&Mn(n.substr(t,e.length),e)}function hl(n,e,t,i,r,c,o){return new v$(n.e,e,t,i,r,c,o)}function QTn(n,e,t,i,r,c){this.a=n,z$.call(this,e,t,i,r,c)}function JTn(n,e,t,i,r,c){this.a=n,z$.call(this,e,t,i,r,c)}function YTn(n,e){this.g=n,this.d=A(M(mh,1),E1,10,0,[e])}function f1(n,e){this.e=n,this.a=Zn,this.b=yBn(e),this.c=e}function ZTn(n,e){kE.call(this),eV(this),this.a=n,this.c=e}function M8(n,e,t,i){St(n.c[e.g],t.g,i),St(n.c[t.g],e.g,i)}function ZD(n,e,t,i){St(n.c[e.g],e.g,t),St(n.b[e.g],e.g,i)}function M1e(){return x8(),A(M(ron,1),z,376,0,[uK,iy])}function A1e(){return K8(),A(M(Qcn,1),z,479,0,[Vcn,xS])}function S1e(){return V8(),A(M(Wcn,1),z,419,0,[$S,Ucn])}function P1e(){return OC(),A(M(Rcn,1),z,422,0,[Bcn,s_])}function I1e(){return kC(),A(M(fun,1),z,420,0,[j_,oun])}function O1e(){return z8(),A(M(non,1),z,421,0,[iK,rK])}function D1e(){return z5(),A(M(bJn,1),z,523,0,[Hm,Km])}function $1e(){return No(),A(M(BJn,1),z,520,0,[tw,Bl])}function F1e(){return xf(),A(M(yJn,1),z,516,0,[M0,I1])}function x1e(){return tf(),A(M(EJn,1),z,515,0,[Ja,yf])}function L1e(){return Id(),A(M(zJn,1),z,455,0,[Rl,Lg])}function N1e(){return gC(),A(M(Son,1),z,425,0,[yK,Aon])}function B1e(){return aC(),A(M(Mon,1),z,480,0,[kK,Ton])}function R1e(){return iT(),A(M(Pon,1),z,495,0,[EP,mv])}function _1e(){return $C(),A(M(Oon,1),z,426,0,[Ion,TK])}function K1e(){return c7(),A(M(Ffn,1),z,429,0,[DP,$fn])}function H1e(){return L8(),A(M(afn,1),z,430,0,[FK,IP])}function q1e(){return $T(),A(M(Jin,1),z,428,0,[yR,Qin])}function G1e(){return RC(),A(M(Zin,1),z,427,0,[Yin,jR])}function z1e(){return _C(),A(M(Arn,1),z,424,0,[$R,tS])}function U1e(){return B3(),A(M(NWn,1),z,511,0,[_k,UR])}function sC(n,e,t,i){return t>=0?n.jh(e,t,i):n.Sg(null,t,i)}function n$(n){return n.b.b==0?n.a.$e():aD(n.b)}function W1e(n){if(n.p!=5)throw T(new fu);return ge(n.f)}function X1e(n){if(n.p!=5)throw T(new fu);return ge(n.k)}function VW(n){return B(n.a)===B((eF(),gH))&&Vje(n),n.a}function nMn(n){this.a=u(pe(n),271),this.b=(Pn(),new Hz(n))}function eMn(n,e){bte(this,new fn(n.a,n.b)),wte(this,p8(e))}function Id(){Id=N,Rl=new iz(Y2,0),Lg=new iz(Z2,1)}function xf(){xf=N,M0=new ez(Z2,0),I1=new ez(Y2,1)}function Od(){rie.call(this,new s2(sb(12))),Bz(!0),this.a=2}function e$(n,e,t){Je(),cd.call(this,n),this.b=e,this.a=t}function QW(n,e,t){ms(),uj.call(this,e),this.a=n,this.b=t}function tMn(n){kE.call(this),eV(this),this.a=n,this.c=!0}function iMn(n){var e;e=n.c.d.b,n.b=e,n.a=n.c.d,e.a=n.c.d.b=n}function oC(n){var e;ebe(n.a),byn(n.a),e=new tj(n.a),TQ(e)}function V1e(n,e){aBn(n,!0),Zc(n.e.wf(),new $U(n,!0,e))}function fC(n,e){return LAn(e),Y0e(n,F(be,Le,25,e,15,1),e)}function Q1e(n,e){return C2(),n==Pt(hh(e))||n==Pt(ml(e))}function vc(n,e){return e==null?Vr(Sr(n.f,null)):n5(n.g,e)}function J1e(n){return n.b==0?null:(ne(n.b!=0),Ts(n,n.a.a))}function Gt(n){return Math.max(Math.min(n,nt),-2147483648)|0}function Y1e(n,e){var t=lR[n.charCodeAt(0)];return t??n}function hC(n,e){return tC(n,"set1"),tC(e,"set2"),new Z8n(n,e)}function Z1e(n,e){var t;return t=W0e(n.f,e),st(vE(t),n.f.d)}function R5(n,e){var t,i;return t=e,i=new dI,n_n(n,t,i),i.d}function t$(n,e,t,i){var r;r=new Gjn,e.a[t.g]=r,m2(n.b,i,r)}function JW(n,e,t){var i;i=n.Yg(e),i>=0?n.sh(i,t):_Y(n,e,t)}function Dw(n,e,t){dC(),n&&it(dH,n,e),n&&it($y,n,t)}function rMn(n,e,t){this.i=new X,this.b=n,this.g=e,this.a=t}function lC(n,e,t){this.c=new X,this.e=n,this.f=e,this.b=t}function YW(n,e,t){this.a=new X,this.e=n,this.f=e,this.c=t}function cMn(n,e){oE(this),this.f=e,this.g=n,eC(this),this._d()}function A8(n,e){var t;t=n.q.getHours(),n.q.setDate(e),S6(n,t)}function uMn(n,e){var t;for(pe(e),t=n.a;t;t=t.c)e.Od(t.g,t.i)}function sMn(n){var e;return e=new kj(sb(n.length)),qV(e,n),e}function nle(n){function e(){}return e.prototype=n||{},new e}function ele(n,e){return LOn(n,e)?(FIn(n),!0):!1}function Dh(n,e){if(e==null)throw T(new Nv);return Y2e(n,e)}function tle(n){if(n.qe())return null;var e=n.n;return RA[e]}function S8(n){return n.Db>>16!=3?null:u(n.Cb,33)}function ef(n){return n.Db>>16!=9?null:u(n.Cb,33)}function oMn(n){return n.Db>>16!=6?null:u(n.Cb,79)}function fMn(n){return n.Db>>16!=7?null:u(n.Cb,235)}function hMn(n){return n.Db>>16!=7?null:u(n.Cb,160)}function Pt(n){return n.Db>>16!=11?null:u(n.Cb,33)}function lMn(n,e){var t;return t=n.Yg(e),t>=0?n.lh(t):Ox(n,e)}function aMn(n,e){var t;return t=new iW(e),dxn(t,n),new du(t)}function ZW(n){var e;return e=n.d,e=n.si(n.f),me(n,e),e.Ob()}function dMn(n,e){return n.b+=e.b,n.c+=e.c,n.d+=e.d,n.a+=e.a,n}function i$(n,e){return y.Math.abs(n)0}function bMn(){this.a=new Sh,this.e=new hi,this.g=0,this.i=0}function wMn(n){this.a=n,this.b=F(lJn,q,1944,n.e.length,0,2)}function r$(n,e,t){var i;i=tDn(n,e,t),n.b=new tT(i.c.length)}function tf(){tf=N,Ja=new nz(hN,0),yf=new nz("UP",1)}function aC(){aC=N,kK=new rz(PHn,0),Ton=new rz("FAN",1)}function dC(){dC=N,dH=new we,$y=new we,Ere(Azn,new z2n)}function rle(n){if(n.p!=0)throw T(new fu);return b5(n.f,0)}function cle(n){if(n.p!=0)throw T(new fu);return b5(n.k,0)}function gMn(n){return n.Db>>16!=3?null:u(n.Cb,147)}function y3(n){return n.Db>>16!=6?null:u(n.Cb,235)}function eb(n){return n.Db>>16!=17?null:u(n.Cb,26)}function pMn(n,e){var t=n.a=n.a||[];return t[e]||(t[e]=n.le(e))}function ule(n,e){var t;return t=n.a.get(e),t??new Array}function sle(n,e){var t;t=n.q.getHours(),n.q.setMonth(e),S6(n,t)}function yr(n,e,t){return e==null?_c(n.f,null,t):Gd(n.g,e,t)}function _5(n,e,t,i,r,c){return new Lh(n.e,e,n.aj(),t,i,r,c)}function P8(n,e,t){return n.a=Zu(n.a,0,e)+(""+t)+r8(n.a,e),n}function ole(n,e,t){return W(n.a,(QE(),ex(e,t),new bd(e,t))),n}function nX(n){return _z(n.c),n.e=n.a=n.c,n.c=n.c.c,++n.d,n.a.f}function vMn(n){return _z(n.e),n.c=n.a=n.e,n.e=n.e.e,--n.d,n.a.f}function Ci(n,e){n.d&&Jc(n.d.e,n),n.d=e,n.d&&W(n.d.e,n)}function Hi(n,e){n.c&&Jc(n.c.g,n),n.c=e,n.c&&W(n.c.g,n)}function jr(n,e){n.c&&Jc(n.c.a,n),n.c=e,n.c&&W(n.c.a,n)}function Hr(n,e){n.i&&Jc(n.i.j,n),n.i=e,n.i&&W(n.i.j,n)}function mMn(n,e,t){this.a=e,this.c=n,this.b=(pe(t),new du(t))}function kMn(n,e,t){this.a=e,this.c=n,this.b=(pe(t),new du(t))}function yMn(n,e){this.a=n,this.c=Qr(this.a),this.b=new uC(e)}function fle(n){var e;return Ta(n),e=new hi,gt(n,new Vvn(e))}function tb(n,e){if(n<0||n>e)throw T(new mr(cnn+n+unn+e))}function eX(n,e){return lCn(n.a,e)?TW(n,u(e,22).g,null):null}function hle(n){return yF(),qn(),u(n.a,81).d.e!=0}function jMn(){jMn=N,azn=Fe((aj(),A(M(lzn,1),z,538,0,[fR])))}function EMn(){EMn=N,YQn=Eu(new li,(Qi(),Or),(rr(),Kk))}function tX(){tX=N,ZQn=Eu(new li,(Qi(),Or),(rr(),Kk))}function CMn(){CMn=N,eJn=Eu(new li,(Qi(),Or),(rr(),Kk))}function TMn(){TMn=N,gJn=Ze(new li,(Qi(),Or),(rr(),km))}function ns(){ns=N,mJn=Ze(new li,(Qi(),Or),(rr(),km))}function MMn(){MMn=N,kJn=Ze(new li,(Qi(),Or),(rr(),km))}function c$(){c$=N,TJn=Ze(new li,(Qi(),Or),(rr(),km))}function AMn(){AMn=N,lYn=Eu(new li,(c4(),Gm),(k6(),lK))}function aa(n,e,t,i){this.c=n,this.d=i,s$(this,e),o$(this,t)}function M2(n){this.c=new Tt,this.b=n.b,this.d=n.c,this.a=n.a}function u$(n){this.a=y.Math.cos(n),this.b=y.Math.sin(n)}function s$(n,e){n.a&&Jc(n.a.k,n),n.a=e,n.a&&W(n.a.k,n)}function o$(n,e){n.b&&Jc(n.b.f,n),n.b=e,n.b&&W(n.b.f,n)}function SMn(n,e){mhe(n,n.b,n.c),u(n.b.b,65),e&&u(e.b,65).b}function lle(n,e){vQ(n,e),I(n.Cb,88)&&yb(Ou(u(n.Cb,88)),2)}function f$(n,e){I(n.Cb,88)&&yb(Ou(u(n.Cb,88)),4),Ic(n,e)}function bC(n,e){I(n.Cb,179)&&(u(n.Cb,179).tb=null),Ic(n,e)}function mc(n,e){return er(),R$(e)?new IE(e,n):new i8(e,n)}function ale(n,e){var t,i;t=e.c,i=t!=null,i&&j2(n,new Z0(e.c))}function PMn(n){var e,t;return t=(Qp(),e=new ud,e),O3(t,n),t}function IMn(n){var e,t;return t=(Qp(),e=new ud,e),O3(t,n),t}function OMn(n,e){var t;return t=new Rs(n),e.c[e.c.length]=t,t}function DMn(n,e){var t;return t=u(ab(T2(n.a),e),14),t?t.gc():0}function $Mn(n){var e;return Ta(n),e=(Ow(),Ow(),Nin),qC(n,e)}function FMn(n){for(var e;;)if(e=n.Pb(),!n.Ob())return e}function iX(n,e){tie.call(this,new s2(sb(n))),rs(e,W_n),this.a=e}function uh(n,e,t){KDn(e,t,n.gc()),this.c=n,this.a=e,this.b=t-e}function xMn(n,e,t){var i;KDn(e,t,n.c.length),i=t-e,AG(n.c,e,i)}function dle(n,e){Dyn(n,ge(ui(cl(e,24),FM)),ge(ui(e,FM)))}function Ln(n,e){if(n<0||n>=e)throw T(new mr(cnn+n+unn+e))}function Te(n,e){if(n<0||n>=e)throw T(new wG(cnn+n+unn+e))}function xn(n,e){this.b=(_n(n),n),this.a=e&Ib?e:e|64|Bf}function LMn(n){dyn(this),Wmn(this.a,KV(y.Math.max(8,n))<<1)}function rf(n){return Gr(A(M(di,1),q,8,0,[n.i.n,n.n,n.a]))}function ble(){return lf(),A(M(Bu,1),z,132,0,[Win,ls,Rb])}function wle(){return _o(),A(M(_b,1),z,232,0,[Zr,Fc,nc])}function gle(){return Tu(),A(M(Qzn,1),z,461,0,[Vf,Ol,Co])}function ple(){return Yc(),A(M(Yzn,1),z,462,0,[Wo,Dl,To])}function vle(){return qd(),A(M(zrn,1),z,423,0,[yg,Grn,qR])}function mle(){return W5(),A(M(Krn,1),z,379,0,[NR,LR,BR])}function kle(){return i6(),A(M(Gsn,1),z,378,0,[J_,qsn,oP])}function yle(){return F2(),A(M(Kcn,1),z,314,0,[ap,qk,_cn])}function jle(){return VC(),A(M(qcn,1),z,337,0,[Hcn,DS,o_])}function Ele(){return ya(),A(M(aXn,1),z,450,0,[l_,cv,Tg])}function Cle(){return Kd(),A(M(YR,1),z,361,0,[g0,Fl,w0])}function Tle(){return Nh(),A(M(kXn,1),z,303,0,[zk,Ag,dp])}function Mle(){return q3(),A(M(y_,1),z,292,0,[m_,k_,Gk])}function Ale(){return ur(),A(M(zQn,1),z,452,0,[Bm,Su,xc])}function Sle(){return Rh(),A(M(Zsn,1),z,339,0,[Nl,Ysn,tK])}function Ple(){return oT(),A(M(ion,1),z,375,0,[eon,cK,ton])}function Ile(){return dT(),A(M(hon,1),z,377,0,[fK,pv,ew])}function Ole(){return Q3(),A(M(uon,1),z,336,0,[sK,con,Rm])}function Dle(){return uT(),A(M(fon,1),z,338,0,[oon,oK,son])}function $le(){return _d(),A(M(fJn,1),z,454,0,[ry,_m,aP])}function Fle(){return CT(),A(M(gYn,1),z,442,0,[CK,jK,EK])}function xle(){return f7(),A(M(Fon,1),z,380,0,[CP,Don,$on])}function Lle(){return ET(),A(M(Yon,1),z,381,0,[Jon,IK,Qon])}function Nle(){return sT(),A(M(Xon,1),z,293,0,[PK,Won,Uon])}function Ble(){return w7(),A(M(OK,1),z,437,0,[AP,SP,PP])}function Rle(){return _h(),A(M(Khn,1),z,334,0,[HP,F1,i9])}function _le(){return of(),A(M(Phn,1),z,272,0,[jv,cw,Ev])}function Kle(n,e){return o9e(n,e,I(e,99)&&(u(e,18).Bb&Yi)!=0)}function Hle(n,e,t){var i;return i=O6(n,e,!1),i.b<=e&&i.a<=t}function NMn(n,e,t){var i;i=new Jwn,i.b=e,i.a=t,++e.b,W(n.d,i)}function qle(n,e){var t;return t=(_n(n),n).g,Yz(!!t),_n(e),t(e)}function rX(n,e){var t,i;return i=d3(n,e),t=n.a.Zc(i),new Y8n(n,t)}function Gle(n){return n.Db>>16!=6?null:u(Fx(n),235)}function zle(n){if(n.p!=2)throw T(new fu);return ge(n.f)&Ut}function Ule(n){if(n.p!=2)throw T(new fu);return ge(n.k)&Ut}function Wle(n){return n.a==(T3(),uI)&&Ste(n,C9e(n.g,n.b)),n.a}function A2(n){return n.d==(T3(),uI)&&Ite(n,pke(n.g,n.b)),n.d}function j(n){return ne(n.ai?1:0}function BMn(n,e){var t,i;return t=F$(e),i=t,u(te(n.c,i),19).a}function RMn(n,e){var t;for(t=n+"";t.length0&&n.a[--n.d]==0;);n.a[n.d++]==0&&(n.e=0)}function rAn(n){return n.a?n.e.length==0?n.a.a:n.a.a+(""+n.e):n.c}function rae(n){return!!n.a&&Du(n.a.a).i!=0&&!(n.b&&YF(n.b))}function cae(n){return!!n.u&&bc(n.u.a).i!=0&&!(n.n&&JF(n.n))}function cAn(n){return gD(n.e.Hd().gc()*n.c.Hd().gc(),16,new tvn(n))}function uae(n,e){return xCn(tu(n.q.getTime()),tu(e.q.getTime()))}function Lf(n){return u(af(n,F(GR,MN,17,n.c.length,0,1)),474)}function I8(n){return u(af(n,F(mh,E1,10,n.c.length,0,1)),193)}function sae(n){return ns(),!Xi(n)&&!(!Xi(n)&&n.c.i.c==n.d.i.c)}function uAn(n,e,t){var i;i=(pe(n),new du(n)),N3e(new mMn(i,e,t))}function O8(n,e,t){var i;i=(pe(n),new du(n)),B3e(new kMn(i,e,t))}function sAn(n,e){var t;return t=1-e,n.a[t]=eT(n.a[t],t),eT(n,e)}function oAn(n,e){var t;n.e=new oG,t=Cb(e),wi(t,n.c),eBn(n,t,0)}function Ti(n,e,t,i){var r;r=new XH,r.a=e,r.b=t,r.c=i,Ke(n.a,r)}function Z(n,e,t,i){var r;r=new XH,r.a=e,r.b=t,r.c=i,Ke(n.b,r)}function po(n){var e,t,i;return e=new HCn,t=Zx(e,n),UEe(e),i=t,i}function hX(){var n,e,t;return e=(t=(n=new ud,n),t),W(M1n,e),e}function pC(n){return n.j.c=F(Zn,rn,1,0,5,1),KW(n.c),Khe(n.a),n}function $w(n){return Qv(),I(n.g,10)?u(n.g,10):null}function oae(n){return Iw(n).dc()?!1:(sce(n,new Np),!0)}function fae(n){if(!("stack"in n))try{throw n}catch{}return n}function D8(n,e){if(n<0||n>=e)throw T(new mr(j6e(n,e)));return n}function fAn(n,e,t){if(n<0||et)throw T(new mr(W5e(n,e,t)))}function d$(n,e){if(ci(n.a,e),e.d)throw T(new _r(wKn));e.d=n}function b$(n,e){if(e.$modCount!=n.$modCount)throw T(new vs)}function hAn(n,e){return I(e,42)?ix(n.a,u(e,42)):!1}function lAn(n,e){return I(e,42)?ix(n.a,u(e,42)):!1}function aAn(n,e){return I(e,42)?ix(n.a,u(e,42)):!1}function hae(n,e){return n.a<=n.b?(e.ud(n.a++),!0):!1}function $d(n){var e;return Fr(n)?(e=n,e==-0?0:e):m0e(n)}function vC(n){var e;return fl(n),e=new fln,vw(n.a,new Wvn(e)),e}function dAn(n){var e;return fl(n),e=new oln,vw(n.a,new Uvn(e)),e}function Pi(n,e){this.a=n,$v.call(this,n),tb(e,n.gc()),this.b=e}function lX(n){this.e=n,this.b=this.e.a.entries(),this.a=new Array}function lae(n){return gD(n.e.Hd().gc()*n.c.Hd().gc(),273,new evn(n))}function mC(n){return new Pc((rs(n,AL),KC(qi(qi(5,n),n/10|0))))}function bAn(n){return u(af(n,F(FWn,UKn,11,n.c.length,0,1)),1943)}function aae(n,e,t){return t.f.c.length>0?SW(n.a,e,t):SW(n.b,e,t)}function dae(n,e,t){n.d&&Jc(n.d.e,n),n.d=e,n.d&&Q0(n.d.e,t,n)}function w$(n,e){uTe(e,n),WU(n.d),WU(u(k(n,(nn(),eP)),207))}function H5(n,e){cTe(e,n),UU(n.d),UU(u(k(n,(nn(),eP)),207))}function Fd(n,e){var t,i;return t=Dh(n,e),i=null,t&&(i=t.fe()),i}function j3(n,e){var t,i;return t=ub(n,e),i=null,t&&(i=t.ie()),i}function q5(n,e){var t,i;return t=Dh(n,e),i=null,t&&(i=t.ie()),i}function $h(n,e){var t,i;return t=Dh(n,e),i=null,t&&(i=tY(t)),i}function bae(n,e,t){var i;return i=i4(t),gM(n.g,i,e),gM(n.i,e,t),e}function wae(n,e,t){var i;i=q2e();try{return kue(n,e,t)}finally{Mae(i)}}function wAn(n){var e;e=n.Wg(),this.a=I(e,69)?u(e,69).Zh():e.Kc()}function li(){P9n.call(this),this.j.c=F(Zn,rn,1,0,5,1),this.a=-1}function aX(n,e,t,i){this.d=n,this.n=e,this.g=t,this.o=i,this.p=-1}function gAn(n,e,t,i){this.e=i,this.d=null,this.c=n,this.a=e,this.b=t}function dX(n,e,t){this.d=new r6n(this),this.e=n,this.i=e,this.f=t}function kC(){kC=N,j_=new QG(I4,0),oun=new QG("TOP_LEFT",1)}function pAn(){pAn=N,aon=aTn(Q(1),Q(4)),lon=aTn(Q(1),Q(2))}function vAn(){vAn=N,uZn=Fe((Ij(),A(M(cZn,1),z,551,0,[$K])))}function mAn(){mAn=N,rZn=Fe((Pj(),A(M(lfn,1),z,482,0,[DK])))}function kAn(){kAn=N,CZn=Fe((Jv(),A(M(Dfn,1),z,530,0,[hy])))}function yAn(){yAn=N,IUn=Fe((Aj(),A(M(krn,1),z,481,0,[SR])))}function gae(){return Hd(),A(M(EUn,1),z,406,0,[Ok,Ik,MR,AR])}function pae(){return FC(),A(M(WA,1),z,297,0,[vR,qin,Gin,zin])}function vae(){return d6(),A(M(SUn,1),z,394,0,[Lk,YA,ZA,Nk])}function mae(){return K2(),A(M(TUn,1),z,323,0,[$k,Dk,Fk,xk])}function kae(){return G3(),A(M(jWn,1),z,405,0,[b0,Hb,Kb,kg])}function yae(){return aT(),A(M(KWn,1),z,360,0,[QR,TS,MS,Hk])}function jAn(n,e,t,i){return I(t,54)?new ojn(n,e,t,i):new pW(n,e,t,i)}function jae(){return hf(),A(M(QWn,1),z,411,0,[lp,nv,ev,JR])}function Eae(n){var e;return n.j==(J(),ae)&&(e=GLn(n),au(e,Vn))}function Cae(n,e){var t;t=e.a,Hi(t,e.c.d),Ci(t,e.d.d),fb(t.a,n.n)}function EAn(n,e){return u(yd(KE(u(ct(n.k,e),15).Oc(),jg)),113)}function CAn(n,e){return u(yd(HE(u(ct(n.k,e),15).Oc(),jg)),113)}function Tae(n){return new xn(jbe(u(n.a.dd(),14).gc(),n.a.cd()),16)}function E3(n){return I(n,14)?u(n,14).dc():!n.Kc().Ob()}function S2(n){return Qv(),I(n.g,145)?u(n.g,145):null}function TAn(n){if(n.e.g!=n.b)throw T(new vs);return!!n.c&&n.d>0}function Re(n){return ne(n.b!=n.d.c),n.c=n.b,n.b=n.b.a,++n.a,n.c.c}function bX(n,e){_n(e),St(n.a,n.c,e),n.c=n.c+1&n.a.length-1,MFn(n)}function ll(n,e){_n(e),n.b=n.b-1&n.a.length-1,St(n.a,n.b,e),MFn(n)}function MAn(n,e){var t;for(t=n.j.c.length;t0&&gc(n.g,0,e,0,n.i),e}function IAn(n,e){$j();var t;return t=u(te(eI,n),55),!t||t.wj(e)}function Bae(n){if(n.p!=1)throw T(new fu);return ge(n.f)<<24>>24}function Rae(n){if(n.p!=1)throw T(new fu);return ge(n.k)<<24>>24}function _ae(n){if(n.p!=7)throw T(new fu);return ge(n.k)<<16>>16}function Kae(n){if(n.p!=7)throw T(new fu);return ge(n.f)<<16>>16}function Fh(n){var e;for(e=0;n.Ob();)n.Pb(),e=qi(e,1);return KC(e)}function OAn(n,e){var t;return t=new R0,n.xd(t),t.a+="..",e.yd(t),t.a}function Hae(n,e,t){var i;i=u(te(n.g,t),57),W(n.a.c,new Si(e,i))}function qae(n,e,t){return TD(Y(Vr(Sr(n.f,e))),Y(Vr(Sr(n.f,t))))}function yC(n,e,t){return vM(n,e,t,I(e,99)&&(u(e,18).Bb&Yi)!=0)}function Gae(n,e,t){return m4(n,e,t,I(e,99)&&(u(e,18).Bb&Yi)!=0)}function zae(n,e,t){return b9e(n,e,t,I(e,99)&&(u(e,18).Bb&Yi)!=0)}function pX(n,e){return n==(Qn(),ii)&&e==ii?4:n==ii||e==ii?8:32}function DAn(n,e){return B(e)===B(n)?"(this Map)":e==null?ru:Nr(e)}function Uae(n,e){return u(e==null?Vr(Sr(n.f,null)):n5(n.g,e),281)}function $An(n,e,t){var i;return i=i4(t),it(n.b,i,e),it(n.c,e,t),e}function FAn(n,e){var t;for(t=e;t;)U0(n,t.i,t.j),t=Pt(t);return n}function vX(n,e){var t;return t=C8(f3(new x$(n,e))),DE(new x$(n,e)),t}function sh(n,e){er();var t;return t=u(n,66).Mj(),M5e(t,e),t.Ok(e)}function Wae(n,e,t,i,r){var c;c=m9e(r,t,i),W(e,p6e(r,c)),o5e(n,r,e)}function xAn(n,e,t){n.i=0,n.e=0,e!=t&&(uDn(n,e,t),cDn(n,e,t))}function mX(n,e){var t;t=n.q.getHours(),n.q.setFullYear(e+Tl),S6(n,t)}function Xae(n,e,t){if(t){var i=t.ee();n.a[e]=i(t)}else delete n.a[e]}function g$(n,e,t){if(t){var i=t.ee();t=i(t)}else t=void 0;n.a[e]=t}function LAn(n){if(n<0)throw T(new K9n("Negative array size: "+n))}function bc(n){return n.n||(Ou(n),n.n=new wCn(n,ar,n),Ar(n)),n.n}function G5(n){return ne(n.a=0&&n.a[t]===e[t];t--);return t<0}function KAn(n,e){V3();var t;return t=n.j.g-e.j.g,t!=0?t:0}function HAn(n,e){return _n(e),n.a!=null?$fe(e.Kb(n.a)):UA}function jC(n){var e;return n?new iW(n):(e=new Sh,nF(e,n),e)}function ts(n,e){var t;return e.b.Kb(FPn(n,e.c.Ee(),(t=new Jvn(e),t)))}function EC(n){_J(),Dyn(this,ge(ui(cl(n,24),FM)),ge(ui(n,FM)))}function qAn(){qAn=N,Gzn=Fe(($T(),A(M(Jin,1),z,428,0,[yR,Qin])))}function GAn(){GAn=N,zzn=Fe((RC(),A(M(Zin,1),z,427,0,[Yin,jR])))}function zAn(){zAn=N,WUn=Fe((_C(),A(M(Arn,1),z,424,0,[$R,tS])))}function UAn(){UAn=N,BWn=Fe((B3(),A(M(NWn,1),z,511,0,[_k,UR])))}function WAn(){WAn=N,lXn=Fe((V8(),A(M(Wcn,1),z,419,0,[$S,Ucn])))}function XAn(){XAn=N,wXn=Fe((K8(),A(M(Qcn,1),z,479,0,[Vcn,xS])))}function VAn(){VAn=N,XQn=Fe((x8(),A(M(ron,1),z,376,0,[uK,iy])))}function QAn(){QAn=N,GQn=Fe((z8(),A(M(non,1),z,421,0,[iK,rK])))}function JAn(){JAn=N,sXn=Fe((OC(),A(M(Rcn,1),z,422,0,[Bcn,s_])))}function YAn(){YAn=N,jXn=Fe((kC(),A(M(fun,1),z,420,0,[j_,oun])))}function ZAn(){ZAn=N,RJn=Fe((No(),A(M(BJn,1),z,520,0,[tw,Bl])))}function nSn(){nSn=N,wJn=Fe((z5(),A(M(bJn,1),z,523,0,[Hm,Km])))}function eSn(){eSn=N,jJn=Fe((xf(),A(M(yJn,1),z,516,0,[M0,I1])))}function tSn(){tSn=N,CJn=Fe((tf(),A(M(EJn,1),z,515,0,[Ja,yf])))}function iSn(){iSn=N,UJn=Fe((Id(),A(M(zJn,1),z,455,0,[Rl,Lg])))}function rSn(){rSn=N,hYn=Fe((gC(),A(M(Son,1),z,425,0,[yK,Aon])))}function cSn(){cSn=N,wYn=Fe((iT(),A(M(Pon,1),z,495,0,[EP,mv])))}function uSn(){uSn=N,fYn=Fe((aC(),A(M(Mon,1),z,480,0,[kK,Ton])))}function sSn(){sSn=N,vYn=Fe(($C(),A(M(Oon,1),z,426,0,[Ion,TK])))}function oSn(){oSn=N,TZn=Fe((c7(),A(M(Ffn,1),z,429,0,[DP,$fn])))}function fSn(){fSn=N,sZn=Fe((L8(),A(M(afn,1),z,430,0,[FK,IP])))}function z5(){z5=N,Hm=new ZG("UPPER",0),Km=new ZG("LOWER",1)}function Yae(n,e){var t;t=new r2,la(t,"x",e.a),la(t,"y",e.b),j2(n,t)}function Zae(n,e){var t;t=new r2,la(t,"x",e.a),la(t,"y",e.b),j2(n,t)}function nde(n,e){var t,i;i=!1;do t=JOn(n,e),i=i|t;while(t);return i}function jX(n,e){var t,i;for(t=e,i=0;t>0;)i+=n.a[t],t-=t&-t;return i}function hSn(n,e){var t;for(t=e;t;)U0(n,-t.i,-t.j),t=Pt(t);return n}function $i(n,e){var t,i;for(_n(e),i=n.Kc();i.Ob();)t=i.Pb(),e.td(t)}function lSn(n,e){var t;return t=e.cd(),new bd(t,n.e.pc(t,u(e.dd(),14)))}function Kt(n,e,t,i){var r;r=new aI,r.c=e,r.b=t,r.a=i,i.b=t.a=r,++n.b}function Es(n,e,t){var i;return i=(Ln(e,n.c.length),n.c[e]),n.c[e]=t,i}function ede(n,e,t){return u(e==null?_c(n.f,null,t):Gd(n.g,e,t),281)}function k$(n){return n.c&&n.d?cX(n.c)+"->"+cX(n.d):"e_"+md(n)}function C3(n,e){return(Ta(n),Wv(new $n(n,new UX(e,n.a)))).sd(V4)}function tde(){return Qi(),A(M(Hrn,1),z,356,0,[Qf,$l,Hc,Cc,Or])}function ide(){return J(),A(M(Zi,1),hc,61,0,[Xr,Kn,Vn,ae,Gn])}function rde(n){return gj(),function(){return wae(n,this,arguments)}}function cde(){return Date.now?Date.now():new Date().getTime()}function Xi(n){return!n.c||!n.d?!1:!!n.c.i&&n.c.i==n.d.i}function aSn(n){if(!n.c.Sb())throw T(new ic);return n.a=!0,n.c.Ub()}function $8(n){n.i=0,z9(n.b,null),z9(n.c,null),n.a=null,n.e=null,++n.g}function EX(n){are.call(this,n==null?ru:Nr(n),I(n,78)?u(n,78):null)}function dSn(n){B_n(),Nmn(this),this.a=new Tt,QV(this,n),Ke(this.a,n)}function bSn(){RO(this),this.b=new fn(Ft,Ft),this.a=new fn(Qt,Qt)}function wSn(n,e){this.c=0,this.b=e,qkn.call(this,n,17493),this.a=this.c}function y$(n){CC(),!vf&&(this.c=n,this.e=!0,this.a=new X)}function CC(){CC=N,vf=!0,Fzn=!1,xzn=!1,Nzn=!1,Lzn=!1}function CX(n,e){return I(e,149)?Mn(n.c,u(e,149).c):!1}function TX(n,e){var t;return t=0,n&&(t+=n.f.a/2),e&&(t+=e.f.a/2),t}function j$(n,e){var t;return t=u(xd(n.d,e),23),t||u(xd(n.e,e),23)}function gSn(n){this.b=n,ie.call(this,n),this.a=u(Rn(this.b.a,4),126)}function pSn(n){this.b=n,w2.call(this,n),this.a=u(Rn(this.b.a,4),126)}function Ou(n){return n.t||(n.t=new Amn(n),s6(new _9n(n),0,n.t)),n.t}function ude(){return sr(),A(M(e9,1),z,103,0,[kh,Ao,Zs,Jh,Yh])}function sde(){return qw(),A(M(c9,1),z,249,0,[Hl,Cy,Hhn,r9,qhn])}function ode(){return Ho(),A(M($1,1),z,175,0,[Xn,vi,Zf,Ya,D1])}function fde(){return P7(),A(M(gfn,1),z,316,0,[dfn,xK,wfn,LK,bfn])}function hde(){return b6(),A(M(Usn,1),z,315,0,[zsn,nK,eK,Lm,Nm])}function lde(){return Pa(),A(M(zcn,1),z,335,0,[f_,Gcn,h_,Em,jm])}function ade(){return g4(),A(M(eZn,1),z,355,0,[Ng,Ep,Qm,Vm,Jm])}function dde(){return Vw(),A(M(YWn,1),z,363,0,[SS,IS,OS,PS,AS])}function bde(){return Ss(),A(M(jun,1),z,163,0,[Qk,Sm,xl,Pm,Ub])}function T3(){T3=N;var n,e;cI=(Qp(),e=new fj,e),uI=(n=new BI,n)}function vSn(n){var e;return n.c||(e=n.r,I(e,88)&&(n.c=u(e,26))),n.c}function wde(n){return n.e=3,n.d=n.Yb(),n.e!=2?(n.e=0,!0):!1}function E$(n){var e,t,i;return e=n&Nu,t=n>>22&Nu,i=n<0?Wh:0,Bc(e,t,i)}function gde(n){var e,t,i,r;for(t=n,i=0,r=t.length;i0?g$n(n,e):BNn(n,-e)}function MX(n,e){return e==0||n.e==0?n:e>0?BNn(n,e):g$n(n,-e)}function ve(n){if(Se(n))return n.c=n.a,n.a.Pb();throw T(new ic)}function kSn(n){var e,t;return e=n.c.i,t=n.d.i,e.k==(Qn(),Xt)&&t.k==Xt}function C$(n){var e;return e=new Pd,Pr(e,n),H(e,(nn(),Mr),null),e}function T$(n,e,t){var i;return i=n.Yg(e),i>=0?n._g(i,t,!0):Yd(n,e,t)}function AX(n,e,t,i){var r;for(r=0;re)throw T(new mr(fY(n,e,"index")));return n}function M$(n,e,t,i){var r;return r=F(be,Le,25,e,15,1),Pve(r,n,e,t,i),r}function vde(n,e){var t;t=n.q.getHours()+(e/60|0),n.q.setMinutes(e),S6(n,t)}function mde(n,e){return y.Math.min(al(e.a,n.d.d.c),al(e.b,n.d.d.c))}function O2(n,e){return ki(e)?e==null?MY(n.f,null):$On(n.g,e):MY(n.f,e)}function sf(n){this.c=n,this.a=new E(this.c.a),this.b=new E(this.c.b)}function TC(){this.e=new X,this.c=new X,this.d=new X,this.b=new X}function TSn(){this.g=new zq,this.b=new zq,this.a=new X,this.k=new X}function MSn(n,e,t){this.a=n,this.c=e,this.d=t,W(e.e,this),W(t.b,this)}function ASn(n,e){Hkn.call(this,e.rd(),e.qd()&-6),_n(n),this.a=n,this.b=e}function SSn(n,e){qkn.call(this,e.rd(),e.qd()&-6),_n(n),this.a=n,this.b=e}function FX(n,e){FO.call(this,e.rd(),e.qd()&-6),_n(n),this.a=n,this.b=e}function MC(n,e,t){this.a=n,this.b=e,this.c=t,W(n.t,this),W(e.i,this)}function AC(){this.b=new Tt,this.a=new Tt,this.b=new Tt,this.a=new Tt}function SC(){SC=N,Ym=new kt("org.eclipse.elk.labels.labelManager")}function PSn(){PSn=N,$cn=new ri("separateLayerConnections",(aT(),QR))}function No(){No=N,tw=new tz("REGULAR",0),Bl=new tz("CRITICAL",1)}function x8(){x8=N,uK=new YG("STACKED",0),iy=new YG("SEQUENCED",1)}function L8(){L8=N,FK=new oz("FIXED",0),IP=new oz("CENTER_NODE",1)}function kde(n,e){var t;return t=CEe(n,e),n.b=new tT(t.c.length),Lje(n,t)}function yde(n,e,t){var i;return++n.e,--n.f,i=u(n.d[e].$c(t),133),i.dd()}function ISn(n){var e;return n.a||(e=n.r,I(e,148)&&(n.a=u(e,148))),n.a}function xX(n){if(n.a){if(n.e)return xX(n.e)}else return n;return null}function jde(n,e){return n.pe.p?-1:0}function PC(n,e){return _n(e),n.c=0,"Initial capacity must not be negative")}function $Sn(){$Sn=N,Vzn=Fe((_o(),A(M(_b,1),z,232,0,[Zr,Fc,nc])))}function FSn(){FSn=N,Jzn=Fe((Tu(),A(M(Qzn,1),z,461,0,[Vf,Ol,Co])))}function xSn(){xSn=N,Zzn=Fe((Yc(),A(M(Yzn,1),z,462,0,[Wo,Dl,To])))}function LSn(){LSn=N,Bzn=Fe((lf(),A(M(Bu,1),z,132,0,[Win,ls,Rb])))}function NSn(){NSn=N,bWn=Fe((W5(),A(M(Krn,1),z,379,0,[NR,LR,BR])))}function BSn(){BSn=N,PWn=Fe((qd(),A(M(zrn,1),z,423,0,[yg,Grn,qR])))}function RSn(){RSn=N,oXn=Fe((F2(),A(M(Kcn,1),z,314,0,[ap,qk,_cn])))}function _Sn(){_Sn=N,fXn=Fe((VC(),A(M(qcn,1),z,337,0,[Hcn,DS,o_])))}function KSn(){KSn=N,dXn=Fe((ya(),A(M(aXn,1),z,450,0,[l_,cv,Tg])))}function HSn(){HSn=N,rXn=Fe((Kd(),A(M(YR,1),z,361,0,[g0,Fl,w0])))}function qSn(){qSn=N,yXn=Fe((Nh(),A(M(kXn,1),z,303,0,[zk,Ag,dp])))}function GSn(){GSn=N,mXn=Fe((q3(),A(M(y_,1),z,292,0,[m_,k_,Gk])))}function zSn(){zSn=N,RQn=Fe((i6(),A(M(Gsn,1),z,378,0,[J_,qsn,oP])))}function USn(){USn=N,WQn=Fe((oT(),A(M(ion,1),z,375,0,[eon,cK,ton])))}function WSn(){WSn=N,qQn=Fe((Rh(),A(M(Zsn,1),z,339,0,[Nl,Ysn,tK])))}function XSn(){XSn=N,UQn=Fe((ur(),A(M(zQn,1),z,452,0,[Bm,Su,xc])))}function VSn(){VSn=N,JQn=Fe((dT(),A(M(hon,1),z,377,0,[fK,pv,ew])))}function QSn(){QSn=N,VQn=Fe((Q3(),A(M(uon,1),z,336,0,[sK,con,Rm])))}function JSn(){JSn=N,QQn=Fe((uT(),A(M(fon,1),z,338,0,[oon,oK,son])))}function YSn(){YSn=N,hJn=Fe((_d(),A(M(fJn,1),z,454,0,[ry,_m,aP])))}function ZSn(){ZSn=N,pYn=Fe((CT(),A(M(gYn,1),z,442,0,[CK,jK,EK])))}function nPn(){nPn=N,mYn=Fe((f7(),A(M(Fon,1),z,380,0,[CP,Don,$on])))}function ePn(){ePn=N,LYn=Fe((ET(),A(M(Yon,1),z,381,0,[Jon,IK,Qon])))}function tPn(){tPn=N,xYn=Fe((sT(),A(M(Xon,1),z,293,0,[PK,Won,Uon])))}function iPn(){iPn=N,iZn=Fe((w7(),A(M(OK,1),z,437,0,[AP,SP,PP])))}function rPn(){rPn=N,une=Fe((_h(),A(M(Khn,1),z,334,0,[HP,F1,i9])))}function cPn(){cPn=N,tne=Fe((of(),A(M(Phn,1),z,272,0,[jv,cw,Ev])))}function Pde(){return Mi(),A(M(Ghn,1),z,98,0,[ql,Ef,Tv,td,Eh,Ac])}function wa(n,e){return!n.o&&(n.o=new Xu((Dc(),Ul),S0,n,0)),NF(n.o,e)}function Ide(n){return!n.g&&(n.g=new Qy),!n.g.d&&(n.g.d=new Cmn(n)),n.g.d}function Ode(n){return!n.g&&(n.g=new Qy),!n.g.a&&(n.g.a=new Tmn(n)),n.g.a}function Dde(n){return!n.g&&(n.g=new Qy),!n.g.b&&(n.g.b=new Emn(n)),n.g.b}function N8(n){return!n.g&&(n.g=new Qy),!n.g.c&&(n.g.c=new Mmn(n)),n.g.c}function $de(n,e,t){var i,r;for(r=new H3(e,n),i=0;it||e=0?n._g(t,!0,!0):Yd(n,e,!0)}function Qde(n,e){return ni(K(Y(k(n,(G(),k0)))),K(Y(k(e,k0))))}function aPn(){aPn=N,aYn=Xd(Xd(Dj(new li,(c4(),qm)),(k6(),pP)),aK)}function Jde(n,e,t){var i;return i=tDn(n,e,t),n.b=new tT(i.c.length),JY(n,i)}function Yde(n){if(n.b<=0)throw T(new ic);return--n.b,n.a-=n.c.c,Q(n.a)}function Zde(n){var e;if(!n.a)throw T(new gTn);return e=n.a,n.a=Pt(n.a),e}function n0e(n){for(;!n.a;)if(!nEn(n.c,new Xvn(n)))return!1;return!0}function $2(n){var e;return pe(n),I(n,198)?(e=u(n,198),e):new dvn(n)}function e0e(n){DC(),u(n.We((Xe(),rw)),174).Fc((Mu(),Ty)),n.Ye(eH,null)}function DC(){DC=N,SZn=new n2n,IZn=new e2n,PZn=Rwe((Xe(),eH),SZn,_l,IZn)}function $C(){$C=N,Ion=new sz("LEAF_NUMBER",0),TK=new sz("NODE_SIZE",1)}function t0e(n,e,t){n.a=e,n.c=t,n.b.a.$b(),_s(n.d),n.e.a.c=F(Zn,rn,1,0,5,1)}function $$(n){n.a=F(be,Le,25,n.b+1,15,1),n.c=F(be,Le,25,n.b,15,1),n.d=0}function i0e(n,e){n.a.ue(e.d,n.b)>0&&(W(n.c,new QU(e.c,e.d,n.d)),n.b=e.d)}function zX(n,e){if(n.g==null||e>=n.i)throw T(new xO(e,n.i));return n.g[e]}function dPn(n,e,t){if(W3(n,t),t!=null&&!n.wj(t))throw T(new xI);return t}function bPn(n){var e;if(n.Ek())for(e=n.i-1;e>=0;--e)D(n,e);return gX(n)}function r0e(n){var e,t;if(!n.b)return null;for(t=n.b;e=t.a[0];)t=e;return t}function c0e(n,e){var t,i;return LAn(e),t=(i=n.slice(0,e),WX(i,n)),t.length=e,t}function S3(n,e,t,i){var r;i=(Ow(),i||Lin),r=n.slice(e,t),hY(r,n,e,t,-e,i)}function Cs(n,e,t,i,r){return e<0?Yd(n,t,i):u(t,66).Nj().Pj(n,n.yh(),e,i,r)}function u0e(n){return I(n,172)?""+u(n,172).a:n==null?null:Nr(n)}function s0e(n){return I(n,172)?""+u(n,172).a:n==null?null:Nr(n)}function wPn(n,e){if(e.a)throw T(new _r(wKn));ci(n.a,e),e.a=n,!n.j&&(n.j=e)}function UX(n,e){FO.call(this,e.rd(),e.qd()&-16449),_n(n),this.a=n,this.c=e}function gPn(n,e){var t,i;return i=e/n.c.Hd().gc()|0,t=e%n.c.Hd().gc(),D2(n,i,t)}function Tu(){Tu=N,Vf=new oO(Y2,0),Ol=new oO(I4,1),Co=new oO(Z2,2)}function FC(){FC=N,vR=new Lj("All",0),qin=new lyn,Gin=new Eyn,zin=new ayn}function pPn(){pPn=N,Dzn=Fe((FC(),A(M(WA,1),z,297,0,[vR,qin,Gin,zin])))}function vPn(){vPn=N,EWn=Fe((G3(),A(M(jWn,1),z,405,0,[b0,Hb,Kb,kg])))}function mPn(){mPn=N,CUn=Fe((Hd(),A(M(EUn,1),z,406,0,[Ok,Ik,MR,AR])))}function kPn(){kPn=N,MUn=Fe((K2(),A(M(TUn,1),z,323,0,[$k,Dk,Fk,xk])))}function yPn(){yPn=N,PUn=Fe((d6(),A(M(SUn,1),z,394,0,[Lk,YA,ZA,Nk])))}function jPn(){jPn=N,WJn=Fe((c4(),A(M(won,1),z,393,0,[gP,qm,uy,Gm])))}function EPn(){EPn=N,HWn=Fe((aT(),A(M(KWn,1),z,360,0,[QR,TS,MS,Hk])))}function CPn(){CPn=N,FYn=Fe((qT(),A(M(zon,1),z,340,0,[SK,qon,Gon,Hon])))}function TPn(){TPn=N,JWn=Fe((hf(),A(M(QWn,1),z,411,0,[lp,nv,ev,JR])))}function MPn(){MPn=N,_Qn=Fe((wb(),A(M(Z_,1),z,197,0,[fP,Y_,xg,Fg])))}function APn(){APn=N,Ene=Fe((Vu(),A(M(jne,1),z,396,0,[gs,Yhn,Jhn,Zhn])))}function SPn(){SPn=N,one=Fe((us(),A(M(sne,1),z,285,0,[Ey,yh,Kl,jy])))}function PPn(){PPn=N,ine=Fe((Hh(),A(M(cH,1),z,218,0,[rH,yy,Cv,Sp])))}function IPn(){IPn=N,kne=Fe((AT(),A(M(Qhn,1),z,311,0,[oH,Whn,Vhn,Xhn])))}function OPn(){OPn=N,vne=Fe((Qu(),A(M(o9,1),z,374,0,[Ay,id,My,uw])))}function DPn(){DPn=N,mM(),F1n=Ft,Tee=Qt,x1n=new S9(Ft),Mee=new S9(Qt)}function K8(){K8=N,Vcn=new VG(Xh,0),xS=new VG("IMPROVE_STRAIGHTNESS",1)}function o0e(n,e){return h3(),W(n,new Si(e,Q(e.e.c.length+e.g.c.length)))}function f0e(n,e){return h3(),W(n,new Si(e,Q(e.e.c.length+e.g.c.length)))}function WX(n,e){return U8(e)!=10&&A($u(e),e.hm,e.__elementTypeId$,U8(e),n),n}function Jc(n,e){var t;return t=xr(n,e,0),t==-1?!1:(h1(n,t),!0)}function $Pn(n,e){var t;return t=u(O2(n.e,e),387),t?(ZU(t),t.e):null}function P3(n){var e;return Fr(n)&&(e=0-n,!isNaN(e))?e:bl(z3(n))}function xr(n,e,t){for(;t=0?BT(n,t,!0,!0):Yd(n,e,!0)}function YX(n,e){Qv();var t,i;return t=S2(n),i=S2(e),!!t&&!!i&&!V$n(t.k,i.k)}function a0e(n,e){nu(n,e==null||jE((_n(e),e))||isNaN((_n(e),e))?0:(_n(e),e))}function d0e(n,e){eu(n,e==null||jE((_n(e),e))||isNaN((_n(e),e))?0:(_n(e),e))}function b0e(n,e){Rd(n,e==null||jE((_n(e),e))||isNaN((_n(e),e))?0:(_n(e),e))}function w0e(n,e){Bd(n,e==null||jE((_n(e),e))||isNaN((_n(e),e))?0:(_n(e),e))}function BPn(n){(this.q?this.q:(Pn(),Pn(),vh)).Ac(n.q?n.q:(Pn(),Pn(),vh))}function g0e(n,e){return I(e,99)&&u(e,18).Bb&Yi?new LO(e,n):new H3(e,n)}function p0e(n,e){return I(e,99)&&u(e,18).Bb&Yi?new LO(e,n):new H3(e,n)}function RPn(n,e){vrn=new Wy,AUn=e,gm=n,u(gm.b,65),BX(gm,vrn,null),DRn(gm)}function B$(n,e,t){var i;return i=n.g[e],k5(n,e,n.oi(e,t)),n.gi(e,t,i),n.ci(),i}function BC(n,e){var t;return t=n.Xc(e),t>=0?(n.$c(t),!0):!1}function R$(n){var e;return n.d!=n.r&&(e=qs(n),n.e=!!e&&e.Cj()==kGn,n.d=e),n.e}function _$(n,e){var t;for(pe(n),pe(e),t=!1;e.Ob();)t=t|n.Fc(e.Pb());return t}function xd(n,e){var t;return t=u(te(n.e,e),387),t?(Oyn(n,t),t.e):null}function _Pn(n){var e,t;return e=n/60|0,t=n%60,t==0?""+e:""+e+":"+(""+t)}function qr(n,e){var t,i;return Ta(n),i=new FX(e,n.a),t=new iEn(i),new $n(n,t)}function ub(n,e){var t=n.a[e],i=(cF(),dR)[typeof t];return i?i(t):tQ(typeof t)}function v0e(n){switch(n.g){case 0:return nt;case 1:return-1;default:return 0}}function m0e(n){return mJ(n,(I3(),pin))<0?-xce(z3(n)):n.l+n.m*J2+n.h*$a}function U8(n){return n.__elementTypeCategory$==null?10:n.__elementTypeCategory$}function K$(n){var e;return e=n.b.c.length==0?null:un(n.b,0),e!=null&&J$(n,0),e}function KPn(n,e){for(;e[0]=0;)++e[0]}function W8(n,e){this.e=e,this.a=FOn(n),this.a<54?this.f=$d(n):this.c=m7(n)}function HPn(n,e,t,i){Je(),cd.call(this,26),this.c=n,this.a=e,this.d=t,this.b=i}function oh(n,e,t){var i,r;for(i=10,r=0;rn.a[i]&&(i=t);return i}function T0e(n,e){var t;return t=zd(n.e.c,e.e.c),t==0?ni(n.e.d,e.e.d):t}function Fw(n,e){return e.e==0||n.e==0?W4:(a4(),Hx(n,e))}function M0e(n,e){if(!n)throw T(new Hn(P8e("Enum constant undefined: %s",e)))}function X5(){X5=N,MWn=new San,AWn=new Man,CWn=new $an,TWn=new Fan,SWn=new xan}function RC(){RC=N,Yin=new qG("BY_SIZE",0),jR=new qG("BY_SIZE_AND_SHAPE",1)}function _C(){_C=N,$R=new GG("EADES",0),tS=new GG("FRUCHTERMAN_REINGOLD",1)}function V8(){V8=N,$S=new XG("READING_DIRECTION",0),Ucn=new XG("ROTATION",1)}function GPn(){GPn=N,hXn=Fe((Pa(),A(M(zcn,1),z,335,0,[f_,Gcn,h_,Em,jm])))}function zPn(){zPn=N,KQn=Fe((b6(),A(M(Usn,1),z,315,0,[zsn,nK,eK,Lm,Nm])))}function UPn(){UPn=N,ZWn=Fe((Vw(),A(M(YWn,1),z,363,0,[SS,IS,OS,PS,AS])))}function WPn(){WPn=N,EXn=Fe((Ss(),A(M(jun,1),z,163,0,[Qk,Sm,xl,Pm,Ub])))}function XPn(){XPn=N,oZn=Fe((P7(),A(M(gfn,1),z,316,0,[dfn,xK,wfn,LK,bfn])))}function VPn(){VPn=N,OZn=Fe((Ho(),A(M($1,1),z,175,0,[Xn,vi,Zf,Ya,D1])))}function QPn(){QPn=N,tZn=Fe((g4(),A(M(eZn,1),z,355,0,[Ng,Ep,Qm,Vm,Jm])))}function JPn(){JPn=N,vWn=Fe((Qi(),A(M(Hrn,1),z,356,0,[Qf,$l,Hc,Cc,Or])))}function YPn(){YPn=N,ene=Fe((sr(),A(M(e9,1),z,103,0,[kh,Ao,Zs,Jh,Yh])))}function ZPn(){ZPn=N,hne=Fe((qw(),A(M(c9,1),z,249,0,[Hl,Cy,Hhn,r9,qhn])))}function nIn(){nIn=N,dne=Fe((J(),A(M(Zi,1),hc,61,0,[Xr,Kn,Vn,ae,Gn])))}function H$(n,e){var t;return t=u(te(n.a,e),134),t||(t=new pI,it(n.a,e,t)),t}function eIn(n){var e;return e=u(k(n,(G(),p0)),305),e?e.a==n:!1}function tIn(n){var e;return e=u(k(n,(G(),p0)),305),e?e.i==n:!1}function iIn(n,e){return _n(e),mW(n),n.d.Ob()?(e.td(n.d.Pb()),!0):!1}function KC(n){return fc(n,nt)>0?nt:fc(n,Bi)<0?Bi:ge(n)}function sb(n){return n<3?(rs(n,J_n),n+1):n=0&&e=-.01&&n.a<=wf&&(n.a=0),n.b>=-.01&&n.b<=wf&&(n.b=0),n}function cIn(n,e){return e==(sD(),sD(),Pzn)?n.toLocaleLowerCase():n.toLowerCase()}function nV(n){return(n.i&2?"interface ":n.i&1?"":"class ")+(Ph(n),n.o)}function Cr(n){var e,t;t=(e=new RI,e),me((!n.q&&(n.q=new V(co,n,11,10)),n.q),t)}function A0e(n,e){var t;return t=e>0?e-1:e,e8n(Kie(IIn(YU(new zp,t),n.n),n.j),n.k)}function S0e(n,e,t,i){var r;n.j=-1,EY(n,iY(n,e,t),(er(),r=u(e,66).Mj(),r.Ok(i)))}function uIn(n){this.g=n,this.f=new X,this.a=y.Math.min(this.g.c.c,this.g.d.c)}function sIn(n){this.b=new X,this.a=new X,this.c=new X,this.d=new X,this.e=n}function oIn(n,e){this.a=new we,this.e=new we,this.b=(i6(),oP),this.c=n,this.b=e}function fIn(n,e,t){kE.call(this),eV(this),this.a=n,this.c=t,this.b=e.d,this.f=e.e}function hIn(n){this.d=n,this.c=n.c.vc().Kc(),this.b=null,this.a=null,this.e=(aj(),fR)}function Ld(n){if(n<0)throw T(new Hn("Illegal Capacity: "+n));this.g=this.ri(n)}function P0e(n,e){if(0>n||n>e)throw T(new bG("fromIndex: 0, toIndex: "+n+tnn+e))}function I0e(n){var e;if(n.a==n.b.a)throw T(new ic);return e=n.a,n.c=e,n.a=n.a.e,e}function HC(n){var e;z0(!!n.c),e=n.c.a,Ts(n.d,n.c),n.b==n.c?n.b=e:--n.a,n.c=null}function qC(n,e){var t;return Ta(n),t=new DTn(n,n.a.rd(),n.a.qd()|4,e),new $n(n,t)}function O0e(n,e){var t,i;return t=u(ab(n.d,e),14),t?(i=e,n.e.pc(i,t)):null}function GC(n,e){var t,i;for(i=n.Kc();i.Ob();)t=u(i.Pb(),70),H(t,(G(),pp),e)}function D0e(n){var e;return e=K(Y(k(n,(nn(),S1)))),e<0&&(e=0,H(n,S1,e)),e}function $0e(n,e,t){var i;i=y.Math.max(0,n.b/2-.5),g6(t,i,1),W(e,new L7n(t,i))}function F0e(n,e,t){var i;return i=n.a.e[u(e.a,10).p]-n.a.e[u(t.a,10).p],Gt(m8(i))}function lIn(n,e,t,i,r,c){var o;o=C$(i),Hi(o,r),Ci(o,c),Tn(n.a,i,new EE(o,e,t.f))}function aIn(n,e){var t;if(t=R7(n.Tg(),e),!t)throw T(new Hn(Pl+e+MB));return t}function ob(n,e){var t;for(t=n;Pt(t);)if(t=Pt(t),t==e)return!0;return!1}function x0e(n,e){var t,i,r;for(i=e.a.cd(),t=u(e.a.dd(),14).gc(),r=0;r0&&(n.a/=e,n.b/=e),n}function is(n){var e;return n.w?n.w:(e=Gle(n),e&&!e.kh()&&(n.w=e),e)}function q0e(n){var e;return n==null?null:(e=u(n,190),Gve(e,e.length))}function D(n,e){if(n.g==null||e>=n.i)throw T(new xO(e,n.i));return n.li(e,n.g[e])}function G0e(n){var e,t;for(e=n.a.d.j,t=n.c.d.j;e!=t;)ko(n.b,e),e=yT(e);ko(n.b,e)}function z0e(n){var e;for(e=0;e=14&&e<=16))),n}function gIn(n,e,t){var i=function(){return n.apply(i,arguments)};return e.apply(i,t),i}function pIn(n,e,t){var i,r;i=e;do r=K(n.p[i.p])+t,n.p[i.p]=r,i=n.a[i.p];while(i!=e)}function O3(n,e){var t,i;i=n.a,t=Tge(n,e,null),i!=e&&!n.e&&(t=j4(n,e,t)),t&&t.Fi()}function tV(n,e){return Zo(),mo(Cl),y.Math.abs(n-e)<=Cl||n==e||isNaN(n)&&isNaN(e)}function iV(n,e){return Zo(),mo(Cl),y.Math.abs(n-e)<=Cl||n==e||isNaN(n)&&isNaN(e)}function X0e(n,e){return yl(),Wc(n.b.c.length-n.e.c.length,e.b.c.length-e.e.c.length)}function xw(n,e){return Uie(J5(n,e,ge(Ni(dh,ch(ge(Ni(e==null?0:mt(e),bh)),15)))))}function vIn(){vIn=N,$Wn=Fe((Qn(),A(M(zR,1),z,267,0,[ii,pi,Xt,Tc,Ju,mf])))}function mIn(){mIn=N,_Zn=Fe((vb(),A(M(UK,1),z,291,0,[zK,gy,wy,GK,dy,by])))}function kIn(){kIn=N,FZn=Fe((fh(),A(M(Rfn,1),z,248,0,[HK,ly,ay,xP,$P,FP])))}function yIn(){yIn=N,uXn=Fe((q2(),A(M(rv,1),z,227,0,[iv,ym,tv,qb,Cg,Eg])))}function jIn(){jIn=N,pXn=Fe((h4(),A(M(sun,1),z,275,0,[Cm,iun,uun,cun,run,tun])))}function EIn(){EIn=N,gXn=Fe((A7(),A(M(eun,1),z,274,0,[LS,Ycn,nun,Jcn,Zcn,p_])))}function CIn(){CIn=N,BQn=Fe((JT(),A(M(Hsn,1),z,313,0,[Q_,_sn,V_,Rsn,Ksn,sP])))}function TIn(){TIn=N,bXn=Fe((eM(),A(M(Xcn,1),z,276,0,[d_,a_,w_,b_,g_,FS])))}function MIn(){MIn=N,VJn=Fe((k6(),A(M(XJn,1),z,327,0,[pP,aK,bK,dK,wK,lK])))}function AIn(){AIn=N,ane=Fe((Mu(),A(M(qP,1),z,273,0,[Gl,n1,Ty,s9,u9,Pp])))}function SIn(){SIn=N,rne=Fe((ZT(),A(M(xhn,1),z,312,0,[uH,Dhn,Fhn,Ihn,$hn,Ohn])))}function V0e(){return jb(),A(M(lr,1),z,93,0,[So,Zh,Po,Oo,jh,eo,ds,Io,no])}function UC(n,e){var t;t=n.a,n.a=e,n.Db&4&&!(n.Db&1)&&et(n,new rb(n,0,t,n.a))}function WC(n,e){var t;t=n.b,n.b=e,n.Db&4&&!(n.Db&1)&&et(n,new rb(n,1,t,n.b))}function D3(n,e){var t;t=n.b,n.b=e,n.Db&4&&!(n.Db&1)&&et(n,new rb(n,3,t,n.b))}function Bd(n,e){var t;t=n.f,n.f=e,n.Db&4&&!(n.Db&1)&&et(n,new rb(n,3,t,n.f))}function Rd(n,e){var t;t=n.g,n.g=e,n.Db&4&&!(n.Db&1)&&et(n,new rb(n,4,t,n.g))}function nu(n,e){var t;t=n.i,n.i=e,n.Db&4&&!(n.Db&1)&&et(n,new rb(n,5,t,n.i))}function eu(n,e){var t;t=n.j,n.j=e,n.Db&4&&!(n.Db&1)&&et(n,new rb(n,6,t,n.j))}function $3(n,e){var t;t=n.j,n.j=e,n.Db&4&&!(n.Db&1)&&et(n,new rb(n,1,t,n.j))}function F3(n,e){var t;t=n.c,n.c=e,n.Db&4&&!(n.Db&1)&&et(n,new rb(n,4,t,n.c))}function x3(n,e){var t;t=n.k,n.k=e,n.Db&4&&!(n.Db&1)&&et(n,new rb(n,2,t,n.k))}function G$(n,e){var t;t=n.d,n.d=e,n.Db&4&&!(n.Db&1)&&et(n,new p$(n,2,t,n.d))}function d1(n,e){var t;t=n.s,n.s=e,n.Db&4&&!(n.Db&1)&&et(n,new p$(n,4,t,n.s))}function hb(n,e){var t;t=n.t,n.t=e,n.Db&4&&!(n.Db&1)&&et(n,new p$(n,5,t,n.t))}function L3(n,e){var t;t=n.F,n.F=e,n.Db&4&&!(n.Db&1)&&et(n,new gi(n,1,5,t,e))}function Q8(n,e){var t;return t=u(te(($j(),eI),n),55),t?t.xj(e):F(Zn,rn,1,e,5,1)}function Bh(n,e){var t,i;return t=e in n.a,t&&(i=Dh(n,e).he(),i)?i.a:null}function Q0e(n,e){var t,i,r;return t=(i=(ad(),r=new QH,r),e&&zY(i,e),i),aV(t,n),t}function PIn(n,e,t){if(W3(n,t),!n.Bk()&&t!=null&&!n.wj(t))throw T(new xI);return t}function IIn(n,e){return n.n=e,n.n?(n.f=new X,n.e=new X):(n.f=null,n.e=null),n}function Me(n,e,t,i,r,c){var o;return o=LD(n,e),DIn(t,o),o.i=r?8:0,o.f=i,o.e=r,o.g=c,o}function rV(n,e,t,i,r){this.d=e,this.k=i,this.f=r,this.o=-1,this.p=1,this.c=n,this.a=t}function cV(n,e,t,i,r){this.d=e,this.k=i,this.f=r,this.o=-1,this.p=2,this.c=n,this.a=t}function uV(n,e,t,i,r){this.d=e,this.k=i,this.f=r,this.o=-1,this.p=6,this.c=n,this.a=t}function sV(n,e,t,i,r){this.d=e,this.k=i,this.f=r,this.o=-1,this.p=7,this.c=n,this.a=t}function oV(n,e,t,i,r){this.d=e,this.j=i,this.e=r,this.o=-1,this.p=4,this.c=n,this.a=t}function OIn(n,e){var t,i,r,c;for(i=e,r=0,c=i.length;r=0),Q2e(n.d,n.c)<0&&(n.a=n.a-1&n.d.a.length-1,n.b=n.d.c),n.c=-1}function fV(n){return n.a<54?n.f<0?-1:n.f>0?1:0:(!n.c&&(n.c=h7(n.f)),n.c).e}function mo(n){if(!(n>=0))throw T(new Hn("tolerance ("+n+") must be >= 0"));return n}function N3(){return _K||(_K=new kBn,_w(_K,A(M(mg,1),rn,130,0,[new nq]))),_K}function ur(){ur=N,Bm=new kO(K6,0),Su=new kO("INPUT",1),xc=new kO("OUTPUT",2)}function VC(){VC=N,Hcn=new bO("ARD",0),DS=new bO("MSD",1),o_=new bO("MANUAL",2)}function _d(){_d=N,ry=new TO("BARYCENTER",0),_m=new TO(rHn,1),aP=new TO(cHn,2)}function J8(n,e){var t;if(t=n.gc(),e<0||e>t)throw T(new V0(e,t));return new AU(n,e)}function xIn(n,e){var t;return I(e,42)?n.c.Mc(e):(t=NF(n,e),IT(n,e),t)}function wr(n,e,t){return Ca(n,e),Ic(n,t),d1(n,0),hb(n,1),p1(n,!0),g1(n,!0),n}function rs(n,e){if(n<0)throw T(new Hn(e+" cannot be negative but was: "+n));return n}function LIn(n,e){var t,i;for(t=0,i=n.gc();t0?u(un(t.a,i-1),10):null}function Q5(n,e){var t;t=n.k,n.k=e,n.Db&4&&!(n.Db&1)&&et(n,new gi(n,1,2,t,n.k))}function JC(n,e){var t;t=n.f,n.f=e,n.Db&4&&!(n.Db&1)&&et(n,new gi(n,1,8,t,n.f))}function YC(n,e){var t;t=n.i,n.i=e,n.Db&4&&!(n.Db&1)&&et(n,new gi(n,1,7,t,n.i))}function aV(n,e){var t;t=n.a,n.a=e,n.Db&4&&!(n.Db&1)&&et(n,new gi(n,1,8,t,n.a))}function dV(n,e){var t;t=n.b,n.b=e,n.Db&4&&!(n.Db&1)&&et(n,new gi(n,1,0,t,n.b))}function bV(n,e){var t;t=n.b,n.b=e,n.Db&4&&!(n.Db&1)&&et(n,new gi(n,1,0,t,n.b))}function wV(n,e){var t;t=n.c,n.c=e,n.Db&4&&!(n.Db&1)&&et(n,new gi(n,1,1,t,n.c))}function gV(n,e){var t;t=n.c,n.c=e,n.Db&4&&!(n.Db&1)&&et(n,new gi(n,1,1,t,n.c))}function U$(n,e){var t;t=n.c,n.c=e,n.Db&4&&!(n.Db&1)&&et(n,new gi(n,1,4,t,n.c))}function pV(n,e){var t;t=n.d,n.d=e,n.Db&4&&!(n.Db&1)&&et(n,new gi(n,1,1,t,n.d))}function W$(n,e){var t;t=n.D,n.D=e,n.Db&4&&!(n.Db&1)&&et(n,new gi(n,1,2,t,n.D))}function X$(n,e){n.r>0&&n.c0&&n.g!=0&&X$(n.i,e/n.r*n.i.d))}function cbe(n,e,t){var i;n.b=e,n.a=t,i=(n.a&512)==512?new T9n:new ZH,n.c=y7e(i,n.b,n.a)}function zIn(n,e){return zh(n.e,e)?(er(),R$(e)?new IE(e,n):new i8(e,n)):new Nkn(e,n)}function ZC(n,e){return zie(Y5(n.a,e,ge(Ni(dh,ch(ge(Ni(e==null?0:mt(e),bh)),15)))))}function ube(n,e,t){return cb(n,new Hvn(e),new mln,new qvn(t),A(M(Bu,1),z,132,0,[]))}function sbe(n){var e,t;return 0>n?new PG:(e=n+1,t=new wSn(e,n),new oU(null,t))}function obe(n,e){Pn();var t;return t=new s2(1),ki(n)?yr(t,n,e):_c(t.f,n,e),new DI(t)}function fbe(n,e){var t,i;return t=n.o+n.p,i=e.o+e.p,te?(e<<=1,e>0?e:L6):e}function V$(n){switch(Rz(n.e!=3),n.e){case 2:return!1;case 0:return!0}return wde(n)}function WIn(n,e){var t;return I(e,8)?(t=u(e,8),n.a==t.a&&n.b==t.b):!1}function Q$(n,e,t){var i,r,c;return c=e>>5,r=e&31,i=ui(J0(n.n[t][c],ge(Ih(r,1))),3),i}function lbe(n,e){var t,i;for(i=e.vc().Kc();i.Ob();)t=u(i.Pb(),42),XT(n,t.cd(),t.dd())}function abe(n,e){var t;t=new Wy,u(e.b,65),u(e.b,65),u(e.b,65),Zc(e.a,new BU(n,t,e))}function vV(n,e){var t;t=n.b,n.b=e,n.Db&4&&!(n.Db&1)&&et(n,new gi(n,1,21,t,n.b))}function mV(n,e){var t;t=n.d,n.d=e,n.Db&4&&!(n.Db&1)&&et(n,new gi(n,1,11,t,n.d))}function nT(n,e){var t;t=n.j,n.j=e,n.Db&4&&!(n.Db&1)&&et(n,new gi(n,1,13,t,n.j))}function XIn(n,e,t){var i,r,c;for(c=n.a.length-1,r=n.b,i=0;i>>31;i!=0&&(n[t]=i)}function jbe(n,e){Pn();var t,i;for(i=new X,t=0;t0&&(this.g=this.ri(this.i+(this.i/8|0)+1),n.Qc(this.g))}function $t(n,e){ME.call(this,ree,n,e),this.b=this,this.a=Kc(n.Tg(),On(this.e.Tg(),this.c))}function Z5(n,e){var t,i;for(_n(e),i=e.vc().Kc();i.Ob();)t=u(i.Pb(),42),n.zc(t.cd(),t.dd())}function Dbe(n,e,t){var i;for(i=t.Kc();i.Ob();)if(!yC(n,e,i.Pb()))return!1;return!0}function $be(n,e,t,i,r){var c;return t&&(c=yt(e.Tg(),n.c),r=t.gh(e,-1-(c==-1?i:c),null,r)),r}function Fbe(n,e,t,i,r){var c;return t&&(c=yt(e.Tg(),n.c),r=t.ih(e,-1-(c==-1?i:c),null,r)),r}function dOn(n){var e;if(n.b==-2){if(n.e==0)e=-1;else for(e=0;n.a[e]==0;e++);n.b=e}return n.b}function bOn(n){switch(n.g){case 2:return J(),Gn;case 4:return J(),Vn;default:return n}}function wOn(n){switch(n.g){case 1:return J(),ae;case 3:return J(),Kn;default:return n}}function xbe(n){var e,t,i;return n.j==(J(),Kn)&&(e=GLn(n),t=au(e,Vn),i=au(e,Gn),i||i&&t)}function Lbe(n){var e,t;return e=u(n.e&&n.e(),9),t=u(IW(e,e.length),9),new ks(e,t,e.length)}function Nbe(n,e){le(e,iHn,1),TQ(ire(new tj((Vv(),new GD(n,!1,!1,new BH))))),ce(e)}function Y8(n,e){return qn(),ki(n)?DX(n,Ce(e)):G0(n)?TD(n,Y(e)):q0(n)?Kfe(n,sn(e)):n.wd(e)}function TV(n,e){e.q=n,n.d=y.Math.max(n.d,e.r),n.b+=e.d+(n.a.c.length==0?0:n.c),W(n.a,e)}function R3(n,e){var t,i,r,c;return r=n.c,t=n.c+n.b,c=n.d,i=n.d+n.a,e.a>r&&e.ac&&e.b1||n.Ob())return++n.a,n.g=0,e=n.i,n.Ob(),e;throw T(new ic)}function Vbe(n){gyn();var e;return M7n(hK,n)||(e=new Zwn,e.a=n,wU(hK,n,e)),u(br(hK,n),635)}function Ks(n){var e,t,i,r;return r=n,i=0,r<0&&(r+=$a,i=Wh),t=Gt(r/J2),e=Gt(r-t*J2),Bc(e,t,i)}function Z8(n){var e,t,i;for(i=0,t=new o2(n.a);t.a>22),r=n.h+e.h+(i>>22),Bc(t&Nu,i&Nu,r&Wh)}function xOn(n,e){var t,i,r;return t=n.l-e.l,i=n.m-e.m+(t>>22),r=n.h-e.h+(i>>22),Bc(t&Nu,i&Nu,r&Wh)}function i7(n){var e;return n<128?(e=(QEn(),yin)[n],!e&&(e=yin[n]=new wq(n)),e):new wq(n)}function jt(n){var e;return I(n,78)?n:(e=n&&n.__java$exception,e||(e=new CDn(n),Kmn(e)),e)}function r7(n){if(I(n,186))return u(n,118);if(n)return null;throw T(new c2(Iqn))}function LOn(n,e){if(e==null)return!1;for(;n.a!=n.b;)if(tt(e,vT(n)))return!0;return!1}function OV(n){return n.a.Ob()?!0:n.a!=n.d?!1:(n.a=new lX(n.e.f),n.a.Ob())}function Zt(n,e){var t,i;return t=e.Pc(),i=t.length,i==0?!1:(GU(n.c,n.c.length,t),!0)}function hwe(n,e,t){var i,r;for(r=e.vc().Kc();r.Ob();)i=u(r.Pb(),42),n.yc(i.cd(),i.dd(),t);return n}function NOn(n,e){var t,i;for(i=new E(n.b);i.a=0,"Negative initial capacity"),TE(e>=0,"Non-positive load factor"),Cu(this)}function uF(n,e,t){return n>=128?!1:n<64?b5(ui(Ih(1,n),t),0):b5(ui(Ih(1,n-64),e),0)}function mwe(n,e){return!n||!e||n==e?!1:zd(n.b.c,e.b.c+e.b.b)<0&&zd(e.b.c,n.b.c+n.b.b)<0}function VOn(n){var e,t,i;return t=n.n,i=n.o,e=n.d,new ys(t.a-e.b,t.b-e.d,i.a+(e.b+e.c),i.b+(e.d+e.a))}function kwe(n){var e,t,i,r;for(t=n.a,i=0,r=t.length;ii)throw T(new V0(e,i));return n.hi()&&(t=aMn(n,t)),n.Vh(e,t)}function s7(n,e,t){return t==null?(!n.q&&(n.q=new we),O2(n.q,e)):(!n.q&&(n.q=new we),it(n.q,e,t)),n}function H(n,e,t){return t==null?(!n.q&&(n.q=new we),O2(n.q,e)):(!n.q&&(n.q=new we),it(n.q,e,t)),n}function QOn(n){var e,t;return t=new TC,Pr(t,n),H(t,(dl(),hp),n),e=new we,Cye(n,t,e),QEe(n,t,e),t}function Ewe(n){eg();var e,t,i;for(t=F(di,q,8,2,0,1),i=0,e=0;e<2;e++)i+=.5,t[e]=r3e(i,n);return t}function JOn(n,e){var t,i,r,c;for(t=!1,i=n.a[e].length,c=0;c>=1);return e}function ZOn(n){var e,t;return t=x7(n.h),t==32?(e=x7(n.m),e==32?x7(n.l)+32:e+20-10):t-12}function t6(n){var e;return e=n.a[n.b],e==null?null:(St(n.a,n.b,null),n.b=n.b+1&n.a.length-1,e)}function nDn(n){var e,t;return e=n.t-n.k[n.o.p]*n.d+n.j[n.o.p]>n.f,t=n.u+n.e[n.o.p]*n.d>n.f*n.s*n.d,e||t}function bT(n,e,t){var i,r;return i=new I$(e,t),r=new dI,n.b=zNn(n,n.b,i,r),r.b||++n.c,n.b.b=!1,r.d}function eDn(n,e,t){var i,r,c,o;for(o=c6(e,t),c=0,r=o.Kc();r.Ob();)i=u(r.Pb(),11),it(n.c,i,Q(c++))}function wl(n){var e,t;for(t=new E(n.a.b);t.at&&(t=n[e]);return t}function tDn(n,e,t){var i;return i=new X,XY(n,e,i,(J(),Vn),!0,!1),XY(n,t,i,Gn,!1,!1),i}function oF(n,e,t){var i,r,c,o;return c=null,o=e,r=Fd(o,"labels"),i=new jkn(n,t),c=(Hme(i.a,i.b,r),r),c}function Twe(n,e,t,i){var r;return r=xY(n,e,t,i),!r&&(r=Mge(n,t,i),r&&!rg(n,e,r))?null:r}function Mwe(n,e,t,i){var r;return r=LY(n,e,t,i),!r&&(r=TF(n,t,i),r&&!rg(n,e,r))?null:r}function iDn(n,e){var t;for(t=0;t1||e>=0&&n.b<3)}function o7(n){var e,t,i;for(e=new hu,i=_e(n,0);i.b!=i.d.c;)t=u(Re(i),8),s3(e,0,new kr(t));return e}function ja(n){var e,t;for(t=new E(n.a.b);t.ai?1:0}function QV(n,e){return ANn(n,e)?(Tn(n.b,u(k(e,(G(),Gb)),21),e),Ke(n.a,e),!0):!1}function Bwe(n){var e,t;e=u(k(n,(G(),Au)),10),e&&(t=e.c,Jc(t.a,e),t.a.c.length==0&&Jc(Gi(e).b,t))}function fDn(n){return vf?F($zn,lKn,572,0,0,1):u(af(n.a,F($zn,lKn,572,n.a.c.length,0,1)),842)}function Rwe(n,e,t,i){return QE(),new GI(A(M(Ha,1),OM,42,0,[(ex(n,e),new bd(n,e)),(ex(t,i),new bd(t,i))]))}function Rw(n,e,t){var i,r;return r=(i=new RI,i),wr(r,e,t),me((!n.q&&(n.q=new V(co,n,11,10)),n.q),r),r}function aF(n){var e,t,i,r;for(r=lre($ne,n),t=r.length,i=F(tn,q,2,t,6,1),e=0;e=n.b.c.length||(JV(n,2*e+1),t=2*e+2,t=0&&n[i]===e[i];i--);return i<0?0:cO(ui(n[i],fr),ui(e[i],fr))?-1:1}function _we(n,e){var t,i;for(i=_e(n,0);i.b!=i.d.c;)t=u(Re(i),214),t.e.length>0&&(e.td(t),t.i&&Fge(t))}function bF(n,e){var t,i;return i=u(Rn(n.a,4),126),t=F(bH,qB,415,e,0,1),i!=null&&gc(i,0,t,0,i.length),t}function lDn(n,e){var t;return t=new zx((n.f&256)!=0,n.i,n.a,n.d,(n.f&16)!=0,n.j,n.g,e),n.e!=null||(t.c=n),t}function Kwe(n,e){var t,i;for(i=n.Zb().Cc().Kc();i.Ob();)if(t=u(i.Pb(),14),t.Hc(e))return!0;return!1}function wF(n,e,t,i,r){var c,o;for(o=t;o<=r;o++)for(c=e;c<=i;c++)if(zw(n,c,o))return!0;return!1}function aDn(n,e,t){var i,r,c,o;for(_n(t),o=!1,c=n.Zc(e),r=t.Kc();r.Ob();)i=r.Pb(),c.Rb(i),o=!0;return o}function Hwe(n,e){var t;return n===e?!0:I(e,83)?(t=u(e,83),ZJ(Ed(n),t.vc())):!1}function dDn(n,e,t){var i,r;for(r=t.Kc();r.Ob();)if(i=u(r.Pb(),42),n.re(e,i.dd()))return!0;return!1}function bDn(n,e,t){return n.d[e.p][t.p]||(Bpe(n,e,t),n.d[e.p][t.p]=!0,n.d[t.p][e.p]=!0),n.a[e.p][t.p]}function W3(n,e){if(!n.ai()&&e==null)throw T(new Hn("The 'no null' constraint is violated"));return e}function X3(n,e){n.D==null&&n.B!=null&&(n.D=n.B,n.B=null),W$(n,e==null?null:(_n(e),e)),n.C&&n.yk(null)}function qwe(n,e){var t;return!n||n==e||!ai(e,(G(),m0))?!1:(t=u(k(e,(G(),m0)),10),t!=n)}function gF(n){switch(n.i){case 2:return!0;case 1:return!1;case-1:++n.c;default:return n.pl()}}function wDn(n){switch(n.i){case-2:return!0;case-1:return!1;case 1:--n.c;default:return n.ql()}}function gDn(n){cMn.call(this,"The given string does not match the expected format for individual spacings.",n)}function Vu(){Vu=N,gs=new Jj("ELK",0),Yhn=new Jj("JSON",1),Jhn=new Jj("DOT",2),Zhn=new Jj("SVG",3)}function f7(){f7=N,CP=new AO(Xh,0),Don=new AO("RADIAL_COMPACTION",1),$on=new AO("WEDGE_COMPACTION",2)}function lf(){lf=N,Win=new uO("CONCURRENT",0),ls=new uO("IDENTITY_FINISH",1),Rb=new uO("UNORDERED",2)}function pF(){pF=N,jrn=(Aj(),SR),yrn=new In(pnn,jrn),OUn=new kt(vnn),DUn=new kt(mnn),$Un=new kt(knn)}function V3(){V3=N,xcn=new j0n,Lcn=new E0n,zWn=new C0n,GWn=new T0n,qWn=new M0n,Fcn=(_n(qWn),new uln)}function Q3(){Q3=N,sK=new jO("CONSERVATIVE",0),con=new jO("CONSERVATIVE_SOFT",1),Rm=new jO("SLOPPY",2)}function wT(){wT=N,_hn=new vd(15),cne=new tr((Xe(),nd),_hn),t9=Mp,Lhn=HZn,Nhn=Za,Rhn=Kg,Bhn=BP}function vF(n,e,t){var i,r,c;for(i=new Tt,c=_e(t,0);c.b!=c.d.c;)r=u(Re(c),8),Ke(i,new kr(r));aDn(n,e,i)}function Gwe(n){var e,t,i;for(e=0,i=F(di,q,8,n.b,0,1),t=_e(n,0);t.b!=t.d.c;)i[e++]=u(Re(t),8);return i}function ZV(n){var e;return e=(!n.a&&(n.a=new V(e1,n,9,5)),n.a),e.i!=0?ore(u(D(e,0),678)):null}function zwe(n,e){var t;return t=qi(n,e),cO(h$(n,e),0)|Cre(h$(n,t),0)?t:qi(IM,h$(J0(t,63),1))}function Uwe(n,e){var t;t=cn((xF(),uP))!=null&&e.wg()!=null?K(Y(e.wg()))/K(Y(cn(uP))):1,it(n.b,e,t)}function Wwe(n,e){var t,i;return t=u(n.d.Bc(e),14),t?(i=n.e.hc(),i.Gc(t),n.e.d-=t.gc(),t.$b(),i):null}function nQ(n,e){var t,i;if(i=n.c[e],i!=0)for(n.c[e]=0,n.d-=i,t=e+1;t0)return a3(e-1,n.a.c.length),h1(n.a,e-1);throw T(new qmn)}function Xwe(n,e,t){if(e<0)throw T(new mr(_Hn+e));ee)throw T(new Hn(xM+n+aKn+e));if(n<0||e>t)throw T(new bG(xM+n+rnn+e+tnn+t))}function mDn(n){if(!n.a||!(n.a.i&8))throw T(new $r("Enumeration class expected for layout option "+n.f))}function lb(n){var e;++n.j,n.i==0?n.g=null:n.ihA?n-t>hA:t-n>hA}function kF(n,e){return!n||e&&!n.j||I(n,124)&&u(n,124).a.b==0?0:n.Re()}function pT(n,e){return!n||e&&!n.k||I(n,124)&&u(n,124).a.a==0?0:n.Se()}function h7(n){return jl(),n<0?n!=-1?new VQ(-1,-n):gR:n<=10?xin[Gt(n)]:new VQ(1,n)}function tQ(n){throw cF(),T(new L9n("Unexpected typeof result '"+n+"'; please report this bug to the GWT team"))}function CDn(n){H9n(),oE(this),eC(this),this.e=n,NNn(this,n),this.g=n==null?ru:Nr(n),this.a="",this.b=n,this.a=""}function iQ(){this.a=new qgn,this.f=new O6n(this),this.b=new D6n(this),this.i=new $6n(this),this.e=new F6n(this)}function TDn(){iie.call(this,new _X(sb(16))),rs(2,W_n),this.b=2,this.a=new RW(null,null,0,null),$9(this.a,this.a)}function i6(){i6=N,J_=new vO("DUMMY_NODE_OVER",0),qsn=new vO("DUMMY_NODE_UNDER",1),oP=new vO("EQUAL",2)}function yF(){yF=N,_R=sMn(A(M(e9,1),z,103,0,[(sr(),Zs),Ao])),KR=sMn(A(M(e9,1),z,103,0,[Yh,Jh]))}function jF(n){return(J(),uu).Hc(n.j)?K(Y(k(n,(G(),hv)))):Gr(A(M(di,1),q,8,0,[n.i.n,n.n,n.a])).b}function Zwe(n){var e,t,i,r;for(i=n.b.a,t=i.a.ec().Kc();t.Ob();)e=u(t.Pb(),561),r=new pNn(e,n.e,n.f),W(n.g,r)}function Ca(n,e){var t,i,r;i=n.nk(e,null),r=null,e&&(r=(Qp(),t=new ud,t),O3(r,n.r)),i=df(n,r,i),i&&i.Fi()}function nge(n,e){var t,i;for(i=xu(n.d,1)!=0,t=!0;t;)t=!1,t=e.c.Tf(e.e,i),t=t|_7(n,e,i,!1),i=!i;yV(n)}function rQ(n,e){var t,i,r;return i=!1,t=e.q.d,e.dr&&(JFn(e.q,r),i=t!=e.q.d)),i}function MDn(n,e){var t,i,r,c,o,f,h,l;return h=e.i,l=e.j,i=n.f,r=i.i,c=i.j,o=h-r,f=l-c,t=y.Math.sqrt(o*o+f*f),t}function cQ(n,e){var t,i;return i=OT(n),i||(t=(bL(),Yxn(e)),i=new Fmn(t),me(i.Vk(),n)),i}function l7(n,e){var t,i;return t=u(n.c.Bc(e),14),t?(i=n.hc(),i.Gc(t),n.d-=t.gc(),t.$b(),n.mc(i)):n.jc()}function ADn(n,e){var t;for(t=0;t=n.c.b:n.a<=n.c.b))throw T(new ic);return e=n.a,n.a+=n.c.c,++n.b,Q(e)}function ige(n){var e;return e=new uIn(n),O8(n.a,SWn,new Hu(A(M(Rk,1),rn,369,0,[e]))),e.d&&W(e.f,e.d),e.f}function EF(n){var e;return e=new Mz(n.a),Pr(e,n),H(e,(G(),rt),n),e.o.a=n.g,e.o.b=n.f,e.n.a=n.i,e.n.b=n.j,e}function rge(n,e,t,i){var r,c;for(c=n.Kc();c.Ob();)r=u(c.Pb(),70),r.n.a=e.a+(i.a-r.o.a)/2,r.n.b=e.b,e.b+=r.o.b+t}function cge(n,e,t){var i,r;for(r=e.a.a.ec().Kc();r.Ob();)if(i=u(r.Pb(),57),_Tn(n,i,t))return!0;return!1}function uge(n){var e,t;for(t=new E(n.r);t.a=0?e:-e;i>0;)i%2==0?(t*=t,i=i/2|0):(r*=t,i-=1);return e<0?1/r:r}function hge(n,e){var t,i,r;for(r=1,t=n,i=e>=0?e:-e;i>0;)i%2==0?(t*=t,i=i/2|0):(r*=t,i-=1);return e<0?1/r:r}function FDn(n){var e,t;if(n!=null)for(t=0;t0&&(t=u(un(n.a,n.a.c.length-1),570),QV(t,e))||W(n.a,new dSn(e))}function wge(n){wo();var e,t;e=n.d.c-n.e.c,t=u(n.g,145),Zc(t.b,new _5n(e)),Zc(t.c,new K5n(e)),$i(t.i,new H5n(e))}function BDn(n){var e;return e=new V1,e.a+="VerticalSegment ",rc(e,n.e),e.a+=" ",De(e,Lz(new YI,new E(n.k))),e.a}function gge(n){var e;return e=u(xd(n.c.c,""),229),e||(e=new M2(Vp(Xp(new Zg,""),"Other")),Aa(n.c.c,"",e)),e}function r6(n){var e;return n.Db&64?yo(n):(e=new Bs(yo(n)),e.a+=" (name: ",dr(e,n.zb),e.a+=")",e.a)}function hQ(n,e,t){var i,r;return r=n.sb,n.sb=e,n.Db&4&&!(n.Db&1)&&(i=new gi(n,1,4,r,e),t?t.Ei(i):t=i),t}function CF(n,e){var t,i,r;for(t=0,r=zr(n,e).Kc();r.Ob();)i=u(r.Pb(),11),t+=k(i,(G(),Au))!=null?1:0;return t}function Kw(n,e,t){var i,r,c;for(i=0,c=_e(n,0);c.b!=c.d.c&&(r=K(Y(Re(c))),!(r>t));)r>=e&&++i;return i}function pge(n,e,t){var i,r;return i=new Lh(n.e,3,13,null,(r=e.c,r||(Sn(),Tf)),v1(n,e),!1),t?t.Ei(i):t=i,t}function vge(n,e,t){var i,r;return i=new Lh(n.e,4,13,(r=e.c,r||(Sn(),Tf)),null,v1(n,e),!1),t?t.Ei(i):t=i,t}function lQ(n,e,t){var i,r;return r=n.r,n.r=e,n.Db&4&&!(n.Db&1)&&(i=new gi(n,1,8,r,n.r),t?t.Ei(i):t=i),t}function w1(n,e){var t,i;return t=u(e,676),i=t.vk(),!i&&t.wk(i=I(e,88)?new Fkn(n,u(e,26)):new eAn(n,u(e,148))),i}function a7(n,e,t){var i;n.qi(n.i+1),i=n.oi(e,t),e!=n.i&&gc(n.g,e,n.g,e+1,n.i-e),St(n.g,e,i),++n.i,n.bi(e,t),n.ci()}function mge(n,e){var t;return e.a&&(t=e.a.a.length,n.a?De(n.a,n.b):n.a=new Yu(n.d),iAn(n.a,e.a,e.d.length,t)),n}function kge(n,e){var t,i,r,c;if(e.vi(n.a),c=u(Rn(n.a,8),1936),c!=null)for(t=c,i=0,r=t.length;it)throw T(new mr(xM+n+rnn+e+", size: "+t));if(n>e)throw T(new Hn(xM+n+aKn+e))}function As(n,e,t){if(e<0)bY(n,t);else{if(!t.Ij())throw T(new Hn(Pl+t.ne()+em));u(t,66).Nj().Vj(n,n.yh(),e)}}function Ege(n,e,t,i,r,c,o,f){var h;for(h=t;c=i||e=65&&n<=70?n-65+10:n>=97&&n<=102?n-97+10:n>=48&&n<=57?n-48:0}function zDn(n){var e;return n.Db&64?yo(n):(e=new Bs(yo(n)),e.a+=" (source: ",dr(e,n.d),e.a+=")",e.a)}function Tge(n,e,t){var i,r;return r=n.a,n.a=e,n.Db&4&&!(n.Db&1)&&(i=new gi(n,1,5,r,n.a),t?FJ(t,i):t=i),t}function g1(n,e){var t;t=(n.Bb&256)!=0,e?n.Bb|=256:n.Bb&=-257,n.Db&4&&!(n.Db&1)&&et(n,new vo(n,1,2,t,e))}function dQ(n,e){var t;t=(n.Bb&256)!=0,e?n.Bb|=256:n.Bb&=-257,n.Db&4&&!(n.Db&1)&&et(n,new vo(n,1,8,t,e))}function kT(n,e){var t;t=(n.Bb&256)!=0,e?n.Bb|=256:n.Bb&=-257,n.Db&4&&!(n.Db&1)&&et(n,new vo(n,1,8,t,e))}function p1(n,e){var t;t=(n.Bb&512)!=0,e?n.Bb|=512:n.Bb&=-513,n.Db&4&&!(n.Db&1)&&et(n,new vo(n,1,3,t,e))}function bQ(n,e){var t;t=(n.Bb&512)!=0,e?n.Bb|=512:n.Bb&=-513,n.Db&4&&!(n.Db&1)&&et(n,new vo(n,1,9,t,e))}function u6(n,e){var t;return n.b==-1&&n.a&&(t=n.a.Gj(),n.b=t?n.c.Xg(n.a.aj(),t):yt(n.c.Tg(),n.a)),n.c.Og(n.b,e)}function Q(n){var e,t;return n>-129&&n<128?(e=n+128,t=(qEn(),jin)[e],!t&&(t=jin[e]=new gq(n)),t):new gq(n)}function J3(n){var e,t;return n>-129&&n<128?(e=n+128,t=(VEn(),Min)[e],!t&&(t=Min[e]=new vq(n)),t):new vq(n)}function wQ(n){var e,t;return e=n.k,e==(Qn(),Xt)?(t=u(k(n,(G(),ec)),61),t==(J(),Kn)||t==ae):!1}function Mge(n,e,t){var i,r,c;return c=(r=b4(n.b,e),r),c&&(i=u(jM(G8(n,c),""),26),i)?xY(n,i,e,t):null}function TF(n,e,t){var i,r,c;return c=(r=b4(n.b,e),r),c&&(i=u(jM(G8(n,c),""),26),i)?LY(n,i,e,t):null}function UDn(n,e){var t,i;for(i=new ie(n);i.e!=i.i.gc();)if(t=u(oe(i),138),B(e)===B(t))return!0;return!1}function s6(n,e,t){var i;if(i=n.gc(),e>i)throw T(new V0(e,i));if(n.hi()&&n.Hc(t))throw T(new Hn(yk));n.Xh(e,t)}function Age(n,e){var t;if(t=xw(n.i,e),t==null)throw T(new Sf("Node did not exist in input."));return MV(e,t),null}function Sge(n,e){var t;if(t=R7(n,e),I(t,322))return u(t,34);throw T(new Hn(Pl+e+"' is not a valid attribute"))}function Pge(n,e,t){var i,r;for(r=I(e,99)&&u(e,18).Bb&Yi?new LO(e,n):new H3(e,n),i=0;ie?1:n==e?n==0?ni(1/n,1/e):0:isNaN(n)?isNaN(e)?0:1:-1}function Bge(n,e){le(e,"Sort end labels",1),Rt(gt(qr(new $n(null,new xn(n.b,16)),new bdn),new wdn),new gdn),ce(e)}function o6(n,e,t){var i,r;return n.ej()?(r=n.fj(),i=Dx(n,e,t),n.$i(n.Zi(7,Q(t),i,e,r)),i):Dx(n,e,t)}function MF(n,e){var t,i,r;n.d==null?(++n.e,--n.f):(r=e.cd(),t=e.Sh(),i=(t&nt)%n.d.length,yde(n,i,hNn(n,i,t,r)))}function Y3(n,e){var t;t=(n.Bb&Eo)!=0,e?n.Bb|=Eo:n.Bb&=-1025,n.Db&4&&!(n.Db&1)&&et(n,new vo(n,1,10,t,e))}function Z3(n,e){var t;t=(n.Bb&Ib)!=0,e?n.Bb|=Ib:n.Bb&=-4097,n.Db&4&&!(n.Db&1)&&et(n,new vo(n,1,12,t,e))}function n4(n,e){var t;t=(n.Bb&mu)!=0,e?n.Bb|=mu:n.Bb&=-8193,n.Db&4&&!(n.Db&1)&&et(n,new vo(n,1,15,t,e))}function e4(n,e){var t;t=(n.Bb&Bb)!=0,e?n.Bb|=Bb:n.Bb&=-2049,n.Db&4&&!(n.Db&1)&&et(n,new vo(n,1,11,t,e))}function Rge(n,e){var t;return t=ni(n.b.c,e.b.c),t!=0||(t=ni(n.a.a,e.a.a),t!=0)?t:ni(n.a.b,e.a.b)}function _ge(n,e){var t;if(t=te(n.k,e),t==null)throw T(new Sf("Port did not exist in input."));return MV(e,t),null}function Kge(n){var e,t;for(t=wNn(is(n)).Kc();t.Ob();)if(e=Ce(t.Pb()),A6(n,e))return Vae((C7n(),zne),e);return null}function Hge(n,e){var t,i,r,c,o;for(o=Kc(n.e.Tg(),e),c=0,t=u(n.g,119),r=0;r>10)+rk&Ut,e[1]=(n&1023)+56320&Ut,Hs(e,0,e.length)}function jT(n){var e,t;return t=u(k(n,(nn(),as)),103),t==(sr(),kh)?(e=K(Y(k(n,zS))),e>=1?Ao:Jh):t}function zge(n){switch(u(k(n,(nn(),Qh)),218).g){case 1:return new ewn;case 3:return new uwn;default:return new nwn}}function Ta(n){if(n.c)Ta(n.c);else if(n.d)throw T(new $r("Stream already terminated, can't be modified or used"))}function PF(n){var e;return n.Db&64?yo(n):(e=new Bs(yo(n)),e.a+=" (identifier: ",dr(e,n.k),e.a+=")",e.a)}function QDn(n,e,t){var i,r;return i=(ad(),r=new Xy,r),UC(i,e),WC(i,t),n&&me((!n.a&&(n.a=new Yt(io,n,5)),n.a),i),i}function IF(n,e,t,i){var r,c;return _n(i),_n(t),r=n.xc(e),c=r==null?t:l7n(u(r,15),u(t,14)),c==null?n.Bc(e):n.zc(e,c),c}function Cn(n){var e,t,i,r;return t=(e=u(xo((i=n.gm,r=i.f,r==Ie?i:r)),9),new ks(e,u(bo(e,e.length),9),0)),ko(t,n),t}function Uge(n,e,t){var i,r;for(r=n.a.ec().Kc();r.Ob();)if(i=u(r.Pb(),10),t7(t,u(un(e,i.p),14)))return i;return null}function Wge(n,e,t){var i;try{Awe(n,e,t)}catch(r){throw r=jt(r),I(r,597)?(i=r,T(new EX(i))):T(r)}return e}function vl(n,e){var t;return Fr(n)&&Fr(e)&&(t=n-e,ik>1,n.k=t-1>>1}function OF(){_J();var n,e,t;t=qTe+++Date.now(),n=Gt(y.Math.floor(t*uk))&FM,e=Gt(t-n*enn),this.a=n^1502,this.b=e^tN}function Kh(n){var e,t,i;for(e=new X,i=new E(n.j);i.a34028234663852886e22?Ft:e<-34028234663852886e22?Qt:e}function JDn(n){return n-=n>>1&1431655765,n=(n>>2&858993459)+(n&858993459),n=(n>>4)+n&252645135,n+=n>>8,n+=n>>16,n&63}function YDn(n){var e,t,i,r;for(e=new Djn(n.Hd().gc()),r=0,i=$2(n.Hd().Kc());i.Ob();)t=i.Pb(),ole(e,t,Q(r++));return $5e(e.a)}function Zge(n,e){var t,i,r;for(r=new we,i=e.vc().Kc();i.Ob();)t=u(i.Pb(),42),it(r,t.cd(),Gbe(n,u(t.dd(),15)));return r}function yQ(n,e){n.n.c.length==0&&W(n.n,new lC(n.s,n.t,n.i)),W(n.b,e),iJ(u(un(n.n,n.n.c.length-1),211),e),oRn(n,e)}function Hw(n){return(n.c!=n.b.b||n.i!=n.g.b)&&(n.a.c=F(Zn,rn,1,0,5,1),Zt(n.a,n.b),Zt(n.a,n.g),n.c=n.b.b,n.i=n.g.b),n.a}function DF(n,e){var t,i,r;for(r=0,i=u(e.Kb(n),20).Kc();i.Ob();)t=u(i.Pb(),17),on(sn(k(t,(G(),kf))))||++r;return r}function n2e(n,e){var t,i,r;i=$w(e),r=K(Y(bb(i,(nn(),Mo)))),t=y.Math.max(0,r/2-.5),g6(e,t,1),W(n,new G7n(e,t))}function Ss(){Ss=N,Qk=new Q9(Xh,0),Sm=new Q9("FIRST",1),xl=new Q9(uHn,2),Pm=new Q9("LAST",3),Ub=new Q9(sHn,4)}function Hh(){Hh=N,rH=new Wj(K6,0),yy=new Wj("POLYLINE",1),Cv=new Wj("ORTHOGONAL",2),Sp=new Wj("SPLINES",3)}function ET(){ET=N,Jon=new PO("ASPECT_RATIO_DRIVEN",0),IK=new PO("MAX_SCALE_DRIVEN",1),Qon=new PO("AREA_DRIVEN",2)}function w7(){w7=N,AP=new IO("P1_STRUCTURE",0),SP=new IO("P2_PROCESSING_ORDER",1),PP=new IO("P3_EXECUTION",2)}function CT(){CT=N,CK=new MO("OVERLAP_REMOVAL",0),jK=new MO("COMPACTION",1),EK=new MO("GRAPH_SIZE_CALCULATION",2)}function zd(n,e){return Zo(),mo(Cl),y.Math.abs(n-e)<=Cl||n==e||isNaN(n)&&isNaN(e)?0:ne?1:pd(isNaN(n),isNaN(e))}function ZDn(n,e){var t,i;for(t=_e(n,0);t.b!=t.d.c;){if(i=x9(Y(Re(t))),i==e)return;if(i>e){a$(t);break}}y8(t,e)}function En(n,e){var t,i,r,c,o;if(t=e.f,Aa(n.c.d,t,e),e.g!=null)for(r=e.g,c=0,o=r.length;ce&&i.ue(n[c-1],n[c])>0;--c)o=n[c],St(n,c,n[c-1]),St(n,c-1,o)}function Ps(n,e,t,i){if(e<0)_Y(n,t,i);else{if(!t.Ij())throw T(new Hn(Pl+t.ne()+em));u(t,66).Nj().Tj(n,n.yh(),e,i)}}function TT(n,e){if(e==n.d)return n.e;if(e==n.e)return n.d;throw T(new Hn("Node "+e+" not part of edge "+n))}function t2e(n,e){switch(e.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function n$n(n,e){switch(e.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function jQ(n,e,t,i){switch(e){case 3:return n.f;case 4:return n.g;case 5:return n.i;case 6:return n.j}return aQ(n,e,t,i)}function i2e(n){return n.k!=(Qn(),ii)?!1:C3(new $n(null,new Cd(new re(ue(ei(n).a.Kc(),new An)))),new Hbn)}function r2e(n){return n.e==null?n:(!n.c&&(n.c=new zx((n.f&256)!=0,n.i,n.a,n.d,(n.f&16)!=0,n.j,n.g,null)),n.c)}function c2e(n,e){return n.h==tk&&n.m==0&&n.l==0?(e&&(Il=Bc(0,0,0)),eyn((I3(),gin))):(e&&(Il=Bc(n.l,n.m,n.h)),Bc(0,0,0))}function Nr(n){var e;return Array.isArray(n)&&n.im===Xg?J1($u(n))+"@"+(e=mt(n)>>>0,e.toString(16)):n.toString()}function f6(n){var e;this.a=(e=u(n.e&&n.e(),9),new ks(e,u(bo(e,e.length),9),0)),this.b=F(Zn,rn,1,this.a.a.length,5,1)}function u2e(n){var e,t,i;for(this.a=new Sh,i=new E(n);i.a0&&(Te(e-1,n.length),n.charCodeAt(e-1)==58)&&!$F(n,a9,d9))}function $F(n,e,t){var i,r;for(i=0,r=n.length;i=r)return e.c+t;return e.c+e.b.gc()}function l2e(n,e){o3();var t,i,r,c;for(i=bPn(n),r=e,S3(i,0,i.length,r),t=0;t0&&(i+=r,++t);return t>1&&(i+=n.d*(t-1)),i}function CQ(n){var e,t,i;for(i=new i1,i.a+="[",e=0,t=n.gc();e0&&this.b>0&&cW(this.c,this.b,this.a)}function AQ(n){xF(),this.c=uf(A(M(sMe,1),rn,831,0,[LQn])),this.b=new we,this.a=n,it(this.b,uP,1),Zc(NQn,new q6n(this))}function e$n(n,e){var t;return n.d?Uu(n.b,e)?u(te(n.b,e),51):(t=e.Kf(),it(n.b,e,t),t):e.Kf()}function SQ(n,e){var t;return B(n)===B(e)?!0:I(e,91)?(t=u(e,91),n.e==t.e&&n.d==t.d&&Jae(n,t.a)):!1}function B2(n){switch(J(),n.g){case 4:return Kn;case 1:return Vn;case 3:return ae;case 2:return Gn;default:return Xr}}function PQ(n,e){switch(e){case 3:return n.f!=0;case 4:return n.g!=0;case 5:return n.i!=0;case 6:return n.j!=0}return SV(n,e)}function p2e(n){switch(n.g){case 0:return new Lgn;case 1:return new Ngn;default:throw T(new Hn(lB+(n.f!=null?n.f:""+n.g)))}}function t$n(n){switch(n.g){case 0:return new xgn;case 1:return new Bgn;default:throw T(new Hn(AN+(n.f!=null?n.f:""+n.g)))}}function i$n(n){switch(n.g){case 0:return new sG;case 1:return new b9n;default:throw T(new Hn(bA+(n.f!=null?n.f:""+n.g)))}}function v2e(n){switch(n.g){case 1:return new Pgn;case 2:return new kjn;default:throw T(new Hn(lB+(n.f!=null?n.f:""+n.g)))}}function m2e(n){var e,t;if(n.b)return n.b;for(t=vf?null:n.d;t;){if(e=vf?null:t.b,e)return e;t=vf?null:t.d}return e3(),Uin}function k2e(n){var e,t,i;return n.e==0?0:(e=n.d<<5,t=n.a[n.d-1],n.e<0&&(i=dOn(n),i==n.d-1&&(--t,t=t|0)),e-=x7(t),e)}function y2e(n){var e,t,i;return n>5,e=n&31,i=F(be,Le,25,t+1,15,1),i[t]=1<3;)r*=10,--c;n=(n+(r>>1))/r|0}return i.i=n,!0}function E2e(n){return yF(),qn(),!!(n$n(u(n.a,81).j,u(n.b,103))||u(n.a,81).d.e!=0&&n$n(u(n.a,81).j,u(n.b,103)))}function C2e(n){DC(),u(n.We((Xe(),_l)),174).Hc((Lu(),UP))&&(u(n.We(rw),174).Fc((Mu(),Pp)),u(n.We(_l),174).Mc(UP))}function c$n(n,e){var t,i;if(e){for(t=0;t=0;--i)for(e=t[i],r=0;r>1,this.k=e-1>>1}function I2e(n,e){le(e,"End label post-processing",1),Rt(gt(qr(new $n(null,new xn(n.b,16)),new udn),new sdn),new odn),ce(e)}function O2e(n,e,t){var i,r;return i=K(n.p[e.i.p])+K(n.d[e.i.p])+e.n.b+e.a.b,r=K(n.p[t.i.p])+K(n.d[t.i.p])+t.n.b+t.a.b,r-i}function D2e(n,e,t){var i,r;for(i=ui(t,fr),r=0;fc(i,0)!=0&&r0&&(Te(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e))}function F2e(n){var e;return n==null?null:new il((e=jc(n,!0),e.length>0&&(Te(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e))}function LQ(n,e){var t;return n.i>0&&(e.lengthn.i&&St(e,n.i,null),e}function Oc(n,e,t){var i,r,c;return n.ej()?(i=n.i,c=n.fj(),a7(n,i,e),r=n.Zi(3,null,e,i,c),t?t.Ei(r):t=r):a7(n,n.i,e),t}function x2e(n,e,t){var i,r;return i=new Lh(n.e,4,10,(r=e.c,I(r,88)?u(r,26):(Sn(),so)),null,v1(n,e),!1),t?t.Ei(i):t=i,t}function L2e(n,e,t){var i,r;return i=new Lh(n.e,3,10,null,(r=e.c,I(r,88)?u(r,26):(Sn(),so)),v1(n,e),!1),t?t.Ei(i):t=i,t}function o$n(n){W0();var e;return e=new kr(u(n.e.We((Xe(),Kg)),8)),n.B.Hc((Lu(),Mv))&&(e.a<=0&&(e.a=20),e.b<=0&&(e.b=20)),e}function f$n(n){wb();var e;return(n.q?n.q:(Pn(),Pn(),vh))._b((nn(),j0))?e=u(k(n,j0),197):e=u(k(Gi(n),$m),197),e}function bb(n,e){var t,i;return i=null,ai(n,(nn(),rP))&&(t=u(k(n,rP),94),t.Xe(e)&&(i=t.We(e))),i==null&&(i=k(Gi(n),e)),i}function h$n(n,e){var t,i,r;return I(e,42)?(t=u(e,42),i=t.cd(),r=ab(n.Rc(),i),Ff(r,t.dd())&&(r!=null||n.Rc()._b(i))):!1}function NF(n,e){var t,i,r;return n.f>0?(n.qj(),i=e==null?0:mt(e),r=(i&nt)%n.d.length,t=hNn(n,r,i,e),t!=-1):!1}function Ko(n,e){var t,i,r;return n.f>0&&(n.qj(),i=e==null?0:mt(e),r=(i&nt)%n.d.length,t=kY(n,r,i,e),t)?t.dd():null}function g7(n,e){var t,i,r,c;for(c=Kc(n.e.Tg(),e),t=u(n.g,119),r=0;r1?cf(Ih(e.a[1],32),ui(e.a[0],fr)):ui(e.a[0],fr),$d(Ni(e.e,t))))}function p7(n,e){var t;return Fr(n)&&Fr(e)&&(t=n%e,ik>5,e&=31,r=n.d+t+(e==0?0:1),i=F(be,Le,25,r,15,1),Nve(i,n.a,t,e),c=new Pw(n.e,r,i),K5(c),c}function BQ(n,e,t){var i,r;i=u(vc(Pv,e),117),r=u(vc(m9,e),117),t?(yr(Pv,n,i),yr(m9,n,r)):(yr(m9,n,i),yr(Pv,n,r))}function p$n(n,e,t){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.ue(e,c.d),t&&i==0)return c;i>=0?c=c.a[1]:(r=c,c=c.a[0])}return r}function v$n(n,e,t){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.ue(e,c.d),t&&i==0)return c;i<=0?c=c.a[0]:(r=c,c=c.a[1])}return r}function K2e(n,e,t,i){var r,c,o;return r=!1,jEe(n.f,t,i)&&(ape(n.f,n.a[e][t],n.a[e][i]),c=n.a[e],o=c[i],c[i]=c[t],c[t]=o,r=!0),r}function RQ(n,e,t,i,r){var c,o,f;for(o=r;e.b!=e.c;)c=u(y2(e),10),f=u(zr(c,i).Xb(0),11),n.d[f.p]=o++,t.c[t.c.length]=f;return o}function _Q(n,e,t){var i,r,c,o,f;return o=n.k,f=e.k,i=t[o.g][f.g],r=Y(bb(n,i)),c=Y(bb(e,i)),y.Math.max((_n(r),r),(_n(c),c))}function H2e(n,e,t){var i,r,c,o;for(i=t/n.c.length,r=0,o=new E(n);o.a2e3&&(wzn=n,KA=y.setTimeout(Vie,10))),_A++==0?(E0e((aG(),din)),!0):!1}function G2e(n,e){var t,i,r;for(i=new re(ue(ei(n).a.Kc(),new An));Se(i);)if(t=u(ve(i),17),r=t.d.i,r.c==e)return!1;return!0}function KQ(n,e){var t,i;if(I(e,245)){i=u(e,245);try{return t=n.vd(i),t==0}catch(r){if(r=jt(r),!I(r,205))throw T(r)}}return!1}function z2e(){return Error.stackTraceLimit>0?(y.Error.stackTraceLimit=Error.stackTraceLimit=64,!0):"stack"in new Error}function U2e(n,e){return Zo(),Zo(),mo(Cl),(y.Math.abs(n-e)<=Cl||n==e||isNaN(n)&&isNaN(e)?0:ne?1:pd(isNaN(n),isNaN(e)))>0}function HQ(n,e){return Zo(),Zo(),mo(Cl),(y.Math.abs(n-e)<=Cl||n==e||isNaN(n)&&isNaN(e)?0:ne?1:pd(isNaN(n),isNaN(e)))<0}function y$n(n,e){return Zo(),Zo(),mo(Cl),(y.Math.abs(n-e)<=Cl||n==e||isNaN(n)&&isNaN(e)?0:ne?1:pd(isNaN(n),isNaN(e)))<=0}function RF(n,e){for(var t=0;!e[t]||e[t]=="";)t++;for(var i=e[t++];tJL)return t.fh();if(i=t.Zg(),i||t==n)break}return i}function qQ(n){return dC(),I(n,156)?u(te($y,Azn),288).vg(n):Uu($y,$u(n))?u(te($y,$u(n)),288).vg(n):null}function X2e(n){if(DT(B4,n))return qn(),z4;if(DT(EB,n))return qn(),qa;throw T(new Hn("Expecting true or false"))}function V2e(n,e){if(e.c==n)return e.d;if(e.d==n)return e.c;throw T(new Hn("Input edge is not connected to the input port."))}function A$n(n,e){return n.e>e.e?1:n.ee.d?n.e:n.d=48&&n<48+y.Math.min(10,10)?n-48:n>=97&&n<97?n-97+10:n>=65&&n<65?n-65+10:-1}function P$n(n,e){var t;return B(e)===B(n)?!0:!I(e,21)||(t=u(e,21),t.gc()!=n.gc())?!1:n.Ic(t)}function Q2e(n,e){var t,i,r,c;return i=n.a.length-1,t=e-n.b&i,c=n.c-e&i,r=n.c-n.b&i,cjn(t=c?(Vwe(n,e),-1):(Qwe(n,e),1)}function J2e(n,e){var t,i;for(t=(Te(e,n.length),n.charCodeAt(e)),i=e+1;ie.e?1:n.fe.f?1:mt(n)-mt(e)}function DT(n,e){return _n(n),e==null?!1:Mn(n,e)?!0:n.length==e.length&&Mn(n.toLowerCase(),e.toLowerCase())}function upe(n,e){var t,i,r,c;for(i=0,r=e.gc();i0&&fc(n,128)<0?(e=ge(n)+128,t=(XEn(),Ein)[e],!t&&(t=Ein[e]=new pq(n)),t):new pq(n)}function O$n(n,e){var t,i;return t=e.Hh(n.a),t&&(i=Ce(Ko((!t.b&&(t.b=new Gu((Sn(),nr),tc,t)),t.b),We)),i!=null)?i:e.ne()}function spe(n,e){var t,i;return t=e.Hh(n.a),t&&(i=Ce(Ko((!t.b&&(t.b=new Gu((Sn(),nr),tc,t)),t.b),We)),i!=null)?i:e.ne()}function ope(n,e){c$();var t,i;for(i=new re(ue(Kh(n).a.Kc(),new An));Se(i);)if(t=u(ve(i),17),t.d.i==e||t.c.i==e)return t;return null}function UQ(n,e,t){this.c=n,this.f=new X,this.e=new Li,this.j=new eW,this.n=new eW,this.b=e,this.g=new ys(e.c,e.d,e.b,e.a),this.a=t}function _F(n){var e,t,i,r;for(this.a=new Sh,this.d=new hi,this.e=0,t=n,i=0,r=t.length;i0):!1}function F$n(n){var e;B(hn(n,(Xe(),Bg)))===B((_h(),HP))&&(Pt(n)?(e=u(hn(Pt(n),Bg),334),gr(n,Bg,e)):gr(n,Bg,i9))}function ape(n,e,t){var i,r;yx(n.e,e,t,(J(),Gn)),yx(n.i,e,t,Vn),n.a&&(r=u(k(e,(G(),rt)),11),i=u(k(t,rt),11),l$(n.g,r,i))}function x$n(n,e,t){var i,r,c;i=e.c.p,c=e.p,n.b[i][c]=new YTn(n,e),t&&(n.a[i][c]=new c6n(e),r=u(k(e,(G(),m0)),10),r&&Tn(n.d,r,e))}function L$n(n,e){var t,i,r;if(W(eS,n),e.Fc(n),t=u(te(DR,n),21),t)for(r=t.Kc();r.Ob();)i=u(r.Pb(),33),xr(eS,i,0)!=-1||L$n(i,e)}function dpe(n,e,t){var i;(Fzn?(m2e(n),!0):xzn||Nzn?(e3(),!0):Lzn&&(e3(),!1))&&(i=new hEn(e),i.b=t,g5e(n,i))}function KF(n,e){var t;t=!n.A.Hc((Qu(),id))||n.q==(Mi(),Ac),n.u.Hc((Mu(),n1))?t?xCe(n,e):a_n(n,e):n.u.Hc(Gl)&&(t?nCe(n,e):M_n(n,e))}function r4(n,e){var t,i;if(++n.j,e!=null&&(t=(i=n.a.Cb,I(i,97)?u(i,97).Jg():null),ome(e,t))){R2(n.a,4,t);return}R2(n.a,4,u(e,126))}function N$n(n,e,t){return new ys(y.Math.min(n.a,e.a)-t/2,y.Math.min(n.b,e.b)-t/2,y.Math.abs(n.a-e.a)+t,y.Math.abs(n.b-e.b)+t)}function bpe(n,e){var t,i;return t=Wc(n.a.c.p,e.a.c.p),t!=0?t:(i=Wc(n.a.d.i.p,e.a.d.i.p),i!=0?i:Wc(e.a.d.p,n.a.d.p))}function wpe(n,e,t){var i,r,c,o;return c=e.j,o=t.j,c!=o?c.g-o.g:(i=n.f[e.p],r=n.f[t.p],i==0&&r==0?0:i==0?-1:r==0?1:ni(i,r))}function B$n(n,e,t){var i,r,c;if(!t[e.d])for(t[e.d]=!0,r=new E(Hw(e));r.a=r)return r;for(e=e>0?e:0;ei&&St(e,i,null),e}function _$n(n,e){var t,i;for(i=n.a.length,e.lengthi&&St(e,i,null),e}function Aa(n,e,t){var i,r,c;return r=u(te(n.e,e),387),r?(c=gU(r,t),Oyn(n,r),c):(i=new qU(n,e,t),it(n.e,e,i),iMn(i),null)}function vpe(n){var e;if(n==null)return null;if(e=a9e(jc(n,!0)),e==null)throw T(new VI("Invalid hexBinary value: '"+n+"'"));return e}function m7(n){return jl(),fc(n,0)<0?fc(n,-1)!=0?new OJ(-1,P3(n)):gR:fc(n,10)<=0?xin[ge(n)]:new OJ(1,n)}function qF(){return SM(),A(M(yUn,1),z,159,0,[mUn,vUn,kUn,hUn,fUn,lUn,bUn,dUn,aUn,pUn,gUn,wUn,sUn,uUn,oUn,rUn,iUn,cUn,eUn,nUn,tUn,TR])}function K$n(n){var e;this.d=new X,this.j=new Li,this.g=new Li,e=n.g.b,this.f=u(k(Gi(e),(nn(),as)),103),this.e=K(Y(xT(e,nw)))}function H$n(n){this.b=new X,this.e=new X,this.d=n,this.a=!Wv(gt(new $n(null,new Cd(new sf(n.b))),new Fv(new qbn))).sd((ca(),V4))}function Ho(){Ho=N,Xn=new Z9("PARENTS",0),vi=new Z9("NODES",1),Zf=new Z9("EDGES",2),Ya=new Z9("PORTS",3),D1=new Z9("LABELS",4)}function qw(){qw=N,Hl=new e8("DISTRIBUTED",0),Cy=new e8("JUSTIFIED",1),Hhn=new e8("BEGIN",2),r9=new e8(I4,3),qhn=new e8("END",4)}function mpe(n){var e;switch(e=n.yi(null),e){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4}return-1}function GF(n){switch(n.g){case 1:return sr(),Yh;case 4:return sr(),Zs;case 2:return sr(),Ao;case 3:return sr(),Jh}return sr(),kh}function kpe(n,e,t){var i;switch(i=t.q.getFullYear()-Tl+Tl,i<0&&(i=-i),e){case 1:n.a+=i;break;case 2:oh(n,i%100,2);break;default:oh(n,i,e)}}function _e(n,e){var t,i;if(tb(e,n.b),e>=n.b>>1)for(i=n.c,t=n.b;t>e;--t)i=i.b;else for(i=n.a.a,t=0;t=64&&e<128&&(r=cf(r,Ih(1,e-64)));return r}function xT(n,e){var t,i;return i=null,ai(n,(Xe(),Ap))&&(t=u(k(n,Ap),94),t.Xe(e)&&(i=t.We(e))),i==null&&Gi(n)&&(i=k(Gi(n),e)),i}function z$n(n,e){var t,i,r;r=e.d.i,i=r.k,!(i==(Qn(),ii)||i==mf)&&(t=new re(ue(ei(r).a.Kc(),new An)),Se(t)&&it(n.k,e,u(ve(t),17)))}function zF(n,e){var t,i,r;return i=On(n.Tg(),e),t=e-n.Ah(),t<0?(r=n.Yg(i),r>=0?n.lh(r):Ox(n,i)):t<0?Ox(n,i):u(i,66).Nj().Sj(n,n.yh(),t)}function cn(n){var e;if(I(n.a,4)){if(e=qQ(n.a),e==null)throw T(new $r(HHn+n.b+"'. "+KHn+(Ph(Fy),Fy.k)+Etn));return e}else return n.a}function Epe(n){var e;if(n==null)return null;if(e=qCe(jc(n,!0)),e==null)throw T(new VI("Invalid base64Binary value: '"+n+"'"));return e}function oe(n){var e;try{return e=n.i.Xb(n.e),n.mj(),n.g=n.e++,e}catch(t){throw t=jt(t),I(t,73)?(n.mj(),T(new ic)):T(t)}}function UF(n){var e;try{return e=n.c.ki(n.e),n.mj(),n.g=n.e++,e}catch(t){throw t=jt(t),I(t,73)?(n.mj(),T(new ic)):T(t)}}function a6(){a6=N,Trn=(Xe(),yhn),IR=Zfn,FUn=Tp,Crn=nd,BUn=(WT(),irn),NUn=ern,RUn=crn,LUn=nrn,xUn=(pF(),yrn),PR=OUn,Ern=DUn,nS=$Un}function LT(n){switch(DG(),this.c=new X,this.d=n,n.g){case 0:case 2:this.a=_W(qrn),this.b=Ft;break;case 3:case 1:this.a=qrn,this.b=Qt}}function U$n(n,e,t){var i,r;if(n.c)nu(n.c,n.c.i+e),eu(n.c,n.c.j+t);else for(r=new E(n.b);r.a0&&(W(n.b,new MEn(e.a,t)),i=e.a.length,0i&&(e.a+=Iyn(F(Ls,Rf,25,-i,15,1))))}function W$n(n,e){var t,i,r;for(t=n.o,r=u(u(ct(n.r,e),21),84).Kc();r.Ob();)i=u(r.Pb(),111),i.e.a=M3e(i,t.a),i.e.b=t.b*K(Y(i.b.We(JA)))}function Tpe(n,e){var t,i,r,c;return r=n.k,t=K(Y(k(n,(G(),k0)))),c=e.k,i=K(Y(k(e,k0))),c!=(Qn(),Xt)?-1:r!=Xt?1:t==i?0:t=0?n.hh(e,t,i):(n.eh()&&(i=(r=n.Vg(),r>=0?n.Qg(i):n.eh().ih(n,-1-r,null,i))),n.Sg(e,t,i))}function XQ(n,e){switch(e){case 7:!n.e&&(n.e=new Fn(bi,n,7,4)),de(n.e);return;case 8:!n.d&&(n.d=new Fn(bi,n,8,5)),de(n.d);return}FQ(n,e)}function qo(n,e){var t;t=n.Zc(e);try{return t.Pb()}catch(i){throw i=jt(i),I(i,109)?T(new mr("Can't get element "+e)):T(i)}}function VQ(n,e){this.e=n,e=0&&(t.d=n.t);break;case 3:n.t>=0&&(t.a=n.t)}n.C&&(t.b=n.C.b,t.c=n.C.c)}function K2(){K2=N,$k=new Rj(NM,0),Dk=new Rj(lN,1),Fk=new Rj(aN,2),xk=new Rj(dN,3),$k.a=!1,Dk.a=!0,Fk.a=!1,xk.a=!0}function d6(){d6=N,Lk=new Bj(NM,0),YA=new Bj(lN,1),ZA=new Bj(aN,2),Nk=new Bj(dN,3),Lk.a=!1,YA.a=!0,ZA.a=!1,Nk.a=!0}function Ipe(n){var e;e=n.a;do e=u(ve(new re(ue(Lr(e).a.Kc(),new An))),17).c.i,e.k==(Qn(),pi)&&n.b.Fc(e);while(e.k==(Qn(),pi));n.b=va(n.b)}function Ope(n){var e,t,i;for(i=n.c.a,n.p=(pe(i),new du(i)),t=new E(i);t.at.b)return!0}return!1}function WF(n,e){return ki(n)?!!ozn[e]:n.hm?!!n.hm[e]:G0(n)?!!szn[e]:q0(n)?!!uzn[e]:!1}function gr(n,e,t){return t==null?(!n.o&&(n.o=new Xu((Dc(),Ul),S0,n,0)),IT(n.o,e)):(!n.o&&(n.o=new Xu((Dc(),Ul),S0,n,0)),XT(n.o,e,t)),n}function xpe(n,e,t,i){var r,c;c=e.Xe((Xe(),_g))?u(e.We(_g),21):n.j,r=Cge(c),r!=(SM(),TR)&&(t&&!GQ(r)||nY(d9e(n,r,i),e))}function BT(n,e,t,i){var r,c,o;return c=On(n.Tg(),e),r=e-n.Ah(),r<0?(o=n.Yg(c),o>=0?n._g(o,t,!0):Yd(n,c,t)):u(c,66).Nj().Pj(n,n.yh(),r,t,i)}function Lpe(n,e,t,i){var r,c,o;t.mh(e)&&(er(),R$(e)?(r=u(t.ah(e),153),upe(n,r)):(c=(o=e,o?u(i,49).xh(o):null),c&&Bte(t.ah(e),c)))}function Npe(n){switch(n.g){case 1:return Hd(),Ok;case 3:return Hd(),Ik;case 2:return Hd(),AR;case 4:return Hd(),MR;default:return null}}function QQ(n){switch(typeof n){case EL:return m1(n);case UZ:return Gt(n);case X2:return qn(),n?1231:1237;default:return n==null?0:md(n)}}function Bpe(n,e,t){if(n.e)switch(n.b){case 1:d1e(n.c,e,t);break;case 0:b1e(n.c,e,t)}else xAn(n.c,e,t);n.a[e.p][t.p]=n.c.i,n.a[t.p][e.p]=n.c.e}function Y$n(n){var e,t;if(n==null)return null;for(t=F(mh,q,193,n.length,0,2),e=0;e=0)return r;if(n.Fk()){for(i=0;i=r)throw T(new V0(e,r));if(n.hi()&&(i=n.Xc(t),i>=0&&i!=e))throw T(new Hn(yk));return n.mi(e,t)}function JQ(n,e){if(this.a=u(pe(n),245),this.b=u(pe(e),245),n.vd(e)>0||n==(qI(),cR)||e==(HI(),uR))throw T(new Hn("Invalid range: "+OAn(n,e)))}function Z$n(n){var e,t;for(this.b=new X,this.c=n,this.a=!1,t=new E(n.a);t.a0),(e&-e)==e)return Gt(e*xu(n,31)*4656612873077393e-25);do t=xu(n,31),i=t%e;while(t-i+(e-1)<0);return Gt(i)}function m1(n){lEn();var e,t,i;return t=":"+n,i=XA[t],i!=null?Gt((_n(i),i)):(i=Xin[t],e=i==null?I8e(n):Gt((_n(i),i)),c1e(),XA[t]=e,e)}function eFn(n,e,t){le(t,"Compound graph preprocessor",1),n.a=new Od,s_n(n,e,null),pje(n,e),Z9e(n),H(e,(G(),dun),n.a),n.a=null,Cu(n.b),ce(t)}function Kpe(n,e,t){switch(t.g){case 1:n.a=e.a/2,n.b=0;break;case 2:n.a=e.a,n.b=e.b/2;break;case 3:n.a=e.a/2,n.b=e.b;break;case 4:n.a=0,n.b=e.b/2}}function Hpe(n){var e,t,i;for(i=u(ct(n.a,(Vw(),IS)),15).Kc();i.Ob();)t=u(i.Pb(),101),e=hJ(t),b3(n,t,e[0],(Kd(),w0),0),b3(n,t,e[1],g0,1)}function qpe(n){var e,t,i;for(i=u(ct(n.a,(Vw(),OS)),15).Kc();i.Ob();)t=u(i.Pb(),101),e=hJ(t),b3(n,t,e[0],(Kd(),w0),0),b3(n,t,e[1],g0,1)}function XF(n){switch(n.g){case 0:return null;case 1:return new eOn;case 2:return new oG;default:throw T(new Hn(lB+(n.f!=null?n.f:""+n.g)))}}function k7(n,e,t){var i,r;for(lwe(n,e-n.s,t-n.t),r=new E(n.n);r.a1&&(c=_pe(n,e)),c}function VF(n){var e;return n.f&&n.f.kh()&&(e=u(n.f,49),n.f=u(pl(n,e),82),n.f!=e&&n.Db&4&&!(n.Db&1)&&et(n,new gi(n,9,8,e,n.f))),n.f}function QF(n){var e;return n.i&&n.i.kh()&&(e=u(n.i,49),n.i=u(pl(n,e),82),n.i!=e&&n.Db&4&&!(n.Db&1)&&et(n,new gi(n,9,7,e,n.i))),n.i}function ir(n){var e;return n.b&&n.b.Db&64&&(e=n.b,n.b=u(pl(n,e),18),n.b!=e&&n.Db&4&&!(n.Db&1)&&et(n,new gi(n,9,21,e,n.b))),n.b}function KT(n,e){var t,i,r;n.d==null?(++n.e,++n.f):(i=e.Sh(),u8e(n,n.f+1),r=(i&nt)%n.d.length,t=n.d[r],!t&&(t=n.d[r]=n.uj()),t.Fc(e),++n.f)}function nJ(n,e,t){var i;return e.Kj()?!1:e.Zj()!=-2?(i=e.zj(),i==null?t==null:tt(i,t)):e.Hj()==n.e.Tg()&&t==null}function HT(){var n;rs(16,J_n),n=UIn(16),this.b=F(oR,nk,317,n,0,1),this.c=F(oR,nk,317,n,0,1),this.a=null,this.e=null,this.i=0,this.f=n-1,this.g=0}function qh(n){vU.call(this),this.k=(Qn(),ii),this.j=(rs(6,Pb),new Pc(6)),this.b=(rs(2,Pb),new Pc(2)),this.d=new NI,this.f=new Zq,this.a=n}function zpe(n){var e,t;n.c.length<=1||(e=ZNn(n,(J(),ae)),Kxn(n,u(e.a,19).a,u(e.b,19).a),t=ZNn(n,Gn),Kxn(n,u(t.a,19).a,u(t.b,19).a))}function b6(){b6=N,zsn=new V9("SIMPLE",0),nK=new V9(PN,1),eK=new V9("LINEAR_SEGMENTS",2),Lm=new V9("BRANDES_KOEPF",3),Nm=new V9(EHn,4)}function eJ(n,e,t){p2(u(k(e,(nn(),Lt)),98))||(VX(n,e,k1(e,t)),VX(n,e,k1(e,(J(),ae))),VX(n,e,k1(e,Kn)),Pn(),wi(e.j,new i6n(n)))}function tFn(n,e,t,i){var r,c,o;for(r=u(ct(i?n.a:n.b,e),21),o=r.Kc();o.Ob();)if(c=u(o.Pb(),33),aM(n,t,c))return!0;return!1}function JF(n){var e,t;for(t=new ie(n);t.e!=t.i.gc();)if(e=u(oe(t),87),e.e||(!e.d&&(e.d=new Yt(ar,e,1)),e.d).i!=0)return!0;return!1}function YF(n){var e,t;for(t=new ie(n);t.e!=t.i.gc();)if(e=u(oe(t),87),e.e||(!e.d&&(e.d=new Yt(ar,e,1)),e.d).i!=0)return!0;return!1}function Upe(n){var e,t,i;for(e=0,i=new E(n.c.a);i.a102?-1:n<=57?n-48:n<65?-1:n<=70?n-65+10:n<97?-1:n-97+10}function ex(n,e){if(n==null)throw T(new c2("null key in entry: null="+e));if(e==null)throw T(new c2("null value in entry: "+n+"=null"))}function Wpe(n,e){for(var t,i;n.Ob();)if(!e.Ob()||(t=n.Pb(),i=e.Pb(),!(B(t)===B(i)||t!=null&&tt(t,i))))return!1;return!e.Ob()}function rFn(n,e){var t;return t=A(M(Ei,1),pr,25,15,[kF(n.a[0],e),kF(n.a[1],e),kF(n.a[2],e)]),n.d&&(t[0]=y.Math.max(t[0],t[2]),t[2]=t[0]),t}function cFn(n,e){var t;return t=A(M(Ei,1),pr,25,15,[pT(n.a[0],e),pT(n.a[1],e),pT(n.a[2],e)]),n.d&&(t[0]=y.Math.max(t[0],t[2]),t[2]=t[0]),t}function Pa(){Pa=N,f_=new X9("GREEDY",0),Gcn=new X9(fHn,1),h_=new X9(PN,2),Em=new X9("MODEL_ORDER",3),jm=new X9("GREEDY_MODEL_ORDER",4)}function uFn(n,e){var t,i,r;for(n.b[e.g]=1,i=_e(e.d,0);i.b!=i.d.c;)t=u(Re(i),188),r=t.c,n.b[r.g]==1?Ke(n.a,t):n.b[r.g]==2?n.b[r.g]=1:uFn(n,r)}function Xpe(n,e){var t,i,r;for(r=new Pc(e.gc()),i=e.Kc();i.Ob();)t=u(i.Pb(),286),t.c==t.f?l4(n,t,t.c):U5e(n,t)||(r.c[r.c.length]=t);return r}function Vpe(n,e,t){var i,r,c,o,f;for(f=n.r+e,n.r+=e,n.d+=t,i=t/n.n.c.length,r=0,o=new E(n.n);o.ac&&St(e,c,null),e}function f3e(n,e){var t,i;if(i=n.gc(),e==null){for(t=0;t0&&(h+=r),l[a]=o,o+=f*(h+i)}function bFn(n){var e,t,i;for(i=n.f,n.n=F(Ei,pr,25,i,15,1),n.d=F(Ei,pr,25,i,15,1),e=0;e0?n.c:0),++r;n.b=i,n.d=c}function g3e(n,e){var t,i,r,c,o;for(i=0,r=0,t=0,o=new E(e);o.a0?n.g:0),++t;n.c=r,n.d=i}function mFn(n,e){var t;return t=A(M(Ei,1),pr,25,15,[ZQ(n,(_o(),Zr),e),ZQ(n,Fc,e),ZQ(n,nc,e)]),n.f&&(t[0]=y.Math.max(t[0],t[2]),t[2]=t[0]),t}function p3e(n,e,t){var i;try{wM(n,e+n.j,t+n.k,!1,!0)}catch(r){throw r=jt(r),I(r,73)?(i=r,T(new mr(i.g+RM+e+Ji+t+")."))):T(r)}}function v3e(n,e,t){var i;try{wM(n,e+n.j,t+n.k,!0,!1)}catch(r){throw r=jt(r),I(r,73)?(i=r,T(new mr(i.g+RM+e+Ji+t+")."))):T(r)}}function kFn(n){var e;ai(n,(nn(),y0))&&(e=u(k(n,y0),21),e.Hc((jb(),So))?(e.Mc(So),e.Fc(Po)):e.Hc(Po)&&(e.Mc(Po),e.Fc(So)))}function yFn(n){var e;ai(n,(nn(),y0))&&(e=u(k(n,y0),21),e.Hc((jb(),Oo))?(e.Mc(Oo),e.Fc(eo)):e.Hc(eo)&&(e.Mc(eo),e.Fc(Oo)))}function m3e(n,e,t){le(t,"Self-Loop ordering",1),Rt(Vc(gt(gt(qr(new $n(null,new xn(e.b,16)),new P0n),new I0n),new O0n),new D0n),new O5n(n)),ce(t)}function j7(n,e,t,i){var r,c;for(r=e;r0&&(r.b+=e),r}function zT(n,e){var t,i,r;for(r=new Li,i=n.Kc();i.Ob();)t=u(i.Pb(),37),M6(t,0,r.b),r.b+=t.f.b+e,r.a=y.Math.max(r.a,t.f.a);return r.a>0&&(r.a+=e),r}function EFn(n){var e,t,i;for(i=nt,t=new E(n.a);t.a>16==6?n.Cb.ih(n,5,Vo,e):(i=ir(u(On((t=u(Rn(n,16),26),t||n.zh()),n.Db>>16),18)),n.Cb.ih(n,i.n,i.f,e))}function C3e(n){k3();var e=n.e;if(e&&e.stack){var t=e.stack,i=e+`
                   `;return t.substring(0,i.length)==i&&(t=t.substring(i.length)),t.split(`
                  diff --git a/assets/ganttDiagram-db6931fb-XdIrq4o4.js b/assets/ganttDiagram-db6931fb-MZTKg1_s.js
                  similarity index 99%
                  rename from assets/ganttDiagram-db6931fb-XdIrq4o4.js
                  rename to assets/ganttDiagram-db6931fb-MZTKg1_s.js
                  index 961d158..a656112 100644
                  --- a/assets/ganttDiagram-db6931fb-XdIrq4o4.js
                  +++ b/assets/ganttDiagram-db6931fb-MZTKg1_s.js
                  @@ -1,4 +1,4 @@
                  -import{au as Be,av as Ze,aw as Xe,ax as qe,ay as Dn,az as Kt,aA as Mn,aB as ye,aC as ke,aD as nt,c as xt,s as Sn,g as _n,v as Un,x as Yn,b as Fn,a as Ln,z as En,m as An,l as qt,h as Pt,i as In,j as Wn,y as On}from"./mermaid.core-zy7cM8l9.js";import{b as zn,t as Ue,c as Hn,a as Nn,l as Vn}from"./linear-KPN1H-BK.js";import{i as Pn}from"./init-Hi12RPRh.js";import"./app-BrxqtzGY.js";function Rn(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n=r)&&(n=r);else{let r=-1;for(let i of t)(i=e(i,++r,t))!=null&&(n=i)&&(n=i)}return n}function Bn(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);else{let r=-1;for(let i of t)(i=e(i,++r,t))!=null&&(n>i||n===void 0&&i>=i)&&(n=i)}return n}function Zn(t){return t}var Bt=1,te=2,ue=3,Rt=4,Ye=1e-6;function Xn(t){return"translate("+t+",0)"}function qn(t){return"translate(0,"+t+")"}function Gn(t){return e=>+t(e)}function jn(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function Qn(){return!this.__axis}function Ge(t,e){var n=[],r=null,i=null,s=6,a=6,y=3,_=typeof window<"u"&&window.devicePixelRatio>1?0:.5,k=t===Bt||t===Rt?-1:1,C=t===Rt||t===te?"x":"y",F=t===Bt||t===ue?Xn:qn;function w(x){var q=r??(e.ticks?e.ticks.apply(e,n):e.domain()),g=i??(e.tickFormat?e.tickFormat.apply(e,n):Zn),L=Math.max(s,0)+y,O=e.range(),W=+O[0]+_,B=+O[O.length-1]+_,Z=(e.bandwidth?jn:Gn)(e.copy(),_),Q=x.selection?x.selection():x,v=Q.selectAll(".domain").data([null]),A=Q.selectAll(".tick").data(q,e).order(),T=A.exit(),Y=A.enter().append("g").attr("class","tick"),D=A.select("line"),b=A.select("text");v=v.merge(v.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),A=A.merge(Y),D=D.merge(Y.append("line").attr("stroke","currentColor").attr(C+"2",k*s)),b=b.merge(Y.append("text").attr("fill","currentColor").attr(C,k*L).attr("dy",t===Bt?"0em":t===ue?"0.71em":"0.32em")),x!==Q&&(v=v.transition(x),A=A.transition(x),D=D.transition(x),b=b.transition(x),T=T.transition(x).attr("opacity",Ye).attr("transform",function(o){return isFinite(o=Z(o))?F(o+_):this.getAttribute("transform")}),Y.attr("opacity",Ye).attr("transform",function(o){var d=this.parentNode.__axis;return F((d&&isFinite(d=d(o))?d:Z(o))+_)})),T.remove(),v.attr("d",t===Rt||t===te?a?"M"+k*a+","+W+"H"+_+"V"+B+"H"+k*a:"M"+_+","+W+"V"+B:a?"M"+W+","+k*a+"V"+_+"H"+B+"V"+k*a:"M"+W+","+_+"H"+B),A.attr("opacity",1).attr("transform",function(o){return F(Z(o)+_)}),D.attr(C+"2",k*s),b.attr(C,k*L).text(g),Q.filter(Qn).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===te?"start":t===Rt?"end":"middle"),Q.each(function(){this.__axis=Z})}return w.scale=function(x){return arguments.length?(e=x,w):e},w.ticks=function(){return n=Array.from(arguments),w},w.tickArguments=function(x){return arguments.length?(n=x==null?[]:Array.from(x),w):n.slice()},w.tickValues=function(x){return arguments.length?(r=x==null?null:Array.from(x),w):r&&r.slice()},w.tickFormat=function(x){return arguments.length?(i=x,w):i},w.tickSize=function(x){return arguments.length?(s=a=+x,w):s},w.tickSizeInner=function(x){return arguments.length?(s=+x,w):s},w.tickSizeOuter=function(x){return arguments.length?(a=+x,w):a},w.tickPadding=function(x){return arguments.length?(y=+x,w):y},w.offset=function(x){return arguments.length?(_=+x,w):_},w}function $n(t){return Ge(Bt,t)}function Jn(t){return Ge(ue,t)}const Kn=Math.PI/180,tr=180/Math.PI,Gt=18,je=.96422,Qe=1,$e=.82521,Je=4/29,wt=6/29,Ke=3*wt*wt,er=wt*wt*wt;function tn(t){if(t instanceof ot)return new ot(t.l,t.a,t.b,t.opacity);if(t instanceof ut)return en(t);t instanceof Xe||(t=Dn(t));var e=ie(t.r),n=ie(t.g),r=ie(t.b),i=ee((.2225045*e+.7168786*n+.0606169*r)/Qe),s,a;return e===n&&n===r?s=a=i:(s=ee((.4360747*e+.3850649*n+.1430804*r)/je),a=ee((.0139322*e+.0971045*n+.7141733*r)/$e)),new ot(116*i-16,500*(s-i),200*(i-a),t.opacity)}function nr(t,e,n,r){return arguments.length===1?tn(t):new ot(t,e,n,r??1)}function ot(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}Be(ot,nr,Ze(qe,{brighter(t){return new ot(this.l+Gt*(t??1),this.a,this.b,this.opacity)},darker(t){return new ot(this.l-Gt*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return e=je*ne(e),t=Qe*ne(t),n=$e*ne(n),new Xe(re(3.1338561*e-1.6168667*t-.4906146*n),re(-.9787684*e+1.9161415*t+.033454*n),re(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}}));function ee(t){return t>er?Math.pow(t,1/3):t/Ke+Je}function ne(t){return t>wt?t*t*t:Ke*(t-Je)}function re(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function ie(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function rr(t){if(t instanceof ut)return new ut(t.h,t.c,t.l,t.opacity);if(t instanceof ot||(t=tn(t)),t.a===0&&t.b===0)return new ut(NaN,0(t(s=new Date(+s)),s),i.ceil=s=>(t(s=new Date(s-1)),e(s,1),t(s),s),i.round=s=>{const a=i(s),y=i.ceil(s);return s-a(e(s=new Date(+s),a==null?1:Math.floor(a)),s),i.range=(s,a,y)=>{const _=[];if(s=i.ceil(s),y=y==null?1:Math.floor(y),!(s0))return _;let k;do _.push(k=new Date(+s)),e(s,y),t(s);while(kK(a=>{if(a>=a)for(;t(a),!s(a);)a.setTime(a-1)},(a,y)=>{if(a>=a)if(y<0)for(;++y<=0;)for(;e(a,-1),!s(a););else for(;--y>=0;)for(;e(a,1),!s(a););}),n&&(i.count=(s,a)=>(se.setTime(+s),ae.setTime(+a),t(se),t(ae),Math.floor(n(se,ae))),i.every=s=>(s=Math.floor(s),!isFinite(s)||!(s>0)?null:s>1?i.filter(r?a=>r(a)%s===0:a=>i.count(0,a)%s===0):i)),i}const Dt=K(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);Dt.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?K(e=>{e.setTime(Math.floor(e/t)*t)},(e,n)=>{e.setTime(+e+n*t)},(e,n)=>(n-e)/t):Dt);Dt.range;const ft=1e3,rt=ft*60,ht=rt*60,dt=ht*24,pe=dt*7,Fe=dt*30,oe=dt*365,gt=K(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*ft)},(t,e)=>(e-t)/ft,t=>t.getUTCSeconds());gt.range;const Et=K(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ft)},(t,e)=>{t.setTime(+t+e*rt)},(t,e)=>(e-t)/rt,t=>t.getMinutes());Et.range;const or=K(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*rt)},(t,e)=>(e-t)/rt,t=>t.getUTCMinutes());or.range;const At=K(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ft-t.getMinutes()*rt)},(t,e)=>{t.setTime(+t+e*ht)},(t,e)=>(e-t)/ht,t=>t.getHours());At.range;const cr=K(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*ht)},(t,e)=>(e-t)/ht,t=>t.getUTCHours());cr.range;const yt=K(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*rt)/dt,t=>t.getDate()-1);yt.range;const Te=K(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/dt,t=>t.getUTCDate()-1);Te.range;const lr=K(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/dt,t=>Math.floor(t/dt));lr.range;function Tt(t){return K(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,n)=>{e.setDate(e.getDate()+n*7)},(e,n)=>(n-e-(n.getTimezoneOffset()-e.getTimezoneOffset())*rt)/pe)}const Ot=Tt(0),It=Tt(1),nn=Tt(2),rn=Tt(3),kt=Tt(4),sn=Tt(5),an=Tt(6);Ot.range;It.range;nn.range;rn.range;kt.range;sn.range;an.range;function vt(t){return K(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCDate(e.getUTCDate()+n*7)},(e,n)=>(n-e)/pe)}const on=vt(0),jt=vt(1),ur=vt(2),fr=vt(3),Mt=vt(4),hr=vt(5),dr=vt(6);on.range;jt.range;ur.range;fr.range;Mt.range;hr.range;dr.range;const Wt=K(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth());Wt.range;const mr=K(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth());mr.range;const mt=K(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());mt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:K(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,n)=>{e.setFullYear(e.getFullYear()+n*t)});mt.range;const pt=K(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());pt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:K(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)});pt.range;function gr(t,e,n,r,i,s){const a=[[gt,1,ft],[gt,5,5*ft],[gt,15,15*ft],[gt,30,30*ft],[s,1,rt],[s,5,5*rt],[s,15,15*rt],[s,30,30*rt],[i,1,ht],[i,3,3*ht],[i,6,6*ht],[i,12,12*ht],[r,1,dt],[r,2,2*dt],[n,1,pe],[e,1,Fe],[e,3,3*Fe],[t,1,oe]];function y(k,C,F){const w=CL).right(a,w);if(x===a.length)return t.every(Ue(k/oe,C/oe,F));if(x===0)return Dt.every(Math.max(Ue(k,C,F),1));const[q,g]=a[w/a[x-1][2]53)return null;"w"in l||(l.w=1),"Z"in l?(H=le(Yt(l.y,0,1)),j=H.getUTCDay(),H=j>4||j===0?jt.ceil(H):jt(H),H=Te.offset(H,(l.V-1)*7),l.y=H.getUTCFullYear(),l.m=H.getUTCMonth(),l.d=H.getUTCDate()+(l.w+6)%7):(H=ce(Yt(l.y,0,1)),j=H.getDay(),H=j>4||j===0?It.ceil(H):It(H),H=yt.offset(H,(l.V-1)*7),l.y=H.getFullYear(),l.m=H.getMonth(),l.d=H.getDate()+(l.w+6)%7)}else("W"in l||"U"in l)&&("w"in l||(l.w="u"in l?l.u%7:"W"in l?1:0),j="Z"in l?le(Yt(l.y,0,1)).getUTCDay():ce(Yt(l.y,0,1)).getDay(),l.m=0,l.d="W"in l?(l.w+6)%7+l.W*7-(j+5)%7:l.w+l.U*7-(j+6)%7);return"Z"in l?(l.H+=l.Z/100|0,l.M+=l.Z%100,le(l)):ce(l)}}function T(p,E,M,l){for(var R=0,H=E.length,j=M.length,$,et;R=j)return-1;if($=E.charCodeAt(R++),$===37){if($=E.charAt(R++),et=Q[$ in Le?E.charAt(R++):$],!et||(l=et(p,M,l))<0)return-1}else if($!=M.charCodeAt(l++))return-1}return l}function Y(p,E,M){var l=k.exec(E.slice(M));return l?(p.p=C.get(l[0].toLowerCase()),M+l[0].length):-1}function D(p,E,M){var l=x.exec(E.slice(M));return l?(p.w=q.get(l[0].toLowerCase()),M+l[0].length):-1}function b(p,E,M){var l=F.exec(E.slice(M));return l?(p.w=w.get(l[0].toLowerCase()),M+l[0].length):-1}function o(p,E,M){var l=O.exec(E.slice(M));return l?(p.m=W.get(l[0].toLowerCase()),M+l[0].length):-1}function d(p,E,M){var l=g.exec(E.slice(M));return l?(p.m=L.get(l[0].toLowerCase()),M+l[0].length):-1}function m(p,E,M){return T(p,e,E,M)}function u(p,E,M){return T(p,n,E,M)}function S(p,E,M){return T(p,r,E,M)}function c(p){return a[p.getDay()]}function X(p){return s[p.getDay()]}function f(p){return _[p.getMonth()]}function h(p){return y[p.getMonth()]}function U(p){return i[+(p.getHours()>=12)]}function G(p){return 1+~~(p.getMonth()/3)}function z(p){return a[p.getUTCDay()]}function N(p){return s[p.getUTCDay()]}function I(p){return _[p.getUTCMonth()]}function V(p){return y[p.getUTCMonth()]}function st(p){return i[+(p.getUTCHours()>=12)]}function it(p){return 1+~~(p.getUTCMonth()/3)}return{format:function(p){var E=v(p+="",B);return E.toString=function(){return p},E},parse:function(p){var E=A(p+="",!1);return E.toString=function(){return p},E},utcFormat:function(p){var E=v(p+="",Z);return E.toString=function(){return p},E},utcParse:function(p){var E=A(p+="",!0);return E.toString=function(){return p},E}}}var Le={"-":"",_:" ",0:"0"},tt=/^\s*\d+/,Tr=/^%/,vr=/[\\^$*+?|[\]().{}]/g;function P(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",s=i.length;return r+(s[e.toLowerCase(),n]))}function xr(t,e,n){var r=tt.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function wr(t,e,n){var r=tt.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Cr(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function Dr(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function Mr(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function Ee(t,e,n){var r=tt.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Ae(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Sr(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function _r(t,e,n){var r=tt.exec(e.slice(n,n+1));return r?(t.q=r[0]*3-3,n+r[0].length):-1}function Ur(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Ie(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Yr(t,e,n){var r=tt.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function We(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Fr(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Lr(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Er(t,e,n){var r=tt.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Ar(t,e,n){var r=tt.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Ir(t,e,n){var r=Tr.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Wr(t,e,n){var r=tt.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Or(t,e,n){var r=tt.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Oe(t,e){return P(t.getDate(),e,2)}function zr(t,e){return P(t.getHours(),e,2)}function Hr(t,e){return P(t.getHours()%12||12,e,2)}function Nr(t,e){return P(1+yt.count(mt(t),t),e,3)}function cn(t,e){return P(t.getMilliseconds(),e,3)}function Vr(t,e){return cn(t,e)+"000"}function Pr(t,e){return P(t.getMonth()+1,e,2)}function Rr(t,e){return P(t.getMinutes(),e,2)}function Br(t,e){return P(t.getSeconds(),e,2)}function Zr(t){var e=t.getDay();return e===0?7:e}function Xr(t,e){return P(Ot.count(mt(t)-1,t),e,2)}function ln(t){var e=t.getDay();return e>=4||e===0?kt(t):kt.ceil(t)}function qr(t,e){return t=ln(t),P(kt.count(mt(t),t)+(mt(t).getDay()===4),e,2)}function Gr(t){return t.getDay()}function jr(t,e){return P(It.count(mt(t)-1,t),e,2)}function Qr(t,e){return P(t.getFullYear()%100,e,2)}function $r(t,e){return t=ln(t),P(t.getFullYear()%100,e,2)}function Jr(t,e){return P(t.getFullYear()%1e4,e,4)}function Kr(t,e){var n=t.getDay();return t=n>=4||n===0?kt(t):kt.ceil(t),P(t.getFullYear()%1e4,e,4)}function ti(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+P(e/60|0,"0",2)+P(e%60,"0",2)}function ze(t,e){return P(t.getUTCDate(),e,2)}function ei(t,e){return P(t.getUTCHours(),e,2)}function ni(t,e){return P(t.getUTCHours()%12||12,e,2)}function ri(t,e){return P(1+Te.count(pt(t),t),e,3)}function un(t,e){return P(t.getUTCMilliseconds(),e,3)}function ii(t,e){return un(t,e)+"000"}function si(t,e){return P(t.getUTCMonth()+1,e,2)}function ai(t,e){return P(t.getUTCMinutes(),e,2)}function oi(t,e){return P(t.getUTCSeconds(),e,2)}function ci(t){var e=t.getUTCDay();return e===0?7:e}function li(t,e){return P(on.count(pt(t)-1,t),e,2)}function fn(t){var e=t.getUTCDay();return e>=4||e===0?Mt(t):Mt.ceil(t)}function ui(t,e){return t=fn(t),P(Mt.count(pt(t),t)+(pt(t).getUTCDay()===4),e,2)}function fi(t){return t.getUTCDay()}function hi(t,e){return P(jt.count(pt(t)-1,t),e,2)}function di(t,e){return P(t.getUTCFullYear()%100,e,2)}function mi(t,e){return t=fn(t),P(t.getUTCFullYear()%100,e,2)}function gi(t,e){return P(t.getUTCFullYear()%1e4,e,4)}function yi(t,e){var n=t.getUTCDay();return t=n>=4||n===0?Mt(t):Mt.ceil(t),P(t.getUTCFullYear()%1e4,e,4)}function ki(){return"+0000"}function He(){return"%"}function Ne(t){return+t}function Ve(t){return Math.floor(+t/1e3)}var bt,Qt;pi({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function pi(t){return bt=pr(t),Qt=bt.format,bt.parse,bt.utcFormat,bt.utcParse,bt}function Ti(t){return new Date(t)}function vi(t){return t instanceof Date?+t:+new Date(+t)}function hn(t,e,n,r,i,s,a,y,_,k){var C=Hn(),F=C.invert,w=C.domain,x=k(".%L"),q=k(":%S"),g=k("%I:%M"),L=k("%I %p"),O=k("%a %d"),W=k("%b %d"),B=k("%B"),Z=k("%Y");function Q(v){return(_(v)4&&(x+=7),w.add(x,n));return q.diff(g,"week")+1},y.isoWeekday=function(k){return this.$utils().u(k)?this.day()||7:this.day(this.day()%7?k:k-7)};var _=y.startOf;y.startOf=function(k,C){var F=this.$utils(),w=!!F.u(C)||C;return F.p(k)==="isoweek"?w?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):_.bind(this)(k,C)}}})})(dn);var xi=dn.exports;const wi=ke(xi);var mn={exports:{}};(function(t,e){(function(n,r){t.exports=r()})(ye,function(){var n={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},r=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,i=/\d\d/,s=/\d\d?/,a=/\d*[^-_:/,()\s\d]+/,y={},_=function(g){return(g=+g)+(g>68?1900:2e3)},k=function(g){return function(L){this[g]=+L}},C=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=function(L){if(!L||L==="Z")return 0;var O=L.match(/([+-]|\d\d)/g),W=60*O[1]+(+O[2]||0);return W===0?0:O[0]==="+"?-W:W}(g)}],F=function(g){var L=y[g];return L&&(L.indexOf?L:L.s.concat(L.f))},w=function(g,L){var O,W=y.meridiem;if(W){for(var B=1;B<=24;B+=1)if(g.indexOf(W(B,0,L))>-1){O=B>12;break}}else O=g===(L?"pm":"PM");return O},x={A:[a,function(g){this.afternoon=w(g,!1)}],a:[a,function(g){this.afternoon=w(g,!0)}],S:[/\d/,function(g){this.milliseconds=100*+g}],SS:[i,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[s,k("seconds")],ss:[s,k("seconds")],m:[s,k("minutes")],mm:[s,k("minutes")],H:[s,k("hours")],h:[s,k("hours")],HH:[s,k("hours")],hh:[s,k("hours")],D:[s,k("day")],DD:[i,k("day")],Do:[a,function(g){var L=y.ordinal,O=g.match(/\d+/);if(this.day=O[0],L)for(var W=1;W<=31;W+=1)L(W).replace(/\[|\]/g,"")===g&&(this.day=W)}],M:[s,k("month")],MM:[i,k("month")],MMM:[a,function(g){var L=F("months"),O=(F("monthsShort")||L.map(function(W){return W.slice(0,3)})).indexOf(g)+1;if(O<1)throw new Error;this.month=O%12||O}],MMMM:[a,function(g){var L=F("months").indexOf(g)+1;if(L<1)throw new Error;this.month=L%12||L}],Y:[/[+-]?\d+/,k("year")],YY:[i,function(g){this.year=_(g)}],YYYY:[/\d{4}/,k("year")],Z:C,ZZ:C};function q(g){var L,O;L=g,O=y&&y.formats;for(var W=(g=L.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(Y,D,b){var o=b&&b.toUpperCase();return D||O[b]||n[b]||O[o].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(d,m,u){return m||u.slice(1)})})).match(r),B=W.length,Z=0;Z-1)return new Date((c==="X"?1e3:1)*S);var f=q(c)(S),h=f.year,U=f.month,G=f.day,z=f.hours,N=f.minutes,I=f.seconds,V=f.milliseconds,st=f.zone,it=new Date,p=G||(h||U?1:it.getDate()),E=h||it.getFullYear(),M=0;h&&!U||(M=U>0?U-1:it.getMonth());var l=z||0,R=N||0,H=I||0,j=V||0;return st?new Date(Date.UTC(E,M,p,l,R,H,j+60*st.offset*1e3)):X?new Date(Date.UTC(E,M,p,l,R,H,j)):new Date(E,M,p,l,R,H,j)}catch{return new Date("")}}(Q,T,v),this.init(),o&&o!==!0&&(this.$L=this.locale(o).$L),b&&Q!=this.format(T)&&(this.$d=new Date("")),y={}}else if(T instanceof Array)for(var d=T.length,m=1;m<=d;m+=1){A[1]=T[m-1];var u=O.apply(this,A);if(u.isValid()){this.$d=u.$d,this.$L=u.$L,this.init();break}m===d&&(this.$d=new Date(""))}else B.call(this,Z)}}})})(mn);var Ci=mn.exports;const Di=ke(Ci);var gn={exports:{}};(function(t,e){(function(n,r){t.exports=r()})(ye,function(){return function(n,r){var i=r.prototype,s=i.format;i.format=function(a){var y=this,_=this.$locale();if(!this.isValid())return s.bind(this)(a);var k=this.$utils(),C=(a||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(F){switch(F){case"Q":return Math.ceil((y.$M+1)/3);case"Do":return _.ordinal(y.$D);case"gggg":return y.weekYear();case"GGGG":return y.isoWeekYear();case"wo":return _.ordinal(y.week(),"W");case"w":case"ww":return k.s(y.week(),F==="w"?1:2,"0");case"W":case"WW":return k.s(y.isoWeek(),F==="W"?1:2,"0");case"k":case"kk":return k.s(String(y.$H===0?24:y.$H),F==="k"?1:2,"0");case"X":return Math.floor(y.$d.getTime()/1e3);case"x":return y.$d.getTime();case"z":return"["+y.offsetName()+"]";case"zzz":return"["+y.offsetName("long")+"]";default:return F}});return s.bind(this)(C)}}})})(gn);var Mi=gn.exports;const Si=ke(Mi);var he=function(){var t=function(b,o,d,m){for(d=d||{},m=b.length;m--;d[b[m]]=o);return d},e=[6,8,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,32,33,35,37],n=[1,25],r=[1,26],i=[1,27],s=[1,28],a=[1,29],y=[1,30],_=[1,31],k=[1,9],C=[1,10],F=[1,11],w=[1,12],x=[1,13],q=[1,14],g=[1,15],L=[1,16],O=[1,18],W=[1,19],B=[1,20],Z=[1,21],Q=[1,22],v=[1,24],A=[1,32],T={trace:function(){},yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,dateFormat:19,inclusiveEndDates:20,topAxis:21,axisFormat:22,tickInterval:23,excludes:24,includes:25,todayMarker:26,title:27,acc_title:28,acc_title_value:29,acc_descr:30,acc_descr_value:31,acc_descr_multiline_value:32,section:33,clickStatement:34,taskTxt:35,taskData:36,click:37,callbackname:38,callbackargs:39,href:40,clickStatementDebug:41,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",19:"dateFormat",20:"inclusiveEndDates",21:"topAxis",22:"axisFormat",23:"tickInterval",24:"excludes",25:"includes",26:"todayMarker",27:"title",28:"acc_title",29:"acc_title_value",30:"acc_descr",31:"acc_descr_value",32:"acc_descr_multiline_value",33:"section",35:"taskTxt",36:"taskData",37:"click",38:"callbackname",39:"callbackargs",40:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[34,2],[34,3],[34,3],[34,4],[34,3],[34,4],[34,2],[41,2],[41,3],[41,3],[41,4],[41,3],[41,4],[41,2]],performAction:function(o,d,m,u,S,c,X){var f=c.length-1;switch(S){case 1:return c[f-1];case 2:this.$=[];break;case 3:c[f-1].push(c[f]),this.$=c[f-1];break;case 4:case 5:this.$=c[f];break;case 6:case 7:this.$=[];break;case 8:u.setWeekday("monday");break;case 9:u.setWeekday("tuesday");break;case 10:u.setWeekday("wednesday");break;case 11:u.setWeekday("thursday");break;case 12:u.setWeekday("friday");break;case 13:u.setWeekday("saturday");break;case 14:u.setWeekday("sunday");break;case 15:u.setDateFormat(c[f].substr(11)),this.$=c[f].substr(11);break;case 16:u.enableInclusiveEndDates(),this.$=c[f].substr(18);break;case 17:u.TopAxis(),this.$=c[f].substr(8);break;case 18:u.setAxisFormat(c[f].substr(11)),this.$=c[f].substr(11);break;case 19:u.setTickInterval(c[f].substr(13)),this.$=c[f].substr(13);break;case 20:u.setExcludes(c[f].substr(9)),this.$=c[f].substr(9);break;case 21:u.setIncludes(c[f].substr(9)),this.$=c[f].substr(9);break;case 22:u.setTodayMarker(c[f].substr(12)),this.$=c[f].substr(12);break;case 24:u.setDiagramTitle(c[f].substr(6)),this.$=c[f].substr(6);break;case 25:this.$=c[f].trim(),u.setAccTitle(this.$);break;case 26:case 27:this.$=c[f].trim(),u.setAccDescription(this.$);break;case 28:u.addSection(c[f].substr(8)),this.$=c[f].substr(8);break;case 30:u.addTask(c[f-1],c[f]),this.$="task";break;case 31:this.$=c[f-1],u.setClickEvent(c[f-1],c[f],null);break;case 32:this.$=c[f-2],u.setClickEvent(c[f-2],c[f-1],c[f]);break;case 33:this.$=c[f-2],u.setClickEvent(c[f-2],c[f-1],null),u.setLink(c[f-2],c[f]);break;case 34:this.$=c[f-3],u.setClickEvent(c[f-3],c[f-2],c[f-1]),u.setLink(c[f-3],c[f]);break;case 35:this.$=c[f-2],u.setClickEvent(c[f-2],c[f],null),u.setLink(c[f-2],c[f-1]);break;case 36:this.$=c[f-3],u.setClickEvent(c[f-3],c[f-1],c[f]),u.setLink(c[f-3],c[f-2]);break;case 37:this.$=c[f-1],u.setLink(c[f-1],c[f]);break;case 38:case 44:this.$=c[f-1]+" "+c[f];break;case 39:case 40:case 42:this.$=c[f-2]+" "+c[f-1]+" "+c[f];break;case 41:case 43:this.$=c[f-3]+" "+c[f-2]+" "+c[f-1]+" "+c[f];break}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:n,13:r,14:i,15:s,16:a,17:y,18:_,19:k,20:C,21:F,22:w,23:x,24:q,25:g,26:L,27:O,28:W,30:B,32:Z,33:Q,34:23,35:v,37:A},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:33,11:17,12:n,13:r,14:i,15:s,16:a,17:y,18:_,19:k,20:C,21:F,22:w,23:x,24:q,25:g,26:L,27:O,28:W,30:B,32:Z,33:Q,34:23,35:v,37:A},t(e,[2,5]),t(e,[2,6]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),{29:[1,34]},{31:[1,35]},t(e,[2,27]),t(e,[2,28]),t(e,[2,29]),{36:[1,36]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),{38:[1,37],40:[1,38]},t(e,[2,4]),t(e,[2,25]),t(e,[2,26]),t(e,[2,30]),t(e,[2,31],{39:[1,39],40:[1,40]}),t(e,[2,37],{38:[1,41]}),t(e,[2,32],{40:[1,42]}),t(e,[2,33]),t(e,[2,35],{39:[1,43]}),t(e,[2,34]),t(e,[2,36])],defaultActions:{},parseError:function(o,d){if(d.recoverable)this.trace(o);else{var m=new Error(o);throw m.hash=d,m}},parse:function(o){var d=this,m=[0],u=[],S=[null],c=[],X=this.table,f="",h=0,U=0,G=2,z=1,N=c.slice.call(arguments,1),I=Object.create(this.lexer),V={yy:{}};for(var st in this.yy)Object.prototype.hasOwnProperty.call(this.yy,st)&&(V.yy[st]=this.yy[st]);I.setInput(o,V.yy),V.yy.lexer=I,V.yy.parser=this,typeof I.yylloc>"u"&&(I.yylloc={});var it=I.yylloc;c.push(it);var p=I.options&&I.options.ranges;typeof V.yy.parseError=="function"?this.parseError=V.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function E(){var ct;return ct=u.pop()||I.lex()||z,typeof ct!="number"&&(ct instanceof Array&&(u=ct,ct=u.pop()),ct=d.symbols_[ct]||ct),ct}for(var M,l,R,H,j={},$,et,Ut,Vt;;){if(l=m[m.length-1],this.defaultActions[l]?R=this.defaultActions[l]:((M===null||typeof M>"u")&&(M=E()),R=X[l]&&X[l][M]),typeof R>"u"||!R.length||!R[0]){var Jt="";Vt=[];for($ in X[l])this.terminals_[$]&&$>G&&Vt.push("'"+this.terminals_[$]+"'");I.showPosition?Jt="Parse error on line "+(h+1)+`:
                  +import{au as Be,av as Ze,aw as Xe,ax as qe,ay as Dn,az as Kt,aA as Mn,aB as ye,aC as ke,aD as nt,c as xt,s as Sn,g as _n,v as Un,x as Yn,b as Fn,a as Ln,z as En,m as An,l as qt,h as Pt,i as In,j as Wn,y as On}from"./mermaid.core-QJnSHCal.js";import{b as zn,t as Ue,c as Hn,a as Nn,l as Vn}from"./linear-JH76Qt4f.js";import{i as Pn}from"./init-Hi12RPRh.js";import"./app-oTlYPy8h.js";function Rn(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n=r)&&(n=r);else{let r=-1;for(let i of t)(i=e(i,++r,t))!=null&&(n=i)&&(n=i)}return n}function Bn(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);else{let r=-1;for(let i of t)(i=e(i,++r,t))!=null&&(n>i||n===void 0&&i>=i)&&(n=i)}return n}function Zn(t){return t}var Bt=1,te=2,ue=3,Rt=4,Ye=1e-6;function Xn(t){return"translate("+t+",0)"}function qn(t){return"translate(0,"+t+")"}function Gn(t){return e=>+t(e)}function jn(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function Qn(){return!this.__axis}function Ge(t,e){var n=[],r=null,i=null,s=6,a=6,y=3,_=typeof window<"u"&&window.devicePixelRatio>1?0:.5,k=t===Bt||t===Rt?-1:1,C=t===Rt||t===te?"x":"y",F=t===Bt||t===ue?Xn:qn;function w(x){var q=r??(e.ticks?e.ticks.apply(e,n):e.domain()),g=i??(e.tickFormat?e.tickFormat.apply(e,n):Zn),L=Math.max(s,0)+y,O=e.range(),W=+O[0]+_,B=+O[O.length-1]+_,Z=(e.bandwidth?jn:Gn)(e.copy(),_),Q=x.selection?x.selection():x,v=Q.selectAll(".domain").data([null]),A=Q.selectAll(".tick").data(q,e).order(),T=A.exit(),Y=A.enter().append("g").attr("class","tick"),D=A.select("line"),b=A.select("text");v=v.merge(v.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),A=A.merge(Y),D=D.merge(Y.append("line").attr("stroke","currentColor").attr(C+"2",k*s)),b=b.merge(Y.append("text").attr("fill","currentColor").attr(C,k*L).attr("dy",t===Bt?"0em":t===ue?"0.71em":"0.32em")),x!==Q&&(v=v.transition(x),A=A.transition(x),D=D.transition(x),b=b.transition(x),T=T.transition(x).attr("opacity",Ye).attr("transform",function(o){return isFinite(o=Z(o))?F(o+_):this.getAttribute("transform")}),Y.attr("opacity",Ye).attr("transform",function(o){var d=this.parentNode.__axis;return F((d&&isFinite(d=d(o))?d:Z(o))+_)})),T.remove(),v.attr("d",t===Rt||t===te?a?"M"+k*a+","+W+"H"+_+"V"+B+"H"+k*a:"M"+_+","+W+"V"+B:a?"M"+W+","+k*a+"V"+_+"H"+B+"V"+k*a:"M"+W+","+_+"H"+B),A.attr("opacity",1).attr("transform",function(o){return F(Z(o)+_)}),D.attr(C+"2",k*s),b.attr(C,k*L).text(g),Q.filter(Qn).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===te?"start":t===Rt?"end":"middle"),Q.each(function(){this.__axis=Z})}return w.scale=function(x){return arguments.length?(e=x,w):e},w.ticks=function(){return n=Array.from(arguments),w},w.tickArguments=function(x){return arguments.length?(n=x==null?[]:Array.from(x),w):n.slice()},w.tickValues=function(x){return arguments.length?(r=x==null?null:Array.from(x),w):r&&r.slice()},w.tickFormat=function(x){return arguments.length?(i=x,w):i},w.tickSize=function(x){return arguments.length?(s=a=+x,w):s},w.tickSizeInner=function(x){return arguments.length?(s=+x,w):s},w.tickSizeOuter=function(x){return arguments.length?(a=+x,w):a},w.tickPadding=function(x){return arguments.length?(y=+x,w):y},w.offset=function(x){return arguments.length?(_=+x,w):_},w}function $n(t){return Ge(Bt,t)}function Jn(t){return Ge(ue,t)}const Kn=Math.PI/180,tr=180/Math.PI,Gt=18,je=.96422,Qe=1,$e=.82521,Je=4/29,wt=6/29,Ke=3*wt*wt,er=wt*wt*wt;function tn(t){if(t instanceof ot)return new ot(t.l,t.a,t.b,t.opacity);if(t instanceof ut)return en(t);t instanceof Xe||(t=Dn(t));var e=ie(t.r),n=ie(t.g),r=ie(t.b),i=ee((.2225045*e+.7168786*n+.0606169*r)/Qe),s,a;return e===n&&n===r?s=a=i:(s=ee((.4360747*e+.3850649*n+.1430804*r)/je),a=ee((.0139322*e+.0971045*n+.7141733*r)/$e)),new ot(116*i-16,500*(s-i),200*(i-a),t.opacity)}function nr(t,e,n,r){return arguments.length===1?tn(t):new ot(t,e,n,r??1)}function ot(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}Be(ot,nr,Ze(qe,{brighter(t){return new ot(this.l+Gt*(t??1),this.a,this.b,this.opacity)},darker(t){return new ot(this.l-Gt*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return e=je*ne(e),t=Qe*ne(t),n=$e*ne(n),new Xe(re(3.1338561*e-1.6168667*t-.4906146*n),re(-.9787684*e+1.9161415*t+.033454*n),re(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}}));function ee(t){return t>er?Math.pow(t,1/3):t/Ke+Je}function ne(t){return t>wt?t*t*t:Ke*(t-Je)}function re(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function ie(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function rr(t){if(t instanceof ut)return new ut(t.h,t.c,t.l,t.opacity);if(t instanceof ot||(t=tn(t)),t.a===0&&t.b===0)return new ut(NaN,0(t(s=new Date(+s)),s),i.ceil=s=>(t(s=new Date(s-1)),e(s,1),t(s),s),i.round=s=>{const a=i(s),y=i.ceil(s);return s-a(e(s=new Date(+s),a==null?1:Math.floor(a)),s),i.range=(s,a,y)=>{const _=[];if(s=i.ceil(s),y=y==null?1:Math.floor(y),!(s0))return _;let k;do _.push(k=new Date(+s)),e(s,y),t(s);while(kK(a=>{if(a>=a)for(;t(a),!s(a);)a.setTime(a-1)},(a,y)=>{if(a>=a)if(y<0)for(;++y<=0;)for(;e(a,-1),!s(a););else for(;--y>=0;)for(;e(a,1),!s(a););}),n&&(i.count=(s,a)=>(se.setTime(+s),ae.setTime(+a),t(se),t(ae),Math.floor(n(se,ae))),i.every=s=>(s=Math.floor(s),!isFinite(s)||!(s>0)?null:s>1?i.filter(r?a=>r(a)%s===0:a=>i.count(0,a)%s===0):i)),i}const Dt=K(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);Dt.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?K(e=>{e.setTime(Math.floor(e/t)*t)},(e,n)=>{e.setTime(+e+n*t)},(e,n)=>(n-e)/t):Dt);Dt.range;const ft=1e3,rt=ft*60,ht=rt*60,dt=ht*24,pe=dt*7,Fe=dt*30,oe=dt*365,gt=K(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*ft)},(t,e)=>(e-t)/ft,t=>t.getUTCSeconds());gt.range;const Et=K(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ft)},(t,e)=>{t.setTime(+t+e*rt)},(t,e)=>(e-t)/rt,t=>t.getMinutes());Et.range;const or=K(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*rt)},(t,e)=>(e-t)/rt,t=>t.getUTCMinutes());or.range;const At=K(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ft-t.getMinutes()*rt)},(t,e)=>{t.setTime(+t+e*ht)},(t,e)=>(e-t)/ht,t=>t.getHours());At.range;const cr=K(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*ht)},(t,e)=>(e-t)/ht,t=>t.getUTCHours());cr.range;const yt=K(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*rt)/dt,t=>t.getDate()-1);yt.range;const Te=K(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/dt,t=>t.getUTCDate()-1);Te.range;const lr=K(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/dt,t=>Math.floor(t/dt));lr.range;function Tt(t){return K(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,n)=>{e.setDate(e.getDate()+n*7)},(e,n)=>(n-e-(n.getTimezoneOffset()-e.getTimezoneOffset())*rt)/pe)}const Ot=Tt(0),It=Tt(1),nn=Tt(2),rn=Tt(3),kt=Tt(4),sn=Tt(5),an=Tt(6);Ot.range;It.range;nn.range;rn.range;kt.range;sn.range;an.range;function vt(t){return K(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCDate(e.getUTCDate()+n*7)},(e,n)=>(n-e)/pe)}const on=vt(0),jt=vt(1),ur=vt(2),fr=vt(3),Mt=vt(4),hr=vt(5),dr=vt(6);on.range;jt.range;ur.range;fr.range;Mt.range;hr.range;dr.range;const Wt=K(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth());Wt.range;const mr=K(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth());mr.range;const mt=K(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());mt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:K(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,n)=>{e.setFullYear(e.getFullYear()+n*t)});mt.range;const pt=K(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());pt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:K(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)});pt.range;function gr(t,e,n,r,i,s){const a=[[gt,1,ft],[gt,5,5*ft],[gt,15,15*ft],[gt,30,30*ft],[s,1,rt],[s,5,5*rt],[s,15,15*rt],[s,30,30*rt],[i,1,ht],[i,3,3*ht],[i,6,6*ht],[i,12,12*ht],[r,1,dt],[r,2,2*dt],[n,1,pe],[e,1,Fe],[e,3,3*Fe],[t,1,oe]];function y(k,C,F){const w=CL).right(a,w);if(x===a.length)return t.every(Ue(k/oe,C/oe,F));if(x===0)return Dt.every(Math.max(Ue(k,C,F),1));const[q,g]=a[w/a[x-1][2]53)return null;"w"in l||(l.w=1),"Z"in l?(H=le(Yt(l.y,0,1)),j=H.getUTCDay(),H=j>4||j===0?jt.ceil(H):jt(H),H=Te.offset(H,(l.V-1)*7),l.y=H.getUTCFullYear(),l.m=H.getUTCMonth(),l.d=H.getUTCDate()+(l.w+6)%7):(H=ce(Yt(l.y,0,1)),j=H.getDay(),H=j>4||j===0?It.ceil(H):It(H),H=yt.offset(H,(l.V-1)*7),l.y=H.getFullYear(),l.m=H.getMonth(),l.d=H.getDate()+(l.w+6)%7)}else("W"in l||"U"in l)&&("w"in l||(l.w="u"in l?l.u%7:"W"in l?1:0),j="Z"in l?le(Yt(l.y,0,1)).getUTCDay():ce(Yt(l.y,0,1)).getDay(),l.m=0,l.d="W"in l?(l.w+6)%7+l.W*7-(j+5)%7:l.w+l.U*7-(j+6)%7);return"Z"in l?(l.H+=l.Z/100|0,l.M+=l.Z%100,le(l)):ce(l)}}function T(p,E,M,l){for(var R=0,H=E.length,j=M.length,$,et;R=j)return-1;if($=E.charCodeAt(R++),$===37){if($=E.charAt(R++),et=Q[$ in Le?E.charAt(R++):$],!et||(l=et(p,M,l))<0)return-1}else if($!=M.charCodeAt(l++))return-1}return l}function Y(p,E,M){var l=k.exec(E.slice(M));return l?(p.p=C.get(l[0].toLowerCase()),M+l[0].length):-1}function D(p,E,M){var l=x.exec(E.slice(M));return l?(p.w=q.get(l[0].toLowerCase()),M+l[0].length):-1}function b(p,E,M){var l=F.exec(E.slice(M));return l?(p.w=w.get(l[0].toLowerCase()),M+l[0].length):-1}function o(p,E,M){var l=O.exec(E.slice(M));return l?(p.m=W.get(l[0].toLowerCase()),M+l[0].length):-1}function d(p,E,M){var l=g.exec(E.slice(M));return l?(p.m=L.get(l[0].toLowerCase()),M+l[0].length):-1}function m(p,E,M){return T(p,e,E,M)}function u(p,E,M){return T(p,n,E,M)}function S(p,E,M){return T(p,r,E,M)}function c(p){return a[p.getDay()]}function X(p){return s[p.getDay()]}function f(p){return _[p.getMonth()]}function h(p){return y[p.getMonth()]}function U(p){return i[+(p.getHours()>=12)]}function G(p){return 1+~~(p.getMonth()/3)}function z(p){return a[p.getUTCDay()]}function N(p){return s[p.getUTCDay()]}function I(p){return _[p.getUTCMonth()]}function V(p){return y[p.getUTCMonth()]}function st(p){return i[+(p.getUTCHours()>=12)]}function it(p){return 1+~~(p.getUTCMonth()/3)}return{format:function(p){var E=v(p+="",B);return E.toString=function(){return p},E},parse:function(p){var E=A(p+="",!1);return E.toString=function(){return p},E},utcFormat:function(p){var E=v(p+="",Z);return E.toString=function(){return p},E},utcParse:function(p){var E=A(p+="",!0);return E.toString=function(){return p},E}}}var Le={"-":"",_:" ",0:"0"},tt=/^\s*\d+/,Tr=/^%/,vr=/[\\^$*+?|[\]().{}]/g;function P(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",s=i.length;return r+(s[e.toLowerCase(),n]))}function xr(t,e,n){var r=tt.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function wr(t,e,n){var r=tt.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Cr(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function Dr(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function Mr(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function Ee(t,e,n){var r=tt.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Ae(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Sr(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function _r(t,e,n){var r=tt.exec(e.slice(n,n+1));return r?(t.q=r[0]*3-3,n+r[0].length):-1}function Ur(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Ie(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Yr(t,e,n){var r=tt.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function We(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Fr(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Lr(t,e,n){var r=tt.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Er(t,e,n){var r=tt.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Ar(t,e,n){var r=tt.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Ir(t,e,n){var r=Tr.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Wr(t,e,n){var r=tt.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Or(t,e,n){var r=tt.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Oe(t,e){return P(t.getDate(),e,2)}function zr(t,e){return P(t.getHours(),e,2)}function Hr(t,e){return P(t.getHours()%12||12,e,2)}function Nr(t,e){return P(1+yt.count(mt(t),t),e,3)}function cn(t,e){return P(t.getMilliseconds(),e,3)}function Vr(t,e){return cn(t,e)+"000"}function Pr(t,e){return P(t.getMonth()+1,e,2)}function Rr(t,e){return P(t.getMinutes(),e,2)}function Br(t,e){return P(t.getSeconds(),e,2)}function Zr(t){var e=t.getDay();return e===0?7:e}function Xr(t,e){return P(Ot.count(mt(t)-1,t),e,2)}function ln(t){var e=t.getDay();return e>=4||e===0?kt(t):kt.ceil(t)}function qr(t,e){return t=ln(t),P(kt.count(mt(t),t)+(mt(t).getDay()===4),e,2)}function Gr(t){return t.getDay()}function jr(t,e){return P(It.count(mt(t)-1,t),e,2)}function Qr(t,e){return P(t.getFullYear()%100,e,2)}function $r(t,e){return t=ln(t),P(t.getFullYear()%100,e,2)}function Jr(t,e){return P(t.getFullYear()%1e4,e,4)}function Kr(t,e){var n=t.getDay();return t=n>=4||n===0?kt(t):kt.ceil(t),P(t.getFullYear()%1e4,e,4)}function ti(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+P(e/60|0,"0",2)+P(e%60,"0",2)}function ze(t,e){return P(t.getUTCDate(),e,2)}function ei(t,e){return P(t.getUTCHours(),e,2)}function ni(t,e){return P(t.getUTCHours()%12||12,e,2)}function ri(t,e){return P(1+Te.count(pt(t),t),e,3)}function un(t,e){return P(t.getUTCMilliseconds(),e,3)}function ii(t,e){return un(t,e)+"000"}function si(t,e){return P(t.getUTCMonth()+1,e,2)}function ai(t,e){return P(t.getUTCMinutes(),e,2)}function oi(t,e){return P(t.getUTCSeconds(),e,2)}function ci(t){var e=t.getUTCDay();return e===0?7:e}function li(t,e){return P(on.count(pt(t)-1,t),e,2)}function fn(t){var e=t.getUTCDay();return e>=4||e===0?Mt(t):Mt.ceil(t)}function ui(t,e){return t=fn(t),P(Mt.count(pt(t),t)+(pt(t).getUTCDay()===4),e,2)}function fi(t){return t.getUTCDay()}function hi(t,e){return P(jt.count(pt(t)-1,t),e,2)}function di(t,e){return P(t.getUTCFullYear()%100,e,2)}function mi(t,e){return t=fn(t),P(t.getUTCFullYear()%100,e,2)}function gi(t,e){return P(t.getUTCFullYear()%1e4,e,4)}function yi(t,e){var n=t.getUTCDay();return t=n>=4||n===0?Mt(t):Mt.ceil(t),P(t.getUTCFullYear()%1e4,e,4)}function ki(){return"+0000"}function He(){return"%"}function Ne(t){return+t}function Ve(t){return Math.floor(+t/1e3)}var bt,Qt;pi({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function pi(t){return bt=pr(t),Qt=bt.format,bt.parse,bt.utcFormat,bt.utcParse,bt}function Ti(t){return new Date(t)}function vi(t){return t instanceof Date?+t:+new Date(+t)}function hn(t,e,n,r,i,s,a,y,_,k){var C=Hn(),F=C.invert,w=C.domain,x=k(".%L"),q=k(":%S"),g=k("%I:%M"),L=k("%I %p"),O=k("%a %d"),W=k("%b %d"),B=k("%B"),Z=k("%Y");function Q(v){return(_(v)4&&(x+=7),w.add(x,n));return q.diff(g,"week")+1},y.isoWeekday=function(k){return this.$utils().u(k)?this.day()||7:this.day(this.day()%7?k:k-7)};var _=y.startOf;y.startOf=function(k,C){var F=this.$utils(),w=!!F.u(C)||C;return F.p(k)==="isoweek"?w?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):_.bind(this)(k,C)}}})})(dn);var xi=dn.exports;const wi=ke(xi);var mn={exports:{}};(function(t,e){(function(n,r){t.exports=r()})(ye,function(){var n={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},r=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,i=/\d\d/,s=/\d\d?/,a=/\d*[^-_:/,()\s\d]+/,y={},_=function(g){return(g=+g)+(g>68?1900:2e3)},k=function(g){return function(L){this[g]=+L}},C=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=function(L){if(!L||L==="Z")return 0;var O=L.match(/([+-]|\d\d)/g),W=60*O[1]+(+O[2]||0);return W===0?0:O[0]==="+"?-W:W}(g)}],F=function(g){var L=y[g];return L&&(L.indexOf?L:L.s.concat(L.f))},w=function(g,L){var O,W=y.meridiem;if(W){for(var B=1;B<=24;B+=1)if(g.indexOf(W(B,0,L))>-1){O=B>12;break}}else O=g===(L?"pm":"PM");return O},x={A:[a,function(g){this.afternoon=w(g,!1)}],a:[a,function(g){this.afternoon=w(g,!0)}],S:[/\d/,function(g){this.milliseconds=100*+g}],SS:[i,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[s,k("seconds")],ss:[s,k("seconds")],m:[s,k("minutes")],mm:[s,k("minutes")],H:[s,k("hours")],h:[s,k("hours")],HH:[s,k("hours")],hh:[s,k("hours")],D:[s,k("day")],DD:[i,k("day")],Do:[a,function(g){var L=y.ordinal,O=g.match(/\d+/);if(this.day=O[0],L)for(var W=1;W<=31;W+=1)L(W).replace(/\[|\]/g,"")===g&&(this.day=W)}],M:[s,k("month")],MM:[i,k("month")],MMM:[a,function(g){var L=F("months"),O=(F("monthsShort")||L.map(function(W){return W.slice(0,3)})).indexOf(g)+1;if(O<1)throw new Error;this.month=O%12||O}],MMMM:[a,function(g){var L=F("months").indexOf(g)+1;if(L<1)throw new Error;this.month=L%12||L}],Y:[/[+-]?\d+/,k("year")],YY:[i,function(g){this.year=_(g)}],YYYY:[/\d{4}/,k("year")],Z:C,ZZ:C};function q(g){var L,O;L=g,O=y&&y.formats;for(var W=(g=L.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(Y,D,b){var o=b&&b.toUpperCase();return D||O[b]||n[b]||O[o].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(d,m,u){return m||u.slice(1)})})).match(r),B=W.length,Z=0;Z-1)return new Date((c==="X"?1e3:1)*S);var f=q(c)(S),h=f.year,U=f.month,G=f.day,z=f.hours,N=f.minutes,I=f.seconds,V=f.milliseconds,st=f.zone,it=new Date,p=G||(h||U?1:it.getDate()),E=h||it.getFullYear(),M=0;h&&!U||(M=U>0?U-1:it.getMonth());var l=z||0,R=N||0,H=I||0,j=V||0;return st?new Date(Date.UTC(E,M,p,l,R,H,j+60*st.offset*1e3)):X?new Date(Date.UTC(E,M,p,l,R,H,j)):new Date(E,M,p,l,R,H,j)}catch{return new Date("")}}(Q,T,v),this.init(),o&&o!==!0&&(this.$L=this.locale(o).$L),b&&Q!=this.format(T)&&(this.$d=new Date("")),y={}}else if(T instanceof Array)for(var d=T.length,m=1;m<=d;m+=1){A[1]=T[m-1];var u=O.apply(this,A);if(u.isValid()){this.$d=u.$d,this.$L=u.$L,this.init();break}m===d&&(this.$d=new Date(""))}else B.call(this,Z)}}})})(mn);var Ci=mn.exports;const Di=ke(Ci);var gn={exports:{}};(function(t,e){(function(n,r){t.exports=r()})(ye,function(){return function(n,r){var i=r.prototype,s=i.format;i.format=function(a){var y=this,_=this.$locale();if(!this.isValid())return s.bind(this)(a);var k=this.$utils(),C=(a||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(F){switch(F){case"Q":return Math.ceil((y.$M+1)/3);case"Do":return _.ordinal(y.$D);case"gggg":return y.weekYear();case"GGGG":return y.isoWeekYear();case"wo":return _.ordinal(y.week(),"W");case"w":case"ww":return k.s(y.week(),F==="w"?1:2,"0");case"W":case"WW":return k.s(y.isoWeek(),F==="W"?1:2,"0");case"k":case"kk":return k.s(String(y.$H===0?24:y.$H),F==="k"?1:2,"0");case"X":return Math.floor(y.$d.getTime()/1e3);case"x":return y.$d.getTime();case"z":return"["+y.offsetName()+"]";case"zzz":return"["+y.offsetName("long")+"]";default:return F}});return s.bind(this)(C)}}})})(gn);var Mi=gn.exports;const Si=ke(Mi);var he=function(){var t=function(b,o,d,m){for(d=d||{},m=b.length;m--;d[b[m]]=o);return d},e=[6,8,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,32,33,35,37],n=[1,25],r=[1,26],i=[1,27],s=[1,28],a=[1,29],y=[1,30],_=[1,31],k=[1,9],C=[1,10],F=[1,11],w=[1,12],x=[1,13],q=[1,14],g=[1,15],L=[1,16],O=[1,18],W=[1,19],B=[1,20],Z=[1,21],Q=[1,22],v=[1,24],A=[1,32],T={trace:function(){},yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,dateFormat:19,inclusiveEndDates:20,topAxis:21,axisFormat:22,tickInterval:23,excludes:24,includes:25,todayMarker:26,title:27,acc_title:28,acc_title_value:29,acc_descr:30,acc_descr_value:31,acc_descr_multiline_value:32,section:33,clickStatement:34,taskTxt:35,taskData:36,click:37,callbackname:38,callbackargs:39,href:40,clickStatementDebug:41,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",19:"dateFormat",20:"inclusiveEndDates",21:"topAxis",22:"axisFormat",23:"tickInterval",24:"excludes",25:"includes",26:"todayMarker",27:"title",28:"acc_title",29:"acc_title_value",30:"acc_descr",31:"acc_descr_value",32:"acc_descr_multiline_value",33:"section",35:"taskTxt",36:"taskData",37:"click",38:"callbackname",39:"callbackargs",40:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[34,2],[34,3],[34,3],[34,4],[34,3],[34,4],[34,2],[41,2],[41,3],[41,3],[41,4],[41,3],[41,4],[41,2]],performAction:function(o,d,m,u,S,c,X){var f=c.length-1;switch(S){case 1:return c[f-1];case 2:this.$=[];break;case 3:c[f-1].push(c[f]),this.$=c[f-1];break;case 4:case 5:this.$=c[f];break;case 6:case 7:this.$=[];break;case 8:u.setWeekday("monday");break;case 9:u.setWeekday("tuesday");break;case 10:u.setWeekday("wednesday");break;case 11:u.setWeekday("thursday");break;case 12:u.setWeekday("friday");break;case 13:u.setWeekday("saturday");break;case 14:u.setWeekday("sunday");break;case 15:u.setDateFormat(c[f].substr(11)),this.$=c[f].substr(11);break;case 16:u.enableInclusiveEndDates(),this.$=c[f].substr(18);break;case 17:u.TopAxis(),this.$=c[f].substr(8);break;case 18:u.setAxisFormat(c[f].substr(11)),this.$=c[f].substr(11);break;case 19:u.setTickInterval(c[f].substr(13)),this.$=c[f].substr(13);break;case 20:u.setExcludes(c[f].substr(9)),this.$=c[f].substr(9);break;case 21:u.setIncludes(c[f].substr(9)),this.$=c[f].substr(9);break;case 22:u.setTodayMarker(c[f].substr(12)),this.$=c[f].substr(12);break;case 24:u.setDiagramTitle(c[f].substr(6)),this.$=c[f].substr(6);break;case 25:this.$=c[f].trim(),u.setAccTitle(this.$);break;case 26:case 27:this.$=c[f].trim(),u.setAccDescription(this.$);break;case 28:u.addSection(c[f].substr(8)),this.$=c[f].substr(8);break;case 30:u.addTask(c[f-1],c[f]),this.$="task";break;case 31:this.$=c[f-1],u.setClickEvent(c[f-1],c[f],null);break;case 32:this.$=c[f-2],u.setClickEvent(c[f-2],c[f-1],c[f]);break;case 33:this.$=c[f-2],u.setClickEvent(c[f-2],c[f-1],null),u.setLink(c[f-2],c[f]);break;case 34:this.$=c[f-3],u.setClickEvent(c[f-3],c[f-2],c[f-1]),u.setLink(c[f-3],c[f]);break;case 35:this.$=c[f-2],u.setClickEvent(c[f-2],c[f],null),u.setLink(c[f-2],c[f-1]);break;case 36:this.$=c[f-3],u.setClickEvent(c[f-3],c[f-1],c[f]),u.setLink(c[f-3],c[f-2]);break;case 37:this.$=c[f-1],u.setLink(c[f-1],c[f]);break;case 38:case 44:this.$=c[f-1]+" "+c[f];break;case 39:case 40:case 42:this.$=c[f-2]+" "+c[f-1]+" "+c[f];break;case 41:case 43:this.$=c[f-3]+" "+c[f-2]+" "+c[f-1]+" "+c[f];break}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:n,13:r,14:i,15:s,16:a,17:y,18:_,19:k,20:C,21:F,22:w,23:x,24:q,25:g,26:L,27:O,28:W,30:B,32:Z,33:Q,34:23,35:v,37:A},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:33,11:17,12:n,13:r,14:i,15:s,16:a,17:y,18:_,19:k,20:C,21:F,22:w,23:x,24:q,25:g,26:L,27:O,28:W,30:B,32:Z,33:Q,34:23,35:v,37:A},t(e,[2,5]),t(e,[2,6]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),{29:[1,34]},{31:[1,35]},t(e,[2,27]),t(e,[2,28]),t(e,[2,29]),{36:[1,36]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),{38:[1,37],40:[1,38]},t(e,[2,4]),t(e,[2,25]),t(e,[2,26]),t(e,[2,30]),t(e,[2,31],{39:[1,39],40:[1,40]}),t(e,[2,37],{38:[1,41]}),t(e,[2,32],{40:[1,42]}),t(e,[2,33]),t(e,[2,35],{39:[1,43]}),t(e,[2,34]),t(e,[2,36])],defaultActions:{},parseError:function(o,d){if(d.recoverable)this.trace(o);else{var m=new Error(o);throw m.hash=d,m}},parse:function(o){var d=this,m=[0],u=[],S=[null],c=[],X=this.table,f="",h=0,U=0,G=2,z=1,N=c.slice.call(arguments,1),I=Object.create(this.lexer),V={yy:{}};for(var st in this.yy)Object.prototype.hasOwnProperty.call(this.yy,st)&&(V.yy[st]=this.yy[st]);I.setInput(o,V.yy),V.yy.lexer=I,V.yy.parser=this,typeof I.yylloc>"u"&&(I.yylloc={});var it=I.yylloc;c.push(it);var p=I.options&&I.options.ranges;typeof V.yy.parseError=="function"?this.parseError=V.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function E(){var ct;return ct=u.pop()||I.lex()||z,typeof ct!="number"&&(ct instanceof Array&&(u=ct,ct=u.pop()),ct=d.symbols_[ct]||ct),ct}for(var M,l,R,H,j={},$,et,Ut,Vt;;){if(l=m[m.length-1],this.defaultActions[l]?R=this.defaultActions[l]:((M===null||typeof M>"u")&&(M=E()),R=X[l]&&X[l][M]),typeof R>"u"||!R.length||!R[0]){var Jt="";Vt=[];for($ in X[l])this.terminals_[$]&&$>G&&Vt.push("'"+this.terminals_[$]+"'");I.showPosition?Jt="Parse error on line "+(h+1)+`:
                   `+I.showPosition()+`
                   Expecting `+Vt.join(", ")+", got '"+(this.terminals_[M]||M)+"'":Jt="Parse error on line "+(h+1)+": Unexpected "+(M==z?"end of input":"'"+(this.terminals_[M]||M)+"'"),this.parseError(Jt,{text:I.match,token:this.terminals_[M]||M,line:I.yylineno,loc:it,expected:Vt})}if(R[0]instanceof Array&&R.length>1)throw new Error("Parse Error: multiple actions possible at state: "+l+", token: "+M);switch(R[0]){case 1:m.push(M),S.push(I.yytext),c.push(I.yylloc),m.push(R[1]),M=null,U=I.yyleng,f=I.yytext,h=I.yylineno,it=I.yylloc;break;case 2:if(et=this.productions_[R[1]][1],j.$=S[S.length-et],j._$={first_line:c[c.length-(et||1)].first_line,last_line:c[c.length-1].last_line,first_column:c[c.length-(et||1)].first_column,last_column:c[c.length-1].last_column},p&&(j._$.range=[c[c.length-(et||1)].range[0],c[c.length-1].range[1]]),H=this.performAction.apply(j,[f,U,h,V.yy,R[1],S,c].concat(N)),typeof H<"u")return H;et&&(m=m.slice(0,-1*et*2),S=S.slice(0,-1*et),c=c.slice(0,-1*et)),m.push(this.productions_[R[1]][0]),S.push(j.$),c.push(j._$),Ut=X[m[m.length-2]][m[m.length-1]],m.push(Ut);break;case 3:return!0}}return!0}},Y=function(){var b={EOF:1,parseError:function(d,m){if(this.yy.parser)this.yy.parser.parseError(d,m);else throw new Error(d)},setInput:function(o,d){return this.yy=d||this.yy||{},this._input=o,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var o=this._input[0];this.yytext+=o,this.yyleng++,this.offset++,this.match+=o,this.matched+=o;var d=o.match(/(?:\r\n?|\n).*/g);return d?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),o},unput:function(o){var d=o.length,m=o.split(/(?:\r\n?|\n)/g);this._input=o+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-d),this.offset-=d;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),m.length-1&&(this.yylineno-=m.length-1);var S=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:m?(m.length===u.length?this.yylloc.first_column:0)+u[u.length-m.length].length-m[0].length:this.yylloc.first_column-d},this.options.ranges&&(this.yylloc.range=[S[0],S[0]+this.yyleng-d]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
                   `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(o){this.unput(this.match.slice(o))},pastInput:function(){var o=this.matched.substr(0,this.matched.length-this.match.length);return(o.length>20?"...":"")+o.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var o=this.match;return o.length<20&&(o+=this._input.substr(0,20-o.length)),(o.substr(0,20)+(o.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var o=this.pastInput(),d=new Array(o.length+1).join("-");return o+this.upcomingInput()+`
                  diff --git a/assets/gb28181_sip_signaling_packet_capture.html-P96Mkrz9.js b/assets/gb28181_sip_signaling_packet_capture.html-ZYkWywxi.js
                  similarity index 99%
                  rename from assets/gb28181_sip_signaling_packet_capture.html-P96Mkrz9.js
                  rename to assets/gb28181_sip_signaling_packet_capture.html-ZYkWywxi.js
                  index baea9be..6e0ae7c 100644
                  --- a/assets/gb28181_sip_signaling_packet_capture.html-P96Mkrz9.js
                  +++ b/assets/gb28181_sip_signaling_packet_capture.html-ZYkWywxi.js
                  @@ -1,4 +1,4 @@
                  -import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as n,c as s,e}from"./app-BrxqtzGY.js";const p={},t=e(`

                  1、注册

                  • 注册请求:
                  REGISTER sip:130909115229300920@10.64.49.44:7100 SIP/2.0
                  +import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as n,c as s,e}from"./app-oTlYPy8h.js";const p={},t=e(`

                  1、注册

                  • 注册请求:
                  REGISTER sip:130909115229300920@10.64.49.44:7100 SIP/2.0
                   Via: SIP/2.0/UDP 10.64.49.218:7100;rport;branch=z9hG4bK4162288924
                   From: <sip:130909113319427420@10.64.49.218:7100>;tag=382068091
                   To: <sip:130909113319427420@10.64.49.218:7100>
                  diff --git a/assets/gb28181_sip_signaling_packet_capture.html--EqBn8MM.js b/assets/gb28181_sip_signaling_packet_capture.html-z_vnDm71.js
                  similarity index 99%
                  rename from assets/gb28181_sip_signaling_packet_capture.html--EqBn8MM.js
                  rename to assets/gb28181_sip_signaling_packet_capture.html-z_vnDm71.js
                  index baea9be..6e0ae7c 100644
                  --- a/assets/gb28181_sip_signaling_packet_capture.html--EqBn8MM.js
                  +++ b/assets/gb28181_sip_signaling_packet_capture.html-z_vnDm71.js
                  @@ -1,4 +1,4 @@
                  -import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as n,c as s,e}from"./app-BrxqtzGY.js";const p={},t=e(`

                  1、注册

                  • 注册请求:
                  REGISTER sip:130909115229300920@10.64.49.44:7100 SIP/2.0
                  +import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as n,c as s,e}from"./app-oTlYPy8h.js";const p={},t=e(`

                  1、注册

                  • 注册请求:
                  REGISTER sip:130909115229300920@10.64.49.44:7100 SIP/2.0
                   Via: SIP/2.0/UDP 10.64.49.218:7100;rport;branch=z9hG4bK4162288924
                   From: <sip:130909113319427420@10.64.49.218:7100>;tag=382068091
                   To: <sip:130909113319427420@10.64.49.218:7100>
                  diff --git a/assets/generate_ssl_self-signed_certificate_and_test.html-KPuMmQeO.js b/assets/generate_ssl_self-signed_certificate_and_test.html-MI1uDkfZ.js
                  similarity index 99%
                  rename from assets/generate_ssl_self-signed_certificate_and_test.html-KPuMmQeO.js
                  rename to assets/generate_ssl_self-signed_certificate_and_test.html-MI1uDkfZ.js
                  index 7645a3f..f6c04df 100644
                  --- a/assets/generate_ssl_self-signed_certificate_and_test.html-KPuMmQeO.js
                  +++ b/assets/generate_ssl_self-signed_certificate_and_test.html-MI1uDkfZ.js
                  @@ -1,4 +1,4 @@
                  -import{_ as a}from"./generate_ssl_self-signed_certificate_and_test-D4Sbj3Ls.js";import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as n,c as s,e as t}from"./app-BrxqtzGY.js";const i={},r=t(`

                  1. Generate Private Key

                   openssl genrsa  -out server.key 2048
                  +import{_ as a}from"./generate_ssl_self-signed_certificate_and_test-D4Sbj3Ls.js";import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as n,c as s,e as t}from"./app-oTlYPy8h.js";const i={},r=t(`

                  1. Generate Private Key

                   openssl genrsa  -out server.key 2048
                   

                  2. Create Certificate Signing Request (CSR) File

                   openssl req -new -key server.key -out server.csr
                   

                  Note: You will be prompted to enter the domain name (Common Name (e.g. server FQDN or YOUR name)):

                  Country Name (2 letter code) [AU]:cn
                   State or Province Name (full name) [Some-State]:gd
                  diff --git a/assets/generate_ssl_self-signed_certificate_and_test.html-XP7q2oT5.js b/assets/generate_ssl_self-signed_certificate_and_test.html-tLIkOOZS.js
                  similarity index 98%
                  rename from assets/generate_ssl_self-signed_certificate_and_test.html-XP7q2oT5.js
                  rename to assets/generate_ssl_self-signed_certificate_and_test.html-tLIkOOZS.js
                  index d3e5d15..b004e7f 100644
                  --- a/assets/generate_ssl_self-signed_certificate_and_test.html-XP7q2oT5.js
                  +++ b/assets/generate_ssl_self-signed_certificate_and_test.html-tLIkOOZS.js
                  @@ -1,4 +1,4 @@
                  -import{_ as a}from"./generate_ssl_self-signed_certificate_and_test-D4Sbj3Ls.js";import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as s,c as e,e as t}from"./app-BrxqtzGY.js";const i={},r=t(`

                  1、创建私钥

                   openssl genrsa  -out server.key 2048
                  +import{_ as a}from"./generate_ssl_self-signed_certificate_and_test-D4Sbj3Ls.js";import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as s,c as e,e as t}from"./app-oTlYPy8h.js";const i={},r=t(`

                  1、创建私钥

                   openssl genrsa  -out server.key 2048
                   

                  2、 创建签名请求文件

                   openssl req -new -key server.key -out server.csr
                   

                  注意,需要输入域名(Common Name (e.g. server FQDN or YOUR name)):

                  Country Name (2 letter code) [AU]:cn
                   State or Province Name (full name) [Some-State]:gd
                  diff --git a/assets/gitGraphDiagram-6b463803-EqEFWtIw.js b/assets/gitGraphDiagram-6b463803-leFcDYEm.js
                  similarity index 99%
                  rename from assets/gitGraphDiagram-6b463803-EqEFWtIw.js
                  rename to assets/gitGraphDiagram-6b463803-leFcDYEm.js
                  index 1996e8c..036ea28 100644
                  --- a/assets/gitGraphDiagram-6b463803-EqEFWtIw.js
                  +++ b/assets/gitGraphDiagram-6b463803-leFcDYEm.js
                  @@ -1,4 +1,4 @@
                  -import{c as A,s as Mt,g as Ct,a as At,b as Ot,v as St,x as It,l as G,j as D,z as Gt,h as Pt,y as Nt,as as Ht,at as Bt}from"./mermaid.core-zy7cM8l9.js";import"./app-BrxqtzGY.js";var mt=function(){var r=function(q,h,b,k){for(b=b||{},k=q.length;k--;b[q[k]]=h);return b},a=[1,3],o=[1,6],u=[1,4],n=[1,5],c=[2,5],m=[1,12],l=[5,7,13,19,21,23,24,26,28,31,36,39,46],E=[7,13,19,21,23,24,26,28,31,36,39],_=[7,12,13,19,21,23,24,26,28,31,36,39],i=[7,13,46],g=[1,42],p=[1,41],x=[7,13,29,32,34,37,46],f=[1,55],d=[1,56],y=[1,57],H=[7,13,32,34,41,46],w={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,GG:5,document:6,EOF:7,":":8,DIR:9,options:10,body:11,OPT:12,NL:13,line:14,statement:15,commitStatement:16,mergeStatement:17,cherryPickStatement:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,section:24,branchStatement:25,CHECKOUT:26,ref:27,BRANCH:28,ORDER:29,NUM:30,CHERRY_PICK:31,COMMIT_ID:32,STR:33,COMMIT_TAG:34,EMPTYSTR:35,MERGE:36,COMMIT_TYPE:37,commitType:38,COMMIT:39,commit_arg:40,COMMIT_MSG:41,NORMAL:42,REVERSE:43,HIGHLIGHT:44,ID:45,";":46,$accept:0,$end:1},terminals_:{2:"error",5:"GG",7:"EOF",8:":",9:"DIR",12:"OPT",13:"NL",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"section",26:"CHECKOUT",28:"BRANCH",29:"ORDER",30:"NUM",31:"CHERRY_PICK",32:"COMMIT_ID",33:"STR",34:"COMMIT_TAG",35:"EMPTYSTR",36:"MERGE",37:"COMMIT_TYPE",39:"COMMIT",41:"COMMIT_MSG",42:"NORMAL",43:"REVERSE",44:"HIGHLIGHT",45:"ID",46:";"},productions_:[0,[3,2],[3,3],[3,4],[3,5],[6,0],[6,2],[10,2],[10,1],[11,0],[11,2],[14,2],[14,1],[15,1],[15,1],[15,1],[15,2],[15,2],[15,1],[15,1],[15,1],[15,2],[25,2],[25,4],[18,3],[18,5],[18,5],[18,5],[18,5],[17,2],[17,4],[17,4],[17,4],[17,6],[17,6],[17,6],[17,6],[17,6],[17,6],[17,8],[17,8],[17,8],[17,8],[17,8],[17,8],[16,2],[16,3],[16,3],[16,5],[16,5],[16,3],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,3],[16,5],[16,5],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[40,0],[40,1],[38,1],[38,1],[38,1],[27,1],[27,1],[4,1],[4,1],[4,1]],performAction:function(h,b,k,s,T,t,X){var e=t.length-1;switch(T){case 2:return t[e];case 3:return t[e-1];case 4:return s.setDirection(t[e-3]),t[e-1];case 6:s.setOptions(t[e-1]),this.$=t[e];break;case 7:t[e-1]+=t[e],this.$=t[e-1];break;case 9:this.$=[];break;case 10:t[e-1].push(t[e]),this.$=t[e-1];break;case 11:this.$=t[e-1];break;case 16:this.$=t[e].trim(),s.setAccTitle(this.$);break;case 17:case 18:this.$=t[e].trim(),s.setAccDescription(this.$);break;case 19:s.addSection(t[e].substr(8)),this.$=t[e].substr(8);break;case 21:s.checkout(t[e]);break;case 22:s.branch(t[e]);break;case 23:s.branch(t[e-2],t[e]);break;case 24:s.cherryPick(t[e],"",void 0);break;case 25:s.cherryPick(t[e-2],"",t[e]);break;case 26:case 28:s.cherryPick(t[e-2],"","");break;case 27:s.cherryPick(t[e],"",t[e-2]);break;case 29:s.merge(t[e],"","","");break;case 30:s.merge(t[e-2],t[e],"","");break;case 31:s.merge(t[e-2],"",t[e],"");break;case 32:s.merge(t[e-2],"","",t[e]);break;case 33:s.merge(t[e-4],t[e],"",t[e-2]);break;case 34:s.merge(t[e-4],"",t[e],t[e-2]);break;case 35:s.merge(t[e-4],"",t[e-2],t[e]);break;case 36:s.merge(t[e-4],t[e-2],t[e],"");break;case 37:s.merge(t[e-4],t[e-2],"",t[e]);break;case 38:s.merge(t[e-4],t[e],t[e-2],"");break;case 39:s.merge(t[e-6],t[e-4],t[e-2],t[e]);break;case 40:s.merge(t[e-6],t[e],t[e-4],t[e-2]);break;case 41:s.merge(t[e-6],t[e-4],t[e],t[e-2]);break;case 42:s.merge(t[e-6],t[e-2],t[e-4],t[e]);break;case 43:s.merge(t[e-6],t[e],t[e-2],t[e-4]);break;case 44:s.merge(t[e-6],t[e-2],t[e],t[e-4]);break;case 45:s.commit(t[e]);break;case 46:s.commit("","",s.commitType.NORMAL,t[e]);break;case 47:s.commit("","",t[e],"");break;case 48:s.commit("","",t[e],t[e-2]);break;case 49:s.commit("","",t[e-2],t[e]);break;case 50:s.commit("",t[e],s.commitType.NORMAL,"");break;case 51:s.commit("",t[e-2],s.commitType.NORMAL,t[e]);break;case 52:s.commit("",t[e],s.commitType.NORMAL,t[e-2]);break;case 53:s.commit("",t[e-2],t[e],"");break;case 54:s.commit("",t[e],t[e-2],"");break;case 55:s.commit("",t[e-4],t[e-2],t[e]);break;case 56:s.commit("",t[e-4],t[e],t[e-2]);break;case 57:s.commit("",t[e-2],t[e-4],t[e]);break;case 58:s.commit("",t[e],t[e-4],t[e-2]);break;case 59:s.commit("",t[e],t[e-2],t[e-4]);break;case 60:s.commit("",t[e-2],t[e],t[e-4]);break;case 61:s.commit(t[e],"",s.commitType.NORMAL,"");break;case 62:s.commit(t[e],"",s.commitType.NORMAL,t[e-2]);break;case 63:s.commit(t[e-2],"",s.commitType.NORMAL,t[e]);break;case 64:s.commit(t[e-2],"",t[e],"");break;case 65:s.commit(t[e],"",t[e-2],"");break;case 66:s.commit(t[e],t[e-2],s.commitType.NORMAL,"");break;case 67:s.commit(t[e-2],t[e],s.commitType.NORMAL,"");break;case 68:s.commit(t[e-4],"",t[e-2],t[e]);break;case 69:s.commit(t[e-4],"",t[e],t[e-2]);break;case 70:s.commit(t[e-2],"",t[e-4],t[e]);break;case 71:s.commit(t[e],"",t[e-4],t[e-2]);break;case 72:s.commit(t[e],"",t[e-2],t[e-4]);break;case 73:s.commit(t[e-2],"",t[e],t[e-4]);break;case 74:s.commit(t[e-4],t[e],t[e-2],"");break;case 75:s.commit(t[e-4],t[e-2],t[e],"");break;case 76:s.commit(t[e-2],t[e],t[e-4],"");break;case 77:s.commit(t[e],t[e-2],t[e-4],"");break;case 78:s.commit(t[e],t[e-4],t[e-2],"");break;case 79:s.commit(t[e-2],t[e-4],t[e],"");break;case 80:s.commit(t[e-4],t[e],s.commitType.NORMAL,t[e-2]);break;case 81:s.commit(t[e-4],t[e-2],s.commitType.NORMAL,t[e]);break;case 82:s.commit(t[e-2],t[e],s.commitType.NORMAL,t[e-4]);break;case 83:s.commit(t[e],t[e-2],s.commitType.NORMAL,t[e-4]);break;case 84:s.commit(t[e],t[e-4],s.commitType.NORMAL,t[e-2]);break;case 85:s.commit(t[e-2],t[e-4],s.commitType.NORMAL,t[e]);break;case 86:s.commit(t[e-6],t[e-4],t[e-2],t[e]);break;case 87:s.commit(t[e-6],t[e-4],t[e],t[e-2]);break;case 88:s.commit(t[e-6],t[e-2],t[e-4],t[e]);break;case 89:s.commit(t[e-6],t[e],t[e-4],t[e-2]);break;case 90:s.commit(t[e-6],t[e-2],t[e],t[e-4]);break;case 91:s.commit(t[e-6],t[e],t[e-2],t[e-4]);break;case 92:s.commit(t[e-4],t[e-6],t[e-2],t[e]);break;case 93:s.commit(t[e-4],t[e-6],t[e],t[e-2]);break;case 94:s.commit(t[e-2],t[e-6],t[e-4],t[e]);break;case 95:s.commit(t[e],t[e-6],t[e-4],t[e-2]);break;case 96:s.commit(t[e-2],t[e-6],t[e],t[e-4]);break;case 97:s.commit(t[e],t[e-6],t[e-2],t[e-4]);break;case 98:s.commit(t[e],t[e-4],t[e-2],t[e-6]);break;case 99:s.commit(t[e-2],t[e-4],t[e],t[e-6]);break;case 100:s.commit(t[e],t[e-2],t[e-4],t[e-6]);break;case 101:s.commit(t[e-2],t[e],t[e-4],t[e-6]);break;case 102:s.commit(t[e-4],t[e-2],t[e],t[e-6]);break;case 103:s.commit(t[e-4],t[e],t[e-2],t[e-6]);break;case 104:s.commit(t[e-2],t[e-4],t[e-6],t[e]);break;case 105:s.commit(t[e],t[e-4],t[e-6],t[e-2]);break;case 106:s.commit(t[e-2],t[e],t[e-6],t[e-4]);break;case 107:s.commit(t[e],t[e-2],t[e-6],t[e-4]);break;case 108:s.commit(t[e-4],t[e-2],t[e-6],t[e]);break;case 109:s.commit(t[e-4],t[e],t[e-6],t[e-2]);break;case 110:this.$="";break;case 111:this.$=t[e];break;case 112:this.$=s.commitType.NORMAL;break;case 113:this.$=s.commitType.REVERSE;break;case 114:this.$=s.commitType.HIGHLIGHT;break}},table:[{3:1,4:2,5:a,7:o,13:u,46:n},{1:[3]},{3:7,4:2,5:a,7:o,13:u,46:n},{6:8,7:c,8:[1,9],9:[1,10],10:11,13:m},r(l,[2,117]),r(l,[2,118]),r(l,[2,119]),{1:[2,1]},{7:[1,13]},{6:14,7:c,10:11,13:m},{8:[1,15]},r(E,[2,9],{11:16,12:[1,17]}),r(_,[2,8]),{1:[2,2]},{7:[1,18]},{6:19,7:c,10:11,13:m},{7:[2,6],13:[1,22],14:20,15:21,16:23,17:24,18:25,19:[1,26],21:[1,27],23:[1,28],24:[1,29],25:30,26:[1,31],28:[1,35],31:[1,34],36:[1,33],39:[1,32]},r(_,[2,7]),{1:[2,3]},{7:[1,36]},r(E,[2,10]),{4:37,7:o,13:u,46:n},r(E,[2,12]),r(i,[2,13]),r(i,[2,14]),r(i,[2,15]),{20:[1,38]},{22:[1,39]},r(i,[2,18]),r(i,[2,19]),r(i,[2,20]),{27:40,33:g,45:p},r(i,[2,110],{40:43,32:[1,46],33:[1,48],34:[1,44],37:[1,45],41:[1,47]}),{27:49,33:g,45:p},{32:[1,50],34:[1,51]},{27:52,33:g,45:p},{1:[2,4]},r(E,[2,11]),r(i,[2,16]),r(i,[2,17]),r(i,[2,21]),r(x,[2,115]),r(x,[2,116]),r(i,[2,45]),{33:[1,53]},{38:54,42:f,43:d,44:y},{33:[1,58]},{33:[1,59]},r(i,[2,111]),r(i,[2,29],{32:[1,60],34:[1,62],37:[1,61]}),{33:[1,63]},{33:[1,64],35:[1,65]},r(i,[2,22],{29:[1,66]}),r(i,[2,46],{32:[1,68],37:[1,67],41:[1,69]}),r(i,[2,47],{32:[1,71],34:[1,70],41:[1,72]}),r(H,[2,112]),r(H,[2,113]),r(H,[2,114]),r(i,[2,50],{34:[1,73],37:[1,74],41:[1,75]}),r(i,[2,61],{32:[1,78],34:[1,76],37:[1,77]}),{33:[1,79]},{38:80,42:f,43:d,44:y},{33:[1,81]},r(i,[2,24],{34:[1,82]}),{32:[1,83]},{32:[1,84]},{30:[1,85]},{38:86,42:f,43:d,44:y},{33:[1,87]},{33:[1,88]},{33:[1,89]},{33:[1,90]},{33:[1,91]},{33:[1,92]},{38:93,42:f,43:d,44:y},{33:[1,94]},{33:[1,95]},{38:96,42:f,43:d,44:y},{33:[1,97]},r(i,[2,30],{34:[1,99],37:[1,98]}),r(i,[2,31],{32:[1,101],34:[1,100]}),r(i,[2,32],{32:[1,102],37:[1,103]}),{33:[1,104],35:[1,105]},{33:[1,106]},{33:[1,107]},r(i,[2,23]),r(i,[2,48],{32:[1,108],41:[1,109]}),r(i,[2,52],{37:[1,110],41:[1,111]}),r(i,[2,62],{32:[1,113],37:[1,112]}),r(i,[2,49],{32:[1,114],41:[1,115]}),r(i,[2,54],{34:[1,116],41:[1,117]}),r(i,[2,65],{32:[1,119],34:[1,118]}),r(i,[2,51],{37:[1,120],41:[1,121]}),r(i,[2,53],{34:[1,122],41:[1,123]}),r(i,[2,66],{34:[1,125],37:[1,124]}),r(i,[2,63],{32:[1,127],37:[1,126]}),r(i,[2,64],{32:[1,129],34:[1,128]}),r(i,[2,67],{34:[1,131],37:[1,130]}),{38:132,42:f,43:d,44:y},{33:[1,133]},{33:[1,134]},{33:[1,135]},{33:[1,136]},{38:137,42:f,43:d,44:y},r(i,[2,25]),r(i,[2,26]),r(i,[2,27]),r(i,[2,28]),{33:[1,138]},{33:[1,139]},{38:140,42:f,43:d,44:y},{33:[1,141]},{38:142,42:f,43:d,44:y},{33:[1,143]},{33:[1,144]},{33:[1,145]},{33:[1,146]},{33:[1,147]},{33:[1,148]},{33:[1,149]},{38:150,42:f,43:d,44:y},{33:[1,151]},{33:[1,152]},{33:[1,153]},{38:154,42:f,43:d,44:y},{33:[1,155]},{38:156,42:f,43:d,44:y},{33:[1,157]},{33:[1,158]},{33:[1,159]},{38:160,42:f,43:d,44:y},{33:[1,161]},r(i,[2,36],{34:[1,162]}),r(i,[2,37],{37:[1,163]}),r(i,[2,35],{32:[1,164]}),r(i,[2,38],{34:[1,165]}),r(i,[2,33],{37:[1,166]}),r(i,[2,34],{32:[1,167]}),r(i,[2,59],{41:[1,168]}),r(i,[2,72],{32:[1,169]}),r(i,[2,60],{41:[1,170]}),r(i,[2,83],{37:[1,171]}),r(i,[2,73],{32:[1,172]}),r(i,[2,82],{37:[1,173]}),r(i,[2,58],{41:[1,174]}),r(i,[2,71],{32:[1,175]}),r(i,[2,57],{41:[1,176]}),r(i,[2,77],{34:[1,177]}),r(i,[2,70],{32:[1,178]}),r(i,[2,76],{34:[1,179]}),r(i,[2,56],{41:[1,180]}),r(i,[2,84],{37:[1,181]}),r(i,[2,55],{41:[1,182]}),r(i,[2,78],{34:[1,183]}),r(i,[2,79],{34:[1,184]}),r(i,[2,85],{37:[1,185]}),r(i,[2,69],{32:[1,186]}),r(i,[2,80],{37:[1,187]}),r(i,[2,68],{32:[1,188]}),r(i,[2,74],{34:[1,189]}),r(i,[2,75],{34:[1,190]}),r(i,[2,81],{37:[1,191]}),{33:[1,192]},{38:193,42:f,43:d,44:y},{33:[1,194]},{33:[1,195]},{38:196,42:f,43:d,44:y},{33:[1,197]},{33:[1,198]},{33:[1,199]},{33:[1,200]},{38:201,42:f,43:d,44:y},{33:[1,202]},{38:203,42:f,43:d,44:y},{33:[1,204]},{33:[1,205]},{33:[1,206]},{33:[1,207]},{33:[1,208]},{33:[1,209]},{33:[1,210]},{38:211,42:f,43:d,44:y},{33:[1,212]},{33:[1,213]},{33:[1,214]},{38:215,42:f,43:d,44:y},{33:[1,216]},{38:217,42:f,43:d,44:y},{33:[1,218]},{33:[1,219]},{33:[1,220]},{38:221,42:f,43:d,44:y},r(i,[2,39]),r(i,[2,41]),r(i,[2,40]),r(i,[2,42]),r(i,[2,44]),r(i,[2,43]),r(i,[2,100]),r(i,[2,101]),r(i,[2,98]),r(i,[2,99]),r(i,[2,103]),r(i,[2,102]),r(i,[2,107]),r(i,[2,106]),r(i,[2,105]),r(i,[2,104]),r(i,[2,109]),r(i,[2,108]),r(i,[2,97]),r(i,[2,96]),r(i,[2,95]),r(i,[2,94]),r(i,[2,92]),r(i,[2,93]),r(i,[2,91]),r(i,[2,90]),r(i,[2,89]),r(i,[2,88]),r(i,[2,86]),r(i,[2,87])],defaultActions:{7:[2,1],13:[2,2],18:[2,3],36:[2,4]},parseError:function(h,b){if(b.recoverable)this.trace(h);else{var k=new Error(h);throw k.hash=b,k}},parse:function(h){var b=this,k=[0],s=[],T=[null],t=[],X=this.table,e="",rt=0,pt=0,Tt=2,ft=1,Lt=t.slice.call(arguments,1),v=Object.create(this.lexer),Y={yy:{}};for(var ct in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ct)&&(Y.yy[ct]=this.yy[ct]);v.setInput(h,Y.yy),Y.yy.lexer=v,Y.yy.parser=this,typeof v.yylloc>"u"&&(v.yylloc={});var ot=v.yylloc;t.push(ot);var Rt=v.options&&v.options.ranges;typeof Y.yy.parseError=="function"?this.parseError=Y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function vt(){var j;return j=s.pop()||v.lex()||ft,typeof j!="number"&&(j instanceof Array&&(s=j,j=s.pop()),j=b.symbols_[j]||j),j}for(var I,K,V,lt,W={},it,z,bt,st;;){if(K=k[k.length-1],this.defaultActions[K]?V=this.defaultActions[K]:((I===null||typeof I>"u")&&(I=vt()),V=X[K]&&X[K][I]),typeof V>"u"||!V.length||!V[0]){var ht="";st=[];for(it in X[K])this.terminals_[it]&&it>Tt&&st.push("'"+this.terminals_[it]+"'");v.showPosition?ht="Parse error on line "+(rt+1)+`:
                  +import{c as A,s as Mt,g as Ct,a as At,b as Ot,v as St,x as It,l as G,j as D,z as Gt,h as Pt,y as Nt,as as Ht,at as Bt}from"./mermaid.core-QJnSHCal.js";import"./app-oTlYPy8h.js";var mt=function(){var r=function(q,h,b,k){for(b=b||{},k=q.length;k--;b[q[k]]=h);return b},a=[1,3],o=[1,6],u=[1,4],n=[1,5],c=[2,5],m=[1,12],l=[5,7,13,19,21,23,24,26,28,31,36,39,46],E=[7,13,19,21,23,24,26,28,31,36,39],_=[7,12,13,19,21,23,24,26,28,31,36,39],i=[7,13,46],g=[1,42],p=[1,41],x=[7,13,29,32,34,37,46],f=[1,55],d=[1,56],y=[1,57],H=[7,13,32,34,41,46],w={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,GG:5,document:6,EOF:7,":":8,DIR:9,options:10,body:11,OPT:12,NL:13,line:14,statement:15,commitStatement:16,mergeStatement:17,cherryPickStatement:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,section:24,branchStatement:25,CHECKOUT:26,ref:27,BRANCH:28,ORDER:29,NUM:30,CHERRY_PICK:31,COMMIT_ID:32,STR:33,COMMIT_TAG:34,EMPTYSTR:35,MERGE:36,COMMIT_TYPE:37,commitType:38,COMMIT:39,commit_arg:40,COMMIT_MSG:41,NORMAL:42,REVERSE:43,HIGHLIGHT:44,ID:45,";":46,$accept:0,$end:1},terminals_:{2:"error",5:"GG",7:"EOF",8:":",9:"DIR",12:"OPT",13:"NL",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"section",26:"CHECKOUT",28:"BRANCH",29:"ORDER",30:"NUM",31:"CHERRY_PICK",32:"COMMIT_ID",33:"STR",34:"COMMIT_TAG",35:"EMPTYSTR",36:"MERGE",37:"COMMIT_TYPE",39:"COMMIT",41:"COMMIT_MSG",42:"NORMAL",43:"REVERSE",44:"HIGHLIGHT",45:"ID",46:";"},productions_:[0,[3,2],[3,3],[3,4],[3,5],[6,0],[6,2],[10,2],[10,1],[11,0],[11,2],[14,2],[14,1],[15,1],[15,1],[15,1],[15,2],[15,2],[15,1],[15,1],[15,1],[15,2],[25,2],[25,4],[18,3],[18,5],[18,5],[18,5],[18,5],[17,2],[17,4],[17,4],[17,4],[17,6],[17,6],[17,6],[17,6],[17,6],[17,6],[17,8],[17,8],[17,8],[17,8],[17,8],[17,8],[16,2],[16,3],[16,3],[16,5],[16,5],[16,3],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,3],[16,5],[16,5],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[40,0],[40,1],[38,1],[38,1],[38,1],[27,1],[27,1],[4,1],[4,1],[4,1]],performAction:function(h,b,k,s,T,t,X){var e=t.length-1;switch(T){case 2:return t[e];case 3:return t[e-1];case 4:return s.setDirection(t[e-3]),t[e-1];case 6:s.setOptions(t[e-1]),this.$=t[e];break;case 7:t[e-1]+=t[e],this.$=t[e-1];break;case 9:this.$=[];break;case 10:t[e-1].push(t[e]),this.$=t[e-1];break;case 11:this.$=t[e-1];break;case 16:this.$=t[e].trim(),s.setAccTitle(this.$);break;case 17:case 18:this.$=t[e].trim(),s.setAccDescription(this.$);break;case 19:s.addSection(t[e].substr(8)),this.$=t[e].substr(8);break;case 21:s.checkout(t[e]);break;case 22:s.branch(t[e]);break;case 23:s.branch(t[e-2],t[e]);break;case 24:s.cherryPick(t[e],"",void 0);break;case 25:s.cherryPick(t[e-2],"",t[e]);break;case 26:case 28:s.cherryPick(t[e-2],"","");break;case 27:s.cherryPick(t[e],"",t[e-2]);break;case 29:s.merge(t[e],"","","");break;case 30:s.merge(t[e-2],t[e],"","");break;case 31:s.merge(t[e-2],"",t[e],"");break;case 32:s.merge(t[e-2],"","",t[e]);break;case 33:s.merge(t[e-4],t[e],"",t[e-2]);break;case 34:s.merge(t[e-4],"",t[e],t[e-2]);break;case 35:s.merge(t[e-4],"",t[e-2],t[e]);break;case 36:s.merge(t[e-4],t[e-2],t[e],"");break;case 37:s.merge(t[e-4],t[e-2],"",t[e]);break;case 38:s.merge(t[e-4],t[e],t[e-2],"");break;case 39:s.merge(t[e-6],t[e-4],t[e-2],t[e]);break;case 40:s.merge(t[e-6],t[e],t[e-4],t[e-2]);break;case 41:s.merge(t[e-6],t[e-4],t[e],t[e-2]);break;case 42:s.merge(t[e-6],t[e-2],t[e-4],t[e]);break;case 43:s.merge(t[e-6],t[e],t[e-2],t[e-4]);break;case 44:s.merge(t[e-6],t[e-2],t[e],t[e-4]);break;case 45:s.commit(t[e]);break;case 46:s.commit("","",s.commitType.NORMAL,t[e]);break;case 47:s.commit("","",t[e],"");break;case 48:s.commit("","",t[e],t[e-2]);break;case 49:s.commit("","",t[e-2],t[e]);break;case 50:s.commit("",t[e],s.commitType.NORMAL,"");break;case 51:s.commit("",t[e-2],s.commitType.NORMAL,t[e]);break;case 52:s.commit("",t[e],s.commitType.NORMAL,t[e-2]);break;case 53:s.commit("",t[e-2],t[e],"");break;case 54:s.commit("",t[e],t[e-2],"");break;case 55:s.commit("",t[e-4],t[e-2],t[e]);break;case 56:s.commit("",t[e-4],t[e],t[e-2]);break;case 57:s.commit("",t[e-2],t[e-4],t[e]);break;case 58:s.commit("",t[e],t[e-4],t[e-2]);break;case 59:s.commit("",t[e],t[e-2],t[e-4]);break;case 60:s.commit("",t[e-2],t[e],t[e-4]);break;case 61:s.commit(t[e],"",s.commitType.NORMAL,"");break;case 62:s.commit(t[e],"",s.commitType.NORMAL,t[e-2]);break;case 63:s.commit(t[e-2],"",s.commitType.NORMAL,t[e]);break;case 64:s.commit(t[e-2],"",t[e],"");break;case 65:s.commit(t[e],"",t[e-2],"");break;case 66:s.commit(t[e],t[e-2],s.commitType.NORMAL,"");break;case 67:s.commit(t[e-2],t[e],s.commitType.NORMAL,"");break;case 68:s.commit(t[e-4],"",t[e-2],t[e]);break;case 69:s.commit(t[e-4],"",t[e],t[e-2]);break;case 70:s.commit(t[e-2],"",t[e-4],t[e]);break;case 71:s.commit(t[e],"",t[e-4],t[e-2]);break;case 72:s.commit(t[e],"",t[e-2],t[e-4]);break;case 73:s.commit(t[e-2],"",t[e],t[e-4]);break;case 74:s.commit(t[e-4],t[e],t[e-2],"");break;case 75:s.commit(t[e-4],t[e-2],t[e],"");break;case 76:s.commit(t[e-2],t[e],t[e-4],"");break;case 77:s.commit(t[e],t[e-2],t[e-4],"");break;case 78:s.commit(t[e],t[e-4],t[e-2],"");break;case 79:s.commit(t[e-2],t[e-4],t[e],"");break;case 80:s.commit(t[e-4],t[e],s.commitType.NORMAL,t[e-2]);break;case 81:s.commit(t[e-4],t[e-2],s.commitType.NORMAL,t[e]);break;case 82:s.commit(t[e-2],t[e],s.commitType.NORMAL,t[e-4]);break;case 83:s.commit(t[e],t[e-2],s.commitType.NORMAL,t[e-4]);break;case 84:s.commit(t[e],t[e-4],s.commitType.NORMAL,t[e-2]);break;case 85:s.commit(t[e-2],t[e-4],s.commitType.NORMAL,t[e]);break;case 86:s.commit(t[e-6],t[e-4],t[e-2],t[e]);break;case 87:s.commit(t[e-6],t[e-4],t[e],t[e-2]);break;case 88:s.commit(t[e-6],t[e-2],t[e-4],t[e]);break;case 89:s.commit(t[e-6],t[e],t[e-4],t[e-2]);break;case 90:s.commit(t[e-6],t[e-2],t[e],t[e-4]);break;case 91:s.commit(t[e-6],t[e],t[e-2],t[e-4]);break;case 92:s.commit(t[e-4],t[e-6],t[e-2],t[e]);break;case 93:s.commit(t[e-4],t[e-6],t[e],t[e-2]);break;case 94:s.commit(t[e-2],t[e-6],t[e-4],t[e]);break;case 95:s.commit(t[e],t[e-6],t[e-4],t[e-2]);break;case 96:s.commit(t[e-2],t[e-6],t[e],t[e-4]);break;case 97:s.commit(t[e],t[e-6],t[e-2],t[e-4]);break;case 98:s.commit(t[e],t[e-4],t[e-2],t[e-6]);break;case 99:s.commit(t[e-2],t[e-4],t[e],t[e-6]);break;case 100:s.commit(t[e],t[e-2],t[e-4],t[e-6]);break;case 101:s.commit(t[e-2],t[e],t[e-4],t[e-6]);break;case 102:s.commit(t[e-4],t[e-2],t[e],t[e-6]);break;case 103:s.commit(t[e-4],t[e],t[e-2],t[e-6]);break;case 104:s.commit(t[e-2],t[e-4],t[e-6],t[e]);break;case 105:s.commit(t[e],t[e-4],t[e-6],t[e-2]);break;case 106:s.commit(t[e-2],t[e],t[e-6],t[e-4]);break;case 107:s.commit(t[e],t[e-2],t[e-6],t[e-4]);break;case 108:s.commit(t[e-4],t[e-2],t[e-6],t[e]);break;case 109:s.commit(t[e-4],t[e],t[e-6],t[e-2]);break;case 110:this.$="";break;case 111:this.$=t[e];break;case 112:this.$=s.commitType.NORMAL;break;case 113:this.$=s.commitType.REVERSE;break;case 114:this.$=s.commitType.HIGHLIGHT;break}},table:[{3:1,4:2,5:a,7:o,13:u,46:n},{1:[3]},{3:7,4:2,5:a,7:o,13:u,46:n},{6:8,7:c,8:[1,9],9:[1,10],10:11,13:m},r(l,[2,117]),r(l,[2,118]),r(l,[2,119]),{1:[2,1]},{7:[1,13]},{6:14,7:c,10:11,13:m},{8:[1,15]},r(E,[2,9],{11:16,12:[1,17]}),r(_,[2,8]),{1:[2,2]},{7:[1,18]},{6:19,7:c,10:11,13:m},{7:[2,6],13:[1,22],14:20,15:21,16:23,17:24,18:25,19:[1,26],21:[1,27],23:[1,28],24:[1,29],25:30,26:[1,31],28:[1,35],31:[1,34],36:[1,33],39:[1,32]},r(_,[2,7]),{1:[2,3]},{7:[1,36]},r(E,[2,10]),{4:37,7:o,13:u,46:n},r(E,[2,12]),r(i,[2,13]),r(i,[2,14]),r(i,[2,15]),{20:[1,38]},{22:[1,39]},r(i,[2,18]),r(i,[2,19]),r(i,[2,20]),{27:40,33:g,45:p},r(i,[2,110],{40:43,32:[1,46],33:[1,48],34:[1,44],37:[1,45],41:[1,47]}),{27:49,33:g,45:p},{32:[1,50],34:[1,51]},{27:52,33:g,45:p},{1:[2,4]},r(E,[2,11]),r(i,[2,16]),r(i,[2,17]),r(i,[2,21]),r(x,[2,115]),r(x,[2,116]),r(i,[2,45]),{33:[1,53]},{38:54,42:f,43:d,44:y},{33:[1,58]},{33:[1,59]},r(i,[2,111]),r(i,[2,29],{32:[1,60],34:[1,62],37:[1,61]}),{33:[1,63]},{33:[1,64],35:[1,65]},r(i,[2,22],{29:[1,66]}),r(i,[2,46],{32:[1,68],37:[1,67],41:[1,69]}),r(i,[2,47],{32:[1,71],34:[1,70],41:[1,72]}),r(H,[2,112]),r(H,[2,113]),r(H,[2,114]),r(i,[2,50],{34:[1,73],37:[1,74],41:[1,75]}),r(i,[2,61],{32:[1,78],34:[1,76],37:[1,77]}),{33:[1,79]},{38:80,42:f,43:d,44:y},{33:[1,81]},r(i,[2,24],{34:[1,82]}),{32:[1,83]},{32:[1,84]},{30:[1,85]},{38:86,42:f,43:d,44:y},{33:[1,87]},{33:[1,88]},{33:[1,89]},{33:[1,90]},{33:[1,91]},{33:[1,92]},{38:93,42:f,43:d,44:y},{33:[1,94]},{33:[1,95]},{38:96,42:f,43:d,44:y},{33:[1,97]},r(i,[2,30],{34:[1,99],37:[1,98]}),r(i,[2,31],{32:[1,101],34:[1,100]}),r(i,[2,32],{32:[1,102],37:[1,103]}),{33:[1,104],35:[1,105]},{33:[1,106]},{33:[1,107]},r(i,[2,23]),r(i,[2,48],{32:[1,108],41:[1,109]}),r(i,[2,52],{37:[1,110],41:[1,111]}),r(i,[2,62],{32:[1,113],37:[1,112]}),r(i,[2,49],{32:[1,114],41:[1,115]}),r(i,[2,54],{34:[1,116],41:[1,117]}),r(i,[2,65],{32:[1,119],34:[1,118]}),r(i,[2,51],{37:[1,120],41:[1,121]}),r(i,[2,53],{34:[1,122],41:[1,123]}),r(i,[2,66],{34:[1,125],37:[1,124]}),r(i,[2,63],{32:[1,127],37:[1,126]}),r(i,[2,64],{32:[1,129],34:[1,128]}),r(i,[2,67],{34:[1,131],37:[1,130]}),{38:132,42:f,43:d,44:y},{33:[1,133]},{33:[1,134]},{33:[1,135]},{33:[1,136]},{38:137,42:f,43:d,44:y},r(i,[2,25]),r(i,[2,26]),r(i,[2,27]),r(i,[2,28]),{33:[1,138]},{33:[1,139]},{38:140,42:f,43:d,44:y},{33:[1,141]},{38:142,42:f,43:d,44:y},{33:[1,143]},{33:[1,144]},{33:[1,145]},{33:[1,146]},{33:[1,147]},{33:[1,148]},{33:[1,149]},{38:150,42:f,43:d,44:y},{33:[1,151]},{33:[1,152]},{33:[1,153]},{38:154,42:f,43:d,44:y},{33:[1,155]},{38:156,42:f,43:d,44:y},{33:[1,157]},{33:[1,158]},{33:[1,159]},{38:160,42:f,43:d,44:y},{33:[1,161]},r(i,[2,36],{34:[1,162]}),r(i,[2,37],{37:[1,163]}),r(i,[2,35],{32:[1,164]}),r(i,[2,38],{34:[1,165]}),r(i,[2,33],{37:[1,166]}),r(i,[2,34],{32:[1,167]}),r(i,[2,59],{41:[1,168]}),r(i,[2,72],{32:[1,169]}),r(i,[2,60],{41:[1,170]}),r(i,[2,83],{37:[1,171]}),r(i,[2,73],{32:[1,172]}),r(i,[2,82],{37:[1,173]}),r(i,[2,58],{41:[1,174]}),r(i,[2,71],{32:[1,175]}),r(i,[2,57],{41:[1,176]}),r(i,[2,77],{34:[1,177]}),r(i,[2,70],{32:[1,178]}),r(i,[2,76],{34:[1,179]}),r(i,[2,56],{41:[1,180]}),r(i,[2,84],{37:[1,181]}),r(i,[2,55],{41:[1,182]}),r(i,[2,78],{34:[1,183]}),r(i,[2,79],{34:[1,184]}),r(i,[2,85],{37:[1,185]}),r(i,[2,69],{32:[1,186]}),r(i,[2,80],{37:[1,187]}),r(i,[2,68],{32:[1,188]}),r(i,[2,74],{34:[1,189]}),r(i,[2,75],{34:[1,190]}),r(i,[2,81],{37:[1,191]}),{33:[1,192]},{38:193,42:f,43:d,44:y},{33:[1,194]},{33:[1,195]},{38:196,42:f,43:d,44:y},{33:[1,197]},{33:[1,198]},{33:[1,199]},{33:[1,200]},{38:201,42:f,43:d,44:y},{33:[1,202]},{38:203,42:f,43:d,44:y},{33:[1,204]},{33:[1,205]},{33:[1,206]},{33:[1,207]},{33:[1,208]},{33:[1,209]},{33:[1,210]},{38:211,42:f,43:d,44:y},{33:[1,212]},{33:[1,213]},{33:[1,214]},{38:215,42:f,43:d,44:y},{33:[1,216]},{38:217,42:f,43:d,44:y},{33:[1,218]},{33:[1,219]},{33:[1,220]},{38:221,42:f,43:d,44:y},r(i,[2,39]),r(i,[2,41]),r(i,[2,40]),r(i,[2,42]),r(i,[2,44]),r(i,[2,43]),r(i,[2,100]),r(i,[2,101]),r(i,[2,98]),r(i,[2,99]),r(i,[2,103]),r(i,[2,102]),r(i,[2,107]),r(i,[2,106]),r(i,[2,105]),r(i,[2,104]),r(i,[2,109]),r(i,[2,108]),r(i,[2,97]),r(i,[2,96]),r(i,[2,95]),r(i,[2,94]),r(i,[2,92]),r(i,[2,93]),r(i,[2,91]),r(i,[2,90]),r(i,[2,89]),r(i,[2,88]),r(i,[2,86]),r(i,[2,87])],defaultActions:{7:[2,1],13:[2,2],18:[2,3],36:[2,4]},parseError:function(h,b){if(b.recoverable)this.trace(h);else{var k=new Error(h);throw k.hash=b,k}},parse:function(h){var b=this,k=[0],s=[],T=[null],t=[],X=this.table,e="",rt=0,pt=0,Tt=2,ft=1,Lt=t.slice.call(arguments,1),v=Object.create(this.lexer),Y={yy:{}};for(var ct in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ct)&&(Y.yy[ct]=this.yy[ct]);v.setInput(h,Y.yy),Y.yy.lexer=v,Y.yy.parser=this,typeof v.yylloc>"u"&&(v.yylloc={});var ot=v.yylloc;t.push(ot);var Rt=v.options&&v.options.ranges;typeof Y.yy.parseError=="function"?this.parseError=Y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function vt(){var j;return j=s.pop()||v.lex()||ft,typeof j!="number"&&(j instanceof Array&&(s=j,j=s.pop()),j=b.symbols_[j]||j),j}for(var I,K,V,lt,W={},it,z,bt,st;;){if(K=k[k.length-1],this.defaultActions[K]?V=this.defaultActions[K]:((I===null||typeof I>"u")&&(I=vt()),V=X[K]&&X[K][I]),typeof V>"u"||!V.length||!V[0]){var ht="";st=[];for(it in X[K])this.terminals_[it]&&it>Tt&&st.push("'"+this.terminals_[it]+"'");v.showPosition?ht="Parse error on line "+(rt+1)+`:
                   `+v.showPosition()+`
                   Expecting `+st.join(", ")+", got '"+(this.terminals_[I]||I)+"'":ht="Parse error on line "+(rt+1)+": Unexpected "+(I==ft?"end of input":"'"+(this.terminals_[I]||I)+"'"),this.parseError(ht,{text:v.match,token:this.terminals_[I]||I,line:v.yylineno,loc:ot,expected:st})}if(V[0]instanceof Array&&V.length>1)throw new Error("Parse Error: multiple actions possible at state: "+K+", token: "+I);switch(V[0]){case 1:k.push(I),T.push(v.yytext),t.push(v.yylloc),k.push(V[1]),I=null,pt=v.yyleng,e=v.yytext,rt=v.yylineno,ot=v.yylloc;break;case 2:if(z=this.productions_[V[1]][1],W.$=T[T.length-z],W._$={first_line:t[t.length-(z||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(z||1)].first_column,last_column:t[t.length-1].last_column},Rt&&(W._$.range=[t[t.length-(z||1)].range[0],t[t.length-1].range[1]]),lt=this.performAction.apply(W,[e,pt,rt,Y.yy,V[1],T,t].concat(Lt)),typeof lt<"u")return lt;z&&(k=k.slice(0,-1*z*2),T=T.slice(0,-1*z),t=t.slice(0,-1*z)),k.push(this.productions_[V[1]][0]),T.push(W.$),t.push(W._$),bt=X[k[k.length-2]][k[k.length-1]],k.push(bt);break;case 3:return!0}}return!0}},B=function(){var q={EOF:1,parseError:function(b,k){if(this.yy.parser)this.yy.parser.parseError(b,k);else throw new Error(b)},setInput:function(h,b){return this.yy=b||this.yy||{},this._input=h,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var h=this._input[0];this.yytext+=h,this.yyleng++,this.offset++,this.match+=h,this.matched+=h;var b=h.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),h},unput:function(h){var b=h.length,k=h.split(/(?:\r\n?|\n)/g);this._input=h+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b),this.offset-=b;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),k.length-1&&(this.yylineno-=k.length-1);var T=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:k?(k.length===s.length?this.yylloc.first_column:0)+s[s.length-k.length].length-k[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[T[0],T[0]+this.yyleng-b]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
                   `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(h){this.unput(this.match.slice(h))},pastInput:function(){var h=this.matched.substr(0,this.matched.length-this.match.length);return(h.length>20?"...":"")+h.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var h=this.match;return h.length<20&&(h+=this._input.substr(0,20-h.length)),(h.substr(0,20)+(h.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var h=this.pastInput(),b=new Array(h.length+1).join("-");return h+this.upcomingInput()+`
                  diff --git a/assets/high_concurrency_implementation_principle.html--R-GXKUV.js b/assets/high_concurrency_implementation_principle.html-FgHSxlv4.js
                  similarity index 99%
                  rename from assets/high_concurrency_implementation_principle.html--R-GXKUV.js
                  rename to assets/high_concurrency_implementation_principle.html-FgHSxlv4.js
                  index 07dbaa9..9045c48 100644
                  --- a/assets/high_concurrency_implementation_principle.html--R-GXKUV.js
                  +++ b/assets/high_concurrency_implementation_principle.html-FgHSxlv4.js
                  @@ -1,4 +1,4 @@
                  -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as c,c as l,a as n,d as s,b as p,w as i,e as u}from"./app-BrxqtzGY.js";const k={},r=n("h2",{id:"项目介绍",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#项目介绍","aria-hidden":"true"},"#"),s(" 项目介绍")],-1),d={href:"https://github.com/xiongziliang/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},v=u(`

                  该框架基于 C++11 开发,避免使用裸指针,减少内存拷贝,代码精简可靠,并发性能优异,在 linux 平台下,单一进程即可充分利用多核 CPU 的优势;最大限度的榨干 CPU、网卡性能;轻松达到万兆网卡性能极限。同时也能在高性能的同时,做到极低延时,画面秒开。

                  目前 ZLMediaKit 经过多次版本迭代,编程模型多次升级优化;已经趋于成熟稳定,也在各种生产环境得到了验证,本文主要讨论 ZLMediaKit 高性能实现原理以及项目特点。

                  网络模型对比

                  不同于 SRS 的单线程多协程、node.js/redis 的单线程、NGINX 的多进程模型;ZLMediaKit 采用的是单进程多线程模型。那么为什么 ZLMediaKit 要采用这样的编程模型呢?

                  作为一个多年的 C++服务器后台开发工程师,多年的工作经验告诉我,作为一个服务器程序,对于稳定性要求极高;一个服务器可以性能差点,但是绝不能轻易 core dump;服务中断、重启、异常,对于一个线上已运营项目来说结果是灾难性的。那么我们该怎么确保服务器的稳定?目前有以下手段:

                  • 单线程模型
                  • 单线程+协程
                  • 单线程+多进程
                  • 多线程+锁
                  • 弃用 C/C++

                  采用单线程模型的优点是,服务器简单可靠,不用考虑资源竞争互斥的问题,这样可以比较容易做到高稳定性;采用此模型的典型代表项目有 redis、node.js。但是由于是单线程模型,所以弊端也比较明显;那就是在多核 cpu 上不能充分利用多核 CPU 的算力,性能瓶颈主要在于 CPU(大家应该有过在 redis 中执行 keys *慢慢等待的经历)。

                  img
                  img

                  单线程+协程的方案本质上与纯单线程模型无区别,它们的区别主要编程风格上。纯单线程模型使用的是非阻塞式处处回调方式实现高并发,这种模型会有所谓的回调地狱的问题,编程起来会比较麻烦。而单线程+协程的方案是简化编程方式,采用自然的阻塞式编程风格,在协程库内部管理任务调度,本质也是非阻塞的。但是协程库涉及的比较底层,跟系统息息相关,所以跨平台不是很好做,而且设计实现一个协程库门槛较高。SRS 采用就是这编程模型,由于协程库的限制,SRS 不能在 windows 上运行。

                  为了解决上述单线程模型的问题,很多服务器采用单线程多进程的编程模型;在这种模型下,既有单线程模型的简单可靠的特性,又能充分发挥多核 CPU 的性能,而且某个进程挂了也不会影响其他进程,像 NGINX 就是这种编程模型;但是这种模型也有其局限性。在这种模型下,会话间是相互隔离的,两个会话可能运行在不同的进程上;这样就导致了会话间通信的困难。比如说 A 用户连接在服务器 A 进程上,B 用户连接在服务器 B 进程上;如果两者之间要完成某种数据交互,那么会异常困难,这样必须通过进程间通信来完成。而进程间通信代价和开销比较大,编程起来也比较困难。但是如果会话间无需数据交互(例如 http 服务器),那么这种模型是特别适合的,所以 NGINX 作为 http 服务器也是非常成功的,但是如果是譬如即时聊天的那种需要会话间通信的服务,那么这种开发模型不是很适合。不过现在越来越多的服务都需要支持分布式集群部署,所以单线程多进程方案的缺陷越来越不明显。

                  由于 C/C++是种强类型静态语言,异常处理简单粗暴,动不动就 core dump。C/C++的设计理念就是发现错误及早暴露,在某种意义上来说,崩溃也是种好事,因为这样会引起你的重视,让你能及早发现定位并解决问题,而不是把问题拖延到无法解决的时候再暴露给你。但是这么做对一般人来说,C/C++就不是很友好了,人类并不像机器那样严谨,有点疏忽在所难免,况且有些小问题也无伤大雅,并不需要毁灭式的 core dump 来应对。而且 C/C++的学习曲线异常艰难困苦,很多人好几年也不得要领,所以很多人表示纷纷弃坑,转投 go / erlang / node.js 之类。

                  但是 C/C++由于其性能优越性,以及历史原因,在某些场景下是不二选择,而且 C/C++才是真正的跨平台语言;况且随着智能指针的推出,内存管理不再是难题;而 lambda 语法的支持,让程序上下文绑定不再困难。随着 C++新特性的支持,编译器静态反射机制的完善,现代 C++编程愈发简便快捷。ZLMediaKit 采用的就是 C++11 新标准以及相关理念完成的高性能流媒体服务框架。

                  与上面其它编程模型不同,ZLMediaKit 采用的是多线程开发模型;与传统的多线程模型不同;ZLMediaKit 采用了 C++11 的智能指针来做内存管理,在线程切换时可以完美的管理内存在多线程下共享以及其生命周期。同时互斥锁的粒度消减至极致,几乎可以忽略不计。所以采用多线程模型的 ZLMediaKit 性能损耗极低,每条线程的性能几乎可以媲美单线程模型,同时也可以充分榨干 CPU 的每一核心性能。

                  网络模型详述

                  ZLMediaKit 在启动时会根据 cpu 核心数自动创建若干个 epoll 实例(非 linux 平台为 select);这些 epoll 实例都会有一个线程来运行epoll_wait函数来等待事件的触发。

                  以 ZLMediaKit 的 RTMP 服务为例,在创建一个TcpServer时,ZLMediaKit 会把这个 Tcp 服务的监听套接字加入到每一个 epoll 实例,这样如果收到新的 RTMP 播放请求,那么多个 epoll 实例会在内核的调度下,自动选择负载较轻的线程触发 accept 事件,以下是代码片段:

                  template <typename SessionType>
                  +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as c,c as l,a as n,d as s,b as p,w as i,e as u}from"./app-oTlYPy8h.js";const k={},r=n("h2",{id:"项目介绍",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#项目介绍","aria-hidden":"true"},"#"),s(" 项目介绍")],-1),d={href:"https://github.com/xiongziliang/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},v=u(`

                  该框架基于 C++11 开发,避免使用裸指针,减少内存拷贝,代码精简可靠,并发性能优异,在 linux 平台下,单一进程即可充分利用多核 CPU 的优势;最大限度的榨干 CPU、网卡性能;轻松达到万兆网卡性能极限。同时也能在高性能的同时,做到极低延时,画面秒开。

                  目前 ZLMediaKit 经过多次版本迭代,编程模型多次升级优化;已经趋于成熟稳定,也在各种生产环境得到了验证,本文主要讨论 ZLMediaKit 高性能实现原理以及项目特点。

                  网络模型对比

                  不同于 SRS 的单线程多协程、node.js/redis 的单线程、NGINX 的多进程模型;ZLMediaKit 采用的是单进程多线程模型。那么为什么 ZLMediaKit 要采用这样的编程模型呢?

                  作为一个多年的 C++服务器后台开发工程师,多年的工作经验告诉我,作为一个服务器程序,对于稳定性要求极高;一个服务器可以性能差点,但是绝不能轻易 core dump;服务中断、重启、异常,对于一个线上已运营项目来说结果是灾难性的。那么我们该怎么确保服务器的稳定?目前有以下手段:

                  • 单线程模型
                  • 单线程+协程
                  • 单线程+多进程
                  • 多线程+锁
                  • 弃用 C/C++

                  采用单线程模型的优点是,服务器简单可靠,不用考虑资源竞争互斥的问题,这样可以比较容易做到高稳定性;采用此模型的典型代表项目有 redis、node.js。但是由于是单线程模型,所以弊端也比较明显;那就是在多核 cpu 上不能充分利用多核 CPU 的算力,性能瓶颈主要在于 CPU(大家应该有过在 redis 中执行 keys *慢慢等待的经历)。

                  img
                  img

                  单线程+协程的方案本质上与纯单线程模型无区别,它们的区别主要编程风格上。纯单线程模型使用的是非阻塞式处处回调方式实现高并发,这种模型会有所谓的回调地狱的问题,编程起来会比较麻烦。而单线程+协程的方案是简化编程方式,采用自然的阻塞式编程风格,在协程库内部管理任务调度,本质也是非阻塞的。但是协程库涉及的比较底层,跟系统息息相关,所以跨平台不是很好做,而且设计实现一个协程库门槛较高。SRS 采用就是这编程模型,由于协程库的限制,SRS 不能在 windows 上运行。

                  为了解决上述单线程模型的问题,很多服务器采用单线程多进程的编程模型;在这种模型下,既有单线程模型的简单可靠的特性,又能充分发挥多核 CPU 的性能,而且某个进程挂了也不会影响其他进程,像 NGINX 就是这种编程模型;但是这种模型也有其局限性。在这种模型下,会话间是相互隔离的,两个会话可能运行在不同的进程上;这样就导致了会话间通信的困难。比如说 A 用户连接在服务器 A 进程上,B 用户连接在服务器 B 进程上;如果两者之间要完成某种数据交互,那么会异常困难,这样必须通过进程间通信来完成。而进程间通信代价和开销比较大,编程起来也比较困难。但是如果会话间无需数据交互(例如 http 服务器),那么这种模型是特别适合的,所以 NGINX 作为 http 服务器也是非常成功的,但是如果是譬如即时聊天的那种需要会话间通信的服务,那么这种开发模型不是很适合。不过现在越来越多的服务都需要支持分布式集群部署,所以单线程多进程方案的缺陷越来越不明显。

                  由于 C/C++是种强类型静态语言,异常处理简单粗暴,动不动就 core dump。C/C++的设计理念就是发现错误及早暴露,在某种意义上来说,崩溃也是种好事,因为这样会引起你的重视,让你能及早发现定位并解决问题,而不是把问题拖延到无法解决的时候再暴露给你。但是这么做对一般人来说,C/C++就不是很友好了,人类并不像机器那样严谨,有点疏忽在所难免,况且有些小问题也无伤大雅,并不需要毁灭式的 core dump 来应对。而且 C/C++的学习曲线异常艰难困苦,很多人好几年也不得要领,所以很多人表示纷纷弃坑,转投 go / erlang / node.js 之类。

                  但是 C/C++由于其性能优越性,以及历史原因,在某些场景下是不二选择,而且 C/C++才是真正的跨平台语言;况且随着智能指针的推出,内存管理不再是难题;而 lambda 语法的支持,让程序上下文绑定不再困难。随着 C++新特性的支持,编译器静态反射机制的完善,现代 C++编程愈发简便快捷。ZLMediaKit 采用的就是 C++11 新标准以及相关理念完成的高性能流媒体服务框架。

                  与上面其它编程模型不同,ZLMediaKit 采用的是多线程开发模型;与传统的多线程模型不同;ZLMediaKit 采用了 C++11 的智能指针来做内存管理,在线程切换时可以完美的管理内存在多线程下共享以及其生命周期。同时互斥锁的粒度消减至极致,几乎可以忽略不计。所以采用多线程模型的 ZLMediaKit 性能损耗极低,每条线程的性能几乎可以媲美单线程模型,同时也可以充分榨干 CPU 的每一核心性能。

                  网络模型详述

                  ZLMediaKit 在启动时会根据 cpu 核心数自动创建若干个 epoll 实例(非 linux 平台为 select);这些 epoll 实例都会有一个线程来运行epoll_wait函数来等待事件的触发。

                  以 ZLMediaKit 的 RTMP 服务为例,在创建一个TcpServer时,ZLMediaKit 会把这个 Tcp 服务的监听套接字加入到每一个 epoll 实例,这样如果收到新的 RTMP 播放请求,那么多个 epoll 实例会在内核的调度下,自动选择负载较轻的线程触发 accept 事件,以下是代码片段:

                  template <typename SessionType>
                   void start(uint16_t port, const std::string& host = "0.0.0.0", uint32_t backlog = 1024) {
                      start_l<SessionType>(port,host,backlog);
                      //自动加入到所有epoll线程监听
                  diff --git a/assets/high_concurrency_implementation_principle.html-Bqhl-32O.js b/assets/high_concurrency_implementation_principle.html-x1-J41yC.js
                  similarity index 99%
                  rename from assets/high_concurrency_implementation_principle.html-Bqhl-32O.js
                  rename to assets/high_concurrency_implementation_principle.html-x1-J41yC.js
                  index e5f705a..d9dbd42 100644
                  --- a/assets/high_concurrency_implementation_principle.html-Bqhl-32O.js
                  +++ b/assets/high_concurrency_implementation_principle.html-x1-J41yC.js
                  @@ -1,4 +1,4 @@
                  -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as c,c as l,a as n,d as s,b as p,w as i,e as u}from"./app-BrxqtzGY.js";const k={},r=n("h2",{id:"项目介绍",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#项目介绍","aria-hidden":"true"},"#"),s(" 项目介绍")],-1),d={href:"https://github.com/xiongziliang/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},v=u(`

                  该框架基于 C++11 开发,避免使用裸指针,减少内存拷贝,代码精简可靠,并发性能优异,在 linux 平台下,单一进程即可充分利用多核 CPU 的优势;最大限度的榨干 CPU、网卡性能;轻松达到万兆网卡性能极限。同时也能在高性能的同时,做到极低延时,画面秒开。

                  目前 ZLMediaKit 经过多次版本迭代,编程模型多次升级优化;已经趋于成熟稳定,也在各种生产环境得到了验证,本文主要讨论 ZLMediaKit 高性能实现原理以及项目特点。

                  网络模型对比

                  不同于 SRS 的单线程多协程、node.js/redis 的单线程、NGINX 的多进程模型;ZLMediaKit 采用的是单进程多线程模型。那么为什么 ZLMediaKit 要采用这样的编程模型呢?

                  作为一个多年的 C++服务器后台开发工程师,多年的工作经验告诉我,作为一个服务器程序,对于稳定性要求极高;一个服务器可以性能差点,但是绝不能轻易 core dump;服务中断、重启、异常,对于一个线上已运营项目来说结果是灾难性的。那么我们该怎么确保服务器的稳定?目前有以下手段:

                  • 单线程模型
                  • 单线程+协程
                  • 单线程+多进程
                  • 多线程+锁
                  • 弃用 C/C++

                  采用单线程模型的优点是,服务器简单可靠,不用考虑资源竞争互斥的问题,这样可以比较容易做到高稳定性;采用此模型的典型代表项目有 redis、node.js。但是由于是单线程模型,所以弊端也比较明显;那就是在多核 cpu 上不能充分利用多核 CPU 的算力,性能瓶颈主要在于 CPU(大家应该有过在 redis 中执行 keys *慢慢等待的经历)。

                  img
                  img

                  单线程+协程的方案本质上与纯单线程模型无区别,它们的区别主要编程风格上。纯单线程模型使用的是非阻塞式处处回调方式实现高并发,这种模型会有所谓的回调地狱的问题,编程起来会比较麻烦。而单线程+协程的方案是简化编程方式,采用自然的阻塞式编程风格,在协程库内部管理任务调度,本质也是非阻塞的。但是协程库涉及的比较底层,跟系统息息相关,所以跨平台不是很好做,而且设计实现一个协程库门槛较高。SRS 采用就是这编程模型,由于协程库的限制,SRS 不能在 windows 上运行。

                  为了解决上述单线程模型的问题,很多服务器采用单线程多进程的编程模型;在这种模型下,既有单线程模型的简单可靠的特性,又能充分发挥多核 CPU 的性能,而且某个进程挂了也不会影响其他进程,像 NGINX 就是这种编程模型;但是这种模型也有其局限性。在这种模型下,会话间是相互隔离的,两个会话可能运行在不同的进程上;这样就导致了会话间通信的困难。比如说 A 用户连接在服务器 A 进程上,B 用户连接在服务器 B 进程上;如果两者之间要完成某种数据交互,那么会异常困难,这样必须通过进程间通信来完成。而进程间通信代价和开销比较大,编程起来也比较困难。但是如果会话间无需数据交互(例如 http 服务器),那么这种模型是特别适合的,所以 NGINX 作为 http 服务器也是非常成功的,但是如果是譬如即时聊天的那种需要会话间通信的服务,那么这种开发模型不是很适合。不过现在越来越多的服务都需要支持分布式集群部署,所以单线程多进程方案的缺陷越来越不明显。

                  由于 C/C++是种强类型静态语言,异常处理简单粗暴,动不动就 core dump。C/C++的设计理念就是发现错误及早暴露,在某种意义上来说,崩溃也是种好事,因为这样会引起你的重视,让你能及早发现定位并解决问题,而不是把问题拖延到无法解决的时候再暴露给你。但是这么做对一般人来说,C/C++就不是很友好了,人类并不像机器那样严谨,有点疏忽在所难免,况且有些小问题也无伤大雅,并不需要毁灭式的 core dump 来应对。而且 C/C++的学习曲线异常艰难困苦,很多人好几年也不得要领,所以很多人表示纷纷弃坑,转投 go / erlang / node.js 之类。

                  但是 C/C++由于其性能优越性,以及历史原因,在某些场景下是不二选择,而且 C/C++才是真正的跨平台语言;况且随着智能指针的推出,内存管理不再是难题;而 lambda 语法的支持,让程序上下文绑定不再困难。随着 C++新特性的支持,编译器静态反射机制的完善,现代 C++编程愈发简便快捷。ZLMediaKit 采用的就是 C++11 新标准以及相关理念完成的高性能流媒体服务框架。

                  与上面其它编程模型不同,ZLMediaKit 采用的是多线程开发模型;与传统的多线程模型不同;ZLMediaKit 采用了 C++11 的智能指针来做内存管理,在线程切换时可以完美的管理内存在多线程下共享以及其生命周期。同时互斥锁的粒度消减至极致,几乎可以忽略不计。所以采用多线程模型的 ZLMediaKit 性能损耗极低,每条线程的性能几乎可以媲美单线程模型,同时也可以充分榨干 CPU 的每一核心性能。

                  网络模型详述

                  ZLMediaKit 在启动时会根据 cpu 核心数自动创建若干个 epoll 实例(非 linux 平台为 select);这些 epoll 实例都会有一个线程来运行epoll_wait函数来等待事件的触发。

                  以 ZLMediaKit 的 RTMP 服务为例,在创建一个TcpServer时,ZLMediaKit 会把这个 Tcp 服务的监听套接字加入到每一个 epoll 实例,这样如果收到新的 RTMP 播放请求,那么多个 epoll 实例会在内核的调度下,自动选择负载较轻的线程触发 accept 事件,以下是代码片段:

                  template <typename SessionType>
                  +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as c,c as l,a as n,d as s,b as p,w as i,e as u}from"./app-oTlYPy8h.js";const k={},r=n("h2",{id:"项目介绍",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#项目介绍","aria-hidden":"true"},"#"),s(" 项目介绍")],-1),d={href:"https://github.com/xiongziliang/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},v=u(`

                  该框架基于 C++11 开发,避免使用裸指针,减少内存拷贝,代码精简可靠,并发性能优异,在 linux 平台下,单一进程即可充分利用多核 CPU 的优势;最大限度的榨干 CPU、网卡性能;轻松达到万兆网卡性能极限。同时也能在高性能的同时,做到极低延时,画面秒开。

                  目前 ZLMediaKit 经过多次版本迭代,编程模型多次升级优化;已经趋于成熟稳定,也在各种生产环境得到了验证,本文主要讨论 ZLMediaKit 高性能实现原理以及项目特点。

                  网络模型对比

                  不同于 SRS 的单线程多协程、node.js/redis 的单线程、NGINX 的多进程模型;ZLMediaKit 采用的是单进程多线程模型。那么为什么 ZLMediaKit 要采用这样的编程模型呢?

                  作为一个多年的 C++服务器后台开发工程师,多年的工作经验告诉我,作为一个服务器程序,对于稳定性要求极高;一个服务器可以性能差点,但是绝不能轻易 core dump;服务中断、重启、异常,对于一个线上已运营项目来说结果是灾难性的。那么我们该怎么确保服务器的稳定?目前有以下手段:

                  • 单线程模型
                  • 单线程+协程
                  • 单线程+多进程
                  • 多线程+锁
                  • 弃用 C/C++

                  采用单线程模型的优点是,服务器简单可靠,不用考虑资源竞争互斥的问题,这样可以比较容易做到高稳定性;采用此模型的典型代表项目有 redis、node.js。但是由于是单线程模型,所以弊端也比较明显;那就是在多核 cpu 上不能充分利用多核 CPU 的算力,性能瓶颈主要在于 CPU(大家应该有过在 redis 中执行 keys *慢慢等待的经历)。

                  img
                  img

                  单线程+协程的方案本质上与纯单线程模型无区别,它们的区别主要编程风格上。纯单线程模型使用的是非阻塞式处处回调方式实现高并发,这种模型会有所谓的回调地狱的问题,编程起来会比较麻烦。而单线程+协程的方案是简化编程方式,采用自然的阻塞式编程风格,在协程库内部管理任务调度,本质也是非阻塞的。但是协程库涉及的比较底层,跟系统息息相关,所以跨平台不是很好做,而且设计实现一个协程库门槛较高。SRS 采用就是这编程模型,由于协程库的限制,SRS 不能在 windows 上运行。

                  为了解决上述单线程模型的问题,很多服务器采用单线程多进程的编程模型;在这种模型下,既有单线程模型的简单可靠的特性,又能充分发挥多核 CPU 的性能,而且某个进程挂了也不会影响其他进程,像 NGINX 就是这种编程模型;但是这种模型也有其局限性。在这种模型下,会话间是相互隔离的,两个会话可能运行在不同的进程上;这样就导致了会话间通信的困难。比如说 A 用户连接在服务器 A 进程上,B 用户连接在服务器 B 进程上;如果两者之间要完成某种数据交互,那么会异常困难,这样必须通过进程间通信来完成。而进程间通信代价和开销比较大,编程起来也比较困难。但是如果会话间无需数据交互(例如 http 服务器),那么这种模型是特别适合的,所以 NGINX 作为 http 服务器也是非常成功的,但是如果是譬如即时聊天的那种需要会话间通信的服务,那么这种开发模型不是很适合。不过现在越来越多的服务都需要支持分布式集群部署,所以单线程多进程方案的缺陷越来越不明显。

                  由于 C/C++是种强类型静态语言,异常处理简单粗暴,动不动就 core dump。C/C++的设计理念就是发现错误及早暴露,在某种意义上来说,崩溃也是种好事,因为这样会引起你的重视,让你能及早发现定位并解决问题,而不是把问题拖延到无法解决的时候再暴露给你。但是这么做对一般人来说,C/C++就不是很友好了,人类并不像机器那样严谨,有点疏忽在所难免,况且有些小问题也无伤大雅,并不需要毁灭式的 core dump 来应对。而且 C/C++的学习曲线异常艰难困苦,很多人好几年也不得要领,所以很多人表示纷纷弃坑,转投 go / erlang / node.js 之类。

                  但是 C/C++由于其性能优越性,以及历史原因,在某些场景下是不二选择,而且 C/C++才是真正的跨平台语言;况且随着智能指针的推出,内存管理不再是难题;而 lambda 语法的支持,让程序上下文绑定不再困难。随着 C++新特性的支持,编译器静态反射机制的完善,现代 C++编程愈发简便快捷。ZLMediaKit 采用的就是 C++11 新标准以及相关理念完成的高性能流媒体服务框架。

                  与上面其它编程模型不同,ZLMediaKit 采用的是多线程开发模型;与传统的多线程模型不同;ZLMediaKit 采用了 C++11 的智能指针来做内存管理,在线程切换时可以完美的管理内存在多线程下共享以及其生命周期。同时互斥锁的粒度消减至极致,几乎可以忽略不计。所以采用多线程模型的 ZLMediaKit 性能损耗极低,每条线程的性能几乎可以媲美单线程模型,同时也可以充分榨干 CPU 的每一核心性能。

                  网络模型详述

                  ZLMediaKit 在启动时会根据 cpu 核心数自动创建若干个 epoll 实例(非 linux 平台为 select);这些 epoll 实例都会有一个线程来运行epoll_wait函数来等待事件的触发。

                  以 ZLMediaKit 的 RTMP 服务为例,在创建一个TcpServer时,ZLMediaKit 会把这个 Tcp 服务的监听套接字加入到每一个 epoll 实例,这样如果收到新的 RTMP 播放请求,那么多个 epoll 实例会在内核的调度下,自动选择负载较轻的线程触发 accept 事件,以下是代码片段:

                  template <typename SessionType>
                   void start(uint16_t port, const std::string& host = "0.0.0.0", uint32_t backlog = 1024) {
                      start_l<SessionType>(port,host,backlog);
                      //自动加入到所有epoll线程监听
                  diff --git a/assets/hls_high_performance_journey.html-sIjCrFa8.js b/assets/hls_high_performance_journey.html-pNH0gpXw.js
                  similarity index 99%
                  rename from assets/hls_high_performance_journey.html-sIjCrFa8.js
                  rename to assets/hls_high_performance_journey.html-pNH0gpXw.js
                  index ed0ca7a..541c4e3 100644
                  --- a/assets/hls_high_performance_journey.html-sIjCrFa8.js
                  +++ b/assets/hls_high_performance_journey.html-pNH0gpXw.js
                  @@ -1,4 +1,4 @@
                  -import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as s,e as p}from"./app-BrxqtzGY.js";const t={},e=p(`

                  事情的起因

                  北京冬奥会前夕,zlmediakit 的一位用户完成了 iptv 系统的迁移; 由于 zlmediakit 对 hls 的支持比较完善,支持包括鉴权、统计、溯源等独家特性,所以他把之前的老系统都迁移到 zlmediakit 上了。

                  但是很不幸,在冬奥会开幕式当天,zlmediakit 并没有承受起考验,当 hls 并发数达到 3000 左右时,zlmediakit 线程负载接近 100%,延时非常高,整个服务器基本不可用:

                  图片.png
                  图片.png

                  思考

                  zlmediakit 定位是一个通用的流媒体服务器,主要精力聚焦在 rtsp/rtmp 等协议,对 hls 的优化并不够重视,hls 之前在 zlmediakit 里面实现方式跟 http 文件服务器实现方式基本一致,都是通过直接读取文件的方式提供下载。所以当 hls 播放数比较高时,每个用户播放都需要重新从磁盘读取一遍文件,这时文件 io 承压,由于磁盘慢速度的特性,不能承载太高的并发数。

                  有些朋友可能会问,如果用内存虚拟磁盘能不能提高性能?答案是能,但是由于内存拷贝带宽也存在上限,所以就算 hls 文件都放在内存目录,每次读取文件也会存在多次 memcopy,性能并不能有太大的飞跃。前面冬奥会直播事故那个案例,就是把 hls 文件放在内存目录,但是也就能承载 2000+并发而已。

                  歧途: sendfile

                  为了解决 hls 并发瓶颈这个问题,我首先思考到的是sendfile方案。我们知道,nginx作为 http 服务器的标杆,就支持 sendfile 这个特性。很早之前,我就听说过sendfile多牛逼,它支持直接把文件发送到socket fd;而不用通过用户态和内核态的内存互相拷贝,可以大幅提高文件发送的性能。

                  我们查看 sendfile 的资料,有如下介绍:

                  图片.png
                  图片.png

                  于是,在事故反馈当日,2022 年春节期间的某天深夜,我在严寒之下光着膀子在 zlmediakit 中把 sendfile 特性实现了一遍: 图片.png

                  实现的代码如下:

                  //HttpFileBody.cpp
                  +import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as s,e as p}from"./app-oTlYPy8h.js";const t={},e=p(`

                  事情的起因

                  北京冬奥会前夕,zlmediakit 的一位用户完成了 iptv 系统的迁移; 由于 zlmediakit 对 hls 的支持比较完善,支持包括鉴权、统计、溯源等独家特性,所以他把之前的老系统都迁移到 zlmediakit 上了。

                  但是很不幸,在冬奥会开幕式当天,zlmediakit 并没有承受起考验,当 hls 并发数达到 3000 左右时,zlmediakit 线程负载接近 100%,延时非常高,整个服务器基本不可用:

                  图片.png
                  图片.png

                  思考

                  zlmediakit 定位是一个通用的流媒体服务器,主要精力聚焦在 rtsp/rtmp 等协议,对 hls 的优化并不够重视,hls 之前在 zlmediakit 里面实现方式跟 http 文件服务器实现方式基本一致,都是通过直接读取文件的方式提供下载。所以当 hls 播放数比较高时,每个用户播放都需要重新从磁盘读取一遍文件,这时文件 io 承压,由于磁盘慢速度的特性,不能承载太高的并发数。

                  有些朋友可能会问,如果用内存虚拟磁盘能不能提高性能?答案是能,但是由于内存拷贝带宽也存在上限,所以就算 hls 文件都放在内存目录,每次读取文件也会存在多次 memcopy,性能并不能有太大的飞跃。前面冬奥会直播事故那个案例,就是把 hls 文件放在内存目录,但是也就能承载 2000+并发而已。

                  歧途: sendfile

                  为了解决 hls 并发瓶颈这个问题,我首先思考到的是sendfile方案。我们知道,nginx作为 http 服务器的标杆,就支持 sendfile 这个特性。很早之前,我就听说过sendfile多牛逼,它支持直接把文件发送到socket fd;而不用通过用户态和内核态的内存互相拷贝,可以大幅提高文件发送的性能。

                  我们查看 sendfile 的资料,有如下介绍:

                  图片.png
                  图片.png

                  于是,在事故反馈当日,2022 年春节期间的某天深夜,我在严寒之下光着膀子在 zlmediakit 中把 sendfile 特性实现了一遍: 图片.png

                  实现的代码如下:

                  //HttpFileBody.cpp
                   int HttpFileBody::sendFile(int fd) {
                   #if  defined(__linux__) || defined(__linux)
                       off_t off = _file_offset;
                  diff --git a/assets/hls_high_performance_journey.html-ePp6ZcY7.js b/assets/hls_high_performance_journey.html-v74JJlub.js
                  similarity index 99%
                  rename from assets/hls_high_performance_journey.html-ePp6ZcY7.js
                  rename to assets/hls_high_performance_journey.html-v74JJlub.js
                  index ed0ca7a..541c4e3 100644
                  --- a/assets/hls_high_performance_journey.html-ePp6ZcY7.js
                  +++ b/assets/hls_high_performance_journey.html-v74JJlub.js
                  @@ -1,4 +1,4 @@
                  -import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as s,e as p}from"./app-BrxqtzGY.js";const t={},e=p(`

                  事情的起因

                  北京冬奥会前夕,zlmediakit 的一位用户完成了 iptv 系统的迁移; 由于 zlmediakit 对 hls 的支持比较完善,支持包括鉴权、统计、溯源等独家特性,所以他把之前的老系统都迁移到 zlmediakit 上了。

                  但是很不幸,在冬奥会开幕式当天,zlmediakit 并没有承受起考验,当 hls 并发数达到 3000 左右时,zlmediakit 线程负载接近 100%,延时非常高,整个服务器基本不可用:

                  图片.png
                  图片.png

                  思考

                  zlmediakit 定位是一个通用的流媒体服务器,主要精力聚焦在 rtsp/rtmp 等协议,对 hls 的优化并不够重视,hls 之前在 zlmediakit 里面实现方式跟 http 文件服务器实现方式基本一致,都是通过直接读取文件的方式提供下载。所以当 hls 播放数比较高时,每个用户播放都需要重新从磁盘读取一遍文件,这时文件 io 承压,由于磁盘慢速度的特性,不能承载太高的并发数。

                  有些朋友可能会问,如果用内存虚拟磁盘能不能提高性能?答案是能,但是由于内存拷贝带宽也存在上限,所以就算 hls 文件都放在内存目录,每次读取文件也会存在多次 memcopy,性能并不能有太大的飞跃。前面冬奥会直播事故那个案例,就是把 hls 文件放在内存目录,但是也就能承载 2000+并发而已。

                  歧途: sendfile

                  为了解决 hls 并发瓶颈这个问题,我首先思考到的是sendfile方案。我们知道,nginx作为 http 服务器的标杆,就支持 sendfile 这个特性。很早之前,我就听说过sendfile多牛逼,它支持直接把文件发送到socket fd;而不用通过用户态和内核态的内存互相拷贝,可以大幅提高文件发送的性能。

                  我们查看 sendfile 的资料,有如下介绍:

                  图片.png
                  图片.png

                  于是,在事故反馈当日,2022 年春节期间的某天深夜,我在严寒之下光着膀子在 zlmediakit 中把 sendfile 特性实现了一遍: 图片.png

                  实现的代码如下:

                  //HttpFileBody.cpp
                  +import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as s,e as p}from"./app-oTlYPy8h.js";const t={},e=p(`

                  事情的起因

                  北京冬奥会前夕,zlmediakit 的一位用户完成了 iptv 系统的迁移; 由于 zlmediakit 对 hls 的支持比较完善,支持包括鉴权、统计、溯源等独家特性,所以他把之前的老系统都迁移到 zlmediakit 上了。

                  但是很不幸,在冬奥会开幕式当天,zlmediakit 并没有承受起考验,当 hls 并发数达到 3000 左右时,zlmediakit 线程负载接近 100%,延时非常高,整个服务器基本不可用:

                  图片.png
                  图片.png

                  思考

                  zlmediakit 定位是一个通用的流媒体服务器,主要精力聚焦在 rtsp/rtmp 等协议,对 hls 的优化并不够重视,hls 之前在 zlmediakit 里面实现方式跟 http 文件服务器实现方式基本一致,都是通过直接读取文件的方式提供下载。所以当 hls 播放数比较高时,每个用户播放都需要重新从磁盘读取一遍文件,这时文件 io 承压,由于磁盘慢速度的特性,不能承载太高的并发数。

                  有些朋友可能会问,如果用内存虚拟磁盘能不能提高性能?答案是能,但是由于内存拷贝带宽也存在上限,所以就算 hls 文件都放在内存目录,每次读取文件也会存在多次 memcopy,性能并不能有太大的飞跃。前面冬奥会直播事故那个案例,就是把 hls 文件放在内存目录,但是也就能承载 2000+并发而已。

                  歧途: sendfile

                  为了解决 hls 并发瓶颈这个问题,我首先思考到的是sendfile方案。我们知道,nginx作为 http 服务器的标杆,就支持 sendfile 这个特性。很早之前,我就听说过sendfile多牛逼,它支持直接把文件发送到socket fd;而不用通过用户态和内核态的内存互相拷贝,可以大幅提高文件发送的性能。

                  我们查看 sendfile 的资料,有如下介绍:

                  图片.png
                  图片.png

                  于是,在事故反馈当日,2022 年春节期间的某天深夜,我在严寒之下光着膀子在 zlmediakit 中把 sendfile 特性实现了一遍: 图片.png

                  实现的代码如下:

                  //HttpFileBody.cpp
                   int HttpFileBody::sendFile(int fd) {
                   #if  defined(__linux__) || defined(__linux)
                       off_t off = _file_offset;
                  diff --git a/assets/how_to_create_a_live_steam.html-ekbfwpTl.js b/assets/how_to_create_a_live_steam.html-LWbU8h87.js
                  similarity index 86%
                  rename from assets/how_to_create_a_live_steam.html-ekbfwpTl.js
                  rename to assets/how_to_create_a_live_steam.html-LWbU8h87.js
                  index fe874a8..83b0b60 100644
                  --- a/assets/how_to_create_a_live_steam.html-ekbfwpTl.js
                  +++ b/assets/how_to_create_a_live_steam.html-LWbU8h87.js
                  @@ -1 +1 @@
                  -import{_ as t}from"./how_to_create_a_live_stream-3lt6j2fI.js";import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as _,a as e}from"./app-BrxqtzGY.js";const r={},c=e("figure",null,[e("img",{src:t,alt:"How to create a live steam",tabindex:"0",loading:"lazy"}),e("figcaption",null,"How to create a live steam")],-1),s=[c];function i(l,n){return a(),_("div",null,s)}const p=o(r,[["render",i],["__file","how_to_create_a_live_steam.html.vue"]]);export{p as default};
                  +import{_ as t}from"./how_to_create_a_live_stream-3lt6j2fI.js";import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as _,a as e}from"./app-oTlYPy8h.js";const r={},c=e("figure",null,[e("img",{src:t,alt:"How to create a live steam",tabindex:"0",loading:"lazy"}),e("figcaption",null,"How to create a live steam")],-1),s=[c];function i(l,n){return a(),_("div",null,s)}const p=o(r,[["render",i],["__file","how_to_create_a_live_steam.html.vue"]]);export{p as default};
                  diff --git a/assets/how_to_create_a_live_steam.html-xouuZa47.js b/assets/how_to_create_a_live_steam.html-Q-m7tYG5.js
                  similarity index 86%
                  rename from assets/how_to_create_a_live_steam.html-xouuZa47.js
                  rename to assets/how_to_create_a_live_steam.html-Q-m7tYG5.js
                  index fe874a8..83b0b60 100644
                  --- a/assets/how_to_create_a_live_steam.html-xouuZa47.js
                  +++ b/assets/how_to_create_a_live_steam.html-Q-m7tYG5.js
                  @@ -1 +1 @@
                  -import{_ as t}from"./how_to_create_a_live_stream-3lt6j2fI.js";import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as _,a as e}from"./app-BrxqtzGY.js";const r={},c=e("figure",null,[e("img",{src:t,alt:"How to create a live steam",tabindex:"0",loading:"lazy"}),e("figcaption",null,"How to create a live steam")],-1),s=[c];function i(l,n){return a(),_("div",null,s)}const p=o(r,[["render",i],["__file","how_to_create_a_live_steam.html.vue"]]);export{p as default};
                  +import{_ as t}from"./how_to_create_a_live_stream-3lt6j2fI.js";import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as _,a as e}from"./app-oTlYPy8h.js";const r={},c=e("figure",null,[e("img",{src:t,alt:"How to create a live steam",tabindex:"0",loading:"lazy"}),e("figcaption",null,"How to create a live steam")],-1),s=[c];function i(l,n){return a(),_("div",null,s)}const p=o(r,[["render",i],["__file","how_to_create_a_live_steam.html.vue"]]);export{p as default};
                  diff --git a/assets/how_to_enable_https_related_functions.html-VEGoh4jE.js b/assets/how_to_enable_https_related_functions.html-Dxu_FBYc.js
                  similarity index 99%
                  rename from assets/how_to_enable_https_related_functions.html-VEGoh4jE.js
                  rename to assets/how_to_enable_https_related_functions.html-Dxu_FBYc.js
                  index 702ece1..7459456 100644
                  --- a/assets/how_to_enable_https_related_functions.html-VEGoh4jE.js
                  +++ b/assets/how_to_enable_https_related_functions.html-Dxu_FBYc.js
                  @@ -1,4 +1,4 @@
                  -import{_ as t,a as s,b as o,c as l,d as r,e as d,f as c,g as u,h as p,i as m}from"./how_to_enable_https_related_functions_zh_10-dp8gREln.js";import{_ as f}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as h,o as g,c as b,a as e,d as i,b as v,w as _,e as a}from"./app-BrxqtzGY.js";const k={},y=a(`

                  I. Enable OpenSSL Feature during Compilation

                  The HTTPS feature of zlmediakit (including rtmps/rtsps/webrtc/wss) relies on the OpenSSL library. Before compiling zlmediakit, you should first install the OpenSSL library in the default system environment. On Ubuntu, you can install it using the following command:

                  sudo apt-get install libssl-dev
                  +import{_ as t,a as s,b as o,c as l,d as r,e as d,f as c,g as u,h as p,i as m}from"./how_to_enable_https_related_functions_zh_10-dp8gREln.js";import{_ as f}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as h,o as g,c as b,a as e,d as i,b as v,w as _,e as a}from"./app-oTlYPy8h.js";const k={},y=a(`

                  I. Enable OpenSSL Feature during Compilation

                  The HTTPS feature of zlmediakit (including rtmps/rtsps/webrtc/wss) relies on the OpenSSL library. Before compiling zlmediakit, you should first install the OpenSSL library in the default system environment. On Ubuntu, you can install it using the following command:

                  sudo apt-get install libssl-dev
                   

                  If the default version of OpenSSL on your system is too old, you can choose to compile and install OpenSSL to a custom path. In this case, when compiling zlmediakit, you can specify the custom installation path of OpenSSL using the following command:

                  cd ZLMediaKit
                   mkdir build
                   cd build
                  diff --git a/assets/how_to_enable_https_related_functions.html-mTX-D-oH.js b/assets/how_to_enable_https_related_functions.html-pBy5oO-R.js
                  similarity index 99%
                  rename from assets/how_to_enable_https_related_functions.html-mTX-D-oH.js
                  rename to assets/how_to_enable_https_related_functions.html-pBy5oO-R.js
                  index a39a85b..d1a53ac 100644
                  --- a/assets/how_to_enable_https_related_functions.html-mTX-D-oH.js
                  +++ b/assets/how_to_enable_https_related_functions.html-pBy5oO-R.js
                  @@ -1,4 +1,4 @@
                  -import{_ as e,a as l,b as t,c as d,d as o,e as c,f as r,g as p,h as u,i as m}from"./how_to_enable_https_related_functions_zh_10-dp8gREln.js";import{_ as g}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as b,o as h,c as f,a,d as n,b as v,w as _,e as i}from"./app-BrxqtzGY.js";const k={},x=i(`

                  一、编译时开启 openssl 特性

                  zlmediakit 的 https(另外还包括 rtmps/rtsps/webrtc/wss)功能依赖 openssl 库,在编译 zlmediakit 时,应该先在系统默认环境安装 openssl 库,ubuntu 下通过以下命令安装:

                  sudo apt-get install libssl-dev
                  +import{_ as e,a as l,b as t,c as d,d as o,e as c,f as r,g as p,h as u,i as m}from"./how_to_enable_https_related_functions_zh_10-dp8gREln.js";import{_ as g}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as b,o as h,c as f,a,d as n,b as v,w as _,e as i}from"./app-oTlYPy8h.js";const k={},x=i(`

                  一、编译时开启 openssl 特性

                  zlmediakit 的 https(另外还包括 rtmps/rtsps/webrtc/wss)功能依赖 openssl 库,在编译 zlmediakit 时,应该先在系统默认环境安装 openssl 库,ubuntu 下通过以下命令安装:

                  sudo apt-get install libssl-dev
                   

                  如果您的系统默认 openssl 版本太老,可以选择自行编译安装 openssl 到自定义路径;此时,在编译 zlmediakit 时可以通过以下命令指定 openssl 自定义安装路径:

                  cd ZLMediaKit
                   mkdir build
                   cd build
                  diff --git a/assets/how_to_test_delay.html-xmNWiPYK.js b/assets/how_to_test_delay.html-GLErIksL.js
                  similarity index 99%
                  rename from assets/how_to_test_delay.html-xmNWiPYK.js
                  rename to assets/how_to_test_delay.html-GLErIksL.js
                  index 789ac69..e809faf 100644
                  --- a/assets/how_to_test_delay.html-xmNWiPYK.js
                  +++ b/assets/how_to_test_delay.html-GLErIksL.js
                  @@ -1,2 +1,2 @@
                  -import{_ as l}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as s,o as p,c as d,a as t,d as e,b as a,w as o,e as i}from"./app-BrxqtzGY.js";const c={},h=i('

                  引言

                  有些小伙伴们经常在群里面问我,为什么用 ZLMediaKit 拉流代理、推流转发的流播放延时好几秒,长的时候 10 多秒?为什么 HLS 延时更高,动辄延时半分钟?本文的目的在于澄清大家对延时的误解。

                  什么是延时

                  很多小伙伴们并不能明白什么叫延时,认为随便一个播放器播放出来的画面跟原始流画面时间差就是延时,其实这是对延时最大的误解。 延时不是表象,很多人在测试延时时很不专业,对延时测试的专业性认识不足,在此我特别提醒,不是随随便便的播放器都有资格做延时测试的!

                  总而言之,一般整个延时有以下几部分累加组成:

                  • 采集延时

                    在采集摄像头或显卡画面时,由于 fps 的限制和 cpu 性能、内存拷贝速度等客观限制,采集画面成 YUV/RGB 等数据时会有一定的延时,一般延时为毫秒级别。由于一般编码器对输入数据格式存在限制,譬如要求统一输入 YUV420P,这样在做 RGB->YUV420P 转换时,也会有转换计算延时(这个可以通过 libyuv 库来降低)。总而言之,采集延时大概为毫秒级别,如果 fps 为 30,那么一般采集延时会有 30 毫秒以上的延时,在内存拷贝和颜色转换时,又可能增加若干毫秒的延时。

                  • 编码延时

                    在把原始画面输入到编码器时,并不会立即输出编码后的数据,特别是在开启 B 帧时,由于需要参考后面的 P 帧,那么延时会更大,所以延时敏感的情况下一般不开启 B 帧,这种情况下编码延时应该是毫秒级别,不是很大。

                  • 网络上行传输延时

                    编码后的数据,要经过一定的协议打包才能写入 socket,然后传输给推流服务器或拉流代理服务器,协议打包会有一定的内存拷贝和计算量,那么会增加延时,不过这个延时很小,基本忽略不计。数据在上传到服务器时,这个延时可大可小,取决于网络质量。

                  • 服务器转协议延时

                    服务器在收到数据后,要读 socket 缓存、协议解析、解复用、重新打包等操作,不过总体而言,这个延时比较小,基本没什么影响。有时,服务器为了提高性能,会采取合并写的机制,也就是收到一定量的数据后才会一并转发,这个延时一般为几百毫秒,ZLMediaKit 默认 300 毫秒左右,不过 ZLMediaKit 默认关闭合并写,也就是这个延时也很小。

                  • 网络下行延时

                    流媒体在把视频数据转发给播放器时,会存在网络发送,这个延时大小取决于网络质量,ZLMediaKit 在关闭低延时模式时,还会增加 MSG_MORE 和关闭 TCP_NODELAY 导致的延时,不过 ZLMediaKit 默认开启低延时模式。

                  • 播放器延时

                    播放器延时主要有网络接收延时、协议解析解复用延时、解码延时、缓存延时、渲染延时组成,这些延时中缓存延时最大,因为一般的播放器为了保证在网络抖动情况下视频播放的流畅性,会以增加延时为代价,增加播放缓存,这样在网络变差时,不至于播放缓冲卡顿。而且为了音视频同步,也必须确保一定的缓存量。这种延时一般都是秒级别,一般 5 秒左右。

                  • 播放器 GOP 缓存延时

                    流媒体服务器为了能让播放器立即出画面,往往会缓存最近的一个 I 帧,这个 I 帧往后的所有音视频数据被称作为 GOP 缓存。如果不缓存 GOP,那么播放器要等下一个 I 帧才能解码成功或不花屏,显然为了提高播放体验,这个 GOP 缓存是不能去掉的。而一般 GOP 短则 1~3 秒,长则 10 几秒,这个跟采集端编码器设置有关,服务器改变不了。但是由于一般的播放器收到缓存后,并不会丢弃过多的画面来确保低延时。况且播放器还希望有一定的缓存来确保播放的流畅性,所以这个 GOP 缓存将会增大播放器的延时。

                  • 综合延时

                    以上所有的延时累加,就是你观看到的直观延时,那么你看到的延时很高,能怪是服务器的问题吗?在理想的网络状况下,你观看到的直观延时,其实约等于播放器的播放缓存延时,这个锅得由播放器来背。

                  怎么测试延时

                  用 vlc 等通用播放器测试延时是很不专业的,这些播放器延时最少是秒级别的,为了播放流畅度和音视频同步,这些播放器是不可能给你真实的延时数据。

                  ',8),_={href:"https://github.com/ZLMediaKit/ZLMediaKit/blob/master/player/test_player.cpp",target:"_blank",rel:"noopener noreferrer"},f=i(`

                  什么? 你告诉我你不会编译 ZLMediaKit? 那好,退而求其次,我推荐你使用 webrtc 播放来测试 zlm 延时;也可以用 ffplay 测试:

                  ffplay -i rtmp://xxxxxxx -fflags nobuffer
                  +import{_ as l}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as s,o as p,c as d,a as t,d as e,b as a,w as o,e as i}from"./app-oTlYPy8h.js";const c={},h=i('

                  引言

                  有些小伙伴们经常在群里面问我,为什么用 ZLMediaKit 拉流代理、推流转发的流播放延时好几秒,长的时候 10 多秒?为什么 HLS 延时更高,动辄延时半分钟?本文的目的在于澄清大家对延时的误解。

                  什么是延时

                  很多小伙伴们并不能明白什么叫延时,认为随便一个播放器播放出来的画面跟原始流画面时间差就是延时,其实这是对延时最大的误解。 延时不是表象,很多人在测试延时时很不专业,对延时测试的专业性认识不足,在此我特别提醒,不是随随便便的播放器都有资格做延时测试的!

                  总而言之,一般整个延时有以下几部分累加组成:

                  • 采集延时

                    在采集摄像头或显卡画面时,由于 fps 的限制和 cpu 性能、内存拷贝速度等客观限制,采集画面成 YUV/RGB 等数据时会有一定的延时,一般延时为毫秒级别。由于一般编码器对输入数据格式存在限制,譬如要求统一输入 YUV420P,这样在做 RGB->YUV420P 转换时,也会有转换计算延时(这个可以通过 libyuv 库来降低)。总而言之,采集延时大概为毫秒级别,如果 fps 为 30,那么一般采集延时会有 30 毫秒以上的延时,在内存拷贝和颜色转换时,又可能增加若干毫秒的延时。

                  • 编码延时

                    在把原始画面输入到编码器时,并不会立即输出编码后的数据,特别是在开启 B 帧时,由于需要参考后面的 P 帧,那么延时会更大,所以延时敏感的情况下一般不开启 B 帧,这种情况下编码延时应该是毫秒级别,不是很大。

                  • 网络上行传输延时

                    编码后的数据,要经过一定的协议打包才能写入 socket,然后传输给推流服务器或拉流代理服务器,协议打包会有一定的内存拷贝和计算量,那么会增加延时,不过这个延时很小,基本忽略不计。数据在上传到服务器时,这个延时可大可小,取决于网络质量。

                  • 服务器转协议延时

                    服务器在收到数据后,要读 socket 缓存、协议解析、解复用、重新打包等操作,不过总体而言,这个延时比较小,基本没什么影响。有时,服务器为了提高性能,会采取合并写的机制,也就是收到一定量的数据后才会一并转发,这个延时一般为几百毫秒,ZLMediaKit 默认 300 毫秒左右,不过 ZLMediaKit 默认关闭合并写,也就是这个延时也很小。

                  • 网络下行延时

                    流媒体在把视频数据转发给播放器时,会存在网络发送,这个延时大小取决于网络质量,ZLMediaKit 在关闭低延时模式时,还会增加 MSG_MORE 和关闭 TCP_NODELAY 导致的延时,不过 ZLMediaKit 默认开启低延时模式。

                  • 播放器延时

                    播放器延时主要有网络接收延时、协议解析解复用延时、解码延时、缓存延时、渲染延时组成,这些延时中缓存延时最大,因为一般的播放器为了保证在网络抖动情况下视频播放的流畅性,会以增加延时为代价,增加播放缓存,这样在网络变差时,不至于播放缓冲卡顿。而且为了音视频同步,也必须确保一定的缓存量。这种延时一般都是秒级别,一般 5 秒左右。

                  • 播放器 GOP 缓存延时

                    流媒体服务器为了能让播放器立即出画面,往往会缓存最近的一个 I 帧,这个 I 帧往后的所有音视频数据被称作为 GOP 缓存。如果不缓存 GOP,那么播放器要等下一个 I 帧才能解码成功或不花屏,显然为了提高播放体验,这个 GOP 缓存是不能去掉的。而一般 GOP 短则 1~3 秒,长则 10 几秒,这个跟采集端编码器设置有关,服务器改变不了。但是由于一般的播放器收到缓存后,并不会丢弃过多的画面来确保低延时。况且播放器还希望有一定的缓存来确保播放的流畅性,所以这个 GOP 缓存将会增大播放器的延时。

                  • 综合延时

                    以上所有的延时累加,就是你观看到的直观延时,那么你看到的延时很高,能怪是服务器的问题吗?在理想的网络状况下,你观看到的直观延时,其实约等于播放器的播放缓存延时,这个锅得由播放器来背。

                  怎么测试延时

                  用 vlc 等通用播放器测试延时是很不专业的,这些播放器延时最少是秒级别的,为了播放流畅度和音视频同步,这些播放器是不可能给你真实的延时数据。

                  ',8),_={href:"https://github.com/ZLMediaKit/ZLMediaKit/blob/master/player/test_player.cpp",target:"_blank",rel:"noopener noreferrer"},f=i(`

                  什么? 你告诉我你不会编译 ZLMediaKit? 那好,退而求其次,我推荐你使用 webrtc 播放来测试 zlm 延时;也可以用 ffplay 测试:

                  ffplay -i rtmp://xxxxxxx -fflags nobuffer
                   
                  `,2),u={href:"http://ffmpeg.org/download.html",target:"_blank",rel:"noopener noreferrer"},g=t("h2",{id:"关于延时的更多信息",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#关于延时的更多信息","aria-hidden":"true"},"#"),e(" 关于延时的更多信息")],-1);function m(b,x){const r=s("ExternalLinkIcon"),n=s("RouterLink");return p(),d("div",null,[h,t("p",null,[e("在此,我强烈推荐大家自己写个无缓存的播放器测试延时,但是这显然超过了大部人的能力,所以 ZLMediaKit 提供了一个简单的播放器测试延时: "),t("a",_,[e("test_player"),a(r)])]),f,t("p",null,[e("如果你不知道 ffplay 怎么安装,你可以从"),t("a",u,[e("这里"),a(r)]),e("下载编译好的.")]),g,t("p",null,[a(n,{to:"/zh/reference/documents/the_nature_of_live_broadcast_delay.html"},{default:o(()=>[e("直播延时的本质")]),_:1})]),t("p",null,[a(n,{to:"/zh/reference/test/delay_test.html"},{default:o(()=>[e("延时相关测试")]),_:1})])])}const k=l(c,[["render",m],["__file","how_to_test_delay.html.vue"]]);export{k as default}; diff --git a/assets/how_to_test_delay.html-qIkqT7X0.js b/assets/how_to_test_delay.html-P7CoGGgx.js similarity index 99% rename from assets/how_to_test_delay.html-qIkqT7X0.js rename to assets/how_to_test_delay.html-P7CoGGgx.js index 3dc245e..828fdb1 100644 --- a/assets/how_to_test_delay.html-qIkqT7X0.js +++ b/assets/how_to_test_delay.html-P7CoGGgx.js @@ -1,2 +1,2 @@ -import{_ as l}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as d,c as h,a,d as e,b as t,w as r,e as s}from"./app-BrxqtzGY.js";const c={},y=s('

                  Introduction

                  Some users often ask me in the group why there is a several seconds delay when using ZLMediaKit for stream playback or stream forwarding. Sometimes, the delay can be as long as more than 10 seconds or even half a minute for HLS. The purpose of this article is to clarify the misunderstanding about delay.

                  What is Delay

                  Many users do not fully understand what delay means. They think that the time difference between the displayed frames of any player and the original stream frames is the delay, but this is actually the biggest misconception about delay. Delay is not superficial. Many people are not professional when testing delay and have insufficient understanding of the professionalism of delay testing. I would like to remind everyone that not every player is qualified to perform delay testing!

                  In summary, the overall delay consists of the following components:

                  • Capture Delay

                    When capturing camera or graphics card frames, there is a certain delay in capturing the frames as YUV/RGB data due to limitations such as fps, CPU performance, and memory copying speed. Generally, the delay is in the millisecond range. Since general encoders have restrictions on input data formats, such as requiring consistent input of YUV420P, there will also be a delay in the conversion calculation when converting RGB to YUV420P (this can be reduced using the libyuv library). In general, the capture delay is about milliseconds. If the fps is 30, the capture delay will generally be more than 30 milliseconds, and there may be additional milliseconds of delay during memory copying and color conversion.

                  • Encoding Delay

                    When inputting the original frames into the encoder, the encoded data is not immediately output, especially when B-frames are enabled. Since B-frames require referencing the following P-frames, the delay will be greater. Therefore, in delay-sensitive situations, B-frames are generally not enabled, and in such cases, the encoding delay should be in the millisecond range and not very high.

                  • Upstream Network Transmission Delay

                    After the data is encoded, it needs to be packed into a certain protocol before being written to the socket and transmitted to the streaming server or stream proxy server. Protocol packing involves a certain amount of memory copying and computation, which can increase the delay. However, this delay is very small and can be basically ignored. When uploading data to the server, this delay can be large or small, depending on the network quality.

                  • Server Protocol Conversion Delay

                    After the server receives the data, it needs to perform operations such as reading socket buffer, protocol parsing, demultiplexing, and repacking. However, overall, this delay is relatively small and has little impact. Sometimes, to improve performance, the server may use a mechanism of batching writes, which means that it will forward the data only after receiving a certain amount of data. This delay is generally a few hundred milliseconds, with ZLMediaKit defaulting to around 300 milliseconds. However, ZLMediaKit has this batching write feature disabled by default, so this delay is also very small.

                  • Downstream Network Delay

                    When streaming media forwards video data to the player, there will be a delay caused by network transmission, the size of which depends on the network quality. When low-latency mode is disabled in ZLMediaKit, there will also be additional delay due to the use of MSG_MORE and the disabling of TCP_NODELAY, but low-latency mode is enabled by default in ZLMediaKit.

                  • Player Delay

                    Player delay consists of network reception delay, protocol parsing and demultiplexing delay, decoding delay, cache delay, and rendering delay. Among these delays, the cache delay is the largest. In order to ensure smooth video playback in case of network jitter, general players increase the delay by adding playback buffers. This way, when the network deteriorates, the playback buffering can prevent video stuttering. Moreover, in order to achieve audio-video synchronization, a certain amount of buffering must be ensured. This type of delay is generally in the seconds range, typically around 5 seconds.

                  • Player GOP Cache Delay

                    To display the video immediately, streaming media servers often cache the most recent I-frame, and all subsequent audio-video data after this I-frame is referred to as the GOP (Group of Pictures) cache. If the GOP is not cached, the player has to wait for the next I-frame to successfully decode the video or avoid screen flickering. Obviously, to improve the playback experience, this GOP cache cannot be eliminated. Generally, the GOP duration can be as short as 1-3 seconds or as long as tens of seconds, depending on the settings of the capture-side encoder, which the server cannot change. However, since general players do not discard too many frames after receiving the cache to ensure low latency, and players also want to have a certain amount of buffering to ensure smooth playback, this GOP cache will increase the player's delay.

                  • Overall Delay

                    The sum of all the aforementioned delays is the perceived delay you observe. Sowhen you see a delay in stream playback or stream forwarding using ZLMediaKit, it is a combination of all these factors. It's important to understand that some delays are inherent to the streaming process and cannot be completely eliminated. However, there are ways to optimize the delay and minimize its impact.

                  How to Test Delay

                  Testing delay with general players like VLC is unprofessional. The delay in these players is at least in the order of seconds. In order to achieve smooth playback and audio/video synchronization, these players cannot provide you with real-time delay data.

                  ',8),p={href:"https://github.com/ZLMediaKit/ZLMediaKit/blob/master/player/test_player.cpp",target:"_blank",rel:"noopener noreferrer"},m=s(`

                  What? You're telling me you don't know how to compile ZLMediaKit? Well, in that case, I suggest you use WebRTC player to test the delay. You can also use ffplay:

                  ffplay -i rtmp://xxxxxxx -fflags nobuffer
                  +import{_ as l}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as d,c as h,a,d as e,b as t,w as r,e as s}from"./app-oTlYPy8h.js";const c={},y=s('

                  Introduction

                  Some users often ask me in the group why there is a several seconds delay when using ZLMediaKit for stream playback or stream forwarding. Sometimes, the delay can be as long as more than 10 seconds or even half a minute for HLS. The purpose of this article is to clarify the misunderstanding about delay.

                  What is Delay

                  Many users do not fully understand what delay means. They think that the time difference between the displayed frames of any player and the original stream frames is the delay, but this is actually the biggest misconception about delay. Delay is not superficial. Many people are not professional when testing delay and have insufficient understanding of the professionalism of delay testing. I would like to remind everyone that not every player is qualified to perform delay testing!

                  In summary, the overall delay consists of the following components:

                  • Capture Delay

                    When capturing camera or graphics card frames, there is a certain delay in capturing the frames as YUV/RGB data due to limitations such as fps, CPU performance, and memory copying speed. Generally, the delay is in the millisecond range. Since general encoders have restrictions on input data formats, such as requiring consistent input of YUV420P, there will also be a delay in the conversion calculation when converting RGB to YUV420P (this can be reduced using the libyuv library). In general, the capture delay is about milliseconds. If the fps is 30, the capture delay will generally be more than 30 milliseconds, and there may be additional milliseconds of delay during memory copying and color conversion.

                  • Encoding Delay

                    When inputting the original frames into the encoder, the encoded data is not immediately output, especially when B-frames are enabled. Since B-frames require referencing the following P-frames, the delay will be greater. Therefore, in delay-sensitive situations, B-frames are generally not enabled, and in such cases, the encoding delay should be in the millisecond range and not very high.

                  • Upstream Network Transmission Delay

                    After the data is encoded, it needs to be packed into a certain protocol before being written to the socket and transmitted to the streaming server or stream proxy server. Protocol packing involves a certain amount of memory copying and computation, which can increase the delay. However, this delay is very small and can be basically ignored. When uploading data to the server, this delay can be large or small, depending on the network quality.

                  • Server Protocol Conversion Delay

                    After the server receives the data, it needs to perform operations such as reading socket buffer, protocol parsing, demultiplexing, and repacking. However, overall, this delay is relatively small and has little impact. Sometimes, to improve performance, the server may use a mechanism of batching writes, which means that it will forward the data only after receiving a certain amount of data. This delay is generally a few hundred milliseconds, with ZLMediaKit defaulting to around 300 milliseconds. However, ZLMediaKit has this batching write feature disabled by default, so this delay is also very small.

                  • Downstream Network Delay

                    When streaming media forwards video data to the player, there will be a delay caused by network transmission, the size of which depends on the network quality. When low-latency mode is disabled in ZLMediaKit, there will also be additional delay due to the use of MSG_MORE and the disabling of TCP_NODELAY, but low-latency mode is enabled by default in ZLMediaKit.

                  • Player Delay

                    Player delay consists of network reception delay, protocol parsing and demultiplexing delay, decoding delay, cache delay, and rendering delay. Among these delays, the cache delay is the largest. In order to ensure smooth video playback in case of network jitter, general players increase the delay by adding playback buffers. This way, when the network deteriorates, the playback buffering can prevent video stuttering. Moreover, in order to achieve audio-video synchronization, a certain amount of buffering must be ensured. This type of delay is generally in the seconds range, typically around 5 seconds.

                  • Player GOP Cache Delay

                    To display the video immediately, streaming media servers often cache the most recent I-frame, and all subsequent audio-video data after this I-frame is referred to as the GOP (Group of Pictures) cache. If the GOP is not cached, the player has to wait for the next I-frame to successfully decode the video or avoid screen flickering. Obviously, to improve the playback experience, this GOP cache cannot be eliminated. Generally, the GOP duration can be as short as 1-3 seconds or as long as tens of seconds, depending on the settings of the capture-side encoder, which the server cannot change. However, since general players do not discard too many frames after receiving the cache to ensure low latency, and players also want to have a certain amount of buffering to ensure smooth playback, this GOP cache will increase the player's delay.

                  • Overall Delay

                    The sum of all the aforementioned delays is the perceived delay you observe. Sowhen you see a delay in stream playback or stream forwarding using ZLMediaKit, it is a combination of all these factors. It's important to understand that some delays are inherent to the streaming process and cannot be completely eliminated. However, there are ways to optimize the delay and minimize its impact.

                  How to Test Delay

                  Testing delay with general players like VLC is unprofessional. The delay in these players is at least in the order of seconds. In order to achieve smooth playback and audio/video synchronization, these players cannot provide you with real-time delay data.

                  ',8),p={href:"https://github.com/ZLMediaKit/ZLMediaKit/blob/master/player/test_player.cpp",target:"_blank",rel:"noopener noreferrer"},m=s(`

                  What? You're telling me you don't know how to compile ZLMediaKit? Well, in that case, I suggest you use WebRTC player to test the delay. You can also use ffplay:

                  ffplay -i rtmp://xxxxxxx -fflags nobuffer
                   
                  `,2),u={href:"http://ffmpeg.org/download.html",target:"_blank",rel:"noopener noreferrer"},f=a("h2",{id:"more-information-about-delay",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#more-information-about-delay","aria-hidden":"true"},"#"),e(" More Information About Delay")],-1);function g(b,v){const o=i("ExternalLinkIcon"),n=i("RouterLink");return d(),h("div",null,[y,a("p",null,[e("Here, I strongly recommend that you write your own bufferless player to test the delay. However, this is obviously beyond the ability of most people. Therefore, ZLMediaKit provides a simple player for testing delay: "),a("a",p,[e("test_player"),t(o)])]),m,a("p",null,[e("If you don't know how to install ffplay, you can download a precompiled version from "),a("a",u,[e("here"),t(o)]),e(".")]),f,a("p",null,[t(n,{to:"/reference/documents/the_nature_of_live_broadcast_delay.html"},{default:r(()=>[e("The Essence of Live Broadcast Delay")]),_:1})]),a("p",null,[t(n,{to:"/reference/test/delay_test.html"},{default:r(()=>[e("Delay-related Testing")]),_:1})])])}const k=l(c,[["render",g],["__file","how_to_test_delay.html.vue"]]);export{k as default}; diff --git a/assets/how_to_use_device_id_as_stream_id.html-a05nZW8g.js b/assets/how_to_use_device_id_as_stream_id.html-r5nxplI0.js similarity index 96% rename from assets/how_to_use_device_id_as_stream_id.html-a05nZW8g.js rename to assets/how_to_use_device_id_as_stream_id.html-r5nxplI0.js index fd4b95f..3b06f87 100644 --- a/assets/how_to_use_device_id_as_stream_id.html-a05nZW8g.js +++ b/assets/how_to_use_device_id_as_stream_id.html-r5nxplI0.js @@ -1 +1 @@ -import{_ as i,a,b as e,c as t,d as o,e as c}from"./how_to_use_device_id_as_stream_id_6-sfQ1h9Fe.js";import{_ as s}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as g,c as r,e as _}from"./app-BrxqtzGY.js";const p={},d=_('

                  为了支持 RTP 流的识别(与摄像头 ID 产生关联), 必须通过 源地址ssrc本地端口号 来区分.

                  但是在 issue #338 里面有开发者反馈,有些设备不支持设置 ssrc,ssrc 一直为 0.

                  而源地址端口也会一直变,RTP 推流前 SIP 服务器也不知道摄像头推流端口(甚至 IP 都不知道) 那么区分流只通过源地址也不现实, 因为一个局域网内也可能多个设备, 如果 ZLMediaKit 在公网,那么这些流的 IP 是一致的,而端口是随机的,根本没法跟摄像头 ID 对应起来.

                  所以为了实现 RTP 推流参数的流 ID 与摄像头 ID 产生关联,就基本只剩下本地端口号这条路了,这就意味着一个端口只能接受一个流。

                  在不指定流 ID 时,ZLMediaKit 的行为跟之前完全一样,单端口支持多流,ssrc 作为 stream id。

                  如果指定了该端口绑定的流 ID,那么该端口只能接收一路流。

                  以下是关键代码:

                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  ',13),m=[d];function n(f,l){return g(),r("div",null,m)}const b=s(p,[["render",n],["__file","how_to_use_device_id_as_stream_id.html.vue"]]);export{b as default}; +import{_ as i,a,b as e,c as t,d as o,e as c}from"./how_to_use_device_id_as_stream_id_6-sfQ1h9Fe.js";import{_ as s}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as g,c as r,e as _}from"./app-oTlYPy8h.js";const p={},d=_('

                  为了支持 RTP 流的识别(与摄像头 ID 产生关联), 必须通过 源地址ssrc本地端口号 来区分.

                  但是在 issue #338 里面有开发者反馈,有些设备不支持设置 ssrc,ssrc 一直为 0.

                  而源地址端口也会一直变,RTP 推流前 SIP 服务器也不知道摄像头推流端口(甚至 IP 都不知道) 那么区分流只通过源地址也不现实, 因为一个局域网内也可能多个设备, 如果 ZLMediaKit 在公网,那么这些流的 IP 是一致的,而端口是随机的,根本没法跟摄像头 ID 对应起来.

                  所以为了实现 RTP 推流参数的流 ID 与摄像头 ID 产生关联,就基本只剩下本地端口号这条路了,这就意味着一个端口只能接受一个流。

                  在不指定流 ID 时,ZLMediaKit 的行为跟之前完全一样,单端口支持多流,ssrc 作为 stream id。

                  如果指定了该端口绑定的流 ID,那么该端口只能接收一路流。

                  以下是关键代码:

                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  ',13),m=[d];function n(f,l){return g(),r("div",null,m)}const b=s(p,[["render",n],["__file","how_to_use_device_id_as_stream_id.html.vue"]]);export{b as default}; diff --git a/assets/how_to_use_device_id_as_stream_id.html-yEpxw4_B.js b/assets/how_to_use_device_id_as_stream_id.html-yxD34jok.js similarity index 96% rename from assets/how_to_use_device_id_as_stream_id.html-yEpxw4_B.js rename to assets/how_to_use_device_id_as_stream_id.html-yxD34jok.js index fd4b95f..3b06f87 100644 --- a/assets/how_to_use_device_id_as_stream_id.html-yEpxw4_B.js +++ b/assets/how_to_use_device_id_as_stream_id.html-yxD34jok.js @@ -1 +1 @@ -import{_ as i,a,b as e,c as t,d as o,e as c}from"./how_to_use_device_id_as_stream_id_6-sfQ1h9Fe.js";import{_ as s}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as g,c as r,e as _}from"./app-BrxqtzGY.js";const p={},d=_('

                  为了支持 RTP 流的识别(与摄像头 ID 产生关联), 必须通过 源地址ssrc本地端口号 来区分.

                  但是在 issue #338 里面有开发者反馈,有些设备不支持设置 ssrc,ssrc 一直为 0.

                  而源地址端口也会一直变,RTP 推流前 SIP 服务器也不知道摄像头推流端口(甚至 IP 都不知道) 那么区分流只通过源地址也不现实, 因为一个局域网内也可能多个设备, 如果 ZLMediaKit 在公网,那么这些流的 IP 是一致的,而端口是随机的,根本没法跟摄像头 ID 对应起来.

                  所以为了实现 RTP 推流参数的流 ID 与摄像头 ID 产生关联,就基本只剩下本地端口号这条路了,这就意味着一个端口只能接受一个流。

                  在不指定流 ID 时,ZLMediaKit 的行为跟之前完全一样,单端口支持多流,ssrc 作为 stream id。

                  如果指定了该端口绑定的流 ID,那么该端口只能接收一路流。

                  以下是关键代码:

                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  ',13),m=[d];function n(f,l){return g(),r("div",null,m)}const b=s(p,[["render",n],["__file","how_to_use_device_id_as_stream_id.html.vue"]]);export{b as default}; +import{_ as i,a,b as e,c as t,d as o,e as c}from"./how_to_use_device_id_as_stream_id_6-sfQ1h9Fe.js";import{_ as s}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as g,c as r,e as _}from"./app-oTlYPy8h.js";const p={},d=_('

                  为了支持 RTP 流的识别(与摄像头 ID 产生关联), 必须通过 源地址ssrc本地端口号 来区分.

                  但是在 issue #338 里面有开发者反馈,有些设备不支持设置 ssrc,ssrc 一直为 0.

                  而源地址端口也会一直变,RTP 推流前 SIP 服务器也不知道摄像头推流端口(甚至 IP 都不知道) 那么区分流只通过源地址也不现实, 因为一个局域网内也可能多个设备, 如果 ZLMediaKit 在公网,那么这些流的 IP 是一致的,而端口是随机的,根本没法跟摄像头 ID 对应起来.

                  所以为了实现 RTP 推流参数的流 ID 与摄像头 ID 产生关联,就基本只剩下本地端口号这条路了,这就意味着一个端口只能接受一个流。

                  在不指定流 ID 时,ZLMediaKit 的行为跟之前完全一样,单端口支持多流,ssrc 作为 stream id。

                  如果指定了该端口绑定的流 ID,那么该端口只能接收一路流。

                  以下是关键代码:

                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  image
                  ',13),m=[d];function n(f,l){return g(),r("div",null,m)}const b=s(p,[["render",n],["__file","how_to_use_device_id_as_stream_id.html.vue"]]);export{b as default}; diff --git a/assets/index-67a42d7d-p9ZYh1Xw.js b/assets/index-67a42d7d-TJSwJJ1D.js similarity index 97% rename from assets/index-67a42d7d-p9ZYh1Xw.js rename to assets/index-67a42d7d-TJSwJJ1D.js index 292939d..d590fa9 100644 --- a/assets/index-67a42d7d-p9ZYh1Xw.js +++ b/assets/index-67a42d7d-TJSwJJ1D.js @@ -1 +1 @@ -import{b as G,i as m,m as O,G as j,l as A}from"./layout-1ugHHiNm.js";import{i as M,u as _,s as H,a as V,b as q,p as D,c as U,d as W,e as Y,f as z,g as L,h as C}from"./edges-80f1ebb6--gcvlmof.js";import{l as i,q as N,c as S,h as T}from"./mermaid.core-zy7cM8l9.js";import{c as K}from"./createText-aebacdfe-JILF3Vy1.js";var Q=4;function Z(e){return G(e,Q)}function x(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:I(e),edges:tt(e)};return m(e.graph())||(t.value=Z(e.graph())),t}function I(e){return O(e.nodes(),function(t){var n=e.node(t),r=e.parent(t),s={v:t};return m(n)||(s.value=n),m(r)||(s.parent=r),s})}function tt(e){return O(e.edges(),function(t){var n=e.edge(t),r={v:t.v,w:t.w};return m(t.name)||(r.name=t.name),m(n)||(r.value=n),r})}let f={},g={},J={};const et=()=>{g={},J={},f={}},X=(e,t)=>(i.trace("In isDecendant",t," ",e," = ",g[t].includes(e)),!!g[t].includes(e)),nt=(e,t)=>(i.info("Decendants of ",t," is ",g[t]),i.info("Edge is ",e),e.v===t||e.w===t?!1:g[t]?g[t].includes(e.v)||X(e.v,t)||X(e.w,t)||g[t].includes(e.w):(i.debug("Tilt, ",t,",not in decendants"),!1)),R=(e,t,n,r)=>{i.warn("Copying children of ",e,"root",r,"data",t.node(e),r);const s=t.children(e)||[];e!==r&&s.push(e),i.warn("Copying (nodes) clusterId",e,"nodes",s),s.forEach(c=>{if(t.children(c).length>0)R(c,t,n,r);else{const d=t.node(c);i.info("cp ",c," to ",r," with parent ",e),n.setNode(c,d),r!==t.parent(c)&&(i.warn("Setting parent",c,t.parent(c)),n.setParent(c,t.parent(c))),e!==r&&c!==e?(i.debug("Setting parent",c,e),n.setParent(c,e)):(i.info("In copy ",e,"root",r,"data",t.node(e),r),i.debug("Not Setting parent for node=",c,"cluster!==rootId",e!==r,"node!==clusterId",c!==e));const l=t.edges(c);i.debug("Copying Edges",l),l.forEach(u=>{i.info("Edge",u);const h=t.edge(u.v,u.w,u.name);i.info("Edge data",h,r);try{nt(u,r)?(i.info("Copying as ",u.v,u.w,h,u.name),n.setEdge(u.v,u.w,h,u.name),i.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):i.info("Skipping copy of edge ",u.v,"-->",u.w," rootId: ",r," clusterId:",e)}catch(w){i.error(w)}})}i.debug("Removing node",c),t.removeNode(c)})},P=(e,t)=>{const n=t.children(e);let r=[...n];for(const s of n)J[s]=e,r=[...r,...P(s,t)];return r},b=(e,t)=>{i.trace("Searching",e);const n=t.children(e);if(i.trace("Searching children of id ",e,n),n.length<1)return i.trace("This is a valid node",e),e;for(const r of n){const s=b(r,t);if(s)return i.trace("Found replacement for",e," => ",s),s}},E=e=>!f[e]||!f[e].externalConnections?e:f[e]?f[e].id:e,it=(e,t)=>{if(!e||t>10){i.debug("Opting out, no graph ");return}else i.debug("Opting in, graph ");e.nodes().forEach(function(n){e.children(n).length>0&&(i.warn("Cluster identified",n," Replacement id in edges: ",b(n,e)),g[n]=P(n,e),f[n]={id:b(n,e),clusterData:e.node(n)})}),e.nodes().forEach(function(n){const r=e.children(n),s=e.edges();r.length>0?(i.debug("Cluster identified",n,g),s.forEach(c=>{if(c.v!==n&&c.w!==n){const d=X(c.v,n),l=X(c.w,n);d^l&&(i.warn("Edge: ",c," leaves cluster ",n),i.warn("Decendants of XXX ",n,": ",g[n]),f[n].externalConnections=!0)}})):i.debug("Not a cluster ",n,g)}),e.edges().forEach(function(n){const r=e.edge(n);i.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(n)),i.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(e.edge(n)));let s=n.v,c=n.w;if(i.warn("Fix XXX",f,"ids:",n.v,n.w,"Translating: ",f[n.v]," --- ",f[n.w]),f[n.v]&&f[n.w]&&f[n.v]===f[n.w]){i.warn("Fixing and trixing link to self - removing XXX",n.v,n.w,n.name),i.warn("Fixing and trixing - removing XXX",n.v,n.w,n.name),s=E(n.v),c=E(n.w),e.removeEdge(n.v,n.w,n.name);const d=n.w+"---"+n.v;e.setNode(d,{domId:d,id:d,labelStyle:"",labelText:r.label,padding:0,shape:"labelRect",style:""});const l=structuredClone(r),u=structuredClone(r);l.label="",l.arrowTypeEnd="none",u.label="",l.fromCluster=n.v,u.toCluster=n.v,e.setEdge(s,d,l,n.name+"-cyclic-special"),e.setEdge(d,c,u,n.name+"-cyclic-special")}else(f[n.v]||f[n.w])&&(i.warn("Fixing and trixing - removing XXX",n.v,n.w,n.name),s=E(n.v),c=E(n.w),e.removeEdge(n.v,n.w,n.name),s!==n.v&&(r.fromCluster=n.v),c!==n.w&&(r.toCluster=n.w),i.warn("Fix Replacing with XXX",s,c,n.name),e.setEdge(s,c,r,n.name))}),i.warn("Adjusted Graph",x(e)),p(e,0),i.trace(f)},p=(e,t)=>{if(i.warn("extractor - ",t,x(e),e.children("D")),t>10){i.error("Bailing out");return}let n=e.nodes(),r=!1;for(const s of n){const c=e.children(s);r=r||c.length>0}if(!r){i.debug("Done, no node has children",e.nodes());return}i.debug("Nodes = ",n,t);for(const s of n)if(i.debug("Extracting node",s,f,f[s]&&!f[s].externalConnections,!e.parent(s),e.node(s),e.children("D")," Depth ",t),!f[s])i.debug("Not a cluster",s,t);else if(!f[s].externalConnections&&e.children(s)&&e.children(s).length>0){i.warn("Cluster without external connections, without a parent and with children",s,t);let d=e.graph().rankdir==="TB"?"LR":"TB";f[s]&&f[s].clusterData&&f[s].clusterData.dir&&(d=f[s].clusterData.dir,i.warn("Fixing dir",f[s].clusterData.dir,d));const l=new j({multigraph:!0,compound:!0}).setGraph({rankdir:d,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});i.warn("Old graph before copy",x(e)),R(s,e,l,s),e.setNode(s,{clusterNode:!0,id:s,clusterData:f[s].clusterData,labelText:f[s].labelText,graph:l}),i.warn("New graph after copy node: (",s,")",x(l)),i.debug("Old graph after copy",x(e))}else i.warn("Cluster ** ",s," **not meeting the criteria !externalConnections:",!f[s].externalConnections," no parent: ",!e.parent(s)," children ",e.children(s)&&e.children(s).length>0,e.children("D"),t),i.debug(f);n=e.nodes(),i.warn("New list of nodes",n);for(const s of n){const c=e.node(s);i.warn(" Now next level",s,c),c.clusterNode&&p(c.graph,t+1)}},F=(e,t)=>{if(t.length===0)return[];let n=Object.assign(t);return t.forEach(r=>{const s=e.children(r),c=F(e,s);n=[...n,...c]}),n},st=e=>F(e,e.children()),rt=(e,t)=>{i.info("Creating subgraph rect for ",t.id,t);const n=e.insert("g").attr("class","cluster"+(t.class?" "+t.class:"")).attr("id",t.id),r=n.insert("rect",":first-child"),s=N(S().flowchart.htmlLabels),c=n.insert("g").attr("class","cluster-label"),d=t.labelType==="markdown"?K(c,t.labelText,{style:t.labelStyle,useHtmlLabels:s}):c.node().appendChild(L(t.labelText,t.labelStyle,void 0,!0));let l=d.getBBox();if(N(S().flowchart.htmlLabels)){const a=d.children[0],o=T(d);l=a.getBoundingClientRect(),o.attr("width",l.width),o.attr("height",l.height)}const u=0*t.padding,h=u/2,w=t.width<=l.width+u?l.width+u:t.width;t.width<=l.width+u?t.diff=(l.width-t.width)/2-t.padding/2:t.diff=-t.padding/2,i.trace("Data ",t,JSON.stringify(t)),r.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-w/2).attr("y",t.y-t.height/2-h).attr("width",w).attr("height",t.height+u),s?c.attr("transform","translate("+(t.x-l.width/2)+", "+(t.y-t.height/2)+")"):c.attr("transform","translate("+t.x+", "+(t.y-t.height/2)+")");const v=r.node().getBBox();return t.width=v.width,t.height=v.height,t.intersect=function(a){return C(t,a)},n},at=(e,t)=>{const n=e.insert("g").attr("class","note-cluster").attr("id",t.id),r=n.insert("rect",":first-child"),s=0*t.padding,c=s/2;r.attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-t.width/2-c).attr("y",t.y-t.height/2-c).attr("width",t.width+s).attr("height",t.height+s).attr("fill","none");const d=r.node().getBBox();return t.width=d.width,t.height=d.height,t.intersect=function(l){return C(t,l)},n},ct=(e,t)=>{const n=e.insert("g").attr("class",t.classes).attr("id",t.id),r=n.insert("rect",":first-child"),s=n.insert("g").attr("class","cluster-label"),c=n.append("rect"),d=s.node().appendChild(L(t.labelText,t.labelStyle,void 0,!0));let l=d.getBBox();if(N(S().flowchart.htmlLabels)){const a=d.children[0],o=T(d);l=a.getBoundingClientRect(),o.attr("width",l.width),o.attr("height",l.height)}l=d.getBBox();const u=0*t.padding,h=u/2,w=t.width<=l.width+t.padding?l.width+t.padding:t.width;t.width<=l.width+t.padding?t.diff=(l.width+t.padding*0-t.width)/2:t.diff=-t.padding/2,r.attr("class","outer").attr("x",t.x-w/2-h).attr("y",t.y-t.height/2-h).attr("width",w+u).attr("height",t.height+u),c.attr("class","inner").attr("x",t.x-w/2-h).attr("y",t.y-t.height/2-h+l.height-1).attr("width",w+u).attr("height",t.height+u-l.height-3),s.attr("transform","translate("+(t.x-l.width/2)+", "+(t.y-t.height/2-t.padding/3+(N(S().flowchart.htmlLabels)?5:3))+")");const v=r.node().getBBox();return t.height=v.height,t.intersect=function(a){return C(t,a)},n},ot=(e,t)=>{const n=e.insert("g").attr("class",t.classes).attr("id",t.id),r=n.insert("rect",":first-child"),s=0*t.padding,c=s/2;r.attr("class","divider").attr("x",t.x-t.width/2-c).attr("y",t.y-t.height/2).attr("width",t.width+s).attr("height",t.height+s);const d=r.node().getBBox();return t.width=d.width,t.height=d.height,t.diff=-t.padding/2,t.intersect=function(l){return C(t,l)},n},lt={rect:rt,roundedWithTitle:ct,noteGroup:at,divider:ot};let k={};const ft=(e,t)=>{i.trace("Inserting cluster");const n=t.shape||"rect";k[t.id]=lt[n](e,t)},dt=()=>{k={}},$=async(e,t,n,r,s)=>{i.info("Graph in recursive render: XXX",x(t),s);const c=t.graph().rankdir;i.trace("Dir in recursive render - dir:",c);const d=e.insert("g").attr("class","root");t.nodes()?i.info("Recursive render XXX",t.nodes()):i.info("No nodes found for",t),t.edges().length>0&&i.trace("Recursive edges",t.edge(t.edges()[0]));const l=d.insert("g").attr("class","clusters"),u=d.insert("g").attr("class","edgePaths"),h=d.insert("g").attr("class","edgeLabels"),w=d.insert("g").attr("class","nodes");await Promise.all(t.nodes().map(async function(a){const o=t.node(a);if(s!==void 0){const y=JSON.parse(JSON.stringify(s.clusterData));i.info("Setting data for cluster XXX (",a,") ",y,s),t.setNode(s.id,y),t.parent(a)||(i.trace("Setting parent",a,s.id),t.setParent(a,s.id,y))}if(i.info("(Insert) Node XXX"+a+": "+JSON.stringify(t.node(a))),o&&o.clusterNode){i.info("Cluster identified",a,o.width,t.node(a));const y=await $(w,o.graph,n,r,t.node(a)),B=y.elem;_(o,B),o.diff=y.diff||0,i.info("Node bounds (abc123)",a,o,o.width,o.x,o.y),H(B,o),i.warn("Recursive render complete ",B,o)}else t.children(a).length>0?(i.info("Cluster - the non recursive path XXX",a,o.id,o,t),i.info(b(o.id,t)),f[o.id]={id:b(o.id,t),node:o}):(i.info("Node - the non recursive path",a,o.id,o),await V(w,t.node(a),c))})),t.edges().forEach(function(a){const o=t.edge(a.v,a.w,a.name);i.info("Edge "+a.v+" -> "+a.w+": "+JSON.stringify(a)),i.info("Edge "+a.v+" -> "+a.w+": ",a," ",JSON.stringify(t.edge(a))),i.info("Fix",f,"ids:",a.v,a.w,"Translateing: ",f[a.v],f[a.w]),q(h,o)}),t.edges().forEach(function(a){i.info("Edge "+a.v+" -> "+a.w+": "+JSON.stringify(a))}),i.info("#############################################"),i.info("### Layout ###"),i.info("#############################################"),i.info(t),A(t),i.info("Graph after layout:",x(t));let v=0;return st(t).forEach(function(a){const o=t.node(a);i.info("Position "+a+": "+JSON.stringify(t.node(a))),i.info("Position "+a+": ("+o.x,","+o.y,") width: ",o.width," height: ",o.height),o&&o.clusterNode?D(o):t.children(a).length>0?(ft(l,o),f[o.id].node=o):D(o)}),t.edges().forEach(function(a){const o=t.edge(a);i.info("Edge "+a.v+" -> "+a.w+": "+JSON.stringify(o),o);const y=U(u,a,o,f,n,t,r);W(o,y)}),t.nodes().forEach(function(a){const o=t.node(a);i.info(a,o.type,o.diff),o.type==="group"&&(v=o.diff)}),{elem:d,diff:v}},xt=async(e,t,n,r,s)=>{M(e,n,r,s),Y(),z(),dt(),et(),i.warn("Graph at first:",JSON.stringify(x(t))),it(t),i.warn("Graph after:",JSON.stringify(x(t))),await $(e,t,r,s)};export{xt as r}; +import{b as G,i as m,m as O,G as j,l as A}from"./layout-Vth69vlg.js";import{i as M,u as _,s as H,a as V,b as q,p as D,c as U,d as W,e as Y,f as z,g as L,h as C}from"./edges-80f1ebb6-kOLp6foW.js";import{l as i,q as N,c as S,h as T}from"./mermaid.core-QJnSHCal.js";import{c as K}from"./createText-aebacdfe-8FzA6VnR.js";var Q=4;function Z(e){return G(e,Q)}function x(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:I(e),edges:tt(e)};return m(e.graph())||(t.value=Z(e.graph())),t}function I(e){return O(e.nodes(),function(t){var n=e.node(t),r=e.parent(t),s={v:t};return m(n)||(s.value=n),m(r)||(s.parent=r),s})}function tt(e){return O(e.edges(),function(t){var n=e.edge(t),r={v:t.v,w:t.w};return m(t.name)||(r.name=t.name),m(n)||(r.value=n),r})}let f={},g={},J={};const et=()=>{g={},J={},f={}},X=(e,t)=>(i.trace("In isDecendant",t," ",e," = ",g[t].includes(e)),!!g[t].includes(e)),nt=(e,t)=>(i.info("Decendants of ",t," is ",g[t]),i.info("Edge is ",e),e.v===t||e.w===t?!1:g[t]?g[t].includes(e.v)||X(e.v,t)||X(e.w,t)||g[t].includes(e.w):(i.debug("Tilt, ",t,",not in decendants"),!1)),R=(e,t,n,r)=>{i.warn("Copying children of ",e,"root",r,"data",t.node(e),r);const s=t.children(e)||[];e!==r&&s.push(e),i.warn("Copying (nodes) clusterId",e,"nodes",s),s.forEach(c=>{if(t.children(c).length>0)R(c,t,n,r);else{const d=t.node(c);i.info("cp ",c," to ",r," with parent ",e),n.setNode(c,d),r!==t.parent(c)&&(i.warn("Setting parent",c,t.parent(c)),n.setParent(c,t.parent(c))),e!==r&&c!==e?(i.debug("Setting parent",c,e),n.setParent(c,e)):(i.info("In copy ",e,"root",r,"data",t.node(e),r),i.debug("Not Setting parent for node=",c,"cluster!==rootId",e!==r,"node!==clusterId",c!==e));const l=t.edges(c);i.debug("Copying Edges",l),l.forEach(u=>{i.info("Edge",u);const h=t.edge(u.v,u.w,u.name);i.info("Edge data",h,r);try{nt(u,r)?(i.info("Copying as ",u.v,u.w,h,u.name),n.setEdge(u.v,u.w,h,u.name),i.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):i.info("Skipping copy of edge ",u.v,"-->",u.w," rootId: ",r," clusterId:",e)}catch(w){i.error(w)}})}i.debug("Removing node",c),t.removeNode(c)})},P=(e,t)=>{const n=t.children(e);let r=[...n];for(const s of n)J[s]=e,r=[...r,...P(s,t)];return r},b=(e,t)=>{i.trace("Searching",e);const n=t.children(e);if(i.trace("Searching children of id ",e,n),n.length<1)return i.trace("This is a valid node",e),e;for(const r of n){const s=b(r,t);if(s)return i.trace("Found replacement for",e," => ",s),s}},E=e=>!f[e]||!f[e].externalConnections?e:f[e]?f[e].id:e,it=(e,t)=>{if(!e||t>10){i.debug("Opting out, no graph ");return}else i.debug("Opting in, graph ");e.nodes().forEach(function(n){e.children(n).length>0&&(i.warn("Cluster identified",n," Replacement id in edges: ",b(n,e)),g[n]=P(n,e),f[n]={id:b(n,e),clusterData:e.node(n)})}),e.nodes().forEach(function(n){const r=e.children(n),s=e.edges();r.length>0?(i.debug("Cluster identified",n,g),s.forEach(c=>{if(c.v!==n&&c.w!==n){const d=X(c.v,n),l=X(c.w,n);d^l&&(i.warn("Edge: ",c," leaves cluster ",n),i.warn("Decendants of XXX ",n,": ",g[n]),f[n].externalConnections=!0)}})):i.debug("Not a cluster ",n,g)}),e.edges().forEach(function(n){const r=e.edge(n);i.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(n)),i.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(e.edge(n)));let s=n.v,c=n.w;if(i.warn("Fix XXX",f,"ids:",n.v,n.w,"Translating: ",f[n.v]," --- ",f[n.w]),f[n.v]&&f[n.w]&&f[n.v]===f[n.w]){i.warn("Fixing and trixing link to self - removing XXX",n.v,n.w,n.name),i.warn("Fixing and trixing - removing XXX",n.v,n.w,n.name),s=E(n.v),c=E(n.w),e.removeEdge(n.v,n.w,n.name);const d=n.w+"---"+n.v;e.setNode(d,{domId:d,id:d,labelStyle:"",labelText:r.label,padding:0,shape:"labelRect",style:""});const l=structuredClone(r),u=structuredClone(r);l.label="",l.arrowTypeEnd="none",u.label="",l.fromCluster=n.v,u.toCluster=n.v,e.setEdge(s,d,l,n.name+"-cyclic-special"),e.setEdge(d,c,u,n.name+"-cyclic-special")}else(f[n.v]||f[n.w])&&(i.warn("Fixing and trixing - removing XXX",n.v,n.w,n.name),s=E(n.v),c=E(n.w),e.removeEdge(n.v,n.w,n.name),s!==n.v&&(r.fromCluster=n.v),c!==n.w&&(r.toCluster=n.w),i.warn("Fix Replacing with XXX",s,c,n.name),e.setEdge(s,c,r,n.name))}),i.warn("Adjusted Graph",x(e)),p(e,0),i.trace(f)},p=(e,t)=>{if(i.warn("extractor - ",t,x(e),e.children("D")),t>10){i.error("Bailing out");return}let n=e.nodes(),r=!1;for(const s of n){const c=e.children(s);r=r||c.length>0}if(!r){i.debug("Done, no node has children",e.nodes());return}i.debug("Nodes = ",n,t);for(const s of n)if(i.debug("Extracting node",s,f,f[s]&&!f[s].externalConnections,!e.parent(s),e.node(s),e.children("D")," Depth ",t),!f[s])i.debug("Not a cluster",s,t);else if(!f[s].externalConnections&&e.children(s)&&e.children(s).length>0){i.warn("Cluster without external connections, without a parent and with children",s,t);let d=e.graph().rankdir==="TB"?"LR":"TB";f[s]&&f[s].clusterData&&f[s].clusterData.dir&&(d=f[s].clusterData.dir,i.warn("Fixing dir",f[s].clusterData.dir,d));const l=new j({multigraph:!0,compound:!0}).setGraph({rankdir:d,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});i.warn("Old graph before copy",x(e)),R(s,e,l,s),e.setNode(s,{clusterNode:!0,id:s,clusterData:f[s].clusterData,labelText:f[s].labelText,graph:l}),i.warn("New graph after copy node: (",s,")",x(l)),i.debug("Old graph after copy",x(e))}else i.warn("Cluster ** ",s," **not meeting the criteria !externalConnections:",!f[s].externalConnections," no parent: ",!e.parent(s)," children ",e.children(s)&&e.children(s).length>0,e.children("D"),t),i.debug(f);n=e.nodes(),i.warn("New list of nodes",n);for(const s of n){const c=e.node(s);i.warn(" Now next level",s,c),c.clusterNode&&p(c.graph,t+1)}},F=(e,t)=>{if(t.length===0)return[];let n=Object.assign(t);return t.forEach(r=>{const s=e.children(r),c=F(e,s);n=[...n,...c]}),n},st=e=>F(e,e.children()),rt=(e,t)=>{i.info("Creating subgraph rect for ",t.id,t);const n=e.insert("g").attr("class","cluster"+(t.class?" "+t.class:"")).attr("id",t.id),r=n.insert("rect",":first-child"),s=N(S().flowchart.htmlLabels),c=n.insert("g").attr("class","cluster-label"),d=t.labelType==="markdown"?K(c,t.labelText,{style:t.labelStyle,useHtmlLabels:s}):c.node().appendChild(L(t.labelText,t.labelStyle,void 0,!0));let l=d.getBBox();if(N(S().flowchart.htmlLabels)){const a=d.children[0],o=T(d);l=a.getBoundingClientRect(),o.attr("width",l.width),o.attr("height",l.height)}const u=0*t.padding,h=u/2,w=t.width<=l.width+u?l.width+u:t.width;t.width<=l.width+u?t.diff=(l.width-t.width)/2-t.padding/2:t.diff=-t.padding/2,i.trace("Data ",t,JSON.stringify(t)),r.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-w/2).attr("y",t.y-t.height/2-h).attr("width",w).attr("height",t.height+u),s?c.attr("transform","translate("+(t.x-l.width/2)+", "+(t.y-t.height/2)+")"):c.attr("transform","translate("+t.x+", "+(t.y-t.height/2)+")");const v=r.node().getBBox();return t.width=v.width,t.height=v.height,t.intersect=function(a){return C(t,a)},n},at=(e,t)=>{const n=e.insert("g").attr("class","note-cluster").attr("id",t.id),r=n.insert("rect",":first-child"),s=0*t.padding,c=s/2;r.attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-t.width/2-c).attr("y",t.y-t.height/2-c).attr("width",t.width+s).attr("height",t.height+s).attr("fill","none");const d=r.node().getBBox();return t.width=d.width,t.height=d.height,t.intersect=function(l){return C(t,l)},n},ct=(e,t)=>{const n=e.insert("g").attr("class",t.classes).attr("id",t.id),r=n.insert("rect",":first-child"),s=n.insert("g").attr("class","cluster-label"),c=n.append("rect"),d=s.node().appendChild(L(t.labelText,t.labelStyle,void 0,!0));let l=d.getBBox();if(N(S().flowchart.htmlLabels)){const a=d.children[0],o=T(d);l=a.getBoundingClientRect(),o.attr("width",l.width),o.attr("height",l.height)}l=d.getBBox();const u=0*t.padding,h=u/2,w=t.width<=l.width+t.padding?l.width+t.padding:t.width;t.width<=l.width+t.padding?t.diff=(l.width+t.padding*0-t.width)/2:t.diff=-t.padding/2,r.attr("class","outer").attr("x",t.x-w/2-h).attr("y",t.y-t.height/2-h).attr("width",w+u).attr("height",t.height+u),c.attr("class","inner").attr("x",t.x-w/2-h).attr("y",t.y-t.height/2-h+l.height-1).attr("width",w+u).attr("height",t.height+u-l.height-3),s.attr("transform","translate("+(t.x-l.width/2)+", "+(t.y-t.height/2-t.padding/3+(N(S().flowchart.htmlLabels)?5:3))+")");const v=r.node().getBBox();return t.height=v.height,t.intersect=function(a){return C(t,a)},n},ot=(e,t)=>{const n=e.insert("g").attr("class",t.classes).attr("id",t.id),r=n.insert("rect",":first-child"),s=0*t.padding,c=s/2;r.attr("class","divider").attr("x",t.x-t.width/2-c).attr("y",t.y-t.height/2).attr("width",t.width+s).attr("height",t.height+s);const d=r.node().getBBox();return t.width=d.width,t.height=d.height,t.diff=-t.padding/2,t.intersect=function(l){return C(t,l)},n},lt={rect:rt,roundedWithTitle:ct,noteGroup:at,divider:ot};let k={};const ft=(e,t)=>{i.trace("Inserting cluster");const n=t.shape||"rect";k[t.id]=lt[n](e,t)},dt=()=>{k={}},$=async(e,t,n,r,s)=>{i.info("Graph in recursive render: XXX",x(t),s);const c=t.graph().rankdir;i.trace("Dir in recursive render - dir:",c);const d=e.insert("g").attr("class","root");t.nodes()?i.info("Recursive render XXX",t.nodes()):i.info("No nodes found for",t),t.edges().length>0&&i.trace("Recursive edges",t.edge(t.edges()[0]));const l=d.insert("g").attr("class","clusters"),u=d.insert("g").attr("class","edgePaths"),h=d.insert("g").attr("class","edgeLabels"),w=d.insert("g").attr("class","nodes");await Promise.all(t.nodes().map(async function(a){const o=t.node(a);if(s!==void 0){const y=JSON.parse(JSON.stringify(s.clusterData));i.info("Setting data for cluster XXX (",a,") ",y,s),t.setNode(s.id,y),t.parent(a)||(i.trace("Setting parent",a,s.id),t.setParent(a,s.id,y))}if(i.info("(Insert) Node XXX"+a+": "+JSON.stringify(t.node(a))),o&&o.clusterNode){i.info("Cluster identified",a,o.width,t.node(a));const y=await $(w,o.graph,n,r,t.node(a)),B=y.elem;_(o,B),o.diff=y.diff||0,i.info("Node bounds (abc123)",a,o,o.width,o.x,o.y),H(B,o),i.warn("Recursive render complete ",B,o)}else t.children(a).length>0?(i.info("Cluster - the non recursive path XXX",a,o.id,o,t),i.info(b(o.id,t)),f[o.id]={id:b(o.id,t),node:o}):(i.info("Node - the non recursive path",a,o.id,o),await V(w,t.node(a),c))})),t.edges().forEach(function(a){const o=t.edge(a.v,a.w,a.name);i.info("Edge "+a.v+" -> "+a.w+": "+JSON.stringify(a)),i.info("Edge "+a.v+" -> "+a.w+": ",a," ",JSON.stringify(t.edge(a))),i.info("Fix",f,"ids:",a.v,a.w,"Translateing: ",f[a.v],f[a.w]),q(h,o)}),t.edges().forEach(function(a){i.info("Edge "+a.v+" -> "+a.w+": "+JSON.stringify(a))}),i.info("#############################################"),i.info("### Layout ###"),i.info("#############################################"),i.info(t),A(t),i.info("Graph after layout:",x(t));let v=0;return st(t).forEach(function(a){const o=t.node(a);i.info("Position "+a+": "+JSON.stringify(t.node(a))),i.info("Position "+a+": ("+o.x,","+o.y,") width: ",o.width," height: ",o.height),o&&o.clusterNode?D(o):t.children(a).length>0?(ft(l,o),f[o.id].node=o):D(o)}),t.edges().forEach(function(a){const o=t.edge(a);i.info("Edge "+a.v+" -> "+a.w+": "+JSON.stringify(o),o);const y=U(u,a,o,f,n,t,r);W(o,y)}),t.nodes().forEach(function(a){const o=t.node(a);i.info(a,o.type,o.diff),o.type==="group"&&(v=o.diff)}),{elem:d,diff:v}},xt=async(e,t,n,r,s)=>{M(e,n,r,s),Y(),z(),dt(),et(),i.warn("Graph at first:",JSON.stringify(x(t))),it(t),i.warn("Graph after:",JSON.stringify(x(t))),await $(e,t,r,s)};export{xt as r}; diff --git a/assets/index.html-AN1YzPhl.js b/assets/index.html-0qJyAU8Q.js similarity index 76% rename from assets/index.html-AN1YzPhl.js rename to assets/index.html-0qJyAU8Q.js index 1c98be5..4a3ce95 100644 --- a/assets/index.html-AN1YzPhl.js +++ b/assets/index.html-0qJyAU8Q.js @@ -1 +1 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-AQj9nIQS.js b/assets/index.html-1UKx3tTB.js similarity index 76% rename from assets/index.html-AQj9nIQS.js rename to assets/index.html-1UKx3tTB.js index 1c98be5..4a3ce95 100644 --- a/assets/index.html-AQj9nIQS.js +++ b/assets/index.html-1UKx3tTB.js @@ -1 +1 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-GYAMrXS-.js b/assets/index.html-2LWO62N7.js similarity index 76% rename from assets/index.html-GYAMrXS-.js rename to assets/index.html-2LWO62N7.js index 1c98be5..4a3ce95 100644 --- a/assets/index.html-GYAMrXS-.js +++ b/assets/index.html-2LWO62N7.js @@ -1 +1 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-GpIlvQXn.js b/assets/index.html-35KxtpZI.js similarity index 76% rename from assets/index.html-GpIlvQXn.js rename to assets/index.html-35KxtpZI.js index 1c98be5..4a3ce95 100644 --- a/assets/index.html-GpIlvQXn.js +++ b/assets/index.html-35KxtpZI.js @@ -1 +1 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-4MOf5u_i.js b/assets/index.html-4MOf5u_i.js new file mode 100644 index 0000000..4a3ce95 --- /dev/null +++ b/assets/index.html-4MOf5u_i.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-4w7NJvOq.js b/assets/index.html-4w7NJvOq.js new file mode 100644 index 0000000..7773732 --- /dev/null +++ b/assets/index.html-4w7NJvOq.js @@ -0,0 +1,72 @@ +import{_ as u}from"./vs_code_zh-ltEPcFYF.js";import{_ as r}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as o,o as p,c as v,f as m,a as e,d as s,b as l,w as n,e as b}from"./app-oTlYPy8h.js";const h={},_=e("p",null,"本教程将指导您完成编译和运行 ZLMediaKit。",-1),k=e("h2",{id:"构建环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#构建环境","aria-hidden":"true"},"#"),s(" 构建环境")],-1),g=e("div",{class:"hint-container tip"},[e("p",{class:"hint-container-title"},"新手提示"),e("p",null,"如果你是位新手,强烈建议使用 Ubuntu16 以上版本编译 ZLMediaKit,macOS 是次选推荐平台。不推荐使用 CentOS6.x 或 windows 构建与使用。")],-1),f={class:"hint-container info"},x=e("p",{class:"hint-container-title"},"vcpkg",-1),A=e("h3",{id:"支持-c-11-的编译器",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#支持-c-11-的编译器","aria-hidden":"true"},"#"),s(" 支持 C++11 的编译器")],-1),S=e("p",null,"ZLMediaKit 采用了 C++11 的语法和库,要求编译器支持完整的 C++11 标准:",-1),w=e("ul",null,[e("li",null,"Linux: gcc >= 4.8 (4.7 应该也能支持)"),e("li",null,"macOS: Clang >= ??? (我也不知道,估计大部分不会遇到这个问题)"),e("li",null,"Windows: Visual Studio >= 2015 (vs2013 某些版本也能编译通过,如果怕麻烦建议直接 vs2017)")],-1),L=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"sudo"),s(),e("span",{class:"token function"},"apt"),s(),e("span",{class:"token function"},"install"),s(` build-essential +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])],-1),M=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"sudo"),s(" yum "),e("span",{class:"token parameter variable"},"-y"),s(),e("span",{class:"token function"},"install"),s(` gcc +`),e("span",{class:"token function"},"sudo"),s(" yum "),e("span",{class:"token parameter variable"},"-y"),s(),e("span",{class:"token function"},"install"),s(` gcc-c++ +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),O=e("p",null,"需要手动切换到高版本 gcc。",-1),K=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"sudo"),s(" yum "),e("span",{class:"token function"},"install"),s(" centos-release-scl "),e("span",{class:"token parameter variable"},"-y"),s(` +`),e("span",{class:"token function"},"sudo"),s(" yum "),e("span",{class:"token function"},"install"),s(" devtoolset-4-toolchain "),e("span",{class:"token parameter variable"},"-y"),s(` +`),e("span",{class:"token comment"},"# 切换到高版本 gcc"),s(` +scl `),e("span",{class:"token builtin class-name"},"enable"),s(" devtoolset-4 "),e("span",{class:"token function"},"bash"),s(` +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),C={href:"https://developer.apple.com/cn/xcode/",target:"_blank",rel:"noopener noreferrer"},Z={href:"https://visualstudio.microsoft.com/zh-hans/vs/community/",target:"_blank",rel:"noopener noreferrer"},y=e("strong",null,"勾选 C++ 开发环境",-1),D=e("h3",{id:"cmake",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cmake","aria-hidden":"true"},"#"),s(" CMake")],-1),z=e("p",null,"ZLMediaKit 采用 CMake 来构建项目,所以编译需要 CMake。",-1),W=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"sudo"),s(),e("span",{class:"token function"},"apt"),s(),e("span",{class:"token function"},"install"),s(` cmake +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])],-1),E=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"sudo"),s(" yum "),e("span",{class:"token parameter variable"},"-y"),s(),e("span",{class:"token function"},"install"),s(` cmake +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])],-1),N=e("p",null,"需要手动切换到高版本 CMake。",-1),R=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"wget"),s(` https://github.com/Kitware/CMake/releases/download/v3.17.0-rc3/cmake-3.17.0-rc3.tar.gz +`),e("span",{class:"token function"},"tar"),s(),e("span",{class:"token parameter variable"},"-xvf"),s(` cmake-3.17.0-rc3.tar.gz +`),e("span",{class:"token builtin class-name"},"cd"),s(` cmake-3.17.0-rc3 +./configure +`),e("span",{class:"token function"},"make"),s(),e("span",{class:"token parameter variable"},"-j4"),s(` +`),e("span",{class:"token function"},"sudo"),s(),e("span",{class:"token function"},"make"),s(),e("span",{class:"token function"},"install"),s(` +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),I=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[s("brew "),e("span",{class:"token function"},"install"),s(` cmake +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])],-1),T=e("li",null,[e("p",null,"若使用 vs2017+,vs 已包含 cmake,你只需在安装时勾选。")],-1),V={href:"https://github.com/Kitware/CMake/releases/download/",target:"_blank",rel:"noopener noreferrer"},U=b(`

                  获取代码

                  使用 Git 克隆 ZLMediaKit 的代码并初始化子模块:

                  # 国内用户推荐从 Gitee 下载
                  +git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
                  +cd ZLMediaKit
                  +# 初始化子模块 (必须执行)
                  +git submodule update --init
                  +

                  注意

                  不能通过下载 zip 包的方式下载源码。因为 ZLMediaKit 依赖于第三方代码并通过 Git 子模块的方式管理。

                  安装依赖库

                  ZLMediaKit 依赖一些可选的第三方库。构建时,CMake 将在 path 中查找这些库,并根据检测情况决定是否开启相关特性。

                  • openssl

                    你需要在编译前安装 openssl 库以使用相关功能。

                    • flash player 播放 rtmp
                    • https/rtsps/webrtc 相关功能。
                  • ffmpeg

                    ZLMediaKit 可以通过 fork ffmpeg 进程的方式实现多种协议的拉流,编译时不需要安装 FFmpeg。

                  • sdl、avcodec、avutil

                    这 3 个库供 ZLMediaKit 的 test_player 测试程序使用,你通常不需要安装这 3 个库。

                  `,7),j=e("p",null,"除了 openssl,其他都是可选的:",-1),B=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"sudo"),s(),e("span",{class:"token function"},"apt"),s(),e("span",{class:"token function"},"install"),s(` libssl-dev +`),e("span",{class:"token function"},"sudo"),s(),e("span",{class:"token function"},"apt"),s(),e("span",{class:"token function"},"install"),s(` libsdl-dev +`),e("span",{class:"token function"},"sudo"),s(),e("span",{class:"token function"},"apt"),s(),e("span",{class:"token function"},"install"),s(` libavcodec-dev +`),e("span",{class:"token function"},"sudo"),s(),e("span",{class:"token function"},"apt"),s(),e("span",{class:"token function"},"install"),s(` libavutil-dev +`),e("span",{class:"token function"},"sudo"),s(),e("span",{class:"token function"},"apt"),s(),e("span",{class:"token function"},"install"),s(` ffmpeg +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),F=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"sudo"),s(" yum "),e("span",{class:"token function"},"install"),s(` libssl-dev +`),e("span",{class:"token function"},"sudo"),s(" yum "),e("span",{class:"token function"},"install"),s(` libsdl-dev +`),e("span",{class:"token function"},"sudo"),s(" yum "),e("span",{class:"token function"},"install"),s(` libavcodec-dev +`),e("span",{class:"token function"},"sudo"),s(" yum "),e("span",{class:"token function"},"install"),s(` libavutil-dev +`),e("span",{class:"token function"},"sudo"),s(" yum "),e("span",{class:"token function"},"install"),s(` ffmpeg +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),G={href:"https://blog.51cto.com/mengix/2452395",target:"_blank",rel:"noopener noreferrer"},P=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"sudo"),s(" brew "),e("span",{class:"token function"},"install"),s(` libssl-dev +`),e("span",{class:"token function"},"sudo"),s(" brew "),e("span",{class:"token function"},"install"),s(` libsdl-dev +`),e("span",{class:"token function"},"sudo"),s(" brew "),e("span",{class:"token function"},"install"),s(` libavcodec-dev +`),e("span",{class:"token function"},"sudo"),s(" brew "),e("span",{class:"token function"},"install"),s(` libavutil-dev +`),e("span",{class:"token function"},"sudo"),s(" brew "),e("span",{class:"token function"},"install"),s(` ffmpeg +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),X={href:"https://slproweb.com/products/Win32OpenSSL.html",target:"_blank",rel:"noopener noreferrer"},H=e("h2",{id:"构建与编译-zlmediakit",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#构建与编译-zlmediakit","aria-hidden":"true"},"#"),s(" 构建与编译 ZLMediaKit")],-1),q={class:"hint-container info"},J=e("p",{class:"hint-container-title"},"webrtc",-1),Q=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token builtin class-name"},"cd"),s(` ZLMediaKit +`),e("span",{class:"token function"},"mkdir"),s(` build +`),e("span",{class:"token builtin class-name"},"cd"),s(` build +cmake `),e("span",{class:"token punctuation"},".."),s(` +`),e("span",{class:"token function"},"make"),s(),e("span",{class:"token parameter variable"},"-j4"),s(` +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),Y=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token builtin class-name"},"cd"),s(` ZLMediaKit +`),e("span",{class:"token function"},"mkdir"),s(` build +`),e("span",{class:"token builtin class-name"},"cd"),s(` build +`),e("span",{class:"token comment"},"# 将 DOPENSSL_ROOT_DIR 指向你的 openssl 路径"),s(` +cmake `),e("span",{class:"token punctuation"},".."),s(),e("span",{class:"token parameter variable"},"-DOPENSSL_ROOT_DIR"),e("span",{class:"token operator"},"="),s(`/usr/local/Cellar/openssl/1.0.2j/ +`),e("span",{class:"token function"},"make"),s(),e("span",{class:"token parameter variable"},"-j4"),s(` +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),$=e("ul",null,[e("li",null,[e("p",null,[s("若使用 vs2017+,可直接在菜单栏中通过 "),e("code",null,"文件"),s(" -> "),e("code",null,"打开"),s(" -> "),e("code",null,"文件夹"),s(" -> "),e("code",null,"选择 ZLMediaKit 代码根目录并打开"),s(" 打开项目文件夹。")]),e("figure",null,[e("img",{src:u,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")])]),e("li",null,[e("p",null,"否则,你应该:"),e("ol",null,[e("li",null,"使用 cmake-gui 打开工程并生成 vs 工程文件。"),e("li",null,"找到工程文件 (ZLMediaKit.sln) 并用使用 Visual Studio 打开。"),e("li",null,"选择编译 Release 版本。"),e("li",null,"找到目标文件并运行测试用例。")])])],-1),ee=e("p",null,"在 Android Studio 中打开 Android 目录。",-1),se={href:"https://www.jianshu.com/p/44c21296add5",target:"_blank",rel:"noopener noreferrer"},ne=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token builtin class-name"},"cd"),s(` ZLMediaKit +`),e("span",{class:"token function"},"mkdir"),s(),e("span",{class:"token parameter variable"},"-p"),s(` build +`),e("span",{class:"token builtin class-name"},"cd"),s(` build +`),e("span",{class:"token comment"},"# 生成 XCode 工程,工程文件在 build 目录下"),s(` +cmake `),e("span",{class:"token punctuation"},".."),s(),e("span",{class:"token parameter variable"},"-G"),s(" Xcode "),e("span",{class:"token parameter variable"},"-DCMAKE_TOOLCHAIN_FILE"),e("span",{class:"token operator"},"="),e("span",{class:"token punctuation"},".."),s("/cmake/ios.toolchain.cmake "),e("span",{class:"token parameter variable"},"-DPLATFORM"),e("span",{class:"token operator"},"="),s(`OS64COMBINED +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),ae=e("h2",{id:"运行-zlmediakit",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#运行-zlmediakit","aria-hidden":"true"},"#"),s(" 运行 ZLMediaKit")],-1),ie=e("p",null,"ZLMediaKit 工程主要生成 3 种二进制目标文件,他们的生成的路径在 release 目录下。",-1),le=e("h3",{id:"mediaserver-进程",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mediaserver-进程","aria-hidden":"true"},"#"),s(" MediaServer 进程")],-1),te=e("p",null,"这是 ZLMediaKit 作为服务器的主进程,该进程可以在免去开发的情况下直接作为测试流媒体服务器使用。",-1),ce=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token builtin class-name"},"cd"),s(` ZLMediaKit/release/linux/Debug +`),e("span",{class:"token comment"},"# 通过 -h 可以了解启动参数"),s(` +./MediaServer `),e("span",{class:"token parameter variable"},"-h"),s(` +`),e("span",{class:"token comment"},"# 以守护进程模式启动"),s(` +./MediaServer `),e("span",{class:"token parameter variable"},"-d"),s(),e("span",{class:"token operator"},"&"),s(` +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),de=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token builtin class-name"},"cd"),s(` ZLMediaKit/release/mac/Debug +`),e("span",{class:"token comment"},"# 通过 -h 可以了解启动参数"),s(` +./MediaServer `),e("span",{class:"token parameter variable"},"-h"),s(` +`),e("span",{class:"token comment"},"# 以守护进程模式启动"),s(` +./MediaServer `),e("span",{class:"token parameter variable"},"-d"),s(),e("span",{class:"token operator"},"&"),s(` +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),oe=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token builtin class-name"},"cd"),s(` ZLMediaKit/release/windows/Debug +`),e("span",{class:"token comment"},"# 通过 -h 可以了解启动参数"),s(` +./MediaServer.exe `),e("span",{class:"token parameter variable"},"-h"),s(` +`),e("span",{class:"token comment"},"# 以守护进程模式启动"),s(` +./MediaServer.exe `),e("span",{class:"token parameter variable"},"-d"),s(),e("span",{class:"token operator"},"&"),s(` +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),ue=e("h3",{id:"c-接口的-sdk",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#c-接口的-sdk","aria-hidden":"true"},"#"),s(" C 接口的 SDK")],-1),re=e("p",null,"ZLMediaKit 同时提供 C 接口的 SDK 库。",-1),pe=e("p",null,[s("头文件位于 "),e("code",null,"ZLMediaKit/api/include"),s(",有详细的注释,一般足够二次开发使用。")],-1),ve=e("p",null,"库文件为:",-1),me=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,`ZLMediaKit/release/linux/Debug/libmk_api.so +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])],-1),be=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,`ZLMediaKit/release/linux/mac/libmk_api.dylib +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])],-1),he=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,`ZLMediaKit/release/windows/Debug/mk_api.dll +ZLMediaKit/release/windows/Debug/mk_api.lib +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),_e=e("h3",{id:"以-test-开头的测试程序",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#以-test-开头的测试程序","aria-hidden":"true"},"#"),s(" 以 "),e("code",null,"test_"),s(" 开头的测试程序")],-1),ke=e("p",null,[s("相关代码在 "),e("code",null,"ZLMediaKit/tests"),s(" 目录下,你可以对照代码启动测试进程。")],-1),ge=e("h2",{id:"推流测试",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#推流测试","aria-hidden":"true"},"#"),s(" 推流测试")],-1);function fe(xe,Ae){const t=o("RouterLink"),c=o("ExternalLinkIcon"),d=o("Tabs");return p(),v("div",null,[_,m(" more "),k,g,e("div",f,[x,e("p",null,[s("ZLMediaKit 已上架 vcpkg,便捷安装请参考 "),l(t,{to:"/zh/guide/install/install_zlmediakit_using_vcpkg.html"},{default:n(()=>[s("vcpkg 安装 ZLMediaKit")]),_:1}),s("。")])]),A,S,w,l(d,{id:"40",data:[{id:"Debian 系 (包括 Ubuntu)"},{id:"CentOS7+"},{id:"CentOS 6.x"},{id:"macOS"},{id:"Windows"}],"tab-id":"env"},{title0:n(({value:a,isActive:i})=>[s("Debian 系 (包括 Ubuntu)")]),title1:n(({value:a,isActive:i})=>[s("CentOS7+")]),title2:n(({value:a,isActive:i})=>[s("CentOS 6.x")]),title3:n(({value:a,isActive:i})=>[s("macOS")]),title4:n(({value:a,isActive:i})=>[s("Windows")]),tab0:n(({value:a,isActive:i})=>[L]),tab1:n(({value:a,isActive:i})=>[M]),tab2:n(({value:a,isActive:i})=>[O,K]),tab3:n(({value:a,isActive:i})=>[e("p",null,[e("a",C,[s("安装最新的 Xcode"),l(c)]),s("。")])]),tab4:n(({value:a,isActive:i})=>[e("p",null,[e("a",Z,[s("安装最新的 Visual Studio Community"),l(c)]),s(" 并"),y,s("。")])]),_:1},8,["data"]),D,z,l(d,{id:"70",data:[{id:"Debian 系 (包括 Ubuntu)"},{id:"CentOS7+"},{id:"CentOS 6.x"},{id:"macOS"},{id:"Windows"}],"tab-id":"env"},{title0:n(({value:a,isActive:i})=>[s("Debian 系 (包括 Ubuntu)")]),title1:n(({value:a,isActive:i})=>[s("CentOS7+")]),title2:n(({value:a,isActive:i})=>[s("CentOS 6.x")]),title3:n(({value:a,isActive:i})=>[s("macOS")]),title4:n(({value:a,isActive:i})=>[s("Windows")]),tab0:n(({value:a,isActive:i})=>[W]),tab1:n(({value:a,isActive:i})=>[E]),tab2:n(({value:a,isActive:i})=>[N,R]),tab3:n(({value:a,isActive:i})=>[I]),tab4:n(({value:a,isActive:i})=>[e("ul",null,[T,e("li",null,[e("p",null,[s("否则你需要 "),e("a",V,[s("下载并安装 cmake-gui"),l(c)]),s("。")])])])]),_:1},8,["data"]),U,l(d,{id:"157",data:[{id:"Debian 系 (包括 Ubuntu)"},{id:"CentOS7+"},{id:"CentOS 6.x"},{id:"macOS"},{id:"Windows"}],"tab-id":"env"},{title0:n(({value:a,isActive:i})=>[s("Debian 系 (包括 Ubuntu)")]),title1:n(({value:a,isActive:i})=>[s("CentOS7+")]),title2:n(({value:a,isActive:i})=>[s("CentOS 6.x")]),title3:n(({value:a,isActive:i})=>[s("macOS")]),title4:n(({value:a,isActive:i})=>[s("Windows")]),tab0:n(({value:a,isActive:i})=>[j,B]),tab1:n(({value:a,isActive:i})=>[F]),tab2:n(({value:a,isActive:i})=>[e("p",null,[s("请 "),e("a",G,[s("参考此博文"),l(c)]),s("。")])]),tab3:n(({value:a,isActive:i})=>[P]),tab4:n(({value:a,isActive:i})=>[e("p",null,[e("a",X,[s("下载并安装 openssl"),l(c)]),s("。")])]),_:1},8,["data"]),H,e("div",q,[J,e("p",null,[s("由于功能复杂,默认情况下不开启编译 webrtc,可参考 "),l(t,{to:"/zh/guide/protocol/webrtc/webrtc_compilation_and_use.html"},{default:n(()=>[s("编译与使用 webrtc")]),_:1})])]),l(d,{id:"189",data:[{id:"Linux"},{id:"macOS"},{id:"Windows"},{id:"Android"},{id:"iOS"}],"tab-id":"env"},{title0:n(({value:a,isActive:i})=>[s("Linux")]),title1:n(({value:a,isActive:i})=>[s("macOS")]),title2:n(({value:a,isActive:i})=>[s("Windows")]),title3:n(({value:a,isActive:i})=>[s("Android")]),title4:n(({value:a,isActive:i})=>[s("iOS")]),tab0:n(({value:a,isActive:i})=>[Q]),tab1:n(({value:a,isActive:i})=>[Y]),tab2:n(({value:a,isActive:i})=>[$,e("p",null,[s("有关 Windows 编译可参考 "),l(t,{to:"/zh/guide/install/compilation_instructions_for_windows_version.html"},{default:n(()=>[s("Windows 编译说明")]),_:1})])]),tab3:n(({value:a,isActive:i})=>[ee]),tab4:n(({value:a,isActive:i})=>[e("p",null,[s("可参考 "),e("a",se,[s("此博文"),l(c)]),s(" 生成 XCode 工程然后编译 c api 的静态库:")]),ne]),_:1}),ae,ie,le,te,e("p",null,[s("如果你需要更复杂的业务逻辑,可以通过 "),l(t,{to:"/zh/guide/media_server/web_hook_api.html"},{default:n(()=>[s("Web HOOK")]),_:1}),s("和 "),l(t,{to:"/zh/guide/media_server/restful_api.html"},{default:n(()=>[s("RESTful API")]),_:1}),s("实现。你可以通过 "),l(t,{to:"/zh/guide/media_server/config_file.html"},{default:n(()=>[s("配置文件")]),_:1}),s(" 控制其参数。")]),l(d,{id:"265",data:[{id:"Linux"},{id:"macOS"},{id:"Windows"}],"tab-id":"env"},{title0:n(({value:a,isActive:i})=>[s("Linux")]),title1:n(({value:a,isActive:i})=>[s("macOS")]),title2:n(({value:a,isActive:i})=>[s("Windows")]),tab0:n(({value:a,isActive:i})=>[ce]),tab1:n(({value:a,isActive:i})=>[de]),tab2:n(({value:a,isActive:i})=>[oe]),_:1}),ue,re,pe,ve,l(d,{id:"288",data:[{id:"Linux"},{id:"macOS"},{id:"Windows"}],"tab-id":"env"},{title0:n(({value:a,isActive:i})=>[s("Linux")]),title1:n(({value:a,isActive:i})=>[s("macOS")]),title2:n(({value:a,isActive:i})=>[s("Windows")]),tab0:n(({value:a,isActive:i})=>[me]),tab1:n(({value:a,isActive:i})=>[be]),tab2:n(({value:a,isActive:i})=>[he]),_:1}),_e,ke,ge,e("p",null,[s("请参考 "),l(t,{to:"/zh/guide/media_server/push_test.html"},{default:n(()=>[s("推流播放测试")]),_:1}),s("。")])])}const Me=r(h,[["render",fe],["__file","index.html.vue"]]);export{Me as default}; diff --git a/assets/index.html-6AFjdEoA.js b/assets/index.html-6AFjdEoA.js new file mode 100644 index 0000000..4a3ce95 --- /dev/null +++ b/assets/index.html-6AFjdEoA.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-8kcJLd-q.js b/assets/index.html-8kcJLd-q.js new file mode 100644 index 0000000..4a3ce95 --- /dev/null +++ b/assets/index.html-8kcJLd-q.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-9fZsvbS8.js b/assets/index.html-9fZsvbS8.js new file mode 100644 index 0000000..4a3ce95 --- /dev/null +++ b/assets/index.html-9fZsvbS8.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-AIAMrVKp.js b/assets/index.html-AIAMrVKp.js new file mode 100644 index 0000000..4a3ce95 --- /dev/null +++ b/assets/index.html-AIAMrVKp.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-puiRG_tj.js b/assets/index.html-B81jBW2G.js similarity index 99% rename from assets/index.html-puiRG_tj.js rename to assets/index.html-B81jBW2G.js index 984e5ab..84923f5 100644 --- a/assets/index.html-puiRG_tj.js +++ b/assets/index.html-B81jBW2G.js @@ -1,4 +1,4 @@ -import{_ as d}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as c,c as h,a as e,b as l,d as i,w as s,e as o}from"./app-BrxqtzGY.js";const p={},u=e("h2",{id:"一个基于-c-11-的高性能运营级流媒体服务框架",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一个基于-c-11-的高性能运营级流媒体服务框架","aria-hidden":"true"},"#"),i(" 一个基于 C++11 的高性能运营级流媒体服务框架")],-1),_={href:"https://github.com/ZLMediaKit/ZLMediaKit/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"},m=e("img",{src:"https://img.shields.io/badge/license-MIT-green.svg",alt:"badge",loading:"lazy"},null,-1),b={href:"https://en.cppreference.com/",target:"_blank",rel:"noopener noreferrer"},g=e("img",{src:"https://img.shields.io/badge/language-c++-red.svg",alt:"badge",loading:"lazy"},null,-1),f={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},k=e("img",{src:"https://img.shields.io/badge/platform-linux | macos | windows-blue.svg",alt:"badge",loading:"lazy"},null,-1),M={href:"https://github.com/ZLMediaKit/ZLMediaKit/pulls",target:"_blank",rel:"noopener noreferrer"},S=e("img",{src:"https://img.shields.io/badge/PRs-welcome-yellow.svg",alt:"badge",loading:"lazy"},null,-1),T={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},P=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/android.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),L={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},v=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/linux.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),R={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},w=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/macos.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),H={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},K=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/windows.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),Z={href:"https://hub.docker.com/r/zlmediakit/zlmediakit/tags",target:"_blank",rel:"noopener noreferrer"},z=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/docker.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),x={href:"https://hub.docker.com/r/zlmediakit/zlmediakit/tags",target:"_blank",rel:"noopener noreferrer"},C=e("img",{src:"https://img.shields.io/docker/pulls/zlmediakit/zlmediakit",alt:"badge",loading:"lazy"},null,-1),A=e("h2",{id:"项目特点",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#项目特点","aria-hidden":"true"},"#"),i(" 项目特点")],-1),y=e("li",null,"基于 C++11 开发,避免使用裸指针,代码稳定可靠,性能优越。",-1),G=e("li",null,"支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4/WebRTC),支持协议互转。",-1),O=e("li",null,"使用多路复用/多线程/异步网络 IO 模式开发,并发性能优越,支持海量客户端连接。",-1),I=e("li",null,"代码经过长期大量的稳定性、性能测试,已经在线上商用验证已久。",-1),V=e("li",null,"支持 linux、macos、ios、android、windows 全平台。",-1),U=e("li",null,"支持 x86、arm、risc-v、mips、龙芯、申威等指令集平台。",-1),W={href:"https://github.com/ZLMediaKit/ZLMediaKit/tree/master/api/include",target:"_blank",rel:"noopener noreferrer"},D={href:"https://github.com/ZLMediaKit/ZLMediaKit/tree/master/server",target:"_blank",rel:"noopener noreferrer"},E=e("li",null,"打通了视频监控协议栈与直播协议栈,对 RTSP/RTMP 支持都很完善。",-1),F=e("li",null,"全面支持 H265/H264/AAC/G711/OPUS。",-1),B=e("li",null,"功能完善,支持集群、按需转协议、按需推拉流、先播后推、断连续推等功能。",-1),N=e("li",null,"极致性能,单机 10W 级别播放器,100Gb/s 级别 io 带宽能力。",-1),Q={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/511",target:"_blank",rel:"noopener noreferrer"},q=e("li",null,"全面支持 ipv6 网络",-1),Y=o('

                  项目定位

                  • 移动嵌入式跨平台流媒体解决方案。
                  • 商用级流媒体服务器。
                  • 网络编程二次开发 SDK。

                  功能清单

                  功能一览

                  ',4),j=o("
                • RTSP[S]

                  • RTSP[S] 服务器,支持 RTMP/MP4/HLS 转 RTSP[S] ,支持亚马逊 echo show 这样的设备
                  • RTSP[S] 播放器,支持 RTSP 代理,支持生成静音音频
                  • RTSP[S] 推流客户端与服务器
                  • 支持 rtp over udp rtp over tcp rtp over http rtp组播 四种 RTP 传输方式
                  • 服务器/客户端完整支持 Basic/Digest 方式的登录鉴权,全异步可配置化的鉴权接口
                  • 支持 H265 编码
                  • 服务器支持 RTSP 推流(包括rtp over udp rtp over tcp方式)
                  • 支持 H264/H265/AAC/G711/OPUS/MJPEG 编码,其他编码能转发但不能转协议
                • ",1),J=e("p",null,"RTMP[S]",-1),X=e("li",null,"RTMP[S] 播放服务器,支持 RTSP/MP4/HLS 转 RTMP",-1),$=e("li",null,"RTMP[S] 发布服务器,支持录制发布流",-1),ee=e("li",null,"RTMP[S] 播放器,支持 RTMP 代理,支持生成静音音频",-1),ie=e("li",null,"RTMP[S] 推流客户端",-1),le=e("li",null,"支持 http[S] -flv 直播服务器",-1),te=e("li",null,"支持 http[S] -flv 直播播放器",-1),ae=e("li",null,"支持 websocket-flv 直播",-1),se=e("li",null,"支持 H264/H265/AAC/G711/OPUS 编码,其他编码能转发但不能转协议",-1),oe={href:"https://github.com/ksvc/FFmpeg/wiki",target:"_blank",rel:"noopener noreferrer"},ne={href:"https://github.com/veovera/enhanced-rtmp",target:"_blank",rel:"noopener noreferrer"},re=o("
                • HLS

                  • 支持 HLS 文件(mpegts/fmp4)生成,自带 HTTP 文件服务器
                  • 通过 cookie 追踪技术,可以模拟 HLS 播放为长连接,可以实现 HLS 按需拉流、播放统计等业务
                  • 支持 HLS 播发器,支持拉流 HLS 转 rtsp/rtmp/mp4
                  • 支持 H264/H265/AAC/G711/OPUS 编码
                • TS

                  • 支持 http[S] -ts 直播
                  • 支持 ws[S] -ts 直播
                  • 支持 H264/H265/AAC/G711/OPUS 编码
                • fMP4

                  • 支持 http[S] -fmp4 直播
                  • 支持 ws[S] -fmp4 直播
                  • 支持 H264/H265/AAC/G711/OPUS/MJPEG 编码
                • HTTP[S] 与 WebSocket

                  • 服务器支持目录索引生成,文件下载,表单提交请求
                  • 客户端提供文件下载器(支持断点续传),接口请求器,文件上传器
                  • 完整 HTTP API 服务器,可以作为 web 后台开发框架
                  • 支持跨域访问
                  • 支持 http 客户端、服务器 cookie
                  • 支持 WebSocket 服务器和客户端
                  • 支持 http 文件访问鉴权
                • GB28181 与 RTP 推流

                  • 支持 UDP/TCP RTP(PS/TS/ES)推流服务器,可以转换成 RTSP/RTMP/HLS 等协议
                  • 支持 RTSP/RTMP/HLS 等协议转 rtp 推流客户端,支持 TCP/UDP 模式,提供相应 restful api,支持主动被动方式
                  • 支持 H264/H265/AAC/G711/OPUS 编码
                  • 支持 es/ps/ts/ehome rtp 推流
                  • 支持 es/ps rtp 转推
                  • 支持 GB28181 主动拉流模式
                  • 支持双向语音对讲
                • MP4 点播与录制

                  • 支持录制为 FLV/HLS/MP4
                  • RTSP/RTMP/HTTP-FLV/WS-FLV 支持 MP4 文件点播,支持 seek
                  • 支持 H264/H265/AAC/G711/OPUS 编码
                • WebRTC

                  • 支持 WebRTC 推流,支持转其他协议
                  • 支持 WebRTC 播放,支持其他协议转 WebRTC
                  • 支持双向 echo test
                  • 支持 simulcast 推流
                  • 支持上下行 rtx/nack 丢包重传
                  • 支持单端口、多线程、客户端网络连接迁移(开源界唯一)
                  • 支持 TWCC rtcp 动态调整码率
                  • 支持 remb/pli/sr/rr rtcp
                  • 支持 rtp 扩展解析
                  • 支持 GOP 缓冲,webrtc 播放秒开
                  • 支持 datachannel
                  • 支持 webrtc over tcp 模式
                  • 优秀的 nack、jitter buffer 算法, 抗丢包能力卓越
                  • 支持 whip/whep 协议
                • ",7),de=o("
                • 其他

                  • 支持丰富的 restful api 以及 web hook 事件
                  • 支持简单的 telnet 调试
                  • 支持配置文件热加载
                  • 支持流量统计、推拉流鉴权等事件
                  • 支持虚拟主机,可以隔离不同域名
                  • 支持按需拉流,无人观看自动关断拉流
                  • 支持先播放后推流,提高及时推流画面打开率
                  • 提供完整强大的 c api sdk
                  • 支持 FFmpeg 拉流代理任意格式的流
                  • 支持 http api 生成并返回实时截图
                  • 支持按需解复用、转协议,当有人观看时才开启转协议,降低 cpu 占用率
                  • 支持溯源模式的集群部署,溯源方式支持 rtsp/rtmp/hls/http-ts, 边沿站支持 hls, 源站支持多个(采用 round robin 方式溯源)
                  • rtsp/rtmp/webrtc 推流异常断开后,可以在超时时间内重连推流,播放器无感知
                • ",1),ce=e("h2",{id:"编译以及测试",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#编译以及测试","aria-hidden":"true"},"#"),i(" 编译以及测试")],-1),he=e("h2",{id:"怎么使用",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#怎么使用","aria-hidden":"true"},"#"),i(" 怎么使用")],-1),pe=e("p",null,"你有三种方法使用 ZLMediaKit,分别是:",-1),ue={href:"https://github.com/ZLMediaKit/ZLMediaKit/tree/master/api/include",target:"_blank",rel:"noopener noreferrer"},_e={href:"https://github.com/ZLMediaKit/ZLMediaKit/tree/master/tests",target:"_blank",rel:"noopener noreferrer"},me=o(`

                  Docker 镜像

                  你可以从 Docker Hub 下载已经编译好的镜像并启动它:

                  #此镜像为github持续集成自动编译推送,跟代码(master分支)保持最新状态
                  +import{_ as d}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as c,c as h,a as e,b as l,d as i,w as s,e as o}from"./app-oTlYPy8h.js";const p={},u=e("h2",{id:"一个基于-c-11-的高性能运营级流媒体服务框架",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一个基于-c-11-的高性能运营级流媒体服务框架","aria-hidden":"true"},"#"),i(" 一个基于 C++11 的高性能运营级流媒体服务框架")],-1),_={href:"https://github.com/ZLMediaKit/ZLMediaKit/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"},m=e("img",{src:"https://img.shields.io/badge/license-MIT-green.svg",alt:"badge",loading:"lazy"},null,-1),b={href:"https://en.cppreference.com/",target:"_blank",rel:"noopener noreferrer"},g=e("img",{src:"https://img.shields.io/badge/language-c++-red.svg",alt:"badge",loading:"lazy"},null,-1),f={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},k=e("img",{src:"https://img.shields.io/badge/platform-linux | macos | windows-blue.svg",alt:"badge",loading:"lazy"},null,-1),M={href:"https://github.com/ZLMediaKit/ZLMediaKit/pulls",target:"_blank",rel:"noopener noreferrer"},S=e("img",{src:"https://img.shields.io/badge/PRs-welcome-yellow.svg",alt:"badge",loading:"lazy"},null,-1),T={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},P=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/android.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),L={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},v=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/linux.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),R={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},w=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/macos.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),H={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},K=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/windows.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),Z={href:"https://hub.docker.com/r/zlmediakit/zlmediakit/tags",target:"_blank",rel:"noopener noreferrer"},z=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/docker.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),x={href:"https://hub.docker.com/r/zlmediakit/zlmediakit/tags",target:"_blank",rel:"noopener noreferrer"},C=e("img",{src:"https://img.shields.io/docker/pulls/zlmediakit/zlmediakit",alt:"badge",loading:"lazy"},null,-1),A=e("h2",{id:"项目特点",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#项目特点","aria-hidden":"true"},"#"),i(" 项目特点")],-1),y=e("li",null,"基于 C++11 开发,避免使用裸指针,代码稳定可靠,性能优越。",-1),G=e("li",null,"支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4/WebRTC),支持协议互转。",-1),O=e("li",null,"使用多路复用/多线程/异步网络 IO 模式开发,并发性能优越,支持海量客户端连接。",-1),I=e("li",null,"代码经过长期大量的稳定性、性能测试,已经在线上商用验证已久。",-1),V=e("li",null,"支持 linux、macos、ios、android、windows 全平台。",-1),U=e("li",null,"支持 x86、arm、risc-v、mips、龙芯、申威等指令集平台。",-1),W={href:"https://github.com/ZLMediaKit/ZLMediaKit/tree/master/api/include",target:"_blank",rel:"noopener noreferrer"},D={href:"https://github.com/ZLMediaKit/ZLMediaKit/tree/master/server",target:"_blank",rel:"noopener noreferrer"},E=e("li",null,"打通了视频监控协议栈与直播协议栈,对 RTSP/RTMP 支持都很完善。",-1),F=e("li",null,"全面支持 H265/H264/AAC/G711/OPUS。",-1),B=e("li",null,"功能完善,支持集群、按需转协议、按需推拉流、先播后推、断连续推等功能。",-1),N=e("li",null,"极致性能,单机 10W 级别播放器,100Gb/s 级别 io 带宽能力。",-1),Q={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/511",target:"_blank",rel:"noopener noreferrer"},q=e("li",null,"全面支持 ipv6 网络",-1),Y=o('

                  项目定位

                  • 移动嵌入式跨平台流媒体解决方案。
                  • 商用级流媒体服务器。
                  • 网络编程二次开发 SDK。

                  功能清单

                  功能一览

                  ',4),j=o("
                • RTSP[S]

                  • RTSP[S] 服务器,支持 RTMP/MP4/HLS 转 RTSP[S] ,支持亚马逊 echo show 这样的设备
                  • RTSP[S] 播放器,支持 RTSP 代理,支持生成静音音频
                  • RTSP[S] 推流客户端与服务器
                  • 支持 rtp over udp rtp over tcp rtp over http rtp组播 四种 RTP 传输方式
                  • 服务器/客户端完整支持 Basic/Digest 方式的登录鉴权,全异步可配置化的鉴权接口
                  • 支持 H265 编码
                  • 服务器支持 RTSP 推流(包括rtp over udp rtp over tcp方式)
                  • 支持 H264/H265/AAC/G711/OPUS/MJPEG 编码,其他编码能转发但不能转协议
                • ",1),J=e("p",null,"RTMP[S]",-1),X=e("li",null,"RTMP[S] 播放服务器,支持 RTSP/MP4/HLS 转 RTMP",-1),$=e("li",null,"RTMP[S] 发布服务器,支持录制发布流",-1),ee=e("li",null,"RTMP[S] 播放器,支持 RTMP 代理,支持生成静音音频",-1),ie=e("li",null,"RTMP[S] 推流客户端",-1),le=e("li",null,"支持 http[S] -flv 直播服务器",-1),te=e("li",null,"支持 http[S] -flv 直播播放器",-1),ae=e("li",null,"支持 websocket-flv 直播",-1),se=e("li",null,"支持 H264/H265/AAC/G711/OPUS 编码,其他编码能转发但不能转协议",-1),oe={href:"https://github.com/ksvc/FFmpeg/wiki",target:"_blank",rel:"noopener noreferrer"},ne={href:"https://github.com/veovera/enhanced-rtmp",target:"_blank",rel:"noopener noreferrer"},re=o("
                • HLS

                  • 支持 HLS 文件(mpegts/fmp4)生成,自带 HTTP 文件服务器
                  • 通过 cookie 追踪技术,可以模拟 HLS 播放为长连接,可以实现 HLS 按需拉流、播放统计等业务
                  • 支持 HLS 播发器,支持拉流 HLS 转 rtsp/rtmp/mp4
                  • 支持 H264/H265/AAC/G711/OPUS 编码
                • TS

                  • 支持 http[S] -ts 直播
                  • 支持 ws[S] -ts 直播
                  • 支持 H264/H265/AAC/G711/OPUS 编码
                • fMP4

                  • 支持 http[S] -fmp4 直播
                  • 支持 ws[S] -fmp4 直播
                  • 支持 H264/H265/AAC/G711/OPUS/MJPEG 编码
                • HTTP[S] 与 WebSocket

                  • 服务器支持目录索引生成,文件下载,表单提交请求
                  • 客户端提供文件下载器(支持断点续传),接口请求器,文件上传器
                  • 完整 HTTP API 服务器,可以作为 web 后台开发框架
                  • 支持跨域访问
                  • 支持 http 客户端、服务器 cookie
                  • 支持 WebSocket 服务器和客户端
                  • 支持 http 文件访问鉴权
                • GB28181 与 RTP 推流

                  • 支持 UDP/TCP RTP(PS/TS/ES)推流服务器,可以转换成 RTSP/RTMP/HLS 等协议
                  • 支持 RTSP/RTMP/HLS 等协议转 rtp 推流客户端,支持 TCP/UDP 模式,提供相应 restful api,支持主动被动方式
                  • 支持 H264/H265/AAC/G711/OPUS 编码
                  • 支持 es/ps/ts/ehome rtp 推流
                  • 支持 es/ps rtp 转推
                  • 支持 GB28181 主动拉流模式
                  • 支持双向语音对讲
                • MP4 点播与录制

                  • 支持录制为 FLV/HLS/MP4
                  • RTSP/RTMP/HTTP-FLV/WS-FLV 支持 MP4 文件点播,支持 seek
                  • 支持 H264/H265/AAC/G711/OPUS 编码
                • WebRTC

                  • 支持 WebRTC 推流,支持转其他协议
                  • 支持 WebRTC 播放,支持其他协议转 WebRTC
                  • 支持双向 echo test
                  • 支持 simulcast 推流
                  • 支持上下行 rtx/nack 丢包重传
                  • 支持单端口、多线程、客户端网络连接迁移(开源界唯一)
                  • 支持 TWCC rtcp 动态调整码率
                  • 支持 remb/pli/sr/rr rtcp
                  • 支持 rtp 扩展解析
                  • 支持 GOP 缓冲,webrtc 播放秒开
                  • 支持 datachannel
                  • 支持 webrtc over tcp 模式
                  • 优秀的 nack、jitter buffer 算法, 抗丢包能力卓越
                  • 支持 whip/whep 协议
                • ",7),de=o("
                • 其他

                  • 支持丰富的 restful api 以及 web hook 事件
                  • 支持简单的 telnet 调试
                  • 支持配置文件热加载
                  • 支持流量统计、推拉流鉴权等事件
                  • 支持虚拟主机,可以隔离不同域名
                  • 支持按需拉流,无人观看自动关断拉流
                  • 支持先播放后推流,提高及时推流画面打开率
                  • 提供完整强大的 c api sdk
                  • 支持 FFmpeg 拉流代理任意格式的流
                  • 支持 http api 生成并返回实时截图
                  • 支持按需解复用、转协议,当有人观看时才开启转协议,降低 cpu 占用率
                  • 支持溯源模式的集群部署,溯源方式支持 rtsp/rtmp/hls/http-ts, 边沿站支持 hls, 源站支持多个(采用 round robin 方式溯源)
                  • rtsp/rtmp/webrtc 推流异常断开后,可以在超时时间内重连推流,播放器无感知
                • ",1),ce=e("h2",{id:"编译以及测试",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#编译以及测试","aria-hidden":"true"},"#"),i(" 编译以及测试")],-1),he=e("h2",{id:"怎么使用",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#怎么使用","aria-hidden":"true"},"#"),i(" 怎么使用")],-1),pe=e("p",null,"你有三种方法使用 ZLMediaKit,分别是:",-1),ue={href:"https://github.com/ZLMediaKit/ZLMediaKit/tree/master/api/include",target:"_blank",rel:"noopener noreferrer"},_e={href:"https://github.com/ZLMediaKit/ZLMediaKit/tree/master/tests",target:"_blank",rel:"noopener noreferrer"},me=o(`

                  Docker 镜像

                  你可以从 Docker Hub 下载已经编译好的镜像并启动它:

                  #此镜像为github持续集成自动编译推送,跟代码(master分支)保持最新状态
                   docker run -id -p 1935:1935 -p 8080:80 -p 8443:443 -p 8554:554 -p 10000:10000 -p 10000:10000/udp -p 8000:8000/udp -p 9000:9000/udp zlmediakit/zlmediakit:master
                   

                  你也可以根据 Dockerfile 编译镜像:

                  bash build_docker_images.sh
                   
                  `,5);function be(ge,fe){const t=n("ExternalLinkIcon"),a=n("RouterLink"),r=n("Mermaid");return c(),h("div",null,[u,e("p",null,[e("a",_,[m,l(t)]),e("a",b,[g,l(t)]),e("a",f,[k,l(t)]),e("a",M,[S,l(t)])]),e("p",null,[e("a",T,[P,l(t)]),e("a",L,[v,l(t)]),e("a",R,[w,l(t)]),e("a",H,[K,l(t)])]),e("p",null,[e("a",Z,[z,l(t)]),e("a",x,[C,l(t)])]),A,e("ul",null,[y,G,O,I,V,U,e("li",null,[i("支持画面秒开、极低延时("),l(a,{to:"/zh/reference/test/delay_test.html"},{default:s(()=>[i("500 毫秒内,最低可达 100 毫秒")]),_:1}),i(")。")]),e("li",null,[i("提供完善的标准"),e("a",W,[i("C API"),l(t)]),i(",可以作 SDK 用,或供其他语言调用。")]),e("li",null,[i("提供完整的"),e("a",D,[i("MediaServer"),l(t)]),i("服务器,可以免开发直接部署为商用服务器。")]),e("li",null,[i("提供完善的"),l(a,{to:"/zh/guide/media_server/restful_api.html"},{default:s(()=>[i("restful api")]),_:1}),i("以及"),l(a,{to:"/zh/guide/media_server/web_hook_api.html"},{default:s(()=>[i("web hook")]),_:1}),i(",支持丰富的业务逻辑。")]),E,F,B,N,e("li",null,[i("极致体验,"),l(a,{to:"/zh/reference/documents/exclusive_features.html"},{default:s(()=>[i("独家特性")]),_:1})]),e("li",null,[e("a",Q,[i("谁在使用 zlmediakit?"),l(t)])]),q]),Y,l(r,{id:"mermaid-128",code:"eJx1k99PgzAQx9/3V/QRH4jR+GB8MGHQyTKQhnYz2iwLYcyRzLGwTmOc/7vXH9BNGAn0eve5b69H67ruQJRiUzygUZGJQ13sB9K32lRf+TqrBWLBAMHj8ZTFZI5c9/FIpjRESYrINIqOaOiMt3n1UW7f0V7URaasXV2JKq82VzpZZtP+bAN4PGSMuIxeq3EUza7DiDYZZ6RBY3LXDT8Nb+9v7m+4Ge2KDfCChynzuR66YZoyDm83gMMkxlx9u8HxM5myRcJCnPJErIu63b+tEM3GHhqNYoKfmrShDCL/5y2Ki2WZTUrxq/y+9Ac8OYjdQfQ0da6oQGXLMihLsRfzVfawytw8qxE57Nc2z+BAQ8tS7Cdp4ICF6iKv6iUA+idJQLeFRN6ro00TkktF4xk2K0XlZ2H0rTi0TSXCiHab7NuqzpLAgVc7rAxE5Klw5AdJyR4AzsFCOhwwLjFwTjQDhjpAMECf7y7xzOCMXlwVss2y5zq226b4hfSoHfQCcQvEfYA5pZoxE401+25VTiROYvIiLOScOM216TDwI2niTzAzYDu3tOlIIwhTo8fof8CqKcqKNWjbu7Y86WjqA7uLnVSo2ZMSVcIfdihA0w=="}),e("ul",null,[j,e("li",null,[J,e("ul",null,[X,$,ee,ie,le,te,ae,se,e("li",null,[i("支持"),e("a",oe,[i("RTMP-H265"),l(t)])]),e("li",null,[i("支持"),l(a,{to:"/zh/reference/resources/rtmp_support_for_h265_and_opus.html"},{default:s(()=>[i("RTMP-OPUS")]),_:1})]),e("li",null,[i("支持"),e("a",ne,[i("enhanced-rtmp(H265)"),l(t)])])])]),re,e("li",null,[e("p",null,[l(a,{to:"/zh/guide/protocol/srt/"},{default:s(()=>[i("SRT 支持")]),_:1})])]),de]),ce,e("p",null,[e("strong",null,[i("编译前务必仔细参考 wiki:"),l(a,{to:"/zh/tutorial/"},{default:s(()=>[i("快速开始")]),_:1}),i("操作!!!")])]),he,pe,e("ul",null,[e("li",null,[i("1、使用 c api,作为 sdk 使用,请参考"),e("a",ue,[i("这里"),l(t)]),i(".")]),e("li",null,[i("2、作为独立的流媒体服务器使用,不想做 c/c++开发的,可以参考 "),l(a,{to:"/zh/guide/media_server/restful_api.html"},{default:s(()=>[i("restful api")]),_:1}),i(" 和 "),l(a,{to:"/zh/guide/media_server/web_hook_api.html"},{default:s(()=>[i("web hook")]),_:1}),i(".")]),e("li",null,[i("3、如果想做 c/c++开发,添加业务逻辑增加功能,可以参考这里的"),e("a",_e,[i("测试程序"),l(t)]),i(".")])]),me])}const Se=d(p,[["render",be],["__file","index.html.vue"]]);export{Se as default}; diff --git a/assets/index.html-BIyNRXIT.js b/assets/index.html-BIyNRXIT.js deleted file mode 100644 index c955889..0000000 --- a/assets/index.html-BIyNRXIT.js +++ /dev/null @@ -1,57 +0,0 @@ -import{_ as r}from"./vs_code_zh-ltEPcFYF.js";import{_ as d}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as o,o as c,c as p,a as e,d as a,b as n,w as t,e as s}from"./app-BrxqtzGY.js";const u={},m=s(`

                  1. Obtain the Source Code

                  Please refrain from downloading the source code in zip package format directly from GitHub. Instead, you should clone the ZLMediaKit code using git. This is due to ZLMediaKit's reliance on multiple third-party project codes which are not included in the zip package. Follow these steps to do this:

                  # It's recommended for users in China to download from the synchronized mirror site, gitee
                  -git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
                  -cd ZLMediaKit
                  -# Remember to execute this command
                  -git submodule update --init
                  -

                  If you're a beginner, we highly recommend compiling ZLMediaKit using Ubuntu16 or later versions. macOS is the second recommended platform. The least recommended platforms are CentOS6.* and Windows.

                  `,5),h=s(`

                  3. Compiler

                  3.1. Compiler Version Requirements

                  ZLMediaKit utilizes C++11 syntax and libraries, hence, it's required that your compiler fully supports the C++11 standard. This means:

                  • On Linux, gcc version >= 4.8 (4.7 should also be supported)
                  • On macOS, clang >= ??? (it's uncertain, but most likely won't encounter any issues)
                  • On Windows, Visual Studio >= 2015 (some versions of VS2013 can also compile, but for a smoother experience, VS2017 is recommended)

                  3.2. Installing the Compiler

                  • If you're using a Debian-based operating system (including Ubuntu), the built-in gcc version is usually recent enough. Here's how to install the gcc compiler:

                    sudo apt-get install build-essential
                    -
                  • If you're a CentOS7 or above user, here's how to install the gcc compiler:

                    sudo yum -y install gcc
                    -sudo yum -y install gcc-c++
                    -
                  • If you're a CentOS6.* user, you can install the gcc compiler this way:

                    sudo yum install centos-release-scl -y
                    -sudo yum install devtoolset-4-toolchain -y
                    -# Switch to a higher version gcc
                    -scl enable devtoolset-4 bash
                    -
                  • If you're a macOS user, you can install Xcode directly.

                  • If you're a Windows user, it's recommended to install VS2017 or later versions.

                  4. CMake

                  ZLMediaKit uses CMake to build the project. CMake is needed to generate Makefile (or Xcode/VS project), so you must install CMake to complete the subsequent steps.

                  • If you're using a Debian-based operating system (including Ubuntu), the built-in cmake version is usually recent enough. Here's how to install cmake:

                    sudo apt-get install cmake
                    -
                  • If you're a CentOS7 or above user, you might be able to install cmake this way:

                    sudo yum -y install cmake
                    -
                  • If you're a CentOS6.* user, then you need to download the new version of cmake source code and then compile and install cmake:

                    wget https://github.com/Kitware/CMake/releases/download/v3.17.0-rc3/cmake-3.17.0-rc3.tar.gz
                    -tar -xvf cmake-3.17.0-rc3.tar.gz
                    -cd cmake-3.17.0-rc3
                    -./configure
                    -make -j4
                    -sudo make install
                    -
                  • If you're a macOS user, here's how you can install cmake:

                    brew install cmake
                    -
                  • If you're a Windows user and your Visual Studio version is 2017 or later, you don't need to install cmake separately. Otherwise, you need to install cmake-gui:

                    # Install win64 version of cmake
                    -https://github.com/Kitware/CMake/releases/download/v3.17.0-rc3/cmake-3.17.0-rc3-win64-x64.zip
                    -
                    -# Install win32 version of cmake
                    -https://github.com/Kitware/CMake/releases/download/v3.17.0-rc3/cmake-3.17.0-rc3-win32-x86.zip
                    -

                  5. Dependencies

                  5.1 Dependency List

                  Most of the third-party libraries that ZLMediaKit depends on are optional. During the building of ZLMediaKit, cmake can search for these libraries in the system path and enable relevant features based on their installation status. You may choose to install these dependencies to activate associated features:

                  • openssl

                    • Flash player uses complex handshake mode when playing rtmp, and if this library is not installed, flash player will not be able to play rtmp url provided by zlmediakit.

                    • At the same time, features such as https/rtsps/webrtc of ZLMediaKit also require openssl to be activated.

                  • ffmpeg

                    • ZLMediaKit can support multiple protocols for pulling streams by forking ffmpeg as a subprocess. FFmpeg does not need to be installed during compilation.
                  • sdl, avcodec, avutil

                    • These three libraries are used by the test_player test program of ZLMediaKit. You usually do not need to install these three libraries.

                  5.2 Installing Dependencies

                  `,14),b=s(`
                • On Debian systems (including Ubuntu), use the following commands to install dependencies:

                  # Everything but openssl is optional
                  -sudo apt-get install libssl-dev
                  -sudo apt-get install libsdl-dev
                  -sudo apt-get install libavcodec-dev
                  -sudo apt-get install libavutil-dev
                  -sudo apt-get install ffmpeg
                  -
                • `,1),v={href:"https://blog.51cto.com/mengix/2452395",target:"_blank",rel:"noopener noreferrer"},g=e("li",null,[e("p",null,"To install dependencies on macOS/CentOS:"),e("p",null,"The basic installation is similar to Debian. Replace the installation commands with brew/yum. However, some library names may be different from Debian, please search for relevant information.")],-1),f=e("p",null,"To install dependencies on Windows:",-1),k=e("p",null,"Installing openssl",-1),_={href:"http://slproweb.com/products/Win32OpenSSL.html",target:"_blank",rel:"noopener noreferrer"},y=e("h2",{id:"_6-building-and-compiling-the-project",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#_6-building-and-compiling-the-project","aria-hidden":"true"},"#"),a(" 6. Building and Compiling the Project")],-1),w=s(`
                • On Linux or macOS systems, you should operate as follows:

                  cd ZLMediaKit
                  -mkdir build
                  -cd build
                  -# You may need to specify the openssl path on macOS as follows: cmake .. -DOPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2j/
                  -cmake ..
                  -make -j4
                  -
                • `,1),x=e("p",null,"On Windows system:",-1),S=s(`
                • If you are using VS2017 or above, you can directly open the project folder from the VS menu bar:

                  [File] -> [Open] -> [Folder] -> [Select ZLMediaKit code root directory and open]
                  -
                  image
                  image
                • If you are using VS2017 or earlier, you need to use cmake-gui to generate the VS project and then compile:

                  1 Enter the ZLMediaKit directory and execute git submodule update --init to download the code of ZLToolKit 2 Use cmake-gui to open the project and generate the vs project file. 3 Locate the project file (ZLMediaKit.sln), double-click to open with vs2017. 4 Choose to compile the Release version. 5 Locate the target file and run the test case.

                • ',2),L=e("li",null,[e("p",null,"If you want to compile the Android version, you can open the Android directory in Android Studio.")],-1),M={href:"https://www.jianshu.com/p/44c21296add5",target:"_blank",rel:"noopener noreferrer"},O=s(`
                  cd ZLMediaKit
                  -mkdir -p build
                  -cd build
                  -# Generate the Xcode project, the project file is in the build directory
                  -cmake .. -G Xcode -DCMAKE_TOOLCHAIN_FILE=../cmake/ios.toolchain.cmake  -DPLATFORM=OS64COMBINED
                  -
                  `,1),K=e("h2",{id:"_7-execution",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#_7-execution","aria-hidden":"true"},"#"),a(" 7. Execution")],-1),I=e("p",null,"The ZLMediaKit project mainly generates three types of binary target files, which are generated in the release directory. These target files mainly include:",-1),C=e("p",null,"MediaServer Process",-1),Z=s(`
                  • Start on Linux:

                    cd ZLMediaKit/release/linux/Debug
                    -# You can learn about the startup parameters with -h
                    -./MediaServer -h
                    -# Start in daemon mode
                    -./MediaServer -d &
                    -
                  • Start on macOS:

                    The target file directory is in ZLMediaKit/mac/Debug, and all other operations are the same.

                  • Start on Windows:

                    1 Go to the ZLMediaKit/release/windows/Debug directory
                    -2 Double-click MediaServer to start
                    -3 You can also start in cmd or powershell, and learn about startup parameters through MediaServer -h
                    -
                  `,1),T=s(`
                • C API SDK

                  ZLMediaKit also provides a C language-based API for secondary development of the SDK library. The header file is in ZLMediaKit/api/include. The library files are:

                  • On Linux:

                    ZLMediaKit/release/linux/Debug/libmk_api.so
                    -
                  • On macOS:

                    ZLMediaKit/release/linux/mac/libmk_api.dylib
                    -
                  • On Windows:

                    ZLMediaKit/release/windows/Debug/mk_api.dll
                    -ZLMediaKit/release/windows/Debug/mk_api.lib
                    -

                  The SDK header file has detailed comments, which are generally sufficient for secondary development.

                • Test programs starting with test_

                  The related code is in the ZLMediaKit/tests directory, and you can refer to the code to start the test process.

                • `,2),D=e("h2",{id:"_8-testing",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#_8-testing","aria-hidden":"true"},"#"),a(" 8. Testing")],-1);function j(V,z){const i=o("RouterLink"),l=o("ExternalLinkIcon");return c(),p("div",null,[m,e("p",null,[a("zlmediakit has been launched on vcpkg, please refer to "),n(i,{to:"/guide/install/install_zlmediakit_using_vcpkg.html"},{default:t(()=>[a("install zlmediakit using vcpkg")]),_:1}),a(" for convenient installation.")]),h,e("ul",null,[b,e("li",null,[e("p",null,[a("Users of centos6.* can refer to this "),e("a",v,[a("article"),n(l)]),a(".")])]),g,e("li",null,[f,e("ul",null,[e("li",null,[k,e("p",null,[a("Please download from this "),e("a",_,[a("website"),n(l)]),a(".")])])])])]),y,e("p",null,[a("The activation of webrtc related features is complex and is not enabled for compilation by default. If you are interested in the webrtc feature of zlmediakit, you can refer to "),n(i,{to:"/guide/protocol/webrtc/webrtc_compilation_and_use.html"},{default:t(()=>[a("here")]),_:1}),a(".")]),e("ul",null,[w,e("li",null,[x,e("ul",null,[S,e("li",null,[e("p",null,[a("Also, you can refer to "),n(i,{to:"/guide/install/compilation_instructions_for_windows_version.html"},{default:t(()=>[a("here")]),_:1}),a(" for Windows compilation.")])])])]),L,e("li",null,[e("p",null,[a("If you want to compile the iOS version, you can generate the Xcode project and then compile the C API static library. In addition, you can refer to this "),e("a",M,[a("document"),n(l)]),a(".")]),O])]),K,I,e("ul",null,[e("li",null,[C,e("p",null,[a("This is the main process of ZLMediaKit as a server. This process can be used directly as a streaming media server for testing without any development. If you need more complex business logic, you can implement it through "),n(i,{to:"/guide/media_server/web_hook_api.html"},{default:t(()=>[a("Web HOOK")]),_:1}),a(" and "),n(i,{to:"/guide/media_server/restful_api.html"},{default:t(()=>[a("RESTful API")]),_:1}),a(". At the same time, you can control its parameters through the "),n(i,{to:"/guide/media_server/config_file.html"},{default:t(()=>[a("configuration file")]),_:1}),a(".")]),Z]),T]),D,e("p",null,[a("Please refer to "),n(i,{to:"/guide/media_server/push_test.html"},{default:t(()=>[a("this article")]),_:1}),a(" to complete the stream push and play test.")])])}const R=d(u,[["render",j],["__file","index.html.vue"]]);export{R as default}; diff --git a/assets/index.html-CKp0mPwh.js b/assets/index.html-CKp0mPwh.js new file mode 100644 index 0000000..4a3ce95 --- /dev/null +++ b/assets/index.html-CKp0mPwh.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-lsbyji4m.js b/assets/index.html-CSg2VFea.js similarity index 71% rename from assets/index.html-lsbyji4m.js rename to assets/index.html-CSg2VFea.js index 7ae3da8..cc800fc 100644 --- a/assets/index.html-lsbyji4m.js +++ b/assets/index.html-CSg2VFea.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as t,c}from"./app-BrxqtzGY.js";const o={};function r(n,_){return t(),c("div")}const f=e(o,[["render",r],["__file","index.html.vue"]]);export{f as default}; +import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as t,c}from"./app-oTlYPy8h.js";const o={};function r(n,_){return t(),c("div")}const f=e(o,[["render",r],["__file","index.html.vue"]]);export{f as default}; diff --git a/assets/index.html-CmVSRxAE.js b/assets/index.html-CmVSRxAE.js new file mode 100644 index 0000000..4a3ce95 --- /dev/null +++ b/assets/index.html-CmVSRxAE.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-D9OOw5jZ.js b/assets/index.html-D9OOw5jZ.js new file mode 100644 index 0000000..4a3ce95 --- /dev/null +++ b/assets/index.html-D9OOw5jZ.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-EkebsPUs.js b/assets/index.html-EkebsPUs.js deleted file mode 100644 index fe90dd6..0000000 --- a/assets/index.html-EkebsPUs.js +++ /dev/null @@ -1,62 +0,0 @@ -import{_ as c}from"./vs_code_zh-ltEPcFYF.js";import{_ as p}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as d,o,c as r,a,d as n,b as e,w as l,e as s}from"./app-BrxqtzGY.js";const u={},m=s(`

                  1、获取代码

                  请不要使用 github 下载 zip 包的方式下载源码,务必使用 git 克隆 ZLMediaKit 的代码,因为 ZLMediaKit 依赖于第三方代码,zip 包不会下载第三方依赖源码,你可以这样操作:

                  #国内用户推荐从同步镜像网站gitee下载
                  -git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
                  -cd ZLMediaKit
                  -#千万不要忘记执行这句命令
                  -git submodule update --init
                  -

                  2、强烈推荐

                  如果你是位新手,强烈建议使用 ubuntu16 或更新版本编译 ZLMediaKit,macOS 是次选推荐平台,最不推荐的是 centos6.*或 windows 平台。

                  `,5),v=s(`

                  3、编译器

                  3.1、编译器版本要求

                  ZLMediaKit 采用了 C++11 的语法和库,要求编译器支持完整的 C++11 标准,亦即:

                  • linux 上要求 gcc 版本 >= 4.8(4.7 应该也能支持)
                  • macOS 上 clang >= ???(我也不知道,估计大部分不会遇到这个问题)
                  • windows 上 visual stuido >= 2015(vs2013 某些版本也能编译通过,如果怕麻烦建议直接 vs2017)

                  3.2、安装编译器

                  • 如果你是 debian 系操作系统(包括 ubuntu 系用户),一般自带的 gcc 版本够新,你可以这样安装 gcc 编译器:

                    sudo apt-get install build-essential
                    -
                  • 如果你是 centos7 或以上用户,你可以这样安装 gcc 编译器:

                    sudo yum -y install gcc
                    -sudo yum -y install gcc-c++
                    -
                  • 如果你是 centos6.*用户,你可以这样安装 gcc 编译器:

                    sudo yum install centos-release-scl -y
                    -sudo yum install devtoolset-4-toolchain -y
                    -#切换到高版本gcc
                    -scl enable devtoolset-4 bash
                    -
                  • 如果你是 macOS 用户,你直接安装 xcode 即可。

                  • 如果你是 windows 用户,推荐安装 vs2017 或以上。

                  4、cmake

                  ZLMediaKit 采用 cmake 来构建项目,通过 cmake 才能生成 Makefile(或 Xcode/VS 工程),所以必须先安装 cmake 才能完成后续步骤。

                  • 如果你是 debian 系操作系统(包括 ubuntu 系用户),一般自带的 cmake 版本够新,你可以这样安装 cmake

                    sudo apt-get install cmake
                    -
                  • 如果你是 centos7 或以上用户,你也许可以这样安装 cmake:

                    sudo yum -y install cmake
                    -
                  • 如果你是 centos6.*用户,那么你需要下载新版本的 cmake 源码然后编译安装 cmake

                    wget https://github.com/Kitware/CMake/releases/download/v3.17.0-rc3/cmake-3.17.0-rc3.tar.gz
                    -tar -xvf cmake-3.17.0-rc3.tar.gz
                    -cd cmake-3.17.0-rc3
                    -./configure
                    -make -j4
                    -sudo make install
                    -
                  • 如果你是 macOS 用户,你可以这样安装 cmake:

                    brew install cmake
                    -
                  • 如果你是 windows 用户,并且 vs 版本为 2017 及以上,你不用单独安装 cmake,否则你需要安装 cmake-gui:

                    #安装win64版本cmake
                    -https://github.com/Kitware/CMake/releases/download/v3.17.0-rc3/cmake-3.17.0-rc3-win64-x64.zip
                    -
                    -#安装win32版本cmake
                    -https://github.com/Kitware/CMake/releases/download/v3.17.0-rc3/cmake-3.17.0-rc3-win32-x86.zip
                    -

                  5、依赖库

                  5.1、依赖库列表

                  ZLMediaKit 可选依赖一些第三方库,这些库都不是必选的;在构建 ZLMediaKit 时,cmake 能查找系统路径中的这些库,并根据安装情况选择是否开启相关特性,你可以选择安装这些依赖并启用相关特性:

                  • openssl

                    • flash player 在播放 rtmp 时,采用的是复杂握手模式,如果不安装该库,flash player 将播放不了 zlmediakit 提供的 rtmp url.

                    • 同时 ZLMediaKit 的 https/rtsps/webrtc 相关功能需要使用 openssl 才能开启。

                  • ffmpeg

                    zlmediakit 可以通过 fork ffmpeg 进程的方式实现多种协议的拉流,编译时不需要安装 FFmpeg。

                  • sdl、avcodec、avutil

                    这 3 个库供 ZLMediaKit 的 test_player 测试程序使用,你通常不需要安装这 3 个库。

                  5.2、安装依赖库

                  `,14),b=s(`
                • Debian 系(包括 ubuntu)系统下安装依赖的方法:

                  #除了openssl,其他其实都可以不安装
                  -sudo apt-get install libssl-dev
                  -sudo apt-get install libsdl-dev
                  -sudo apt-get install libavcodec-dev
                  -sudo apt-get install libavutil-dev
                  -sudo apt-get install ffmpeg
                  -
                • `,1),h={href:"https://blog.51cto.com/mengix/2452395",target:"_blank",rel:"noopener noreferrer"},k=a("li",null,[a("p",null,"macOS/centos 下安装依赖库:"),a("p",null,"基本安装方式跟 Debian 系安装差不多,安装命令分别改成 brew / yum 即可。但是有些库名字与 Debian 系不太一样,请自行查找相关资料。")],-1),g=a("p",null,"windows 下安装依赖库",-1),_=a("p",null,"安装 openssl",-1),f={href:"http://slproweb.com/products/Win32OpenSSL.html",target:"_blank",rel:"noopener noreferrer"},x=a("h2",{id:"_6、构建和编译项目",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#_6、构建和编译项目","aria-hidden":"true"},"#"),n(" 6、构建和编译项目")],-1),w=s(`
                • 在 linux 或 macOS 系统下,你应该这样操作:

                  cd ZLMediaKit
                  -mkdir build
                  -cd build
                  -#macOS下可能需要这样指定openss路径:cmake .. -DOPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2j/
                  -cmake ..
                  -make -j4
                  -
                • `,1),M=s(`

                  在 windows 系统下

                  • 如果你是 vs2017 或以上,可以在 vs 菜单栏中直接打开项目文件夹:

                    [文件] -> [打开] -> [文件夹] -> [选择ZLMediaKit代码根目录并打开]
                    -
                  image
                  image
                  ',3),L=s(`
                • 如果你是 vs2017 以下版本,你需要使用 cmake-gui 生成 vs 工程然后编译:

                  1 进入ZLMediaKit目录执行 git submodule update --init 以下载ZLToolKit的代码
                  -2 使用cmake-gui打开工程并生成vs工程文件.
                  -3 找到工程文件(ZLMediaKit.sln),双击用vs2017打开.
                  -4 选择编译Release 版本.
                  -5 找到目标文件并运行测试用例.
                  -
                • `,1),K=a("li",null,[a("p",null,"如果你要编译 Android 版本,你可以自己在 Android Studio 中打开 Android 目录。")],-1),Z={href:"https://www.jianshu.com/p/44c21296add5",target:"_blank",rel:"noopener noreferrer"},S=s(`
                  cd ZLMediaKit
                  -mkdir -p build
                  -cd build
                  -# 生成Xcode工程,工程文件在build目录下
                  -cmake .. -G Xcode -DCMAKE_TOOLCHAIN_FILE=../cmake/ios.toolchain.cmake  -DPLATFORM=OS64COMBINED
                  -
                  `,1),z=a("h2",{id:"_7、运行",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#_7、运行","aria-hidden":"true"},"#"),n(" 7、运行")],-1),O=a("p",null,"ZLMediaKit 工程主要生成 3 种二进制目标文件,他们的生成的路径在 release 目录下,这些目标文件主要分为:",-1),y=a("p",null,"MediaServer 进程",-1),D=s(`
                  • 在 linux 下启动:

                    cd ZLMediaKit/release/linux/Debug
                    -#通过-h可以了解启动参数
                    -./MediaServer -h
                    -#以守护进程模式启动
                    -./MediaServer -d &
                    -
                  • 在 macos 下启动:

                    目标文件目录在 ZLMediaKit/mac/Debug,其他操作完全一致。

                  • 在 window 下启动:

                    1 进入ZLMediaKit/release/windows/Debug目录
                    -2 双击MediaServer启动
                    -3 你也可以在cmd或powershell中启动,通过MediaServer -h了解启动参数
                    -
                  `,1),C=s(`
                • c api 的 SDK

                  ZLMediaKit 也提供 c 的 api 二次开发 sdk 库,头文件在ZLMediaKit/api/include,库文件为:

                  • linux 下:

                    ZLMediaKit/release/linux/Debug/libmk_api.so
                    -
                  • macOS 下:

                    ZLMediaKit/release/linux/mac/libmk_api.dylib
                    -
                  • windows 下:

                    ZLMediaKit/release/windows/Debug/mk_api.dll
                    -ZLMediaKit/release/windows/Debug/mk_api.lib
                    -

                    SDK 头文件有详细的注释,一般足够二次开发使用。

                • test_开头的测试程序

                  相关代码在ZLMediaKit/tests目录下,你可以对照代码启动测试进程。

                • `,2),E=a("h2",{id:"_8、测试",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#_8、测试","aria-hidden":"true"},"#"),n(" 8、测试")],-1);function A(I,N){const i=d("RouterLink"),t=d("ExternalLinkIcon");return o(),r("div",null,[m,a("p",null,[n("zlmediakit 已上架 vcpkg,便捷安装请参考"),e(i,{to:"/zh/guide/install/install_zlmediakit_using_vcpkg.html"},{default:l(()=>[n("vcpkg 安装 zlmediakit")]),_:1})]),v,a("ul",null,[b,a("li",null,[a("p",null,[n("centos6.*的用户可以参考该"),a("a",h,[n("文章"),e(t)])])]),k,a("li",null,[g,a("ul",null,[a("li",null,[_,a("p",null,[n("请从"),a("a",f,[n("网站"),e(t)]),n("中下载。")])])])])]),x,a("p",null,[n("由于开启 webrtc 相关功能比较复杂,默认是不开启编译的,如果你对 zlmediakit 的 webrtc 功能比较感兴趣,可以参考"),e(i,{to:"/zh/guide/protocol/webrtc/webrtc_compilation_and_use.html"},{default:l(()=>[n("这里")]),_:1})]),a("ul",null,[w,a("li",null,[M,a("ul",null,[L,a("li",null,[a("p",null,[n("同时,Windows 编译也可以参考"),e(i,{to:"/zh/guide/install/compilation_instructions_for_windows_version.html"},{default:l(()=>[n("这里")]),_:1})])])])]),K,a("li",null,[a("p",null,[n("如果你要编译 ios 版本,可以生成 xcode 工程然后编译 c api 的静态库;另外,你可以参考此"),a("a",Z,[n("文档"),e(t)])]),S])]),z,O,a("ul",null,[a("li",null,[y,a("p",null,[n("这是 ZLMediaKit 作为服务器的主进程,该进程可以在免去开发的情况下直接作为测试流媒体服务器使用,如果你需要更复杂的业务逻辑,可以通过[Web HOOK](../guide/media_server/web_hook_api. md)和"),e(i,{to:"/zh/guide/media_server/restful_api.html"},{default:l(()=>[n("RESTful API")]),_:1}),n("实现,同时你可以通过"),e(i,{to:"/zh/guide/media_server/config_file.html"},{default:l(()=>[n("配置文件")]),_:1}),n("控制其参数。")]),D]),C]),E,a("p",null,[n("请参考"),e(i,{to:"/zh/guide/media_server/push_test.html"},{default:l(()=>[n("此文章")]),_:1}),n("完成推流播放测试")])])}const j=p(u,[["render",A],["__file","index.html.vue"]]);export{j as default}; diff --git a/assets/index.html-GEt_McOE.js b/assets/index.html-GEt_McOE.js deleted file mode 100644 index 0d520cf..0000000 --- a/assets/index.html-GEt_McOE.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-ec228f2e","path":"/zh/tutorial/","title":"快速开始","lang":"zh-CN","frontmatter":{"title":"快速开始","icon":"lightbulb","description":"本教程将指导您完成编译和运行ZLMediaKit.","head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://docs.ZLMediaKit.com/tutorial/"}],["meta",{"property":"og:url","content":"https://docs.ZLMediaKit.com/zh/tutorial/"}],["meta",{"property":"og:site_name","content":"ZLMediaKit"}],["meta",{"property":"og:title","content":"快速开始"}],["meta",{"property":"og:description","content":"本教程将指导您完成编译和运行ZLMediaKit."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2023-12-05T08:36:26.000Z"}],["meta",{"property":"article:author","content":"ZLMediaKit"}],["meta",{"property":"article:modified_time","content":"2023-12-05T08:36:26.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"快速开始\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2023-12-05T08:36:26.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"ZLMediaKit\\",\\"url\\":\\"https://docs.ZLMediaKit.com\\"}]}"]]},"headers":[{"level":2,"title":"1、获取代码","slug":"_1、获取代码","link":"#_1、获取代码","children":[]},{"level":2,"title":"2、强烈推荐","slug":"_2、强烈推荐","link":"#_2、强烈推荐","children":[]},{"level":2,"title":"3、编译器","slug":"_3、编译器","link":"#_3、编译器","children":[{"level":3,"title":"3.1、编译器版本要求","slug":"_3-1、编译器版本要求","link":"#_3-1、编译器版本要求","children":[]},{"level":3,"title":"3.2、安装编译器","slug":"_3-2、安装编译器","link":"#_3-2、安装编译器","children":[]}]},{"level":2,"title":"4、cmake","slug":"_4、cmake","link":"#_4、cmake","children":[]},{"level":2,"title":"5、依赖库","slug":"_5、依赖库","link":"#_5、依赖库","children":[{"level":3,"title":"5.1、依赖库列表","slug":"_5-1、依赖库列表","link":"#_5-1、依赖库列表","children":[]},{"level":3,"title":"5.2、安装依赖库","slug":"_5-2、安装依赖库","link":"#_5-2、安装依赖库","children":[]}]},{"level":2,"title":"6、构建和编译项目","slug":"_6、构建和编译项目","link":"#_6、构建和编译项目","children":[]},{"level":2,"title":"7、运行","slug":"_7、运行","link":"#_7、运行","children":[]},{"level":2,"title":"8、测试","slug":"_8、测试","link":"#_8、测试","children":[]}],"git":{"createdTime":1696882519000,"updatedTime":1701765386000,"contributors":[{"name":"Alex","email":"liyu7352@gmail.com","commits":2},{"name":"Mr.Hope","email":"mister-hope@outlook.com","commits":1}]},"readingTime":{"minutes":5.73,"words":1718},"filePathRelative":"zh/tutorial/README.md","localizedDate":"2023年10月9日"}');export{e as data}; diff --git a/assets/index.html-H5ajPWzC.js b/assets/index.html-H5ajPWzC.js deleted file mode 100644 index 1c98be5..0000000 --- a/assets/index.html-H5ajPWzC.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-HffK__w0.js b/assets/index.html-HffK__w0.js deleted file mode 100644 index 1c98be5..0000000 --- a/assets/index.html-HffK__w0.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-HiksATK8.js b/assets/index.html-HiksATK8.js deleted file mode 100644 index 1c98be5..0000000 --- a/assets/index.html-HiksATK8.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-HppSEYlS.js b/assets/index.html-HppSEYlS.js new file mode 100644 index 0000000..4a3ce95 --- /dev/null +++ b/assets/index.html-HppSEYlS.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-HxIzy8B_.js b/assets/index.html-HxIzy8B_.js deleted file mode 100644 index 1c98be5..0000000 --- a/assets/index.html-HxIzy8B_.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-c9Q-kbo9.js b/assets/index.html-IZsaCX79.js similarity index 82% rename from assets/index.html-c9Q-kbo9.js rename to assets/index.html-IZsaCX79.js index c89ddd4..1e9733c 100644 --- a/assets/index.html-c9Q-kbo9.js +++ b/assets/index.html-IZsaCX79.js @@ -1 +1 @@ -import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as o,o as s,c as i,a as e,b as a,w as l,d as t}from"./app-BrxqtzGY.js";const c={},d=e("h2",{id:"category",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#category","aria-hidden":"true"},"#"),t(" Category")],-1);function _(u,h){const r=o("RouterLink");return s(),i("div",null,[d,e("ul",null,[e("li",null,[e("p",null,[a(r,{to:"/zh/guide/media_server/play_url_rules.html"},{default:l(()=>[t("Playing URL Rules")]),_:1})])]),e("li",null,[e("p",null,[a(r,{to:"/zh/guide/media_server/start_server.html"},{default:l(()=>[t("Starting and Stopping the Server")]),_:1})])])])])}const f=n(c,[["render",_],["__file","index.html.vue"]]);export{f as default}; +import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as o,o as s,c as i,a as e,b as a,w as l,d as t}from"./app-oTlYPy8h.js";const c={},d=e("h2",{id:"category",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#category","aria-hidden":"true"},"#"),t(" Category")],-1);function _(u,h){const r=o("RouterLink");return s(),i("div",null,[d,e("ul",null,[e("li",null,[e("p",null,[a(r,{to:"/zh/guide/media_server/play_url_rules.html"},{default:l(()=>[t("Playing URL Rules")]),_:1})])]),e("li",null,[e("p",null,[a(r,{to:"/zh/guide/media_server/start_server.html"},{default:l(()=>[t("Starting and Stopping the Server")]),_:1})])])])])}const f=n(c,[["render",_],["__file","index.html.vue"]]);export{f as default}; diff --git a/assets/index.html-JQu_RH6f.js b/assets/index.html-JQu_RH6f.js new file mode 100644 index 0000000..8641a39 --- /dev/null +++ b/assets/index.html-JQu_RH6f.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-ec228f2e","path":"/zh/tutorial/","title":"快速开始","lang":"zh-CN","frontmatter":{"title":"快速开始","icon":"lightbulb","description":"本教程将指导您完成编译和运行 ZLMediaKit。 构建环境 新手提示 如果你是位新手,强烈建议使用 Ubuntu16 以上版本编译 ZLMediaKit,macOS 是次选推荐平台。不推荐使用 CentOS6.x 或 windows 构建与使用。 vcpkg ZLMediaKit 已上架 vcpkg,便捷安装请参考 vcpkg 安装 ZLMedia...","head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://docs.ZLMediaKit.com/tutorial/"}],["meta",{"property":"og:url","content":"https://docs.ZLMediaKit.com/zh/tutorial/"}],["meta",{"property":"og:site_name","content":"ZLMediaKit"}],["meta",{"property":"og:title","content":"快速开始"}],["meta",{"property":"og:description","content":"本教程将指导您完成编译和运行 ZLMediaKit。 构建环境 新手提示 如果你是位新手,强烈建议使用 Ubuntu16 以上版本编译 ZLMediaKit,macOS 是次选推荐平台。不推荐使用 CentOS6.x 或 windows 构建与使用。 vcpkg ZLMediaKit 已上架 vcpkg,便捷安装请参考 vcpkg 安装 ZLMedia..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2023-12-06T10:57:19.000Z"}],["meta",{"property":"article:author","content":"ZLMediaKit"}],["meta",{"property":"article:modified_time","content":"2023-12-06T10:57:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"快速开始\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2023-12-06T10:57:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"ZLMediaKit\\",\\"url\\":\\"https://docs.ZLMediaKit.com\\"}]}"]]},"headers":[{"level":2,"title":"构建环境","slug":"构建环境","link":"#构建环境","children":[{"level":3,"title":"支持 C++11 的编译器","slug":"支持-c-11-的编译器","link":"#支持-c-11-的编译器","children":[]},{"level":3,"title":"CMake","slug":"cmake","link":"#cmake","children":[]}]},{"level":2,"title":"获取代码","slug":"获取代码","link":"#获取代码","children":[{"level":3,"title":"安装依赖库","slug":"安装依赖库","link":"#安装依赖库","children":[]}]},{"level":2,"title":"构建与编译 ZLMediaKit","slug":"构建与编译-zlmediakit","link":"#构建与编译-zlmediakit","children":[]},{"level":2,"title":"运行 ZLMediaKit","slug":"运行-zlmediakit","link":"#运行-zlmediakit","children":[{"level":3,"title":"MediaServer 进程","slug":"mediaserver-进程","link":"#mediaserver-进程","children":[]},{"level":3,"title":"C 接口的 SDK","slug":"c-接口的-sdk","link":"#c-接口的-sdk","children":[]},{"level":3,"title":"以 test_ 开头的测试程序","slug":"以-test-开头的测试程序","link":"#以-test-开头的测试程序","children":[]}]},{"level":2,"title":"推流测试","slug":"推流测试","link":"#推流测试","children":[]}],"git":{"createdTime":1696882519000,"updatedTime":1701860239000,"contributors":[{"name":"Alex","email":"liyu7352@gmail.com","commits":2},{"name":"Mr.Hope","email":"mister-hope@outlook.com","commits":2}]},"readingTime":{"minutes":4.35,"words":1306},"filePathRelative":"zh/tutorial/README.md","localizedDate":"2023年10月9日","autoDesc":true}');export{e as data}; diff --git a/assets/index.html-LudGOU3A.js b/assets/index.html-LudGOU3A.js new file mode 100644 index 0000000..4a3ce95 --- /dev/null +++ b/assets/index.html-LudGOU3A.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-MCTXxKe2.js b/assets/index.html-MCTXxKe2.js deleted file mode 100644 index 1c98be5..0000000 --- a/assets/index.html-MCTXxKe2.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-NvUp90i0.js b/assets/index.html-NvUp90i0.js deleted file mode 100644 index 1c98be5..0000000 --- a/assets/index.html-NvUp90i0.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-P9T-kKXm.js b/assets/index.html-P9T-kKXm.js deleted file mode 100644 index 1c98be5..0000000 --- a/assets/index.html-P9T-kKXm.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-PiOevGXi.js b/assets/index.html-PiOevGXi.js deleted file mode 100644 index f85f6e1..0000000 --- a/assets/index.html-PiOevGXi.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-639495b8","path":"/tutorial/","title":"Tutorial","lang":"en-US","frontmatter":{"title":"Tutorial","icon":"lightbulb","description":"This tutorial will guide you through the process of compiling and running ZLMediaKit.","head":[["link",{"rel":"alternate","hreflang":"zh-cn","href":"https://docs.ZLMediaKit.com/zh/tutorial/"}],["meta",{"property":"og:url","content":"https://docs.ZLMediaKit.com/tutorial/"}],["meta",{"property":"og:site_name","content":"ZLMediaKit"}],["meta",{"property":"og:title","content":"Tutorial"}],["meta",{"property":"og:description","content":"This tutorial will guide you through the process of compiling and running ZLMediaKit."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2023-12-05T08:36:26.000Z"}],["meta",{"property":"article:author","content":"ZLMediaKit"}],["meta",{"property":"article:modified_time","content":"2023-12-05T08:36:26.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"Tutorial\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2023-12-05T08:36:26.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"ZLMediaKit\\",\\"url\\":\\"https://docs.ZLMediaKit.com\\"}]}"]]},"headers":[{"level":2,"title":"1. Obtain the Source Code","slug":"_1-obtain-the-source-code","link":"#_1-obtain-the-source-code","children":[]},{"level":2,"title":"2. Strongly Recommended","slug":"_2-strongly-recommended","link":"#_2-strongly-recommended","children":[]},{"level":2,"title":"3. Compiler","slug":"_3-compiler","link":"#_3-compiler","children":[{"level":3,"title":"3.1. Compiler Version Requirements","slug":"_3-1-compiler-version-requirements","link":"#_3-1-compiler-version-requirements","children":[]},{"level":3,"title":"3.2. Installing the Compiler","slug":"_3-2-installing-the-compiler","link":"#_3-2-installing-the-compiler","children":[]}]},{"level":2,"title":"4. CMake","slug":"_4-cmake","link":"#_4-cmake","children":[]},{"level":2,"title":"5. Dependencies","slug":"_5-dependencies","link":"#_5-dependencies","children":[{"level":3,"title":"5.1 Dependency List","slug":"_5-1-dependency-list","link":"#_5-1-dependency-list","children":[]},{"level":3,"title":"5.2 Installing Dependencies","slug":"_5-2-installing-dependencies","link":"#_5-2-installing-dependencies","children":[]}]},{"level":2,"title":"6. Building and Compiling the Project","slug":"_6-building-and-compiling-the-project","link":"#_6-building-and-compiling-the-project","children":[]},{"level":2,"title":"7. Execution","slug":"_7-execution","link":"#_7-execution","children":[]},{"level":2,"title":"8. Testing","slug":"_8-testing","link":"#_8-testing","children":[]}],"git":{"createdTime":1696882519000,"updatedTime":1701765386000,"contributors":[{"name":"Alex","email":"liyu7352@gmail.com","commits":2},{"name":"Mr.Hope","email":"mister-hope@outlook.com","commits":1}]},"readingTime":{"minutes":4.52,"words":1356},"filePathRelative":"tutorial/README.md","localizedDate":"October 9, 2023"}');export{e as data}; diff --git a/assets/index.html-Q_J0RuMe.js b/assets/index.html-Q_J0RuMe.js deleted file mode 100644 index 1c98be5..0000000 --- a/assets/index.html-Q_J0RuMe.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-QkbwDjsA.js b/assets/index.html-QkbwDjsA.js new file mode 100644 index 0000000..344eacf --- /dev/null +++ b/assets/index.html-QkbwDjsA.js @@ -0,0 +1 @@ +const e=JSON.parse(`{"key":"v-639495b8","path":"/tutorial/","title":"Tutorial","lang":"en-US","frontmatter":{"title":"Tutorial","icon":"lightbulb","description":"This tutorial will guide you compiling and running ZLMediaKit. Build Environment Beginner Notice If you're a beginner, we highly recommend compiling ZLMediaKit using Ubuntu16 or...","head":[["link",{"rel":"alternate","hreflang":"zh-cn","href":"https://docs.ZLMediaKit.com/zh/tutorial/"}],["meta",{"property":"og:url","content":"https://docs.ZLMediaKit.com/tutorial/"}],["meta",{"property":"og:site_name","content":"ZLMediaKit"}],["meta",{"property":"og:title","content":"Tutorial"}],["meta",{"property":"og:description","content":"This tutorial will guide you compiling and running ZLMediaKit. Build Environment Beginner Notice If you're a beginner, we highly recommend compiling ZLMediaKit using Ubuntu16 or..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2023-12-06T11:01:53.000Z"}],["meta",{"property":"article:author","content":"ZLMediaKit"}],["meta",{"property":"article:modified_time","content":"2023-12-06T11:01:53.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"Tutorial\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2023-12-06T11:01:53.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"ZLMediaKit\\",\\"url\\":\\"https://docs.ZLMediaKit.com\\"}]}"]]},"headers":[{"level":2,"title":"Build Environment","slug":"build-environment","link":"#build-environment","children":[{"level":3,"title":"Compiler Supporting C++11","slug":"compiler-supporting-c-11","link":"#compiler-supporting-c-11","children":[]},{"level":3,"title":"CMake","slug":"cmake","link":"#cmake","children":[]}]},{"level":2,"title":"Obtain Source Code","slug":"obtain-source-code","link":"#obtain-source-code","children":[{"level":3,"title":"3rd party Dependencies","slug":"_3rd-party-dependencies","link":"#_3rd-party-dependencies","children":[]}]},{"level":2,"title":"Building and Compiling ZLMediaKit","slug":"building-and-compiling-zlmediakit","link":"#building-and-compiling-zlmediakit","children":[]},{"level":2,"title":"Run ZLMediaKit","slug":"run-zlmediakit","link":"#run-zlmediakit","children":[{"level":3,"title":"MediaServer Process","slug":"mediaserver-process","link":"#mediaserver-process","children":[]},{"level":3,"title":"C API SDK","slug":"c-api-sdk","link":"#c-api-sdk","children":[]},{"level":3,"title":"Test programs starting with test_","slug":"test-programs-starting-with-test","link":"#test-programs-starting-with-test","children":[]}]},{"level":2,"title":"Stream Testing","slug":"stream-testing","link":"#stream-testing","children":[]}],"git":{"createdTime":1696882519000,"updatedTime":1701860513000,"contributors":[{"name":"Mr.Hope","email":"mister-hope@outlook.com","commits":3},{"name":"Alex","email":"liyu7352@gmail.com","commits":2}]},"readingTime":{"minutes":3.5,"words":1051},"filePathRelative":"tutorial/README.md","localizedDate":"October 9, 2023","autoDesc":true}`);export{e as data}; diff --git a/assets/index.html-UtNsP0-c.js b/assets/index.html-UtNsP0-c.js new file mode 100644 index 0000000..8cd177a --- /dev/null +++ b/assets/index.html-UtNsP0-c.js @@ -0,0 +1,71 @@ +import{_ as r}from"./vs_code_zh-ltEPcFYF.js";import{_ as u}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as d,o as p,c as m,f as b,a as e,d as n,b as t,w as a,e as h}from"./app-oTlYPy8h.js";const v={},g=e("p",null,"This tutorial will guide you compiling and running ZLMediaKit.",-1),_=e("h2",{id:"build-environment",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#build-environment","aria-hidden":"true"},"#"),n(" Build Environment")],-1),k=e("div",{class:"hint-container tip"},[e("p",{class:"hint-container-title"},"Beginner Notice"),e("p",null,"If you're a beginner, we highly recommend compiling ZLMediaKit using Ubuntu16 or later versions. macOS is the second recommended platform. We don't recommend using CentOS6.x or Windows.")],-1),f={class:"hint-container info"},w=e("p",{class:"hint-container-title"},"vcpkg",-1),y=e("h3",{id:"compiler-supporting-c-11",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#compiler-supporting-c-11","aria-hidden":"true"},"#"),n(" Compiler Supporting C++11")],-1),x=e("p",null,"ZLMediaKit uses C++11 syntax and libraries, hence, it's required that your compiler fully supports the C++11 standard. This means:",-1),A=e("ul",null,[e("li",null,"On Linux, gcc version >= 4.8 (4.7 should also be supported)"),e("li",null,"On macOS, clang >= ??? (it's uncertain, but most likely won't encounter any issues)"),e("li",null,"On Windows, Visual Studio >= 2015 (some versions of VS2013 can also compile, but for a smoother experience, VS2017 is recommended)")],-1),S=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"sudo"),n(),e("span",{class:"token function"},"apt"),n(),e("span",{class:"token function"},"install"),n(` build-essential +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])],-1),L=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"sudo"),n(" yum "),e("span",{class:"token parameter variable"},"-y"),n(),e("span",{class:"token function"},"install"),n(` gcc +`),e("span",{class:"token function"},"sudo"),n(" yum "),e("span",{class:"token parameter variable"},"-y"),n(),e("span",{class:"token function"},"install"),n(` gcc-c++ +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),O=e("p",null,"You need to manually switch to a higher version of gcc.",-1),M=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"sudo"),n(" yum "),e("span",{class:"token function"},"install"),n(" centos-release-scl "),e("span",{class:"token parameter variable"},"-y"),n(` +`),e("span",{class:"token function"},"sudo"),n(" yum "),e("span",{class:"token function"},"install"),n(" devtoolset-4-toolchain "),e("span",{class:"token parameter variable"},"-y"),n(` +`),e("span",{class:"token comment"},"# Switch to a higher version gcc"),n(` +scl `),e("span",{class:"token builtin class-name"},"enable"),n(" devtoolset-4 "),e("span",{class:"token function"},"bash"),n(` +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),C={href:"https://developer.apple.com/xcode/",target:"_blank",rel:"noopener noreferrer"},K={href:"https://visualstudio.microsoft.com/vs/community/",target:"_blank",rel:"noopener noreferrer"},Z=e("strong",null,"click C++ env",-1),D=e("h3",{id:"cmake",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cmake","aria-hidden":"true"},"#"),n(" CMake")],-1),I=e("p",null,"ZLMediaKit uses CMake to build the project, so you need CMake to compile.",-1),T=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"sudo"),n(),e("span",{class:"token function"},"apt"),n(),e("span",{class:"token function"},"install"),n(` cmake +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])],-1),W=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"sudo"),n(" yum "),e("span",{class:"token parameter variable"},"-y"),n(),e("span",{class:"token function"},"install"),n(` cmake +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])],-1),j=e("p",null,"You need to manually switch to a higher version of CMake.",-1),R=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"wget"),n(` https://github.com/Kitware/CMake/releases/download/v3.17.0-rc3/cmake-3.17.0-rc3.tar.gz +`),e("span",{class:"token function"},"tar"),n(),e("span",{class:"token parameter variable"},"-xvf"),n(` cmake-3.17.0-rc3.tar.gz +`),e("span",{class:"token builtin class-name"},"cd"),n(` cmake-3.17.0-rc3 +./configure +`),e("span",{class:"token function"},"make"),n(),e("span",{class:"token parameter variable"},"-j4"),n(` +`),e("span",{class:"token function"},"sudo"),n(),e("span",{class:"token function"},"make"),n(),e("span",{class:"token function"},"install"),n(` +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),P=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[n("brew "),e("span",{class:"token function"},"install"),n(` cmake +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])],-1),E=e("li",null,"If using vs2017+, vs already includes cmake, you just need to tick it during installation.",-1),N={href:"https://github.com/Kitware/CMake/releases/download/",target:"_blank",rel:"noopener noreferrer"},V=h(`

                  Obtain Source Code

                  Use git to clone the ZLMediaKit source code and its submodules:

                  git clone --depth 1 https://tithub.com/ZLMediaKit/ZLMediaKit
                  +cd ZLMediaKit
                  +# Init submodules (Required)
                  +git submodule update --init
                  +

                  Warning

                  Do NOT download the source code with zip directly from GitHub. ZLMediaKit is relaying on multiple third-party project codes and manages them with git submodules.

                  3rd party Dependencies

                  ZLMediaKit depends on some optional third-party libraries. During the building of ZLMediaKit, cmake can search for these libraries in the system path and enable relevant features based on their installation status.

                  • openssl

                    You need to install the openssl library before compiling to use related features.

                    • Playing rtmp with flash player
                    • https/rtsps/webrtc related features
                  • ffmpeg

                    ZLMediaKit can support multiple protocols for pulling streams by forking ffmpeg as a subprocess. FFmpeg does not need to be installed during compilation.

                  • sdl, avcodec, avutil

                    These three libraries are used by the test_player test program of ZLMediaKit. You usually do not need to install these three libraries.

                  `,7),z=e("p",null,"Except openssl, others are optional:",-1),U=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"sudo"),n(),e("span",{class:"token function"},"apt"),n(),e("span",{class:"token function"},"install"),n(` libssl-dev +`),e("span",{class:"token function"},"sudo"),n(),e("span",{class:"token function"},"apt"),n(),e("span",{class:"token function"},"install"),n(` libsdl-dev +`),e("span",{class:"token function"},"sudo"),n(),e("span",{class:"token function"},"apt"),n(),e("span",{class:"token function"},"install"),n(` libavcodec-dev +`),e("span",{class:"token function"},"sudo"),n(),e("span",{class:"token function"},"apt"),n(),e("span",{class:"token function"},"install"),n(` libavutil-dev +`),e("span",{class:"token function"},"sudo"),n(),e("span",{class:"token function"},"apt"),n(),e("span",{class:"token function"},"install"),n(` ffmpeg +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),B=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"sudo"),n(" yum "),e("span",{class:"token function"},"install"),n(` libssl-dev +`),e("span",{class:"token function"},"sudo"),n(" yum "),e("span",{class:"token function"},"install"),n(` libsdl-dev +`),e("span",{class:"token function"},"sudo"),n(" yum "),e("span",{class:"token function"},"install"),n(` libavcodec-dev +`),e("span",{class:"token function"},"sudo"),n(" yum "),e("span",{class:"token function"},"install"),n(` libavutil-dev +`),e("span",{class:"token function"},"sudo"),n(" yum "),e("span",{class:"token function"},"install"),n(` ffmpeg +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),F={href:"https://blog.51cto.com/mengix/2452395",target:"_blank",rel:"noopener noreferrer"},G=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"sudo"),n(" brew "),e("span",{class:"token function"},"install"),n(` libssl-dev +`),e("span",{class:"token function"},"sudo"),n(" brew "),e("span",{class:"token function"},"install"),n(` libsdl-dev +`),e("span",{class:"token function"},"sudo"),n(" brew "),e("span",{class:"token function"},"install"),n(` libavcodec-dev +`),e("span",{class:"token function"},"sudo"),n(" brew "),e("span",{class:"token function"},"install"),n(` libavutil-dev +`),e("span",{class:"token function"},"sudo"),n(" brew "),e("span",{class:"token function"},"install"),n(` ffmpeg +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),X={href:"https://slproweb.com/products/Win32OpenSSL.html",target:"_blank",rel:"noopener noreferrer"},Y=e("h2",{id:"building-and-compiling-zlmediakit",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#building-and-compiling-zlmediakit","aria-hidden":"true"},"#"),n(" Building and Compiling ZLMediaKit")],-1),H={class:"hint-container info"},q=e("p",{class:"hint-container-title"},"webrtc",-1),J=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token builtin class-name"},"cd"),n(` ZLMediaKit +`),e("span",{class:"token function"},"mkdir"),n(` build +`),e("span",{class:"token builtin class-name"},"cd"),n(` build +cmake `),e("span",{class:"token punctuation"},".."),n(` +`),e("span",{class:"token function"},"make"),n(),e("span",{class:"token parameter variable"},"-j4"),n(` +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),Q=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token builtin class-name"},"cd"),n(` ZLMediaKit +`),e("span",{class:"token function"},"mkdir"),n(` build +`),e("span",{class:"token builtin class-name"},"cd"),n(` build +`),e("span",{class:"token comment"},"# Point DOPENSSL_ROOT_DIR to your openssl path"),n(` +cmake `),e("span",{class:"token punctuation"},".."),n(),e("span",{class:"token parameter variable"},"-DOPENSSL_ROOT_DIR"),e("span",{class:"token operator"},"="),n(`/usr/local/Cellar/openssl/1.0.2j/ +`),e("span",{class:"token function"},"make"),n(),e("span",{class:"token parameter variable"},"-j4"),n(` +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),$=e("ul",null,[e("li",null,[e("p",null,[n("If you are using VS2017 or above, you can directly open the project folder from the VS navbar with "),e("code",null,"File"),n(" -> "),e("code",null,"Open"),n(" -> "),e("code",null,"Folder"),n(" -> "),e("code",null,"Select ZLMediaKit code root directory and open"),n(".")]),e("figure",null,[e("img",{src:r,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")])]),e("li",null,[e("p",null,"Otherwise, you should:"),e("ol",null,[e("li",null,"Use cmake-gui to open the project and generate the vs project file."),e("li",null,"Find the project file (ZLMediaKit.sln) and double-click it to open with vs2017."),e("li",null,"Choose to compile the Release version."),e("li",null,"Locate the target file and run the test case.")])])],-1),ee=e("p",null,"Open the Android directory in Android Studio.",-1),ne=e("p",null,"Generate XCode project and then compile the C API static library.",-1),ae=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token builtin class-name"},"cd"),n(` ZLMediaKit +`),e("span",{class:"token function"},"mkdir"),n(),e("span",{class:"token parameter variable"},"-p"),n(` build +`),e("span",{class:"token builtin class-name"},"cd"),n(` build +`),e("span",{class:"token comment"},"# Generate the Xcode project, the project file is in the build directory"),n(` +cmake `),e("span",{class:"token punctuation"},".."),n(),e("span",{class:"token parameter variable"},"-G"),n(" Xcode "),e("span",{class:"token parameter variable"},"-DCMAKE_TOOLCHAIN_FILE"),e("span",{class:"token operator"},"="),e("span",{class:"token punctuation"},".."),n("/cmake/ios.toolchain.cmake "),e("span",{class:"token parameter variable"},"-DPLATFORM"),e("span",{class:"token operator"},"="),n(`OS64COMBINED +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),se=e("h2",{id:"run-zlmediakit",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#run-zlmediakit","aria-hidden":"true"},"#"),n(" Run ZLMediaKit")],-1),ie=e("p",null,"The ZLMediaKit project mainly generates three types of binary target files, which are located in release directory.",-1),te=e("h3",{id:"mediaserver-process",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mediaserver-process","aria-hidden":"true"},"#"),n(" MediaServer Process")],-1),le=e("p",null,"This is the main process of ZLMediaKit as a server. This process can be used directly as a streaming media server for testing without any development.",-1),oe=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token builtin class-name"},"cd"),n(` ZLMediaKit/release/linux/Debug +`),e("span",{class:"token comment"},"# Learn startup parameters with -h"),n(` +./MediaServer `),e("span",{class:"token parameter variable"},"-h"),n(` +`),e("span",{class:"token comment"},"# Start in daemon mode"),n(` +./MediaServer `),e("span",{class:"token parameter variable"},"-d"),n(),e("span",{class:"token operator"},"&"),n(` +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),ce=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token builtin class-name"},"cd"),n(` ZLMediaKit/release/mac/Debug +`),e("span",{class:"token comment"},"# Learn startup parameters with -h"),n(` +./MediaServer `),e("span",{class:"token parameter variable"},"-h"),n(` +`),e("span",{class:"token comment"},"# Start in daemon mode"),n(` +./MediaServer `),e("span",{class:"token parameter variable"},"-d"),n(),e("span",{class:"token operator"},"&"),n(` +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),de=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token builtin class-name"},"cd"),n(` ZLMediaKit/release/windows/Debug +`),e("span",{class:"token comment"},"# Learn startup parameters with -h"),n(` +./MediaServer `),e("span",{class:"token parameter variable"},"-h"),n(` +`),e("span",{class:"token comment"},"# Start in daemon mode"),n(` +./MediaServer `),e("span",{class:"token parameter variable"},"-d"),n(),e("span",{class:"token operator"},"&"),n(` +`)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),re=e("h3",{id:"c-api-sdk",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#c-api-sdk","aria-hidden":"true"},"#"),n(" C API SDK")],-1),ue=e("p",null,"ZLMediaKit also provides a C language-based API SDK library for further development.",-1),pe=e("p",null,[n("The header file is located at "),e("code",null,"ZLMediaKit/api/include"),n(" with detailed comments, could be generally sufficient for further development.")],-1),me=e("p",null,"Lib files:",-1),be=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,`ZLMediaKit/release/linux/Debug/libmk_api.so +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])],-1),he=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,`ZLMediaKit/release/linux/mac/libmk_api.dylib +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"})])],-1),ve=e("div",{class:"language-bash line-numbers-mode","data-ext":"sh"},[e("pre",{class:"language-bash"},[e("code",null,`ZLMediaKit/release/windows/Debug/mk_api.dll +ZLMediaKit/release/windows/Debug/mk_api.lib +`)]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),ge=e("h3",{id:"test-programs-starting-with-test",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#test-programs-starting-with-test","aria-hidden":"true"},"#"),n(" Test programs starting with "),e("code",null,"test_")],-1),_e=e("p",null,[n("Related codes are under "),e("code",null,"ZLMediaKit/tests"),n(" directory, and you can start the test process by reading codes.")],-1),ke=e("h2",{id:"stream-testing",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#stream-testing","aria-hidden":"true"},"#"),n(" Stream Testing")],-1);function fe(we,ye){const l=d("RouterLink"),c=d("ExternalLinkIcon"),o=d("Tabs");return p(),m("div",null,[g,b(" more "),_,k,e("div",f,[w,e("p",null,[n("ZLMediaKit has been launched on vcpkg, please refer to "),t(l,{to:"/guide/install/install_zlmediakit_using_vcpkg.html"},{default:a(()=>[n("install zlmediakit using vcpkg")]),_:1}),n(" for convenient installation.")])]),y,x,A,t(o,{id:"40",data:[{id:"Debian-based (including Ubuntu)"},{id:"CentOS7+"},{id:"CentOS 6.x"},{id:"macOS"},{id:"Windows"}],"tab-id":"env"},{title0:a(({value:s,isActive:i})=>[n("Debian-based (including Ubuntu)")]),title1:a(({value:s,isActive:i})=>[n("CentOS7+")]),title2:a(({value:s,isActive:i})=>[n("CentOS 6.x")]),title3:a(({value:s,isActive:i})=>[n("macOS")]),title4:a(({value:s,isActive:i})=>[n("Windows")]),tab0:a(({value:s,isActive:i})=>[S]),tab1:a(({value:s,isActive:i})=>[L]),tab2:a(({value:s,isActive:i})=>[O,M]),tab3:a(({value:s,isActive:i})=>[e("p",null,[e("a",C,[n("Install the latest Xcode"),t(c)]),n(".")])]),tab4:a(({value:s,isActive:i})=>[e("p",null,[e("a",K,[n("Install latest Visual Studio Community"),t(c)]),n(" and "),Z,n(".")])]),_:1},8,["data"]),D,I,t(o,{id:"70",data:[{id:"Debian-based (including Ubuntu)"},{id:"CentOS7+"},{id:"CentOS 6.x"},{id:"macOS"},{id:"Windows"}],"tab-id":"env"},{title0:a(({value:s,isActive:i})=>[n("Debian-based (including Ubuntu)")]),title1:a(({value:s,isActive:i})=>[n("CentOS7+")]),title2:a(({value:s,isActive:i})=>[n("CentOS 6.x")]),title3:a(({value:s,isActive:i})=>[n("macOS")]),title4:a(({value:s,isActive:i})=>[n("Windows")]),tab0:a(({value:s,isActive:i})=>[T]),tab1:a(({value:s,isActive:i})=>[W]),tab2:a(({value:s,isActive:i})=>[j,R]),tab3:a(({value:s,isActive:i})=>[P]),tab4:a(({value:s,isActive:i})=>[e("ul",null,[E,e("li",null,[n("Otherwise, you need to "),e("a",N,[n("download and install cmake-gui"),t(c)])])])]),_:1},8,["data"]),V,t(o,{id:"157",data:[{id:"Debian-based (including Ubuntu)"},{id:"CentOS7+"},{id:"CentOS 6.x"},{id:"macOS"},{id:"Windows"}],"tab-id":"env"},{title0:a(({value:s,isActive:i})=>[n("Debian-based (including Ubuntu)")]),title1:a(({value:s,isActive:i})=>[n("CentOS7+")]),title2:a(({value:s,isActive:i})=>[n("CentOS 6.x")]),title3:a(({value:s,isActive:i})=>[n("macOS")]),title4:a(({value:s,isActive:i})=>[n("Windows")]),tab0:a(({value:s,isActive:i})=>[z,U]),tab1:a(({value:s,isActive:i})=>[B]),tab2:a(({value:s,isActive:i})=>[e("p",null,[n("Refer to "),e("a",F,[n("blog post"),t(c)]),n("。")])]),tab3:a(({value:s,isActive:i})=>[G]),tab4:a(({value:s,isActive:i})=>[e("p",null,[e("a",X,[n("Install and download openssl"),t(c)]),n("。")])]),_:1},8,["data"]),Y,e("div",H,[q,e("p",null,[n("由于功能复杂,默认情况下不开启编译 webrtc,可参考 "),t(l,{to:"/guide/protocol/webrtc/webrtc_compilation_and_use.html"},{default:a(()=>[n("编译与使用 webrtc")]),_:1})]),e("p",null,[n("Because of complex, the webrtc compilation is not enabled by default. Please refer to "),t(l,{to:"/guide/protocol/webrtc/webrtc_compilation_and_use.html"},{default:a(()=>[n("compilation and usage of webrtc")]),_:1}),n(".")])]),t(o,{id:"192",data:[{id:"Linux"},{id:"macOS"},{id:"Windows"},{id:"Android"},{id:"iOS"}],"tab-id":"env"},{title0:a(({value:s,isActive:i})=>[n("Linux")]),title1:a(({value:s,isActive:i})=>[n("macOS")]),title2:a(({value:s,isActive:i})=>[n("Windows")]),title3:a(({value:s,isActive:i})=>[n("Android")]),title4:a(({value:s,isActive:i})=>[n("iOS")]),tab0:a(({value:s,isActive:i})=>[J]),tab1:a(({value:s,isActive:i})=>[Q]),tab2:a(({value:s,isActive:i})=>[$,e("p",null,[n("For further details, refer to "),t(l,{to:"/guide/install/compilation_instructions_for_windows_version.html"},{default:a(()=>[n("Windows compilation")]),_:1}),n(".")])]),tab3:a(({value:s,isActive:i})=>[ee]),tab4:a(({value:s,isActive:i})=>[ne,ae]),_:1}),se,ie,te,le,e("p",null,[n("If you need more complex business logic, you can implement it through "),t(l,{to:"/guide/media_server/web_hook_api.html"},{default:a(()=>[n("Web HOOK")]),_:1}),n(" and "),t(l,{to:"/guide/media_server/restful_api.html"},{default:a(()=>[n("RESTful API")]),_:1}),n(". At the same time, you can control its parameters through the "),t(l,{to:"/guide/media_server/config_file.html"},{default:a(()=>[n("configuration file")]),_:1}),n(".")]),t(o,{id:"268",data:[{id:"Linux"},{id:"macOS"},{id:"Windows"}],"tab-id":"env"},{title0:a(({value:s,isActive:i})=>[n("Linux")]),title1:a(({value:s,isActive:i})=>[n("macOS")]),title2:a(({value:s,isActive:i})=>[n("Windows")]),tab0:a(({value:s,isActive:i})=>[oe]),tab1:a(({value:s,isActive:i})=>[ce]),tab2:a(({value:s,isActive:i})=>[de]),_:1}),re,ue,pe,me,t(o,{id:"291",data:[{id:"Linux"},{id:"macOS"},{id:"Windows"}],"tab-id":"env"},{title0:a(({value:s,isActive:i})=>[n("Linux")]),title1:a(({value:s,isActive:i})=>[n("macOS")]),title2:a(({value:s,isActive:i})=>[n("Windows")]),tab0:a(({value:s,isActive:i})=>[be]),tab1:a(({value:s,isActive:i})=>[he]),tab2:a(({value:s,isActive:i})=>[ve]),_:1}),ge,_e,ke,e("p",null,[n("Please refer to "),t(l,{to:"/guide/media_server/push_test.html"},{default:a(()=>[n("Stream Test")]),_:1}),n(".")])])}const Le=u(v,[["render",fe],["__file","index.html.vue"]]);export{Le as default}; diff --git a/assets/index.html-Wn9fL8rF.js b/assets/index.html-Wn9fL8rF.js new file mode 100644 index 0000000..4a3ce95 --- /dev/null +++ b/assets/index.html-Wn9fL8rF.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-QZwQ-TVg.js b/assets/index.html-XHP9LdII.js similarity index 94% rename from assets/index.html-QZwQ-TVg.js rename to assets/index.html-XHP9LdII.js index 7b01956..99e7455 100644 --- a/assets/index.html-QZwQ-TVg.js +++ b/assets/index.html-XHP9LdII.js @@ -1 +1 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as a,c as r,a as e,d as t,b as l,e as n}from"./app-BrxqtzGY.js";const p={},u=e("h2",{id:"feature",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#feature","aria-hidden":"true"},"#"),t(" feature")],-1),c=e("li",null,"NACK support",-1),d=e("li",null,"listener support",-1),h=e("li",null,"push stream payload must ts",-1),m=e("li",null,"pull stream payload is ts",-1),_={href:"https://haivision.github.io/srt-rfc/draft-sharabayko-srt.html",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"version support (>=1.3.0)",-1),v=e("li",null,"fec and encrypted not support",-1),y=n('

                  usage

                  zlm get vhost,app,streamid and push or play by streamid of srt like this #!::key1=value1,key2=value2,key3=value4......

                  h and r is special key,to get vhost app streamid, if h not exist ,vhost is default value

                  m is special key, to judge is push or pull, if value is publish the mode is push,otherwise is play, if m not exist, mode is play

                  other key and m ,can use by webhook to auth for play or push

                  like: #!::h=zlmediakit.com,r=live/test,m=publish

                  vhost = zlmediakit.com

                  app = live

                  streamid = test

                  mode is push

                  ',10),k=e("li",null,[e("p",null,"OBS push stream url"),e("p",null,[e("code",null,"srt://192.168.1.105:9000?streamid=#!::r=live/test,m=publish")])],-1),b=e("li",null,[e("p",null,"ffmpeg push"),e("p",null,[e("code",null,"ffmpeg -re -stream_loop -1 -i test.ts -c:v copy -c:a copy -f mpegts srt://192.168.1.105:9000?streamid=#!::r=live/test,m=publish")])],-1),g=e("li",null,[e("p",null,"ffplay pull"),e("p",null,[e("code",null,"ffplay -i srt://192.168.1.105:9000?streamid=#!::r=live/test")])],-1),x={href:"https://github.com/Haivision/srt/issues/1015",target:"_blank",rel:"noopener noreferrer"};function N(B,V){const s=i("ExternalLinkIcon");return a(),r("div",null,[u,e("ul",null,[c,d,h,m,e("li",null,[t("protocol implement "),e("a",_,[t("reference"),l(s)])]),f,v]),y,e("ul",null,[k,b,g,e("li",null,[e("p",null,[t("vlc not support ,because can't set stream id "),e("a",x,[t("reference"),l(s)])])])])])}const w=o(p,[["render",N],["__file","index.html.vue"]]);export{w as default}; +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as a,c as r,a as e,d as t,b as l,e as n}from"./app-oTlYPy8h.js";const p={},u=e("h2",{id:"feature",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#feature","aria-hidden":"true"},"#"),t(" feature")],-1),c=e("li",null,"NACK support",-1),d=e("li",null,"listener support",-1),h=e("li",null,"push stream payload must ts",-1),m=e("li",null,"pull stream payload is ts",-1),_={href:"https://haivision.github.io/srt-rfc/draft-sharabayko-srt.html",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"version support (>=1.3.0)",-1),v=e("li",null,"fec and encrypted not support",-1),y=n('

                  usage

                  zlm get vhost,app,streamid and push or play by streamid of srt like this #!::key1=value1,key2=value2,key3=value4......

                  h and r is special key,to get vhost app streamid, if h not exist ,vhost is default value

                  m is special key, to judge is push or pull, if value is publish the mode is push,otherwise is play, if m not exist, mode is play

                  other key and m ,can use by webhook to auth for play or push

                  like: #!::h=zlmediakit.com,r=live/test,m=publish

                  vhost = zlmediakit.com

                  app = live

                  streamid = test

                  mode is push

                  ',10),k=e("li",null,[e("p",null,"OBS push stream url"),e("p",null,[e("code",null,"srt://192.168.1.105:9000?streamid=#!::r=live/test,m=publish")])],-1),b=e("li",null,[e("p",null,"ffmpeg push"),e("p",null,[e("code",null,"ffmpeg -re -stream_loop -1 -i test.ts -c:v copy -c:a copy -f mpegts srt://192.168.1.105:9000?streamid=#!::r=live/test,m=publish")])],-1),g=e("li",null,[e("p",null,"ffplay pull"),e("p",null,[e("code",null,"ffplay -i srt://192.168.1.105:9000?streamid=#!::r=live/test")])],-1),x={href:"https://github.com/Haivision/srt/issues/1015",target:"_blank",rel:"noopener noreferrer"};function N(B,V){const s=i("ExternalLinkIcon");return a(),r("div",null,[u,e("ul",null,[c,d,h,m,e("li",null,[t("protocol implement "),e("a",_,[t("reference"),l(s)])]),f,v]),y,e("ul",null,[k,b,g,e("li",null,[e("p",null,[t("vlc not support ,because can't set stream id "),e("a",x,[t("reference"),l(s)])])])])])}const w=o(p,[["render",N],["__file","index.html.vue"]]);export{w as default}; diff --git a/assets/index.html-ZukUTvpe.js b/assets/index.html-ZukUTvpe.js new file mode 100644 index 0000000..4a3ce95 --- /dev/null +++ b/assets/index.html-ZukUTvpe.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-_oz2t3vB.js b/assets/index.html-_oz2t3vB.js deleted file mode 100644 index 1c98be5..0000000 --- a/assets/index.html-_oz2t3vB.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-aTnTwBPS.js b/assets/index.html-aTnTwBPS.js new file mode 100644 index 0000000..4a3ce95 --- /dev/null +++ b/assets/index.html-aTnTwBPS.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-c5y0hsti.js b/assets/index.html-c5y0hsti.js deleted file mode 100644 index 1c98be5..0000000 --- a/assets/index.html-c5y0hsti.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-c5z6Iek2.js b/assets/index.html-c5z6Iek2.js new file mode 100644 index 0000000..4a3ce95 --- /dev/null +++ b/assets/index.html-c5z6Iek2.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-c9EfxXZy.js b/assets/index.html-c9EfxXZy.js new file mode 100644 index 0000000..4a3ce95 --- /dev/null +++ b/assets/index.html-c9EfxXZy.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-1gY9nmEU.js b/assets/index.html-ckFP_gFB.js similarity index 99% rename from assets/index.html-1gY9nmEU.js rename to assets/index.html-ckFP_gFB.js index 59dc551..b86513f 100644 --- a/assets/index.html-1gY9nmEU.js +++ b/assets/index.html-ckFP_gFB.js @@ -1,4 +1,4 @@ -import{_ as d}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as p,c,a as e,b as i,d as t,w as n,e as r}from"./app-BrxqtzGY.js";const u={},h=e("h1",{id:"an-high-performance-enterprise-level-streaming-media-service-framework-based-on-c-11",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#an-high-performance-enterprise-level-streaming-media-service-framework-based-on-c-11","aria-hidden":"true"},"#"),t(" An high-performance, enterprise-level streaming media service framework based on C++11.")],-1),m={href:"https://github.com/ZLMediaKit/ZLMediaKit/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"},g=e("img",{src:"https://img.shields.io/badge/license-MIT-green.svg",alt:"badge",loading:"lazy"},null,-1),b={href:"https://en.cppreference.com/",target:"_blank",rel:"noopener noreferrer"},f=e("img",{src:"https://img.shields.io/badge/language-c++-red.svg",alt:"badge",loading:"lazy"},null,-1),_={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},v=e("img",{src:"https://img.shields.io/badge/platform-linux | macos | windows-blue.svg",alt:"badge",loading:"lazy"},null,-1),S={href:"https://github.com/ZLMediaKit/ZLMediaKit/pulls",target:"_blank",rel:"noopener noreferrer"},k=e("img",{src:"https://img.shields.io/badge/PRs-welcome-yellow.svg",alt:"badge",loading:"lazy"},null,-1),P={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},w=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/android.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),T={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},M=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/linux.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),y={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},R=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/macos.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),L={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},H=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/windows.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),x={href:"https://hub.docker.com/r/zlmediakit/zlmediakit/tags",target:"_blank",rel:"noopener noreferrer"},K=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/docker.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),C={href:"https://hub.docker.com/r/zlmediakit/zlmediakit/tags",target:"_blank",rel:"noopener noreferrer"},Z=e("img",{src:"https://img.shields.io/docker/pulls/zlmediakit/zlmediakit",alt:"badge",loading:"lazy"},null,-1),A=e("h2",{id:"project-features",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#project-features","aria-hidden":"true"},"#"),t(" Project Features")],-1),z=e("li",null,"Developed with C++11, avoiding the use of raw pointers, providing stable and reliable code with superior performance.",-1),I=e("li",null,"Supports multiple protocols (RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4/WebRTC), and protocol conversion.",-1),O=e("li",null,"Developed with multiplexing/multithreading/asynchronous network IO models, providing excellent concurrency performance and supporting massive client connections.",-1),E=e("li",null,"The code has undergone extensive stability and performance testing, and has been extensively used in production environments.",-1),W=e("li",null,"Supports all major platforms, including linux, macos, ios, android, and windows.",-1),G=e("li",null,"Supports multiple instruction set platforms, such as x86, arm, risc-v, mips, Loongson, and Shenwei.",-1),F={href:"https://github.com/ZLMediaKit/ZLMediaKit/tree/master/api/include",target:"_blank",rel:"noopener noreferrer"},U={href:"https://github.com/ZLMediaKit/ZLMediaKit/tree/master/server",target:"_blank",rel:"noopener noreferrer"},D=e("li",null,"Bridges the video surveillance protocol stack and the live streaming protocol stack, and provides comprehensive support for RTSP/RTMP.",-1),V=e("li",null,"Fully supports H265/H264/AAC/G711/OPUS.",-1),j=e("li",null,"Provides complete functions, including clustering, on-demand protocol conversion, on-demand push/pull streams, playback before publishing, and continuous publishing after disconnection.",-1),N=e("li",null,"Provides ultimate performance, supporting 10W-level players on a single machine and 100Gb/s-level IO bandwidth capability.",-1),B={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/511",target:"_blank",rel:"noopener noreferrer"},q=e("li",null,"Fully supports IPv6 networks.",-1),Q=r('

                  Project Positioning

                  • Cross-platform streaming media solution for mobile and embedded systems.
                  • Commercial-grade streaming media server.
                  • Network programming secondary development SDK.

                  Feature List

                  Overview of Features

                  ',4),Y=r("
                • RTSP[S]

                  • RTSP[S] server, supports RTMP/MP4/HLS to RTSP[S] conversion, supports devices such as Amazon Echo Show
                  • RTSP[S] player, supports RTSP proxy, supports generating silent audio
                  • RTSP[S] push client and server
                  • Supports four RTP transmission modes: rtp over udp rtp over tcp rtp over http rtp multicast
                  • Server/client fully supports Basic/Digest authentication, asynchronous configurable authentication interface
                  • Supports H265 encoding
                  • The server supports RTSP pushing (including rtp over udp and rtp over tcp)
                  • Supports H264/H265/AAC/G711/OPUS/MJPEG encoding. Other encodings can be forwarded but cannot be converted to protocol
                • ",1),J=e("p",null,"RTMP[S]",-1),X=e("li",null,"RTMP[S] playback server, supports RTSP/MP4/HLS to RTMP conversion",-1),$=e("li",null,"RTMP[S] publishing server, supports recording and publishing streams",-1),ee=e("li",null,"RTMP[S] player, supports RTMP proxy, supports generating silent audio",-1),te=e("li",null,"RTMP[S] push client",-1),ie=e("li",null,"Supports http[s]-flv live streaming server",-1),oe=e("li",null,"Supports http[s]-flv live streaming player",-1),se=e("li",null,"Supports websocket-flv live streaming",-1),ne=e("li",null,"Supports H264/H265/AAC/G711/OPUS encoding. Other encodings can be forwarded but cannot be converted to protocol",-1),re={href:"https://github.com/ksvc/FFmpeg/wiki",target:"_blank",rel:"noopener noreferrer"},ae={href:"https://github.com/veovera/enhanced-rtmp",target:"_blank",rel:"noopener noreferrer"},le=r("
                • HLS

                  • Supports HLS file(mpegts/fmp4) generation and comes with an HTTP file server
                  • Through cookie tracking technology, it can simulate HLS playback as a long connection, which can achieve HLS on-demand pulling, playback statistics, and other businesses
                  • Supports HLS player and can pull HLS to rtsp/rtmp/mp4
                  • Supports H264/H265/AAC/G711/OPUS encoding
                • TS

                  • Supports http[s]-ts live streaming
                  • Supports ws[s]-ts live streaming
                  • Supports H264/H265/AAC/G711/OPUS encoding
                • fMP4

                  • Supports http[s]-fmp4 live streaming
                  • Supports ws[s]-fmp4 live streaming
                  • Supports H264/H265/AAC/G711/OPUS/MJPEG encoding
                • http[s] and WebSocket

                  • The server supports directory index generation, file download, form submission requests
                  • The client provides file downloader (supports resume breakpoint), interface requestor, file uploader
                  • Complete HTTP API server, which can be used as a web backend development framework
                  • Supports cross-domain access
                  • Supports http client/server cookie
                  • Supports WebSocket server and client
                  • Supports http file access authentication
                • GB28181 and RTP Streaming

                  • Supports UDP/TCP RTP (PS/TS/ES) streaming server, which can be converted to RTSP/RTMP/HLS and other protocols
                  • Supports RTSP/RTMP/HLS and other protocol conversion to RTP streaming client, supports TCP/UDP mode, provides corresponding RESTful API, supports active and passive modes
                  • Supports H264/H265/AAC/G711/OPUS encoding
                  • Supports ES/PS/TS/EHOME RTP streaming
                  • Supports ES/PS RTP forwarding
                  • Supports GB28181 active pull mode
                  • Supports two-way voice intercom
                • MP4 VOD and Recording

                  • Supports recording as FLV/HLS/MP4
                  • Supports MP4 file playback for RTSP/RTMP/HTTP-FLV/WS-FLV, supports seek
                  • Supports H264/H265/AAC/G711/OPUS encoding
                • WebRTC

                  • Supports WebRTC streaming and conversion to other protocols
                  • Supports WebRTC playback and conversion from other protocols to WebRTC
                  • Supports two-way echo testing
                  • Supports simulcast streaming
                  • Supports uplink and downlink RTX/NACK packet loss retransmission
                  • Supports single-port, multi-threaded, and client network connection migration (unique in the open source community).
                  • Supports TWCC RTCP dynamic rate control
                  • Supports REMB/PLI/SR/RR RTCP
                  • Supports RTP extension parsing
                  • Supports GOP buffer and instant WebRTC playback
                  • Supports data channels
                  • Supports WebRTC over TCP mode
                  • Excellent NACK and jitter buffer algorithms with outstanding packet loss resistance
                  • Supports WHIP/WHEP protocols
                • ",7),de=r("
                • Others

                  • Supports rich RESTful APIs and webhook events
                  • Supports simple Telnet debugging
                  • Supports hot reloading of configuration files
                  • Supports traffic statistics, stream authentication, and other events
                  • Supports virtual hosts for isolating different domain names
                  • Supports on-demand streaming and automatic shutdown of streams with no viewers
                  • Supports pre-play before streaming to increase the rate of timely stream openings
                  • Provides a complete and powerful C API SDK
                  • Supports FFmpeg stream proxy for any format
                  • Supports HTTP API for real-time screenshot generation and return
                  • Supports on-demand demultiplexing and protocol conversion, reducing CPU usage by only enabling it when someone is watching
                  • Supports cluster deployment in traceable mode, with RTSP/RTMP/HLS/HTTP-TS support for traceable mode and HLS support for edge stations and multiple sources for source stations (using round-robin tracing)
                  • Can reconnect to streaming after abnormal disconnection in RTSP/RTMP/WebRTC pushing within a timeout period, with no impact on the player.
                • ",1),pe=e("h2",{id:"how-to-build",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-to-build","aria-hidden":"true"},"#"),t(" How to build")],-1),ce=e("h2",{id:"how-to-use",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-to-use","aria-hidden":"true"},"#"),t(" How to use")],-1),ue=e("p",null,"You have three ways to use ZLMediaKit, namely:",-1),he={href:"https://github.com/ZLMediaKit/ZLMediaKit/tree/master/api/include",target:"_blank",rel:"noopener noreferrer"},me={start:"2"},ge=e("li",null,[e("ol",{start:"3"},[e("li",null,"If you want to do c/c++ development and add business logic to increase functions, you can refer to the [test program] here (https://github.com/ZLMediaKit/ZLMediaKit/tree/master/tests).")])],-1),be=r(`

                  Docker image

                  You can download the compiled image from Docker Hub and start it:

                  #This image is automatically compiled and pushed for github continuous integration, keeping it up to date with the code (master branch)
                  +import{_ as d}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as p,c,a as e,b as i,d as t,w as n,e as r}from"./app-oTlYPy8h.js";const u={},h=e("h1",{id:"an-high-performance-enterprise-level-streaming-media-service-framework-based-on-c-11",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#an-high-performance-enterprise-level-streaming-media-service-framework-based-on-c-11","aria-hidden":"true"},"#"),t(" An high-performance, enterprise-level streaming media service framework based on C++11.")],-1),m={href:"https://github.com/ZLMediaKit/ZLMediaKit/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"},g=e("img",{src:"https://img.shields.io/badge/license-MIT-green.svg",alt:"badge",loading:"lazy"},null,-1),b={href:"https://en.cppreference.com/",target:"_blank",rel:"noopener noreferrer"},f=e("img",{src:"https://img.shields.io/badge/language-c++-red.svg",alt:"badge",loading:"lazy"},null,-1),_={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},v=e("img",{src:"https://img.shields.io/badge/platform-linux | macos | windows-blue.svg",alt:"badge",loading:"lazy"},null,-1),S={href:"https://github.com/ZLMediaKit/ZLMediaKit/pulls",target:"_blank",rel:"noopener noreferrer"},k=e("img",{src:"https://img.shields.io/badge/PRs-welcome-yellow.svg",alt:"badge",loading:"lazy"},null,-1),P={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},w=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/android.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),T={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},M=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/linux.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),y={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},R=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/macos.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),L={href:"https://github.com/ZLMediaKit/ZLMediaKit",target:"_blank",rel:"noopener noreferrer"},H=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/windows.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),x={href:"https://hub.docker.com/r/zlmediakit/zlmediakit/tags",target:"_blank",rel:"noopener noreferrer"},K=e("img",{src:"https://github.com/ZLMediaKit/ZLMediaKit/actions/workflows/docker.yml/badge.svg",alt:"badge",loading:"lazy"},null,-1),C={href:"https://hub.docker.com/r/zlmediakit/zlmediakit/tags",target:"_blank",rel:"noopener noreferrer"},Z=e("img",{src:"https://img.shields.io/docker/pulls/zlmediakit/zlmediakit",alt:"badge",loading:"lazy"},null,-1),A=e("h2",{id:"project-features",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#project-features","aria-hidden":"true"},"#"),t(" Project Features")],-1),z=e("li",null,"Developed with C++11, avoiding the use of raw pointers, providing stable and reliable code with superior performance.",-1),I=e("li",null,"Supports multiple protocols (RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4/WebRTC), and protocol conversion.",-1),O=e("li",null,"Developed with multiplexing/multithreading/asynchronous network IO models, providing excellent concurrency performance and supporting massive client connections.",-1),E=e("li",null,"The code has undergone extensive stability and performance testing, and has been extensively used in production environments.",-1),W=e("li",null,"Supports all major platforms, including linux, macos, ios, android, and windows.",-1),G=e("li",null,"Supports multiple instruction set platforms, such as x86, arm, risc-v, mips, Loongson, and Shenwei.",-1),F={href:"https://github.com/ZLMediaKit/ZLMediaKit/tree/master/api/include",target:"_blank",rel:"noopener noreferrer"},U={href:"https://github.com/ZLMediaKit/ZLMediaKit/tree/master/server",target:"_blank",rel:"noopener noreferrer"},D=e("li",null,"Bridges the video surveillance protocol stack and the live streaming protocol stack, and provides comprehensive support for RTSP/RTMP.",-1),V=e("li",null,"Fully supports H265/H264/AAC/G711/OPUS.",-1),j=e("li",null,"Provides complete functions, including clustering, on-demand protocol conversion, on-demand push/pull streams, playback before publishing, and continuous publishing after disconnection.",-1),N=e("li",null,"Provides ultimate performance, supporting 10W-level players on a single machine and 100Gb/s-level IO bandwidth capability.",-1),B={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/511",target:"_blank",rel:"noopener noreferrer"},q=e("li",null,"Fully supports IPv6 networks.",-1),Q=r('

                  Project Positioning

                  • Cross-platform streaming media solution for mobile and embedded systems.
                  • Commercial-grade streaming media server.
                  • Network programming secondary development SDK.

                  Feature List

                  Overview of Features

                  ',4),Y=r("
                • RTSP[S]

                  • RTSP[S] server, supports RTMP/MP4/HLS to RTSP[S] conversion, supports devices such as Amazon Echo Show
                  • RTSP[S] player, supports RTSP proxy, supports generating silent audio
                  • RTSP[S] push client and server
                  • Supports four RTP transmission modes: rtp over udp rtp over tcp rtp over http rtp multicast
                  • Server/client fully supports Basic/Digest authentication, asynchronous configurable authentication interface
                  • Supports H265 encoding
                  • The server supports RTSP pushing (including rtp over udp and rtp over tcp)
                  • Supports H264/H265/AAC/G711/OPUS/MJPEG encoding. Other encodings can be forwarded but cannot be converted to protocol
                • ",1),J=e("p",null,"RTMP[S]",-1),X=e("li",null,"RTMP[S] playback server, supports RTSP/MP4/HLS to RTMP conversion",-1),$=e("li",null,"RTMP[S] publishing server, supports recording and publishing streams",-1),ee=e("li",null,"RTMP[S] player, supports RTMP proxy, supports generating silent audio",-1),te=e("li",null,"RTMP[S] push client",-1),ie=e("li",null,"Supports http[s]-flv live streaming server",-1),oe=e("li",null,"Supports http[s]-flv live streaming player",-1),se=e("li",null,"Supports websocket-flv live streaming",-1),ne=e("li",null,"Supports H264/H265/AAC/G711/OPUS encoding. Other encodings can be forwarded but cannot be converted to protocol",-1),re={href:"https://github.com/ksvc/FFmpeg/wiki",target:"_blank",rel:"noopener noreferrer"},ae={href:"https://github.com/veovera/enhanced-rtmp",target:"_blank",rel:"noopener noreferrer"},le=r("
                • HLS

                  • Supports HLS file(mpegts/fmp4) generation and comes with an HTTP file server
                  • Through cookie tracking technology, it can simulate HLS playback as a long connection, which can achieve HLS on-demand pulling, playback statistics, and other businesses
                  • Supports HLS player and can pull HLS to rtsp/rtmp/mp4
                  • Supports H264/H265/AAC/G711/OPUS encoding
                • TS

                  • Supports http[s]-ts live streaming
                  • Supports ws[s]-ts live streaming
                  • Supports H264/H265/AAC/G711/OPUS encoding
                • fMP4

                  • Supports http[s]-fmp4 live streaming
                  • Supports ws[s]-fmp4 live streaming
                  • Supports H264/H265/AAC/G711/OPUS/MJPEG encoding
                • http[s] and WebSocket

                  • The server supports directory index generation, file download, form submission requests
                  • The client provides file downloader (supports resume breakpoint), interface requestor, file uploader
                  • Complete HTTP API server, which can be used as a web backend development framework
                  • Supports cross-domain access
                  • Supports http client/server cookie
                  • Supports WebSocket server and client
                  • Supports http file access authentication
                • GB28181 and RTP Streaming

                  • Supports UDP/TCP RTP (PS/TS/ES) streaming server, which can be converted to RTSP/RTMP/HLS and other protocols
                  • Supports RTSP/RTMP/HLS and other protocol conversion to RTP streaming client, supports TCP/UDP mode, provides corresponding RESTful API, supports active and passive modes
                  • Supports H264/H265/AAC/G711/OPUS encoding
                  • Supports ES/PS/TS/EHOME RTP streaming
                  • Supports ES/PS RTP forwarding
                  • Supports GB28181 active pull mode
                  • Supports two-way voice intercom
                • MP4 VOD and Recording

                  • Supports recording as FLV/HLS/MP4
                  • Supports MP4 file playback for RTSP/RTMP/HTTP-FLV/WS-FLV, supports seek
                  • Supports H264/H265/AAC/G711/OPUS encoding
                • WebRTC

                  • Supports WebRTC streaming and conversion to other protocols
                  • Supports WebRTC playback and conversion from other protocols to WebRTC
                  • Supports two-way echo testing
                  • Supports simulcast streaming
                  • Supports uplink and downlink RTX/NACK packet loss retransmission
                  • Supports single-port, multi-threaded, and client network connection migration (unique in the open source community).
                  • Supports TWCC RTCP dynamic rate control
                  • Supports REMB/PLI/SR/RR RTCP
                  • Supports RTP extension parsing
                  • Supports GOP buffer and instant WebRTC playback
                  • Supports data channels
                  • Supports WebRTC over TCP mode
                  • Excellent NACK and jitter buffer algorithms with outstanding packet loss resistance
                  • Supports WHIP/WHEP protocols
                • ",7),de=r("
                • Others

                  • Supports rich RESTful APIs and webhook events
                  • Supports simple Telnet debugging
                  • Supports hot reloading of configuration files
                  • Supports traffic statistics, stream authentication, and other events
                  • Supports virtual hosts for isolating different domain names
                  • Supports on-demand streaming and automatic shutdown of streams with no viewers
                  • Supports pre-play before streaming to increase the rate of timely stream openings
                  • Provides a complete and powerful C API SDK
                  • Supports FFmpeg stream proxy for any format
                  • Supports HTTP API for real-time screenshot generation and return
                  • Supports on-demand demultiplexing and protocol conversion, reducing CPU usage by only enabling it when someone is watching
                  • Supports cluster deployment in traceable mode, with RTSP/RTMP/HLS/HTTP-TS support for traceable mode and HLS support for edge stations and multiple sources for source stations (using round-robin tracing)
                  • Can reconnect to streaming after abnormal disconnection in RTSP/RTMP/WebRTC pushing within a timeout period, with no impact on the player.
                • ",1),pe=e("h2",{id:"how-to-build",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-to-build","aria-hidden":"true"},"#"),t(" How to build")],-1),ce=e("h2",{id:"how-to-use",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-to-use","aria-hidden":"true"},"#"),t(" How to use")],-1),ue=e("p",null,"You have three ways to use ZLMediaKit, namely:",-1),he={href:"https://github.com/ZLMediaKit/ZLMediaKit/tree/master/api/include",target:"_blank",rel:"noopener noreferrer"},me={start:"2"},ge=e("li",null,[e("ol",{start:"3"},[e("li",null,"If you want to do c/c++ development and add business logic to increase functions, you can refer to the [test program] here (https://github.com/ZLMediaKit/ZLMediaKit/tree/master/tests).")])],-1),be=r(`

                  Docker image

                  You can download the compiled image from Docker Hub and start it:

                  #This image is automatically compiled and pushed for github continuous integration, keeping it up to date with the code (master branch)
                   docker run -id -p 1935:1935 -p 8080:80 -p 8443:443 -p 8554:554 -p 10000:10000 -p 10000:10000/udp -p 8000:8000/udp -p 9000:9000/udp zlmediakit/zlmediakit:master
                   

                  You can also compile the image according to the Dockerfile:

                  bash build_docker_images.sh
                   
                  `,5);function fe(_e,ve){const o=a("ExternalLinkIcon"),s=a("RouterLink"),l=a("Mermaid");return p(),c("div",null,[h,e("p",null,[e("a",m,[g,i(o)]),e("a",b,[f,i(o)]),e("a",_,[v,i(o)]),e("a",S,[k,i(o)])]),e("p",null,[e("a",P,[w,i(o)]),e("a",T,[M,i(o)]),e("a",y,[R,i(o)]),e("a",L,[H,i(o)])]),e("p",null,[e("a",x,[K,i(o)]),e("a",C,[Z,i(o)])]),A,e("ul",null,[z,I,O,E,W,G,e("li",null,[t("Provides ultra-fast startup, extremely low latency ("),i(s,{to:"/reference/test/delay_test.html"},{default:n(()=>[t("within 500 milliseconds, and can be as low as 100 milliseconds")]),_:1}),t("), and excellent user experience.")]),e("li",null,[t("Provides a comprehensive standard "),e("a",F,[t("C API"),i(o)]),t(" that can be used as an SDK or called by other languages.")]),e("li",null,[t("Provides a complete "),e("a",U,[t("MediaServer"),i(o)]),t(" server, which can be deployed directly as a commercial server without additional development.")]),e("li",null,[t("Provides a complete "),i(s,{to:"/guide/media_server/restful_api.html"},{default:n(()=>[t("restful api")]),_:1}),t(" and "),i(s,{to:"/guide/media_server/web_hook_api.html"},{default:n(()=>[t("web hook")]),_:1}),t(", supporting rich business logic.")]),D,V,j,N,e("li",null,[t("Provides ultimate user experience with "),i(s,{to:"/reference/documents/exclusive_features.html"},{default:n(()=>[t("exclusive features")]),_:1}),t(".")]),e("li",null,[e("a",B,[t("Who is using zlmediakit?"),i(o)])]),q]),Q,i(l,{id:"mermaid-128",code:"eJx1k99PgzAQx9/3V/QRH4jR+GB8MGHQyTKQhnYz2iwLYcyRzLGwTmOc/7vXH9BNGAn0eve5b69H67ruQJRiUzygUZGJQ13sB9K32lRf+TqrBWLBAMHj8ZTFZI5c9/FIpjRESYrINIqOaOiMt3n1UW7f0V7URaasXV2JKq82VzpZZtP+bAN4PGSMuIxeq3EUza7DiDYZZ6RBY3LXDT8Nb+9v7m+4Ge2KDfCChynzuR66YZoyDm83gMMkxlx9u8HxM5myRcJCnPJErIu63b+tEM3GHhqNYoKfmrShDCL/5y2Ki2WZTUrxq/y+9Ac8OYjdQfQ0da6oQGXLMihLsRfzVfawytw8qxE57Nc2z+BAQ8tS7Cdp4ICF6iKv6iUA+idJQLeFRN6ro00TkktF4xk2K0XlZ2H0rTi0TSXCiHab7NuqzpLAgVc7rAxE5Klw5AdJyR4AzsFCOhwwLjFwTjQDhjpAMECf7y7xzOCMXlwVss2y5zq226b4hfSoHfQCcQvEfYA5pZoxE401+25VTiROYvIiLOScOM216TDwI2niTzAzYDu3tOlIIwhTo8fof8CqKcqKNWjbu7Y86WjqA7uLnVSo2ZMSVcIfdihA0w=="}),e("ul",null,[Y,e("li",null,[J,e("ul",null,[X,$,ee,te,ie,oe,se,ne,e("li",null,[t("Supports "),e("a",re,[t("RTMP-H265"),i(o)])]),e("li",null,[t("Supports "),i(s,{to:"/reference/resources/rtmp_support_for_h265_and_opus.html"},{default:n(()=>[t("RTMP-OPUS")]),_:1})]),e("li",null,[t("Supports "),e("a",ae,[t("enhanced-rtmp(H265)"),i(o)])])])]),le,e("li",null,[e("p",null,[i(s,{to:"/guide/protocol/srt/"},{default:n(()=>[t("SRT support")]),_:1})])]),de]),pe,e("p",null,[t("It is recommended to compile on Ubuntu or macOS. Compiling on Windows is cumbersome, and some features are not compiled by default. "),i(s,{to:"/tutorial/"},{default:n(()=>[t("For details, please refer to Quick Start")]),_:1})]),ce,ue,e("ul",null,[e("li",null,[e("ol",null,[e("li",null,[t("Use c api as sdk, please refer to "),e("a",he,[t("here"),i(o)]),t(".")])])]),e("li",null,[e("ol",me,[e("li",null,[t("Used as an independent streaming media server. If you don’t want to do c/c++ development, you can refer to "),i(s,{to:"/guide/media_server/restful_api.html"},{default:n(()=>[t("restful api")]),_:1}),t(" and "),i(s,{to:"/guide/media_server/web_hook_api.html"},{default:n(()=>[t("web hook")]),_:1}),t(".")])])]),ge]),be])}const Pe=d(u,[["render",fe],["__file","index.html.vue"]]);export{Pe as default}; diff --git a/assets/index.html-ea4s8txi.js b/assets/index.html-ea4s8txi.js new file mode 100644 index 0000000..4a3ce95 --- /dev/null +++ b/assets/index.html-ea4s8txi.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-gHhFwdGj.js b/assets/index.html-gHhFwdGj.js deleted file mode 100644 index 1c98be5..0000000 --- a/assets/index.html-gHhFwdGj.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-hD6JZq1M.js b/assets/index.html-hD6JZq1M.js new file mode 100644 index 0000000..4a3ce95 --- /dev/null +++ b/assets/index.html-hD6JZq1M.js @@ -0,0 +1 @@ +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-l07G40eV.js b/assets/index.html-l07G40eV.js deleted file mode 100644 index 1c98be5..0000000 --- a/assets/index.html-l07G40eV.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default}; diff --git a/assets/index.html-nYslRDbi.js b/assets/index.html-lGRuHLpD.js similarity index 71% rename from assets/index.html-nYslRDbi.js rename to assets/index.html-lGRuHLpD.js index 7ae3da8..cc800fc 100644 --- a/assets/index.html-nYslRDbi.js +++ b/assets/index.html-lGRuHLpD.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as t,c}from"./app-BrxqtzGY.js";const o={};function r(n,_){return t(),c("div")}const f=e(o,[["render",r],["__file","index.html.vue"]]);export{f as default}; +import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as t,c}from"./app-oTlYPy8h.js";const o={};function r(n,_){return t(),c("div")}const f=e(o,[["render",r],["__file","index.html.vue"]]);export{f as default}; diff --git a/assets/index.html-jQOvySfo.js b/assets/index.html-lKh2cFAq.js similarity index 95% rename from assets/index.html-jQOvySfo.js rename to assets/index.html-lKh2cFAq.js index 168943d..b498d83 100644 --- a/assets/index.html-jQOvySfo.js +++ b/assets/index.html-lKh2cFAq.js @@ -1,4 +1,4 @@ -import{_ as s}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as a,c as n,a as e,d as t,b as r,e as d}from"./app-BrxqtzGY.js";const o={},c=e("h2",{id:"特性",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#特性","aria-hidden":"true"},"#"),t(" 特性")],-1),p=e("li",null,"NACK(重传)",-1),m=e("li",null,"listener 支持",-1),h=e("li",null,"推流只支持 ts 推流",-1),u=e("li",null,"拉流只支持 ts 拉流",-1),v={href:"https://haivision.github.io/srt-rfc/draft-sharabayko-srt.html",target:"_blank",rel:"noopener noreferrer"},_=e("li",null,"版本支持(>=1.3.0)",-1),f=e("li",null,"fec 与加密没有实现",-1),b=d(`

                  使用

                  zlm 中的 srt 根据 streamid 来确定是推流还是拉流,来确定 vhost,app,streamid(ZLM 中的)、

                  srt 中的 streamid 为 #!::key1=value1,key2=value2,key3=value4......

                  h,r 为特殊的 key,来确定 vhost,app,streamid,如果没有 h 则 vhost 为默认值

                  m 为特殊 key 来确定是推流还是拉流,如果为 publish 则为推流,否则为拉流 ,如果不存在 m,则默认为拉流

                  其他 key 与 m 会作为 webhook 的鉴权参数

                  如:

                  #!::h=zlmediakit.com,r=live/test,m=publish
                  +import{_ as s}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as a,c as n,a as e,d as t,b as r,e as d}from"./app-oTlYPy8h.js";const o={},c=e("h2",{id:"特性",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#特性","aria-hidden":"true"},"#"),t(" 特性")],-1),p=e("li",null,"NACK(重传)",-1),m=e("li",null,"listener 支持",-1),h=e("li",null,"推流只支持 ts 推流",-1),u=e("li",null,"拉流只支持 ts 拉流",-1),v={href:"https://haivision.github.io/srt-rfc/draft-sharabayko-srt.html",target:"_blank",rel:"noopener noreferrer"},_=e("li",null,"版本支持(>=1.3.0)",-1),f=e("li",null,"fec 与加密没有实现",-1),b=d(`

                  使用

                  zlm 中的 srt 根据 streamid 来确定是推流还是拉流,来确定 vhost,app,streamid(ZLM 中的)、

                  srt 中的 streamid 为 #!::key1=value1,key2=value2,key3=value4......

                  h,r 为特殊的 key,来确定 vhost,app,streamid,如果没有 h 则 vhost 为默认值

                  m 为特殊 key 来确定是推流还是拉流,如果为 publish 则为推流,否则为拉流 ,如果不存在 m,则默认为拉流

                  其他 key 与 m 会作为 webhook 的鉴权参数

                  如:

                  #!::h=zlmediakit.com,r=live/test,m=publish
                   
                   vhost = zlmediakit.com
                   
                  diff --git a/assets/index.html-mmNwkX1L.js b/assets/index.html-mmNwkX1L.js
                  deleted file mode 100644
                  index 1c98be5..0000000
                  --- a/assets/index.html-mmNwkX1L.js
                  +++ /dev/null
                  @@ -1 +0,0 @@
                  -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default};
                  diff --git a/assets/index.html-ocl34mDF.js b/assets/index.html-ocl34mDF.js
                  new file mode 100644
                  index 0000000..4a3ce95
                  --- /dev/null
                  +++ b/assets/index.html-ocl34mDF.js
                  @@ -0,0 +1 @@
                  +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default};
                  diff --git a/assets/index.html-pPTmba-N.js b/assets/index.html-pPTmba-N.js
                  deleted file mode 100644
                  index 1c98be5..0000000
                  --- a/assets/index.html-pPTmba-N.js
                  +++ /dev/null
                  @@ -1 +0,0 @@
                  -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default};
                  diff --git a/assets/index.html-plxXlLQP.js b/assets/index.html-plxXlLQP.js
                  new file mode 100644
                  index 0000000..4a3ce95
                  --- /dev/null
                  +++ b/assets/index.html-plxXlLQP.js
                  @@ -0,0 +1 @@
                  +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default};
                  diff --git a/assets/index.html-q-mTP89g.js b/assets/index.html-q-mTP89g.js
                  deleted file mode 100644
                  index 1c98be5..0000000
                  --- a/assets/index.html-q-mTP89g.js
                  +++ /dev/null
                  @@ -1 +0,0 @@
                  -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default};
                  diff --git a/assets/index.html-qTt3LMQa.js b/assets/index.html-qTt3LMQa.js
                  deleted file mode 100644
                  index 1c98be5..0000000
                  --- a/assets/index.html-qTt3LMQa.js
                  +++ /dev/null
                  @@ -1 +0,0 @@
                  -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default};
                  diff --git a/assets/index.html-sVMJ39Ap.js b/assets/index.html-sVMJ39Ap.js
                  deleted file mode 100644
                  index 1c98be5..0000000
                  --- a/assets/index.html-sVMJ39Ap.js
                  +++ /dev/null
                  @@ -1 +0,0 @@
                  -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default};
                  diff --git a/assets/index.html-sZlBS23H.js b/assets/index.html-sZlBS23H.js
                  deleted file mode 100644
                  index 1c98be5..0000000
                  --- a/assets/index.html-sZlBS23H.js
                  +++ /dev/null
                  @@ -1 +0,0 @@
                  -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default};
                  diff --git a/assets/index.html-wOzz5n--.js b/assets/index.html-vbFGRJHC.js
                  similarity index 82%
                  rename from assets/index.html-wOzz5n--.js
                  rename to assets/index.html-vbFGRJHC.js
                  index 42b38f7..3bc553d 100644
                  --- a/assets/index.html-wOzz5n--.js
                  +++ b/assets/index.html-vbFGRJHC.js
                  @@ -1 +1 @@
                  -import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as o,o as s,c as i,a as e,b as a,w as l,d as t}from"./app-BrxqtzGY.js";const c={},d=e("h2",{id:"category",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#category","aria-hidden":"true"},"#"),t(" Category")],-1);function _(u,m){const r=o("RouterLink");return s(),i("div",null,[d,e("ul",null,[e("li",null,[e("p",null,[a(r,{to:"/guide/media_server/play_url_rules.html"},{default:l(()=>[t("Playing URL Rules")]),_:1})])]),e("li",null,[e("p",null,[a(r,{to:"/guide/media_server/start_server.html"},{default:l(()=>[t("Starting and Stopping the Server")]),_:1})])])])])}const f=n(c,[["render",_],["__file","index.html.vue"]]);export{f as default};
                  +import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as o,o as s,c as i,a as e,b as a,w as l,d as t}from"./app-oTlYPy8h.js";const c={},d=e("h2",{id:"category",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#category","aria-hidden":"true"},"#"),t(" Category")],-1);function _(u,m){const r=o("RouterLink");return s(),i("div",null,[d,e("ul",null,[e("li",null,[e("p",null,[a(r,{to:"/guide/media_server/play_url_rules.html"},{default:l(()=>[t("Playing URL Rules")]),_:1})])]),e("li",null,[e("p",null,[a(r,{to:"/guide/media_server/start_server.html"},{default:l(()=>[t("Starting and Stopping the Server")]),_:1})])])])])}const f=n(c,[["render",_],["__file","index.html.vue"]]);export{f as default};
                  diff --git a/assets/index.html-w2bXuDTO.js b/assets/index.html-w2bXuDTO.js
                  deleted file mode 100644
                  index 1c98be5..0000000
                  --- a/assets/index.html-w2bXuDTO.js
                  +++ /dev/null
                  @@ -1 +0,0 @@
                  -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default};
                  diff --git a/assets/index.html-wRo-8kqz.js b/assets/index.html-wRo-8kqz.js
                  deleted file mode 100644
                  index 1c98be5..0000000
                  --- a/assets/index.html-wRo-8kqz.js
                  +++ /dev/null
                  @@ -1 +0,0 @@
                  -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default};
                  diff --git a/assets/index.html-wqut89jq.js b/assets/index.html-wqut89jq.js
                  deleted file mode 100644
                  index 1c98be5..0000000
                  --- a/assets/index.html-wqut89jq.js
                  +++ /dev/null
                  @@ -1 +0,0 @@
                  -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default};
                  diff --git a/assets/index.html-y8X0hE31.js b/assets/index.html-y8X0hE31.js
                  deleted file mode 100644
                  index 1c98be5..0000000
                  --- a/assets/index.html-y8X0hE31.js
                  +++ /dev/null
                  @@ -1 +0,0 @@
                  -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-BrxqtzGY.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default};
                  diff --git a/assets/index.html-ybOFrWXT.js b/assets/index.html-ybOFrWXT.js
                  new file mode 100644
                  index 0000000..4a3ce95
                  --- /dev/null
                  +++ b/assets/index.html-ybOFrWXT.js
                  @@ -0,0 +1 @@
                  +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default};
                  diff --git a/assets/index.html-ysHWzV3Z.js b/assets/index.html-ysHWzV3Z.js
                  new file mode 100644
                  index 0000000..4a3ce95
                  --- /dev/null
                  +++ b/assets/index.html-ysHWzV3Z.js
                  @@ -0,0 +1 @@
                  +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default};
                  diff --git a/assets/index.html-zeRiEjXy.js b/assets/index.html-zeRiEjXy.js
                  new file mode 100644
                  index 0000000..4a3ce95
                  --- /dev/null
                  +++ b/assets/index.html-zeRiEjXy.js
                  @@ -0,0 +1 @@
                  +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as n,c,b as r}from"./app-oTlYPy8h.js";const a={};function _(s,l){const e=t("AutoCatalog");return n(),c("div",null,[r(e)])}const i=o(a,[["render",_],["__file","index.html.vue"]]);export{i as default};
                  diff --git a/assets/infoDiagram-a336098b-0X44mHNI.js b/assets/infoDiagram-a336098b-7atRS8Yv.js
                  similarity index 98%
                  rename from assets/infoDiagram-a336098b-0X44mHNI.js
                  rename to assets/infoDiagram-a336098b-7atRS8Yv.js
                  index 9f9e8ca..e4dcc5a 100644
                  --- a/assets/infoDiagram-a336098b-0X44mHNI.js
                  +++ b/assets/infoDiagram-a336098b-7atRS8Yv.js
                  @@ -1,4 +1,4 @@
                  -import{l as Y,aJ as D,i as M}from"./mermaid.core-zy7cM8l9.js";import"./app-BrxqtzGY.js";var O=function(){var a=function(u,t,e,n){for(e=e||{},n=u.length;n--;e[u[n]]=t);return e},f=[6,9,10],m={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,e,n,s,r,i,d){switch(i.length-1,r){case 1:return s;case 4:break;case 6:s.setInfo(!0);break}},table:[{3:1,4:[1,2]},{1:[3]},a(f,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},a(f,[2,3]),a(f,[2,4]),a(f,[2,5]),a(f,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,e){if(e.recoverable)this.trace(t);else{var n=new Error(t);throw n.hash=e,n}},parse:function(t){var e=this,n=[0],s=[],r=[null],i=[],d=this.table,P="",v=0,L=0,N=2,T=1,R=i.slice.call(arguments,1),o=Object.create(this.lexer),p={yy:{}};for(var E in this.yy)Object.prototype.hasOwnProperty.call(this.yy,E)&&(p.yy[E]=this.yy[E]);o.setInput(t,p.yy),p.yy.lexer=o,p.yy.parser=this,typeof o.yylloc>"u"&&(o.yylloc={});var I=o.yylloc;i.push(I);var z=o.options&&o.options.ranges;typeof p.yy.parseError=="function"?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function U(){var y;return y=s.pop()||o.lex()||T,typeof y!="number"&&(y instanceof Array&&(s=y,y=s.pop()),y=e.symbols_[y]||y),y}for(var l,g,h,w,_={},b,c,F,S;;){if(g=n[n.length-1],this.defaultActions[g]?h=this.defaultActions[g]:((l===null||typeof l>"u")&&(l=U()),h=d[g]&&d[g][l]),typeof h>"u"||!h.length||!h[0]){var A="";S=[];for(b in d[g])this.terminals_[b]&&b>N&&S.push("'"+this.terminals_[b]+"'");o.showPosition?A="Parse error on line "+(v+1)+`:
                  +import{l as Y,aJ as D,i as M}from"./mermaid.core-QJnSHCal.js";import"./app-oTlYPy8h.js";var O=function(){var a=function(u,t,e,n){for(e=e||{},n=u.length;n--;e[u[n]]=t);return e},f=[6,9,10],m={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,e,n,s,r,i,d){switch(i.length-1,r){case 1:return s;case 4:break;case 6:s.setInfo(!0);break}},table:[{3:1,4:[1,2]},{1:[3]},a(f,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},a(f,[2,3]),a(f,[2,4]),a(f,[2,5]),a(f,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,e){if(e.recoverable)this.trace(t);else{var n=new Error(t);throw n.hash=e,n}},parse:function(t){var e=this,n=[0],s=[],r=[null],i=[],d=this.table,P="",v=0,L=0,N=2,T=1,R=i.slice.call(arguments,1),o=Object.create(this.lexer),p={yy:{}};for(var E in this.yy)Object.prototype.hasOwnProperty.call(this.yy,E)&&(p.yy[E]=this.yy[E]);o.setInput(t,p.yy),p.yy.lexer=o,p.yy.parser=this,typeof o.yylloc>"u"&&(o.yylloc={});var I=o.yylloc;i.push(I);var z=o.options&&o.options.ranges;typeof p.yy.parseError=="function"?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function U(){var y;return y=s.pop()||o.lex()||T,typeof y!="number"&&(y instanceof Array&&(s=y,y=s.pop()),y=e.symbols_[y]||y),y}for(var l,g,h,w,_={},b,c,F,S;;){if(g=n[n.length-1],this.defaultActions[g]?h=this.defaultActions[g]:((l===null||typeof l>"u")&&(l=U()),h=d[g]&&d[g][l]),typeof h>"u"||!h.length||!h[0]){var A="";S=[];for(b in d[g])this.terminals_[b]&&b>N&&S.push("'"+this.terminals_[b]+"'");o.showPosition?A="Parse error on line "+(v+1)+`:
                   `+o.showPosition()+`
                   Expecting `+S.join(", ")+", got '"+(this.terminals_[l]||l)+"'":A="Parse error on line "+(v+1)+": Unexpected "+(l==T?"end of input":"'"+(this.terminals_[l]||l)+"'"),this.parseError(A,{text:o.match,token:this.terminals_[l]||l,line:o.yylineno,loc:I,expected:S})}if(h[0]instanceof Array&&h.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+l);switch(h[0]){case 1:n.push(l),r.push(o.yytext),i.push(o.yylloc),n.push(h[1]),l=null,L=o.yyleng,P=o.yytext,v=o.yylineno,I=o.yylloc;break;case 2:if(c=this.productions_[h[1]][1],_.$=r[r.length-c],_._$={first_line:i[i.length-(c||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(c||1)].first_column,last_column:i[i.length-1].last_column},z&&(_._$.range=[i[i.length-(c||1)].range[0],i[i.length-1].range[1]]),w=this.performAction.apply(_,[P,L,v,p.yy,h[1],r,i].concat(R)),typeof w<"u")return w;c&&(n=n.slice(0,-1*c*2),r=r.slice(0,-1*c),i=i.slice(0,-1*c)),n.push(this.productions_[h[1]][0]),r.push(_.$),i.push(_._$),F=d[n[n.length-2]][n[n.length-1]],n.push(F);break;case 3:return!0}}return!0}},k=function(){var u={EOF:1,parseError:function(e,n){if(this.yy.parser)this.yy.parser.parseError(e,n);else throw new Error(e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t;var e=t.match(/(?:\r\n?|\n).*/g);return e?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===s.length?this.yylloc.first_column:0)+s[s.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
                   `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+`
                  diff --git a/assets/install_zlmediakit_using_vcpkg.html-4lMDCmIH.js b/assets/install_zlmediakit_using_vcpkg.html-4lMDCmIH.js
                  deleted file mode 100644
                  index 041dee9..0000000
                  --- a/assets/install_zlmediakit_using_vcpkg.html-4lMDCmIH.js
                  +++ /dev/null
                  @@ -1 +0,0 @@
                  -const t=JSON.parse('{"key":"v-2a95408c","path":"/guide/install/install_zlmediakit_using_vcpkg.html","title":"Installing zlmediakit with vcpkg","lang":"en-US","frontmatter":{"title":"Installing zlmediakit with vcpkg","description":"vcpkg is a cross-platform SDK package management tool, similar to yum/apt on Linux and Homebrew on macOS. It supports multiple platforms such as Linux, macOS, and Windows, makin...","head":[["link",{"rel":"alternate","hreflang":"zh-cn","href":"https://docs.ZLMediaKit.com/zh/guide/install/install_zlmediakit_using_vcpkg.html"}],["meta",{"property":"og:url","content":"https://docs.ZLMediaKit.com/guide/install/install_zlmediakit_using_vcpkg.html"}],["meta",{"property":"og:site_name","content":"ZLMediaKit"}],["meta",{"property":"og:title","content":"Installing zlmediakit with vcpkg"}],["meta",{"property":"og:description","content":"vcpkg is a cross-platform SDK package management tool, similar to yum/apt on Linux and Homebrew on macOS. It supports multiple platforms such as Linux, macOS, and Windows, makin..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2023-11-19T19:55:59.000Z"}],["meta",{"property":"article:author","content":"ZLMediaKit"}],["meta",{"property":"article:modified_time","content":"2023-11-19T19:55:59.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"Installing zlmediakit with vcpkg\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2023-11-19T19:55:59.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"ZLMediaKit\\",\\"url\\":\\"https://docs.ZLMediaKit.com\\"}]}"]]},"headers":[{"level":2,"title":"1. Install vcpkg","slug":"_1-install-vcpkg","link":"#_1-install-vcpkg","children":[]},{"level":2,"title":"2. Install zlmediakit","slug":"_2-install-zlmediakit","link":"#_2-install-zlmediakit","children":[]},{"level":2,"title":"3. Install different versions","slug":"_3-install-different-versions","link":"#_3-install-different-versions","children":[]}],"git":{"createdTime":1700423759000,"updatedTime":1700423759000,"contributors":[{"name":"Alex","email":"liyu7352@gmail.com","commits":1}]},"readingTime":{"minutes":1.12,"words":337},"filePathRelative":"guide/install/install_zlmediakit_using_vcpkg.md","localizedDate":"November 19, 2023","autoDesc":true}');export{t as data};
                  diff --git a/assets/install_zlmediakit_using_vcpkg.html-RuAB6C5H.js b/assets/install_zlmediakit_using_vcpkg.html-NCcA9KPG.js
                  similarity index 99%
                  rename from assets/install_zlmediakit_using_vcpkg.html-RuAB6C5H.js
                  rename to assets/install_zlmediakit_using_vcpkg.html-NCcA9KPG.js
                  index c7ce600..d00248a 100644
                  --- a/assets/install_zlmediakit_using_vcpkg.html-RuAB6C5H.js
                  +++ b/assets/install_zlmediakit_using_vcpkg.html-NCcA9KPG.js
                  @@ -1,4 +1,4 @@
                  -import{_ as l,a as c}from"./install_zlmediakit_using_vcpkg_2-1HFW-yNt.js";import{_ as d}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as r,c as p,a as n,d as e,b as s,e as i}from"./app-BrxqtzGY.js";const o={},u=n("h1",{id:"简介",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#简介","aria-hidden":"true"},"#"),e(" 简介")],-1),v={href:"https://github.com/JackBoosY",target:"_blank",rel:"noopener noreferrer"},m=i(`

                  安装指导

                  1、安装 vcpkg

                  以 linux 平台为例:

                  # 下载vcpkg工具
                  +import{_ as l,a as c}from"./install_zlmediakit_using_vcpkg_2-1HFW-yNt.js";import{_ as d}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as r,c as p,a as n,d as e,b as s,e as i}from"./app-oTlYPy8h.js";const o={},u=n("h1",{id:"简介",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#简介","aria-hidden":"true"},"#"),e(" 简介")],-1),v={href:"https://github.com/JackBoosY",target:"_blank",rel:"noopener noreferrer"},m=i(`

                  安装指导

                  1、安装 vcpkg

                  以 linux 平台为例:

                  # 下载vcpkg工具
                   git clone https://github.com/microsoft/vcpkg
                   # 开始安装;如果提示安装失败,请先安装依赖
                   ./vcpkg/bootstrap-vcpkg.sh
                  diff --git a/assets/install_zlmediakit_using_vcpkg.html-_H3jokEy.js b/assets/install_zlmediakit_using_vcpkg.html-_H3jokEy.js
                  new file mode 100644
                  index 0000000..b2c668a
                  --- /dev/null
                  +++ b/assets/install_zlmediakit_using_vcpkg.html-_H3jokEy.js
                  @@ -0,0 +1 @@
                  +const t=JSON.parse('{"key":"v-2a95408c","path":"/guide/install/install_zlmediakit_using_vcpkg.html","title":"Installing zlmediakit with vcpkg","lang":"en-US","frontmatter":{"title":"Installing zlmediakit with vcpkg","description":"Introduction vcpkg is a cross-platform SDK package management tool, similar to yum/apt on Linux and Homebrew on macOS. It supports multiple platforms such as Linux, macOS, and W...","head":[["link",{"rel":"alternate","hreflang":"zh-cn","href":"https://docs.ZLMediaKit.com/zh/guide/install/install_zlmediakit_using_vcpkg.html"}],["meta",{"property":"og:url","content":"https://docs.ZLMediaKit.com/guide/install/install_zlmediakit_using_vcpkg.html"}],["meta",{"property":"og:site_name","content":"ZLMediaKit"}],["meta",{"property":"og:title","content":"Installing zlmediakit with vcpkg"}],["meta",{"property":"og:description","content":"Introduction vcpkg is a cross-platform SDK package management tool, similar to yum/apt on Linux and Homebrew on macOS. It supports multiple platforms such as Linux, macOS, and W..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2023-12-06T10:57:32.000Z"}],["meta",{"property":"article:author","content":"ZLMediaKit"}],["meta",{"property":"article:modified_time","content":"2023-12-06T10:57:32.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"Installing zlmediakit with vcpkg\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2023-12-06T10:57:32.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"ZLMediaKit\\",\\"url\\":\\"https://docs.ZLMediaKit.com\\"}]}"]]},"headers":[{"level":2,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":2,"title":"Installation Guide","slug":"installation-guide","link":"#installation-guide","children":[]},{"level":2,"title":"1. Install vcpkg","slug":"_1-install-vcpkg","link":"#_1-install-vcpkg","children":[]},{"level":2,"title":"2. Install zlmediakit","slug":"_2-install-zlmediakit","link":"#_2-install-zlmediakit","children":[]},{"level":2,"title":"3. Install different versions","slug":"_3-install-different-versions","link":"#_3-install-different-versions","children":[]}],"git":{"createdTime":1700423759000,"updatedTime":1701860252000,"contributors":[{"name":"Alex","email":"liyu7352@gmail.com","commits":1},{"name":"Mr.Hope","email":"mister-hope@outlook.com","commits":1}]},"readingTime":{"minutes":1.12,"words":337},"filePathRelative":"guide/install/install_zlmediakit_using_vcpkg.md","localizedDate":"November 19, 2023","autoDesc":true}');export{t as data};
                  diff --git a/assets/install_zlmediakit_using_vcpkg.html-hSrbYLMY.js b/assets/install_zlmediakit_using_vcpkg.html-ii7HljTN.js
                  similarity index 91%
                  rename from assets/install_zlmediakit_using_vcpkg.html-hSrbYLMY.js
                  rename to assets/install_zlmediakit_using_vcpkg.html-ii7HljTN.js
                  index 77d1cd0..3e08de6 100644
                  --- a/assets/install_zlmediakit_using_vcpkg.html-hSrbYLMY.js
                  +++ b/assets/install_zlmediakit_using_vcpkg.html-ii7HljTN.js
                  @@ -1,4 +1,4 @@
                  -import{_ as l,a as t}from"./install_zlmediakit_using_vcpkg_2-1HFW-yNt.js";import{_ as c}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as d,o as r,c as o,a as n,d as e,b as s,e as i}from"./app-BrxqtzGY.js";const p={},u=n("h1",{id:"introduction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#introduction","aria-hidden":"true"},"#"),e(" Introduction")],-1),v={href:"https://github.com/JackBoosY",target:"_blank",rel:"noopener noreferrer"},m=i(`

                  Installation Guide

                  1. Install vcpkg

                  Taking Linux platform as an example:

                  # Download vcpkg tool
                  +import{_ as l,a as t}from"./install_zlmediakit_using_vcpkg_2-1HFW-yNt.js";import{_ as c}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as d,o as r,c as o,a as n,d as e,b as s,e as i}from"./app-oTlYPy8h.js";const p={},u=n("h2",{id:"introduction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#introduction","aria-hidden":"true"},"#"),e(" Introduction")],-1),v={href:"https://github.com/JackBoosY",target:"_blank",rel:"noopener noreferrer"},m=i(`

                  Installation Guide

                  1. Install vcpkg

                  Taking Linux platform as an example:

                  # Download vcpkg tool
                   git clone https://github.com/microsoft/vcpkg
                   # Start the installation; if prompted with installation failure, please install the dependencies first
                   ./vcpkg/bootstrap-vcpkg.sh
                  @@ -8,7 +8,7 @@ import{_ as l,a as t}from"./install_zlmediakit_using_vcpkg_2-1HFW-yNt.js";import
                   
                • Install zlmediakit with all features (including webrtc datachannel)

                  ./vcpkg/vcpkg install zlmediakit\\[core,mp4,openssl,webrtc,sctp\\]
                   
                • Install zlmediakit with minimum features

                  ./vcpkg/vcpkg install zlmediakit\\[core\\]
                   
                • Uninstall zlmediakit

                  ./vcpkg/vcpkg remove zlmediakit
                  -
                • Installation path

                The MediaServer process depends on config.ini, default.pem, www, and other related files, which can be copied from the source code.

                3. Install different versions

                • Check the platforms supported by vcpkg
                ./vcpkg/vcpkg help triplet
                +
              • Installation path

                The MediaServer process depends on config.ini, default.pem, www, and other related files, which can be copied from the source code.

              3. Install different versions

              • Check the platforms supported by vcpkg
              ./vcpkg/vcpkg help triplet
               
              • Example for Linux

                ./vcpkg/vcpkg help triplet | grep linux
                   x64-linux
                   x86-linux
                @@ -34,4 +34,4 @@ import{_ as l,a as t}from"./install_zlmediakit_using_vcpkg_2-1HFW-yNt.js";import
                 ./vcpkg/vcpkg remove zlmediakit
                 # Then install the dynamic library version
                 ./vcpkg/vcpkg install zlmediakit\\[core,mp4,openssl,webrtc,sctp\\]:x64-linux-dynamic
                -
              install_zlmediakit_using_vcpkg_2
              install_zlmediakit_using_vcpkg_2
              ',8);function b(k,f){const a=d("ExternalLinkIcon");return r(),o("div",null,[u,n("p",null,[e("vcpkg is a cross-platform SDK package management tool, similar to yum/apt on Linux and Homebrew on macOS. It supports multiple platforms such as Linux, macOS, and Windows, making it a powerful tool for C/C++ developers to manage dependencies. Currently, zlmediakit has been added to vcpkg on August 8, 2023. Users can conveniently install zlmediakit C SDK and MediaServer executable program using vcpkg, resolving various compilation dependency-related issues. The inclusion of zlmediakit in vcpkg has received extensive support from "),n("a",v,[e("@JackBoosY"),s(a)]),e(", and we express our sincere gratitude for that!")]),m,n("blockquote",null,[n("p",null,[e("For specific instructions on different platforms, please refer to the "),n("a",h,[e("official documentation"),s(a)]),e(".")])]),g])}const w=c(p,[["render",b],["__file","install_zlmediakit_using_vcpkg.html.vue"]]);export{w as default}; +
              install_zlmediakit_using_vcpkg_2
              install_zlmediakit_using_vcpkg_2
            ',6);function b(k,f){const a=d("ExternalLinkIcon");return r(),o("div",null,[u,n("p",null,[e("vcpkg is a cross-platform SDK package management tool, similar to yum/apt on Linux and Homebrew on macOS. It supports multiple platforms such as Linux, macOS, and Windows, making it a powerful tool for C/C++ developers to manage dependencies. Currently, zlmediakit has been added to vcpkg on August 8, 2023. Users can conveniently install zlmediakit C SDK and MediaServer executable program using vcpkg, resolving various compilation dependency-related issues. The inclusion of zlmediakit in vcpkg has received extensive support from "),n("a",v,[e("@JackBoosY"),s(a)]),e(", and we express our sincere gratitude for that!")]),m,n("blockquote",null,[n("p",null,[e("For specific instructions on different platforms, please refer to the "),n("a",h,[e("official documentation"),s(a)]),e(".")])]),g])}const w=c(p,[["render",b],["__file","install_zlmediakit_using_vcpkg.html.vue"]]);export{w as default}; diff --git a/assets/introduction_to_streaming_media_related_technologies.html-9hb3DfJc.js b/assets/introduction_to_streaming_media_related_technologies.html-aLJXiBgK.js similarity index 99% rename from assets/introduction_to_streaming_media_related_technologies.html-9hb3DfJc.js rename to assets/introduction_to_streaming_media_related_technologies.html-aLJXiBgK.js index c17f6e0..c36e209 100644 --- a/assets/introduction_to_streaming_media_related_technologies.html-9hb3DfJc.js +++ b/assets/introduction_to_streaming_media_related_technologies.html-aLJXiBgK.js @@ -1 +1 @@ -import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as p,c as e,e as r}from"./app-BrxqtzGY.js";const a={},h=r('

            1、流媒体简介

            流媒体(streaming media)是指将一连串的媒体数据压缩后,经过网络分段发送数据,在网上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送;如果不使用此技术,就必须在使用前下载整个媒体文件,这对于实时性要求比较高的场景而言,显然是不现实的,所以流媒体技术为此孕育而生。

            传统的视频监控、IPTV,以及这几年兴起的视频直播、网络授课都属于流媒体的范畴,从广义上来讲,视频通话,视频会议也属于流媒体。

            2、视频监控

            2.1 传统解决方案的现状和挑战

            视频监控是流媒体技术传统的应用场景,在政府、企业以及现在逐渐流行的个人消费市场有着广泛的应用。特别是近几年来,国内各大城市逐步推进平安城市项目进程,在安防、交通等领域,视频监控市场规模愈发壮大。而且随着室内家居摄像头、车载记录仪的普及,视频监控可以说在人们的生活中无处不在。

            传统的视频监控解决方案主要建立在基于 LAN 的网络、服务器、录像机和摄像机的基础之上。这些高度复杂的解决方案具有很高的施工和维护成本, 因为传统基础设施价格高昂,并且需要时间来规划、实施和维护。传统的视频监控解决方案也不好扩容维护,对于用户而言,也不友好,操作使用局限在局域网中,已经难以适合新时代的发展。

            2.2 发展趋势

            由于一些互联网企业的入局,视频监控行业也在经历一系列的变局,譬如小米摄像头、360 水滴摄像头的流行,也鞭策着传统的视频监控行业相关企业的变革(譬如海康威视推出的萤石云平台),虽然目前这些变革多数还局限于个人消费市场,但从长远来看,视频监控上云,是未来发展的大趋势。

            基于云的视频监控解决方案由于其高质量、可靠性、安全性、便捷性以及较低的部署和维护成本而越来越受到人们的青睐。

            预计未来视频监控,将像目前流行的网络直播一样方便,用户安装好摄像头后,接入网络即可视频上云。使用者在浏览器或 APP 即可查看所有摄像头的实时监控以及历史录像,通过 APP 或绑定的手机号码,可以实时接收摄像头发送的事件通知(譬如入侵事件)。

            2.3 技术难点

            由于历史原因,传统的视频监控行业技术栈多采用私有协议 SDK、onvif/rtsp 等协议栈。这些协议目前对浏览器而言都不友好,在以前 IE 浏览器还流行的时期,可以通过 ocx 插件的方式来对接这些协议,但是随着 IE 的没落以及目前流行的 chrome、火狐浏览器对原生插件的愈加不友好,通过插件的方式来实现访问监控视频的方式将愈发困难。如果要在 chrome、火狐浏览器上访问监控视频,目前有以下几种方案可行:

            • rtmp

              目前主流的 chrome 和火狐浏览器都还支持 flash 插件,所以目前在浏览器上还可以通过 rtmp 方式来访问监控视频。但是由于随着 html5 的普及以及 flash 的停止更新,预计可预见的未来,rtmp 技术将随着 flash 一起行将就木(谷歌宣布 chrome 浏览器 2020 年 12 月将不再支持 flash player)。

            • http-flv

            http-flv 直播的方式是一种比较新颖的方式,该技术基于 html5,可以通过无插件的方式实现视频直播,而且由于 rtmp 负载可以平滑的转换成 http-flv 协议,所以正在逐渐取代 rtmp 成为新的直播技术标准,目前各大直播网站(譬如斗鱼直播,bilibili 等)也陆续从 rtmp 切换成该技术。 但是由于浏览器的限制,不能同时打开过多(chrome 限制 6 个)的同域名下的直播窗口,所以该技术也不太适合多路同时打开(譬如 9 宫格视频)的视频监控领域。而且由于 Adobe 的不作为,flv 容器格式停止了更新,对 H265 的支持遥遥无期。

            • ws-flv

              ws-flv 直播技术基本与 http-flv 一致,无非是传输介质换成了 websocket 协议,除了解除了 http-flv 不能同时打开过多同域名下的直播窗口的限制,其他技术特性、参数基本与 http-flv 一致。目前看,ws-flv 既适合视频监控(可以同时打开多路监控视频)也适合视频直播行业,是 rtmp 很高的升级替代方案。

            • webrtc

              webrtc 是谷歌主导的视频通话技术标准,目前各大主流浏览器都兼容该标准。通过该技术,用户可以在浏览器上实现无插件的视频通话,该技术也可以用于实现低延时的视频直播。目前业界也有很多基于 webrtc 的应用和产品,但是很多局限于视频聊天等低延时交互式场景,在视频监控领域,目前还尚未流行。而且该技术栈目前还在持续更新,技术难点太多,要与视频监控领域融合还需时日。

            • hls

              hls 协议是苹果公司主导的技术标准,该技术标准兼容性最佳。不仅桌面浏览器,包括手机浏览器甚至是手机 QQ、手机微信都支持该直播协议。 但是该协议延时比较大,不太适合视频监控等对延时要求很敏感的行业。不过最近苹果公司新推出低延时 hls 直播标准,预计 hls 标准将抢占更大的市场份额。

            以上直播技术标准目前都不完全契合视频监控行业的需求,如果要达到比较好的用户体验,通常以上技术混合使用。

            3、视频直播

            3.1 视频直播的现状和挑战

            视频直播是近几年才兴起的产业,特别是随着游戏直播、手机直播的流行,视频直播已经司空见惯,进入了每个人的视野。 随着阿里、腾讯等云平台的入局,OBS,SRS 等优秀软件的开源,视频加速 CDN 技术的成熟,打赏、广告等商业模式的落地,目前视频直播产业链已经非常成熟,业界也诞生了斗鱼、虎牙、映客、花椒等知名直播平台。

            目前而言,这些直播平台使用的技术栈基本都是 rtmp,但是由于 flash 技术即将被淘汰,所以直播行业也将迎来一些变局以及挑战。 现在,基本上所有的直播平台,在 web 端,都已经或正在往 http-flv 方案转型。由于 flv 与 rtmp 同出一门(都是 Adobe 公司产品),负载格式一致,方案升级改造平滑可靠,http-flv 替代 rtmp 具有天然的优势,相信将来 http-flv 能很好的挑起 rtmp 的大梁。

            3.2 发展趋势

            视频直播目前从内容上来讲,涵盖了游戏、美女、户外、娱乐、体育等直播;从设备上来讲,涵盖了 PC、手机、web、电视等客户端,市场上也诞生了斗鱼这样的头部企业。从目前来看,视频直播行业市场格局已经比较稳固,进入了平稳发展期。

            从技术上来讲,直播行业也将迎来一些变革。 一是 rtmp 技术随着 flash 的一起淘汰,web 端 rtmp 播放器将成为历史。 二是随着 webrtc 的强势流行,直播技术栈可能与 webrtc 融合。 三是苹果主导的低延时 hls 的推出,可能最终有大一统之势。

            不过近期来看,http-flv 是 rtmp 的最佳替代方案,但是和 rtmp 一样,也有不支持 H265 的短板,而且移动端浏览器对此支持并不完善,所以该方案在将来有大概率会被其他方案替代。

            3.3 技术难点

            直播行业相对视频监控行业来说,商业化程度更高,更面向于普通消费者,用户规模更大,产业链也更加成熟。但是由于利益格局的划分、巨头间标准制定的角力,目前直播的技术标准和用户体验是割裂的。

            在桌面 web 端,之前直播技术由 Adobe 旗下的 flash/rtmp 技术主导,不过由于 Adobe 的不作为,以及谷歌苹果等公司的抵制,flash 已经进入死亡倒计时。目前来看,http-flv 已经接手 rtmp 的大旗,成为了新的事实上的桌面 web 端直播标准。但是 http-flv 由于其不支持 H265 的短板(Adobe 官方可能永远也不会支持 H265),其地位也并不稳固,现在也有公司正在尝试使用 webrtc 进行视频直播,但是由于该技术跨界太大,其技术栈又太庞杂,整个上下游产业链也并不完善,目前在直播界,还未看见大规模采用该直播技术的方案实施。

            在手机 APP 端,由于播放技术自己可以主导,也由于历史沿革原因,目前一般沿用 rtmp 技术方案(需要指出的是微信小程序也支持 rtmp 播放器),用户体验比较好,延时一般 3 秒或以下。

            在移动 web 端,可采用的直播方案更少,目前基本只能采用苹果公司主导的 hls 方案,但是由于 hls 的技术特性,延时非常大(一般 5 秒以上,最大可达 10 秒以上),其观看体验跟手机 APP、桌面 web 端是严重割裂的。

            通过我们上述的分析看出,目前直播技术方案,在每种端都不一样,用户体验也差距巨大,目前并没有一种多平台支持、令人满意的通用解决方案。目前要实现一个完善的直播产品,最少要采用包括 rtmp/http-flv/hls 这 3 种技术方案,而且这三种技术方案目前也并不能让人满意(rtmp/http-flv 不支持 H265,hls 延时高)。

            4、我们的解决方案以及优势

            目前我们的流媒体服务框架支持 rtsp/rtmp 推流客户端,rtsp/rtmp/http-flv/ws-flv/hls 播放客户端,并且可以无缝把 rtsp/rtmp 推流转换成上述 4 种播放协议,同时我们也支持 mp4 录制存档,必要的时候也可以从 mp4 文件加载成直播流。

            除了上述功能之外,我们还支持拉流 rtsp/rtmp 代理成 rtsp/rtmp/http-flv/ws-flv/hls,也支持把直播 rtsp/rtmp 流推送到其他的服务器。

            另外,我们还提供丰富的 http api 以及 http hook api,通过这些 api,我们可以与其他业务服务器一起,打造丰富的业务逻辑。

            我们的流媒体框架支持 linux、macos、ios、android、windows 全平台,既可以作为商用的流媒体服务器,也可以移植到嵌入式设备中,作为基础流媒体服务组件。

            代码采用 C++11 标准打造,避免使用裸指针,稳定可靠,采用 epoll 多路复用、线程池、异步网络 IO 模式开发,并发性能优越,已经经受住了长期的高并发验证考验。同时针对及时推流的特征,做了特别的优化,可以减少视频打开延时、提高画面打开成功率,让用户获取画面秒开,延时极低的体验。

            ',37),l=[h];function i(s,d){return p(),e("div",null,l)}const c=t(a,[["render",i],["__file","introduction_to_streaming_media_related_technologies.html.vue"]]);export{c as default}; +import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as p,c as e,e as r}from"./app-oTlYPy8h.js";const a={},h=r('

            1、流媒体简介

            流媒体(streaming media)是指将一连串的媒体数据压缩后,经过网络分段发送数据,在网上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送;如果不使用此技术,就必须在使用前下载整个媒体文件,这对于实时性要求比较高的场景而言,显然是不现实的,所以流媒体技术为此孕育而生。

            传统的视频监控、IPTV,以及这几年兴起的视频直播、网络授课都属于流媒体的范畴,从广义上来讲,视频通话,视频会议也属于流媒体。

            2、视频监控

            2.1 传统解决方案的现状和挑战

            视频监控是流媒体技术传统的应用场景,在政府、企业以及现在逐渐流行的个人消费市场有着广泛的应用。特别是近几年来,国内各大城市逐步推进平安城市项目进程,在安防、交通等领域,视频监控市场规模愈发壮大。而且随着室内家居摄像头、车载记录仪的普及,视频监控可以说在人们的生活中无处不在。

            传统的视频监控解决方案主要建立在基于 LAN 的网络、服务器、录像机和摄像机的基础之上。这些高度复杂的解决方案具有很高的施工和维护成本, 因为传统基础设施价格高昂,并且需要时间来规划、实施和维护。传统的视频监控解决方案也不好扩容维护,对于用户而言,也不友好,操作使用局限在局域网中,已经难以适合新时代的发展。

            2.2 发展趋势

            由于一些互联网企业的入局,视频监控行业也在经历一系列的变局,譬如小米摄像头、360 水滴摄像头的流行,也鞭策着传统的视频监控行业相关企业的变革(譬如海康威视推出的萤石云平台),虽然目前这些变革多数还局限于个人消费市场,但从长远来看,视频监控上云,是未来发展的大趋势。

            基于云的视频监控解决方案由于其高质量、可靠性、安全性、便捷性以及较低的部署和维护成本而越来越受到人们的青睐。

            预计未来视频监控,将像目前流行的网络直播一样方便,用户安装好摄像头后,接入网络即可视频上云。使用者在浏览器或 APP 即可查看所有摄像头的实时监控以及历史录像,通过 APP 或绑定的手机号码,可以实时接收摄像头发送的事件通知(譬如入侵事件)。

            2.3 技术难点

            由于历史原因,传统的视频监控行业技术栈多采用私有协议 SDK、onvif/rtsp 等协议栈。这些协议目前对浏览器而言都不友好,在以前 IE 浏览器还流行的时期,可以通过 ocx 插件的方式来对接这些协议,但是随着 IE 的没落以及目前流行的 chrome、火狐浏览器对原生插件的愈加不友好,通过插件的方式来实现访问监控视频的方式将愈发困难。如果要在 chrome、火狐浏览器上访问监控视频,目前有以下几种方案可行:

            • rtmp

              目前主流的 chrome 和火狐浏览器都还支持 flash 插件,所以目前在浏览器上还可以通过 rtmp 方式来访问监控视频。但是由于随着 html5 的普及以及 flash 的停止更新,预计可预见的未来,rtmp 技术将随着 flash 一起行将就木(谷歌宣布 chrome 浏览器 2020 年 12 月将不再支持 flash player)。

            • http-flv

            http-flv 直播的方式是一种比较新颖的方式,该技术基于 html5,可以通过无插件的方式实现视频直播,而且由于 rtmp 负载可以平滑的转换成 http-flv 协议,所以正在逐渐取代 rtmp 成为新的直播技术标准,目前各大直播网站(譬如斗鱼直播,bilibili 等)也陆续从 rtmp 切换成该技术。 但是由于浏览器的限制,不能同时打开过多(chrome 限制 6 个)的同域名下的直播窗口,所以该技术也不太适合多路同时打开(譬如 9 宫格视频)的视频监控领域。而且由于 Adobe 的不作为,flv 容器格式停止了更新,对 H265 的支持遥遥无期。

            • ws-flv

              ws-flv 直播技术基本与 http-flv 一致,无非是传输介质换成了 websocket 协议,除了解除了 http-flv 不能同时打开过多同域名下的直播窗口的限制,其他技术特性、参数基本与 http-flv 一致。目前看,ws-flv 既适合视频监控(可以同时打开多路监控视频)也适合视频直播行业,是 rtmp 很高的升级替代方案。

            • webrtc

              webrtc 是谷歌主导的视频通话技术标准,目前各大主流浏览器都兼容该标准。通过该技术,用户可以在浏览器上实现无插件的视频通话,该技术也可以用于实现低延时的视频直播。目前业界也有很多基于 webrtc 的应用和产品,但是很多局限于视频聊天等低延时交互式场景,在视频监控领域,目前还尚未流行。而且该技术栈目前还在持续更新,技术难点太多,要与视频监控领域融合还需时日。

            • hls

              hls 协议是苹果公司主导的技术标准,该技术标准兼容性最佳。不仅桌面浏览器,包括手机浏览器甚至是手机 QQ、手机微信都支持该直播协议。 但是该协议延时比较大,不太适合视频监控等对延时要求很敏感的行业。不过最近苹果公司新推出低延时 hls 直播标准,预计 hls 标准将抢占更大的市场份额。

            以上直播技术标准目前都不完全契合视频监控行业的需求,如果要达到比较好的用户体验,通常以上技术混合使用。

            3、视频直播

            3.1 视频直播的现状和挑战

            视频直播是近几年才兴起的产业,特别是随着游戏直播、手机直播的流行,视频直播已经司空见惯,进入了每个人的视野。 随着阿里、腾讯等云平台的入局,OBS,SRS 等优秀软件的开源,视频加速 CDN 技术的成熟,打赏、广告等商业模式的落地,目前视频直播产业链已经非常成熟,业界也诞生了斗鱼、虎牙、映客、花椒等知名直播平台。

            目前而言,这些直播平台使用的技术栈基本都是 rtmp,但是由于 flash 技术即将被淘汰,所以直播行业也将迎来一些变局以及挑战。 现在,基本上所有的直播平台,在 web 端,都已经或正在往 http-flv 方案转型。由于 flv 与 rtmp 同出一门(都是 Adobe 公司产品),负载格式一致,方案升级改造平滑可靠,http-flv 替代 rtmp 具有天然的优势,相信将来 http-flv 能很好的挑起 rtmp 的大梁。

            3.2 发展趋势

            视频直播目前从内容上来讲,涵盖了游戏、美女、户外、娱乐、体育等直播;从设备上来讲,涵盖了 PC、手机、web、电视等客户端,市场上也诞生了斗鱼这样的头部企业。从目前来看,视频直播行业市场格局已经比较稳固,进入了平稳发展期。

            从技术上来讲,直播行业也将迎来一些变革。 一是 rtmp 技术随着 flash 的一起淘汰,web 端 rtmp 播放器将成为历史。 二是随着 webrtc 的强势流行,直播技术栈可能与 webrtc 融合。 三是苹果主导的低延时 hls 的推出,可能最终有大一统之势。

            不过近期来看,http-flv 是 rtmp 的最佳替代方案,但是和 rtmp 一样,也有不支持 H265 的短板,而且移动端浏览器对此支持并不完善,所以该方案在将来有大概率会被其他方案替代。

            3.3 技术难点

            直播行业相对视频监控行业来说,商业化程度更高,更面向于普通消费者,用户规模更大,产业链也更加成熟。但是由于利益格局的划分、巨头间标准制定的角力,目前直播的技术标准和用户体验是割裂的。

            在桌面 web 端,之前直播技术由 Adobe 旗下的 flash/rtmp 技术主导,不过由于 Adobe 的不作为,以及谷歌苹果等公司的抵制,flash 已经进入死亡倒计时。目前来看,http-flv 已经接手 rtmp 的大旗,成为了新的事实上的桌面 web 端直播标准。但是 http-flv 由于其不支持 H265 的短板(Adobe 官方可能永远也不会支持 H265),其地位也并不稳固,现在也有公司正在尝试使用 webrtc 进行视频直播,但是由于该技术跨界太大,其技术栈又太庞杂,整个上下游产业链也并不完善,目前在直播界,还未看见大规模采用该直播技术的方案实施。

            在手机 APP 端,由于播放技术自己可以主导,也由于历史沿革原因,目前一般沿用 rtmp 技术方案(需要指出的是微信小程序也支持 rtmp 播放器),用户体验比较好,延时一般 3 秒或以下。

            在移动 web 端,可采用的直播方案更少,目前基本只能采用苹果公司主导的 hls 方案,但是由于 hls 的技术特性,延时非常大(一般 5 秒以上,最大可达 10 秒以上),其观看体验跟手机 APP、桌面 web 端是严重割裂的。

            通过我们上述的分析看出,目前直播技术方案,在每种端都不一样,用户体验也差距巨大,目前并没有一种多平台支持、令人满意的通用解决方案。目前要实现一个完善的直播产品,最少要采用包括 rtmp/http-flv/hls 这 3 种技术方案,而且这三种技术方案目前也并不能让人满意(rtmp/http-flv 不支持 H265,hls 延时高)。

            4、我们的解决方案以及优势

            目前我们的流媒体服务框架支持 rtsp/rtmp 推流客户端,rtsp/rtmp/http-flv/ws-flv/hls 播放客户端,并且可以无缝把 rtsp/rtmp 推流转换成上述 4 种播放协议,同时我们也支持 mp4 录制存档,必要的时候也可以从 mp4 文件加载成直播流。

            除了上述功能之外,我们还支持拉流 rtsp/rtmp 代理成 rtsp/rtmp/http-flv/ws-flv/hls,也支持把直播 rtsp/rtmp 流推送到其他的服务器。

            另外,我们还提供丰富的 http api 以及 http hook api,通过这些 api,我们可以与其他业务服务器一起,打造丰富的业务逻辑。

            我们的流媒体框架支持 linux、macos、ios、android、windows 全平台,既可以作为商用的流媒体服务器,也可以移植到嵌入式设备中,作为基础流媒体服务组件。

            代码采用 C++11 标准打造,避免使用裸指针,稳定可靠,采用 epoll 多路复用、线程池、异步网络 IO 模式开发,并发性能优越,已经经受住了长期的高并发验证考验。同时针对及时推流的特征,做了特别的优化,可以减少视频打开延时、提高画面打开成功率,让用户获取画面秒开,延时极低的体验。

            ',37),l=[h];function i(s,d){return p(),e("div",null,l)}const c=t(a,[["render",i],["__file","introduction_to_streaming_media_related_technologies.html.vue"]]);export{c as default}; diff --git a/assets/introduction_to_streaming_media_related_technologies.html-I9N-fJX2.js b/assets/introduction_to_streaming_media_related_technologies.html-qLQLZbA3.js similarity index 99% rename from assets/introduction_to_streaming_media_related_technologies.html-I9N-fJX2.js rename to assets/introduction_to_streaming_media_related_technologies.html-qLQLZbA3.js index d7e898c..b84cf9c 100644 --- a/assets/introduction_to_streaming_media_related_technologies.html-I9N-fJX2.js +++ b/assets/introduction_to_streaming_media_related_technologies.html-qLQLZbA3.js @@ -1 +1 @@ -import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as p,c as e,e as r}from"./app-BrxqtzGY.js";const a={},h=r('

            1、流媒体简介

            流媒体(streaming media)是指将一连串的媒体数据压缩后,经过网络分段发送数据,在网上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送;如果不使用此技术,就必须在使用前下载整个媒体文件,这对于实时性要求比较高的场景而言,显然是不现实的,所以流媒体技术为此孕育而生。

            传统的视频监控、IPTV,以及这几年兴起的视频直播、网络授课都属于流媒体的范畴,从广义上来讲,视频通话,视频会议也属于流媒体。

            2、视频监控

            2.1 传统解决方案的现状和挑战

            视频监控是流媒体技术传统的应用场景,在政府、企业以及现在逐渐流行的个人消费市场有着广泛的应用。特别是近几年来,国内各大城市逐步推进平安城市项目进程,在安防、交通等领域,视频监控市场规模愈发壮大。而且随着室内家居摄像头、车载记录仪的普及,视频监控可以说在人们的生活中无处不在。

            传统的视频监控解决方案主要建立在基于 LAN 的网络、服务器、录像机和摄像机的基础之上。这些高度复杂的解决方案具有很高的施工和维护成本, 因为传统基础设施价格高昂,并且需要时间来规划、实施和维护。传统的视频监控解决方案也不好扩容维护,对于用户而言,也不友好,操作使用局限在局域网中,已经难以适合新时代的发展。

            2.2 发展趋势

            由于一些互联网企业的入局,视频监控行业也在经历一系列的变局,譬如小米摄像头、360 水滴摄像头的流行,也鞭策着传统的视频监控行业相关企业的变革(譬如海康威视推出的萤石云平台),虽然目前这些变革多数还局限于个人消费市场,但从长远来看,视频监控上云,是未来发展的大趋势。

            基于云的视频监控解决方案由于其高质量、可靠性、安全性、便捷性以及较低的部署和维护成本而越来越受到人们的青睐。

            预计未来视频监控,将像目前流行的网络直播一样方便,用户安装好摄像头后,接入网络即可视频上云。使用者在浏览器或 APP 即可查看所有摄像头的实时监控以及历史录像,通过 APP 或绑定的手机号码,可以实时接收摄像头发送的事件通知(譬如入侵事件)。

            2.3 技术难点

            由于历史原因,传统的视频监控行业技术栈多采用私有协议 SDK、onvif/rtsp 等协议栈。这些协议目前对浏览器而言都不友好,在以前 IE 浏览器还流行的时期,可以通过 ocx 插件的方式来对接这些协议,但是随着 IE 的没落以及目前流行的 chrome、火狐浏览器对原生插件的愈加不友好,通过插件的方式来实现访问监控视频的方式将愈发困难。如果要在 chrome、火狐浏览器上访问监控视频,目前有以下几种方案可行:

            • rtmp

              目前主流的 chrome 和火狐浏览器都还支持 flash 插件,所以目前在浏览器上还可以通过 rtmp 方式来访问监控视频。但是由于随着 html5 的普及以及 flash 的停止更新,预计可预见的未来,rtmp 技术将随着 flash 一起行将就木(谷歌宣布 chrom 浏览器 2020 年 12 月将不再支持 flash player)。

            • http-flv

              http-flv 直播的方式是一种比较新颖的方式,该技术基于 html5,可以通过无插件的方式实现视频直播,而且由于 rtmp 负载可以平滑的转换成 http-flv 协议,所以正在逐渐取代 rtmp 成为新的直播技术标准,目前各大直播网站(譬如斗鱼直播,bilibili 等)也陆续从 rtmp 切换成该技术。 但是由于浏览器的限制,不能同时打开过多(chrome 限制 6 个)的同域名下的直播窗口,所以该技术也不太适合多路同时打开(譬如 9 宫格视频)的视频监控领域。而且由于 Adobe 的不作为,flv 容器格式停止了更新,对 H265 的支持遥遥无期。

            • ws-flv

              ws-flv 直播技术基本与 http-flv 一致,无非是传输介质换成了 websocket 协议,除了解除了 http-flv 不能同时打开过多同域名下的直播窗口的限制,其他技术特性、参数基本与 http-flv 一致。目前看,ws-flv 既适合视频监控(可以同时打开多路监控视频)也适合视频直播行业,是 rtmp 很高的升级替代方案。

            • webrtc

              webrtc 是谷歌主导的视频通话技术标准,目前各大主流浏览器都兼容该标准。通过该技术,用户可以在浏览器上实现无插件的视频通话,该技术也可以用于实现低延时的视频直播。目前业界也有很多基于 webrtc 的应用和产品,但是很多局限于视频聊天等低延时交互式场景,在视频监控领域,目前还尚未流行。而且该技术栈目前还在持续更新,技术难点太多,要与视频监控领域融合还需时日。

            • hls

              hls 协议是苹果公司主导的技术标准,该技术标准兼容性最佳。不仅桌面浏览器,包括手机浏览器甚至是手机 QQ、手机微信都支持该直播协议。 但是该协议延时比较大,不太适合视频监控等对延时要求很敏感的行业。不过最近苹果公司新推出低延时 hls 直播标准,预计 hls 标准将抢占更大的市场份额。

            以上直播技术标准目前都不完全契合视频监控行业的需求,如果要达到比较好的用户体验,通常以上技术混合使用。

            3、视频直播

            3.1 视频直播的现状和挑战

            视频直播是近几年才兴起的产业,特别是随着游戏直播、手机直播的流行,视频直播已经司空见惯,进入了每个人的视野。 随着阿里、腾讯等云平台的入局,OBS,SRS 等优秀软件的开源,视频加速 CDN 技术的成熟,打赏、广告等商业模式的落地,目前视频直播产业链已经非常成熟,业界也诞生了斗鱼、虎牙、映客、花椒等知名直播平台。

            目前而言,这些直播平台使用的技术栈基本都是 rtmp,但是由于 flash 技术即将被淘汰,所以直播行业也将迎来一些变局以及挑战。 现在,基本上所有的直播平台,在 web 端,都已经或正在往 http-flv 方案转型。由于 flv 与 rtmp 同出一门(都是 Adobe 公司产品),负载格式一致,方案升级改造平滑可靠,http-flv 替代 rtmp 具有天然的优势,相信将来 http-flv 能很好的挑起 rtmp 的大梁。

            3.2 发展趋势

            视频直播目前从内容上来讲,涵盖了游戏、美女、户外、娱乐、体育等直播;从设备上来讲,涵盖了 PC、手机、web、电视等客户端,市场上也诞生了斗鱼这样的头部企业。从目前来看,视频直播行业市场格局已经比较稳固,进入了平稳发展期。

            从技术上来讲,直播行业也将迎来一些变革。 一是 rtmp 技术随着 flash 的一起淘汰,web 端 rtmp 播放器将成为历史。 二是随着 webrtc 的强势流行,直播技术栈可能与 webrtc 融合。 三是苹果主导的低延时 hls 的推出,可能最终有大一统之势。

            不过近期来看,http-flv 是 rtmp 的最佳替代方案,但是和 rtmp 一样,也有不支持 H265 的短板,而且移动端浏览器对此支持并不完善,所以该方案在将来有大概率会被其他方案替代。

            3.3 技术难点

            直播行业相对视频监控行业来说,商业化程度更高,更面向于普通消费者,用户规模更大,产业链也更加成熟。但是由于利益格局的划分、巨头间标准制定的角力,目前直播的技术标准和用户体验是割裂的。

            在桌面 web 端,之前直播技术由 Adobe 旗下的 flash/rtmp 技术主导,不过由于 Adobe 的不作为,以及谷歌苹果等公司的抵制,flash 已经进入死亡倒计时。目前来看,http-flv 已经接手 rtmp 的大旗,成为了新的事实上的桌面 web 端直播标准。但是 http-flv 由于其不支持 H265 的短板(Adobe 官方可能永远也不会支持 H265),其地位也并不稳固,现在也有公司正在尝试使用 webrtc 进行视频直播,但是由于该技术跨界太大,其技术栈又太庞杂,整个上下游产业链也并不完善,目前在直播界,还未看见大规模采用该直播技术的方案实施。

            在手机 APP 端,由于播放技术自己可以主导,也由于历史沿革原因,目前一般沿用 rtmp 技术方案(需要指出的是微信小程序也支持 rtmp 播放器),用户体验比较好,延时一般 3 秒或以下。

            在移动 web 端,可采用的直播方案更少,目前基本只能采用苹果公司主导的 hls 方案,但是由于 hls 的技术特性,延时非常大(一般 5 秒以上,最大可达 10 秒以上),其观看体验跟手机 APP、桌面 web 端是严重割裂的。

            通过我们上述的分析看出,目前直播技术方案,在每种端都不一样,用户体验也差距巨大,目前并没有一种多平台支持、令人满意的通用解决方案。目前要实现一个完善的直播产品,最少要采用包括 rtmp/http-flv/hls 这 3 种技术方案,而且这三种技术方案目前也并不能让人满意(rtmp/http-flv 不支持 H265,hls 延时高)。

            4、我们的解决方案以及优势

            目前我们的流媒体服务框架支持 rtsp/rtmp 推流客户端,rtsp/rtmp/http-flv/ws-flv/hls 播放客户端,并且可以无缝把 rtsp/rtmp 推流转换成上述 4 种播放协议,同时我们也支持 mp4 录制存档,必要的时候也可以从 mp4 文件加载成直播流。

            除了上述功能之外,我们还支持拉流 rtsp/rtmp 代理成 rtsp/rtmp/http-flv/ws-flv/hls,也支持把直播 rtsp/rtmp 流推送到其他的服务器。

            另外,我们还提供丰富的 http api 以及 http hook api,通过这些 api,我们可以与其他业务服务器一起,打造丰富的业务逻辑。

            我们的流媒体框架支持 linux、macos、ios、android、windows 全平台,既可以作为商用的流媒体服务器,也可以移植到嵌入式设备中,作为基础流媒体服务组件。

            代码采用 C++11 标准打造,避免使用裸指针,稳定可靠,采用 epoll 多路复用、线程池、异步网络 IO 模式开发,并发性能优越,已经经受住了长期的高并发验证考验。同时针对及时推流的特征,做了特别的优化,可以减少视频打开延时、提高画面打开成功率,让用户获取画面秒开,延时极低的体验。

            ',35),l=[h];function i(s,d){return p(),e("div",null,l)}const c=t(a,[["render",i],["__file","introduction_to_streaming_media_related_technologies.html.vue"]]);export{c as default}; +import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as p,c as e,e as r}from"./app-oTlYPy8h.js";const a={},h=r('

            1、流媒体简介

            流媒体(streaming media)是指将一连串的媒体数据压缩后,经过网络分段发送数据,在网上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送;如果不使用此技术,就必须在使用前下载整个媒体文件,这对于实时性要求比较高的场景而言,显然是不现实的,所以流媒体技术为此孕育而生。

            传统的视频监控、IPTV,以及这几年兴起的视频直播、网络授课都属于流媒体的范畴,从广义上来讲,视频通话,视频会议也属于流媒体。

            2、视频监控

            2.1 传统解决方案的现状和挑战

            视频监控是流媒体技术传统的应用场景,在政府、企业以及现在逐渐流行的个人消费市场有着广泛的应用。特别是近几年来,国内各大城市逐步推进平安城市项目进程,在安防、交通等领域,视频监控市场规模愈发壮大。而且随着室内家居摄像头、车载记录仪的普及,视频监控可以说在人们的生活中无处不在。

            传统的视频监控解决方案主要建立在基于 LAN 的网络、服务器、录像机和摄像机的基础之上。这些高度复杂的解决方案具有很高的施工和维护成本, 因为传统基础设施价格高昂,并且需要时间来规划、实施和维护。传统的视频监控解决方案也不好扩容维护,对于用户而言,也不友好,操作使用局限在局域网中,已经难以适合新时代的发展。

            2.2 发展趋势

            由于一些互联网企业的入局,视频监控行业也在经历一系列的变局,譬如小米摄像头、360 水滴摄像头的流行,也鞭策着传统的视频监控行业相关企业的变革(譬如海康威视推出的萤石云平台),虽然目前这些变革多数还局限于个人消费市场,但从长远来看,视频监控上云,是未来发展的大趋势。

            基于云的视频监控解决方案由于其高质量、可靠性、安全性、便捷性以及较低的部署和维护成本而越来越受到人们的青睐。

            预计未来视频监控,将像目前流行的网络直播一样方便,用户安装好摄像头后,接入网络即可视频上云。使用者在浏览器或 APP 即可查看所有摄像头的实时监控以及历史录像,通过 APP 或绑定的手机号码,可以实时接收摄像头发送的事件通知(譬如入侵事件)。

            2.3 技术难点

            由于历史原因,传统的视频监控行业技术栈多采用私有协议 SDK、onvif/rtsp 等协议栈。这些协议目前对浏览器而言都不友好,在以前 IE 浏览器还流行的时期,可以通过 ocx 插件的方式来对接这些协议,但是随着 IE 的没落以及目前流行的 chrome、火狐浏览器对原生插件的愈加不友好,通过插件的方式来实现访问监控视频的方式将愈发困难。如果要在 chrome、火狐浏览器上访问监控视频,目前有以下几种方案可行:

            • rtmp

              目前主流的 chrome 和火狐浏览器都还支持 flash 插件,所以目前在浏览器上还可以通过 rtmp 方式来访问监控视频。但是由于随着 html5 的普及以及 flash 的停止更新,预计可预见的未来,rtmp 技术将随着 flash 一起行将就木(谷歌宣布 chrom 浏览器 2020 年 12 月将不再支持 flash player)。

            • http-flv

              http-flv 直播的方式是一种比较新颖的方式,该技术基于 html5,可以通过无插件的方式实现视频直播,而且由于 rtmp 负载可以平滑的转换成 http-flv 协议,所以正在逐渐取代 rtmp 成为新的直播技术标准,目前各大直播网站(譬如斗鱼直播,bilibili 等)也陆续从 rtmp 切换成该技术。 但是由于浏览器的限制,不能同时打开过多(chrome 限制 6 个)的同域名下的直播窗口,所以该技术也不太适合多路同时打开(譬如 9 宫格视频)的视频监控领域。而且由于 Adobe 的不作为,flv 容器格式停止了更新,对 H265 的支持遥遥无期。

            • ws-flv

              ws-flv 直播技术基本与 http-flv 一致,无非是传输介质换成了 websocket 协议,除了解除了 http-flv 不能同时打开过多同域名下的直播窗口的限制,其他技术特性、参数基本与 http-flv 一致。目前看,ws-flv 既适合视频监控(可以同时打开多路监控视频)也适合视频直播行业,是 rtmp 很高的升级替代方案。

            • webrtc

              webrtc 是谷歌主导的视频通话技术标准,目前各大主流浏览器都兼容该标准。通过该技术,用户可以在浏览器上实现无插件的视频通话,该技术也可以用于实现低延时的视频直播。目前业界也有很多基于 webrtc 的应用和产品,但是很多局限于视频聊天等低延时交互式场景,在视频监控领域,目前还尚未流行。而且该技术栈目前还在持续更新,技术难点太多,要与视频监控领域融合还需时日。

            • hls

              hls 协议是苹果公司主导的技术标准,该技术标准兼容性最佳。不仅桌面浏览器,包括手机浏览器甚至是手机 QQ、手机微信都支持该直播协议。 但是该协议延时比较大,不太适合视频监控等对延时要求很敏感的行业。不过最近苹果公司新推出低延时 hls 直播标准,预计 hls 标准将抢占更大的市场份额。

            以上直播技术标准目前都不完全契合视频监控行业的需求,如果要达到比较好的用户体验,通常以上技术混合使用。

            3、视频直播

            3.1 视频直播的现状和挑战

            视频直播是近几年才兴起的产业,特别是随着游戏直播、手机直播的流行,视频直播已经司空见惯,进入了每个人的视野。 随着阿里、腾讯等云平台的入局,OBS,SRS 等优秀软件的开源,视频加速 CDN 技术的成熟,打赏、广告等商业模式的落地,目前视频直播产业链已经非常成熟,业界也诞生了斗鱼、虎牙、映客、花椒等知名直播平台。

            目前而言,这些直播平台使用的技术栈基本都是 rtmp,但是由于 flash 技术即将被淘汰,所以直播行业也将迎来一些变局以及挑战。 现在,基本上所有的直播平台,在 web 端,都已经或正在往 http-flv 方案转型。由于 flv 与 rtmp 同出一门(都是 Adobe 公司产品),负载格式一致,方案升级改造平滑可靠,http-flv 替代 rtmp 具有天然的优势,相信将来 http-flv 能很好的挑起 rtmp 的大梁。

            3.2 发展趋势

            视频直播目前从内容上来讲,涵盖了游戏、美女、户外、娱乐、体育等直播;从设备上来讲,涵盖了 PC、手机、web、电视等客户端,市场上也诞生了斗鱼这样的头部企业。从目前来看,视频直播行业市场格局已经比较稳固,进入了平稳发展期。

            从技术上来讲,直播行业也将迎来一些变革。 一是 rtmp 技术随着 flash 的一起淘汰,web 端 rtmp 播放器将成为历史。 二是随着 webrtc 的强势流行,直播技术栈可能与 webrtc 融合。 三是苹果主导的低延时 hls 的推出,可能最终有大一统之势。

            不过近期来看,http-flv 是 rtmp 的最佳替代方案,但是和 rtmp 一样,也有不支持 H265 的短板,而且移动端浏览器对此支持并不完善,所以该方案在将来有大概率会被其他方案替代。

            3.3 技术难点

            直播行业相对视频监控行业来说,商业化程度更高,更面向于普通消费者,用户规模更大,产业链也更加成熟。但是由于利益格局的划分、巨头间标准制定的角力,目前直播的技术标准和用户体验是割裂的。

            在桌面 web 端,之前直播技术由 Adobe 旗下的 flash/rtmp 技术主导,不过由于 Adobe 的不作为,以及谷歌苹果等公司的抵制,flash 已经进入死亡倒计时。目前来看,http-flv 已经接手 rtmp 的大旗,成为了新的事实上的桌面 web 端直播标准。但是 http-flv 由于其不支持 H265 的短板(Adobe 官方可能永远也不会支持 H265),其地位也并不稳固,现在也有公司正在尝试使用 webrtc 进行视频直播,但是由于该技术跨界太大,其技术栈又太庞杂,整个上下游产业链也并不完善,目前在直播界,还未看见大规模采用该直播技术的方案实施。

            在手机 APP 端,由于播放技术自己可以主导,也由于历史沿革原因,目前一般沿用 rtmp 技术方案(需要指出的是微信小程序也支持 rtmp 播放器),用户体验比较好,延时一般 3 秒或以下。

            在移动 web 端,可采用的直播方案更少,目前基本只能采用苹果公司主导的 hls 方案,但是由于 hls 的技术特性,延时非常大(一般 5 秒以上,最大可达 10 秒以上),其观看体验跟手机 APP、桌面 web 端是严重割裂的。

            通过我们上述的分析看出,目前直播技术方案,在每种端都不一样,用户体验也差距巨大,目前并没有一种多平台支持、令人满意的通用解决方案。目前要实现一个完善的直播产品,最少要采用包括 rtmp/http-flv/hls 这 3 种技术方案,而且这三种技术方案目前也并不能让人满意(rtmp/http-flv 不支持 H265,hls 延时高)。

            4、我们的解决方案以及优势

            目前我们的流媒体服务框架支持 rtsp/rtmp 推流客户端,rtsp/rtmp/http-flv/ws-flv/hls 播放客户端,并且可以无缝把 rtsp/rtmp 推流转换成上述 4 种播放协议,同时我们也支持 mp4 录制存档,必要的时候也可以从 mp4 文件加载成直播流。

            除了上述功能之外,我们还支持拉流 rtsp/rtmp 代理成 rtsp/rtmp/http-flv/ws-flv/hls,也支持把直播 rtsp/rtmp 流推送到其他的服务器。

            另外,我们还提供丰富的 http api 以及 http hook api,通过这些 api,我们可以与其他业务服务器一起,打造丰富的业务逻辑。

            我们的流媒体框架支持 linux、macos、ios、android、windows 全平台,既可以作为商用的流媒体服务器,也可以移植到嵌入式设备中,作为基础流媒体服务组件。

            代码采用 C++11 标准打造,避免使用裸指针,稳定可靠,采用 epoll 多路复用、线程池、异步网络 IO 模式开发,并发性能优越,已经经受住了长期的高并发验证考验。同时针对及时推流的特征,做了特别的优化,可以减少视频打开延时、提高画面打开成功率,让用户获取画面秒开,延时极低的体验。

            ',35),l=[h];function i(s,d){return p(),e("div",null,l)}const c=t(a,[["render",i],["__file","introduction_to_streaming_media_related_technologies.html.vue"]]);export{c as default}; diff --git a/assets/journeyDiagram-deae3313-I4uOsZJQ.js b/assets/journeyDiagram-deae3313-JgGAP5aa.js similarity index 98% rename from assets/journeyDiagram-deae3313-I4uOsZJQ.js rename to assets/journeyDiagram-deae3313-JgGAP5aa.js index 08d302a..45ae8ae 100644 --- a/assets/journeyDiagram-deae3313-I4uOsZJQ.js +++ b/assets/journeyDiagram-deae3313-JgGAP5aa.js @@ -1,4 +1,4 @@ -import{c as I,v as yt,x as ft,s as dt,g as pt,b as gt,a as mt,z as xt,h as W,i as kt}from"./mermaid.core-zy7cM8l9.js";import{d as _t,f as bt,a as vt,g as it}from"./svgDrawCommon-ad5ef572-eI41Wm50.js";import{a as Q}from"./arc-kFrifBKJ.js";import"./app-BrxqtzGY.js";import"./path-aUcfwwLI.js";var G=function(){var t=function(p,s,r,a){for(r=r||{},a=p.length;a--;r[p[a]]=s);return r},e=[6,8,10,11,12,14,16,17,18],i=[1,9],l=[1,10],n=[1,11],h=[1,12],c=[1,13],f=[1,14],y={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:function(s,r,a,u,d,o,w){var k=o.length-1;switch(d){case 1:return o[k-1];case 2:this.$=[];break;case 3:o[k-1].push(o[k]),this.$=o[k-1];break;case 4:case 5:this.$=o[k];break;case 6:case 7:this.$=[];break;case 8:u.setDiagramTitle(o[k].substr(6)),this.$=o[k].substr(6);break;case 9:this.$=o[k].trim(),u.setAccTitle(this.$);break;case 10:case 11:this.$=o[k].trim(),u.setAccDescription(this.$);break;case 12:u.addSection(o[k].substr(8)),this.$=o[k].substr(8);break;case 13:u.addTask(o[k-1],o[k]),this.$="task";break}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:i,12:l,14:n,16:h,17:c,18:f},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:i,12:l,14:n,16:h,17:c,18:f},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:function(s,r){if(r.recoverable)this.trace(s);else{var a=new Error(s);throw a.hash=r,a}},parse:function(s){var r=this,a=[0],u=[],d=[null],o=[],w=this.table,k="",R=0,Z=0,lt=2,J=1,ct=o.slice.call(arguments,1),x=Object.create(this.lexer),S={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&(S.yy[z]=this.yy[z]);x.setInput(s,S.yy),S.yy.lexer=x,S.yy.parser=this,typeof x.yylloc>"u"&&(x.yylloc={});var Y=x.yylloc;o.push(Y);var ht=x.options&&x.options.ranges;typeof S.yy.parseError=="function"?this.parseError=S.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ut(){var T;return T=u.pop()||x.lex()||J,typeof T!="number"&&(T instanceof Array&&(u=T,T=u.pop()),T=r.symbols_[T]||T),T}for(var _,E,b,O,A={},N,$,K,B;;){if(E=a[a.length-1],this.defaultActions[E]?b=this.defaultActions[E]:((_===null||typeof _>"u")&&(_=ut()),b=w[E]&&w[E][_]),typeof b>"u"||!b.length||!b[0]){var q="";B=[];for(N in w[E])this.terminals_[N]&&N>lt&&B.push("'"+this.terminals_[N]+"'");x.showPosition?q="Parse error on line "+(R+1)+`: +import{c as I,v as yt,x as ft,s as dt,g as pt,b as gt,a as mt,z as xt,h as W,i as kt}from"./mermaid.core-QJnSHCal.js";import{d as _t,f as bt,a as vt,g as it}from"./svgDrawCommon-ad5ef572-WW-Kq4zg.js";import{a as Q}from"./arc-upp1iHW0.js";import"./app-oTlYPy8h.js";import"./path-aUcfwwLI.js";var G=function(){var t=function(p,s,r,a){for(r=r||{},a=p.length;a--;r[p[a]]=s);return r},e=[6,8,10,11,12,14,16,17,18],i=[1,9],l=[1,10],n=[1,11],h=[1,12],c=[1,13],f=[1,14],y={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:function(s,r,a,u,d,o,w){var k=o.length-1;switch(d){case 1:return o[k-1];case 2:this.$=[];break;case 3:o[k-1].push(o[k]),this.$=o[k-1];break;case 4:case 5:this.$=o[k];break;case 6:case 7:this.$=[];break;case 8:u.setDiagramTitle(o[k].substr(6)),this.$=o[k].substr(6);break;case 9:this.$=o[k].trim(),u.setAccTitle(this.$);break;case 10:case 11:this.$=o[k].trim(),u.setAccDescription(this.$);break;case 12:u.addSection(o[k].substr(8)),this.$=o[k].substr(8);break;case 13:u.addTask(o[k-1],o[k]),this.$="task";break}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:i,12:l,14:n,16:h,17:c,18:f},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:i,12:l,14:n,16:h,17:c,18:f},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:function(s,r){if(r.recoverable)this.trace(s);else{var a=new Error(s);throw a.hash=r,a}},parse:function(s){var r=this,a=[0],u=[],d=[null],o=[],w=this.table,k="",R=0,Z=0,lt=2,J=1,ct=o.slice.call(arguments,1),x=Object.create(this.lexer),S={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&(S.yy[z]=this.yy[z]);x.setInput(s,S.yy),S.yy.lexer=x,S.yy.parser=this,typeof x.yylloc>"u"&&(x.yylloc={});var Y=x.yylloc;o.push(Y);var ht=x.options&&x.options.ranges;typeof S.yy.parseError=="function"?this.parseError=S.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ut(){var T;return T=u.pop()||x.lex()||J,typeof T!="number"&&(T instanceof Array&&(u=T,T=u.pop()),T=r.symbols_[T]||T),T}for(var _,E,b,O,A={},N,$,K,B;;){if(E=a[a.length-1],this.defaultActions[E]?b=this.defaultActions[E]:((_===null||typeof _>"u")&&(_=ut()),b=w[E]&&w[E][_]),typeof b>"u"||!b.length||!b[0]){var q="";B=[];for(N in w[E])this.terminals_[N]&&N>lt&&B.push("'"+this.terminals_[N]+"'");x.showPosition?q="Parse error on line "+(R+1)+`: `+x.showPosition()+` Expecting `+B.join(", ")+", got '"+(this.terminals_[_]||_)+"'":q="Parse error on line "+(R+1)+": Unexpected "+(_==J?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(q,{text:x.match,token:this.terminals_[_]||_,line:x.yylineno,loc:Y,expected:B})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+E+", token: "+_);switch(b[0]){case 1:a.push(_),d.push(x.yytext),o.push(x.yylloc),a.push(b[1]),_=null,Z=x.yyleng,k=x.yytext,R=x.yylineno,Y=x.yylloc;break;case 2:if($=this.productions_[b[1]][1],A.$=d[d.length-$],A._$={first_line:o[o.length-($||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-($||1)].first_column,last_column:o[o.length-1].last_column},ht&&(A._$.range=[o[o.length-($||1)].range[0],o[o.length-1].range[1]]),O=this.performAction.apply(A,[k,Z,R,S.yy,b[1],d,o].concat(ct)),typeof O<"u")return O;$&&(a=a.slice(0,-1*$*2),d=d.slice(0,-1*$),o=o.slice(0,-1*$)),a.push(this.productions_[b[1]][0]),d.push(A.$),o.push(A._$),K=w[a[a.length-2]][a[a.length-1]],a.push(K);break;case 3:return!0}}return!0}},m=function(){var p={EOF:1,parseError:function(r,a){if(this.yy.parser)this.yy.parser.parseError(r,a);else throw new Error(r)},setInput:function(s,r){return this.yy=r||this.yy||{},this._input=s,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var s=this._input[0];this.yytext+=s,this.yyleng++,this.offset++,this.match+=s,this.matched+=s;var r=s.match(/(?:\r\n?|\n).*/g);return r?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),s},unput:function(s){var r=s.length,a=s.split(/(?:\r\n?|\n)/g);this._input=s+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-r),this.offset-=r;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),a.length-1&&(this.yylineno-=a.length-1);var d=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:a?(a.length===u.length?this.yylloc.first_column:0)+u[u.length-a.length].length-a[0].length:this.yylloc.first_column-r},this.options.ranges&&(this.yylloc.range=[d[0],d[0]+this.yyleng-r]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(s){this.unput(this.match.slice(s))},pastInput:function(){var s=this.matched.substr(0,this.matched.length-this.match.length);return(s.length>20?"...":"")+s.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var s=this.match;return s.length<20&&(s+=this._input.substr(0,20-s.length)),(s.substr(0,20)+(s.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var s=this.pastInput(),r=new Array(s.length+1).join("-");return s+this.upcomingInput()+` diff --git a/assets/layout-1ugHHiNm.js b/assets/layout-Vth69vlg.js similarity index 99% rename from assets/layout-1ugHHiNm.js rename to assets/layout-Vth69vlg.js index 8276bdb..7234bfd 100644 --- a/assets/layout-1ugHHiNm.js +++ b/assets/layout-Vth69vlg.js @@ -1 +1 @@ -import{A as H,B as fr,S as O,C as x,D as F,E as fn,F as dr,G as cr,H as hr,I as Te,J as lr,K as vr,L as dn,M as X,N as gr,O as Le,P as pr,Q as q,R as an,T as Cn,U as br,V as Ln,W as wr,X as mr,Y as U,Z as In,_ as _r,$ as Ae,a0 as Kn,a1 as Er,a2 as yr,a3 as Ne,a4 as V,a5 as Oe,a6 as xr,a7 as Pn,a8 as on,a9 as Tr,aa as bn,ab as Lr,ac as B,ad as Xn,ae as Vn,af as An}from"./mermaid.core-zy7cM8l9.js";var Ar="[object Symbol]";function $(n){return typeof n=="symbol"||H(n)&&fr(n)==Ar}function R(n,e){for(var r=-1,t=n==null?0:n.length,i=Array(t);++r-1}function T(n){return fn(n)?dr(n):cr(n)}var qr=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Wr=/^\w*$/;function $n(n,e){if(x(n))return!1;var r=typeof n;return r=="number"||r=="symbol"||r=="boolean"||n==null||$(n)?!0:Wr.test(n)||!qr.test(n)||e!=null&&n in Object(e)}var jr=500;function Kr(n){var e=hr(n,function(t){return r.size===jr&&r.clear(),t}),r=e.cache;return e}var Xr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Vr=/\\(\\)?/g,Zr=Kr(function(n){var e=[];return n.charCodeAt(0)===46&&e.push(""),n.replace(Xr,function(r,t,i,a){e.push(i?a.replace(Vr,"$1"):t||r)}),e});const Jr=Zr;function $e(n){return n==null?"":Ce(n)}function cn(n,e){return x(n)?n:$n(n,e)?[n]:Jr($e(n))}var Qr=1/0;function Z(n){if(typeof n=="string"||$(n))return n;var e=n+"";return e=="0"&&1/n==-Qr?"-0":e}function hn(n,e){e=cn(e,n);for(var r=0,t=e.length;n!=null&&r0&&r(s)?e>1?ln(s,e-1,r,t,i):Sn(i,s):t||(i[i.length]=s)}return i}function G(n){var e=n==null?0:n.length;return e?ln(n,1):[]}function et(n){return lr(vr(n,void 0,G),n+"")}function rt(n,e,r,t){var i=-1,a=n==null?0:n.length;for(t&&a&&(r=n[++i]);++is))return!1;var f=a.get(n),d=a.get(e);if(f&&d)return f==e&&d==n;var h=-1,l=!0,g=r&Oi?new W:void 0;for(a.set(n,e),a.set(e,n);++h2?e[2]:void 0;for(i&&on(e[0],e[1],i)&&(t=1);++r-1?i[a?e[o]:o]:void 0}}var wa=Math.max;function ma(n,e,r){var t=n==null?0:n.length;if(!t)return-1;var i=r==null?0:Gr(r);return i<0&&(i=wa(t+i,0)),Pe(n,C(e),i)}var _a=ba(ma);const kn=_a;function Ke(n,e){var r=-1,t=fn(n)?Array(n.length):[];return vn(n,function(i,a,o){t[++r]=e(i,a,o)}),t}function E(n,e){var r=x(n)?R:Ke;return r(n,C(e))}function Ea(n,e){return n==null?n:Oe(n,Gn(e),X)}function ya(n,e){return n&&Dn(n,Gn(e))}function xa(n,e){return n>e}var Ta=Object.prototype,La=Ta.hasOwnProperty;function Aa(n,e){return n!=null&&La.call(n,e)}function b(n,e){return n!=null&&qe(n,e,Aa)}function Na(n,e){return R(e,function(r){return n[r]})}function N(n){return n==null?[]:Na(n,T(n))}function y(n){return n===void 0}function Xe(n,e){return ne||a&&o&&u&&!s&&!f||t&&o&&u||!r&&u||!i)return 1;if(!t&&!a&&!f&&n=s)return u;var f=r[t];return u*(f=="desc"?-1:1)}}return n.index-e.index}function Sa(n,e,r){e.length?e=R(e,function(a){return x(a)?function(o){return hn(o,a.length===1?a[0]:a)}:a}):e=[V];var t=-1;e=R(e,Cn(C));var i=Ke(n,function(a,o,s){var u=R(e,function(f){return f(a)});return{criteria:u,index:++t,value:a}});return Ia(i,function(a,o){return $a(a,o,r)})}function Ma(n,e){return Ca(n,e,function(r,t){return We(n,t)})}var Ra=et(function(n,e){return n==null?{}:Ma(n,e)});const un=Ra;var Fa=Math.ceil,Da=Math.max;function Ga(n,e,r,t){for(var i=-1,a=Da(Fa((e-n)/(r||1)),0),o=Array(a);a--;)o[t?a:++i]=n,n+=r;return o}function ka(n){return function(e,r,t){return t&&typeof t!="number"&&on(e,r,t)&&(r=t=void 0),e=rn(e),r===void 0?(r=e,e=0):r=rn(r),t=t===void 0?e1&&on(n,e[0],e[1])?e=[]:r>2&&on(e[0],e[1],e[2])&&(e=[e[0]]),Sa(n,ln(e,1),[])});const Q=Ua;var Ha=1/0,qa=bn&&1/Rn(new bn([,-0]))[1]==Ha?function(n){return new bn(n)}:kr;const Wa=qa;var ja=200;function Ka(n,e,r){var t=-1,i=Hr,a=n.length,o=!0,s=[],u=s;if(r)o=!1,i=ga;else if(a>=ja){var f=e?null:Wa(n);if(f)return Rn(f);o=!1,i=Be,u=new W}else u=e?[]:s;n:for(;++t1?i.setNode(a,r):i.setNode(a)}),this}setNode(e,r){return b(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=r),this):(this._nodes[e]=arguments.length>1?r:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=P,this._children[e]={},this._children[P][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return b(this._nodes,e)}removeNode(e){var r=this;if(b(this._nodes,e)){var t=function(i){r.removeEdge(r._edgeObjs[i])};delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],c(this.children(e),function(i){r.setParent(i)}),delete this._children[e]),c(T(this._in[e]),t),delete this._in[e],delete this._preds[e],c(T(this._out[e]),t),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(y(r))r=P;else{r+="";for(var t=r;!y(t);t=this.parent(t))if(t===e)throw new Error("Setting "+r+" as parent of "+e+" would create a cycle");this.setNode(r)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=r,this._children[r][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var r=this._parent[e];if(r!==P)return r}}children(e){if(y(e)&&(e=P),this._isCompound){var r=this._children[e];if(r)return T(r)}else{if(e===P)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var r=this._preds[e];if(r)return T(r)}successors(e){var r=this._sucs[e];if(r)return T(r)}neighbors(e){var r=this.predecessors(e);if(r)return Va(r,this.successors(e))}isLeaf(e){var r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),r.length===0}filterNodes(e){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var t=this;c(this._nodes,function(o,s){e(s)&&r.setNode(s,o)}),c(this._edgeObjs,function(o){r.hasNode(o.v)&&r.hasNode(o.w)&&r.setEdge(o,t.edge(o))});var i={};function a(o){var s=t.parent(o);return s===void 0||r.hasNode(s)?(i[o]=s,s):s in i?i[s]:a(s)}return this._isCompound&&c(r.nodes(),function(o){r.setParent(o,a(o))}),r}setDefaultEdgeLabel(e){return Xn(e)||(e=B(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return N(this._edgeObjs)}setPath(e,r){var t=this,i=arguments;return J(e,function(a,o){return i.length>1?t.setEdge(a,o,r):t.setEdge(a,o),o}),this}setEdge(){var e,r,t,i,a=!1,o=arguments[0];typeof o=="object"&&o!==null&&"v"in o?(e=o.v,r=o.w,t=o.name,arguments.length===2&&(i=arguments[1],a=!0)):(e=o,r=arguments[1],t=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),e=""+e,r=""+r,y(t)||(t=""+t);var s=Y(this._isDirected,e,r,t);if(b(this._edgeLabels,s))return a&&(this._edgeLabels[s]=i),this;if(!y(t)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(r),this._edgeLabels[s]=a?i:this._defaultEdgeLabelFn(e,r,t);var u=no(this._isDirected,e,r,t);return e=u.v,r=u.w,Object.freeze(u),this._edgeObjs[s]=u,he(this._preds[r],e),he(this._sucs[e],r),this._in[r][s]=u,this._out[e][s]=u,this._edgeCount++,this}edge(e,r,t){var i=arguments.length===1?mn(this._isDirected,arguments[0]):Y(this._isDirected,e,r,t);return this._edgeLabels[i]}hasEdge(e,r,t){var i=arguments.length===1?mn(this._isDirected,arguments[0]):Y(this._isDirected,e,r,t);return b(this._edgeLabels,i)}removeEdge(e,r,t){var i=arguments.length===1?mn(this._isDirected,arguments[0]):Y(this._isDirected,e,r,t),a=this._edgeObjs[i];return a&&(e=a.v,r=a.w,delete this._edgeLabels[i],delete this._edgeObjs[i],le(this._preds[r],e),le(this._sucs[e],r),delete this._in[r][i],delete this._out[e][i],this._edgeCount--),this}inEdges(e,r){var t=this._in[e];if(t){var i=N(t);return r?A(i,function(a){return a.v===r}):i}}outEdges(e,r){var t=this._out[e];if(t){var i=N(t);return r?A(i,function(a){return a.w===r}):i}}nodeEdges(e,r){var t=this.inEdges(e,r);if(t)return t.concat(this.outEdges(e,r))}}L.prototype._nodeCount=0;L.prototype._edgeCount=0;function he(n,e){n[e]?n[e]++:n[e]=1}function le(n,e){--n[e]||delete n[e]}function Y(n,e,r,t){var i=""+e,a=""+r;if(!n&&i>a){var o=i;i=a,a=o}return i+ce+a+ce+(y(t)?za:t)}function no(n,e,r,t){var i=""+e,a=""+r;if(!n&&i>a){var o=i;i=a,a=o}var s={v:i,w:a};return t&&(s.name=t),s}function mn(n,e){return Y(n,e.v,e.w,e.name)}class eo{constructor(){var e={};e._next=e._prev=e,this._sentinel=e}dequeue(){var e=this._sentinel,r=e._prev;if(r!==e)return ve(r),r}enqueue(e){var r=this._sentinel;e._prev&&e._next&&ve(e),e._next=r._next,r._next._prev=e,r._next=e,e._prev=r}toString(){for(var e=[],r=this._sentinel,t=r._prev;t!==r;)e.push(JSON.stringify(t,ro)),t=t._prev;return"["+e.join(", ")+"]"}}function ve(n){n._prev._next=n._next,n._next._prev=n._prev,delete n._next,delete n._prev}function ro(n,e){if(n!=="_next"&&n!=="_prev")return e}var to=B(1);function io(n,e){if(n.nodeCount()<=1)return[];var r=oo(n,e||to),t=ao(r.graph,r.buckets,r.zeroIdx);return G(E(t,function(i){return n.outEdges(i.v,i.w)}))}function ao(n,e,r){for(var t=[],i=e[e.length-1],a=e[0],o;n.nodeCount();){for(;o=a.dequeue();)_n(n,e,r,o);for(;o=i.dequeue();)_n(n,e,r,o);if(n.nodeCount()){for(var s=e.length-2;s>0;--s)if(o=e[s].dequeue(),o){t=t.concat(_n(n,e,r,o,!0));break}}}return t}function _n(n,e,r,t,i){var a=i?[]:void 0;return c(n.inEdges(t.v),function(o){var s=n.edge(o),u=n.node(o.v);i&&a.push({v:o.v,w:o.w}),u.out-=s,On(e,r,u)}),c(n.outEdges(t.v),function(o){var s=n.edge(o),u=o.w,f=n.node(u);f.in-=s,On(e,r,f)}),n.removeNode(t.v),a}function oo(n,e){var r=new L,t=0,i=0;c(n.nodes(),function(s){r.setNode(s,{v:s,in:0,out:0})}),c(n.edges(),function(s){var u=r.edge(s.v,s.w)||0,f=e(s),d=u+f;r.setEdge(s.v,s.w,d),i=Math.max(i,r.node(s.v).out+=f),t=Math.max(t,r.node(s.w).in+=f)});var a=D(i+t+3).map(function(){return new eo}),o=t+1;return c(r.nodes(),function(s){On(a,o,r.node(s))}),{graph:r,buckets:a,zeroIdx:o}}function On(n,e,r){r.out?r.in?n[r.out-r.in+e].enqueue(r):n[n.length-1].enqueue(r):n[0].enqueue(r)}function so(n){var e=n.graph().acyclicer==="greedy"?io(n,r(n)):uo(n);c(e,function(t){var i=n.edge(t);n.removeEdge(t),i.forwardName=t.name,i.reversed=!0,n.setEdge(t.w,t.v,i,Un("rev"))});function r(t){return function(i){return t.edge(i).weight}}}function uo(n){var e=[],r={},t={};function i(a){b(t,a)||(t[a]=!0,r[a]=!0,c(n.outEdges(a),function(o){b(r,o.w)?e.push(o):i(o.w)}),delete r[a])}return c(n.nodes(),i),e}function fo(n){c(n.edges(),function(e){var r=n.edge(e);if(r.reversed){n.removeEdge(e);var t=r.forwardName;delete r.reversed,delete r.forwardName,n.setEdge(e.w,e.v,r,t)}})}function k(n,e,r,t){var i;do i=Un(t);while(n.hasNode(i));return r.dummy=e,n.setNode(i,r),i}function co(n){var e=new L().setGraph(n.graph());return c(n.nodes(),function(r){e.setNode(r,n.node(r))}),c(n.edges(),function(r){var t=e.edge(r.v,r.w)||{weight:0,minlen:1},i=n.edge(r);e.setEdge(r.v,r.w,{weight:t.weight+i.weight,minlen:Math.max(t.minlen,i.minlen)})}),e}function Ve(n){var e=new L({multigraph:n.isMultigraph()}).setGraph(n.graph());return c(n.nodes(),function(r){n.children(r).length||e.setNode(r,n.node(r))}),c(n.edges(),function(r){e.setEdge(r,n.edge(r))}),e}function ge(n,e){var r=n.x,t=n.y,i=e.x-r,a=e.y-t,o=n.width/2,s=n.height/2;if(!i&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var u,f;return Math.abs(a)*o>Math.abs(i)*s?(a<0&&(s=-s),u=s*i/a,f=s):(i<0&&(o=-o),u=o,f=o*a/i),{x:r+u,y:t+f}}function pn(n){var e=E(D(Ze(n)+1),function(){return[]});return c(n.nodes(),function(r){var t=n.node(r),i=t.rank;y(i)||(e[i][t.order]=r)}),e}function ho(n){var e=j(E(n.nodes(),function(r){return n.node(r).rank}));c(n.nodes(),function(r){var t=n.node(r);b(t,"rank")&&(t.rank-=e)})}function lo(n){var e=j(E(n.nodes(),function(a){return n.node(a).rank})),r=[];c(n.nodes(),function(a){var o=n.node(a).rank-e;r[o]||(r[o]=[]),r[o].push(a)});var t=0,i=n.graph().nodeRankFactor;c(r,function(a,o){y(a)&&o%i!==0?--t:t&&c(a,function(s){n.node(s).rank+=t})})}function pe(n,e,r,t){var i={width:0,height:0};return arguments.length>=4&&(i.rank=r,i.order=t),k(n,"border",i,e)}function Ze(n){return S(E(n.nodes(),function(e){var r=n.node(e).rank;if(!y(r))return r}))}function vo(n,e){var r={lhs:[],rhs:[]};return c(n,function(t){e(t)?r.lhs.push(t):r.rhs.push(t)}),r}function go(n,e){var r=de();try{return e()}finally{console.log(n+" time: "+(de()-r)+"ms")}}function po(n,e){return e()}function bo(n){function e(r){var t=n.children(r),i=n.node(r);if(t.length&&c(t,e),b(i,"minRank")){i.borderLeft=[],i.borderRight=[];for(var a=i.minRank,o=i.maxRank+1;ao.lim&&(s=o,u=!0);var f=A(e.edges(),function(d){return u===me(n,n.node(d.v),s)&&u!==me(n,n.node(d.w),s)});return Yn(f,function(d){return K(e,d)})}function ar(n,e,r,t){var i=r.v,a=r.w;n.removeEdge(i,a),n.setEdge(t.v,t.w,{}),Wn(n),qn(n,e),$o(n,e)}function $o(n,e){var r=kn(n.nodes(),function(i){return!e.node(i).parent}),t=Io(n,r);t=t.slice(1),c(t,function(i){var a=n.node(i).parent,o=e.edge(i,a),s=!1;o||(o=e.edge(a,i),s=!0),e.node(i).rank=e.node(a).rank+(s?o.minlen:-o.minlen)})}function So(n,e,r){return n.hasEdge(e,r)}function me(n,e,r){return r.low<=e.lim&&e.lim<=r.lim}function Mo(n){switch(n.graph().ranker){case"network-simplex":_e(n);break;case"tight-tree":Fo(n);break;case"longest-path":Ro(n);break;default:_e(n)}}var Ro=Hn;function Fo(n){Hn(n),Qe(n)}function _e(n){M(n)}function Do(n){var e=k(n,"root",{},"_root"),r=Go(n),t=S(N(r))-1,i=2*t+1;n.graph().nestingRoot=e,c(n.edges(),function(o){n.edge(o).minlen*=i});var a=ko(n)+1;c(n.children(),function(o){or(n,e,i,a,t,r,o)}),n.graph().nodeRankFactor=i}function or(n,e,r,t,i,a,o){var s=n.children(o);if(!s.length){o!==e&&n.setEdge(e,o,{weight:0,minlen:r});return}var u=pe(n,"_bt"),f=pe(n,"_bb"),d=n.node(o);n.setParent(u,o),d.borderTop=u,n.setParent(f,o),d.borderBottom=f,c(s,function(h){or(n,e,r,t,i,a,h);var l=n.node(h),g=l.borderTop?l.borderTop:h,v=l.borderBottom?l.borderBottom:h,p=l.borderTop?t:2*t,m=g!==v?1:i-a[o]+1;n.setEdge(u,g,{weight:p,minlen:m,nestingEdge:!0}),n.setEdge(v,f,{weight:p,minlen:m,nestingEdge:!0})}),n.parent(o)||n.setEdge(e,u,{weight:0,minlen:i+a[o]})}function Go(n){var e={};function r(t,i){var a=n.children(t);a&&a.length&&c(a,function(o){r(o,i+1)}),e[t]=i}return c(n.children(),function(t){r(t,1)}),e}function ko(n){return J(n.edges(),function(e,r){return e+n.edge(r).weight},0)}function Bo(n){var e=n.graph();n.removeNode(e.nestingRoot),delete e.nestingRoot,c(n.edges(),function(r){var t=n.edge(r);t.nestingEdge&&n.removeEdge(r)})}function Yo(n,e,r){var t={},i;c(r,function(a){for(var o=n.parent(a),s,u;o;){if(s=n.parent(o),s?(u=t[s],t[s]=o):(u=i,i=o),u&&u!==o){e.setEdge(u,o);return}o=s}})}function Uo(n,e,r){var t=Ho(n),i=new L({compound:!0}).setGraph({root:t}).setDefaultNodeLabel(function(a){return n.node(a)});return c(n.nodes(),function(a){var o=n.node(a),s=n.parent(a);(o.rank===e||o.minRank<=e&&e<=o.maxRank)&&(i.setNode(a),i.setParent(a,s||t),c(n[r](a),function(u){var f=u.v===a?u.w:u.v,d=i.edge(f,a),h=y(d)?0:d.weight;i.setEdge(f,a,{weight:n.edge(u).weight+h})}),b(o,"minRank")&&i.setNode(a,{borderLeft:o.borderLeft[e],borderRight:o.borderRight[e]}))}),i}function Ho(n){for(var e;n.hasNode(e=Un("_root")););return e}function qo(n,e){for(var r=0,t=1;t0;)d%2&&(h+=s[d+1]),d=d-1>>1,s[d]+=f.weight;u+=f.weight*h})),u}function jo(n){var e={},r=A(n.nodes(),function(s){return!n.children(s).length}),t=S(E(r,function(s){return n.node(s).rank})),i=E(D(t+1),function(){return[]});function a(s){if(!b(e,s)){e[s]=!0;var u=n.node(s);i[u.rank].push(s),c(n.successors(s),a)}}var o=Q(r,function(s){return n.node(s).rank});return c(o,a),i}function Ko(n,e){return E(e,function(r){var t=n.inEdges(r);if(t.length){var i=J(t,function(a,o){var s=n.edge(o),u=n.node(o.v);return{sum:a.sum+s.weight*u.order,weight:a.weight+s.weight}},{sum:0,weight:0});return{v:r,barycenter:i.sum/i.weight,weight:i.weight}}else return{v:r}})}function Xo(n,e){var r={};c(n,function(i,a){var o=r[i.v]={indegree:0,in:[],out:[],vs:[i.v],i:a};y(i.barycenter)||(o.barycenter=i.barycenter,o.weight=i.weight)}),c(e.edges(),function(i){var a=r[i.v],o=r[i.w];!y(a)&&!y(o)&&(o.indegree++,a.out.push(r[i.w]))});var t=A(r,function(i){return!i.indegree});return Vo(t)}function Vo(n){var e=[];function r(a){return function(o){o.merged||(y(o.barycenter)||y(a.barycenter)||o.barycenter>=a.barycenter)&&Zo(a,o)}}function t(a){return function(o){o.in.push(a),--o.indegree===0&&n.push(o)}}for(;n.length;){var i=n.pop();e.push(i),c(i.in.reverse(),r(i)),c(i.out,t(i))}return E(A(e,function(a){return!a.merged}),function(a){return un(a,["vs","i","barycenter","weight"])})}function Zo(n,e){var r=0,t=0;n.weight&&(r+=n.barycenter*n.weight,t+=n.weight),e.weight&&(r+=e.barycenter*e.weight,t+=e.weight),n.vs=e.vs.concat(n.vs),n.barycenter=r/t,n.weight=t,n.i=Math.min(e.i,n.i),e.merged=!0}function Jo(n,e){var r=vo(n,function(d){return b(d,"barycenter")}),t=r.lhs,i=Q(r.rhs,function(d){return-d.i}),a=[],o=0,s=0,u=0;t.sort(Qo(!!e)),u=Ee(a,i,u),c(t,function(d){u+=d.vs.length,a.push(d.vs),o+=d.barycenter*d.weight,s+=d.weight,u=Ee(a,i,u)});var f={vs:G(a)};return s&&(f.barycenter=o/s,f.weight=s),f}function Ee(n,e,r){for(var t;e.length&&(t=sn(e)).i<=r;)e.pop(),n.push(t.vs),r++;return r}function Qo(n){return function(e,r){return e.barycenterr.barycenter?1:n?r.i-e.i:e.i-r.i}}function sr(n,e,r,t){var i=n.children(e),a=n.node(e),o=a?a.borderLeft:void 0,s=a?a.borderRight:void 0,u={};o&&(i=A(i,function(v){return v!==o&&v!==s}));var f=Ko(n,i);c(f,function(v){if(n.children(v.v).length){var p=sr(n,v.v,r,t);u[v.v]=p,b(p,"barycenter")&&ns(v,p)}});var d=Xo(f,r);zo(d,u);var h=Jo(d,t);if(o&&(h.vs=G([o,h.vs,s]),n.predecessors(o).length)){var l=n.node(n.predecessors(o)[0]),g=n.node(n.predecessors(s)[0]);b(h,"barycenter")||(h.barycenter=0,h.weight=0),h.barycenter=(h.barycenter*h.weight+l.order+g.order)/(h.weight+2),h.weight+=2}return h}function zo(n,e){c(n,function(r){r.vs=G(r.vs.map(function(t){return e[t]?e[t].vs:t}))})}function ns(n,e){y(n.barycenter)?(n.barycenter=e.barycenter,n.weight=e.weight):(n.barycenter=(n.barycenter*n.weight+e.barycenter*e.weight)/(n.weight+e.weight),n.weight+=e.weight)}function es(n){var e=Ze(n),r=ye(n,D(1,e+1),"inEdges"),t=ye(n,D(e-1,-1,-1),"outEdges"),i=jo(n);xe(n,i);for(var a=Number.POSITIVE_INFINITY,o,s=0,u=0;u<4;++s,++u){rs(s%2?r:t,s%4>=2),i=pn(n);var f=qo(n,i);fo||s>e[u].lim));for(f=u,u=t;(u=n.parent(u))!==f;)a.push(u);return{path:i.concat(a.reverse()),lca:f}}function as(n){var e={},r=0;function t(i){var a=r;c(n.children(i),t),e[i]={low:a,lim:r++}}return c(n.children(),t),e}function os(n,e){var r={};function t(i,a){var o=0,s=0,u=i.length,f=sn(a);return c(a,function(d,h){var l=us(n,d),g=l?n.node(l).order:u;(l||d===f)&&(c(a.slice(s,h+1),function(v){c(n.predecessors(v),function(p){var m=n.node(p),_=m.order;(_f)&&ur(r,l,d)})})}function i(a,o){var s=-1,u,f=0;return c(o,function(d,h){if(n.node(d).dummy==="border"){var l=n.predecessors(d);l.length&&(u=n.node(l[0]).order,t(o,f,h,s,u),f=h,s=u)}t(o,f,o.length,u,a.length)}),o}return J(e,i),r}function us(n,e){if(n.node(e).dummy)return kn(n.predecessors(e),function(r){return n.node(r).dummy})}function ur(n,e,r){if(e>r){var t=e;e=r,r=t}var i=n[e];i||(n[e]=i={}),i[r]=!0}function fs(n,e,r){if(e>r){var t=e;e=r,r=t}return b(n[e],r)}function ds(n,e,r,t){var i={},a={},o={};return c(e,function(s){c(s,function(u,f){i[u]=u,a[u]=u,o[u]=f})}),c(e,function(s){var u=-1;c(s,function(f){var d=t(f);if(d.length){d=Q(d,function(p){return o[p]});for(var h=(d.length-1)/2,l=Math.floor(h),g=Math.ceil(h);l<=g;++l){var v=d[l];a[f]===f&&u-1}function T(n){return fn(n)?dr(n):cr(n)}var qr=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Wr=/^\w*$/;function $n(n,e){if(x(n))return!1;var r=typeof n;return r=="number"||r=="symbol"||r=="boolean"||n==null||$(n)?!0:Wr.test(n)||!qr.test(n)||e!=null&&n in Object(e)}var jr=500;function Kr(n){var e=hr(n,function(t){return r.size===jr&&r.clear(),t}),r=e.cache;return e}var Xr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Vr=/\\(\\)?/g,Zr=Kr(function(n){var e=[];return n.charCodeAt(0)===46&&e.push(""),n.replace(Xr,function(r,t,i,a){e.push(i?a.replace(Vr,"$1"):t||r)}),e});const Jr=Zr;function $e(n){return n==null?"":Ce(n)}function cn(n,e){return x(n)?n:$n(n,e)?[n]:Jr($e(n))}var Qr=1/0;function Z(n){if(typeof n=="string"||$(n))return n;var e=n+"";return e=="0"&&1/n==-Qr?"-0":e}function hn(n,e){e=cn(e,n);for(var r=0,t=e.length;n!=null&&r0&&r(s)?e>1?ln(s,e-1,r,t,i):Sn(i,s):t||(i[i.length]=s)}return i}function G(n){var e=n==null?0:n.length;return e?ln(n,1):[]}function et(n){return lr(vr(n,void 0,G),n+"")}function rt(n,e,r,t){var i=-1,a=n==null?0:n.length;for(t&&a&&(r=n[++i]);++is))return!1;var f=a.get(n),d=a.get(e);if(f&&d)return f==e&&d==n;var h=-1,l=!0,g=r&Oi?new W:void 0;for(a.set(n,e),a.set(e,n);++h2?e[2]:void 0;for(i&&on(e[0],e[1],i)&&(t=1);++r-1?i[a?e[o]:o]:void 0}}var wa=Math.max;function ma(n,e,r){var t=n==null?0:n.length;if(!t)return-1;var i=r==null?0:Gr(r);return i<0&&(i=wa(t+i,0)),Pe(n,C(e),i)}var _a=ba(ma);const kn=_a;function Ke(n,e){var r=-1,t=fn(n)?Array(n.length):[];return vn(n,function(i,a,o){t[++r]=e(i,a,o)}),t}function E(n,e){var r=x(n)?R:Ke;return r(n,C(e))}function Ea(n,e){return n==null?n:Oe(n,Gn(e),X)}function ya(n,e){return n&&Dn(n,Gn(e))}function xa(n,e){return n>e}var Ta=Object.prototype,La=Ta.hasOwnProperty;function Aa(n,e){return n!=null&&La.call(n,e)}function b(n,e){return n!=null&&qe(n,e,Aa)}function Na(n,e){return R(e,function(r){return n[r]})}function N(n){return n==null?[]:Na(n,T(n))}function y(n){return n===void 0}function Xe(n,e){return ne||a&&o&&u&&!s&&!f||t&&o&&u||!r&&u||!i)return 1;if(!t&&!a&&!f&&n=s)return u;var f=r[t];return u*(f=="desc"?-1:1)}}return n.index-e.index}function Sa(n,e,r){e.length?e=R(e,function(a){return x(a)?function(o){return hn(o,a.length===1?a[0]:a)}:a}):e=[V];var t=-1;e=R(e,Cn(C));var i=Ke(n,function(a,o,s){var u=R(e,function(f){return f(a)});return{criteria:u,index:++t,value:a}});return Ia(i,function(a,o){return $a(a,o,r)})}function Ma(n,e){return Ca(n,e,function(r,t){return We(n,t)})}var Ra=et(function(n,e){return n==null?{}:Ma(n,e)});const un=Ra;var Fa=Math.ceil,Da=Math.max;function Ga(n,e,r,t){for(var i=-1,a=Da(Fa((e-n)/(r||1)),0),o=Array(a);a--;)o[t?a:++i]=n,n+=r;return o}function ka(n){return function(e,r,t){return t&&typeof t!="number"&&on(e,r,t)&&(r=t=void 0),e=rn(e),r===void 0?(r=e,e=0):r=rn(r),t=t===void 0?e1&&on(n,e[0],e[1])?e=[]:r>2&&on(e[0],e[1],e[2])&&(e=[e[0]]),Sa(n,ln(e,1),[])});const Q=Ua;var Ha=1/0,qa=bn&&1/Rn(new bn([,-0]))[1]==Ha?function(n){return new bn(n)}:kr;const Wa=qa;var ja=200;function Ka(n,e,r){var t=-1,i=Hr,a=n.length,o=!0,s=[],u=s;if(r)o=!1,i=ga;else if(a>=ja){var f=e?null:Wa(n);if(f)return Rn(f);o=!1,i=Be,u=new W}else u=e?[]:s;n:for(;++t1?i.setNode(a,r):i.setNode(a)}),this}setNode(e,r){return b(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=r),this):(this._nodes[e]=arguments.length>1?r:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=P,this._children[e]={},this._children[P][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return b(this._nodes,e)}removeNode(e){var r=this;if(b(this._nodes,e)){var t=function(i){r.removeEdge(r._edgeObjs[i])};delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],c(this.children(e),function(i){r.setParent(i)}),delete this._children[e]),c(T(this._in[e]),t),delete this._in[e],delete this._preds[e],c(T(this._out[e]),t),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(y(r))r=P;else{r+="";for(var t=r;!y(t);t=this.parent(t))if(t===e)throw new Error("Setting "+r+" as parent of "+e+" would create a cycle");this.setNode(r)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=r,this._children[r][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var r=this._parent[e];if(r!==P)return r}}children(e){if(y(e)&&(e=P),this._isCompound){var r=this._children[e];if(r)return T(r)}else{if(e===P)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var r=this._preds[e];if(r)return T(r)}successors(e){var r=this._sucs[e];if(r)return T(r)}neighbors(e){var r=this.predecessors(e);if(r)return Va(r,this.successors(e))}isLeaf(e){var r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),r.length===0}filterNodes(e){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var t=this;c(this._nodes,function(o,s){e(s)&&r.setNode(s,o)}),c(this._edgeObjs,function(o){r.hasNode(o.v)&&r.hasNode(o.w)&&r.setEdge(o,t.edge(o))});var i={};function a(o){var s=t.parent(o);return s===void 0||r.hasNode(s)?(i[o]=s,s):s in i?i[s]:a(s)}return this._isCompound&&c(r.nodes(),function(o){r.setParent(o,a(o))}),r}setDefaultEdgeLabel(e){return Xn(e)||(e=B(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return N(this._edgeObjs)}setPath(e,r){var t=this,i=arguments;return J(e,function(a,o){return i.length>1?t.setEdge(a,o,r):t.setEdge(a,o),o}),this}setEdge(){var e,r,t,i,a=!1,o=arguments[0];typeof o=="object"&&o!==null&&"v"in o?(e=o.v,r=o.w,t=o.name,arguments.length===2&&(i=arguments[1],a=!0)):(e=o,r=arguments[1],t=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),e=""+e,r=""+r,y(t)||(t=""+t);var s=Y(this._isDirected,e,r,t);if(b(this._edgeLabels,s))return a&&(this._edgeLabels[s]=i),this;if(!y(t)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(r),this._edgeLabels[s]=a?i:this._defaultEdgeLabelFn(e,r,t);var u=no(this._isDirected,e,r,t);return e=u.v,r=u.w,Object.freeze(u),this._edgeObjs[s]=u,he(this._preds[r],e),he(this._sucs[e],r),this._in[r][s]=u,this._out[e][s]=u,this._edgeCount++,this}edge(e,r,t){var i=arguments.length===1?mn(this._isDirected,arguments[0]):Y(this._isDirected,e,r,t);return this._edgeLabels[i]}hasEdge(e,r,t){var i=arguments.length===1?mn(this._isDirected,arguments[0]):Y(this._isDirected,e,r,t);return b(this._edgeLabels,i)}removeEdge(e,r,t){var i=arguments.length===1?mn(this._isDirected,arguments[0]):Y(this._isDirected,e,r,t),a=this._edgeObjs[i];return a&&(e=a.v,r=a.w,delete this._edgeLabels[i],delete this._edgeObjs[i],le(this._preds[r],e),le(this._sucs[e],r),delete this._in[r][i],delete this._out[e][i],this._edgeCount--),this}inEdges(e,r){var t=this._in[e];if(t){var i=N(t);return r?A(i,function(a){return a.v===r}):i}}outEdges(e,r){var t=this._out[e];if(t){var i=N(t);return r?A(i,function(a){return a.w===r}):i}}nodeEdges(e,r){var t=this.inEdges(e,r);if(t)return t.concat(this.outEdges(e,r))}}L.prototype._nodeCount=0;L.prototype._edgeCount=0;function he(n,e){n[e]?n[e]++:n[e]=1}function le(n,e){--n[e]||delete n[e]}function Y(n,e,r,t){var i=""+e,a=""+r;if(!n&&i>a){var o=i;i=a,a=o}return i+ce+a+ce+(y(t)?za:t)}function no(n,e,r,t){var i=""+e,a=""+r;if(!n&&i>a){var o=i;i=a,a=o}var s={v:i,w:a};return t&&(s.name=t),s}function mn(n,e){return Y(n,e.v,e.w,e.name)}class eo{constructor(){var e={};e._next=e._prev=e,this._sentinel=e}dequeue(){var e=this._sentinel,r=e._prev;if(r!==e)return ve(r),r}enqueue(e){var r=this._sentinel;e._prev&&e._next&&ve(e),e._next=r._next,r._next._prev=e,r._next=e,e._prev=r}toString(){for(var e=[],r=this._sentinel,t=r._prev;t!==r;)e.push(JSON.stringify(t,ro)),t=t._prev;return"["+e.join(", ")+"]"}}function ve(n){n._prev._next=n._next,n._next._prev=n._prev,delete n._next,delete n._prev}function ro(n,e){if(n!=="_next"&&n!=="_prev")return e}var to=B(1);function io(n,e){if(n.nodeCount()<=1)return[];var r=oo(n,e||to),t=ao(r.graph,r.buckets,r.zeroIdx);return G(E(t,function(i){return n.outEdges(i.v,i.w)}))}function ao(n,e,r){for(var t=[],i=e[e.length-1],a=e[0],o;n.nodeCount();){for(;o=a.dequeue();)_n(n,e,r,o);for(;o=i.dequeue();)_n(n,e,r,o);if(n.nodeCount()){for(var s=e.length-2;s>0;--s)if(o=e[s].dequeue(),o){t=t.concat(_n(n,e,r,o,!0));break}}}return t}function _n(n,e,r,t,i){var a=i?[]:void 0;return c(n.inEdges(t.v),function(o){var s=n.edge(o),u=n.node(o.v);i&&a.push({v:o.v,w:o.w}),u.out-=s,On(e,r,u)}),c(n.outEdges(t.v),function(o){var s=n.edge(o),u=o.w,f=n.node(u);f.in-=s,On(e,r,f)}),n.removeNode(t.v),a}function oo(n,e){var r=new L,t=0,i=0;c(n.nodes(),function(s){r.setNode(s,{v:s,in:0,out:0})}),c(n.edges(),function(s){var u=r.edge(s.v,s.w)||0,f=e(s),d=u+f;r.setEdge(s.v,s.w,d),i=Math.max(i,r.node(s.v).out+=f),t=Math.max(t,r.node(s.w).in+=f)});var a=D(i+t+3).map(function(){return new eo}),o=t+1;return c(r.nodes(),function(s){On(a,o,r.node(s))}),{graph:r,buckets:a,zeroIdx:o}}function On(n,e,r){r.out?r.in?n[r.out-r.in+e].enqueue(r):n[n.length-1].enqueue(r):n[0].enqueue(r)}function so(n){var e=n.graph().acyclicer==="greedy"?io(n,r(n)):uo(n);c(e,function(t){var i=n.edge(t);n.removeEdge(t),i.forwardName=t.name,i.reversed=!0,n.setEdge(t.w,t.v,i,Un("rev"))});function r(t){return function(i){return t.edge(i).weight}}}function uo(n){var e=[],r={},t={};function i(a){b(t,a)||(t[a]=!0,r[a]=!0,c(n.outEdges(a),function(o){b(r,o.w)?e.push(o):i(o.w)}),delete r[a])}return c(n.nodes(),i),e}function fo(n){c(n.edges(),function(e){var r=n.edge(e);if(r.reversed){n.removeEdge(e);var t=r.forwardName;delete r.reversed,delete r.forwardName,n.setEdge(e.w,e.v,r,t)}})}function k(n,e,r,t){var i;do i=Un(t);while(n.hasNode(i));return r.dummy=e,n.setNode(i,r),i}function co(n){var e=new L().setGraph(n.graph());return c(n.nodes(),function(r){e.setNode(r,n.node(r))}),c(n.edges(),function(r){var t=e.edge(r.v,r.w)||{weight:0,minlen:1},i=n.edge(r);e.setEdge(r.v,r.w,{weight:t.weight+i.weight,minlen:Math.max(t.minlen,i.minlen)})}),e}function Ve(n){var e=new L({multigraph:n.isMultigraph()}).setGraph(n.graph());return c(n.nodes(),function(r){n.children(r).length||e.setNode(r,n.node(r))}),c(n.edges(),function(r){e.setEdge(r,n.edge(r))}),e}function ge(n,e){var r=n.x,t=n.y,i=e.x-r,a=e.y-t,o=n.width/2,s=n.height/2;if(!i&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var u,f;return Math.abs(a)*o>Math.abs(i)*s?(a<0&&(s=-s),u=s*i/a,f=s):(i<0&&(o=-o),u=o,f=o*a/i),{x:r+u,y:t+f}}function pn(n){var e=E(D(Ze(n)+1),function(){return[]});return c(n.nodes(),function(r){var t=n.node(r),i=t.rank;y(i)||(e[i][t.order]=r)}),e}function ho(n){var e=j(E(n.nodes(),function(r){return n.node(r).rank}));c(n.nodes(),function(r){var t=n.node(r);b(t,"rank")&&(t.rank-=e)})}function lo(n){var e=j(E(n.nodes(),function(a){return n.node(a).rank})),r=[];c(n.nodes(),function(a){var o=n.node(a).rank-e;r[o]||(r[o]=[]),r[o].push(a)});var t=0,i=n.graph().nodeRankFactor;c(r,function(a,o){y(a)&&o%i!==0?--t:t&&c(a,function(s){n.node(s).rank+=t})})}function pe(n,e,r,t){var i={width:0,height:0};return arguments.length>=4&&(i.rank=r,i.order=t),k(n,"border",i,e)}function Ze(n){return S(E(n.nodes(),function(e){var r=n.node(e).rank;if(!y(r))return r}))}function vo(n,e){var r={lhs:[],rhs:[]};return c(n,function(t){e(t)?r.lhs.push(t):r.rhs.push(t)}),r}function go(n,e){var r=de();try{return e()}finally{console.log(n+" time: "+(de()-r)+"ms")}}function po(n,e){return e()}function bo(n){function e(r){var t=n.children(r),i=n.node(r);if(t.length&&c(t,e),b(i,"minRank")){i.borderLeft=[],i.borderRight=[];for(var a=i.minRank,o=i.maxRank+1;ao.lim&&(s=o,u=!0);var f=A(e.edges(),function(d){return u===me(n,n.node(d.v),s)&&u!==me(n,n.node(d.w),s)});return Yn(f,function(d){return K(e,d)})}function ar(n,e,r,t){var i=r.v,a=r.w;n.removeEdge(i,a),n.setEdge(t.v,t.w,{}),Wn(n),qn(n,e),$o(n,e)}function $o(n,e){var r=kn(n.nodes(),function(i){return!e.node(i).parent}),t=Io(n,r);t=t.slice(1),c(t,function(i){var a=n.node(i).parent,o=e.edge(i,a),s=!1;o||(o=e.edge(a,i),s=!0),e.node(i).rank=e.node(a).rank+(s?o.minlen:-o.minlen)})}function So(n,e,r){return n.hasEdge(e,r)}function me(n,e,r){return r.low<=e.lim&&e.lim<=r.lim}function Mo(n){switch(n.graph().ranker){case"network-simplex":_e(n);break;case"tight-tree":Fo(n);break;case"longest-path":Ro(n);break;default:_e(n)}}var Ro=Hn;function Fo(n){Hn(n),Qe(n)}function _e(n){M(n)}function Do(n){var e=k(n,"root",{},"_root"),r=Go(n),t=S(N(r))-1,i=2*t+1;n.graph().nestingRoot=e,c(n.edges(),function(o){n.edge(o).minlen*=i});var a=ko(n)+1;c(n.children(),function(o){or(n,e,i,a,t,r,o)}),n.graph().nodeRankFactor=i}function or(n,e,r,t,i,a,o){var s=n.children(o);if(!s.length){o!==e&&n.setEdge(e,o,{weight:0,minlen:r});return}var u=pe(n,"_bt"),f=pe(n,"_bb"),d=n.node(o);n.setParent(u,o),d.borderTop=u,n.setParent(f,o),d.borderBottom=f,c(s,function(h){or(n,e,r,t,i,a,h);var l=n.node(h),g=l.borderTop?l.borderTop:h,v=l.borderBottom?l.borderBottom:h,p=l.borderTop?t:2*t,m=g!==v?1:i-a[o]+1;n.setEdge(u,g,{weight:p,minlen:m,nestingEdge:!0}),n.setEdge(v,f,{weight:p,minlen:m,nestingEdge:!0})}),n.parent(o)||n.setEdge(e,u,{weight:0,minlen:i+a[o]})}function Go(n){var e={};function r(t,i){var a=n.children(t);a&&a.length&&c(a,function(o){r(o,i+1)}),e[t]=i}return c(n.children(),function(t){r(t,1)}),e}function ko(n){return J(n.edges(),function(e,r){return e+n.edge(r).weight},0)}function Bo(n){var e=n.graph();n.removeNode(e.nestingRoot),delete e.nestingRoot,c(n.edges(),function(r){var t=n.edge(r);t.nestingEdge&&n.removeEdge(r)})}function Yo(n,e,r){var t={},i;c(r,function(a){for(var o=n.parent(a),s,u;o;){if(s=n.parent(o),s?(u=t[s],t[s]=o):(u=i,i=o),u&&u!==o){e.setEdge(u,o);return}o=s}})}function Uo(n,e,r){var t=Ho(n),i=new L({compound:!0}).setGraph({root:t}).setDefaultNodeLabel(function(a){return n.node(a)});return c(n.nodes(),function(a){var o=n.node(a),s=n.parent(a);(o.rank===e||o.minRank<=e&&e<=o.maxRank)&&(i.setNode(a),i.setParent(a,s||t),c(n[r](a),function(u){var f=u.v===a?u.w:u.v,d=i.edge(f,a),h=y(d)?0:d.weight;i.setEdge(f,a,{weight:n.edge(u).weight+h})}),b(o,"minRank")&&i.setNode(a,{borderLeft:o.borderLeft[e],borderRight:o.borderRight[e]}))}),i}function Ho(n){for(var e;n.hasNode(e=Un("_root")););return e}function qo(n,e){for(var r=0,t=1;t0;)d%2&&(h+=s[d+1]),d=d-1>>1,s[d]+=f.weight;u+=f.weight*h})),u}function jo(n){var e={},r=A(n.nodes(),function(s){return!n.children(s).length}),t=S(E(r,function(s){return n.node(s).rank})),i=E(D(t+1),function(){return[]});function a(s){if(!b(e,s)){e[s]=!0;var u=n.node(s);i[u.rank].push(s),c(n.successors(s),a)}}var o=Q(r,function(s){return n.node(s).rank});return c(o,a),i}function Ko(n,e){return E(e,function(r){var t=n.inEdges(r);if(t.length){var i=J(t,function(a,o){var s=n.edge(o),u=n.node(o.v);return{sum:a.sum+s.weight*u.order,weight:a.weight+s.weight}},{sum:0,weight:0});return{v:r,barycenter:i.sum/i.weight,weight:i.weight}}else return{v:r}})}function Xo(n,e){var r={};c(n,function(i,a){var o=r[i.v]={indegree:0,in:[],out:[],vs:[i.v],i:a};y(i.barycenter)||(o.barycenter=i.barycenter,o.weight=i.weight)}),c(e.edges(),function(i){var a=r[i.v],o=r[i.w];!y(a)&&!y(o)&&(o.indegree++,a.out.push(r[i.w]))});var t=A(r,function(i){return!i.indegree});return Vo(t)}function Vo(n){var e=[];function r(a){return function(o){o.merged||(y(o.barycenter)||y(a.barycenter)||o.barycenter>=a.barycenter)&&Zo(a,o)}}function t(a){return function(o){o.in.push(a),--o.indegree===0&&n.push(o)}}for(;n.length;){var i=n.pop();e.push(i),c(i.in.reverse(),r(i)),c(i.out,t(i))}return E(A(e,function(a){return!a.merged}),function(a){return un(a,["vs","i","barycenter","weight"])})}function Zo(n,e){var r=0,t=0;n.weight&&(r+=n.barycenter*n.weight,t+=n.weight),e.weight&&(r+=e.barycenter*e.weight,t+=e.weight),n.vs=e.vs.concat(n.vs),n.barycenter=r/t,n.weight=t,n.i=Math.min(e.i,n.i),e.merged=!0}function Jo(n,e){var r=vo(n,function(d){return b(d,"barycenter")}),t=r.lhs,i=Q(r.rhs,function(d){return-d.i}),a=[],o=0,s=0,u=0;t.sort(Qo(!!e)),u=Ee(a,i,u),c(t,function(d){u+=d.vs.length,a.push(d.vs),o+=d.barycenter*d.weight,s+=d.weight,u=Ee(a,i,u)});var f={vs:G(a)};return s&&(f.barycenter=o/s,f.weight=s),f}function Ee(n,e,r){for(var t;e.length&&(t=sn(e)).i<=r;)e.pop(),n.push(t.vs),r++;return r}function Qo(n){return function(e,r){return e.barycenterr.barycenter?1:n?r.i-e.i:e.i-r.i}}function sr(n,e,r,t){var i=n.children(e),a=n.node(e),o=a?a.borderLeft:void 0,s=a?a.borderRight:void 0,u={};o&&(i=A(i,function(v){return v!==o&&v!==s}));var f=Ko(n,i);c(f,function(v){if(n.children(v.v).length){var p=sr(n,v.v,r,t);u[v.v]=p,b(p,"barycenter")&&ns(v,p)}});var d=Xo(f,r);zo(d,u);var h=Jo(d,t);if(o&&(h.vs=G([o,h.vs,s]),n.predecessors(o).length)){var l=n.node(n.predecessors(o)[0]),g=n.node(n.predecessors(s)[0]);b(h,"barycenter")||(h.barycenter=0,h.weight=0),h.barycenter=(h.barycenter*h.weight+l.order+g.order)/(h.weight+2),h.weight+=2}return h}function zo(n,e){c(n,function(r){r.vs=G(r.vs.map(function(t){return e[t]?e[t].vs:t}))})}function ns(n,e){y(n.barycenter)?(n.barycenter=e.barycenter,n.weight=e.weight):(n.barycenter=(n.barycenter*n.weight+e.barycenter*e.weight)/(n.weight+e.weight),n.weight+=e.weight)}function es(n){var e=Ze(n),r=ye(n,D(1,e+1),"inEdges"),t=ye(n,D(e-1,-1,-1),"outEdges"),i=jo(n);xe(n,i);for(var a=Number.POSITIVE_INFINITY,o,s=0,u=0;u<4;++s,++u){rs(s%2?r:t,s%4>=2),i=pn(n);var f=qo(n,i);fo||s>e[u].lim));for(f=u,u=t;(u=n.parent(u))!==f;)a.push(u);return{path:i.concat(a.reverse()),lca:f}}function as(n){var e={},r=0;function t(i){var a=r;c(n.children(i),t),e[i]={low:a,lim:r++}}return c(n.children(),t),e}function os(n,e){var r={};function t(i,a){var o=0,s=0,u=i.length,f=sn(a);return c(a,function(d,h){var l=us(n,d),g=l?n.node(l).order:u;(l||d===f)&&(c(a.slice(s,h+1),function(v){c(n.predecessors(v),function(p){var m=n.node(p),_=m.order;(_f)&&ur(r,l,d)})})}function i(a,o){var s=-1,u,f=0;return c(o,function(d,h){if(n.node(d).dummy==="border"){var l=n.predecessors(d);l.length&&(u=n.node(l[0]).order,t(o,f,h,s,u),f=h,s=u)}t(o,f,o.length,u,a.length)}),o}return J(e,i),r}function us(n,e){if(n.node(e).dummy)return kn(n.predecessors(e),function(r){return n.node(r).dummy})}function ur(n,e,r){if(e>r){var t=e;e=r,r=t}var i=n[e];i||(n[e]=i={}),i[r]=!0}function fs(n,e,r){if(e>r){var t=e;e=r,r=t}return b(n[e],r)}function ds(n,e,r,t){var i={},a={},o={};return c(e,function(s){c(s,function(u,f){i[u]=u,a[u]=u,o[u]=f})}),c(e,function(s){var u=-1;c(s,function(f){var d=t(f);if(d.length){d=Q(d,function(p){return o[p]});for(var h=(d.length-1)/2,l=Math.floor(h),g=Math.ceil(h);l<=g;++l){var v=d[l];a[f]===f&&u[e("open source code")]),_:1}),e(" , please replace or remove it for commercial use. Any commercial disputes or infringement caused by using this project have nothing to do with the project and developers and shall be at your own legal risk. When using the code of this project, the license agreement should also indicate the license of the third-party libraries that this project depends on.")])])}const f=t(l,[["render",d],["__file","license.html.vue"]]);export{f as default}; +import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{r,o as n,c as s,a as c,d as e,b as i,w as a}from"./app-oTlYPy8h.js";const l={};function d(h,p){const o=r("RouterLink");return n(),s("div",null,[c("p",null,[e("The self-owned code of this project is licensed under the permissive MIT License and can be freely applied to commercial and non-commercial projects while retaining copyright information. However, this project also uses some scattered "),i(o,{to:"/reference/resources/dependency.html"},{default:a(()=>[e("open source code")]),_:1}),e(" , please replace or remove it for commercial use. Any commercial disputes or infringement caused by using this project have nothing to do with the project and developers and shall be at your own legal risk. When using the code of this project, the license agreement should also indicate the license of the third-party libraries that this project depends on.")])])}const f=t(l,[["render",d],["__file","license.html.vue"]]);export{f as default}; diff --git a/assets/license.html-UJLTmREW.js b/assets/license.html-vCBKTTMs.js similarity index 85% rename from assets/license.html-UJLTmREW.js rename to assets/license.html-vCBKTTMs.js index 1d14550..44357cf 100644 --- a/assets/license.html-UJLTmREW.js +++ b/assets/license.html-vCBKTTMs.js @@ -1 +1 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as r,c,a as s,d as e,b as a,w as l}from"./app-BrxqtzGY.js";const _={};function d(i,m){const t=n("RouterLink");return r(),c("div",null,[s("p",null,[e("本项目自有代码使用宽松的 MIT 协议,在保留版权信息的情况下可以自由应用于各自商用、非商业的项目。 但是本项目也零碎的使用了一些其他的"),a(t,{to:"/zh/reference/resources/dependency.html"},{default:l(()=>[e("开源代码")]),_:1}),e(",在商用的情况下请自行替代或剔除; 由于使用本项目而产生的商业纠纷或侵权行为一概与本项目及开发者无关,请自行承担法律风险。 在使用本项目代码时,也应该在授权协议中同时表明本项目依赖的第三方库的协议。")])])}const p=o(_,[["render",d],["__file","license.html.vue"]]);export{p as default}; +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as r,c,a as s,d as e,b as a,w as l}from"./app-oTlYPy8h.js";const _={};function d(i,m){const t=n("RouterLink");return r(),c("div",null,[s("p",null,[e("本项目自有代码使用宽松的 MIT 协议,在保留版权信息的情况下可以自由应用于各自商用、非商业的项目。 但是本项目也零碎的使用了一些其他的"),a(t,{to:"/zh/reference/resources/dependency.html"},{default:l(()=>[e("开源代码")]),_:1}),e(",在商用的情况下请自行替代或剔除; 由于使用本项目而产生的商业纠纷或侵权行为一概与本项目及开发者无关,请自行承担法律风险。 在使用本项目代码时,也应该在授权协议中同时表明本项目依赖的第三方库的协议。")])])}const p=o(_,[["render",d],["__file","license.html.vue"]]);export{p as default}; diff --git a/assets/line-TqRW8de4.js b/assets/line-ZVNdUhg2.js similarity index 93% rename from assets/line-TqRW8de4.js rename to assets/line-ZVNdUhg2.js index 7b8bea4..e766df8 100644 --- a/assets/line-TqRW8de4.js +++ b/assets/line-ZVNdUhg2.js @@ -1 +1 @@ -import{a as h}from"./array-Nw74a44z.js";import{w as d,c as o}from"./path-aUcfwwLI.js";import{o as v}from"./mermaid.core-zy7cM8l9.js";function w(t){return t[0]}function b(t){return t[1]}function P(t,u){var s=o(!0),i=null,l=v,r=null,m=d(e);t=typeof t=="function"?t:t===void 0?w:o(t),u=typeof u=="function"?u:u===void 0?b:o(u);function e(n){var f,g=(n=h(n)).length,p,c=!1,a;for(i==null&&(r=l(a=m())),f=0;f<=g;++f)!(ft?1:n>=t?0:NaN}function hn(n,t){return n==null||t==null?NaN:tn?1:t>=n?0:NaN}function _(n){let t,e,r;n.length!==2?(t=$,e=(u,c)=>$(n(u),c),r=(u,c)=>n(u)-c):(t=n===$||n===hn?n:mn,e=n,r=n);function i(u,c,o=0,l=u.length){if(o>>1;e(u[h],c)<0?o=h+1:l=h}while(o>>1;e(u[h],c)<=0?o=h+1:l=h}while(oo&&r(u[h-1],c)>-r(u[h],c)?h-1:h}return{left:i,center:a,right:f}}function mn(){return 0}function sn(n){return n===null?NaN:+n}const ln=_($),dn=ln.right;_(sn).center;const gn=dn,yn=Math.sqrt(50),Mn=Math.sqrt(10),pn=Math.sqrt(2);function E(n,t,e){const r=(t-n)/Math.max(0,e),i=Math.floor(Math.log10(r)),f=r/Math.pow(10,i),a=f>=yn?10:f>=Mn?5:f>=pn?2:1;let u,c,o;return i<0?(o=Math.pow(10,-i)/a,u=Math.round(n*o),c=Math.round(t*o),u/ot&&--c,o=-o):(o=Math.pow(10,i)*a,u=Math.round(n/o),c=Math.round(t/o),u*ot&&--c),c0))return[];if(n===t)return[n];const r=t=i))return[];const u=f-i+1,c=new Array(u);if(r)if(a<0)for(let o=0;o=1e21?n.toLocaleString("en").replace(/,/g,""):n.toString(10)}function R(n,t){if((e=(n=t?n.toExponential(t-1):n.toExponential()).indexOf("e"))<0)return null;var e,r=n.slice(0,e);return[r.length>1?r[0]+r.slice(2):r,+n.slice(e+1)]}function v(n){return n=R(Math.abs(n)),n?n[1]:NaN}function Pn(n,t){return function(e,r){for(var i=e.length,f=[],a=0,u=n[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),f.push(e.substring(i-=u,i+u)),!((c+=u+1)>r));)u=n[a=(a+1)%n.length];return f.reverse().join(t)}}function zn(n){return function(t){return t.replace(/[0-9]/g,function(e){return n[+e]})}}var Fn=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function D(n){if(!(t=Fn.exec(n)))throw new Error("invalid format: "+n);var t;return new G({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}D.prototype=G.prototype;function G(n){this.fill=n.fill===void 0?" ":n.fill+"",this.align=n.align===void 0?">":n.align+"",this.sign=n.sign===void 0?"-":n.sign+"",this.symbol=n.symbol===void 0?"":n.symbol+"",this.zero=!!n.zero,this.width=n.width===void 0?void 0:+n.width,this.comma=!!n.comma,this.precision=n.precision===void 0?void 0:+n.precision,this.trim=!!n.trim,this.type=n.type===void 0?"":n.type+""}G.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function $n(n){n:for(var t=n.length,e=1,r=-1,i;e0&&(r=0);break}return r>0?n.slice(0,r)+n.slice(i+1):n}var nn;function En(n,t){var e=R(n,t);if(!e)return n+"";var r=e[0],i=e[1],f=i-(nn=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,a=r.length;return f===a?r:f>a?r+new Array(f-a+1).join("0"):f>0?r.slice(0,f)+"."+r.slice(f):"0."+new Array(1-f).join("0")+R(n,Math.max(0,t+f-1))[0]}function Y(n,t){var e=R(n,t);if(!e)return n+"";var r=e[0],i=e[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}const Z={"%":(n,t)=>(n*100).toFixed(t),b:n=>Math.round(n).toString(2),c:n=>n+"",d:jn,e:(n,t)=>n.toExponential(t),f:(n,t)=>n.toFixed(t),g:(n,t)=>n.toPrecision(t),o:n=>Math.round(n).toString(8),p:(n,t)=>Y(n*100,t),r:Y,s:En,X:n=>Math.round(n).toString(16).toUpperCase(),x:n=>Math.round(n).toString(16)};function J(n){return n}var K=Array.prototype.map,Q=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Rn(n){var t=n.grouping===void 0||n.thousands===void 0?J:Pn(K.call(n.grouping,Number),n.thousands+""),e=n.currency===void 0?"":n.currency[0]+"",r=n.currency===void 0?"":n.currency[1]+"",i=n.decimal===void 0?".":n.decimal+"",f=n.numerals===void 0?J:zn(K.call(n.numerals,String)),a=n.percent===void 0?"%":n.percent+"",u=n.minus===void 0?"−":n.minus+"",c=n.nan===void 0?"NaN":n.nan+"";function o(h){h=D(h);var s=h.fill,p=h.align,y=h.sign,S=h.symbol,k=h.zero,b=h.width,I=h.comma,w=h.precision,B=h.trim,d=h.type;d==="n"?(I=!0,d="g"):Z[d]||(w===void 0&&(w=12),B=!0,d="g"),(k||s==="0"&&p==="=")&&(k=!0,s="0",p="=");var en=S==="$"?e:S==="#"&&/[boxX]/.test(d)?"0"+d.toLowerCase():"",on=S==="$"?r:/[%p]/.test(d)?a:"",O=Z[d],an=/[defgprs%]/.test(d);w=w===void 0?6:/[gprs]/.test(d)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function V(m){var N=en,g=on,x,X,j;if(d==="c")g=O(m)+g,m="";else{m=+m;var P=m<0||1/m<0;if(m=isNaN(m)?c:O(Math.abs(m),w),B&&(m=$n(m)),P&&+m==0&&y!=="+"&&(P=!1),N=(P?y==="("?y:u:y==="-"||y==="("?"":y)+N,g=(d==="s"?Q[8+nn/3]:"")+g+(P&&y==="("?")":""),an){for(x=-1,X=m.length;++xj||j>57){g=(j===46?i+m.slice(x+1):m.slice(x))+g,m=m.slice(0,x);break}}}I&&!k&&(m=t(m,1/0));var z=N.length+m.length+g.length,M=z>1)+N+m+g+M.slice(z);break;default:m=M+N+m+g;break}return f(m)}return V.toString=function(){return h+""},V}function l(h,s){var p=o((h=D(h),h.type="f",h)),y=Math.max(-8,Math.min(8,Math.floor(v(s)/3)))*3,S=Math.pow(10,-y),k=Q[8+y/3];return function(b){return p(S*b)+k}}return{format:o,formatPrefix:l}}var F,tn,rn;Dn({thousands:",",grouping:[3],currency:["$",""]});function Dn(n){return F=Rn(n),tn=F.format,rn=F.formatPrefix,F}function In(n){return Math.max(0,-v(Math.abs(n)))}function Tn(n,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(v(t)/3)))*3-v(Math.abs(n)))}function Ln(n,t){return n=Math.abs(n),t=Math.abs(t)-n,Math.max(0,v(t)-v(n))+1}function qn(n){return function(){return n}}function Cn(n){return+n}var W=[0,1];function A(n){return n}function q(n,t){return(t-=n=+n)?function(e){return(e-n)/t}:qn(isNaN(t)?NaN:.5)}function Gn(n,t){var e;return n>t&&(e=n,n=t,t=e),function(r){return Math.max(n,Math.min(t,r))}}function Bn(n,t,e){var r=n[0],i=n[1],f=t[0],a=t[1];return i2?On:Bn,c=o=null,h}function h(s){return s==null||isNaN(s=+s)?f:(c||(c=u(n.map(r),t,e)))(r(a(s)))}return h.invert=function(s){return a(i((o||(o=u(t,n.map(r),T)))(s)))},h.domain=function(s){return arguments.length?(n=Array.from(s,Cn),l()):n.slice()},h.range=function(s){return arguments.length?(t=Array.from(s),l()):t.slice()},h.rangeRound=function(s){return t=Array.from(s),e=bn,l()},h.clamp=function(s){return arguments.length?(a=s?!0:A,l()):a!==A},h.interpolate=function(s){return arguments.length?(e=s,l()):e},h.unknown=function(s){return arguments.length?(f=s,h):f},function(s,p){return r=s,i=p,l()}}function Hn(){return Xn()(A,A)}function Un(n,t,e,r){var i=Nn(n,t,e),f;switch(r=D(r??",f"),r.type){case"s":{var a=Math.max(Math.abs(n),Math.abs(t));return r.precision==null&&!isNaN(f=Tn(i,a))&&(r.precision=f),rn(r,a)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(f=Ln(i,Math.max(Math.abs(n),Math.abs(t))))&&(r.precision=f-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(f=In(i))&&(r.precision=f-(r.type==="%")*2);break}}return tn(r)}function Yn(n){var t=n.domain;return n.ticks=function(e){var r=t();return wn(r[0],r[r.length-1],e??10)},n.tickFormat=function(e,r){var i=t();return Un(i[0],i[i.length-1],e??10,r)},n.nice=function(e){e==null&&(e=10);var r=t(),i=0,f=r.length-1,a=r[i],u=r[f],c,o,l=10;for(u0;){if(o=L(a,u,e),o===c)return r[i]=a,r[f]=u,t(r);if(o>0)a=Math.floor(a/o)*o,u=Math.ceil(u/o)*o;else if(o<0)a=Math.ceil(a*o)/o,u=Math.floor(u*o)/o;else break;c=o}return n},n}function Zn(){var n=Hn();return n.copy=function(){return Vn(n,Zn())},cn.apply(n,arguments),Yn(n)}export{Vn as a,_ as b,Hn as c,Zn as l,Nn as t}; +import{aE as un,aF as T,aG as H,aH as U,aI as fn}from"./mermaid.core-QJnSHCal.js";import{i as cn}from"./init-Hi12RPRh.js";function $(n,t){return n==null||t==null?NaN:nt?1:n>=t?0:NaN}function hn(n,t){return n==null||t==null?NaN:tn?1:t>=n?0:NaN}function _(n){let t,e,r;n.length!==2?(t=$,e=(u,c)=>$(n(u),c),r=(u,c)=>n(u)-c):(t=n===$||n===hn?n:mn,e=n,r=n);function i(u,c,o=0,l=u.length){if(o>>1;e(u[h],c)<0?o=h+1:l=h}while(o>>1;e(u[h],c)<=0?o=h+1:l=h}while(oo&&r(u[h-1],c)>-r(u[h],c)?h-1:h}return{left:i,center:a,right:f}}function mn(){return 0}function sn(n){return n===null?NaN:+n}const ln=_($),dn=ln.right;_(sn).center;const gn=dn,yn=Math.sqrt(50),Mn=Math.sqrt(10),pn=Math.sqrt(2);function E(n,t,e){const r=(t-n)/Math.max(0,e),i=Math.floor(Math.log10(r)),f=r/Math.pow(10,i),a=f>=yn?10:f>=Mn?5:f>=pn?2:1;let u,c,o;return i<0?(o=Math.pow(10,-i)/a,u=Math.round(n*o),c=Math.round(t*o),u/ot&&--c,o=-o):(o=Math.pow(10,i)*a,u=Math.round(n/o),c=Math.round(t/o),u*ot&&--c),c0))return[];if(n===t)return[n];const r=t=i))return[];const u=f-i+1,c=new Array(u);if(r)if(a<0)for(let o=0;o=1e21?n.toLocaleString("en").replace(/,/g,""):n.toString(10)}function R(n,t){if((e=(n=t?n.toExponential(t-1):n.toExponential()).indexOf("e"))<0)return null;var e,r=n.slice(0,e);return[r.length>1?r[0]+r.slice(2):r,+n.slice(e+1)]}function v(n){return n=R(Math.abs(n)),n?n[1]:NaN}function Pn(n,t){return function(e,r){for(var i=e.length,f=[],a=0,u=n[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),f.push(e.substring(i-=u,i+u)),!((c+=u+1)>r));)u=n[a=(a+1)%n.length];return f.reverse().join(t)}}function zn(n){return function(t){return t.replace(/[0-9]/g,function(e){return n[+e]})}}var Fn=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function D(n){if(!(t=Fn.exec(n)))throw new Error("invalid format: "+n);var t;return new G({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}D.prototype=G.prototype;function G(n){this.fill=n.fill===void 0?" ":n.fill+"",this.align=n.align===void 0?">":n.align+"",this.sign=n.sign===void 0?"-":n.sign+"",this.symbol=n.symbol===void 0?"":n.symbol+"",this.zero=!!n.zero,this.width=n.width===void 0?void 0:+n.width,this.comma=!!n.comma,this.precision=n.precision===void 0?void 0:+n.precision,this.trim=!!n.trim,this.type=n.type===void 0?"":n.type+""}G.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function $n(n){n:for(var t=n.length,e=1,r=-1,i;e0&&(r=0);break}return r>0?n.slice(0,r)+n.slice(i+1):n}var nn;function En(n,t){var e=R(n,t);if(!e)return n+"";var r=e[0],i=e[1],f=i-(nn=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,a=r.length;return f===a?r:f>a?r+new Array(f-a+1).join("0"):f>0?r.slice(0,f)+"."+r.slice(f):"0."+new Array(1-f).join("0")+R(n,Math.max(0,t+f-1))[0]}function Y(n,t){var e=R(n,t);if(!e)return n+"";var r=e[0],i=e[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}const Z={"%":(n,t)=>(n*100).toFixed(t),b:n=>Math.round(n).toString(2),c:n=>n+"",d:jn,e:(n,t)=>n.toExponential(t),f:(n,t)=>n.toFixed(t),g:(n,t)=>n.toPrecision(t),o:n=>Math.round(n).toString(8),p:(n,t)=>Y(n*100,t),r:Y,s:En,X:n=>Math.round(n).toString(16).toUpperCase(),x:n=>Math.round(n).toString(16)};function J(n){return n}var K=Array.prototype.map,Q=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Rn(n){var t=n.grouping===void 0||n.thousands===void 0?J:Pn(K.call(n.grouping,Number),n.thousands+""),e=n.currency===void 0?"":n.currency[0]+"",r=n.currency===void 0?"":n.currency[1]+"",i=n.decimal===void 0?".":n.decimal+"",f=n.numerals===void 0?J:zn(K.call(n.numerals,String)),a=n.percent===void 0?"%":n.percent+"",u=n.minus===void 0?"−":n.minus+"",c=n.nan===void 0?"NaN":n.nan+"";function o(h){h=D(h);var s=h.fill,p=h.align,y=h.sign,S=h.symbol,k=h.zero,b=h.width,I=h.comma,w=h.precision,B=h.trim,d=h.type;d==="n"?(I=!0,d="g"):Z[d]||(w===void 0&&(w=12),B=!0,d="g"),(k||s==="0"&&p==="=")&&(k=!0,s="0",p="=");var en=S==="$"?e:S==="#"&&/[boxX]/.test(d)?"0"+d.toLowerCase():"",on=S==="$"?r:/[%p]/.test(d)?a:"",O=Z[d],an=/[defgprs%]/.test(d);w=w===void 0?6:/[gprs]/.test(d)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function V(m){var N=en,g=on,x,X,j;if(d==="c")g=O(m)+g,m="";else{m=+m;var P=m<0||1/m<0;if(m=isNaN(m)?c:O(Math.abs(m),w),B&&(m=$n(m)),P&&+m==0&&y!=="+"&&(P=!1),N=(P?y==="("?y:u:y==="-"||y==="("?"":y)+N,g=(d==="s"?Q[8+nn/3]:"")+g+(P&&y==="("?")":""),an){for(x=-1,X=m.length;++xj||j>57){g=(j===46?i+m.slice(x+1):m.slice(x))+g,m=m.slice(0,x);break}}}I&&!k&&(m=t(m,1/0));var z=N.length+m.length+g.length,M=z>1)+N+m+g+M.slice(z);break;default:m=M+N+m+g;break}return f(m)}return V.toString=function(){return h+""},V}function l(h,s){var p=o((h=D(h),h.type="f",h)),y=Math.max(-8,Math.min(8,Math.floor(v(s)/3)))*3,S=Math.pow(10,-y),k=Q[8+y/3];return function(b){return p(S*b)+k}}return{format:o,formatPrefix:l}}var F,tn,rn;Dn({thousands:",",grouping:[3],currency:["$",""]});function Dn(n){return F=Rn(n),tn=F.format,rn=F.formatPrefix,F}function In(n){return Math.max(0,-v(Math.abs(n)))}function Tn(n,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(v(t)/3)))*3-v(Math.abs(n)))}function Ln(n,t){return n=Math.abs(n),t=Math.abs(t)-n,Math.max(0,v(t)-v(n))+1}function qn(n){return function(){return n}}function Cn(n){return+n}var W=[0,1];function A(n){return n}function q(n,t){return(t-=n=+n)?function(e){return(e-n)/t}:qn(isNaN(t)?NaN:.5)}function Gn(n,t){var e;return n>t&&(e=n,n=t,t=e),function(r){return Math.max(n,Math.min(t,r))}}function Bn(n,t,e){var r=n[0],i=n[1],f=t[0],a=t[1];return i2?On:Bn,c=o=null,h}function h(s){return s==null||isNaN(s=+s)?f:(c||(c=u(n.map(r),t,e)))(r(a(s)))}return h.invert=function(s){return a(i((o||(o=u(t,n.map(r),T)))(s)))},h.domain=function(s){return arguments.length?(n=Array.from(s,Cn),l()):n.slice()},h.range=function(s){return arguments.length?(t=Array.from(s),l()):t.slice()},h.rangeRound=function(s){return t=Array.from(s),e=bn,l()},h.clamp=function(s){return arguments.length?(a=s?!0:A,l()):a!==A},h.interpolate=function(s){return arguments.length?(e=s,l()):e},h.unknown=function(s){return arguments.length?(f=s,h):f},function(s,p){return r=s,i=p,l()}}function Hn(){return Xn()(A,A)}function Un(n,t,e,r){var i=Nn(n,t,e),f;switch(r=D(r??",f"),r.type){case"s":{var a=Math.max(Math.abs(n),Math.abs(t));return r.precision==null&&!isNaN(f=Tn(i,a))&&(r.precision=f),rn(r,a)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(f=Ln(i,Math.max(Math.abs(n),Math.abs(t))))&&(r.precision=f-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(f=In(i))&&(r.precision=f-(r.type==="%")*2);break}}return tn(r)}function Yn(n){var t=n.domain;return n.ticks=function(e){var r=t();return wn(r[0],r[r.length-1],e??10)},n.tickFormat=function(e,r){var i=t();return Un(i[0],i[i.length-1],e??10,r)},n.nice=function(e){e==null&&(e=10);var r=t(),i=0,f=r.length-1,a=r[i],u=r[f],c,o,l=10;for(u0;){if(o=L(a,u,e),o===c)return r[i]=a,r[f]=u,t(r);if(o>0)a=Math.floor(a/o)*o,u=Math.ceil(u/o)*o;else if(o<0)a=Math.ceil(a*o)/o,u=Math.floor(u*o)/o;else break;c=o}return n},n}function Zn(){var n=Hn();return n.copy=function(){return Vn(n,Zn())},cn.apply(n,arguments),Yn(n)}export{Vn as a,_ as b,Hn as c,Zn as l,Nn as t}; diff --git a/assets/mermaid.core-zy7cM8l9.js b/assets/mermaid.core-QJnSHCal.js similarity index 98% rename from assets/mermaid.core-zy7cM8l9.js rename to assets/mermaid.core-QJnSHCal.js index 0386c75..bc3fde9 100644 --- a/assets/mermaid.core-zy7cM8l9.js +++ b/assets/mermaid.core-QJnSHCal.js @@ -1,4 +1,4 @@ -import{_ as J}from"./app-BrxqtzGY.js";function uh(t){for(var e=[],i=1;i=v?M:""+Array(v+1-B.length).join(y)+M},H={s:q,z:function(M){var v=-M.utcOffset(),y=Math.abs(v),B=Math.floor(y/60),x=y%60;return(v<=0?"+":"-")+q(B,2,"0")+":"+q(x,2,"0")},m:function M(v,y){if(v.date()1)return M(D[0])}else{var I=v.name;X[I]=v,x=I}return!B&&x&&(Y=x),x||!B&&Y},j=function(M,v){if(Xt(M))return M.clone();var y=typeof v=="object"?v:{};return y.date=M,y.args=arguments,new vt(y)},z=H;z.l=Kt,z.i=Xt,z.w=function(M,v){return j(M,{locale:v.$L,utc:v.$u,x:v.$x,$offset:v.$offset})};var vt=function(){function M(y){this.$L=Kt(y.locale,null,!0),this.parse(y),this.$x=this.$x||y.x||{},this[W]=!0}var v=M.prototype;return v.parse=function(y){this.$d=function(B){var x=B.date,b=B.utc;if(x===null)return new Date(NaN);if(z.u(x))return new Date;if(x instanceof Date)return new Date(x);if(typeof x=="string"&&!/Z$/i.test(x)){var D=x.match(S);if(D){var I=D[2]-1||0,G=(D[7]||"0").substring(0,3);return b?new Date(Date.UTC(D[1],I,D[3]||1,D[4]||0,D[5]||0,D[6]||0,G)):new Date(D[1],I,D[3]||1,D[4]||0,D[5]||0,D[6]||0,G)}}return new Date(x)}(y),this.init()},v.init=function(){var y=this.$d;this.$y=y.getFullYear(),this.$M=y.getMonth(),this.$D=y.getDate(),this.$W=y.getDay(),this.$H=y.getHours(),this.$m=y.getMinutes(),this.$s=y.getSeconds(),this.$ms=y.getMilliseconds()},v.$utils=function(){return z},v.isValid=function(){return this.$d.toString()!==k},v.isSame=function(y,B){var x=j(y);return this.startOf(B)<=x&&x<=this.endOf(B)},v.isAfter=function(y,B){return j(y)-1}function l(u){var f=u.replace(n,"");return f.replace(i,function(c,d){return String.fromCharCode(d)})}function h(u){if(!u)return t.BLANK_URL;var f=l(u).replace(r,"").replace(n,"").trim();if(!f)return t.BLANK_URL;if(a(f))return f;var c=f.match(o);if(!c)return f;var d=c[0];return e.test(d)?t.BLANK_URL:f}t.sanitizeUrl=h})(Is);var mh={value:()=>{}};function Ds(){for(var t=0,e=arguments.length,i={},r;t=0&&(r=i.slice(n+1),i=i.slice(0,n)),i&&!e.hasOwnProperty(i))throw new Error("unknown type: "+i);return{type:i,name:r}})}Oi.prototype=Ds.prototype={constructor:Oi,on:function(t,e){var i=this._,r=_h(t+"",i),n,o=-1,s=r.length;if(arguments.length<2){for(;++o0)for(var i=new Array(n),r=0,n,o;r=0&&(e=t.slice(0,i))!=="xmlns"&&(t=t.slice(i+1)),vo.hasOwnProperty(e)?{space:vo[e],local:t}:t}function Ch(t){return function(){var e=this.ownerDocument,i=this.namespaceURI;return i===tn&&e.documentElement.namespaceURI===tn?e.createElement(t):e.createElementNS(i,t)}}function xh(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function Ns(t){var e=fr(t);return(e.local?xh:Ch)(e)}function bh(){}function vn(t){return t==null?bh:function(){return this.querySelector(t)}}function Th(t){typeof t!="function"&&(t=vn(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n=q&&(q=T+1);!(Y=S[q])&&++q<_;);H._next=Y||null}}return s=new yt(s,r),s._enter=a,s._exit=l,s}function Wh(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}function Hh(){return new yt(this._exit||this._groups.map(zs),this._parents)}function jh(t,e,i){var r=this.enter(),n=this,o=this.exit();return typeof t=="function"?(r=t(r),r&&(r=r.selection())):r=r.append(t+""),e!=null&&(n=e(n),n&&(n=n.selection())),i==null?o.remove():i(o),r&&n?r.merge(n).order():n}function Uh(t){for(var e=t.selection?t.selection():t,i=this._groups,r=e._groups,n=i.length,o=r.length,s=Math.min(n,o),a=new Array(n),l=0;l=0;)(s=r[n])&&(o&&s.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(s,o),o=s);return this}function Vh(t){t||(t=Gh);function e(f,c){return f&&c?t(f.__data__,c.__data__):!f-!c}for(var i=this._groups,r=i.length,n=new Array(r),o=0;oe?1:t>=e?0:NaN}function Xh(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function Kh(){return Array.from(this)}function Zh(){for(var t=this._groups,e=0,i=t.length;e1?this.each((e==null?lc:typeof e=="function"?cc:hc)(t,e,i??"")):Le(this.node(),t)}function Le(t,e){return t.style.getPropertyValue(e)||Ws(t).getComputedStyle(t,null).getPropertyValue(e)}function fc(t){return function(){delete this[t]}}function dc(t,e){return function(){this[t]=e}}function pc(t,e){return function(){var i=e.apply(this,arguments);i==null?delete this[t]:this[t]=i}}function gc(t,e){return arguments.length>1?this.each((e==null?fc:typeof e=="function"?pc:dc)(t,e)):this.node()[t]}function Hs(t){return t.trim().split(/^|\s+/)}function kn(t){return t.classList||new js(t)}function js(t){this._node=t,this._names=Hs(t.getAttribute("class")||"")}js.prototype={add:function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function Us(t,e){for(var i=kn(t),r=-1,n=e.length;++r=0&&(i=e.slice(r+1),e=e.slice(0,r)),{type:e,name:i}})}function Hc(t){return function(){var e=this.__on;if(e){for(var i=0,r=-1,n=e.length,o;i>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):i===8?Ti(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):i===4?Ti(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=Jc.exec(t))?new gt(e[1],e[2],e[3],1):(e=Qc.exec(t))?new gt(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=tu.exec(t))?Ti(e[1],e[2],e[3],e[4]):(e=eu.exec(t))?Ti(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=iu.exec(t))?Lo(e[1],e[2]/100,e[3]/100,1):(e=ru.exec(t))?Lo(e[1],e[2]/100,e[3]/100,e[4]):ko.hasOwnProperty(t)?Bo(ko[t]):t==="transparent"?new gt(NaN,NaN,NaN,0):null}function Bo(t){return new gt(t>>16&255,t>>8&255,t&255,1)}function Ti(t,e,i,r){return r<=0&&(t=e=i=NaN),new gt(t,e,i,r)}function su(t){return t instanceof di||(t=ni(t)),t?(t=t.rgb(),new gt(t.r,t.g,t.b,t.opacity)):new gt}function en(t,e,i,r){return arguments.length===1?su(t):new gt(t,e,i,r??1)}function gt(t,e,i,r){this.r=+t,this.g=+e,this.b=+i,this.opacity=+r}Sn(gt,en,Xs(di,{brighter(t){return t=t==null?ji:Math.pow(ji,t),new gt(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?ii:Math.pow(ii,t),new gt(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new gt(ue(this.r),ue(this.g),ue(this.b),Ui(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Ao,formatHex:Ao,formatHex8:au,formatRgb:Fo,toString:Fo}));function Ao(){return`#${ce(this.r)}${ce(this.g)}${ce(this.b)}`}function au(){return`#${ce(this.r)}${ce(this.g)}${ce(this.b)}${ce((isNaN(this.opacity)?1:this.opacity)*255)}`}function Fo(){const t=Ui(this.opacity);return`${t===1?"rgb(":"rgba("}${ue(this.r)}, ${ue(this.g)}, ${ue(this.b)}${t===1?")":`, ${t})`}`}function Ui(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function ue(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function ce(t){return t=ue(t),(t<16?"0":"")+t.toString(16)}function Lo(t,e,i,r){return r<=0?t=e=i=NaN:i<=0||i>=1?t=e=NaN:e<=0&&(t=NaN),new St(t,e,i,r)}function Ks(t){if(t instanceof St)return new St(t.h,t.s,t.l,t.opacity);if(t instanceof di||(t=ni(t)),!t)return new St;if(t instanceof St)return t;t=t.rgb();var e=t.r/255,i=t.g/255,r=t.b/255,n=Math.min(e,i,r),o=Math.max(e,i,r),s=NaN,a=o-n,l=(o+n)/2;return a?(e===o?s=(i-r)/a+(i0&&l<1?0:s,new St(s,a,l,t.opacity)}function lu(t,e,i,r){return arguments.length===1?Ks(t):new St(t,e,i,r??1)}function St(t,e,i,r){this.h=+t,this.s=+e,this.l=+i,this.opacity=+r}Sn(St,lu,Xs(di,{brighter(t){return t=t==null?ji:Math.pow(ji,t),new St(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?ii:Math.pow(ii,t),new St(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,i=this.l,r=i+(i<.5?i:1-i)*e,n=2*i-r;return new gt(Rr(t>=240?t-240:t+120,n,r),Rr(t,n,r),Rr(t<120?t+240:t-120,n,r),this.opacity)},clamp(){return new St(Eo(this.h),vi(this.s),vi(this.l),Ui(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=Ui(this.opacity);return`${t===1?"hsl(":"hsla("}${Eo(this.h)}, ${vi(this.s)*100}%, ${vi(this.l)*100}%${t===1?")":`, ${t})`}`}}));function Eo(t){return t=(t||0)%360,t<0?t+360:t}function vi(t){return Math.max(0,Math.min(1,t||0))}function Rr(t,e,i){return(t<60?e+(i-e)*t/60:t<180?i:t<240?e+(i-e)*(240-t)/60:e)*255}const wn=t=>()=>t;function Zs(t,e){return function(i){return t+i*e}}function hu(t,e,i){return t=Math.pow(t,i),e=Math.pow(e,i)-t,i=1/i,function(r){return Math.pow(t+r*e,i)}}function Kb(t,e){var i=e-t;return i?Zs(t,i>180||i<-180?i-360*Math.round(i/360):i):wn(isNaN(t)?e:t)}function cu(t){return(t=+t)==1?Js:function(e,i){return i-e?hu(e,i,t):wn(isNaN(e)?i:e)}}function Js(t,e){var i=e-t;return i?Zs(t,i):wn(isNaN(t)?e:t)}const Oo=function t(e){var i=cu(e);function r(n,o){var s=i((n=en(n)).r,(o=en(o)).r),a=i(n.g,o.g),l=i(n.b,o.b),h=Js(n.opacity,o.opacity);return function(u){return n.r=s(u),n.g=a(u),n.b=l(u),n.opacity=h(u),n+""}}return r.gamma=t,r}(1);function ee(t,e){return t=+t,e=+e,function(i){return t*(1-i)+e*i}}var rn=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Pr=new RegExp(rn.source,"g");function uu(t){return function(){return t}}function fu(t){return function(e){return t(e)+""}}function du(t,e){var i=rn.lastIndex=Pr.lastIndex=0,r,n,o,s=-1,a=[],l=[];for(t=t+"",e=e+"";(r=rn.exec(t))&&(n=Pr.exec(e));)(o=n.index)>i&&(o=e.slice(i,o),a[s]?a[s]+=o:a[++s]=o),(r=r[0])===(n=n[0])?a[s]?a[s]+=n:a[++s]=n:(a[++s]=null,l.push({i:s,x:ee(r,n)})),i=Pr.lastIndex;return i180?u+=360:u-h>180&&(h+=360),c.push({i:f.push(n(f)+"rotate(",null,r)-2,x:ee(h,u)})):u&&f.push(n(f)+"rotate("+u+r)}function a(h,u,f,c){h!==u?c.push({i:f.push(n(f)+"skewX(",null,r)-2,x:ee(h,u)}):u&&f.push(n(f)+"skewX("+u+r)}function l(h,u,f,c,d,_){if(h!==f||u!==c){var k=d.push(n(d)+"scale(",null,",",null,")");_.push({i:k-4,x:ee(h,f)},{i:k-2,x:ee(u,c)})}else(f!==1||c!==1)&&d.push(n(d)+"scale("+f+","+c+")")}return function(h,u){var f=[],c=[];return h=t(h),u=t(u),o(h.translateX,h.translateY,u.translateX,u.translateY,f,c),s(h.rotate,u.rotate,f,c),a(h.skewX,u.skewX,f,c),l(h.scaleX,h.scaleY,u.scaleX,u.scaleY,f,c),h=u=null,function(d){for(var _=-1,k=c.length,S;++_=0&&t._call.call(void 0,e),t=t._next;--Ee}function $o(){pe=(Vi=oi.now())+dr,Ee=Ve=0;try{Cu()}finally{Ee=0,bu(),pe=0}}function xu(){var t=oi.now(),e=t-Vi;e>ea&&(dr-=e,Vi=t)}function bu(){for(var t,e=Yi,i,r=1/0;e;)e._call?(r>e._time&&(r=e._time),t=e,e=e._next):(i=e._next,e._next=null,e=t?t._next=i:Yi=i);Ge=t,on(r)}function on(t){if(!Ee){Ve&&(Ve=clearTimeout(Ve));var e=t-pe;e>24?(t<1/0&&(Ve=setTimeout($o,t-oi.now()-dr)),We&&(We=clearInterval(We))):(We||(Vi=oi.now(),We=setInterval(xu,ea)),Ee=1,ia($o))}}function Io(t,e,i){var r=new Gi;return e=e==null?0:+e,r.restart(n=>{r.stop(),t(n+e)},e,i),r}var Tu=Ds("start","end","cancel","interrupt"),vu=[],na=0,Do=1,sn=2,Mi=3,No=4,an=5,$i=6;function pr(t,e,i,r,n,o){var s=t.__transition;if(!s)t.__transition={};else if(i in s)return;ku(t,i,{name:e,index:r,group:n,on:Tu,tween:vu,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:na})}function An(t,e){var i=Ft(t,e);if(i.state>na)throw new Error("too late; already scheduled");return i}function It(t,e){var i=Ft(t,e);if(i.state>Mi)throw new Error("too late; already running");return i}function Ft(t,e){var i=t.__transition;if(!i||!(i=i[e]))throw new Error("transition not found");return i}function ku(t,e,i){var r=t.__transition,n;r[e]=i,i.timer=ra(o,0,i.time);function o(h){i.state=Do,i.timer.restart(s,i.delay,i.time),i.delay<=h&&s(h-i.delay)}function s(h){var u,f,c,d;if(i.state!==Do)return l();for(u in r)if(d=r[u],d.name===i.name){if(d.state===Mi)return Io(s);d.state===No?(d.state=$i,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete r[u]):+usn&&r.state=0&&(e=e.slice(0,i)),!e||e==="start"})}function ef(t,e,i){var r,n,o=tf(e)?An:It;return function(){var s=o(this,t),a=s.on;a!==r&&(n=(r=a).copy()).on(e,i),s.on=n}}function rf(t,e){var i=this._id;return arguments.length<2?Ft(this.node(),i).on.on(t):this.each(ef(i,t,e))}function nf(t){return function(){var e=this.parentNode;for(var i in this.__transition)if(+i!==t)return;e&&e.removeChild(this)}}function of(){return this.on("end.remove",nf(this._id))}function sf(t){var e=this._name,i=this._id;typeof t!="function"&&(t=vn(t));for(var r=this._groups,n=r.length,o=new Array(n),s=0;s1?0:t<-1?Ln:Math.acos(t)}function s1(t){return t>=1?Po:t<=-1?-Po:Math.asin(t)}function la(t){this._context=t}la.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}}};function Ef(t){return new la(t)}class ha{constructor(e,i){this._context=e,this._x=i}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,i){switch(e=+e,i=+i,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,i):this._context.moveTo(e,i);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,i,e,i):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+i)/2,e,this._y0,e,i);break}}this._x0=e,this._y0=i}}function Of(t){return new ha(t,!0)}function Mf(t){return new ha(t,!1)}function re(){}function Xi(t,e,i){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+i)/6)}function gr(t){this._context=t}gr.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Xi(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Xi(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function $f(t){return new gr(t)}function ca(t){this._context=t}ca.prototype={areaStart:re,areaEnd:re,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:Xi(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function If(t){return new ca(t)}function ua(t){this._context=t}ua.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var i=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(i,r):this._context.moveTo(i,r);break;case 3:this._point=4;default:Xi(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function Df(t){return new ua(t)}function fa(t,e){this._basis=new gr(t),this._beta=e}fa.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,i=t.length-1;if(i>0)for(var r=t[0],n=e[0],o=t[i]-r,s=e[i]-n,a=-1,l;++a<=i;)l=a/i,this._basis.point(this._beta*t[a]+(1-this._beta)*(r+l*o),this._beta*e[a]+(1-this._beta)*(n+l*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const Nf=function t(e){function i(r){return e===1?new gr(r):new fa(r,e)}return i.beta=function(r){return t(+r)},i}(.85);function Ki(t,e,i){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-i),t._x2,t._y2)}function En(t,e){this._context=t,this._k=(1-e)/6}En.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Ki(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Ki(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Rf=function t(e){function i(r){return new En(r,e)}return i.tension=function(r){return t(+r)},i}(0);function On(t,e){this._context=t,this._k=(1-e)/6}On.prototype={areaStart:re,areaEnd:re,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Ki(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Pf=function t(e){function i(r){return new On(r,e)}return i.tension=function(r){return t(+r)},i}(0);function Mn(t,e){this._context=t,this._k=(1-e)/6}Mn.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Ki(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const qf=function t(e){function i(r){return new Mn(r,e)}return i.tension=function(r){return t(+r)},i}(0);function $n(t,e,i){var r=t._x1,n=t._y1,o=t._x2,s=t._y2;if(t._l01_a>Ro){var a=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*a-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,n=(n*a-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>Ro){var h=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,u=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*h+t._x1*t._l23_2a-e*t._l12_2a)/u,s=(s*h+t._y1*t._l23_2a-i*t._l12_2a)/u}t._context.bezierCurveTo(r,n,o,s,t._x2,t._y2)}function da(t,e){this._context=t,this._alpha=e}da.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:$n(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const zf=function t(e){function i(r){return e?new da(r,e):new En(r,0)}return i.alpha=function(r){return t(+r)},i}(.5);function pa(t,e){this._context=t,this._alpha=e}pa.prototype={areaStart:re,areaEnd:re,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:$n(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Wf=function t(e){function i(r){return e?new pa(r,e):new On(r,0)}return i.alpha=function(r){return t(+r)},i}(.5);function ga(t,e){this._context=t,this._alpha=e}ga.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:$n(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Hf=function t(e){function i(r){return e?new ga(r,e):new Mn(r,0)}return i.alpha=function(r){return t(+r)},i}(.5);function ma(t){this._context=t}ma.prototype={areaStart:re,areaEnd:re,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};function jf(t){return new ma(t)}function qo(t){return t<0?-1:1}function zo(t,e,i){var r=t._x1-t._x0,n=e-t._x1,o=(t._y1-t._y0)/(r||n<0&&-0),s=(i-t._y1)/(n||r<0&&-0),a=(o*n+s*r)/(r+n);return(qo(o)+qo(s))*Math.min(Math.abs(o),Math.abs(s),.5*Math.abs(a))||0}function Wo(t,e){var i=t._x1-t._x0;return i?(3*(t._y1-t._y0)/i-e)/2:e}function qr(t,e,i){var r=t._x0,n=t._y0,o=t._x1,s=t._y1,a=(o-r)/3;t._context.bezierCurveTo(r+a,n+a*e,o-a,s-a*i,o,s)}function Zi(t){this._context=t}Zi.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:qr(this,this._t0,Wo(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var i=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,qr(this,Wo(this,i=zo(this,t,e)),i);break;default:qr(this,this._t0,i=zo(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=i}}};function _a(t){this._context=new ya(t)}(_a.prototype=Object.create(Zi.prototype)).point=function(t,e){Zi.prototype.point.call(this,e,t)};function ya(t){this._context=t}ya.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,i,r,n,o){this._context.bezierCurveTo(e,t,r,i,o,n)}};function Uf(t){return new Zi(t)}function Yf(t){return new _a(t)}function Ca(t){this._context=t}Ca.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,i=t.length;if(i)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),i===2)this._context.lineTo(t[1],e[1]);else for(var r=Ho(t),n=Ho(e),o=0,s=1;s=0;--e)n[e]=(s[e]-n[e+1])/o[e];for(o[i-1]=(t[i]+n[i-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var i=this._x*(1-this._t)+t*this._t;this._context.lineTo(i,this._y),this._context.lineTo(i,e)}break}}this._x=t,this._y=e}};function Gf(t){return new mr(t,.5)}function Xf(t){return new mr(t,0)}function Kf(t){return new mr(t,1)}function Xe(t,e,i){this.k=t,this.x=e,this.y=i}Xe.prototype={constructor:Xe,scale:function(t){return t===1?this:new Xe(this.k*t,this.x,this.y)},translate:function(t,e){return t===0&e===0?this:new Xe(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};Xe.prototype;/*! @license DOMPurify 3.0.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.6/LICENSE */const{entries:xa,setPrototypeOf:jo,isFrozen:Zf,getPrototypeOf:Jf,getOwnPropertyDescriptor:ba}=Object;let{freeze:ut,seal:Bt,create:Ta}=Object,{apply:ln,construct:hn}=typeof Reflect<"u"&&Reflect;ut||(ut=function(e){return e});Bt||(Bt=function(e){return e});ln||(ln=function(e,i,r){return e.apply(i,r)});hn||(hn=function(e,i){return new e(...i)});const Si=bt(Array.prototype.forEach),Uo=bt(Array.prototype.pop),He=bt(Array.prototype.push),Ii=bt(String.prototype.toLowerCase),zr=bt(String.prototype.toString),Qf=bt(String.prototype.match),je=bt(String.prototype.replace),td=bt(String.prototype.indexOf),ed=bt(String.prototype.trim),_t=bt(RegExp.prototype.test),Ue=id(TypeError);function bt(t){return function(e){for(var i=arguments.length,r=new Array(i>1?i-1:0),n=1;n2&&arguments[2]!==void 0?arguments[2]:Ii;jo&&jo(t,null);let r=e.length;for(;r--;){let n=e[r];if(typeof n=="string"){const o=i(n);o!==n&&(Zf(e)||(e[r]=o),n=o)}t[n]=!0}return t}function Se(t){const e=Ta(null);for(const[i,r]of xa(t))ba(t,i)!==void 0&&(e[i]=r);return e}function wi(t,e){for(;t!==null;){const r=ba(t,e);if(r){if(r.get)return bt(r.get);if(typeof r.value=="function")return bt(r.value)}t=Jf(t)}function i(r){return console.warn("fallback value for",r),null}return i}const Yo=ut(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),Wr=ut(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),Hr=ut(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),rd=ut(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),jr=ut(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),nd=ut(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Vo=ut(["#text"]),Go=ut(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),Ur=ut(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Xo=ut(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),Bi=ut(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),od=Bt(/\{\{[\w\W]*|[\w\W]*\}\}/gm),sd=Bt(/<%[\w\W]*|[\w\W]*%>/gm),ad=Bt(/\${[\w\W]*}/gm),ld=Bt(/^data-[\-\w.\u00B7-\uFFFF]/),hd=Bt(/^aria-[\-\w]+$/),va=Bt(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),cd=Bt(/^(?:\w+script|data):/i),ud=Bt(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ka=Bt(/^html$/i);var Ko=Object.freeze({__proto__:null,MUSTACHE_EXPR:od,ERB_EXPR:sd,TMPLIT_EXPR:ad,DATA_ATTR:ld,ARIA_ATTR:hd,IS_ALLOWED_URI:va,IS_SCRIPT_OR_DATA:cd,ATTR_WHITESPACE:ud,DOCTYPE_NAME:ka});const fd=function(){return typeof window>"u"?null:window},dd=function(e,i){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let r=null;const n="data-tt-policy-suffix";i&&i.hasAttribute(n)&&(r=i.getAttribute(n));const o="dompurify"+(r?"#"+r:"");try{return e.createPolicy(o,{createHTML(s){return s},createScriptURL(s){return s}})}catch{return console.warn("TrustedTypes policy "+o+" could not be created."),null}};function Sa(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:fd();const e=A=>Sa(A);if(e.version="3.0.6",e.removed=[],!t||!t.document||t.document.nodeType!==9)return e.isSupported=!1,e;let{document:i}=t;const r=i,n=r.currentScript,{DocumentFragment:o,HTMLTemplateElement:s,Node:a,Element:l,NodeFilter:h,NamedNodeMap:u=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:f,DOMParser:c,trustedTypes:d}=t,_=l.prototype,k=wi(_,"cloneNode"),S=wi(_,"nextSibling"),P=wi(_,"childNodes"),T=wi(_,"parentNode");if(typeof s=="function"){const A=i.createElement("template");A.content&&A.content.ownerDocument&&(i=A.content.ownerDocument)}let q,H="";const{implementation:Y,createNodeIterator:X,createDocumentFragment:W,getElementsByTagName:Xt}=i,{importNode:Kt}=r;let j={};e.isSupported=typeof xa=="function"&&typeof T=="function"&&Y&&Y.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:z,ERB_EXPR:vt,TMPLIT_EXPR:Zt,DATA_ATTR:M,ARIA_ATTR:v,IS_SCRIPT_OR_DATA:y,ATTR_WHITESPACE:B}=Ko;let{IS_ALLOWED_URI:x}=Ko,b=null;const D=R({},[...Yo,...Wr,...Hr,...jr,...Vo]);let I=null;const G=R({},[...Go,...Ur,...Xo,...Bi]);let N=Object.seal(Ta(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),K=null,it=null,Nt=!0,kt=!0,Jt=!1,Lt=!0,Z=!1,rt=!1,Rt=!1,Qt=!1,xe=!1,_i=!1,yi=!1,ro=!0,no=!1;const ih="user-content-";let Er=!0,qe=!1,be={},Te=null;const oo=R({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let so=null;const ao=R({},["audio","video","img","source","image","track"]);let Or=null;const lo=R({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ci="http://www.w3.org/1998/Math/MathML",xi="http://www.w3.org/2000/svg",Pt="http://www.w3.org/1999/xhtml";let ve=Pt,Mr=!1,$r=null;const rh=R({},[Ci,xi,Pt],zr);let se=null;const nh=["application/xhtml+xml","text/html"],oh="text/html";let et=null,ke=null;const sh=i.createElement("form"),ho=function(p){return p instanceof RegExp||p instanceof Function},Ir=function(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(ke&&ke===p)){if((!p||typeof p!="object")&&(p={}),p=Se(p),se=nh.indexOf(p.PARSER_MEDIA_TYPE)===-1?se=oh:se=p.PARSER_MEDIA_TYPE,et=se==="application/xhtml+xml"?zr:Ii,b="ALLOWED_TAGS"in p?R({},p.ALLOWED_TAGS,et):D,I="ALLOWED_ATTR"in p?R({},p.ALLOWED_ATTR,et):G,$r="ALLOWED_NAMESPACES"in p?R({},p.ALLOWED_NAMESPACES,zr):rh,Or="ADD_URI_SAFE_ATTR"in p?R(Se(lo),p.ADD_URI_SAFE_ATTR,et):lo,so="ADD_DATA_URI_TAGS"in p?R(Se(ao),p.ADD_DATA_URI_TAGS,et):ao,Te="FORBID_CONTENTS"in p?R({},p.FORBID_CONTENTS,et):oo,K="FORBID_TAGS"in p?R({},p.FORBID_TAGS,et):{},it="FORBID_ATTR"in p?R({},p.FORBID_ATTR,et):{},be="USE_PROFILES"in p?p.USE_PROFILES:!1,Nt=p.ALLOW_ARIA_ATTR!==!1,kt=p.ALLOW_DATA_ATTR!==!1,Jt=p.ALLOW_UNKNOWN_PROTOCOLS||!1,Lt=p.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Z=p.SAFE_FOR_TEMPLATES||!1,rt=p.WHOLE_DOCUMENT||!1,xe=p.RETURN_DOM||!1,_i=p.RETURN_DOM_FRAGMENT||!1,yi=p.RETURN_TRUSTED_TYPE||!1,Qt=p.FORCE_BODY||!1,ro=p.SANITIZE_DOM!==!1,no=p.SANITIZE_NAMED_PROPS||!1,Er=p.KEEP_CONTENT!==!1,qe=p.IN_PLACE||!1,x=p.ALLOWED_URI_REGEXP||va,ve=p.NAMESPACE||Pt,N=p.CUSTOM_ELEMENT_HANDLING||{},p.CUSTOM_ELEMENT_HANDLING&&ho(p.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(N.tagNameCheck=p.CUSTOM_ELEMENT_HANDLING.tagNameCheck),p.CUSTOM_ELEMENT_HANDLING&&ho(p.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(N.attributeNameCheck=p.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),p.CUSTOM_ELEMENT_HANDLING&&typeof p.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(N.allowCustomizedBuiltInElements=p.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Z&&(kt=!1),_i&&(xe=!0),be&&(b=R({},[...Vo]),I=[],be.html===!0&&(R(b,Yo),R(I,Go)),be.svg===!0&&(R(b,Wr),R(I,Ur),R(I,Bi)),be.svgFilters===!0&&(R(b,Hr),R(I,Ur),R(I,Bi)),be.mathMl===!0&&(R(b,jr),R(I,Xo),R(I,Bi))),p.ADD_TAGS&&(b===D&&(b=Se(b)),R(b,p.ADD_TAGS,et)),p.ADD_ATTR&&(I===G&&(I=Se(I)),R(I,p.ADD_ATTR,et)),p.ADD_URI_SAFE_ATTR&&R(Or,p.ADD_URI_SAFE_ATTR,et),p.FORBID_CONTENTS&&(Te===oo&&(Te=Se(Te)),R(Te,p.FORBID_CONTENTS,et)),Er&&(b["#text"]=!0),rt&&R(b,["html","head","body"]),b.table&&(R(b,["tbody"]),delete K.tbody),p.TRUSTED_TYPES_POLICY){if(typeof p.TRUSTED_TYPES_POLICY.createHTML!="function")throw Ue('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof p.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Ue('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');q=p.TRUSTED_TYPES_POLICY,H=q.createHTML("")}else q===void 0&&(q=dd(d,n)),q!==null&&typeof H=="string"&&(H=q.createHTML(""));ut&&ut(p),ke=p}},co=R({},["mi","mo","mn","ms","mtext"]),uo=R({},["foreignobject","desc","title","annotation-xml"]),ah=R({},["title","style","font","a","script"]),bi=R({},Wr);R(bi,Hr),R(bi,rd);const Dr=R({},jr);R(Dr,nd);const lh=function(p){let m=T(p);(!m||!m.tagName)&&(m={namespaceURI:ve,tagName:"template"});const w=Ii(p.tagName),U=Ii(m.tagName);return $r[p.namespaceURI]?p.namespaceURI===xi?m.namespaceURI===Pt?w==="svg":m.namespaceURI===Ci?w==="svg"&&(U==="annotation-xml"||co[U]):!!bi[w]:p.namespaceURI===Ci?m.namespaceURI===Pt?w==="math":m.namespaceURI===xi?w==="math"&&uo[U]:!!Dr[w]:p.namespaceURI===Pt?m.namespaceURI===xi&&!uo[U]||m.namespaceURI===Ci&&!co[U]?!1:!Dr[w]&&(ah[w]||!bi[w]):!!(se==="application/xhtml+xml"&&$r[p.namespaceURI]):!1},ae=function(p){He(e.removed,{element:p});try{p.parentNode.removeChild(p)}catch{p.remove()}},Nr=function(p,m){try{He(e.removed,{attribute:m.getAttributeNode(p),from:m})}catch{He(e.removed,{attribute:null,from:m})}if(m.removeAttribute(p),p==="is"&&!I[p])if(xe||_i)try{ae(m)}catch{}else try{m.setAttribute(p,"")}catch{}},fo=function(p){let m=null,w=null;if(Qt)p=""+p;else{const ot=Qf(p,/^[\r\n\t ]+/);w=ot&&ot[0]}se==="application/xhtml+xml"&&ve===Pt&&(p=''+p+"");const U=q?q.createHTML(p):p;if(ve===Pt)try{m=new c().parseFromString(U,se)}catch{}if(!m||!m.documentElement){m=Y.createDocument(ve,"template",null);try{m.documentElement.innerHTML=Mr?H:U}catch{}}const nt=m.body||m.documentElement;return p&&w&&nt.insertBefore(i.createTextNode(w),nt.childNodes[0]||null),ve===Pt?Xt.call(m,rt?"html":"body")[0]:rt?m.documentElement:nt},po=function(p){return X.call(p.ownerDocument||p,p,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT,null)},hh=function(p){return p instanceof f&&(typeof p.nodeName!="string"||typeof p.textContent!="string"||typeof p.removeChild!="function"||!(p.attributes instanceof u)||typeof p.removeAttribute!="function"||typeof p.setAttribute!="function"||typeof p.namespaceURI!="string"||typeof p.insertBefore!="function"||typeof p.hasChildNodes!="function")},go=function(p){return typeof a=="function"&&p instanceof a},qt=function(p,m,w){j[p]&&Si(j[p],U=>{U.call(e,m,w,ke)})},mo=function(p){let m=null;if(qt("beforeSanitizeElements",p,null),hh(p))return ae(p),!0;const w=et(p.nodeName);if(qt("uponSanitizeElement",p,{tagName:w,allowedTags:b}),p.hasChildNodes()&&!go(p.firstElementChild)&&_t(/<[/\w]/g,p.innerHTML)&&_t(/<[/\w]/g,p.textContent))return ae(p),!0;if(!b[w]||K[w]){if(!K[w]&&yo(w)&&(N.tagNameCheck instanceof RegExp&&_t(N.tagNameCheck,w)||N.tagNameCheck instanceof Function&&N.tagNameCheck(w)))return!1;if(Er&&!Te[w]){const U=T(p)||p.parentNode,nt=P(p)||p.childNodes;if(nt&&U){const ot=nt.length;for(let ft=ot-1;ft>=0;--ft)U.insertBefore(k(nt[ft],!0),S(p))}}return ae(p),!0}return p instanceof l&&!lh(p)||(w==="noscript"||w==="noembed"||w==="noframes")&&_t(/<\/no(script|embed|frames)/i,p.innerHTML)?(ae(p),!0):(Z&&p.nodeType===3&&(m=p.textContent,Si([z,vt,Zt],U=>{m=je(m,U," ")}),p.textContent!==m&&(He(e.removed,{element:p.cloneNode()}),p.textContent=m)),qt("afterSanitizeElements",p,null),!1)},_o=function(p,m,w){if(ro&&(m==="id"||m==="name")&&(w in i||w in sh))return!1;if(!(kt&&!it[m]&&_t(M,m))){if(!(Nt&&_t(v,m))){if(!I[m]||it[m]){if(!(yo(p)&&(N.tagNameCheck instanceof RegExp&&_t(N.tagNameCheck,p)||N.tagNameCheck instanceof Function&&N.tagNameCheck(p))&&(N.attributeNameCheck instanceof RegExp&&_t(N.attributeNameCheck,m)||N.attributeNameCheck instanceof Function&&N.attributeNameCheck(m))||m==="is"&&N.allowCustomizedBuiltInElements&&(N.tagNameCheck instanceof RegExp&&_t(N.tagNameCheck,w)||N.tagNameCheck instanceof Function&&N.tagNameCheck(w))))return!1}else if(!Or[m]){if(!_t(x,je(w,B,""))){if(!((m==="src"||m==="xlink:href"||m==="href")&&p!=="script"&&td(w,"data:")===0&&so[p])){if(!(Jt&&!_t(y,je(w,B,"")))){if(w)return!1}}}}}}return!0},yo=function(p){return p.indexOf("-")>0},Co=function(p){qt("beforeSanitizeAttributes",p,null);const{attributes:m}=p;if(!m)return;const w={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:I};let U=m.length;for(;U--;){const nt=m[U],{name:ot,namespaceURI:ft,value:le}=nt,ze=et(ot);let dt=ot==="value"?le:ed(le);if(w.attrName=ze,w.attrValue=dt,w.keepAttr=!0,w.forceKeepAttr=void 0,qt("uponSanitizeAttribute",p,w),dt=w.attrValue,w.forceKeepAttr||(Nr(ot,p),!w.keepAttr))continue;if(!Lt&&_t(/\/>/i,dt)){Nr(ot,p);continue}Z&&Si([z,vt,Zt],bo=>{dt=je(dt,bo," ")});const xo=et(p.nodeName);if(_o(xo,ze,dt)){if(no&&(ze==="id"||ze==="name")&&(Nr(ot,p),dt=ih+dt),q&&typeof d=="object"&&typeof d.getAttributeType=="function"&&!ft)switch(d.getAttributeType(xo,ze)){case"TrustedHTML":{dt=q.createHTML(dt);break}case"TrustedScriptURL":{dt=q.createScriptURL(dt);break}}try{ft?p.setAttributeNS(ft,ot,dt):p.setAttribute(ot,dt),Uo(e.removed)}catch{}}}qt("afterSanitizeAttributes",p,null)},ch=function A(p){let m=null;const w=po(p);for(qt("beforeSanitizeShadowDOM",p,null);m=w.nextNode();)qt("uponSanitizeShadowNode",m,null),!mo(m)&&(m.content instanceof o&&A(m.content),Co(m));qt("afterSanitizeShadowDOM",p,null)};return e.sanitize=function(A){let p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},m=null,w=null,U=null,nt=null;if(Mr=!A,Mr&&(A=""),typeof A!="string"&&!go(A))if(typeof A.toString=="function"){if(A=A.toString(),typeof A!="string")throw Ue("dirty is not a string, aborting")}else throw Ue("toString is not a function");if(!e.isSupported)return A;if(Rt||Ir(p),e.removed=[],typeof A=="string"&&(qe=!1),qe){if(A.nodeName){const le=et(A.nodeName);if(!b[le]||K[le])throw Ue("root node is forbidden and cannot be sanitized in-place")}}else if(A instanceof a)m=fo(""),w=m.ownerDocument.importNode(A,!0),w.nodeType===1&&w.nodeName==="BODY"||w.nodeName==="HTML"?m=w:m.appendChild(w);else{if(!xe&&!Z&&!rt&&A.indexOf("<")===-1)return q&&yi?q.createHTML(A):A;if(m=fo(A),!m)return xe?null:yi?H:""}m&&Qt&&ae(m.firstChild);const ot=po(qe?A:m);for(;U=ot.nextNode();)mo(U)||(U.content instanceof o&&ch(U.content),Co(U));if(qe)return A;if(xe){if(_i)for(nt=W.call(m.ownerDocument);m.firstChild;)nt.appendChild(m.firstChild);else nt=m;return(I.shadowroot||I.shadowrootmode)&&(nt=Kt.call(r,nt,!0)),nt}let ft=rt?m.outerHTML:m.innerHTML;return rt&&b["!doctype"]&&m.ownerDocument&&m.ownerDocument.doctype&&m.ownerDocument.doctype.name&&_t(ka,m.ownerDocument.doctype.name)&&(ft=" `+ft),Z&&Si([z,vt,Zt],le=>{ft=je(ft,le," ")}),q&&yi?q.createHTML(ft):ft},e.setConfig=function(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Ir(A),Rt=!0},e.clearConfig=function(){ke=null,Rt=!1},e.isValidAttribute=function(A,p,m){ke||Ir({});const w=et(A),U=et(p);return _o(w,U,m)},e.addHook=function(A,p){typeof p=="function"&&(j[A]=j[A]||[],He(j[A],p))},e.removeHook=function(A){if(j[A])return Uo(j[A])},e.removeHooks=function(A){j[A]&&(j[A]=[])},e.removeAllHooks=function(){j={}},e}var Ji=Sa();const Di={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:t=>t>=255?255:t<0?0:t,g:t=>t>=255?255:t<0?0:t,b:t=>t>=255?255:t<0?0:t,h:t=>t%360,s:t=>t>=100?100:t<0?0:t,l:t=>t>=100?100:t<0?0:t,a:t=>t>=1?1:t<0?0:t},toLinear:t=>{const e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+(e-t)*6*i:i<1/2?e:i<2/3?t+(e-t)*(2/3-i)*6:t),hsl2rgb:({h:t,s:e,l:i},r)=>{if(!e)return i*2.55;t/=360,e/=100,i/=100;const n=i<.5?i*(1+e):i+e-i*e,o=2*i-n;switch(r){case"r":return Di.hue2rgb(o,n,t+1/3)*255;case"g":return Di.hue2rgb(o,n,t)*255;case"b":return Di.hue2rgb(o,n,t-1/3)*255}},rgb2hsl:({r:t,g:e,b:i},r)=>{t/=255,e/=255,i/=255;const n=Math.max(t,e,i),o=Math.min(t,e,i),s=(n+o)/2;if(r==="l")return s*100;if(n===o)return 0;const a=n-o,l=s>.5?a/(2-n-o):a/(n+o);if(r==="s")return l*100;switch(n){case t:return((e-i)/a+(ee>i?Math.min(e,Math.max(i,t)):Math.min(i,Math.max(e,t)),round:t=>Math.round(t*1e10)/1e10},md=gd,_d={dec2hex:t=>{const e=Math.round(t).toString(16);return e.length>1?e:`0${e}`}},yd=_d,Cd={channel:pd,lang:md,unit:yd},$=Cd,te={};for(let t=0;t<=255;t++)te[t]=$.unit.dec2hex(t);const st={ALL:0,RGB:1,HSL:2};class xd{constructor(){this.type=st.ALL}get(){return this.type}set(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e}reset(){this.type=st.ALL}is(e){return this.type===e}}const bd=xd;class Td{constructor(e,i){this.color=i,this.changed=!1,this.data=e,this.type=new bd}set(e,i){return this.color=i,this.changed=!1,this.data=e,this.type.type=st.ALL,this}_ensureHSL(){const e=this.data,{h:i,s:r,l:n}=e;i===void 0&&(e.h=$.channel.rgb2hsl(e,"h")),r===void 0&&(e.s=$.channel.rgb2hsl(e,"s")),n===void 0&&(e.l=$.channel.rgb2hsl(e,"l"))}_ensureRGB(){const e=this.data,{r:i,g:r,b:n}=e;i===void 0&&(e.r=$.channel.hsl2rgb(e,"r")),r===void 0&&(e.g=$.channel.hsl2rgb(e,"g")),n===void 0&&(e.b=$.channel.hsl2rgb(e,"b"))}get r(){const e=this.data,i=e.r;return!this.type.is(st.HSL)&&i!==void 0?i:(this._ensureHSL(),$.channel.hsl2rgb(e,"r"))}get g(){const e=this.data,i=e.g;return!this.type.is(st.HSL)&&i!==void 0?i:(this._ensureHSL(),$.channel.hsl2rgb(e,"g"))}get b(){const e=this.data,i=e.b;return!this.type.is(st.HSL)&&i!==void 0?i:(this._ensureHSL(),$.channel.hsl2rgb(e,"b"))}get h(){const e=this.data,i=e.h;return!this.type.is(st.RGB)&&i!==void 0?i:(this._ensureRGB(),$.channel.rgb2hsl(e,"h"))}get s(){const e=this.data,i=e.s;return!this.type.is(st.RGB)&&i!==void 0?i:(this._ensureRGB(),$.channel.rgb2hsl(e,"s"))}get l(){const e=this.data,i=e.l;return!this.type.is(st.RGB)&&i!==void 0?i:(this._ensureRGB(),$.channel.rgb2hsl(e,"l"))}get a(){return this.data.a}set r(e){this.type.set(st.RGB),this.changed=!0,this.data.r=e}set g(e){this.type.set(st.RGB),this.changed=!0,this.data.g=e}set b(e){this.type.set(st.RGB),this.changed=!0,this.data.b=e}set h(e){this.type.set(st.HSL),this.changed=!0,this.data.h=e}set s(e){this.type.set(st.HSL),this.changed=!0,this.data.s=e}set l(e){this.type.set(st.HSL),this.changed=!0,this.data.l=e}set a(e){this.changed=!0,this.data.a=e}}const vd=Td,kd=new vd({r:0,g:0,b:0,a:0},"transparent"),_r=kd,wa={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(t.charCodeAt(0)!==35)return;const e=t.match(wa.re);if(!e)return;const i=e[1],r=parseInt(i,16),n=i.length,o=n%4===0,s=n>4,a=s?1:17,l=s?8:4,h=o?0:-1,u=s?255:15;return _r.set({r:(r>>l*(h+3)&u)*a,g:(r>>l*(h+2)&u)*a,b:(r>>l*(h+1)&u)*a,a:o?(r&u)*a/255:1},t)},stringify:t=>{const{r:e,g:i,b:r,a:n}=t;return n<1?`#${te[Math.round(e)]}${te[Math.round(i)]}${te[Math.round(r)]}${te[Math.round(n*255)]}`:`#${te[Math.round(e)]}${te[Math.round(i)]}${te[Math.round(r)]}`}},Ke=wa,Ni={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:t=>{const e=t.match(Ni.hueRe);if(e){const[,i,r]=e;switch(r){case"grad":return $.channel.clamp.h(parseFloat(i)*.9);case"rad":return $.channel.clamp.h(parseFloat(i)*180/Math.PI);case"turn":return $.channel.clamp.h(parseFloat(i)*360)}}return $.channel.clamp.h(parseFloat(t))},parse:t=>{const e=t.charCodeAt(0);if(e!==104&&e!==72)return;const i=t.match(Ni.re);if(!i)return;const[,r,n,o,s,a]=i;return _r.set({h:Ni._hue2deg(r),s:$.channel.clamp.s(parseFloat(n)),l:$.channel.clamp.l(parseFloat(o)),a:s?$.channel.clamp.a(a?parseFloat(s)/100:parseFloat(s)):1},t)},stringify:t=>{const{h:e,s:i,l:r,a:n}=t;return n<1?`hsla(${$.lang.round(e)}, ${$.lang.round(i)}%, ${$.lang.round(r)}%, ${n})`:`hsl(${$.lang.round(e)}, ${$.lang.round(i)}%, ${$.lang.round(r)}%)`}},Ai=Ni,Ri={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:t=>{t=t.toLowerCase();const e=Ri.colors[t];if(e)return Ke.parse(e)},stringify:t=>{const e=Ke.stringify(t);for(const i in Ri.colors)if(Ri.colors[i]===e)return i}},Zo=Ri,Ba={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:t=>{const e=t.charCodeAt(0);if(e!==114&&e!==82)return;const i=t.match(Ba.re);if(!i)return;const[,r,n,o,s,a,l,h,u]=i;return _r.set({r:$.channel.clamp.r(n?parseFloat(r)*2.55:parseFloat(r)),g:$.channel.clamp.g(s?parseFloat(o)*2.55:parseFloat(o)),b:$.channel.clamp.b(l?parseFloat(a)*2.55:parseFloat(a)),a:h?$.channel.clamp.a(u?parseFloat(h)/100:parseFloat(h)):1},t)},stringify:t=>{const{r:e,g:i,b:r,a:n}=t;return n<1?`rgba(${$.lang.round(e)}, ${$.lang.round(i)}, ${$.lang.round(r)}, ${$.lang.round(n)})`:`rgb(${$.lang.round(e)}, ${$.lang.round(i)}, ${$.lang.round(r)})`}},Fi=Ba,Sd={format:{keyword:Zo,hex:Ke,rgb:Fi,rgba:Fi,hsl:Ai,hsla:Ai},parse:t=>{if(typeof t!="string")return t;const e=Ke.parse(t)||Fi.parse(t)||Ai.parse(t)||Zo.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},stringify:t=>!t.changed&&t.color?t.color:t.type.is(st.HSL)||t.data.r===void 0?Ai.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?Fi.stringify(t):Ke.stringify(t)},Mt=Sd,wd=(t,e)=>{const i=Mt.parse(t);for(const r in e)i[r]=$.channel.clamp[r](e[r]);return Mt.stringify(i)},Aa=wd,Bd=(t,e,i=0,r=1)=>{if(typeof t!="number")return Aa(t,{a:e});const n=_r.set({r:$.channel.clamp.r(t),g:$.channel.clamp.g(e),b:$.channel.clamp.b(i),a:$.channel.clamp.a(r)});return Mt.stringify(n)},Ze=Bd,Ad=t=>{const{r:e,g:i,b:r}=Mt.parse(t),n=.2126*$.channel.toLinear(e)+.7152*$.channel.toLinear(i)+.0722*$.channel.toLinear(r);return $.lang.round(n)},Fd=Ad,Ld=t=>Fd(t)>=.5,Ed=Ld,Od=t=>!Ed(t),pi=Od,Md=(t,e,i)=>{const r=Mt.parse(t),n=r[e],o=$.channel.clamp[e](n+i);return n!==o&&(r[e]=o),Mt.stringify(r)},Fa=Md,$d=(t,e)=>Fa(t,"l",e),F=$d,Id=(t,e)=>Fa(t,"l",-e),O=Id,Dd=(t,e)=>{const i=Mt.parse(t),r={};for(const n in e)e[n]&&(r[n]=i[n]+e[n]);return Aa(t,r)},g=Dd,Nd=(t,e,i=50)=>{const{r,g:n,b:o,a:s}=Mt.parse(t),{r:a,g:l,b:h,a:u}=Mt.parse(e),f=i/100,c=f*2-1,d=s-u,k=((c*d===-1?c:(c+d)/(1+c*d))+1)/2,S=1-k,P=r*k+a*S,T=n*k+l*S,q=o*k+h*S,H=s*f+u*(1-f);return Ze(P,T,q,H)},Rd=Nd,Pd=(t,e=100)=>{const i=Mt.parse(t);return i.r=255-i.r,i.g=255-i.g,i.b=255-i.b,Rd(i,t,e)},C=Pd;var qd=typeof global=="object"&&global&&global.Object===Object&&global;const La=qd;var zd=typeof self=="object"&&self&&self.Object===Object&&self,Wd=La||zd||Function("return this")();const Dt=Wd;var Hd=Dt.Symbol;const Qi=Hd;var Ea=Object.prototype,jd=Ea.hasOwnProperty,Ud=Ea.toString,Ye=Qi?Qi.toStringTag:void 0;function Yd(t){var e=jd.call(t,Ye),i=t[Ye];try{t[Ye]=void 0;var r=!0}catch{}var n=Ud.call(t);return r&&(e?t[Ye]=i:delete t[Ye]),n}var Vd=Object.prototype,Gd=Vd.toString;function Xd(t){return Gd.call(t)}var Kd="[object Null]",Zd="[object Undefined]",Jo=Qi?Qi.toStringTag:void 0;function Ne(t){return t==null?t===void 0?Zd:Kd:Jo&&Jo in Object(t)?Yd(t):Xd(t)}function _e(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var Jd="[object AsyncFunction]",Qd="[object Function]",tp="[object GeneratorFunction]",ep="[object Proxy]";function In(t){if(!_e(t))return!1;var e=Ne(t);return e==Qd||e==tp||e==Jd||e==ep}var ip=Dt["__core-js_shared__"];const Yr=ip;var Qo=function(){var t=/[^.]+$/.exec(Yr&&Yr.keys&&Yr.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function rp(t){return!!Qo&&Qo in t}var np=Function.prototype,op=np.toString;function ye(t){if(t!=null){try{return op.call(t)}catch{}try{return t+""}catch{}}return""}var sp=/[\\^$.*+?()[\]{}|]/g,ap=/^\[object .+?Constructor\]$/,lp=Function.prototype,hp=Object.prototype,cp=lp.toString,up=hp.hasOwnProperty,fp=RegExp("^"+cp.call(up).replace(sp,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function dp(t){if(!_e(t)||rp(t))return!1;var e=In(t)?fp:ap;return e.test(ye(t))}function pp(t,e){return t==null?void 0:t[e]}function Ce(t,e){var i=pp(t,e);return dp(i)?i:void 0}var gp=Ce(Object,"create");const si=gp;function mp(){this.__data__=si?si(null):{},this.size=0}function _p(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var yp="__lodash_hash_undefined__",Cp=Object.prototype,xp=Cp.hasOwnProperty;function bp(t){var e=this.__data__;if(si){var i=e[t];return i===yp?void 0:i}return xp.call(e,t)?e[t]:void 0}var Tp=Object.prototype,vp=Tp.hasOwnProperty;function kp(t){var e=this.__data__;return si?e[t]!==void 0:vp.call(e,t)}var Sp="__lodash_hash_undefined__";function wp(t,e){var i=this.__data__;return this.size+=this.has(t)?0:1,i[t]=si&&e===void 0?Sp:e,this}function ge(t){var e=-1,i=t==null?0:t.length;for(this.clear();++e-1}function Mp(t,e){var i=this.__data__,r=Cr(i,t);return r<0?(++this.size,i.push([t,e])):i[r][1]=e,this}function Gt(t){var e=-1,i=t==null?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=pg}function Tr(t){return t!=null&&Da(t.length)&&!In(t)}function gg(t){return mi(t)&&Tr(t)}function mg(){return!1}var Na=typeof exports=="object"&&exports&&!exports.nodeType&&exports,ss=Na&&typeof module=="object"&&module&&!module.nodeType&&module,_g=ss&&ss.exports===Na,as=_g?Dt.Buffer:void 0,yg=as?as.isBuffer:void 0,Cg=yg||mg;const Nn=Cg;var xg="[object Object]",bg=Function.prototype,Tg=Object.prototype,Ra=bg.toString,vg=Tg.hasOwnProperty,kg=Ra.call(Object);function Sg(t){if(!mi(t)||Ne(t)!=xg)return!1;var e=$a(t);if(e===null)return!0;var i=vg.call(e,"constructor")&&e.constructor;return typeof i=="function"&&i instanceof i&&Ra.call(i)==kg}var wg="[object Arguments]",Bg="[object Array]",Ag="[object Boolean]",Fg="[object Date]",Lg="[object Error]",Eg="[object Function]",Og="[object Map]",Mg="[object Number]",$g="[object Object]",Ig="[object RegExp]",Dg="[object Set]",Ng="[object String]",Rg="[object WeakMap]",Pg="[object ArrayBuffer]",qg="[object DataView]",zg="[object Float32Array]",Wg="[object Float64Array]",Hg="[object Int8Array]",jg="[object Int16Array]",Ug="[object Int32Array]",Yg="[object Uint8Array]",Vg="[object Uint8ClampedArray]",Gg="[object Uint16Array]",Xg="[object Uint32Array]",V={};V[zg]=V[Wg]=V[Hg]=V[jg]=V[Ug]=V[Yg]=V[Vg]=V[Gg]=V[Xg]=!0;V[wg]=V[Bg]=V[Pg]=V[Ag]=V[qg]=V[Fg]=V[Lg]=V[Eg]=V[Og]=V[Mg]=V[$g]=V[Ig]=V[Dg]=V[Ng]=V[Rg]=!1;function Kg(t){return mi(t)&&Da(t.length)&&!!V[Ne(t)]}function Zg(t){return function(e){return t(e)}}var Pa=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Je=Pa&&typeof module=="object"&&module&&!module.nodeType&&module,Jg=Je&&Je.exports===Pa,Vr=Jg&&La.process,Qg=function(){try{var t=Je&&Je.require&&Je.require("util").types;return t||Vr&&Vr.binding&&Vr.binding("util")}catch{}}();const ls=Qg;var hs=ls&&ls.isTypedArray,tm=hs?Zg(hs):Kg;const Rn=tm;function un(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}var em=Object.prototype,im=em.hasOwnProperty;function rm(t,e,i){var r=t[e];(!(im.call(t,e)&&yr(r,i))||i===void 0&&!(e in t))&&Dn(t,e,i)}function nm(t,e,i,r){var n=!i;i||(i={});for(var o=-1,s=e.length;++o-1&&t%1==0&&t0){if(++e>=Tm)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var wm=Sm(bm);const Bm=wm;function Am(t,e){return Bm(ym(t,e,Ha),t+"")}function Fm(t,e,i){if(!_e(i))return!1;var r=typeof e;return(r=="number"?Tr(i)&&qa(e,i.length):r=="string"&&e in i)?yr(i[e],t):!1}function Lm(t){return Am(function(e,i){var r=-1,n=i.length,o=n>1?i[n-1]:void 0,s=n>2?i[2]:void 0;for(o=t.length>3&&typeof o=="function"?(n--,o):void 0,s&&Fm(i[0],i[1],s)&&(o=n<3?void 0:o,n=1),e=Object(e);++r0?li(Pe,--Tt):0,Oe--,Q===10&&(Oe=1,vr--),Q}function wt(){return Q=Tt2||fn(Q)>3?"":" "}function jm(t,e){for(;--e&&wt()&&!(Q<48||Q>102||Q>57&&Q<65||Q>70&&Q<97););return kr(t,qi()+(e<6&&fe()==32&&wt()==32))}function dn(t){for(;wt();)switch(Q){case t:return Tt;case 34:case 39:t!==34&&t!==39&&dn(Q);break;case 40:t===41&&dn(t);break;case 92:wt();break}return Tt}function Um(t,e){for(;wt()&&t+Q!==57;)if(t+Q===84&&fe()===47)break;return"/*"+kr(e,Tt-1)+"*"+Pn(t===47?t:wt())}function Ym(t){for(;!fn(fe());)wt();return kr(t,Tt)}function Vm(t){return Wm(zi("",null,null,null,[""],t=zm(t),0,[0],t))}function zi(t,e,i,r,n,o,s,a,l){for(var h=0,u=0,f=s,c=0,d=0,_=0,k=1,S=1,P=1,T=0,q="",H=n,Y=o,X=r,W=q;S;)switch(_=T,T=wt()){case 40:if(_!=108&&li(W,f-1)==58){Nm(W+=Pi(Gr(T),"&","&\f"),"&\f")!=-1&&(P=-1);break}case 34:case 39:case 91:W+=Gr(T);break;case 9:case 10:case 13:case 32:W+=Hm(_);break;case 92:W+=jm(qi()-1,7);continue;case 47:switch(fe()){case 42:case 47:Li(Gm(Um(wt(),qi()),e,i,l),l);break;default:W+="/"}break;case 123*k:a[h++]=jt(W)*P;case 125*k:case 59:case 0:switch(T){case 0:case 125:S=0;case 59+u:P==-1&&(W=Pi(W,/\f/g,"")),d>0&&jt(W)-f&&Li(d>32?fs(W+";",r,i,f-1,l):fs(Pi(W," ","")+";",r,i,f-2,l),l);break;case 59:W+=";";default:if(Li(X=us(W,e,i,h,u,n,a,q,H=[],Y=[],f,o),o),T===123)if(u===0)zi(W,e,X,X,H,o,f,a,Y);else switch(c===99&&li(W,3)===110?100:c){case 100:case 108:case 109:case 115:zi(t,X,X,r&&Li(us(t,X,X,0,0,n,a,q,n,H=[],f,Y),Y),n,Y,f,a,r?H:Y);break;default:zi(W,X,X,X,[""],Y,0,a,Y)}}h=u=d=0,k=P=1,q=W="",f=s;break;case 58:f=1+jt(W),d=_;default:if(k<1){if(T==123)--k;else if(T==125&&k++==0&&qm()==125)continue}switch(W+=Pn(T),T*k){case 38:P=u>0?1:(W+="\f",-1);break;case 44:a[h++]=(jt(W)-1)*P,P=1;break;case 64:fe()===45&&(W+=Gr(wt())),c=fe(),u=f=jt(q=W+=Ym(qi())),T++;break;case 45:_===45&&jt(W)==2&&(k=0)}}return o}function us(t,e,i,r,n,o,s,a,l,h,u,f){for(var c=n-1,d=n===0?o:[""],_=Rm(d),k=0,S=0,P=0;k0?d[T]+" "+q:Pi(q,/&\f/g,d[T])))&&(l[P++]=H);return qn(t,e,i,n===0?Ua:a,l,h,u,f)}function Gm(t,e,i,r){return qn(t,e,i,ja,Pn(Pm()),hi(t,2,-2),0,r)}function fs(t,e,i,r,n){return qn(t,e,i,Ya,hi(t,0,r),hi(t,r+1,-1),r,n)}function pn(t,e){for(var i="",r=0;r{},debug:(...t)=>{},info:(...t)=>{},warn:(...t)=>{},error:(...t)=>{},fatal:(...t)=>{}},zn=function(t="fatal"){let e=Wt.fatal;typeof t=="string"?(t=t.toLowerCase(),t in Wt&&(e=Wt[t])):typeof t=="number"&&(e=t),E.trace=()=>{},E.debug=()=>{},E.info=()=>{},E.warn=()=>{},E.error=()=>{},E.fatal=()=>{},e<=Wt.fatal&&(E.fatal=console.error?console.error.bind(console,Ct("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",Ct("FATAL"))),e<=Wt.error&&(E.error=console.error?console.error.bind(console,Ct("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",Ct("ERROR"))),e<=Wt.warn&&(E.warn=console.warn?console.warn.bind(console,Ct("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",Ct("WARN"))),e<=Wt.info&&(E.info=console.info?console.info.bind(console,Ct("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",Ct("INFO"))),e<=Wt.debug&&(E.debug=console.debug?console.debug.bind(console,Ct("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Ct("DEBUG"))),e<=Wt.trace&&(E.trace=console.debug?console.debug.bind(console,Ct("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Ct("TRACE")))},Ct=t=>`%c${gh().format("ss.SSS")} : ${t} : `,Sr=//gi,m0=t=>t?Ka(t).replace(/\\n/g,"#br#").split("#br#"):[""],Xa=t=>Ji.sanitize(t),ys=(t,e)=>{var i;if(((i=e.flowchart)==null?void 0:i.htmlLabels)!==!1){const r=e.securityLevel;r==="antiscript"||r==="strict"?t=Xa(t):r!=="loose"&&(t=Ka(t),t=t.replace(//g,">"),t=t.replace(/=/g,"="),t=x0(t))}return t},ci=(t,e)=>t&&(e.dompurifyConfig?t=Ji.sanitize(ys(t,e),e.dompurifyConfig).toString():t=Ji.sanitize(ys(t,e),{FORBID_TAGS:["style"]}).toString(),t),_0=(t,e)=>typeof t=="string"?ci(t,e):t.flat().map(i=>ci(i,e)),y0=t=>Sr.test(t),C0=t=>t.split(Sr),x0=t=>t.replace(/#br#/g,"
            "),Ka=t=>t.replace(Sr,"#br#"),b0=t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},Za=t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),T0=function(...t){const e=t.filter(i=>!isNaN(i));return Math.max(...e)},v0=function(...t){const e=t.filter(i=>!isNaN(i));return Math.min(...e)},a1=function(t){const e=t.split(/(,)/),i=[];for(let r=0;r0&&r+1Math.max(0,t.split(e).length-1),k0=(t,e)=>{const i=Cn(t,"~"),r=Cn(e,"~");return i===1&&r===1},S0=t=>{const e=Cn(t,"~");let i=!1;if(e<=1)return t;e%2!==0&&t.startsWith("~")&&(t=t.substring(1),i=!0);const r=[...t];let n=r.indexOf("~"),o=r.lastIndexOf("~");for(;n!==-1&&o!==-1&&n!==o;)r[n]="<",r[o]=">",n=r.indexOf("~"),o=r.lastIndexOf("~");return i&&r.unshift("~"),r.join("")},Wn={getRows:m0,sanitizeText:ci,sanitizeTextOrArray:_0,hasBreaks:y0,splitBreaks:C0,lineBreakRegex:Sr,removeScript:Xa,getUrl:b0,evaluate:Za,getMax:T0,getMin:v0},ct=(t,e)=>e?g(t,{s:-40,l:10}):g(t,{s:-40,l:-10}),wr="#ffffff",Br="#f2f2f2";let w0=class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){var e,i,r,n,o,s,a,l,h,u,f;if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||g(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||g(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||ct(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||ct(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||ct(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||ct(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||C(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||C(this.tertiaryColor),this.lineColor=this.lineColor||C(this.background),this.arrowheadColor=this.arrowheadColor||C(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?O(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||O(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||C(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||F(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||g(this.primaryColor,{h:30}),this.cScale4=this.cScale4||g(this.primaryColor,{h:60}),this.cScale5=this.cScale5||g(this.primaryColor,{h:90}),this.cScale6=this.cScale6||g(this.primaryColor,{h:120}),this.cScale7=this.cScale7||g(this.primaryColor,{h:150}),this.cScale8=this.cScale8||g(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||g(this.primaryColor,{h:270}),this.cScale10=this.cScale10||g(this.primaryColor,{h:300}),this.cScale11=this.cScale11||g(this.primaryColor,{h:330}),this.darkMode)for(let d=0;d{this[r]=e[r]}),this.updateColors(),i.forEach(r=>{this[r]=e[r]})}};const B0=t=>{const e=new w0;return e.calculate(t),e};let A0=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=F(this.primaryColor,16),this.tertiaryColor=g(this.primaryColor,{h:-160}),this.primaryBorderColor=C(this.background),this.secondaryBorderColor=ct(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ct(this.tertiaryColor,this.darkMode),this.primaryTextColor=C(this.primaryColor),this.secondaryTextColor=C(this.secondaryColor),this.tertiaryTextColor=C(this.tertiaryColor),this.lineColor=C(this.background),this.textColor=C(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=F(C("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=Ze(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=O("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=O(this.sectionBkgColor,10),this.taskBorderColor=Ze(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=Ze(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){var e,i,r,n,o,s,a,l,h,u,f;this.secondBkg=F(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=F(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=F(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=g(this.primaryColor,{h:64}),this.fillType3=g(this.secondaryColor,{h:64}),this.fillType4=g(this.primaryColor,{h:-64}),this.fillType5=g(this.secondaryColor,{h:-64}),this.fillType6=g(this.primaryColor,{h:128}),this.fillType7=g(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||g(this.primaryColor,{h:30}),this.cScale4=this.cScale4||g(this.primaryColor,{h:60}),this.cScale5=this.cScale5||g(this.primaryColor,{h:90}),this.cScale6=this.cScale6||g(this.primaryColor,{h:120}),this.cScale7=this.cScale7||g(this.primaryColor,{h:150}),this.cScale8=this.cScale8||g(this.primaryColor,{h:210}),this.cScale9=this.cScale9||g(this.primaryColor,{h:270}),this.cScale10=this.cScale10||g(this.primaryColor,{h:300}),this.cScale11=this.cScale11||g(this.primaryColor,{h:330});for(let c=0;c{this[r]=e[r]}),this.updateColors(),i.forEach(r=>{this[r]=e[r]})}};const F0=t=>{const e=new A0;return e.calculate(t),e};let L0=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=g(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=g(this.primaryColor,{h:-160}),this.primaryBorderColor=ct(this.primaryColor,this.darkMode),this.secondaryBorderColor=ct(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ct(this.tertiaryColor,this.darkMode),this.primaryTextColor=C(this.primaryColor),this.secondaryTextColor=C(this.secondaryColor),this.tertiaryTextColor=C(this.tertiaryColor),this.lineColor=C(this.background),this.textColor=C(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=Ze(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){var e,i,r,n,o,s,a,l,h,u,f;this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||g(this.primaryColor,{h:30}),this.cScale4=this.cScale4||g(this.primaryColor,{h:60}),this.cScale5=this.cScale5||g(this.primaryColor,{h:90}),this.cScale6=this.cScale6||g(this.primaryColor,{h:120}),this.cScale7=this.cScale7||g(this.primaryColor,{h:150}),this.cScale8=this.cScale8||g(this.primaryColor,{h:210}),this.cScale9=this.cScale9||g(this.primaryColor,{h:270}),this.cScale10=this.cScale10||g(this.primaryColor,{h:300}),this.cScale11=this.cScale11||g(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||O(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||O(this.tertiaryColor,40);for(let c=0;c{this[r]=e[r]}),this.updateColors(),i.forEach(r=>{this[r]=e[r]})}};const E0=t=>{const e=new L0;return e.calculate(t),e};let O0=class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=F("#cde498",10),this.primaryBorderColor=ct(this.primaryColor,this.darkMode),this.secondaryBorderColor=ct(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ct(this.tertiaryColor,this.darkMode),this.primaryTextColor=C(this.primaryColor),this.secondaryTextColor=C(this.secondaryColor),this.tertiaryTextColor=C(this.primaryColor),this.lineColor=C(this.background),this.textColor=C(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var e,i,r,n,o,s,a,l,h,u,f;this.actorBorder=O(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||g(this.primaryColor,{h:30}),this.cScale4=this.cScale4||g(this.primaryColor,{h:60}),this.cScale5=this.cScale5||g(this.primaryColor,{h:90}),this.cScale6=this.cScale6||g(this.primaryColor,{h:120}),this.cScale7=this.cScale7||g(this.primaryColor,{h:150}),this.cScale8=this.cScale8||g(this.primaryColor,{h:210}),this.cScale9=this.cScale9||g(this.primaryColor,{h:270}),this.cScale10=this.cScale10||g(this.primaryColor,{h:300}),this.cScale11=this.cScale11||g(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||O(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||O(this.tertiaryColor,40);for(let c=0;c{this[r]=e[r]}),this.updateColors(),i.forEach(r=>{this[r]=e[r]})}};const M0=t=>{const e=new O0;return e.calculate(t),e};class $0{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=F(this.contrast,55),this.background="#ffffff",this.tertiaryColor=g(this.primaryColor,{h:-160}),this.primaryBorderColor=ct(this.primaryColor,this.darkMode),this.secondaryBorderColor=ct(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ct(this.tertiaryColor,this.darkMode),this.primaryTextColor=C(this.primaryColor),this.secondaryTextColor=C(this.secondaryColor),this.tertiaryTextColor=C(this.tertiaryColor),this.lineColor=C(this.background),this.textColor=C(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var e,i,r,n,o,s,a,l,h,u,f;this.secondBkg=F(this.contrast,55),this.border2=this.contrast,this.actorBorder=F(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let c=0;c{this[r]=e[r]}),this.updateColors(),i.forEach(r=>{this[r]=e[r]})}}const I0=t=>{const e=new $0;return e.calculate(t),e},Yt={base:{getThemeVariables:B0},dark:{getThemeVariables:F0},default:{getThemeVariables:E0},forest:{getThemeVariables:M0},neutral:{getThemeVariables:I0}},Ht={flowchart:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},theme:"default",maxTextSize:5e4,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize"],deterministicIds:!1,fontSize:16},Ja={...Ht,deterministicIDSeed:void 0,themeCSS:void 0,themeVariables:Yt.default.getThemeVariables(),sequence:{...Ht.sequence,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{...Ht.gantt,tickInterval:void 0,useWidth:void 0},c4:{...Ht.c4,useWidth:void 0,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}}},pie:{...Ht.pie,useWidth:984},xyChart:{...Ht.xyChart,useWidth:void 0},requirement:{...Ht.requirement,useWidth:void 0},gitGraph:{...Ht.gitGraph,useMaxWidth:!1},sankey:{...Ht.sankey,useMaxWidth:!1}},Qa=(t,e="")=>Object.keys(t).reduce((i,r)=>Array.isArray(t[r])?i:typeof t[r]=="object"&&t[r]!==null?[...i,e+r,...Qa(t[r],"")]:[...i,e+r],[]),D0=new Set(Qa(Ja,"")),N0=Ja,rr=t=>{if(E.debug("sanitizeDirective called with",t),!(typeof t!="object"||t==null)){if(Array.isArray(t)){t.forEach(e=>rr(e));return}for(const e of Object.keys(t)){if(E.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!D0.has(e)||t[e]==null){E.debug("sanitize deleting key: ",e),delete t[e];continue}if(typeof t[e]=="object"){E.debug("sanitizing object",e),rr(t[e]);continue}const i=["themeCSS","fontFamily","altFontFamily"];for(const r of i)e.includes(r)&&(E.debug("sanitizing css option",e),t[e]=R0(t[e]))}if(t.themeVariables)for(const e of Object.keys(t.themeVariables)){const i=t.themeVariables[e];i!=null&&i.match&&!i.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}E.debug("After sanitization",t)}},R0=t=>{let e=0,i=0;for(const r of t){if(e{for(const{id:e,detector:i,loader:r}of t)rl(e,i,r)},rl=(t,e,i)=>{Me[t]?E.error(`Detector with key ${t} already exists`):Me[t]={detector:e,loader:i},E.debug(`Detector with key ${t} added${i?" with loader":""}`)},q0=t=>Me[t].loader,xn=(t,e,{depth:i=2,clobber:r=!1}={})=>{const n={depth:i,clobber:r};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(o=>xn(t,o,n)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(o=>{t.includes(o)||t.push(o)}),t):t===void 0||i<=0?t!=null&&typeof t=="object"&&typeof e=="object"?Object.assign(t,e):e:(e!==void 0&&typeof t=="object"&&typeof e=="object"&&Object.keys(e).forEach(o=>{typeof e[o]=="object"&&(t[o]===void 0||typeof t[o]=="object")?(t[o]===void 0&&(t[o]=Array.isArray(e[o])?[]:{}),t[o]=xn(t[o],e[o],{depth:i-1,clobber:r})):(r||typeof t[o]!="object"&&typeof e[o]!="object")&&(t[o]=e[o])}),t)},at=xn,z0="​",W0={curveBasis:$f,curveBasisClosed:If,curveBasisOpen:Df,curveBumpX:Of,curveBumpY:Mf,curveBundle:Nf,curveCardinalClosed:Pf,curveCardinalOpen:qf,curveCardinal:Rf,curveCatmullRomClosed:Wf,curveCatmullRomOpen:Hf,curveCatmullRom:zf,curveLinear:Ef,curveLinearClosed:jf,curveMonotoneX:Uf,curveMonotoneY:Yf,curveNatural:Vf,curveStep:Gf,curveStepAfter:Kf,curveStepBefore:Xf},H0=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,j0=function(t,e){const i=nl(t,/(?:init\b)|(?:initialize\b)/);let r={};if(Array.isArray(i)){const s=i.map(a=>a.args);rr(s),r=at(r,[...s])}else r=i.args;if(!r)return;let n=Ar(t,e);const o="config";return r[o]!==void 0&&(n==="flowchart-v2"&&(n="flowchart"),r[n]=r[o],delete r[o]),r},nl=function(t,e=null){try{const i=new RegExp(`[%]{2}(?![{]${H0.source})(?=[}][%]{2}).* -`,"ig");t=t.trim().replace(i,"").replace(/'/gm,'"'),E.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let r;const n=[];for(;(r=Qe.exec(t))!==null;)if(r.index===Qe.lastIndex&&Qe.lastIndex++,r&&!e||e&&r[1]&&r[1].match(e)||e&&r[2]&&r[2].match(e)){const o=r[1]?r[1]:r[2],s=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;n.push({type:o,args:s})}return n.length===0?{type:t,args:null}:n.length===1?n[0]:n}catch(i){return E.error(`ERROR: ${i.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},U0=function(t){return t.replace(Qe,"")},Y0=function(t,e){for(const[i,r]of e.entries())if(r.match(t))return i;return-1};function V0(t,e){if(!t)return e;const i=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return W0[i]??e}function G0(t,e){const i=t.trim();if(i)return e.securityLevel!=="loose"?Is.sanitizeUrl(i):i}const X0=(t,...e)=>{const i=t.split("."),r=i.length-1,n=i[r];let o=window;for(let s=0;s{i+=ol(n,e),e=n});const r=i/2;return Hn(t,r)}function Z0(t){return t.length===1?t[0]:K0(t)}const Cs=(t,e=2)=>{const i=Math.pow(10,e);return Math.round(t*i)/i},Hn=(t,e)=>{let i,r=e;for(const n of t){if(i){const o=ol(n,i);if(o=1)return{x:n.x,y:n.y};if(s>0&&s<1)return{x:Cs((1-s)*i.x+s*n.x,5),y:Cs((1-s)*i.y+s*n.y,5)}}}i=n}throw new Error("Could not find a suitable point for the given distance")},J0=(t,e,i)=>{E.info(`our points ${JSON.stringify(e)}`),e[0]!==i&&(e=e.reverse());const n=Hn(e,25),o=t?10:5,s=Math.atan2(e[0].y-n.y,e[0].x-n.x),a={x:0,y:0};return a.x=Math.sin(s)*o+(e[0].x+n.x)/2,a.y=-Math.cos(s)*o+(e[0].y+n.y)/2,a};function Q0(t,e,i){const r=structuredClone(i);E.info("our points",r),e!=="start_left"&&e!=="start_right"&&r.reverse();const n=25+t,o=Hn(r,n),s=10+t*.5,a=Math.atan2(r[0].y-o.y,r[0].x-o.x),l={x:0,y:0};return e==="start_left"?(l.x=Math.sin(a+Math.PI)*s+(r[0].x+o.x)/2,l.y=-Math.cos(a+Math.PI)*s+(r[0].y+o.y)/2):e==="end_right"?(l.x=Math.sin(a-Math.PI)*s+(r[0].x+o.x)/2-5,l.y=-Math.cos(a-Math.PI)*s+(r[0].y+o.y)/2-5):e==="end_left"?(l.x=Math.sin(a)*s+(r[0].x+o.x)/2-5,l.y=-Math.cos(a)*s+(r[0].y+o.y)/2-5):(l.x=Math.sin(a)*s+(r[0].x+o.x)/2,l.y=-Math.cos(a)*s+(r[0].y+o.y)/2),l}function t_(t){let e="",i="";for(const r of t)r!==void 0&&(r.startsWith("color:")||r.startsWith("text-align:")?i=i+r+";":e=e+r+";");return{style:e,labelStyle:i}}let xs=0;const e_=()=>(xs++,"id-"+Math.random().toString(36).substr(2,12)+"-"+xs);function i_(t){let e="";const i="0123456789abcdef",r=i.length;for(let n=0;ni_(t.length),n_=function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},o_=function(t,e){const i=e.text.replace(Wn.lineBreakRegex," "),[,r]=Un(e.fontSize),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.style("text-anchor",e.anchor),n.style("font-family",e.fontFamily),n.style("font-size",r),n.style("font-weight",e.fontWeight),n.attr("fill",e.fill),e.class!==void 0&&n.attr("class",e.class);const o=n.append("tspan");return o.attr("x",e.x+e.textMargin*2),o.attr("fill",e.fill),o.text(i),n},s_=gi((t,e,i)=>{if(!t||(i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
            "},i),Wn.lineBreakRegex.test(t)))return t;const r=t.split(" "),n=[];let o="";return r.forEach((s,a)=>{const l=nr(`${s} `,i),h=nr(o,i);if(l>e){const{hyphenatedStrings:c,remainingWord:d}=a_(s,e,"-",i);n.push(o,...c),o=d}else h+l>=e?(n.push(o),o=s):o=[o,s].filter(Boolean).join(" ");a+1===r.length&&n.push(o)}),n.filter(s=>s!=="").join(i.joinWith)},(t,e,i)=>`${t}${e}${i.fontSize}${i.fontWeight}${i.fontFamily}${i.joinWith}`),a_=gi((t,e,i="-",r)=>{r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);const n=[...t],o=[];let s="";return n.forEach((a,l)=>{const h=`${s}${a}`;if(nr(h,r)>=e){const f=l+1,c=n.length===f,d=`${h}${i}`;o.push(c?h:d),s=""}else s=h}),{hyphenatedStrings:o,remainingWord:s}},(t,e,i="-",r)=>`${t}${e}${i}${r.fontSize}${r.fontWeight}${r.fontFamily}`);function l_(t,e){return jn(t,e).height}function nr(t,e){return jn(t,e).width}const jn=gi((t,e)=>{const{fontSize:i=12,fontFamily:r="Arial",fontWeight:n=400}=e;if(!t)return{width:0,height:0};const[,o]=Un(i),s=["sans-serif",r],a=t.split(Wn.lineBreakRegex),l=[],h=xt("body");if(!h.remove)return{width:0,height:0,lineHeight:0};const u=h.append("svg");for(const c of s){let d=0;const _={width:0,height:0,lineHeight:0};for(const k of a){const S=n_();S.text=k||z0;const P=o_(u,S).style("font-size",o).style("font-weight",n).style("font-family",c),T=(P._groups||P)[0][0].getBBox();if(T.width===0&&T.height===0)throw new Error("svg element not in render tree");_.width=Math.round(Math.max(_.width,T.width)),d=Math.round(T.height),_.height+=d,_.lineHeight=Math.round(Math.max(_.lineHeight,d))}l.push(_)}u.remove();const f=isNaN(l[1].height)||isNaN(l[1].width)||isNaN(l[1].lineHeight)||l[0].height>l[1].height&&l[0].width>l[1].width&&l[0].lineHeight>l[1].lineHeight?0:1;return l[f]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`);class h_{constructor(e=!1,i){this.count=0,this.count=i?i.length:0,this.next=e?()=>this.count++:()=>Date.now()}}let Ei;const c_=function(t){return Ei=Ei||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),Ei.innerHTML=t,unescape(Ei.textContent)};function sl(t){return"str"in t}const u_=(t,e,i,r)=>{var n;if(!r)return;const o=(n=t.node())==null?void 0:n.getBBox();o&&t.append("text").text(r).attr("x",o.x+o.width/2).attr("y",-i).attr("class",e)},Un=t=>{if(typeof t=="number")return[t,t+"px"];const e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]};function al(t,e){return Om({},t,e)}const ti={assignWithDepth:at,wrapLabel:s_,calculateTextHeight:l_,calculateTextWidth:nr,calculateTextDimensions:jn,cleanAndMerge:al,detectInit:j0,detectDirective:nl,isSubstringInArray:Y0,interpolateToCurve:V0,calcLabelPosition:Z0,calcCardinalityPosition:J0,calcTerminalLabelPosition:Q0,formatUrl:G0,getStylesFromArray:t_,generateId:e_,random:r_,runFunc:X0,entityDecode:c_,insertTitle:u_,parseFontSize:Un,InitIDGenerator:h_},bs="10.6.1",$e=Object.freeze(N0);let pt=at({},$e),ll,Ie=[],ei=at({},$e);const Fr=(t,e)=>{let i=at({},t),r={};for(const n of e)ul(n),r=at(r,n);if(i=at(i,r),r.theme&&r.theme in Yt){const n=at({},ll),o=at(n.themeVariables||{},r.themeVariables);i.theme&&i.theme in Yt&&(i.themeVariables=Yt[i.theme].getThemeVariables(o))}return ei=i,fl(ei),ei},f_=t=>(pt=at({},$e),pt=at(pt,t),t.theme&&Yt[t.theme]&&(pt.themeVariables=Yt[t.theme].getThemeVariables(t.themeVariables)),Fr(pt,Ie),pt),d_=t=>{ll=at({},t)},p_=t=>(pt=at(pt,t),Fr(pt,Ie),pt),hl=()=>at({},pt),cl=t=>(fl(t),at(ei,t),$t()),$t=()=>at({},ei),ul=t=>{t&&(["secure",...pt.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(E.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])}),Object.keys(t).forEach(e=>{e.startsWith("__")&&delete t[e]}),Object.keys(t).forEach(e=>{typeof t[e]=="string"&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],typeof t[e]=="object"&&ul(t[e])}))},g_=t=>{rr(t),t.fontFamily&&(!t.themeVariables||!t.themeVariables.fontFamily)&&(t.themeVariables={fontFamily:t.fontFamily}),Ie.push(t),Fr(pt,Ie)},or=(t=pt)=>{Ie=[],Fr(t,Ie)},m_={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},Ts={},__=t=>{Ts[t]||(E.warn(m_[t]),Ts[t]=!0)},fl=t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&__("LAZY_LOAD_DEPRECATED")},dl="c4",y_=t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),C_=async()=>{const{diagram:t}=await J(()=>import("./c4Diagram-817c8e44-BMi5WAvg.js"),__vite__mapDeps([0,1,2]));return{id:dl,diagram:t}},x_={id:dl,detector:y_,loader:C_},b_=x_,pl="flowchart",T_=(t,e)=>{var i,r;return((i=e==null?void 0:e.flowchart)==null?void 0:i.defaultRenderer)==="dagre-wrapper"||((r=e==null?void 0:e.flowchart)==null?void 0:r.defaultRenderer)==="elk"?!1:/^\s*graph/.test(t)},v_=async()=>{const{diagram:t}=await J(()=>import("./flowDiagram-61eb444c-niCbBEPW.js"),__vite__mapDeps([3,4,5,6,7,8,9,10,11,12,2]));return{id:pl,diagram:t}},k_={id:pl,detector:T_,loader:v_},S_=k_,gl="flowchart-v2",w_=(t,e)=>{var i,r,n;return((i=e==null?void 0:e.flowchart)==null?void 0:i.defaultRenderer)==="dagre-d3"||((r=e==null?void 0:e.flowchart)==null?void 0:r.defaultRenderer)==="elk"?!1:/^\s*graph/.test(t)&&((n=e==null?void 0:e.flowchart)==null?void 0:n.defaultRenderer)==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)},B_=async()=>{const{diagram:t}=await J(()=>import("./flowDiagram-v2-2f8f667a-kIE4L_ig.js"),__vite__mapDeps([13,4,6,5,7,8,9,10,11,12,2]));return{id:gl,diagram:t}},A_={id:gl,detector:w_,loader:B_},F_=A_,ml="er",L_=t=>/^\s*erDiagram/.test(t),E_=async()=>{const{diagram:t}=await J(()=>import("./erDiagram-9cfc3649-Q00KLrXp.js"),__vite__mapDeps([14,5,10,11,12,2]));return{id:ml,diagram:t}},O_={id:ml,detector:L_,loader:E_},M_=O_,_l="gitGraph",$_=t=>/^\s*gitGraph/.test(t),I_=async()=>{const{diagram:t}=await J(()=>import("./gitGraphDiagram-6b463803-EqEFWtIw.js"),__vite__mapDeps([15,2]));return{id:_l,diagram:t}},D_={id:_l,detector:$_,loader:I_},N_=D_,yl="gantt",R_=t=>/^\s*gantt/.test(t),P_=async()=>{const{diagram:t}=await J(()=>import("./ganttDiagram-db6931fb-XdIrq4o4.js"),__vite__mapDeps([16,17,18,2]));return{id:yl,diagram:t}},q_={id:yl,detector:R_,loader:P_},z_=q_,Cl="info",W_=t=>/^\s*info/.test(t),H_=async()=>{const{diagram:t}=await J(()=>import("./infoDiagram-a336098b-0X44mHNI.js"),__vite__mapDeps([19,2]));return{id:Cl,diagram:t}},j_={id:Cl,detector:W_,loader:H_},xl="pie",U_=t=>/^\s*pie/.test(t),Y_=async()=>{const{diagram:t}=await J(()=>import("./pieDiagram-a5166659-w0_KZcnm.js"),__vite__mapDeps([20,21,12,22,18,11,2]));return{id:xl,diagram:t}},V_={id:xl,detector:U_,loader:Y_},bl="quadrantChart",G_=t=>/^\s*quadrantChart/.test(t),X_=async()=>{const{diagram:t}=await J(()=>import("./quadrantDiagram-6c355bbc-ZBJyvn0X.js"),__vite__mapDeps([23,17,18,2]));return{id:bl,diagram:t}},K_={id:bl,detector:G_,loader:X_},Z_=K_,Tl="xychart",J_=t=>/^\s*xychart-beta/.test(t),Q_=async()=>{const{diagram:t}=await J(()=>import("./xychartDiagram-f746c04c-ewecNIL5.js"),__vite__mapDeps([24,9,18,22,17,10,11,12,2]));return{id:Tl,diagram:t}},ty={id:Tl,detector:J_,loader:Q_},ey=ty,vl="requirement",iy=t=>/^\s*requirement(Diagram)?/.test(t),ry=async()=>{const{diagram:t}=await J(()=>import("./requirementDiagram-4038b16c-KuNIOd0s.js"),__vite__mapDeps([25,5,10,11,12,2]));return{id:vl,diagram:t}},ny={id:vl,detector:iy,loader:ry},oy=ny,kl="sequence",sy=t=>/^\s*sequenceDiagram/.test(t),ay=async()=>{const{diagram:t}=await J(()=>import("./sequenceDiagram-465a088a-dqSP27xN.js"),__vite__mapDeps([26,1,2]));return{id:kl,diagram:t}},ly={id:kl,detector:sy,loader:ay},hy=ly,Sl="class",cy=(t,e)=>{var i;return((i=e==null?void 0:e.class)==null?void 0:i.defaultRenderer)==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t)},uy=async()=>{const{diagram:t}=await J(()=>import("./classDiagram-48ab76fb-B-1nPr5u.js"),__vite__mapDeps([27,28,5,10,11,12,2]));return{id:Sl,diagram:t}},fy={id:Sl,detector:cy,loader:uy},dy=fy,wl="classDiagram",py=(t,e)=>{var i;return/^\s*classDiagram/.test(t)&&((i=e==null?void 0:e.class)==null?void 0:i.defaultRenderer)==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t)},gy=async()=>{const{diagram:t}=await J(()=>import("./classDiagram-v2-8ecb0bfc-6PoF2wPP.js"),__vite__mapDeps([29,28,5,7,8,9,10,11,12,2]));return{id:wl,diagram:t}},my={id:wl,detector:py,loader:gy},_y=my,Bl="state",yy=(t,e)=>{var i;return((i=e==null?void 0:e.state)==null?void 0:i.defaultRenderer)==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t)},Cy=async()=>{const{diagram:t}=await J(()=>import("./stateDiagram-b620d43f-w1mYtpVD.js"),__vite__mapDeps([30,31,5,10,11,12,2]));return{id:Bl,diagram:t}},xy={id:Bl,detector:yy,loader:Cy},by=xy,Al="stateDiagram",Ty=(t,e)=>{var i;return!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&((i=e==null?void 0:e.state)==null?void 0:i.defaultRenderer)==="dagre-wrapper")},vy=async()=>{const{diagram:t}=await J(()=>import("./stateDiagram-v2-2671c3d1-xaF1im6Z.js"),__vite__mapDeps([32,31,5,7,8,9,10,11,12,2]));return{id:Al,diagram:t}},ky={id:Al,detector:Ty,loader:vy},Sy=ky,Fl="journey",wy=t=>/^\s*journey/.test(t),By=async()=>{const{diagram:t}=await J(()=>import("./journeyDiagram-deae3313-I4uOsZJQ.js"),__vite__mapDeps([33,1,21,12,2]));return{id:Fl,diagram:t}},Ay={id:Fl,detector:wy,loader:By},Fy=Ay,Ly=function(t,e){for(let i of e)t.attr(i[0],i[1])},Ey=function(t,e,i){let r=new Map;return i?(r.set("width","100%"),r.set("style",`max-width: ${e}px;`)):(r.set("height",t),r.set("width",e)),r},Ll=function(t,e,i,r){const n=Ey(e,i,r);Ly(t,n)},Oy=function(t,e,i,r){const n=e.node().getBBox(),o=n.width,s=n.height;E.info(`SVG bounds: ${o}x${s}`,n);let a=0,l=0;E.info(`Graph bounds: ${a}x${l}`,t),a=o+i*2,l=s+i*2,E.info(`Calculated bounds: ${a}x${l}`),Ll(e,l,a,r);const h=`${n.x-i} ${n.y-i} ${n.width+2*i} ${n.height+2*i}`;e.attr("viewBox",h)},Wi={},My=(t,e,i)=>{let r="";return t in Wi&&Wi[t]?r=Wi[t](i):E.warn(`No theme found for ${t}`),` & { +`,"ig");t=t.trim().replace(i,"").replace(/'/gm,'"'),E.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let r;const n=[];for(;(r=Qe.exec(t))!==null;)if(r.index===Qe.lastIndex&&Qe.lastIndex++,r&&!e||e&&r[1]&&r[1].match(e)||e&&r[2]&&r[2].match(e)){const o=r[1]?r[1]:r[2],s=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;n.push({type:o,args:s})}return n.length===0?{type:t,args:null}:n.length===1?n[0]:n}catch(i){return E.error(`ERROR: ${i.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},U0=function(t){return t.replace(Qe,"")},Y0=function(t,e){for(const[i,r]of e.entries())if(r.match(t))return i;return-1};function V0(t,e){if(!t)return e;const i=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return W0[i]??e}function G0(t,e){const i=t.trim();if(i)return e.securityLevel!=="loose"?Is.sanitizeUrl(i):i}const X0=(t,...e)=>{const i=t.split("."),r=i.length-1,n=i[r];let o=window;for(let s=0;s{i+=ol(n,e),e=n});const r=i/2;return Hn(t,r)}function Z0(t){return t.length===1?t[0]:K0(t)}const Cs=(t,e=2)=>{const i=Math.pow(10,e);return Math.round(t*i)/i},Hn=(t,e)=>{let i,r=e;for(const n of t){if(i){const o=ol(n,i);if(o=1)return{x:n.x,y:n.y};if(s>0&&s<1)return{x:Cs((1-s)*i.x+s*n.x,5),y:Cs((1-s)*i.y+s*n.y,5)}}}i=n}throw new Error("Could not find a suitable point for the given distance")},J0=(t,e,i)=>{E.info(`our points ${JSON.stringify(e)}`),e[0]!==i&&(e=e.reverse());const n=Hn(e,25),o=t?10:5,s=Math.atan2(e[0].y-n.y,e[0].x-n.x),a={x:0,y:0};return a.x=Math.sin(s)*o+(e[0].x+n.x)/2,a.y=-Math.cos(s)*o+(e[0].y+n.y)/2,a};function Q0(t,e,i){const r=structuredClone(i);E.info("our points",r),e!=="start_left"&&e!=="start_right"&&r.reverse();const n=25+t,o=Hn(r,n),s=10+t*.5,a=Math.atan2(r[0].y-o.y,r[0].x-o.x),l={x:0,y:0};return e==="start_left"?(l.x=Math.sin(a+Math.PI)*s+(r[0].x+o.x)/2,l.y=-Math.cos(a+Math.PI)*s+(r[0].y+o.y)/2):e==="end_right"?(l.x=Math.sin(a-Math.PI)*s+(r[0].x+o.x)/2-5,l.y=-Math.cos(a-Math.PI)*s+(r[0].y+o.y)/2-5):e==="end_left"?(l.x=Math.sin(a)*s+(r[0].x+o.x)/2-5,l.y=-Math.cos(a)*s+(r[0].y+o.y)/2-5):(l.x=Math.sin(a)*s+(r[0].x+o.x)/2,l.y=-Math.cos(a)*s+(r[0].y+o.y)/2),l}function t_(t){let e="",i="";for(const r of t)r!==void 0&&(r.startsWith("color:")||r.startsWith("text-align:")?i=i+r+";":e=e+r+";");return{style:e,labelStyle:i}}let xs=0;const e_=()=>(xs++,"id-"+Math.random().toString(36).substr(2,12)+"-"+xs);function i_(t){let e="";const i="0123456789abcdef",r=i.length;for(let n=0;ni_(t.length),n_=function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},o_=function(t,e){const i=e.text.replace(Wn.lineBreakRegex," "),[,r]=Un(e.fontSize),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.style("text-anchor",e.anchor),n.style("font-family",e.fontFamily),n.style("font-size",r),n.style("font-weight",e.fontWeight),n.attr("fill",e.fill),e.class!==void 0&&n.attr("class",e.class);const o=n.append("tspan");return o.attr("x",e.x+e.textMargin*2),o.attr("fill",e.fill),o.text(i),n},s_=gi((t,e,i)=>{if(!t||(i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
            "},i),Wn.lineBreakRegex.test(t)))return t;const r=t.split(" "),n=[];let o="";return r.forEach((s,a)=>{const l=nr(`${s} `,i),h=nr(o,i);if(l>e){const{hyphenatedStrings:c,remainingWord:d}=a_(s,e,"-",i);n.push(o,...c),o=d}else h+l>=e?(n.push(o),o=s):o=[o,s].filter(Boolean).join(" ");a+1===r.length&&n.push(o)}),n.filter(s=>s!=="").join(i.joinWith)},(t,e,i)=>`${t}${e}${i.fontSize}${i.fontWeight}${i.fontFamily}${i.joinWith}`),a_=gi((t,e,i="-",r)=>{r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);const n=[...t],o=[];let s="";return n.forEach((a,l)=>{const h=`${s}${a}`;if(nr(h,r)>=e){const f=l+1,c=n.length===f,d=`${h}${i}`;o.push(c?h:d),s=""}else s=h}),{hyphenatedStrings:o,remainingWord:s}},(t,e,i="-",r)=>`${t}${e}${i}${r.fontSize}${r.fontWeight}${r.fontFamily}`);function l_(t,e){return jn(t,e).height}function nr(t,e){return jn(t,e).width}const jn=gi((t,e)=>{const{fontSize:i=12,fontFamily:r="Arial",fontWeight:n=400}=e;if(!t)return{width:0,height:0};const[,o]=Un(i),s=["sans-serif",r],a=t.split(Wn.lineBreakRegex),l=[],h=xt("body");if(!h.remove)return{width:0,height:0,lineHeight:0};const u=h.append("svg");for(const c of s){let d=0;const _={width:0,height:0,lineHeight:0};for(const k of a){const S=n_();S.text=k||z0;const P=o_(u,S).style("font-size",o).style("font-weight",n).style("font-family",c),T=(P._groups||P)[0][0].getBBox();if(T.width===0&&T.height===0)throw new Error("svg element not in render tree");_.width=Math.round(Math.max(_.width,T.width)),d=Math.round(T.height),_.height+=d,_.lineHeight=Math.round(Math.max(_.lineHeight,d))}l.push(_)}u.remove();const f=isNaN(l[1].height)||isNaN(l[1].width)||isNaN(l[1].lineHeight)||l[0].height>l[1].height&&l[0].width>l[1].width&&l[0].lineHeight>l[1].lineHeight?0:1;return l[f]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`);class h_{constructor(e=!1,i){this.count=0,this.count=i?i.length:0,this.next=e?()=>this.count++:()=>Date.now()}}let Ei;const c_=function(t){return Ei=Ei||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),Ei.innerHTML=t,unescape(Ei.textContent)};function sl(t){return"str"in t}const u_=(t,e,i,r)=>{var n;if(!r)return;const o=(n=t.node())==null?void 0:n.getBBox();o&&t.append("text").text(r).attr("x",o.x+o.width/2).attr("y",-i).attr("class",e)},Un=t=>{if(typeof t=="number")return[t,t+"px"];const e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]};function al(t,e){return Om({},t,e)}const ti={assignWithDepth:at,wrapLabel:s_,calculateTextHeight:l_,calculateTextWidth:nr,calculateTextDimensions:jn,cleanAndMerge:al,detectInit:j0,detectDirective:nl,isSubstringInArray:Y0,interpolateToCurve:V0,calcLabelPosition:Z0,calcCardinalityPosition:J0,calcTerminalLabelPosition:Q0,formatUrl:G0,getStylesFromArray:t_,generateId:e_,random:r_,runFunc:X0,entityDecode:c_,insertTitle:u_,parseFontSize:Un,InitIDGenerator:h_},bs="10.6.1",$e=Object.freeze(N0);let pt=at({},$e),ll,Ie=[],ei=at({},$e);const Fr=(t,e)=>{let i=at({},t),r={};for(const n of e)ul(n),r=at(r,n);if(i=at(i,r),r.theme&&r.theme in Yt){const n=at({},ll),o=at(n.themeVariables||{},r.themeVariables);i.theme&&i.theme in Yt&&(i.themeVariables=Yt[i.theme].getThemeVariables(o))}return ei=i,fl(ei),ei},f_=t=>(pt=at({},$e),pt=at(pt,t),t.theme&&Yt[t.theme]&&(pt.themeVariables=Yt[t.theme].getThemeVariables(t.themeVariables)),Fr(pt,Ie),pt),d_=t=>{ll=at({},t)},p_=t=>(pt=at(pt,t),Fr(pt,Ie),pt),hl=()=>at({},pt),cl=t=>(fl(t),at(ei,t),$t()),$t=()=>at({},ei),ul=t=>{t&&(["secure",...pt.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(E.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])}),Object.keys(t).forEach(e=>{e.startsWith("__")&&delete t[e]}),Object.keys(t).forEach(e=>{typeof t[e]=="string"&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],typeof t[e]=="object"&&ul(t[e])}))},g_=t=>{rr(t),t.fontFamily&&(!t.themeVariables||!t.themeVariables.fontFamily)&&(t.themeVariables={fontFamily:t.fontFamily}),Ie.push(t),Fr(pt,Ie)},or=(t=pt)=>{Ie=[],Fr(t,Ie)},m_={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},Ts={},__=t=>{Ts[t]||(E.warn(m_[t]),Ts[t]=!0)},fl=t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&__("LAZY_LOAD_DEPRECATED")},dl="c4",y_=t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),C_=async()=>{const{diagram:t}=await J(()=>import("./c4Diagram-817c8e44-EI6Ep_s6.js"),__vite__mapDeps([0,1,2]));return{id:dl,diagram:t}},x_={id:dl,detector:y_,loader:C_},b_=x_,pl="flowchart",T_=(t,e)=>{var i,r;return((i=e==null?void 0:e.flowchart)==null?void 0:i.defaultRenderer)==="dagre-wrapper"||((r=e==null?void 0:e.flowchart)==null?void 0:r.defaultRenderer)==="elk"?!1:/^\s*graph/.test(t)},v_=async()=>{const{diagram:t}=await J(()=>import("./flowDiagram-61eb444c-DuMoGt9F.js"),__vite__mapDeps([3,4,5,6,7,8,9,10,11,12,2]));return{id:pl,diagram:t}},k_={id:pl,detector:T_,loader:v_},S_=k_,gl="flowchart-v2",w_=(t,e)=>{var i,r,n;return((i=e==null?void 0:e.flowchart)==null?void 0:i.defaultRenderer)==="dagre-d3"||((r=e==null?void 0:e.flowchart)==null?void 0:r.defaultRenderer)==="elk"?!1:/^\s*graph/.test(t)&&((n=e==null?void 0:e.flowchart)==null?void 0:n.defaultRenderer)==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)},B_=async()=>{const{diagram:t}=await J(()=>import("./flowDiagram-v2-2f8f667a-Ob2Hpvk_.js"),__vite__mapDeps([13,4,6,5,7,8,9,10,11,12,2]));return{id:gl,diagram:t}},A_={id:gl,detector:w_,loader:B_},F_=A_,ml="er",L_=t=>/^\s*erDiagram/.test(t),E_=async()=>{const{diagram:t}=await J(()=>import("./erDiagram-9cfc3649-wxfL-kce.js"),__vite__mapDeps([14,5,10,11,12,2]));return{id:ml,diagram:t}},O_={id:ml,detector:L_,loader:E_},M_=O_,_l="gitGraph",$_=t=>/^\s*gitGraph/.test(t),I_=async()=>{const{diagram:t}=await J(()=>import("./gitGraphDiagram-6b463803-leFcDYEm.js"),__vite__mapDeps([15,2]));return{id:_l,diagram:t}},D_={id:_l,detector:$_,loader:I_},N_=D_,yl="gantt",R_=t=>/^\s*gantt/.test(t),P_=async()=>{const{diagram:t}=await J(()=>import("./ganttDiagram-db6931fb-MZTKg1_s.js"),__vite__mapDeps([16,17,18,2]));return{id:yl,diagram:t}},q_={id:yl,detector:R_,loader:P_},z_=q_,Cl="info",W_=t=>/^\s*info/.test(t),H_=async()=>{const{diagram:t}=await J(()=>import("./infoDiagram-a336098b-7atRS8Yv.js"),__vite__mapDeps([19,2]));return{id:Cl,diagram:t}},j_={id:Cl,detector:W_,loader:H_},xl="pie",U_=t=>/^\s*pie/.test(t),Y_=async()=>{const{diagram:t}=await J(()=>import("./pieDiagram-a5166659-9IukIHDQ.js"),__vite__mapDeps([20,21,12,22,18,11,2]));return{id:xl,diagram:t}},V_={id:xl,detector:U_,loader:Y_},bl="quadrantChart",G_=t=>/^\s*quadrantChart/.test(t),X_=async()=>{const{diagram:t}=await J(()=>import("./quadrantDiagram-6c355bbc-mORRzAzd.js"),__vite__mapDeps([23,17,18,2]));return{id:bl,diagram:t}},K_={id:bl,detector:G_,loader:X_},Z_=K_,Tl="xychart",J_=t=>/^\s*xychart-beta/.test(t),Q_=async()=>{const{diagram:t}=await J(()=>import("./xychartDiagram-f746c04c--73jsRcR.js"),__vite__mapDeps([24,9,18,22,17,10,11,12,2]));return{id:Tl,diagram:t}},ty={id:Tl,detector:J_,loader:Q_},ey=ty,vl="requirement",iy=t=>/^\s*requirement(Diagram)?/.test(t),ry=async()=>{const{diagram:t}=await J(()=>import("./requirementDiagram-4038b16c-HXR1kktq.js"),__vite__mapDeps([25,5,10,11,12,2]));return{id:vl,diagram:t}},ny={id:vl,detector:iy,loader:ry},oy=ny,kl="sequence",sy=t=>/^\s*sequenceDiagram/.test(t),ay=async()=>{const{diagram:t}=await J(()=>import("./sequenceDiagram-465a088a-x_ttBttK.js"),__vite__mapDeps([26,1,2]));return{id:kl,diagram:t}},ly={id:kl,detector:sy,loader:ay},hy=ly,Sl="class",cy=(t,e)=>{var i;return((i=e==null?void 0:e.class)==null?void 0:i.defaultRenderer)==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t)},uy=async()=>{const{diagram:t}=await J(()=>import("./classDiagram-48ab76fb-YrjwxOfN.js"),__vite__mapDeps([27,28,5,10,11,12,2]));return{id:Sl,diagram:t}},fy={id:Sl,detector:cy,loader:uy},dy=fy,wl="classDiagram",py=(t,e)=>{var i;return/^\s*classDiagram/.test(t)&&((i=e==null?void 0:e.class)==null?void 0:i.defaultRenderer)==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t)},gy=async()=>{const{diagram:t}=await J(()=>import("./classDiagram-v2-8ecb0bfc-uyvLMQh4.js"),__vite__mapDeps([29,28,5,7,8,9,10,11,12,2]));return{id:wl,diagram:t}},my={id:wl,detector:py,loader:gy},_y=my,Bl="state",yy=(t,e)=>{var i;return((i=e==null?void 0:e.state)==null?void 0:i.defaultRenderer)==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t)},Cy=async()=>{const{diagram:t}=await J(()=>import("./stateDiagram-b620d43f-n-a3FIBU.js"),__vite__mapDeps([30,31,5,10,11,12,2]));return{id:Bl,diagram:t}},xy={id:Bl,detector:yy,loader:Cy},by=xy,Al="stateDiagram",Ty=(t,e)=>{var i;return!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&((i=e==null?void 0:e.state)==null?void 0:i.defaultRenderer)==="dagre-wrapper")},vy=async()=>{const{diagram:t}=await J(()=>import("./stateDiagram-v2-2671c3d1-1xa5Hugt.js"),__vite__mapDeps([32,31,5,7,8,9,10,11,12,2]));return{id:Al,diagram:t}},ky={id:Al,detector:Ty,loader:vy},Sy=ky,Fl="journey",wy=t=>/^\s*journey/.test(t),By=async()=>{const{diagram:t}=await J(()=>import("./journeyDiagram-deae3313-JgGAP5aa.js"),__vite__mapDeps([33,1,21,12,2]));return{id:Fl,diagram:t}},Ay={id:Fl,detector:wy,loader:By},Fy=Ay,Ly=function(t,e){for(let i of e)t.attr(i[0],i[1])},Ey=function(t,e,i){let r=new Map;return i?(r.set("width","100%"),r.set("style",`max-width: ${e}px;`)):(r.set("height",t),r.set("width",e)),r},Ll=function(t,e,i,r){const n=Ey(e,i,r);Ly(t,n)},Oy=function(t,e,i,r){const n=e.node().getBBox(),o=n.width,s=n.height;E.info(`SVG bounds: ${o}x${s}`,n);let a=0,l=0;E.info(`Graph bounds: ${a}x${l}`,t),a=o+i*2,l=s+i*2,E.info(`Calculated bounds: ${a}x${l}`),Ll(e,l,a,r);const h=`${n.x-i} ${n.y-i} ${n.width+2*i} ${n.height+2*i}`;e.attr("viewBox",h)},Wi={},My=(t,e,i)=>{let r="";return t in Wi&&Wi[t]?r=Wi[t](i):E.warn(`No theme found for ${t}`),` & { font-family: ${i.fontFamily}; font-size: ${i.fontSize}; fill: ${i.textColor} @@ -57,7 +57,7 @@ import{_ as J}from"./app-BrxqtzGY.js";function uh(t){for(var e=[],i=1;i{e!==void 0&&(Wi[t]=e)},Iy=My;let Yn="",Vn="",Gn="";const Xn=t=>ci(t,$t()),Dy=()=>{Yn="",Gn="",Vn=""},Ny=t=>{Yn=Xn(t).replace(/^\s+/g,"")},Ry=()=>Yn,Py=t=>{Gn=Xn(t).replace(/\n\s+/g,` `)},qy=()=>Gn,zy=t=>{Vn=Xn(t)},Wy=()=>Vn,Hy=Object.freeze(Object.defineProperty({__proto__:null,clear:Dy,getAccDescription:qy,getAccTitle:Ry,getDiagramTitle:Wy,setAccDescription:Py,setAccTitle:Ny,setDiagramTitle:zy},Symbol.toStringTag,{value:"Module"})),jy=E,Uy=zn,Kn=$t,f1=cl,d1=$e,Yy=t=>ci(t,Kn()),Vy=Oy,Gy=()=>Hy,sr={},ar=(t,e,i)=>{var r;if(sr[t])throw new Error(`Diagram ${t} already registered.`);sr[t]=e,i&&rl(t,i),$y(t,e.styles),(r=e.injectUtils)==null||r.call(e,jy,Uy,Kn,Yy,Vy,Gy(),()=>{})},Zn=t=>{if(t in sr)return sr[t];throw new Xy(t)};class Xy extends Error{constructor(e){super(`Diagram ${e} not found.`)}}const Ky=t=>{var e;const{securityLevel:i}=Kn();let r=xt("body");if(i==="sandbox"){const s=((e=xt(`#i${t}`).node())==null?void 0:e.contentDocument)??document;r=xt(s.body)}return r.select(`#${t}`)},Zy=(t,e,i)=>{E.debug(`renering svg for syntax error -`);const r=Ky(e);r.attr("viewBox","0 0 2412 512"),Ll(r,100,512,!0);const n=r.append("g");n.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),n.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),n.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),n.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),n.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),n.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),n.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),n.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${i}`)},El={draw:Zy},Jy=El,Qy={db:{},renderer:El,parser:{parser:{yy:{}},parse:()=>{}}},tC=Qy,Ol="flowchart-elk",eC=(t,e)=>{var i;return!!(/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&((i=e==null?void 0:e.flowchart)==null?void 0:i.defaultRenderer)==="elk")},iC=async()=>{const{diagram:t}=await J(()=>import("./flowchart-elk-definition-e097735e-aDa6k5ld.js"),__vite__mapDeps([34,4,8,9,10,11,12,2]));return{id:Ol,diagram:t}},rC={id:Ol,detector:eC,loader:iC},nC=rC,Ml="timeline",oC=t=>/^\s*timeline/.test(t),sC=async()=>{const{diagram:t}=await J(()=>import("./timeline-definition-732a2638-SVdJN6QQ.js"),__vite__mapDeps([35,21,12,2]));return{id:Ml,diagram:t}},aC={id:Ml,detector:oC,loader:sC},lC=aC,$l="mindmap",hC=t=>/^\s*mindmap/.test(t),cC=async()=>{const{diagram:t}=await J(()=>import("./mindmap-definition-617cf8dd-IzO8d3I0.js"),__vite__mapDeps([36,9,2]));return{id:$l,diagram:t}},uC={id:$l,detector:hC,loader:cC},fC=uC,Il="sankey",dC=t=>/^\s*sankey-beta/.test(t),pC=async()=>{const{diagram:t}=await J(()=>import("./sankeyDiagram-6db3d513-8ESTXLkU.js"),__vite__mapDeps([37,22,18,2]));return{id:Il,diagram:t}},gC={id:Il,detector:dC,loader:pC},mC=gC;let vs=!1;const Jn=()=>{vs||(vs=!0,ar("error",tC,t=>t.toLowerCase().trim()==="error"),ar("---",{db:{clear:()=>{}},styles:{},renderer:{draw:()=>{}},parser:{parser:{yy:{}},parse:()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")}},init:()=>null},t=>t.toLowerCase().trimStart().startsWith("---")),il(b_,_y,dy,M_,z_,j_,V_,oy,hy,nC,F_,S_,fC,lC,N_,Sy,by,Fy,Z_,mC,ey))};class Dl{constructor(e,i={}){this.text=e,this.metadata=i,this.type="graph",this.text+=` +`);const r=Ky(e);r.attr("viewBox","0 0 2412 512"),Ll(r,100,512,!0);const n=r.append("g");n.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),n.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),n.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),n.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),n.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),n.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),n.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),n.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${i}`)},El={draw:Zy},Jy=El,Qy={db:{},renderer:El,parser:{parser:{yy:{}},parse:()=>{}}},tC=Qy,Ol="flowchart-elk",eC=(t,e)=>{var i;return!!(/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&((i=e==null?void 0:e.flowchart)==null?void 0:i.defaultRenderer)==="elk")},iC=async()=>{const{diagram:t}=await J(()=>import("./flowchart-elk-definition-e097735e-Zb7AIGeW.js"),__vite__mapDeps([34,4,8,9,10,11,12,2]));return{id:Ol,diagram:t}},rC={id:Ol,detector:eC,loader:iC},nC=rC,Ml="timeline",oC=t=>/^\s*timeline/.test(t),sC=async()=>{const{diagram:t}=await J(()=>import("./timeline-definition-732a2638-sTxw8mS_.js"),__vite__mapDeps([35,21,12,2]));return{id:Ml,diagram:t}},aC={id:Ml,detector:oC,loader:sC},lC=aC,$l="mindmap",hC=t=>/^\s*mindmap/.test(t),cC=async()=>{const{diagram:t}=await J(()=>import("./mindmap-definition-617cf8dd-gkffgRdL.js"),__vite__mapDeps([36,9,2]));return{id:$l,diagram:t}},uC={id:$l,detector:hC,loader:cC},fC=uC,Il="sankey",dC=t=>/^\s*sankey-beta/.test(t),pC=async()=>{const{diagram:t}=await J(()=>import("./sankeyDiagram-6db3d513-FtDAma5v.js"),__vite__mapDeps([37,22,18,2]));return{id:Il,diagram:t}},gC={id:Il,detector:dC,loader:pC},mC=gC;let vs=!1;const Jn=()=>{vs||(vs=!0,ar("error",tC,t=>t.toLowerCase().trim()==="error"),ar("---",{db:{clear:()=>{}},styles:{},renderer:{draw:()=>{}},parser:{parser:{yy:{}},parse:()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")}},init:()=>null},t=>t.toLowerCase().trimStart().startsWith("---")),il(b_,_y,dy,M_,z_,j_,V_,oy,hy,nC,F_,S_,fC,lC,N_,Sy,by,Fy,Z_,mC,ey))};class Dl{constructor(e,i={}){this.text=e,this.metadata=i,this.type="graph",this.text+=` `;const r=$t();try{this.type=Ar(e,r)}catch(o){this.type="error",this.detectError=o}const n=Zn(this.type);E.debug("Type "+this.type),this.db=n.db,this.renderer=n.renderer,this.parser=n.parser,this.parser.parser.yy=this.db,this.init=n.init,this.parse()}parse(){var e,i,r,n,o;if(this.detectError)throw this.detectError;(i=(e=this.db).clear)==null||i.call(e);const s=$t();(r=this.init)==null||r.call(this,s),this.metadata.title&&((o=(n=this.db).setDiagramTitle)==null||o.call(n,this.metadata.title)),this.parser.parse(this.text)}async render(e,i){await this.renderer.draw(this.text,e,i,this)}getParser(){return this.parser}getType(){return this.type}}const Qn=async(t,e={})=>{const i=Ar(t,$t());try{Zn(i)}catch{const n=q0(i);if(!n)throw new el(`Diagram ${i} not found.`);const{id:o,diagram:s}=await n();ar(o,s)}return new Dl(t,e)};let bn=[];const p1=t=>{bn.push(t)},_C=()=>{bn.forEach(t=>{t()}),bn=[]},yC="graphics-document document";function CC(t,e){t.attr("role",yC),e!==""&&t.attr("aria-roledescription",e)}function xC(t,e,i,r){if(t.insert!==void 0){if(i){const n=`chart-desc-${r}`;t.attr("aria-describedby",n),t.insert("desc",":first-child").attr("id",n).text(i)}if(e){const n=`chart-title-${r}`;t.attr("aria-labelledby",n),t.insert("title",":first-child").attr("id",n).text(e)}}}const bC=t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart();/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function Nl(t){return typeof t>"u"||t===null}function TC(t){return typeof t=="object"&&t!==null}function vC(t){return Array.isArray(t)?t:Nl(t)?[]:[t]}function kC(t,e){var i,r,n,o;if(e)for(o=Object.keys(e),i=0,r=o.length;ia&&(o=" ... ",e=r-a+o.length),i-r>a&&(s=" ...",i=r+a-s.length),{str:o+t.slice(e,i).replace(/\t/g,"→")+s,pos:r-e+o.length}}function Zr(t,e){return ht.repeat(" ",e-t.length)+t}function MC(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var i=/\r?\n|\r|\0/g,r=[0],n=[],o,s=-1;o=i.exec(t.buffer);)n.push(o.index),r.push(o.index+o[0].length),t.position<=o.index&&s<0&&(s=r.length-2);s<0&&(s=r.length-1);var a="",l,h,u=Math.min(t.line+e.linesAfter,n.length).toString().length,f=e.maxLength-(e.indent+u+3);for(l=1;l<=e.linesBefore&&!(s-l<0);l++)h=Kr(t.buffer,r[s-l],n[s-l],t.position-(r[s]-r[s-l]),f),a=ht.repeat(" ",e.indent)+Zr((t.line-l+1).toString(),u)+" | "+h.str+` @@ -86,7 +86,7 @@ ${t.themeCSS}`),t.fontFamily!==void 0&&(r+=` */window.addEventListener("load",Ql,!1)}const Vb=function(t){At.parseError=t},ur=[];let Qr=!1;const th=async()=>{if(!Qr){for(Qr=!0;ur.length>0;){const t=ur.shift();if(t)try{await t()}catch(e){E.error("Error executing queue",e)}}Qr=!1}},Gb=async(t,e)=>new Promise((i,r)=>{const n=()=>new Promise((o,s)=>{me.parse(t,e).then(a=>{o(a),i(a)},a=>{var l;E.error("Error parsing",a),(l=At.parseError)==null||l.call(At,a),s(a),r(a)})});ur.push(n),th().catch(r)}),eh=(t,e,i)=>new Promise((r,n)=>{const o=()=>new Promise((s,a)=>{me.render(t,e,i).then(l=>{s(l),r(l)},l=>{var h;E.error("Error parsing",l),(h=At.parseError)==null||h.call(At,l),a(l),n(l)})});ur.push(o),th().catch(n)}),At={startOnLoad:!0,mermaidAPI:me,parse:Gb,render:eh,init:Ub,run:Zl,registerExternalDiagrams:Yb,initialize:Jl,parseError:void 0,contentLoaded:Ql,setParseErrorHandler:Vb,detectType:Ar},g1=Object.freeze(Object.defineProperty({__proto__:null,default:At},Symbol.toStringTag,{value:"Module"}));export{yr as $,mi as A,Ne as B,ir as C,_e as D,Tr as E,cm as F,t0 as G,gi as H,er as I,Bm as J,ym as K,nm as L,za as M,$a as N,eg as O,ig as P,u0 as Q,ls as R,Qi as S,Zg as T,rg as U,Nn as V,Qp as W,lg as X,Re as Y,rm as Z,oe as _,qy as a,$t as a$,rs as a0,Rn as a1,Da as a2,qa as a3,Ha as a4,Zp as a5,Dt as a6,Am as a7,Fm as a8,Dn as a9,Kb as aA,fh as aB,dh as aC,gh as aD,wn as aE,ee as aF,ni as aG,Oo as aH,du as aI,Ky as aJ,n1 as aK,N0 as aL,al as aM,Un as aN,Ln as aO,Qb as aP,i1 as aQ,Po as aR,Ro as aS,r1 as aT,e1 as aU,Zb as aV,Jb as aW,s1 as aX,o1 as aY,t1 as aZ,E0 as a_,_n as aa,gg as ab,Cm as ac,In as ad,Xr as ae,Om as af,yt as ag,Gs as ah,vh as ai,$ as aj,Mt as ak,Sg as al,Ze as am,Mb as an,$f as ao,uh as ap,f1 as aq,a1 as ar,Vy as as,r_ as at,Sn as au,Xs as av,gt as aw,di as ax,su as ay,Js as az,Py as b,p1 as b0,z0 as b1,e_ as b2,Hy as b3,pi as b4,F as b5,O as b6,g1 as b7,Kn as c,ci as d,at as e,nr as f,Ry as g,xt as h,Ll as i,Wn as j,l_ as k,E as l,Is as m,Sr as n,Ef as o,t_ as p,Za as q,V0 as r,Ny as s,Oy as t,d1 as u,zy as v,s_ as w,Wy as x,ti as y,Dy as z}; function __vite__mapDeps(indexes) { if (!__vite__mapDeps.viteFileDeps) { - __vite__mapDeps.viteFileDeps = ["assets/c4Diagram-817c8e44-BMi5WAvg.js","assets/svgDrawCommon-ad5ef572-eI41Wm50.js","assets/app-BrxqtzGY.js","assets/flowDiagram-61eb444c-niCbBEPW.js","assets/flowDb-170db09d-q-5Qwvam.js","assets/layout-1ugHHiNm.js","assets/styles-b966c4ae-H6tCXVxS.js","assets/index-67a42d7d-p9ZYh1Xw.js","assets/edges-80f1ebb6--gcvlmof.js","assets/createText-aebacdfe-JILF3Vy1.js","assets/line-TqRW8de4.js","assets/array-Nw74a44z.js","assets/path-aUcfwwLI.js","assets/flowDiagram-v2-2f8f667a-kIE4L_ig.js","assets/erDiagram-9cfc3649-Q00KLrXp.js","assets/gitGraphDiagram-6b463803-EqEFWtIw.js","assets/ganttDiagram-db6931fb-XdIrq4o4.js","assets/linear-KPN1H-BK.js","assets/init-Hi12RPRh.js","assets/infoDiagram-a336098b-0X44mHNI.js","assets/pieDiagram-a5166659-w0_KZcnm.js","assets/arc-kFrifBKJ.js","assets/ordinal-wXG5obU4.js","assets/quadrantDiagram-6c355bbc-ZBJyvn0X.js","assets/xychartDiagram-f746c04c-ewecNIL5.js","assets/requirementDiagram-4038b16c-KuNIOd0s.js","assets/sequenceDiagram-465a088a-dqSP27xN.js","assets/classDiagram-48ab76fb-B-1nPr5u.js","assets/styles-4ba6ed67-HTbB9pbZ.js","assets/classDiagram-v2-8ecb0bfc-6PoF2wPP.js","assets/stateDiagram-b620d43f-w1mYtpVD.js","assets/styles-bbc3fe3b-4cn30Fs-.js","assets/stateDiagram-v2-2671c3d1-xaF1im6Z.js","assets/journeyDiagram-deae3313-I4uOsZJQ.js","assets/flowchart-elk-definition-e097735e-aDa6k5ld.js","assets/timeline-definition-732a2638-SVdJN6QQ.js","assets/mindmap-definition-617cf8dd-IzO8d3I0.js","assets/sankeyDiagram-6db3d513-8ESTXLkU.js"] + __vite__mapDeps.viteFileDeps = ["assets/c4Diagram-817c8e44-EI6Ep_s6.js","assets/svgDrawCommon-ad5ef572-WW-Kq4zg.js","assets/app-oTlYPy8h.js","assets/flowDiagram-61eb444c-DuMoGt9F.js","assets/flowDb-170db09d-41y1nEiW.js","assets/layout-Vth69vlg.js","assets/styles-b966c4ae-B_U_A2hx.js","assets/index-67a42d7d-TJSwJJ1D.js","assets/edges-80f1ebb6-kOLp6foW.js","assets/createText-aebacdfe-8FzA6VnR.js","assets/line-ZVNdUhg2.js","assets/array-Nw74a44z.js","assets/path-aUcfwwLI.js","assets/flowDiagram-v2-2f8f667a-Ob2Hpvk_.js","assets/erDiagram-9cfc3649-wxfL-kce.js","assets/gitGraphDiagram-6b463803-leFcDYEm.js","assets/ganttDiagram-db6931fb-MZTKg1_s.js","assets/linear-JH76Qt4f.js","assets/init-Hi12RPRh.js","assets/infoDiagram-a336098b-7atRS8Yv.js","assets/pieDiagram-a5166659-9IukIHDQ.js","assets/arc-upp1iHW0.js","assets/ordinal-wXG5obU4.js","assets/quadrantDiagram-6c355bbc-mORRzAzd.js","assets/xychartDiagram-f746c04c--73jsRcR.js","assets/requirementDiagram-4038b16c-HXR1kktq.js","assets/sequenceDiagram-465a088a-x_ttBttK.js","assets/classDiagram-48ab76fb-YrjwxOfN.js","assets/styles-4ba6ed67-qSs9rwsT.js","assets/classDiagram-v2-8ecb0bfc-uyvLMQh4.js","assets/stateDiagram-b620d43f-n-a3FIBU.js","assets/styles-bbc3fe3b-H5-300oD.js","assets/stateDiagram-v2-2671c3d1-1xa5Hugt.js","assets/journeyDiagram-deae3313-JgGAP5aa.js","assets/flowchart-elk-definition-e097735e-Zb7AIGeW.js","assets/timeline-definition-732a2638-sTxw8mS_.js","assets/mindmap-definition-617cf8dd-gkffgRdL.js","assets/sankeyDiagram-6db3d513-FtDAma5v.js"] } return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) } \ No newline at end of file diff --git a/assets/mindmap-definition-617cf8dd-IzO8d3I0.js b/assets/mindmap-definition-617cf8dd-gkffgRdL.js similarity index 99% rename from assets/mindmap-definition-617cf8dd-IzO8d3I0.js rename to assets/mindmap-definition-617cf8dd-gkffgRdL.js index ee3daf5..41dfeba 100644 --- a/assets/mindmap-definition-617cf8dd-IzO8d3I0.js +++ b/assets/mindmap-definition-617cf8dd-gkffgRdL.js @@ -1,4 +1,4 @@ -import{aB as Da,aC as _u,d as Ep,c as sn,l as qr,h as ti,t as wp,b4 as xp,b5 as Tp,b6 as Cp}from"./mermaid.core-zy7cM8l9.js";import{c as Dp}from"./createText-aebacdfe-JILF3Vy1.js";import"./app-BrxqtzGY.js";var Uu={exports:{}};(function(pe,le){(function(ee,ce){pe.exports=ce()})(Da,function(){function ee(t){"@babel/helpers - typeof";return ee=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ee(t)}function ce(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function H(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,a=new Array(e);rt.length)&&(e=t.length);for(var r=0,a=new Array(e);r"u"?null:window,$=D?D.navigator:null;D&&D.document;var _=ee(""),Q=ee({}),ne=ee(function(){}),oe=typeof HTMLElement>"u"?"undefined":ee(HTMLElement),J=function(e){return e&&e.instanceString&&Y(e.instanceString)?e.instanceString():null},j=function(e){return e!=null&&ee(e)==_},Y=function(e){return e!=null&&ee(e)===ne},te=function(e){return!de(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},L=function(e){return e!=null&&ee(e)===Q&&!te(e)&&e.constructor===Object},V=function(e){return e!=null&&ee(e)===Q},I=function(e){return e!=null&&ee(e)===ee(1)&&!isNaN(e)},W=function(e){return I(e)&&Math.floor(e)===e},fe=function(e){if(oe!=="undefined")return e!=null&&e instanceof HTMLElement},de=function(e){return Ae(e)||Ne(e)},Ae=function(e){return J(e)==="collection"&&e._private.single},Ne=function(e){return J(e)==="collection"&&!e._private.single},_e=function(e){return J(e)==="core"},tt=function(e){return J(e)==="stylesheet"},vt=function(e){return J(e)==="event"},Pe=function(e){return e==null?!0:!!(e===""||e.match(/^\s+$/))},Ve=function(e){return typeof HTMLElement>"u"?!1:e instanceof HTMLElement},Xe=function(e){return L(e)&&I(e.x1)&&I(e.x2)&&I(e.y1)&&I(e.y2)},rt=function(e){return V(e)&&Y(e.then)},ft=function(){return $&&$.userAgent.match(/msie|trident|edge/i)},at=function(e,r){r||(r=function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var i=[],s=0;sr?1:0},ju=function(e,r){return-1*ji(e,r)},Ue=Object.assign!=null?Object.assign.bind(Object):function(t){for(var e=arguments,r=1;r1&&(y-=1),y<1/6?v+(p-v)*6*y:y<1/2?p:y<2/3?v+(p-v)*(2/3-y)*6:v}var h=new RegExp("^"+un+"$").exec(e);if(h){if(a=parseInt(h[1]),a<0?a=(360- -1*a%360)%360:a>360&&(a=a%360),a/=360,n=parseFloat(h[2]),n<0||n>100||(n=n/100,i=parseFloat(h[3]),i<0||i>100)||(i=i/100,s=h[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(n===0)o=l=u=Math.round(i*255);else{var c=i<.5?i*(1+n):i+n-i*n,d=2*i-c;o=Math.round(255*f(d,c,a+1/3)),l=Math.round(255*f(d,c,a)),u=Math.round(255*f(d,c,a-1/3))}r=[o,l,u,s]}return r},rl=function(e){var r,a=new RegExp("^"+dr+"$").exec(e);if(a){r=[];for(var n=[],i=1;i<=3;i++){var s=a[i];if(s[s.length-1]==="%"&&(n[i]=!0),s=parseFloat(s),n[i]&&(s=s/100*255),s<0||s>255)return;r.push(Math.floor(s))}var o=n[1]||n[2]||n[3],l=n[1]&&n[2]&&n[3];if(o&&!l)return;var u=a[4];if(u!==void 0){if(u=parseFloat(u),u<0||u>1)return;r.push(u)}}return r},al=function(e){return il[e.toLowerCase()]},nl=function(e){return(te(e)?e:null)||al(e)||el(e)||rl(e)||tl(e)},il={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},es=function(e){for(var r=e.map,a=e.keys,n=a.length,i=0;i=e||x<0||h&&R>=i}function g(){var A=ri();if(y(A))return m(A);o=setTimeout(g,p(A))}function m(A){return o=void 0,c&&a?d(A):(a=n=void 0,s)}function b(){o!==void 0&&clearTimeout(o),u=0,a=l=n=o=void 0}function E(){return o===void 0?s:m(ri())}function N(){var A=ri(),x=y(A);if(a=arguments,n=this,l=A,x){if(o===void 0)return v(l);if(h)return clearTimeout(o),o=setTimeout(g,e),d(l)}return o===void 0&&(o=setTimeout(g,e)),s}return N.cancel=b,N.flush=E,N}var fn=Ul,ai=D?D.performance:null,os=ai&&ai.now?function(){return ai.now()}:function(){return Date.now()},Yl=function(){if(D){if(D.requestAnimationFrame)return function(t){D.requestAnimationFrame(t)};if(D.mozRequestAnimationFrame)return function(t){D.mozRequestAnimationFrame(t)};if(D.webkitRequestAnimationFrame)return function(t){D.webkitRequestAnimationFrame(t)};if(D.msRequestAnimationFrame)return function(t){D.msRequestAnimationFrame(t)}}return function(t){t&&setTimeout(function(){t(os())},1e3/60)}}(),hn=function(e){return Yl(e)},gr=os,Jr=9261,us=65599,Na=5381,ls=function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Jr,a=r,n;n=e.next(),!n.done;)a=a*us+n.value|0;return a},Ma=function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Jr;return r*us+e|0},Ia=function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Na;return(r<<5)+r+e|0},Hl=function(e,r){return e*2097152+r},wr=function(e){return e[0]*2097152+e[1]},cn=function(e,r){return[Ma(e[0],r[0]),Ia(e[1],r[1])]},Xl=function(e,r){var a={value:0,done:!1},n=0,i=e.length,s={next:function(){return n=0&&!(e[n]===r&&(e.splice(n,1),a));n--);},si=function(e){e.splice(0,e.length)},jl=function(e,r){for(var a=0;a"u"?"undefined":ee(Set))!==tf?Set:rf,dn=function(e,r){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||r===void 0||!_e(e)){Tt("An element must have a core reference and parameters set");return}var n=r.group;if(n==null&&(r.data&&r.data.source!=null&&r.data.target!=null?n="edges":n="nodes"),n!=="nodes"&&n!=="edges"){Tt("An element must be of type `nodes` or `edges`; you specified `"+n+"`");return}this.length=1,this[0]=this;var i=this._private={cy:e,single:!0,data:r.data||{},position:r.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:n,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!r.selected,selectable:r.selectable===void 0?!0:!!r.selectable,locked:!!r.locked,grabbed:!1,grabbable:r.grabbable===void 0?!0:!!r.grabbable,pannable:r.pannable===void 0?n==="edges":!!r.pannable,active:!1,classes:new jr,animation:{current:[],queue:[]},rscratch:{},scratch:r.scratch||{},edges:[],children:[],parent:r.parent&&r.parent.isNode()?r.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(i.position.x==null&&(i.position.x=0),i.position.y==null&&(i.position.y=0),r.renderedPosition){var s=r.renderedPosition,o=e.pan(),l=e.zoom();i.position={x:(s.x-o.x)/l,y:(s.y-o.y)/l}}var u=[];te(r.classes)?u=r.classes:j(r.classes)&&(u=r.classes.split(/\s+/));for(var f=0,h=u.length;fm?1:0},f=function(g,m,b,E,N){var A;if(b==null&&(b=0),N==null&&(N=a),b<0)throw new Error("lo must be non-negative");for(E==null&&(E=g.length);bB;0<=B?C++:C--)R.push(C);return R}).apply(this).reverse(),x=[],E=0,N=A.length;Ez;0<=z?++R:--R)M.push(s(g,b));return M},p=function(g,m,b,E){var N,A,x;for(E==null&&(E=a),N=g[b];b>m;){if(x=b-1>>1,A=g[x],E(N,A)<0){g[b]=A,b=x;continue}break}return g[b]=N},y=function(g,m,b){var E,N,A,x,R;for(b==null&&(b=a),N=g.length,R=m,A=g[m],E=2*m+1;E0;){var A=m.pop(),x=y(A),R=A.id();if(c[R]=x,x!==1/0)for(var C=A.neighborhood().intersect(v),B=0;B0)for(ie.unshift(Z);h[ge];){var se=h[ge];ie.unshift(se.edge),ie.unshift(se.node),ue=se.node,ge=ue.id()}return o.spawn(ie)}}}},of={kruskal:function(e){e=e||function(b){return 1};for(var r=this.byGroup(),a=r.nodes,n=r.edges,i=a.length,s=new Array(i),o=a,l=function(E){for(var N=0;N0;){if(N(),x++,E===f){for(var R=[],C=i,B=f,z=g[B];R.unshift(C),z!=null&&R.unshift(z),C=y[B],C!=null;)B=C.id(),z=g[B];return{found:!0,distance:h[E],path:this.spawn(R),steps:x}}d[E]=!0;for(var M=b._private.edges,X=0;Xz&&(v[B]=z,m[B]=C,b[B]=N),!i){var M=C*f+R;!i&&v[M]>z&&(v[M]=z,m[M]=R,b[M]=N)}}}for(var X=0;X1&&arguments[1]!==void 0?arguments[1]:s,je=b(ke),Ze=[],Ye=je;;){if(Ye==null)return r.spawn();var ct=m(Ye),De=ct.edge,k=ct.pred;if(Ze.unshift(Ye[0]),Ye.same(ze)&&Ze.length>0)break;De!=null&&Ze.unshift(De),Ye=k}return l.spawn(Ze)},A=0;A=0;f--){var h=u[f],c=h[1],d=h[2];(r[c]===o&&r[d]===l||r[c]===l&&r[d]===o)&&u.splice(f,1)}for(var v=0;vn;){var i=Math.floor(Math.random()*r.length);r=gf(i,e,r),a--}return r},pf={kargerStein:function(){var e=this,r=this.byGroup(),a=r.nodes,n=r.edges;n.unmergeBy(function(ie){return ie.isLoop()});var i=a.length,s=n.length,o=Math.ceil(Math.pow(Math.log(i)/Math.LN2,2)),l=Math.floor(i/df);if(i<2){Tt("At least 2 nodes are required for Karger-Stein algorithm");return}for(var u=[],f=0;f1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=1/0,i=r;i1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=-1/0,i=r;i1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=0,i=0,s=r;s1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;n?e=e.slice(r,a):(a0&&e.splice(0,r));for(var o=0,l=e.length-1;l>=0;l--){var u=e[l];s?isFinite(u)||(e[l]=-1/0,o++):e.splice(l,1)}i&&e.sort(function(c,d){return c-d});var f=e.length,h=Math.floor(f/2);return f%2!==0?e[h+1+o]:(e[h-1+o]+e[h+o])/2},xf=function(e){return Math.PI*e/180},pn=function(e,r){return Math.atan2(r,e)-Math.PI/2},ui=Math.log2||function(t){return Math.log(t)/Math.log(2)},bs=function(e){return e>0?1:e<0?-1:0},Br=function(e,r){return Math.sqrt(Fr(e,r))},Fr=function(e,r){var a=r.x-e.x,n=r.y-e.y;return a*a+n*n},Tf=function(e){for(var r=e.length,a=0,n=0;n=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},Df=function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},Sf=function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},Lf=function(e,r){e.x1=Math.min(e.x1,r.x1),e.x2=Math.max(e.x2,r.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,r.y1),e.y2=Math.max(e.y2,r.y2),e.h=e.y2-e.y1},Af=function(e,r,a){e.x1=Math.min(e.x1,r),e.x2=Math.max(e.x2,r),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,a),e.y2=Math.max(e.y2,a),e.h=e.y2-e.y1},yn=function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=r,e.x2+=r,e.y1-=r,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},li=function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],a,n,i,s;if(r.length===1)a=n=i=s=r[0];else if(r.length===2)a=i=r[0],s=n=r[1];else if(r.length===4){var o=w(r,4);a=o[0],n=o[1],i=o[2],s=o[3]}return e.x1-=s,e.x2+=n,e.y1-=a,e.y2+=i,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},Es=function(e,r){e.x1=r.x1,e.y1=r.y1,e.x2=r.x2,e.y2=r.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},fi=function(e,r){return!(e.x1>r.x2||r.x1>e.x2||e.x2r.y2||r.y1>e.y2)},ra=function(e,r,a){return e.x1<=r&&r<=e.x2&&e.y1<=a&&a<=e.y2},Of=function(e,r){return ra(e,r.x,r.y)},ws=function(e,r){return ra(e,r.x1,r.y1)&&ra(e,r.x2,r.y2)},xs=function(e,r,a,n,i,s,o){var l=za(i,s),u=i/2,f=s/2,h;{var c=a-u+l-o,d=n-f-o,v=a+u-l+o,p=d;if(h=Cr(e,r,a,n,c,d,v,p,!1),h.length>0)return h}{var y=a+u+o,g=n-f+l-o,m=y,b=n+f-l+o;if(h=Cr(e,r,a,n,y,g,m,b,!1),h.length>0)return h}{var E=a-u+l-o,N=n+f+o,A=a+u-l+o,x=N;if(h=Cr(e,r,a,n,E,N,A,x,!1),h.length>0)return h}{var R=a-u-o,C=n-f+l-o,B=R,z=n+f-l+o;if(h=Cr(e,r,a,n,R,C,B,z,!1),h.length>0)return h}var M;{var X=a-u+l,F=n-f+l;if(M=Ba(e,r,a,n,X,F,l+o),M.length>0&&M[0]<=X&&M[1]<=F)return[M[0],M[1]]}{var re=a+u-l,q=n-f+l;if(M=Ba(e,r,a,n,re,q,l+o),M.length>0&&M[0]>=re&&M[1]<=q)return[M[0],M[1]]}{var Z=a+u-l,ie=n+f-l;if(M=Ba(e,r,a,n,Z,ie,l+o),M.length>0&&M[0]>=Z&&M[1]>=ie)return[M[0],M[1]]}{var ue=a-u+l,ge=n+f-l;if(M=Ba(e,r,a,n,ue,ge,l+o),M.length>0&&M[0]<=ue&&M[1]>=ge)return[M[0],M[1]]}return[]},Nf=function(e,r,a,n,i,s,o){var l=o,u=Math.min(a,i),f=Math.max(a,i),h=Math.min(n,s),c=Math.max(n,s);return u-l<=e&&e<=f+l&&h-l<=r&&r<=c+l},Mf=function(e,r,a,n,i,s,o,l,u){var f={x1:Math.min(a,o,i)-u,x2:Math.max(a,o,i)+u,y1:Math.min(n,l,s)-u,y2:Math.max(n,l,s)+u};return!(ef.x2||rf.y2)},If=function(e,r,a,n){a-=n;var i=r*r-4*e*a;if(i<0)return[];var s=Math.sqrt(i),o=2*e,l=(-r+s)/o,u=(-r-s)/o;return[l,u]},Rf=function(e,r,a,n,i){var s=1e-5;e===0&&(e=s),r/=e,a/=e,n/=e;var o,l,u,f,h,c,d,v;if(l=(3*a-r*r)/9,u=-(27*n)+r*(9*a-2*(r*r)),u/=54,o=l*l*l+u*u,i[1]=0,d=r/3,o>0){h=u+Math.sqrt(o),h=h<0?-Math.pow(-h,1/3):Math.pow(h,1/3),c=u-Math.sqrt(o),c=c<0?-Math.pow(-c,1/3):Math.pow(c,1/3),i[0]=-d+h+c,d+=(h+c)/2,i[4]=i[2]=-d,d=Math.sqrt(3)*(-c+h)/2,i[3]=d,i[5]=-d;return}if(i[5]=i[3]=0,o===0){v=u<0?-Math.pow(-u,1/3):Math.pow(u,1/3),i[0]=-d+2*v,i[4]=i[2]=-(v+d);return}l=-l,f=l*l*l,f=Math.acos(u/Math.sqrt(f)),v=2*Math.sqrt(l),i[0]=-d+v*Math.cos(f/3),i[2]=-d+v*Math.cos((f+2*Math.PI)/3),i[4]=-d+v*Math.cos((f+4*Math.PI)/3)},kf=function(e,r,a,n,i,s,o,l){var u=1*a*a-4*a*i+2*a*o+4*i*i-4*i*o+o*o+n*n-4*n*s+2*n*l+4*s*s-4*s*l+l*l,f=1*9*a*i-3*a*a-3*a*o-6*i*i+3*i*o+9*n*s-3*n*n-3*n*l-6*s*s+3*s*l,h=1*3*a*a-6*a*i+a*o-a*e+2*i*i+2*i*e-o*e+3*n*n-6*n*s+n*l-n*r+2*s*s+2*s*r-l*r,c=1*a*i-a*a+a*e-i*e+n*s-n*n+n*r-s*r,d=[];Rf(u,f,h,c,d);for(var v=1e-7,p=[],y=0;y<6;y+=2)Math.abs(d[y+1])=0&&d[y]<=1&&p.push(d[y]);p.push(1),p.push(0);for(var g=-1,m,b,E,N=0;N=0?Eu?(e-i)*(e-i)+(r-s)*(r-s):f-c},Ht=function(e,r,a){for(var n,i,s,o,l,u=0,f=0;f=e&&e>=s||n<=e&&e<=s)l=(e-n)/(s-n)*(o-i)+i,l>r&&u++;else continue;return u%2!==0},pr=function(e,r,a,n,i,s,o,l,u){var f=new Array(a.length),h;l[0]!=null?(h=Math.atan(l[1]/l[0]),l[0]<0?h=h+Math.PI/2:h=-h-Math.PI/2):h=l;for(var c=Math.cos(-h),d=Math.sin(-h),v=0;v0){var y=Cs(f,-u);p=Ts(y)}else p=f;return Ht(e,r,p)},Bf=function(e,r,a,n,i,s,o){for(var l=new Array(a.length),u=s/2,f=o/2,h=vi(s,o),c=h*h,d=0;d=0&&y<=1&&m.push(y),g>=0&&g<=1&&m.push(g),m.length===0)return[];var b=m[0]*l[0]+e,E=m[0]*l[1]+r;if(m.length>1){if(m[0]==m[1])return[b,E];var N=m[1]*l[0]+e,A=m[1]*l[1]+r;return[b,E,N,A]}else return[b,E]},hi=function(e,r,a){return r<=e&&e<=a||a<=e&&e<=r?e:e<=r&&r<=a||a<=r&&r<=e?r:a},Cr=function(e,r,a,n,i,s,o,l,u){var f=e-i,h=a-e,c=o-i,d=r-s,v=n-r,p=l-s,y=c*d-p*f,g=h*d-v*f,m=p*h-c*v;if(m!==0){var b=y/m,E=g/m,N=.001,A=0-N,x=1+N;return A<=b&&b<=x&&A<=E&&E<=x?[e+b*h,r+b*v]:u?[e+b*h,r+b*v]:[]}else return y===0||g===0?hi(e,a,o)===o?[o,l]:hi(e,a,i)===i?[i,s]:hi(i,o,a)===a?[a,n]:[]:[]},Fa=function(e,r,a,n,i,s,o,l){var u=[],f,h=new Array(a.length),c=!0;s==null&&(c=!1);var d;if(c){for(var v=0;v0){var p=Cs(h,-l);d=Ts(p)}else d=h}else d=a;for(var y,g,m,b,E=0;E2){for(var q=[u[0],u[1]],Z=Math.pow(q[0]-e,2)+Math.pow(q[1]-r,2),ie=1;ief&&(f=E)},get:function(b){return u[b]}},c=0;c0?q=re.edgesTo(F)[0]:q=F.edgesTo(re)[0];var Z=n(q);F=F.id(),R[F]>R[M]+Z&&(R[F]=R[M]+Z,C.nodes.indexOf(F)<0?C.push(F):C.updateItem(F),x[F]=0,A[F]=[]),R[F]==R[M]+Z&&(x[F]=x[F]+x[M],A[F].push(M))}else for(var ie=0;ie0;){for(var ve=N.pop(),ye=0;ye0&&o.push(a[l]);o.length!==0&&i.push(n.collection(o))}return i},Jf=function(e,r){for(var a=0;a5&&arguments[5]!==void 0?arguments[5]:th,o=n,l,u,f=0;f=2?Ga(e,r,a,0,Rs,rh):Ga(e,r,a,0,Is)},squaredEuclidean:function(e,r,a){return Ga(e,r,a,0,Rs)},manhattan:function(e,r,a){return Ga(e,r,a,0,Is)},max:function(e,r,a){return Ga(e,r,a,-1/0,ah)}};ia["squared-euclidean"]=ia.squaredEuclidean,ia.squaredeuclidean=ia.squaredEuclidean;function bn(t,e,r,a,n,i){var s;return Y(t)?s=t:s=ia[t]||ia.euclidean,e===0&&Y(t)?s(n,i):s(e,r,a,n,i)}var nh=At({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),pi=function(e){return nh(e)},En=function(e,r,a,n,i){var s=i!=="kMedoids",o=s?function(h){return a[h]}:function(h){return n[h](a)},l=function(c){return n[c](r)},u=a,f=r;return bn(e,n.length,o,l,u,f)},yi=function(e,r,a){for(var n=a.length,i=new Array(n),s=new Array(n),o=new Array(r),l=null,u=0;ua)return!1}return!0},oh=function(e,r,a){for(var n=0;no&&(o=r[u][f],l=f);i[l].push(e[u])}for(var h=0;h=i.threshold||i.mode==="dendrogram"&&e.length===1)return!1;var v=r[s],p=r[n[s]],y;i.mode==="dendrogram"?y={left:v,right:p,key:v.key}:y={value:v.value.concat(p.value),key:v.key},e[v.index]=y,e.splice(p.index,1),r[v.key]=y;for(var g=0;ga[p.key][m.key]&&(l=a[p.key][m.key])):i.linkage==="max"?(l=a[v.key][m.key],a[v.key][m.key]0&&n.push(i);return n},$s=function(e,r,a){for(var n=[],i=0;io&&(s=u,o=r[i*e+u])}s>0&&n.push(s)}for(var f=0;fu&&(l=f,u=h)}a[i]=s[l]}return n=$s(e,r,a),n},_s=function(e){for(var r=this.cy(),a=this.nodes(),n=wh(e),i={},s=0;s=z?(M=z,z=F,X=re):F>M&&(M=F);for(var q=0;q0?1:0;x[C%n.minIterations*o+ve]=ye,se+=ye}if(se>0&&(C>=n.minIterations-1||C==n.maxIterations-1)){for(var Te=0,be=0;be1||A>1)&&(o=!0),h[b]=[],m.outgoers().forEach(function(R){R.isEdge()&&h[b].push(R.id())})}else c[b]=[void 0,m.target().id()]}):s.forEach(function(m){var b=m.id();if(m.isNode()){var E=m.degree(!0);E%2&&(l?u?o=!0:u=b:l=b),h[b]=[],m.connectedEdges().forEach(function(N){return h[b].push(N.id())})}else c[b]=[m.source().id(),m.target().id()]});var d={found:!1,trail:void 0};if(o)return d;if(u&&l)if(i){if(f&&u!=f)return d;f=u}else{if(f&&u!=f&&l!=f)return d;f||(f=u)}else f||(f=s[0].id());var v=function(b){for(var E=b,N=[b],A,x,R;h[E].length;)A=h[E].shift(),x=c[A][0],R=c[A][1],E!=R?(h[R]=h[R].filter(function(C){return C!=A}),E=R):!i&&E!=x&&(h[x]=h[x].filter(function(C){return C!=A}),E=x),N.unshift(A),N.unshift(E);return N},p=[],y=[];for(y=v(f);y.length!=1;)h[y[0]].length==0?(p.unshift(s.getElementById(y.shift())),p.unshift(s.getElementById(y.shift()))):y=v(y.shift()).concat(y);p.unshift(s.getElementById(y.shift()));for(var g in h)if(h[g].length)return d;return d.found=!0,d.trail=this.spawn(p,!0),d}},xn=function(){var e=this,r={},a=0,n=0,i=[],s=[],o={},l=function(c,d){for(var v=s.length-1,p=[],y=e.spawn();s[v].x!=c||s[v].y!=d;)p.push(s.pop().edge),v--;p.push(s.pop().edge),p.forEach(function(g){var m=g.connectedNodes().intersection(e);y.merge(g),m.forEach(function(b){var E=b.id(),N=b.connectedEdges().intersection(e);y.merge(b),r[E].cutVertex?y.merge(N.filter(function(A){return A.isLoop()})):y.merge(N)})}),i.push(y)},u=function h(c,d,v){c===v&&(n+=1),r[d]={id:a,low:a++,cutVertex:!1};var p=e.getElementById(d).connectedEdges().intersection(e);if(p.size()===0)i.push(e.spawn(e.getElementById(d)));else{var y,g,m,b;p.forEach(function(E){y=E.source().id(),g=E.target().id(),m=y===d?g:y,m!==v&&(b=E.id(),o[b]||(o[b]=!0,s.push({x:d,y:m,edge:E})),m in r?r[d].low=Math.min(r[d].low,r[m].id):(h(c,m,d),r[d].low=Math.min(r[d].low,r[m].low),r[d].id<=r[m].low&&(r[d].cutVertex=!0,l(d,m))))})}};e.forEach(function(h){if(h.isNode()){var c=h.id();c in r||(n=0,u(c,c),r[c].cutVertex=n>1)}});var f=Object.keys(r).filter(function(h){return r[h].cutVertex}).map(function(h){return e.getElementById(h)});return{cut:e.spawn(f),components:i}},Oh={hopcroftTarjanBiconnected:xn,htbc:xn,htb:xn,hopcroftTarjanBiconnectedComponents:xn},Tn=function(){var e=this,r={},a=0,n=[],i=[],s=e.spawn(e),o=function l(u){i.push(u),r[u]={index:a,low:a++,explored:!1};var f=e.getElementById(u).connectedEdges().intersection(e);if(f.forEach(function(p){var y=p.target().id();y!==u&&(y in r||l(y),r[y].explored||(r[u].low=Math.min(r[u].low,r[y].low)))}),r[u].index===r[u].low){for(var h=e.spawn();;){var c=i.pop();if(h.merge(e.getElementById(c)),r[c].low=r[u].index,r[c].explored=!0,c===u)break}var d=h.edgesWith(h),v=h.merge(d);n.push(v),s=s.difference(v)}};return e.forEach(function(l){if(l.isNode()){var u=l.id();u in r||o(u)}}),{cut:s,components:n}},Nh={tarjanStronglyConnected:Tn,tsc:Tn,tscc:Tn,tarjanStronglyConnectedComponents:Tn},Us={};[Ra,sf,of,lf,hf,vf,pf,$f,aa,na,gi,eh,vh,bh,Sh,Ah,Oh,Nh].forEach(function(t){Ue(Us,t)});/*! Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) diff --git a/assets/not_recommended_qq.html-_--W0-VY.js b/assets/not_recommended_qq.html-CiG918se.js similarity index 96% rename from assets/not_recommended_qq.html-_--W0-VY.js rename to assets/not_recommended_qq.html-CiG918se.js index 547fb5d..b8b73a3 100644 --- a/assets/not_recommended_qq.html-_--W0-VY.js +++ b/assets/not_recommended_qq.html-CiG918se.js @@ -1 +1 @@ -import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as e,c as l,e as t}from"./app-BrxqtzGY.js";const a={},r=t('

            为什么不建议私聊

            • 1、QQ 私聊不好追溯和整理,很难形成文档,很多重复问题, 不能对项目有所益处。

            • 2、QQ 沟通效率其实很低下,虽然能回答及时,但是提问门槛太低,提问者不够重视,往往需要回答者循环渐进引导才能大体把问题说清楚,这样很浪费时间。

            • 3、QQ 私聊消息不定时,很容易中断回答者当前工作进程,而 github issue 可以统一处理,这样更节约时间。

            • 4、QQ 私聊其他用户不能参与回答,别人也看不到问题和答案,不利于思维发散和知识传播。

            一般只接受以下无私交友谊关系人员的私聊技术咨询

            • 1、提交过 pr 或其他形式的代码
            • 2、开源过基于 zlmediakit 的项目
            • 3、在 qq 群或 issue 上热心解答过相关技术问题
            • 4、分享过自写的 zlmediakit 相关文档
            • 5、赞助过 zlmediakit 项目或本人
            • 6、做过一切对 zlmediakit 发展和推广有贡献的事情
            ',4),d=[r];function o(c,n){return e(),l("div",null,d)}const h=i(a,[["render",o],["__file","not_recommended_qq.html.vue"]]);export{h as default}; +import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as e,c as l,e as t}from"./app-oTlYPy8h.js";const a={},r=t('

            为什么不建议私聊

            • 1、QQ 私聊不好追溯和整理,很难形成文档,很多重复问题, 不能对项目有所益处。

            • 2、QQ 沟通效率其实很低下,虽然能回答及时,但是提问门槛太低,提问者不够重视,往往需要回答者循环渐进引导才能大体把问题说清楚,这样很浪费时间。

            • 3、QQ 私聊消息不定时,很容易中断回答者当前工作进程,而 github issue 可以统一处理,这样更节约时间。

            • 4、QQ 私聊其他用户不能参与回答,别人也看不到问题和答案,不利于思维发散和知识传播。

            一般只接受以下无私交友谊关系人员的私聊技术咨询

            • 1、提交过 pr 或其他形式的代码
            • 2、开源过基于 zlmediakit 的项目
            • 3、在 qq 群或 issue 上热心解答过相关技术问题
            • 4、分享过自写的 zlmediakit 相关文档
            • 5、赞助过 zlmediakit 项目或本人
            • 6、做过一切对 zlmediakit 发展和推广有贡献的事情
            ',4),d=[r];function o(c,n){return e(),l("div",null,d)}const h=i(a,[["render",o],["__file","not_recommended_qq.html.vue"]]);export{h as default}; diff --git a/assets/not_recommended_qq.html-SK9_7gOI.js b/assets/not_recommended_qq.html-Y9F7iYsf.js similarity index 97% rename from assets/not_recommended_qq.html-SK9_7gOI.js rename to assets/not_recommended_qq.html-Y9F7iYsf.js index ea64b04..06bc4a9 100644 --- a/assets/not_recommended_qq.html-SK9_7gOI.js +++ b/assets/not_recommended_qq.html-Y9F7iYsf.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as i,c as t,e as o}from"./app-BrxqtzGY.js";const n={},s=o('
            1. Private chat on QQ is difficult to trace and organize, making it hard to form documentation. There are often repetitive questions, which do not benefit the project.

            2. The efficiency of communication on QQ is actually quite low. Although it allows for timely responses, the threshold for asking questions is too low. Questioners often need the respondent's progressive guidance to clarify their questions, which wastes a lot of time.

            3. Private chat messages on QQ are not timely and often interrupt the respondent's current work process. In contrast, GitHub issues can be handled in a unified manner, saving more time.

            4. Other users cannot participate in answering questions through private chat on QQ, and others cannot see the questions and answers. This is not conducive to divergent thinking and knowledge dissemination.

            Private chat for technical consultations is generally only accepted from the following individuals with selfless friendship relationships:

            1. Those who have submitted pull requests or other forms of code contributions.
            2. Those who have open-sourced projects based on ZLMediaKit.
            3. Those who have actively answered related technical questions in QQ groups or issues.
            4. Those who have shared self-written ZLMediaKit-related documents.
            5. Those who have sponsored the ZLMediaKit project or the author.
            6. Those who have made any contributions to the development and promotion of ZLMediaKit.
            ',4),a=[s];function r(h,l){return i(),t("div",null,a)}const p=e(n,[["render",r],["__file","not_recommended_qq.html.vue"]]);export{p as default}; +import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as i,c as t,e as o}from"./app-oTlYPy8h.js";const n={},s=o('
            1. Private chat on QQ is difficult to trace and organize, making it hard to form documentation. There are often repetitive questions, which do not benefit the project.

            2. The efficiency of communication on QQ is actually quite low. Although it allows for timely responses, the threshold for asking questions is too low. Questioners often need the respondent's progressive guidance to clarify their questions, which wastes a lot of time.

            3. Private chat messages on QQ are not timely and often interrupt the respondent's current work process. In contrast, GitHub issues can be handled in a unified manner, saving more time.

            4. Other users cannot participate in answering questions through private chat on QQ, and others cannot see the questions and answers. This is not conducive to divergent thinking and knowledge dissemination.

            Private chat for technical consultations is generally only accepted from the following individuals with selfless friendship relationships:

            1. Those who have submitted pull requests or other forms of code contributions.
            2. Those who have open-sourced projects based on ZLMediaKit.
            3. Those who have actively answered related technical questions in QQ groups or issues.
            4. Those who have shared self-written ZLMediaKit-related documents.
            5. Those who have sponsored the ZLMediaKit project or the author.
            6. Those who have made any contributions to the development and promotion of ZLMediaKit.
            ',4),a=[s];function r(h,l){return i(),t("div",null,a)}const p=e(n,[["render",r],["__file","not_recommended_qq.html.vue"]]);export{p as default}; diff --git a/assets/on-demand_push_streaming.html-UrbeRghD.js b/assets/on-demand_push_streaming.html-AlawaJGx.js similarity index 88% rename from assets/on-demand_push_streaming.html-UrbeRghD.js rename to assets/on-demand_push_streaming.html-AlawaJGx.js index 2b757df..36a7b26 100644 --- a/assets/on-demand_push_streaming.html-UrbeRghD.js +++ b/assets/on-demand_push_streaming.html-AlawaJGx.js @@ -1 +1 @@ -import{_ as t}from"./on-demand_push_streaming_zh-CK4xj1dh.js";import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{o,c as a,a as e}from"./app-BrxqtzGY.js";const s={},i=e("p",null,"The MediaServer process of ZLMediaKit can be used to implement on-demand push streaming:",-1),r=e("figure",null,[e("img",{src:t,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")],-1),_=[i,r];function m(c,l){return o(),a("div",null,_)}const f=n(s,[["render",m],["__file","on-demand_push_streaming.html.vue"]]);export{f as default}; +import{_ as t}from"./on-demand_push_streaming_zh-CK4xj1dh.js";import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{o,c as a,a as e}from"./app-oTlYPy8h.js";const s={},i=e("p",null,"The MediaServer process of ZLMediaKit can be used to implement on-demand push streaming:",-1),r=e("figure",null,[e("img",{src:t,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")],-1),_=[i,r];function m(c,l){return o(),a("div",null,_)}const f=n(s,[["render",m],["__file","on-demand_push_streaming.html.vue"]]);export{f as default}; diff --git a/assets/on-demand_push_streaming.html-YM_cjoRG.js b/assets/on-demand_push_streaming.html-efCX-3qM.js similarity index 87% rename from assets/on-demand_push_streaming.html-YM_cjoRG.js rename to assets/on-demand_push_streaming.html-efCX-3qM.js index 0430199..edfd3b6 100644 --- a/assets/on-demand_push_streaming.html-YM_cjoRG.js +++ b/assets/on-demand_push_streaming.html-efCX-3qM.js @@ -1 +1 @@ -import{_ as t}from"./on-demand_push_streaming_zh-CK4xj1dh.js";import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as n,a as e}from"./app-BrxqtzGY.js";const _={},i=e("p",null,"使用 ZLMediaKit 的 MediaServer 进程可以实现按需推流:",-1),s=e("figure",null,[e("img",{src:t,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")],-1),r=[i,s];function c(l,m){return a(),n("div",null,r)}const u=o(_,[["render",c],["__file","on-demand_push_streaming.html.vue"]]);export{u as default}; +import{_ as t}from"./on-demand_push_streaming_zh-CK4xj1dh.js";import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as n,a as e}from"./app-oTlYPy8h.js";const _={},i=e("p",null,"使用 ZLMediaKit 的 MediaServer 进程可以实现按需推流:",-1),s=e("figure",null,[e("img",{src:t,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")],-1),r=[i,s];function c(l,m){return a(),n("div",null,r)}const u=o(_,[["render",c],["__file","on-demand_push_streaming.html.vue"]]);export{u as default}; diff --git a/assets/on-demand_streaming.html-nFxU5UDk.js b/assets/on-demand_streaming.html-6YNYtYZR.js similarity index 88% rename from assets/on-demand_streaming.html-nFxU5UDk.js rename to assets/on-demand_streaming.html-6YNYtYZR.js index bf3129c..2bc57a2 100644 --- a/assets/on-demand_streaming.html-nFxU5UDk.js +++ b/assets/on-demand_streaming.html-6YNYtYZR.js @@ -1 +1 @@ -import{_ as t}from"./on-demand_streaming_zh-h19pTlmd.js";import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{o,c as a,a as e}from"./app-BrxqtzGY.js";const i={},s=e("p",null,"The MediaServer process of ZLMediaKit can be used to implement on-demand pull streaming:",-1),r=e("figure",null,[e("img",{src:t,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")],-1),_=[s,r];function m(c,l){return o(),a("div",null,_)}const u=n(i,[["render",m],["__file","on-demand_streaming.html.vue"]]);export{u as default}; +import{_ as t}from"./on-demand_streaming_zh-h19pTlmd.js";import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{o,c as a,a as e}from"./app-oTlYPy8h.js";const i={},s=e("p",null,"The MediaServer process of ZLMediaKit can be used to implement on-demand pull streaming:",-1),r=e("figure",null,[e("img",{src:t,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")],-1),_=[s,r];function m(c,l){return o(),a("div",null,_)}const u=n(i,[["render",m],["__file","on-demand_streaming.html.vue"]]);export{u as default}; diff --git a/assets/on-demand_streaming.html-iLkNMoAM.js b/assets/on-demand_streaming.html-yNrWu3de.js similarity index 87% rename from assets/on-demand_streaming.html-iLkNMoAM.js rename to assets/on-demand_streaming.html-yNrWu3de.js index 273f203..f46beb8 100644 --- a/assets/on-demand_streaming.html-iLkNMoAM.js +++ b/assets/on-demand_streaming.html-yNrWu3de.js @@ -1 +1 @@ -import{_ as t}from"./on-demand_streaming_zh-h19pTlmd.js";import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as n,a as e}from"./app-BrxqtzGY.js";const i={},r=e("p",null,"使用 ZLMediaKit 的 MediaServer 进程可以实现按需拉流:",-1),_=e("figure",null,[e("img",{src:t,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")],-1),s=[r,_];function c(l,m){return a(),n("div",null,s)}const u=o(i,[["render",c],["__file","on-demand_streaming.html.vue"]]);export{u as default}; +import{_ as t}from"./on-demand_streaming_zh-h19pTlmd.js";import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as n,a as e}from"./app-oTlYPy8h.js";const i={},r=e("p",null,"使用 ZLMediaKit 的 MediaServer 进程可以实现按需拉流:",-1),_=e("figure",null,[e("img",{src:t,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")],-1),s=[r,_];function c(l,m){return a(),n("div",null,s)}const u=o(i,[["render",c],["__file","on-demand_streaming.html.vue"]]);export{u as default}; diff --git a/assets/oncetoken.html-0LGtefKi.js b/assets/oncetoken.html-87LqB-OG.js similarity index 99% rename from assets/oncetoken.html-0LGtefKi.js rename to assets/oncetoken.html-87LqB-OG.js index b9476a3..d69c0ce 100644 --- a/assets/oncetoken.html-0LGtefKi.js +++ b/assets/oncetoken.html-87LqB-OG.js @@ -1,4 +1,4 @@ -import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as s,c as a,e as t}from"./app-BrxqtzGY.js";const p={},e=t(`

            Within ZLMediaKit, there is extensive use of an object called onceToken. Many developers are unfamiliar with this utility class, so I will explain its purpose below: The onceToken primarily applies the RAII (Resource Acquisition Is Initialization) concept from C/C++, ensuring the execution of custom code during variable construction and destruction. It is mainly used in the following scenarios:

            1. Used as a global variable to execute specific code during program loading, such as generating default configuration files:

              ////////////HLS-related configurations///////////
              +import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as s,c as a,e as t}from"./app-oTlYPy8h.js";const p={},e=t(`

              Within ZLMediaKit, there is extensive use of an object called onceToken. Many developers are unfamiliar with this utility class, so I will explain its purpose below: The onceToken primarily applies the RAII (Resource Acquisition Is Initialization) concept from C/C++, ensuring the execution of custom code during variable construction and destruction. It is mainly used in the following scenarios:

              1. Used as a global variable to execute specific code during program loading, such as generating default configuration files:

                ////////////HLS-related configurations///////////
                 namespace Hls {
                 #define HLS_FIELD "hls."
                 //HLS segment duration in seconds
                diff --git a/assets/oncetoken.html-MCJaY58Y.js b/assets/oncetoken.html-VjVkUYP3.js
                similarity index 99%
                rename from assets/oncetoken.html-MCJaY58Y.js
                rename to assets/oncetoken.html-VjVkUYP3.js
                index 30f5333..a08477a 100644
                --- a/assets/oncetoken.html-MCJaY58Y.js
                +++ b/assets/oncetoken.html-VjVkUYP3.js
                @@ -1,4 +1,4 @@
                -import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as s,c as a,e as t}from"./app-BrxqtzGY.js";const p={},o=t(`

                ZLMediaKit 里面大量用到了一个名叫onceToken对象, 很多小伙伴对这个工具类不明就里,下面我在此解释下其作用: onceToken 主要使用 C/C++的 RAII 思想,确保在变量构造和析构时执行自定义代码;主要应用场景有如下:

                • 1、作为全局变量用,在程序加载时执行特定代码,例如生成默认配置文件:
                ////////////HLS相关配置///////////
                +import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as s,c as a,e as t}from"./app-oTlYPy8h.js";const p={},o=t(`

                ZLMediaKit 里面大量用到了一个名叫onceToken对象, 很多小伙伴对这个工具类不明就里,下面我在此解释下其作用: onceToken 主要使用 C/C++的 RAII 思想,确保在变量构造和析构时执行自定义代码;主要应用场景有如下:

                • 1、作为全局变量用,在程序加载时执行特定代码,例如生成默认配置文件:
                ////////////HLS相关配置///////////
                 namespace Hls {
                 #define HLS_FIELD "hls."
                 //HLS切片时长,单位秒
                diff --git a/assets/online_test.html-B0vGk4Ng.js b/assets/online_test.html-UiWsenDR.js
                similarity index 87%
                rename from assets/online_test.html-B0vGk4Ng.js
                rename to assets/online_test.html-UiWsenDR.js
                index c4b6a32..e91afbc 100644
                --- a/assets/online_test.html-B0vGk4Ng.js
                +++ b/assets/online_test.html-UiWsenDR.js
                @@ -1 +1 @@
                -import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as r,c as o,a as t,b as s,w as i,d as e}from"./app-BrxqtzGY.js";const d={},c=t("h2",{id:"testing-url",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#testing-url","aria-hidden":"true"},"#"),e(" Testing Url")],-1),_=t("ul",null,[t("li",null,"http/hls/http-flv/ws-flv: http://zlmediakit.com:8888/"),t("li",null,"https: https://zlmediakit.com/"),t("li",null,"rtsp: zlmediakit.com:554"),t("li",null,"rtmp: zlmediakit.com:1935"),t("li",null,"GB28181 UDP/TCP: zlmediakit.com:10000")],-1),h=t("h2",{id:"start-testing",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#start-testing","aria-hidden":"true"},"#"),e(" Start testing")],-1);function u(m,p){const l=n("RouterLink");return r(),o("div",null,[c,_,h,t("p",null,[s(l,{to:"/guide/media_server/push_test.html"},{default:i(()=>[e("Push test")]),_:1}),s(l,{to:"/guide/media_server/play_url_rules.html"},{default:i(()=>[e("Play test")]),_:1})])])}const g=a(d,[["render",u],["__file","online_test.html.vue"]]);export{g as default};
                +import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as r,c as o,a as t,b as s,w as i,d as e}from"./app-oTlYPy8h.js";const d={},c=t("h2",{id:"testing-url",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#testing-url","aria-hidden":"true"},"#"),e(" Testing Url")],-1),_=t("ul",null,[t("li",null,"http/hls/http-flv/ws-flv: http://zlmediakit.com:8888/"),t("li",null,"https: https://zlmediakit.com/"),t("li",null,"rtsp: zlmediakit.com:554"),t("li",null,"rtmp: zlmediakit.com:1935"),t("li",null,"GB28181 UDP/TCP: zlmediakit.com:10000")],-1),h=t("h2",{id:"start-testing",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#start-testing","aria-hidden":"true"},"#"),e(" Start testing")],-1);function u(m,p){const l=n("RouterLink");return r(),o("div",null,[c,_,h,t("p",null,[s(l,{to:"/guide/media_server/push_test.html"},{default:i(()=>[e("Push test")]),_:1}),s(l,{to:"/guide/media_server/play_url_rules.html"},{default:i(()=>[e("Play test")]),_:1})])])}const g=a(d,[["render",u],["__file","online_test.html.vue"]]);export{g as default};
                diff --git a/assets/online_test.html-kfBFI_bL.js b/assets/online_test.html-_0lwAxTN.js
                similarity index 88%
                rename from assets/online_test.html-kfBFI_bL.js
                rename to assets/online_test.html-_0lwAxTN.js
                index c8c3c3a..db2a594 100644
                --- a/assets/online_test.html-kfBFI_bL.js
                +++ b/assets/online_test.html-_0lwAxTN.js
                @@ -1 +1 @@
                -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as s,o as n,c as r,a as e,b as a,w as i,d as t}from"./app-BrxqtzGY.js";const d={},c=e("h2",{id:"测试地址",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#测试地址","aria-hidden":"true"},"#"),t(" 测试地址")],-1),_=e("ul",null,[e("li",null,"http/hls/http-flv/ws-flv 地址: http://zlmediakit.com:8888/"),e("li",null,"https 地址: https://zlmediakit.com/"),e("li",null,"rtsp 地址: zlmediakit.com:554"),e("li",null,"rtmp 地址: zlmediakit.com:1935"),e("li",null,"GB28181 UDP/TCP 地址: zlmediakit.com:10000")],-1),h=e("h2",{id:"开始测试",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#开始测试","aria-hidden":"true"},"#"),t(" 开始测试")],-1);function m(u,p){const l=s("RouterLink");return n(),r("div",null,[c,_,h,e("p",null,[a(l,{to:"/zh/guide/media_server/push_test.html"},{default:i(()=>[t("推流测试")]),_:1}),a(l,{to:"/zh/guide/media_server/play_url_rules.html"},{default:i(()=>[t("播放测试")]),_:1})])])}const v=o(d,[["render",m],["__file","online_test.html.vue"]]);export{v as default};
                +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as s,o as n,c as r,a as e,b as a,w as i,d as t}from"./app-oTlYPy8h.js";const d={},c=e("h2",{id:"测试地址",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#测试地址","aria-hidden":"true"},"#"),t(" 测试地址")],-1),_=e("ul",null,[e("li",null,"http/hls/http-flv/ws-flv 地址: http://zlmediakit.com:8888/"),e("li",null,"https 地址: https://zlmediakit.com/"),e("li",null,"rtsp 地址: zlmediakit.com:554"),e("li",null,"rtmp 地址: zlmediakit.com:1935"),e("li",null,"GB28181 UDP/TCP 地址: zlmediakit.com:10000")],-1),h=e("h2",{id:"开始测试",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#开始测试","aria-hidden":"true"},"#"),t(" 开始测试")],-1);function m(u,p){const l=s("RouterLink");return n(),r("div",null,[c,_,h,e("p",null,[a(l,{to:"/zh/guide/media_server/push_test.html"},{default:i(()=>[t("推流测试")]),_:1}),a(l,{to:"/zh/guide/media_server/play_url_rules.html"},{default:i(()=>[t("播放测试")]),_:1})])])}const v=o(d,[["render",m],["__file","online_test.html.vue"]]);export{v as default};
                diff --git a/assets/performance_testing.html-LDuN76e5.js b/assets/performance_testing.html-Cgq3dIgv.js
                similarity index 98%
                rename from assets/performance_testing.html-LDuN76e5.js
                rename to assets/performance_testing.html-Cgq3dIgv.js
                index aeaf3b4..c48f602 100644
                --- a/assets/performance_testing.html-LDuN76e5.js
                +++ b/assets/performance_testing.html-Cgq3dIgv.js
                @@ -1 +1 @@
                -import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as s,o as d,c as o,a as t,d as e,b as r,w as l,e as c}from"./app-BrxqtzGY.js";const h={},_=t("h2",{id:"_1-latest-performance-test",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#_1-latest-performance-test","aria-hidden":"true"},"#"),e(" 1. Latest Performance Test:")],-1),m=t("h3",{id:"_1-1-test-environment",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#_1-1-test-environment","aria-hidden":"true"},"#"),e(" 1.1 Test Environment")],-1),u=t("li",null,"CPU: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz, 4 cores, 8 threads",-1),g=t("li",null,"Operating System: CentOS release 6.3 (Final)",-1),p=t("li",null,"Memory: 16GB",-1),x=t("li",null,"Network Card: 127.0.0.1",-1),f={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},y=t("li",null,"Compiler: gcc (GCC) 8.2.0",-1),P=t("li",null,"Compilation Type: Release",-1),b=c('

                1.2 Test Data

                There were inaccuracies in the memory usage during the push streaming performance test (due to a multi-GOP caching bug at the time of testing).

                Client TypeStream CountCPUMemoryNetwork IOTheoretical Performance of 4 Physical Cores
                RTSP Play20K160%203M5Gb/sApproximately 100K
                RTSP Play32.2K235%220M7.78Gb/sApproximately 100K
                RTSP Push10K264%760M2.39Gb/sApproximately 30K
                RTMP Play10K148%81M2.33Gb/sApproximately 50K
                RTMP Play30K450%246M7Gb/sApproximately 50K
                RTMP Push10K224%1.6G2.16Gb/sApproximately 30K

                1.3 Detailed Test Data

                ',4),T=t("h2",{id:"_2-earlier-performance-test-records",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#_2-earlier-performance-test-records","aria-hidden":"true"},"#"),e(" 2. Earlier Performance Test Records")],-1),M={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/406",target:"_blank",rel:"noopener noreferrer"},R={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/961",target:"_blank",rel:"noopener noreferrer"},K={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/1271",target:"_blank",rel:"noopener noreferrer"},k=t("h2",{id:"_3-performance-testing-and-optimization",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#_3-performance-testing-and-optimization","aria-hidden":"true"},"#"),e(" 3. Performance Testing and Optimization")],-1),S={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/540",target:"_blank",rel:"noopener noreferrer"};function C(L,G){const a=s("ExternalLinkIcon"),n=s("RouterLink");return d(),o("div",null,[_,m,t("ul",null,[u,g,p,x,t("li",null,[e("Test Stream: "),t("a",f,[e("200kbps.768x320.flv"),r(a)])]),y,P]),b,t("ul",null,[t("li",null,[r(n,{to:"/reference/test/rtmp_pull_stream_performance_test.html"},{default:l(()=>[e("RTMP Pull Stream")]),_:1})]),t("li",null,[r(n,{to:"/reference/test/rtmp_push_stream_performance_test.html"},{default:l(()=>[e("RTMP Push Stream")]),_:1})]),t("li",null,[r(n,{to:"/reference/test/rtsp_pull_stream_performance_test.html"},{default:l(()=>[e("RTSP Pull Stream")]),_:1})]),t("li",null,[r(n,{to:"/reference/test/rtsp_push_stream_performance_test.html"},{default:l(()=>[e("RTSP Push Stream")]),_:1})])]),T,t("ul",null,[t("li",null,[t("a",M,[e("RTMP Pull Stream Performance Test"),r(a)])]),t("li",null,[t("a",R,[e("GB28181 Performance Test"),r(a)])]),t("li",null,[t("a",K,[e("RTSP Audio Pull Stream Performance Test"),r(a)])]),t("li",null,[r(n,{to:"/reference/test/benchmark.html"},{default:l(()=>[e("Outdated Performance Test Records")]),_:1})])]),k,t("ul",null,[t("li",null,[r(n,{to:"/reference/development_log/rtsp_performance_optimization.html"},{default:l(()=>[e("RTSP Performance Optimization and Testing")]),_:1})]),t("li",null,[r(n,{to:"/reference/development_log/hls_high_performance_journey.html"},{default:l(()=>[e("HLS Performance Optimization and Testing")]),_:1})]),t("li",null,[t("a",S,[e("RTMP Performance Optimization"),r(a)])])])])}const z=i(h,[["render",C],["__file","performance_testing.html.vue"]]);export{z as default}; +import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as s,o as d,c as o,a as t,d as e,b as r,w as l,e as c}from"./app-oTlYPy8h.js";const h={},_=t("h2",{id:"_1-latest-performance-test",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#_1-latest-performance-test","aria-hidden":"true"},"#"),e(" 1. Latest Performance Test:")],-1),m=t("h3",{id:"_1-1-test-environment",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#_1-1-test-environment","aria-hidden":"true"},"#"),e(" 1.1 Test Environment")],-1),u=t("li",null,"CPU: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz, 4 cores, 8 threads",-1),g=t("li",null,"Operating System: CentOS release 6.3 (Final)",-1),p=t("li",null,"Memory: 16GB",-1),x=t("li",null,"Network Card: 127.0.0.1",-1),f={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},y=t("li",null,"Compiler: gcc (GCC) 8.2.0",-1),P=t("li",null,"Compilation Type: Release",-1),b=c('

                1.2 Test Data

                There were inaccuracies in the memory usage during the push streaming performance test (due to a multi-GOP caching bug at the time of testing).

                Client TypeStream CountCPUMemoryNetwork IOTheoretical Performance of 4 Physical Cores
                RTSP Play20K160%203M5Gb/sApproximately 100K
                RTSP Play32.2K235%220M7.78Gb/sApproximately 100K
                RTSP Push10K264%760M2.39Gb/sApproximately 30K
                RTMP Play10K148%81M2.33Gb/sApproximately 50K
                RTMP Play30K450%246M7Gb/sApproximately 50K
                RTMP Push10K224%1.6G2.16Gb/sApproximately 30K

                1.3 Detailed Test Data

                ',4),T=t("h2",{id:"_2-earlier-performance-test-records",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#_2-earlier-performance-test-records","aria-hidden":"true"},"#"),e(" 2. Earlier Performance Test Records")],-1),M={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/406",target:"_blank",rel:"noopener noreferrer"},R={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/961",target:"_blank",rel:"noopener noreferrer"},K={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/1271",target:"_blank",rel:"noopener noreferrer"},k=t("h2",{id:"_3-performance-testing-and-optimization",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#_3-performance-testing-and-optimization","aria-hidden":"true"},"#"),e(" 3. Performance Testing and Optimization")],-1),S={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/540",target:"_blank",rel:"noopener noreferrer"};function C(L,G){const a=s("ExternalLinkIcon"),n=s("RouterLink");return d(),o("div",null,[_,m,t("ul",null,[u,g,p,x,t("li",null,[e("Test Stream: "),t("a",f,[e("200kbps.768x320.flv"),r(a)])]),y,P]),b,t("ul",null,[t("li",null,[r(n,{to:"/reference/test/rtmp_pull_stream_performance_test.html"},{default:l(()=>[e("RTMP Pull Stream")]),_:1})]),t("li",null,[r(n,{to:"/reference/test/rtmp_push_stream_performance_test.html"},{default:l(()=>[e("RTMP Push Stream")]),_:1})]),t("li",null,[r(n,{to:"/reference/test/rtsp_pull_stream_performance_test.html"},{default:l(()=>[e("RTSP Pull Stream")]),_:1})]),t("li",null,[r(n,{to:"/reference/test/rtsp_push_stream_performance_test.html"},{default:l(()=>[e("RTSP Push Stream")]),_:1})])]),T,t("ul",null,[t("li",null,[t("a",M,[e("RTMP Pull Stream Performance Test"),r(a)])]),t("li",null,[t("a",R,[e("GB28181 Performance Test"),r(a)])]),t("li",null,[t("a",K,[e("RTSP Audio Pull Stream Performance Test"),r(a)])]),t("li",null,[r(n,{to:"/reference/test/benchmark.html"},{default:l(()=>[e("Outdated Performance Test Records")]),_:1})])]),k,t("ul",null,[t("li",null,[r(n,{to:"/reference/development_log/rtsp_performance_optimization.html"},{default:l(()=>[e("RTSP Performance Optimization and Testing")]),_:1})]),t("li",null,[r(n,{to:"/reference/development_log/hls_high_performance_journey.html"},{default:l(()=>[e("HLS Performance Optimization and Testing")]),_:1})]),t("li",null,[t("a",S,[e("RTMP Performance Optimization"),r(a)])])])])}const z=i(h,[["render",C],["__file","performance_testing.html.vue"]]);export{z as default}; diff --git a/assets/performance_testing.html-D5lG5UBD.js b/assets/performance_testing.html-mjt6ZXJJ.js similarity index 98% rename from assets/performance_testing.html-D5lG5UBD.js rename to assets/performance_testing.html-mjt6ZXJJ.js index 054aa6d..865ed95 100644 --- a/assets/performance_testing.html-D5lG5UBD.js +++ b/assets/performance_testing.html-mjt6ZXJJ.js @@ -1 +1 @@ -import{_ as d}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as i,c,a as t,d as e,b as n,w as r,e as o}from"./app-BrxqtzGY.js";const h={},_=t("h2",{id:"一、最新性能测试",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#一、最新性能测试","aria-hidden":"true"},"#"),e(" 一、最新性能测试")],-1),u=t("h3",{id:"_1-1、测试环境",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#_1-1、测试环境","aria-hidden":"true"},"#"),e(" 1.1、测试环境")],-1),g=t("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz 4 核 8 线程",-1),x=t("li",null,"操作系统:CentOS release 6.3 (Final)",-1),p=t("li",null,"内存:16GB",-1),y=t("li",null,"网卡:127.0.0.1",-1),f={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},m=t("li",null,"编译器:gcc (GCC) 8.2.0",-1),b=t("li",null,"编译类型:Release",-1),K=o('

                1.2、测试数据

                推流性能测试内存占用部分存在不准确问题(原因是当时测试时有个多 gop 缓存 bug)

                客户端类型流个数cpu内存网络 io4 物理核 cpu 理论性能
                rtsp 播放20K160%203M5Gb/s约 100K
                rtsp 播放32.2K235%220M7.78Gb/s约 100K
                rtsp 推流10K264%760M2.39Gb/s约 30K
                rtmp 播放10K148%81M2.33Gb/s约 50K
                rtmp 播放30K450%246M7Gb/s约 50K
                rtmp 推流10K224%1.6G2.16Gb/s约 30K

                1.3、测试详细数据

                ',4),k=t("h2",{id:"二、较早的性能测试记录",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#二、较早的性能测试记录","aria-hidden":"true"},"#"),e(" 二、较早的性能测试记录")],-1),M={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/406",target:"_blank",rel:"noopener noreferrer"},G={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/961",target:"_blank",rel:"noopener noreferrer"},L={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/1271",target:"_blank",rel:"noopener noreferrer"},z=t("h2",{id:"三、性能测试与优化",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#三、性能测试与优化","aria-hidden":"true"},"#"),e(" 三、性能测试与优化")],-1),v={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/540",target:"_blank",rel:"noopener noreferrer"};function Z(C,B){const s=a("ExternalLinkIcon"),l=a("RouterLink");return i(),c("div",null,[_,u,t("ul",null,[g,x,p,y,t("li",null,[e("测试码流: "),t("a",f,[e("200kbps.768x320.flv"),n(s)])]),m,b]),K,t("ul",null,[t("li",null,[n(l,{to:"/zh/reference/test/rtmp_pull_stream_performance_test.html"},{default:r(()=>[e("rtmp 拉流")]),_:1})]),t("li",null,[n(l,{to:"/zh/reference/test/rtmp_push_stream_performance_test.html"},{default:r(()=>[e("rtmp 推流")]),_:1})]),t("li",null,[n(l,{to:"/zh/reference/test/rtsp_pull_stream_performance_test.html"},{default:r(()=>[e("rtsp 拉流")]),_:1})]),t("li",null,[n(l,{to:"/zh/reference/test/rtsp_push_stream_performance_test.html"},{default:r(()=>[e("rtsp 推流")]),_:1})])]),k,t("ul",null,[t("li",null,[t("a",M,[e("rtmp 拉流性能测试"),n(s)])]),t("li",null,[t("a",G,[e("GB28181 性能测试"),n(s)])]),t("li",null,[t("a",L,[e("rtsp 音频拉流性能测试"),n(s)])]),t("li",null,[n(l,{to:"/zh/reference/test/benchmark.html"},{default:r(()=>[e("过时的性能测试记录")]),_:1})])]),z,t("ul",null,[t("li",null,[n(l,{to:"/zh/reference/development_log/rtsp_performance_optimization.html"},{default:r(()=>[e("rtsp 性能优化与测试")]),_:1})]),t("li",null,[n(l,{to:"/zh/reference/development_log/hls_high_performance_journey.html"},{default:r(()=>[e("hls 性能优化与测试")]),_:1})]),t("li",null,[t("a",v,[e("rtmp 性能优化"),n(s)])])])])}const V=d(h,[["render",Z],["__file","performance_testing.html.vue"]]);export{V as default}; +import{_ as d}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as i,c,a as t,d as e,b as n,w as r,e as o}from"./app-oTlYPy8h.js";const h={},_=t("h2",{id:"一、最新性能测试",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#一、最新性能测试","aria-hidden":"true"},"#"),e(" 一、最新性能测试")],-1),u=t("h3",{id:"_1-1、测试环境",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#_1-1、测试环境","aria-hidden":"true"},"#"),e(" 1.1、测试环境")],-1),g=t("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz 4 核 8 线程",-1),x=t("li",null,"操作系统:CentOS release 6.3 (Final)",-1),p=t("li",null,"内存:16GB",-1),y=t("li",null,"网卡:127.0.0.1",-1),f={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},m=t("li",null,"编译器:gcc (GCC) 8.2.0",-1),b=t("li",null,"编译类型:Release",-1),K=o('

                1.2、测试数据

                推流性能测试内存占用部分存在不准确问题(原因是当时测试时有个多 gop 缓存 bug)

                客户端类型流个数cpu内存网络 io4 物理核 cpu 理论性能
                rtsp 播放20K160%203M5Gb/s约 100K
                rtsp 播放32.2K235%220M7.78Gb/s约 100K
                rtsp 推流10K264%760M2.39Gb/s约 30K
                rtmp 播放10K148%81M2.33Gb/s约 50K
                rtmp 播放30K450%246M7Gb/s约 50K
                rtmp 推流10K224%1.6G2.16Gb/s约 30K

                1.3、测试详细数据

                ',4),k=t("h2",{id:"二、较早的性能测试记录",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#二、较早的性能测试记录","aria-hidden":"true"},"#"),e(" 二、较早的性能测试记录")],-1),M={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/406",target:"_blank",rel:"noopener noreferrer"},G={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/961",target:"_blank",rel:"noopener noreferrer"},L={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/1271",target:"_blank",rel:"noopener noreferrer"},z=t("h2",{id:"三、性能测试与优化",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#三、性能测试与优化","aria-hidden":"true"},"#"),e(" 三、性能测试与优化")],-1),v={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/540",target:"_blank",rel:"noopener noreferrer"};function Z(C,B){const s=a("ExternalLinkIcon"),l=a("RouterLink");return i(),c("div",null,[_,u,t("ul",null,[g,x,p,y,t("li",null,[e("测试码流: "),t("a",f,[e("200kbps.768x320.flv"),n(s)])]),m,b]),K,t("ul",null,[t("li",null,[n(l,{to:"/zh/reference/test/rtmp_pull_stream_performance_test.html"},{default:r(()=>[e("rtmp 拉流")]),_:1})]),t("li",null,[n(l,{to:"/zh/reference/test/rtmp_push_stream_performance_test.html"},{default:r(()=>[e("rtmp 推流")]),_:1})]),t("li",null,[n(l,{to:"/zh/reference/test/rtsp_pull_stream_performance_test.html"},{default:r(()=>[e("rtsp 拉流")]),_:1})]),t("li",null,[n(l,{to:"/zh/reference/test/rtsp_push_stream_performance_test.html"},{default:r(()=>[e("rtsp 推流")]),_:1})])]),k,t("ul",null,[t("li",null,[t("a",M,[e("rtmp 拉流性能测试"),n(s)])]),t("li",null,[t("a",G,[e("GB28181 性能测试"),n(s)])]),t("li",null,[t("a",L,[e("rtsp 音频拉流性能测试"),n(s)])]),t("li",null,[n(l,{to:"/zh/reference/test/benchmark.html"},{default:r(()=>[e("过时的性能测试记录")]),_:1})])]),z,t("ul",null,[t("li",null,[n(l,{to:"/zh/reference/development_log/rtsp_performance_optimization.html"},{default:r(()=>[e("rtsp 性能优化与测试")]),_:1})]),t("li",null,[n(l,{to:"/zh/reference/development_log/hls_high_performance_journey.html"},{default:r(()=>[e("hls 性能优化与测试")]),_:1})]),t("li",null,[t("a",v,[e("rtmp 性能优化"),n(s)])])])])}const V=d(h,[["render",Z],["__file","performance_testing.html.vue"]]);export{V as default}; diff --git a/assets/pieDiagram-a5166659-w0_KZcnm.js b/assets/pieDiagram-a5166659-9IukIHDQ.js similarity index 98% rename from assets/pieDiagram-a5166659-w0_KZcnm.js rename to assets/pieDiagram-a5166659-9IukIHDQ.js index f9606df..4a93910 100644 --- a/assets/pieDiagram-a5166659-w0_KZcnm.js +++ b/assets/pieDiagram-a5166659-9IukIHDQ.js @@ -1,4 +1,4 @@ -import{aK as q,aL as at,v as lt,x as ot,s as ct,g as ht,b as ut,a as yt,z as ft,d as pt,c as et,l as it,aM as gt,aJ as dt,i as mt,aN as _t}from"./mermaid.core-zy7cM8l9.js";import{a as tt}from"./arc-kFrifBKJ.js";import{o as vt}from"./ordinal-wXG5obU4.js";import{a as xt}from"./array-Nw74a44z.js";import{c as z}from"./path-aUcfwwLI.js";import"./app-BrxqtzGY.js";import"./init-Hi12RPRh.js";function kt(e,u){return ue?1:u>=e?0:NaN}function bt(e){return e}function St(){var e=bt,u=kt,$=null,f=z(0),b=z(q),w=z(0);function c(r){var l,g=(r=xt(r)).length,S,A,O=0,m=new Array(g),k=new Array(g),_=+f.apply(this,arguments),h=Math.min(q,Math.max(-q,b.apply(this,arguments)-_)),T,I=Math.min(Math.abs(h)/g,w.apply(this,arguments)),p=I*(h<0?-1:1),t;for(l=0;l0&&(O+=t);for(u!=null?m.sort(function(i,n){return u(k[i],k[n])}):$!=null&&m.sort(function(i,n){return $(r[i],r[n])}),l=0,A=O?(h-g*p)/O:0;l0?t*A:0)+p,k[S]={data:r[S],index:l,value:t,startAngle:_,endAngle:T,padAngle:I};return k}return c.value=function(r){return arguments.length?(e=typeof r=="function"?r:z(+r),c):e},c.sortValues=function(r){return arguments.length?(u=r,$=null,c):u},c.sort=function(r){return arguments.length?($=r,u=null,c):$},c.startAngle=function(r){return arguments.length?(f=typeof r=="function"?r:z(+r),c):f},c.endAngle=function(r){return arguments.length?(b=typeof r=="function"?r:z(+r),c):b},c.padAngle=function(r){return arguments.length?(w=typeof r=="function"?r:z(+r),c):w},c}var H=function(){var e=function(p,t,i,n){for(i=i||{},n=p.length;n--;i[p[n]]=t);return i},u=[1,3],$=[1,4],f=[1,5],b=[1,6],w=[1,10,12,14,16,18,19,20,21,22],c=[2,4],r=[1,5,10,12,14,16,18,19,20,21,22],l=[20,21,22],g=[2,7],S=[1,12],A=[1,13],O=[1,14],m=[1,15],k=[1,16],_=[1,17],h={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,PIE:5,document:6,showData:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,section:19,NEWLINE:20,";":21,EOF:22,$accept:0,$end:1},terminals_:{2:"error",5:"PIE",7:"showData",10:"txt",11:"value",12:"title",13:"title_value",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"section",20:"NEWLINE",21:";",22:"EOF"},productions_:[0,[3,2],[3,2],[3,3],[6,0],[6,2],[8,2],[9,0],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[4,1],[4,1],[4,1]],performAction:function(t,i,n,a,o,s,P){var v=s.length-1;switch(o){case 3:a.setShowData(!0);break;case 6:this.$=s[v-1];break;case 8:a.addSection(s[v-1],a.cleanupValue(s[v]));break;case 9:this.$=s[v].trim(),a.setDiagramTitle(this.$);break;case 10:this.$=s[v].trim(),a.setAccTitle(this.$);break;case 11:case 12:this.$=s[v].trim(),a.setAccDescription(this.$);break;case 13:a.addSection(s[v].substr(8)),this.$=s[v].substr(8);break}},table:[{3:1,4:2,5:u,20:$,21:f,22:b},{1:[3]},{3:7,4:2,5:u,20:$,21:f,22:b},e(w,c,{6:8,7:[1,9]}),e(r,[2,14]),e(r,[2,15]),e(r,[2,16]),{1:[2,1]},e(l,g,{8:10,9:11,1:[2,2],10:S,12:A,14:O,16:m,18:k,19:_}),e(w,c,{6:18}),e(w,[2,5]),{4:19,20:$,21:f,22:b},{11:[1,20]},{13:[1,21]},{15:[1,22]},{17:[1,23]},e(l,[2,12]),e(l,[2,13]),e(l,g,{8:10,9:11,1:[2,3],10:S,12:A,14:O,16:m,18:k,19:_}),e(w,[2,6]),e(l,[2,8]),e(l,[2,9]),e(l,[2,10]),e(l,[2,11])],defaultActions:{7:[2,1]},parseError:function(t,i){if(i.recoverable)this.trace(t);else{var n=new Error(t);throw n.hash=i,n}},parse:function(t){var i=this,n=[0],a=[],o=[null],s=[],P=this.table,v="",d=0,V=0,F=2,M=1,B=s.slice.call(arguments,1),y=Object.create(this.lexer),N={yy:{}};for(var Y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Y)&&(N.yy[Y]=this.yy[Y]);y.setInput(t,N.yy),N.yy.lexer=y,N.yy.parser=this,typeof y.yylloc>"u"&&(y.yylloc={});var J=y.yylloc;s.push(J);var st=y.options&&y.options.ranges;typeof N.yy.parseError=="function"?this.parseError=N.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function rt(){var C;return C=a.pop()||y.lex()||M,typeof C!="number"&&(C instanceof Array&&(a=C,C=a.pop()),C=i.symbols_[C]||C),C}for(var x,L,E,K,R={},j,D,X,W;;){if(L=n[n.length-1],this.defaultActions[L]?E=this.defaultActions[L]:((x===null||typeof x>"u")&&(x=rt()),E=P[L]&&P[L][x]),typeof E>"u"||!E.length||!E[0]){var Z="";W=[];for(j in P[L])this.terminals_[j]&&j>F&&W.push("'"+this.terminals_[j]+"'");y.showPosition?Z="Parse error on line "+(d+1)+`: +import{aK as q,aL as at,v as lt,x as ot,s as ct,g as ht,b as ut,a as yt,z as ft,d as pt,c as et,l as it,aM as gt,aJ as dt,i as mt,aN as _t}from"./mermaid.core-QJnSHCal.js";import{a as tt}from"./arc-upp1iHW0.js";import{o as vt}from"./ordinal-wXG5obU4.js";import{a as xt}from"./array-Nw74a44z.js";import{c as z}from"./path-aUcfwwLI.js";import"./app-oTlYPy8h.js";import"./init-Hi12RPRh.js";function kt(e,u){return ue?1:u>=e?0:NaN}function bt(e){return e}function St(){var e=bt,u=kt,$=null,f=z(0),b=z(q),w=z(0);function c(r){var l,g=(r=xt(r)).length,S,A,O=0,m=new Array(g),k=new Array(g),_=+f.apply(this,arguments),h=Math.min(q,Math.max(-q,b.apply(this,arguments)-_)),T,I=Math.min(Math.abs(h)/g,w.apply(this,arguments)),p=I*(h<0?-1:1),t;for(l=0;l0&&(O+=t);for(u!=null?m.sort(function(i,n){return u(k[i],k[n])}):$!=null&&m.sort(function(i,n){return $(r[i],r[n])}),l=0,A=O?(h-g*p)/O:0;l0?t*A:0)+p,k[S]={data:r[S],index:l,value:t,startAngle:_,endAngle:T,padAngle:I};return k}return c.value=function(r){return arguments.length?(e=typeof r=="function"?r:z(+r),c):e},c.sortValues=function(r){return arguments.length?(u=r,$=null,c):u},c.sort=function(r){return arguments.length?($=r,u=null,c):$},c.startAngle=function(r){return arguments.length?(f=typeof r=="function"?r:z(+r),c):f},c.endAngle=function(r){return arguments.length?(b=typeof r=="function"?r:z(+r),c):b},c.padAngle=function(r){return arguments.length?(w=typeof r=="function"?r:z(+r),c):w},c}var H=function(){var e=function(p,t,i,n){for(i=i||{},n=p.length;n--;i[p[n]]=t);return i},u=[1,3],$=[1,4],f=[1,5],b=[1,6],w=[1,10,12,14,16,18,19,20,21,22],c=[2,4],r=[1,5,10,12,14,16,18,19,20,21,22],l=[20,21,22],g=[2,7],S=[1,12],A=[1,13],O=[1,14],m=[1,15],k=[1,16],_=[1,17],h={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,PIE:5,document:6,showData:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,section:19,NEWLINE:20,";":21,EOF:22,$accept:0,$end:1},terminals_:{2:"error",5:"PIE",7:"showData",10:"txt",11:"value",12:"title",13:"title_value",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"section",20:"NEWLINE",21:";",22:"EOF"},productions_:[0,[3,2],[3,2],[3,3],[6,0],[6,2],[8,2],[9,0],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[4,1],[4,1],[4,1]],performAction:function(t,i,n,a,o,s,P){var v=s.length-1;switch(o){case 3:a.setShowData(!0);break;case 6:this.$=s[v-1];break;case 8:a.addSection(s[v-1],a.cleanupValue(s[v]));break;case 9:this.$=s[v].trim(),a.setDiagramTitle(this.$);break;case 10:this.$=s[v].trim(),a.setAccTitle(this.$);break;case 11:case 12:this.$=s[v].trim(),a.setAccDescription(this.$);break;case 13:a.addSection(s[v].substr(8)),this.$=s[v].substr(8);break}},table:[{3:1,4:2,5:u,20:$,21:f,22:b},{1:[3]},{3:7,4:2,5:u,20:$,21:f,22:b},e(w,c,{6:8,7:[1,9]}),e(r,[2,14]),e(r,[2,15]),e(r,[2,16]),{1:[2,1]},e(l,g,{8:10,9:11,1:[2,2],10:S,12:A,14:O,16:m,18:k,19:_}),e(w,c,{6:18}),e(w,[2,5]),{4:19,20:$,21:f,22:b},{11:[1,20]},{13:[1,21]},{15:[1,22]},{17:[1,23]},e(l,[2,12]),e(l,[2,13]),e(l,g,{8:10,9:11,1:[2,3],10:S,12:A,14:O,16:m,18:k,19:_}),e(w,[2,6]),e(l,[2,8]),e(l,[2,9]),e(l,[2,10]),e(l,[2,11])],defaultActions:{7:[2,1]},parseError:function(t,i){if(i.recoverable)this.trace(t);else{var n=new Error(t);throw n.hash=i,n}},parse:function(t){var i=this,n=[0],a=[],o=[null],s=[],P=this.table,v="",d=0,V=0,F=2,M=1,B=s.slice.call(arguments,1),y=Object.create(this.lexer),N={yy:{}};for(var Y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Y)&&(N.yy[Y]=this.yy[Y]);y.setInput(t,N.yy),N.yy.lexer=y,N.yy.parser=this,typeof y.yylloc>"u"&&(y.yylloc={});var J=y.yylloc;s.push(J);var st=y.options&&y.options.ranges;typeof N.yy.parseError=="function"?this.parseError=N.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function rt(){var C;return C=a.pop()||y.lex()||M,typeof C!="number"&&(C instanceof Array&&(a=C,C=a.pop()),C=i.symbols_[C]||C),C}for(var x,L,E,K,R={},j,D,X,W;;){if(L=n[n.length-1],this.defaultActions[L]?E=this.defaultActions[L]:((x===null||typeof x>"u")&&(x=rt()),E=P[L]&&P[L][x]),typeof E>"u"||!E.length||!E[0]){var Z="";W=[];for(j in P[L])this.terminals_[j]&&j>F&&W.push("'"+this.terminals_[j]+"'");y.showPosition?Z="Parse error on line "+(d+1)+`: `+y.showPosition()+` Expecting `+W.join(", ")+", got '"+(this.terminals_[x]||x)+"'":Z="Parse error on line "+(d+1)+": Unexpected "+(x==M?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(Z,{text:y.match,token:this.terminals_[x]||x,line:y.yylineno,loc:J,expected:W})}if(E[0]instanceof Array&&E.length>1)throw new Error("Parse Error: multiple actions possible at state: "+L+", token: "+x);switch(E[0]){case 1:n.push(x),o.push(y.yytext),s.push(y.yylloc),n.push(E[1]),x=null,V=y.yyleng,v=y.yytext,d=y.yylineno,J=y.yylloc;break;case 2:if(D=this.productions_[E[1]][1],R.$=o[o.length-D],R._$={first_line:s[s.length-(D||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(D||1)].first_column,last_column:s[s.length-1].last_column},st&&(R._$.range=[s[s.length-(D||1)].range[0],s[s.length-1].range[1]]),K=this.performAction.apply(R,[v,V,d,N.yy,E[1],o,s].concat(B)),typeof K<"u")return K;D&&(n=n.slice(0,-1*D*2),o=o.slice(0,-1*D),s=s.slice(0,-1*D)),n.push(this.productions_[E[1]][0]),o.push(R.$),s.push(R._$),X=P[n[n.length-2]][n[n.length-1]],n.push(X);break;case 3:return!0}}return!0}},T=function(){var p={EOF:1,parseError:function(i,n){if(this.yy.parser)this.yy.parser.parseError(i,n);else throw new Error(i)},setInput:function(t,i){return this.yy=i||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t;var i=t.match(/(?:\r\n?|\n).*/g);return i?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var i=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-i),this.offset-=i;var a=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var o=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===a.length?this.yylloc.first_column:0)+a[a.length-n.length].length-n[0].length:this.yylloc.first_column-i},this.options.ranges&&(this.yylloc.range=[o[0],o[0]+this.yyleng-i]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),i=new Array(t.length+1).join("-");return t+this.upcomingInput()+` diff --git a/assets/play_url_rules.html-k15nwlze.js b/assets/play_url_rules.html-OaEuncfX.js similarity index 99% rename from assets/play_url_rules.html-k15nwlze.js rename to assets/play_url_rules.html-OaEuncfX.js index afe02f9..6342e1c 100644 --- a/assets/play_url_rules.html-k15nwlze.js +++ b/assets/play_url_rules.html-OaEuncfX.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o,c as d,e as i}from"./app-BrxqtzGY.js";const c={},l=i('

                1、url 的组成部分

                rtsp://somedomain.com:554/live/0?token=abcdefg&field=value为例,该 url 分为以下几个部分:

                • 协议(scheam) : rtsp 协议,默认端口 554
                • 虚拟主机(vhost) : somedomain.com,该字段既可以是域名也可以是 ip,如果是 ip 则对应的虚拟主机为__defaultVhost__
                • 服务端口号(port) : 554,如果不指定端口号,则使用协议默认端口号
                • 应用名(app) : live
                • 流ID(streamid) : 0
                • 参数(args) : token=abcdefg&field=value

                2、ZLMediaKit 中的流媒体源

                在 ZLMediaKit 中,流媒体源是一种可以被用于直播转发、推流转发等功能的数据对象,在本项目中被称作为MediaSource,目前支持 5 种类型的流媒体源,分别是RtspMediaSourceRtmpMediaSourceHlsMediaSourceTSMediaSourceFMP4MediaSource

                定位一个流媒体源,主要通过 4 个元素(我们后续称其为 4 元组),分别是:

                • 协议(scheam)
                • 虚拟主机(vhost)
                • 应用名(app)
                • 流ID(streamid)

                RtspMediaSource支持 rtsp 播放、rtsp 推流、webrtc 播放、webrtc 推流。

                RtmpMediaSource支持 rtmp 推流/播放、http-flv 播放、ws-flv 播放。

                HlsMediaSource支持 hls 播放。

                TSMediaSource 支持 http-ts 播放、ws-ts 播放。

                FMP4MediaSource 支持 http-fmp4 播放、ws-fmp4 播放。

                3、流媒体源对应的播放 url

                假定有一个RtspMediaSource,它的 4 元组分别为 rtsp(RtspMediaSource固定为rtsp)somedomain.comlive0 那么播放这个流媒体源的 url 对应为:

                • rtsp://somedomain.com/live/0
                • rtsps://somedomain.com/live/0
                • rtsp://127.0.0.1/live/0?vhost=somedomain.com
                • rtsps://127.0.0.1/live/0?vhost=somedomain.com

                如果有一个RtmpMediaSource,它的 4 元组分别为 rtmp(RtmpMediaSource固定为rtmp)somedomain.comlive0 那么播放这个流媒体源的 url 对应为:

                • rtmp://somedomain.com/live/0
                • rtmps://somedomain.com/live/0
                • rtmp://127.0.0.1/live/0?vhost=somedomain.com
                • rtmps://127.0.0.1/live/0?vhost=somedomain.com

                rtmp 类型的流媒体源也支持http-flvwebsocket直播,对应的 url 如下:

                老代码 flv 直播后缀为.flv,新代码才改成了.live.flv

                • http://somedomain.com/live/0.live.flv
                • https://somedomain.com/live/0.live.flv
                • http://127.0.0.1/live/0.live.flv?vhost=somedomain.com
                • https://127.0.0.1/live/0.live.flv?vhost=somedomain.com
                • ws://somedomain.com/live/0.live.flv
                • wss://somedomain.com/live/0.live.flv
                • ws://127.0.0.1/live/0.live.flv?vhost=somedomain.com
                • wss://127.0.0.1/live/0.live.flv?vhost=somedomain.com

                当然,ZLMediaKit 一般会把 rtsp、rtmp 流媒体源互相转换,也会转换成 hls/http-ts/ws-ts/http-fmp4/ws-fmp4,播放的 url 如下:

                • HLS(mpegts)

                  • http://somedomain.com/live/0/hls.m3u8
                  • https://somedomain.com/live/0/hls.m3u8
                  • http://127.0.0.1/live/0/hls.m3u8?vhost=somedomain.com
                  • https://127.0.0.1/live/0/hls.m3u8?vhost=somedomain.com
                • HLS(fmp4)

                  • http://somedomain.com/live/0/hls.fmp4.m3u8
                  • https://somedomain.com/live/0/hls.fmp4.m3u8
                  • http://127.0.0.1/live/0/hls.fmp4.m3u8?vhost=somedomain.com
                  • https://127.0.0.1/live/0/hls.fmp4.m3u8?vhost=somedomain.com
                • HTTP-TS/WS-TS(后缀为.live.ts,目的是为了解决与 hls 的冲突)

                  • http://somedomain.com/live/0.live.ts
                  • https://somedomain.com/live/0.live.ts
                  • http://127.0.0.1/live/0.live.ts?vhost=somedomain.com
                  • https://127.0.0.1/live/0.live.ts?vhost=somedomain.com
                  • ws://somedomain.com/live/0.live.ts
                  • wss://somedomain.com/live/0.live.ts
                  • ws://127.0.0.1/live/0.live.ts?vhost=somedomain.com
                  • wss://127.0.0.1/live/0.live.ts?vhost=somedomain.com
                • HTTP-fMP4/WS-fMP4(后缀为.live.mp4,目的是为了解决与 mp4 点播的冲突)

                  • http://somedomain.com/live/0.live.mp4
                  • https://somedomain.com/live/0.live.mp4
                  • http://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
                  • https://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
                  • ws://somedomain.com/live/0.live.mp4
                  • wss://somedomain.com/live/0.live.mp4
                  • ws://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
                  • wss://127.0.0.1/live/0.live.mp4?vhost=somedomain.com

                一般而言,上述 url 在 ZLMediaKit 都有效,因为 ZLMediaKit 默认转换流媒体源。

                4、点播 url

                ZLMediaKit 的点播一般通过 mp4 文件来实现,推荐大家使用 http mp4 点播,这样是最简单,服务器也无需解复用 mp4 文件,当然 ZLMediaKit 目前也支持 rtsp、rtmp、http-flv、websocket-flv 的 mp4 点播, 对应的 url 跟直播 url 类似,不在赘述,这里只介绍区别。

                • ZLMediaKit 对点播限制应用名,默认为record
                • 假如一个 mp4 文件放置在 http 根目录 record 文件夹(www/record)下,他的相对路径为:www/record/0.mp4,那么点播 url 则为:
                  • rtsp://somedomain.com/record/0.mp4
                  • rtmp://somedomain.com/record/0.mp4
                  • http://somedomain.com/record/0.mp4(这里是通用的 http 文件点播,服务器不用解复用文件)
                  • http://somedomain.com/record/0.mp4.live.flv(这里是 http-flv 直播,不是 http 点播,服务器需要解复用文件)
                  • ws://somedomain.com/record/0.mp4.live.flv
                  • http://somedomain.com/record/0.mp4.live.ts(这里是 http-ts 直播,不是 http 点播,服务器需要解复用文件)
                  • ws://somedomain.com/record/0.mp4.live.ts
                  • http://somedomain.com/record/0.mp4.live.mp4(这里是 http-fmp4 直播,不是 http 点播,服务器需要解复用文件)
                  • ws://somedomain.com/record/0.mp4.live.mp4
                • 如果开启了虚拟主机,那么点播文件需要放置在 www/somedomain.com/record/0.mp4

                5、webrtc 推流/播放

                webrtc播放跟上述方式不太一样,webrtc 协议本身不定义信令交互协议,用户自己去实现sdp+icecandidate交换逻辑,所以webrtc并没有一个标准的播放器,需要自己使用 js 或 native sdk 去实现播放。

                zlmediakit实现的webrtc sdp+icecandidate交换方式是http post方式,接口名为/index/api/webrtc, 该接口使用 post content 传递 offer sdp, 同时 url query 参数传递媒体源 4 元组中的app steam_id,由于 http 协议本身支持vhost,所以不需要另外指定vhostwebrtczlmediakit中可以认为是 rtsp 协议的另外表现形式,他们推流、播放使用的数据源都相同,都是RtspMediaSource

                在 webrtc 推流时,交互webrtc sdp+icecandidate的 http post 接口类似为:http://127.0.0.1/index/api/webrtc?app=live&stream=test&type=push

                在 webrtc 播放时,交互webrtc sdp+icecandidate的 http post 接口类似为:http://127.0.0.1/index/api/webrtc?app=live&stream=test&type=play

                zlmeiakit 工程自带 webrtc 测试播放/推流器,用户启动 zlmediakit 后,浏览器访问http://127.0.0.1/webrtc/就可以访问之。

                另外,zlmediakit 也支持使用 webrtc 播放 mp4 文件,http post 接口类似为:http://127.0.0.1/index/api/webrtc?app=record&stream=test.mp4&type=play

                6、url 参数

                ZLMediaKit 会识别 url 中问号后面的字符串为 url 参数,其格式跟 http 一致,其中参数vhost是 ZLMediaKit 内置支持的参数,支持指定 vhost。 url 参数主要用于播放、推流鉴权,在触发 hook api 时,会把这些参数提交给第三方业务服务器

                ',35),t=[l];function m(s,p){return o(),d("div",null,t)}const h=e(c,[["render",m],["__file","play_url_rules.html.vue"]]);export{h as default}; +import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o,c as d,e as i}from"./app-oTlYPy8h.js";const c={},l=i('

                1、url 的组成部分

                rtsp://somedomain.com:554/live/0?token=abcdefg&field=value为例,该 url 分为以下几个部分:

                • 协议(scheam) : rtsp 协议,默认端口 554
                • 虚拟主机(vhost) : somedomain.com,该字段既可以是域名也可以是 ip,如果是 ip 则对应的虚拟主机为__defaultVhost__
                • 服务端口号(port) : 554,如果不指定端口号,则使用协议默认端口号
                • 应用名(app) : live
                • 流ID(streamid) : 0
                • 参数(args) : token=abcdefg&field=value

                2、ZLMediaKit 中的流媒体源

                在 ZLMediaKit 中,流媒体源是一种可以被用于直播转发、推流转发等功能的数据对象,在本项目中被称作为MediaSource,目前支持 5 种类型的流媒体源,分别是RtspMediaSourceRtmpMediaSourceHlsMediaSourceTSMediaSourceFMP4MediaSource

                定位一个流媒体源,主要通过 4 个元素(我们后续称其为 4 元组),分别是:

                • 协议(scheam)
                • 虚拟主机(vhost)
                • 应用名(app)
                • 流ID(streamid)

                RtspMediaSource支持 rtsp 播放、rtsp 推流、webrtc 播放、webrtc 推流。

                RtmpMediaSource支持 rtmp 推流/播放、http-flv 播放、ws-flv 播放。

                HlsMediaSource支持 hls 播放。

                TSMediaSource 支持 http-ts 播放、ws-ts 播放。

                FMP4MediaSource 支持 http-fmp4 播放、ws-fmp4 播放。

                3、流媒体源对应的播放 url

                假定有一个RtspMediaSource,它的 4 元组分别为 rtsp(RtspMediaSource固定为rtsp)somedomain.comlive0 那么播放这个流媒体源的 url 对应为:

                • rtsp://somedomain.com/live/0
                • rtsps://somedomain.com/live/0
                • rtsp://127.0.0.1/live/0?vhost=somedomain.com
                • rtsps://127.0.0.1/live/0?vhost=somedomain.com

                如果有一个RtmpMediaSource,它的 4 元组分别为 rtmp(RtmpMediaSource固定为rtmp)somedomain.comlive0 那么播放这个流媒体源的 url 对应为:

                • rtmp://somedomain.com/live/0
                • rtmps://somedomain.com/live/0
                • rtmp://127.0.0.1/live/0?vhost=somedomain.com
                • rtmps://127.0.0.1/live/0?vhost=somedomain.com

                rtmp 类型的流媒体源也支持http-flvwebsocket直播,对应的 url 如下:

                老代码 flv 直播后缀为.flv,新代码才改成了.live.flv

                • http://somedomain.com/live/0.live.flv
                • https://somedomain.com/live/0.live.flv
                • http://127.0.0.1/live/0.live.flv?vhost=somedomain.com
                • https://127.0.0.1/live/0.live.flv?vhost=somedomain.com
                • ws://somedomain.com/live/0.live.flv
                • wss://somedomain.com/live/0.live.flv
                • ws://127.0.0.1/live/0.live.flv?vhost=somedomain.com
                • wss://127.0.0.1/live/0.live.flv?vhost=somedomain.com

                当然,ZLMediaKit 一般会把 rtsp、rtmp 流媒体源互相转换,也会转换成 hls/http-ts/ws-ts/http-fmp4/ws-fmp4,播放的 url 如下:

                • HLS(mpegts)

                  • http://somedomain.com/live/0/hls.m3u8
                  • https://somedomain.com/live/0/hls.m3u8
                  • http://127.0.0.1/live/0/hls.m3u8?vhost=somedomain.com
                  • https://127.0.0.1/live/0/hls.m3u8?vhost=somedomain.com
                • HLS(fmp4)

                  • http://somedomain.com/live/0/hls.fmp4.m3u8
                  • https://somedomain.com/live/0/hls.fmp4.m3u8
                  • http://127.0.0.1/live/0/hls.fmp4.m3u8?vhost=somedomain.com
                  • https://127.0.0.1/live/0/hls.fmp4.m3u8?vhost=somedomain.com
                • HTTP-TS/WS-TS(后缀为.live.ts,目的是为了解决与 hls 的冲突)

                  • http://somedomain.com/live/0.live.ts
                  • https://somedomain.com/live/0.live.ts
                  • http://127.0.0.1/live/0.live.ts?vhost=somedomain.com
                  • https://127.0.0.1/live/0.live.ts?vhost=somedomain.com
                  • ws://somedomain.com/live/0.live.ts
                  • wss://somedomain.com/live/0.live.ts
                  • ws://127.0.0.1/live/0.live.ts?vhost=somedomain.com
                  • wss://127.0.0.1/live/0.live.ts?vhost=somedomain.com
                • HTTP-fMP4/WS-fMP4(后缀为.live.mp4,目的是为了解决与 mp4 点播的冲突)

                  • http://somedomain.com/live/0.live.mp4
                  • https://somedomain.com/live/0.live.mp4
                  • http://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
                  • https://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
                  • ws://somedomain.com/live/0.live.mp4
                  • wss://somedomain.com/live/0.live.mp4
                  • ws://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
                  • wss://127.0.0.1/live/0.live.mp4?vhost=somedomain.com

                一般而言,上述 url 在 ZLMediaKit 都有效,因为 ZLMediaKit 默认转换流媒体源。

                4、点播 url

                ZLMediaKit 的点播一般通过 mp4 文件来实现,推荐大家使用 http mp4 点播,这样是最简单,服务器也无需解复用 mp4 文件,当然 ZLMediaKit 目前也支持 rtsp、rtmp、http-flv、websocket-flv 的 mp4 点播, 对应的 url 跟直播 url 类似,不在赘述,这里只介绍区别。

                • ZLMediaKit 对点播限制应用名,默认为record
                • 假如一个 mp4 文件放置在 http 根目录 record 文件夹(www/record)下,他的相对路径为:www/record/0.mp4,那么点播 url 则为:
                  • rtsp://somedomain.com/record/0.mp4
                  • rtmp://somedomain.com/record/0.mp4
                  • http://somedomain.com/record/0.mp4(这里是通用的 http 文件点播,服务器不用解复用文件)
                  • http://somedomain.com/record/0.mp4.live.flv(这里是 http-flv 直播,不是 http 点播,服务器需要解复用文件)
                  • ws://somedomain.com/record/0.mp4.live.flv
                  • http://somedomain.com/record/0.mp4.live.ts(这里是 http-ts 直播,不是 http 点播,服务器需要解复用文件)
                  • ws://somedomain.com/record/0.mp4.live.ts
                  • http://somedomain.com/record/0.mp4.live.mp4(这里是 http-fmp4 直播,不是 http 点播,服务器需要解复用文件)
                  • ws://somedomain.com/record/0.mp4.live.mp4
                • 如果开启了虚拟主机,那么点播文件需要放置在 www/somedomain.com/record/0.mp4

                5、webrtc 推流/播放

                webrtc播放跟上述方式不太一样,webrtc 协议本身不定义信令交互协议,用户自己去实现sdp+icecandidate交换逻辑,所以webrtc并没有一个标准的播放器,需要自己使用 js 或 native sdk 去实现播放。

                zlmediakit实现的webrtc sdp+icecandidate交换方式是http post方式,接口名为/index/api/webrtc, 该接口使用 post content 传递 offer sdp, 同时 url query 参数传递媒体源 4 元组中的app steam_id,由于 http 协议本身支持vhost,所以不需要另外指定vhostwebrtczlmediakit中可以认为是 rtsp 协议的另外表现形式,他们推流、播放使用的数据源都相同,都是RtspMediaSource

                在 webrtc 推流时,交互webrtc sdp+icecandidate的 http post 接口类似为:http://127.0.0.1/index/api/webrtc?app=live&stream=test&type=push

                在 webrtc 播放时,交互webrtc sdp+icecandidate的 http post 接口类似为:http://127.0.0.1/index/api/webrtc?app=live&stream=test&type=play

                zlmeiakit 工程自带 webrtc 测试播放/推流器,用户启动 zlmediakit 后,浏览器访问http://127.0.0.1/webrtc/就可以访问之。

                另外,zlmediakit 也支持使用 webrtc 播放 mp4 文件,http post 接口类似为:http://127.0.0.1/index/api/webrtc?app=record&stream=test.mp4&type=play

                6、url 参数

                ZLMediaKit 会识别 url 中问号后面的字符串为 url 参数,其格式跟 http 一致,其中参数vhost是 ZLMediaKit 内置支持的参数,支持指定 vhost。 url 参数主要用于播放、推流鉴权,在触发 hook api 时,会把这些参数提交给第三方业务服务器

                ',35),t=[l];function m(s,p){return o(),d("div",null,t)}const h=e(c,[["render",m],["__file","play_url_rules.html.vue"]]);export{h as default}; diff --git a/assets/play_url_rules.html-lTCmvIjW.js b/assets/play_url_rules.html-f7mxplY_.js similarity index 99% rename from assets/play_url_rules.html-lTCmvIjW.js rename to assets/play_url_rules.html-f7mxplY_.js index 5335ee0..899fdc5 100644 --- a/assets/play_url_rules.html-lTCmvIjW.js +++ b/assets/play_url_rules.html-f7mxplY_.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o,c as i,e as d}from"./app-BrxqtzGY.js";const t={},a=d('

                1. Components of a URL

                Taking rtsp://somedomain.com:554/live/0?token=abcdefg&field=value as an example, this URL is divided into the following parts:

                • Protocol(scheam): RTSP protocol, default port 554
                • Virtual Host(vhost): somedomain.com. This field can be either a domain name or an IP. If it is an IP, the corresponding virtual host is __defaultVhost__
                • Server Port(port): 554. If the port number is not specified, the protocol's default port number is used
                • Application Name(app): live
                • Stream ID(streamid): 0
                • Parameters(args): token=abcdefg&field=value

                2. Stream Media Source in ZLMediaKit

                In ZLMediaKit, a stream media source is a data object that can be used for functions such as live broadcasting and stream forwarding, and is referred to as MediaSource in this project. Currently, it supports five types of stream media sources, namely RtspMediaSource, RtmpMediaSource, HlsMediaSource, TSMediaSource, FMP4MediaSource.

                Identifying a stream media source is mainly based on four elements (referred to as 4-tuples hereafter), which are:

                • Protocol(scheam)
                • Virtual Host(vhost)
                • Application Name(app)
                • Stream ID(streamid)

                RtspMediaSource supports RTSP playback, RTSP streaming, WebRTC playback, and WebRTC streaming.

                RtmpMediaSource supports RTMP streaming/playback, HTTP-FLV playback, and WS-FLV playback.

                HlsMediaSource supports HLS playback.

                TSMediaSource supports HTTP-TS playback and WS-TS playback.

                FMP4MediaSource supports HTTP-FMP4 playback and WS-FMP4 playback.

                3. Playback URLs Corresponding to the Stream Media Source

                Suppose there is a RtspMediaSource, and its 4-tuple are rtsp (RtspMediaSource is always rtsp), somedomain.com, live, and 0 Then the URLs for playing this stream media source correspond to:

                • rtsp://somedomain.com/live/0
                • rtsps://somedomain.com/live/0
                • rtsp://127.0.0.1/live/0?vhost=somedomain.com
                • rtsps://127.0.0.1/live/0?vhost=somedomain.com

                If there is a RtmpMediaSource, and its 4-tuple are rtmp (RtmpMediaSource is always rtmp), somedomain.com, live, and 0 Then the URLs for playing this stream media source correspond to:

                • rtmp://somedomain.com/live/0
                • rtmps://somedomain.com/live/0
                • rtmp://127.0.0.1/live/0?vhost=somedomain.com
                • rtmps://127.0.0.1/live/0?vhost=somedomain.com

                RTMP types of stream media sources also support live streaming through http-flv, websocket, and other protocols. The corresponding URLs are as follows:

                Note: Old code live broadcast suffix is .flv, and it has been changed to .live.flv in the new code

                • http://somedomain.com/live/0.live.flv
                • https://somedomain.com/live/0.live.flv
                • http://127.0.0.1/live/0.live.flv?vhost=somedomain.com
                • https://127.0.0.1/live/0.live.flv?vhost=somedomain.com
                • ws://somedomain.com/live/0.live.flv
                • wss://somedomain.com/live/0.live.flv
                • ws://127.0.0.1/live/0.live.flv?vhost=somedomain.com
                • wss://127.0.0.1/live/0.live.flv?vhost=somedomain.com

                Sure, ZLMediaKit typically converts RTSP and RTMP media streams to each other and also transforms them into HLS/HTTP-TS/WS-TS/HTTP-fMP4/WS-fMP4. The playback URLs are as follows:

                • HLS

                  • http://somedomain.com/live/0/hls.m3u8
                  • https://somedomain.com/live/0/hls.m3u8
                  • http://127.0.0.1/live/0/hls.m3u8?vhost=somedomain.com
                  • https://127.0.0.1/live/0/hls.m3u8?vhost=somedomain.com
                • HTTP-TS/WS-TS (with the suffix .live.ts, to resolve the conflict with HLS)

                  • http://somedomain.com/live/0.live.ts
                  • https://somedomain.com/live/0.live.ts
                  • http://127.0.0.1/live/0.live.ts?vhost=somedomain.com
                  • https://127.0.0.1/live/0.live.ts?vhost=somedomain.com
                  • ws://somedomain.com/live/0.live.ts
                  • wss://somedomain.com/live/0.live.ts
                  • ws://127.0.0.1/live/0.live.ts?vhost=somedomain.com
                  • wss://127.0.0.1/live/0.live.ts?vhost=somedomain.com
                • HTTP-fMP4/WS-fMP4 (with the suffix .live.mp4, to resolve the conflict with MP4 on-demand)

                  • http://somedomain.com/live/0.live.mp4
                  • https://somedomain.com/live/0.live.mp4
                  • http://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
                  • https://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
                  • ws://somedomain.com/live/0.live.mp4
                  • wss://somedomain.com/live/0.live.mp4
                  • ws://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
                  • wss://127.0.0.1/live/0.live.mp4?vhost=somedomain.com

                Generally speaking, all the above URLs are valid in ZLMediaKit, as ZLMediaKit converts media sources by default.

                4. Video-on-Demand URL

                ZLMediaKit typically implements video-on-demand via MP4 files, and we recommend using HTTP MP4 on-demand as it is the simplest method and the server does not need to demultiplex the MP4 files. ZLMediaKit currently also supports RTSP, RTMP, HTTP-FLV, and WebSocket-FLV MP4 on-demand. The corresponding URLs are similar to live broadcast URLs and will not be elaborated here; only the differences are discussed.

                • ZLMediaKit restricts the application name for on-demand to the default record.
                • Suppose an MP4 file is placed in the HTTP root directory record folder (www/record). Its relative path is www/record/0.mp4, then the on-demand URL would be:
                  • rtsp://somedomain.com/record/0.mp4
                  • rtmp://somedomain.com/record/0.mp4
                  • http://somedomain.com/record/0.mp4 (This is a generic HTTP file on-demand; the server does not need to demultiplex the file)
                  • http://somedomain.com/record/0.mp4.live.flv (This is HTTP-FLV live streaming, not HTTP on-demand; the server needs to demultiplex the file)
                  • ws://somedomain.com/record/0.mp4.live.flv
                  • http://somedomain.com/record/0.mp4.live.ts (This is HTTP-TS live streaming, not HTTP on-demand; the server needs to demultiplex the file)
                  • ws://somedomain.com/record/0.mp4.live.ts
                  • http://somedomain.com/record/0.mp4.live.mp4 (This is HTTP-fMP4 live streaming, not HTTP on-demand; the server needs to demultiplex the file)
                  • ws://somedomain.com/record/0.mp4.live.mp4
                • If virtual hosting is enabled, then the on-demand files should be placed in www/somedomain.com/record/0.mp4.

                5. WebRTC Push/Pull

                WebRTC playback is slightly different from the methods mentioned above. The WebRTC protocol itself does not define a signaling interaction protocol, and users need to implement the sdp+icecandidate exchange logic themselves. So, WebRTC does not have a standard player, and you need to use JS or a native SDK to implement playback.

                ZLMediaKit implements the WebRTC SDP+icecandidate exchange method via HTTP POST. The interface name is /index/api/webrtc. This interface uses POST content to pass the offer sdp while passing the media source's four-tuple app stream_id in the URL query parameters. Since HTTP inherently supports vhost, there's no need to specify vhost separately. WebRTC in ZLMediaKit can be considered another representation of the RTSP protocol. Their push and playback use the same data source, which is RtspMediaSource.

                When pushing WebRTC, the HTTP POST interface for exchanging WebRTC SDP+icecandidate is similar to: http://127.0.0.1/index/api/webrtc?app=live&stream=test&type=push

                When playing WebRTC, the HTTP POST interface for exchanging WebRTC SDP+icecandidate is similar to: http://127.0.0.1/index/api/webrtc?app=live&stream=test&type=play.

                ZLMediaKit comes with a WebRTC test player/pusher. After starting ZLMediaKit, you can access it by visiting http://127.0.0.1/webrtc/ in your browser.

                Additionally, ZLMediaKit also supports playing MP4 files via WebRTC. The HTTP POST interface is similar to: http://127.0.0.1/index/api/webrtc?app=record&stream=test.mp4&type=play.

                6. URL Parameters

                ZLMediaKit recognizes the string after the question mark in the URL as parameters, which are consistent with HTTP formats. Among them, vhost is a built-in parameter supported by ZLMediaKit, which allows specifying a virtual host. URL parameters are mainly used for streaming and playback authentication. When triggering the hook API, these parameters will be submitted to the third-party business server.

                ',35),c=[a];function s(l,r){return o(),i("div",null,c)}const p=e(t,[["render",s],["__file","play_url_rules.html.vue"]]);export{p as default}; +import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o,c as i,e as d}from"./app-oTlYPy8h.js";const t={},a=d('

                1. Components of a URL

                Taking rtsp://somedomain.com:554/live/0?token=abcdefg&field=value as an example, this URL is divided into the following parts:

                • Protocol(scheam): RTSP protocol, default port 554
                • Virtual Host(vhost): somedomain.com. This field can be either a domain name or an IP. If it is an IP, the corresponding virtual host is __defaultVhost__
                • Server Port(port): 554. If the port number is not specified, the protocol's default port number is used
                • Application Name(app): live
                • Stream ID(streamid): 0
                • Parameters(args): token=abcdefg&field=value

                2. Stream Media Source in ZLMediaKit

                In ZLMediaKit, a stream media source is a data object that can be used for functions such as live broadcasting and stream forwarding, and is referred to as MediaSource in this project. Currently, it supports five types of stream media sources, namely RtspMediaSource, RtmpMediaSource, HlsMediaSource, TSMediaSource, FMP4MediaSource.

                Identifying a stream media source is mainly based on four elements (referred to as 4-tuples hereafter), which are:

                • Protocol(scheam)
                • Virtual Host(vhost)
                • Application Name(app)
                • Stream ID(streamid)

                RtspMediaSource supports RTSP playback, RTSP streaming, WebRTC playback, and WebRTC streaming.

                RtmpMediaSource supports RTMP streaming/playback, HTTP-FLV playback, and WS-FLV playback.

                HlsMediaSource supports HLS playback.

                TSMediaSource supports HTTP-TS playback and WS-TS playback.

                FMP4MediaSource supports HTTP-FMP4 playback and WS-FMP4 playback.

                3. Playback URLs Corresponding to the Stream Media Source

                Suppose there is a RtspMediaSource, and its 4-tuple are rtsp (RtspMediaSource is always rtsp), somedomain.com, live, and 0 Then the URLs for playing this stream media source correspond to:

                • rtsp://somedomain.com/live/0
                • rtsps://somedomain.com/live/0
                • rtsp://127.0.0.1/live/0?vhost=somedomain.com
                • rtsps://127.0.0.1/live/0?vhost=somedomain.com

                If there is a RtmpMediaSource, and its 4-tuple are rtmp (RtmpMediaSource is always rtmp), somedomain.com, live, and 0 Then the URLs for playing this stream media source correspond to:

                • rtmp://somedomain.com/live/0
                • rtmps://somedomain.com/live/0
                • rtmp://127.0.0.1/live/0?vhost=somedomain.com
                • rtmps://127.0.0.1/live/0?vhost=somedomain.com

                RTMP types of stream media sources also support live streaming through http-flv, websocket, and other protocols. The corresponding URLs are as follows:

                Note: Old code live broadcast suffix is .flv, and it has been changed to .live.flv in the new code

                • http://somedomain.com/live/0.live.flv
                • https://somedomain.com/live/0.live.flv
                • http://127.0.0.1/live/0.live.flv?vhost=somedomain.com
                • https://127.0.0.1/live/0.live.flv?vhost=somedomain.com
                • ws://somedomain.com/live/0.live.flv
                • wss://somedomain.com/live/0.live.flv
                • ws://127.0.0.1/live/0.live.flv?vhost=somedomain.com
                • wss://127.0.0.1/live/0.live.flv?vhost=somedomain.com

                Sure, ZLMediaKit typically converts RTSP and RTMP media streams to each other and also transforms them into HLS/HTTP-TS/WS-TS/HTTP-fMP4/WS-fMP4. The playback URLs are as follows:

                • HLS

                  • http://somedomain.com/live/0/hls.m3u8
                  • https://somedomain.com/live/0/hls.m3u8
                  • http://127.0.0.1/live/0/hls.m3u8?vhost=somedomain.com
                  • https://127.0.0.1/live/0/hls.m3u8?vhost=somedomain.com
                • HTTP-TS/WS-TS (with the suffix .live.ts, to resolve the conflict with HLS)

                  • http://somedomain.com/live/0.live.ts
                  • https://somedomain.com/live/0.live.ts
                  • http://127.0.0.1/live/0.live.ts?vhost=somedomain.com
                  • https://127.0.0.1/live/0.live.ts?vhost=somedomain.com
                  • ws://somedomain.com/live/0.live.ts
                  • wss://somedomain.com/live/0.live.ts
                  • ws://127.0.0.1/live/0.live.ts?vhost=somedomain.com
                  • wss://127.0.0.1/live/0.live.ts?vhost=somedomain.com
                • HTTP-fMP4/WS-fMP4 (with the suffix .live.mp4, to resolve the conflict with MP4 on-demand)

                  • http://somedomain.com/live/0.live.mp4
                  • https://somedomain.com/live/0.live.mp4
                  • http://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
                  • https://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
                  • ws://somedomain.com/live/0.live.mp4
                  • wss://somedomain.com/live/0.live.mp4
                  • ws://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
                  • wss://127.0.0.1/live/0.live.mp4?vhost=somedomain.com

                Generally speaking, all the above URLs are valid in ZLMediaKit, as ZLMediaKit converts media sources by default.

                4. Video-on-Demand URL

                ZLMediaKit typically implements video-on-demand via MP4 files, and we recommend using HTTP MP4 on-demand as it is the simplest method and the server does not need to demultiplex the MP4 files. ZLMediaKit currently also supports RTSP, RTMP, HTTP-FLV, and WebSocket-FLV MP4 on-demand. The corresponding URLs are similar to live broadcast URLs and will not be elaborated here; only the differences are discussed.

                • ZLMediaKit restricts the application name for on-demand to the default record.
                • Suppose an MP4 file is placed in the HTTP root directory record folder (www/record). Its relative path is www/record/0.mp4, then the on-demand URL would be:
                  • rtsp://somedomain.com/record/0.mp4
                  • rtmp://somedomain.com/record/0.mp4
                  • http://somedomain.com/record/0.mp4 (This is a generic HTTP file on-demand; the server does not need to demultiplex the file)
                  • http://somedomain.com/record/0.mp4.live.flv (This is HTTP-FLV live streaming, not HTTP on-demand; the server needs to demultiplex the file)
                  • ws://somedomain.com/record/0.mp4.live.flv
                  • http://somedomain.com/record/0.mp4.live.ts (This is HTTP-TS live streaming, not HTTP on-demand; the server needs to demultiplex the file)
                  • ws://somedomain.com/record/0.mp4.live.ts
                  • http://somedomain.com/record/0.mp4.live.mp4 (This is HTTP-fMP4 live streaming, not HTTP on-demand; the server needs to demultiplex the file)
                  • ws://somedomain.com/record/0.mp4.live.mp4
                • If virtual hosting is enabled, then the on-demand files should be placed in www/somedomain.com/record/0.mp4.

                5. WebRTC Push/Pull

                WebRTC playback is slightly different from the methods mentioned above. The WebRTC protocol itself does not define a signaling interaction protocol, and users need to implement the sdp+icecandidate exchange logic themselves. So, WebRTC does not have a standard player, and you need to use JS or a native SDK to implement playback.

                ZLMediaKit implements the WebRTC SDP+icecandidate exchange method via HTTP POST. The interface name is /index/api/webrtc. This interface uses POST content to pass the offer sdp while passing the media source's four-tuple app stream_id in the URL query parameters. Since HTTP inherently supports vhost, there's no need to specify vhost separately. WebRTC in ZLMediaKit can be considered another representation of the RTSP protocol. Their push and playback use the same data source, which is RtspMediaSource.

                When pushing WebRTC, the HTTP POST interface for exchanging WebRTC SDP+icecandidate is similar to: http://127.0.0.1/index/api/webrtc?app=live&stream=test&type=push

                When playing WebRTC, the HTTP POST interface for exchanging WebRTC SDP+icecandidate is similar to: http://127.0.0.1/index/api/webrtc?app=live&stream=test&type=play.

                ZLMediaKit comes with a WebRTC test player/pusher. After starting ZLMediaKit, you can access it by visiting http://127.0.0.1/webrtc/ in your browser.

                Additionally, ZLMediaKit also supports playing MP4 files via WebRTC. The HTTP POST interface is similar to: http://127.0.0.1/index/api/webrtc?app=record&stream=test.mp4&type=play.

                6. URL Parameters

                ZLMediaKit recognizes the string after the question mark in the URL as parameters, which are consistent with HTTP formats. Among them, vhost is a built-in parameter supported by ZLMediaKit, which allows specifying a virtual host. URL parameters are mainly used for streaming and playback authentication. When triggering the hook API, these parameters will be submitted to the third-party business server.

                ',35),c=[a];function s(l,r){return o(),i("div",null,c)}const p=e(t,[["render",s],["__file","play_url_rules.html.vue"]]);export{p as default}; diff --git a/assets/playback_authentication.html-TBCUOtoI.js b/assets/playback_authentication.html-3VR0HbK8.js similarity index 88% rename from assets/playback_authentication.html-TBCUOtoI.js rename to assets/playback_authentication.html-3VR0HbK8.js index 381c016..96f58cc 100644 --- a/assets/playback_authentication.html-TBCUOtoI.js +++ b/assets/playback_authentication.html-3VR0HbK8.js @@ -1 +1 @@ -import{_ as t}from"./playback_authentication_zh-gjAAn9Yd.js";import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{o,c as i,a as e}from"./app-BrxqtzGY.js";const n={},c=e("p",null,"The MediaServer process of ZLMediaKit can be used to implement playback authentication:",-1),s=e("figure",null,[e("img",{src:t,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")],-1),_=[c,s];function l(r,m){return o(),i("div",null,_)}const f=a(n,[["render",l],["__file","playback_authentication.html.vue"]]);export{f as default}; +import{_ as t}from"./playback_authentication_zh-gjAAn9Yd.js";import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{o,c as i,a as e}from"./app-oTlYPy8h.js";const n={},c=e("p",null,"The MediaServer process of ZLMediaKit can be used to implement playback authentication:",-1),s=e("figure",null,[e("img",{src:t,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")],-1),_=[c,s];function l(r,m){return o(),i("div",null,_)}const f=a(n,[["render",l],["__file","playback_authentication.html.vue"]]);export{f as default}; diff --git a/assets/playback_authentication.html-GpyuaGt9.js b/assets/playback_authentication.html-4kXdTj5T.js similarity index 87% rename from assets/playback_authentication.html-GpyuaGt9.js rename to assets/playback_authentication.html-4kXdTj5T.js index 1d9f033..eb38f49 100644 --- a/assets/playback_authentication.html-GpyuaGt9.js +++ b/assets/playback_authentication.html-4kXdTj5T.js @@ -1 +1 @@ -import{_ as t}from"./playback_authentication_zh-gjAAn9Yd.js";import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{o,c as i,a as e}from"./app-BrxqtzGY.js";const n={},c=e("p",null,"使用 ZLMediaKit 的 MediaServer 进程可以实现播放鉴权:",-1),_=e("figure",null,[e("img",{src:t,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")],-1),r=[c,_];function l(s,m){return o(),i("div",null,r)}const u=a(n,[["render",l],["__file","playback_authentication.html.vue"]]);export{u as default}; +import{_ as t}from"./playback_authentication_zh-gjAAn9Yd.js";import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{o,c as i,a as e}from"./app-oTlYPy8h.js";const n={},c=e("p",null,"使用 ZLMediaKit 的 MediaServer 进程可以实现播放鉴权:",-1),_=e("figure",null,[e("img",{src:t,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")],-1),r=[c,_];function l(s,m){return o(),i("div",null,r)}const u=a(n,[["render",l],["__file","playback_authentication.html.vue"]]);export{u as default}; diff --git a/assets/push_authentication.html-w6czo8pV.js b/assets/push_authentication.html-8OJ18L-5.js similarity index 88% rename from assets/push_authentication.html-w6czo8pV.js rename to assets/push_authentication.html-8OJ18L-5.js index b3a88af..66d08b2 100644 --- a/assets/push_authentication.html-w6czo8pV.js +++ b/assets/push_authentication.html-8OJ18L-5.js @@ -1 +1 @@ -import{_ as t}from"./push_authentication_zh-OS4qAsfx.js";import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as i,a as e}from"./app-BrxqtzGY.js";const n={},s=e("p",null,"The MediaServer process of ZLMediaKit can be used to implement push authentication:",-1),c=e("figure",null,[e("img",{src:t,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")],-1),_=[s,c];function r(l,m){return a(),i("div",null,_)}const h=o(n,[["render",r],["__file","push_authentication.html.vue"]]);export{h as default}; +import{_ as t}from"./push_authentication_zh-OS4qAsfx.js";import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as i,a as e}from"./app-oTlYPy8h.js";const n={},s=e("p",null,"The MediaServer process of ZLMediaKit can be used to implement push authentication:",-1),c=e("figure",null,[e("img",{src:t,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")],-1),_=[s,c];function r(l,m){return a(),i("div",null,_)}const h=o(n,[["render",r],["__file","push_authentication.html.vue"]]);export{h as default}; diff --git a/assets/push_authentication.html-OUbzb3iO.js b/assets/push_authentication.html-Ov0yMs1o.js similarity index 87% rename from assets/push_authentication.html-OUbzb3iO.js rename to assets/push_authentication.html-Ov0yMs1o.js index e94ae91..584d2aa 100644 --- a/assets/push_authentication.html-OUbzb3iO.js +++ b/assets/push_authentication.html-Ov0yMs1o.js @@ -1 +1 @@ -import{_ as t}from"./push_authentication_zh-OS4qAsfx.js";import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as i,a as e}from"./app-BrxqtzGY.js";const n={},_=e("p",null,"使用 ZLMediaKit 的 MediaServer 进程可以实现推流鉴权:",-1),s=e("figure",null,[e("img",{src:t,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")],-1),c=[_,s];function r(l,m){return a(),i("div",null,c)}const p=o(n,[["render",r],["__file","push_authentication.html.vue"]]);export{p as default}; +import{_ as t}from"./push_authentication_zh-OS4qAsfx.js";import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as i,a as e}from"./app-oTlYPy8h.js";const n={},_=e("p",null,"使用 ZLMediaKit 的 MediaServer 进程可以实现推流鉴权:",-1),s=e("figure",null,[e("img",{src:t,alt:"image",tabindex:"0",loading:"lazy"}),e("figcaption",null,"image")],-1),c=[_,s];function r(l,m){return a(),i("div",null,c)}const p=o(n,[["render",r],["__file","push_authentication.html.vue"]]);export{p as default}; diff --git a/assets/push_streaming.html-k2pojRSs.js b/assets/push_streaming.html-VOPU_Vgm.js similarity index 99% rename from assets/push_streaming.html-k2pojRSs.js rename to assets/push_streaming.html-VOPU_Vgm.js index 0f29c92..6a9ac6b 100644 --- a/assets/push_streaming.html-k2pojRSs.js +++ b/assets/push_streaming.html-VOPU_Vgm.js @@ -1,3 +1,3 @@ -import{a as o,b as d,_ as p,c}from"./gb28181_push_streaming_4-qWTnfswt.js";import{_ as h}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as u,c as _,a as e,d as a,b as t,w as s,e as l}from"./app-BrxqtzGY.js";const m={},g=l(`

                介绍

                ZLMediaKit 支持 GB28181 的 ps-rtp 推流,支持的编码格式分别为 h264/h265/aac/g711/opus。 在收到 GB28181 推流后,ZLMediaKit 会依次做以下事情:

                • rtp 排序去重。
                • rtp 解析成 ps 或 ts。
                • ps 或 ts 解析成h264/h265/aac/g711/opus
                • 输入到复用器,生成 rtsp/rtmp/ts/fmp4 等格式,以便转换成其他协议或容器。

                简单使用

                ZLMediaKit 默认开启 10000 端口用于接收 UDP/TCP 的 GB28181 推流,由于国标推流不好测试,ZLMediaKit 同时也支持 rtp_mpegts 推流,代码会自适应判断是否为 ps 还是 ts。 所以如果大家没有摄像头的情况下,可以用 FFmpeg 简单测试,基本上体验跟国标推流并无二致。

                • ffmpeg 推流命令:
                 ffmpeg -re -i www/record/robot.mp4 -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000
                +import{a as o,b as d,_ as p,c}from"./gb28181_push_streaming_4-qWTnfswt.js";import{_ as h}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as u,c as _,a as e,d as a,b as t,w as s,e as l}from"./app-oTlYPy8h.js";const m={},g=l(`

                介绍

                ZLMediaKit 支持 GB28181 的 ps-rtp 推流,支持的编码格式分别为 h264/h265/aac/g711/opus。 在收到 GB28181 推流后,ZLMediaKit 会依次做以下事情:

                • rtp 排序去重。
                • rtp 解析成 ps 或 ts。
                • ps 或 ts 解析成h264/h265/aac/g711/opus
                • 输入到复用器,生成 rtsp/rtmp/ts/fmp4 等格式,以便转换成其他协议或容器。

                简单使用

                ZLMediaKit 默认开启 10000 端口用于接收 UDP/TCP 的 GB28181 推流,由于国标推流不好测试,ZLMediaKit 同时也支持 rtp_mpegts 推流,代码会自适应判断是否为 ps 还是 ts。 所以如果大家没有摄像头的情况下,可以用 FFmpeg 简单测试,基本上体验跟国标推流并无二致。

                • ffmpeg 推流命令:
                 ffmpeg -re -i www/record/robot.mp4 -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000
                 
                • MediaServer 收到推流后的日志: 图片
                ',8),f=e("code",null,"rtp",-1),b=e("code",null,"BFC2C622",-1),v=e("p",null,"需要指出的是,国标推流的 app 固定为 rtp,你只能通过代码来修改它,stream_id 为 rtp 流的 ssrc,这个是随机的,在 FFmpeg 中貌似没法控制。",-1),k={href:"https://github.com/xia-chu/ZLMediaKit/issues/267",target:"_blank",rel:"noopener noreferrer"},x=e("h2",{id:"高阶使用",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#高阶使用","aria-hidden":"true"},"#"),a(" 高阶使用")],-1),L=e("p",null,"在推流给 10000 端口时,您可能发现有个缺陷,就是 stream_id 是 ssrc,比较抽象,可能还没法控制。",-1),M=l(`

                在使用 openRtpServer 接口动态开启国标收流端口后,这个端口只能产生一个流,也就是说,一个摄像头需要一个服务器端口用于接收国标推流。

                • 以下是演示范例(postman 工具调用 openRtpServer 接口创建随机端口):
                图片
                图片
                • 然后启动 FFmpeg 推流
                 ffmpeg -re -i www/record/robot.mp4 -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:50077
                 
                • 以下是推流后注册的服务器日志 图片

                • 需要指出的是,如果 openRtpServer 接口创建的端口一直没收到流(或者解析不出流),那么会自动关闭和释放。

                调试文件生成

                如果你的 MediaServer 能收到国标推流,但是未出现媒体注册相关日志,那么有可能是流有些异常,你可以修改配置文件rtp_proxy.dumpDir指定调试文件导出目录, 这样 ZLMediaKit 会把国标流导出到该文件夹,就像这样:

                图片
                图片

                你可以直接用 ffplay 播放mp2/video后缀的文件rtp后缀的文件,你可以用测试工具test_rtp调试,或者你可以把它分享给其他人帮你分析原因。

                让 ZLMediaKit 往其他国标服务器推流

                ',11),K=e("ul",null,[e("li",null,"postman 调用 startSendRtp 接口推送国标流:")],-1),Z=e("figure",null,[e("img",{src:"https://user-images.githubusercontent.com/11495632/93873636-a0576500-fd04-11ea-8b0f-98fb3f60c778.png",alt:"图片",width:"1551",tabindex:"0",loading:"lazy"}),e("figcaption",null,"图片")],-1),z=e("figure",null,[e("img",{src:o,alt:"图片",tabindex:"0",loading:"lazy"}),e("figcaption",null,"图片")],-1),w=e("ul",null,[e("li",null,"上图中是推送国标流给自己,当然你也可以推送给其他服务器,支持 udp/tcp 方式推流。")],-1),B=e("h2",{id:"性能",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#性能","aria-hidden":"true"},"#"),a(" 性能")],-1),y={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/961",target:"_blank",rel:"noopener noreferrer"},S=e("h2",{id:"丢包问题调试",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#丢包问题调试","aria-hidden":"true"},"#"),a(" 丢包问题调试")],-1),F=e("p",null,"如果在测试 GB28181 UDP 推流时,频繁打印以下日志:",-1),G=e("figure",null,[e("img",{src:d,alt:"图片",tabindex:"0",loading:"lazy"}),e("figcaption",null,"图片")],-1),C={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/1221",target:"_blank",rel:"noopener noreferrer"},R=e("h2",{id:"相关文章推荐阅读",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#相关文章推荐阅读","aria-hidden":"true"},"#"),a(" 相关文章推荐阅读")],-1),V={href:"https://notemi.cn/wvp---zlmedia-kit---mediaserverui-to-realize-streaming-playback-and-recording-of-camera-gb28181.html",target:"_blank",rel:"noopener noreferrer"},I={href:"http://dlgcy.com/gb28181-solution-zlmediakit-mediaserverui/",target:"_blank",rel:"noopener noreferrer"},N={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/2217",target:"_blank",rel:"noopener noreferrer"};function P(U,D){const r=n("RouterLink"),i=n("ExternalLinkIcon");return u(),_("div",null,[g,e("p",null,[a("上图中,这个推流的 rtp ssrc 为 BFC2C622(16 进制打印),这个流的 app 为"),f,a(", stream_id 为"),b,a(",您可以根据"),t(r,{to:"/zh/guide/media_server/play_url_rules.html"},{default:s(()=>[a("wiki")]),_:1}),a("来组合成 url 并播放这个流。")]),v,e("p",null,[a("另外,每次推流时,请更换 ssrc,否则 ZLMediaKit 发现推流端 ip 和端口变化后,会直接丢弃 rtp 包(现象如此"),e("a",k,[a("issue"),t(i)]),a(");这样做的目的是为了防止两个设备使用同一个 ssrc 推流时互相干扰。")]),x,L,e("p",null,[a("那么我们能否自定义 stream_id? 答案是肯定的,ZLMediaKit 通过"),t(r,{to:"/zh/guide/media_server/restful_api.html#24indexapiopenrtpserver"},{default:s(()=>[a("restful api")]),_:1}),a("可以动态开启国标收流端口(同时支持 udp/tcp 模式)。")]),M,e("p",null,[a("你可以使用"),t(r,{to:"/zh/guide/media_server/restful_api.html#27indexapistartsendrtp"},{default:s(()=>[a("restful api")]),_:1}),a("让 ZLMediaKit 生成国标流并往其他服务器推送,支持其他任何已注册的流转国标流。")]),K,Z,z,w,B,e("p",null,[a("GB28181 的推流性能测试,请参考:"),e("a",y,[a("#961"),t(i)])]),S,F,G,e("p",null,[a("请查看此"),e("a",C,[a("issue"),t(i)]),a(",特别提示,wifi 情况下,由于无线网络干扰严重,丢包问题很可能确实是网络质量差导致的。")]),R,e("p",null,[e("a",V,[a("WVP+ZLMediaKit+MediaServerUI 实现摄像头 GB28181 推流播放录制"),t(i)])]),e("p",null,[e("a",I,[a("使用 GB28181.Solution + ZLMediaKit + MediaServerUI 进行摄像头推流和播放"),t(i)])]),e("p",null,[e("a",N,[a("GB28181 语音对讲"),t(i)])])])}const j=h(m,[["render",P],["__file","push_streaming.html.vue"]]);export{j as default}; diff --git a/assets/push_streaming.html-5CuTTppH.js b/assets/push_streaming.html-o6HXGEGb.js similarity index 99% rename from assets/push_streaming.html-5CuTTppH.js rename to assets/push_streaming.html-o6HXGEGb.js index 3514613..1631045 100644 --- a/assets/push_streaming.html-5CuTTppH.js +++ b/assets/push_streaming.html-o6HXGEGb.js @@ -1,3 +1,3 @@ -import{_ as o,a as d,b as p,c}from"./gb28181_push_streaming_4-qWTnfswt.js";import{_ as u}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as h,c as _,a as e,d as a,b as t,w as s,e as n}from"./app-BrxqtzGY.js";const m={},g=n('

                介绍

                ZLMediaKit 支持 GB28181 的 ps-rtp 推流,支持的编码格式分别为 h264/h265/aac/g711/opus。 在收到 GB28181 推流后,ZLMediaKit 会依次做以下事情:

                • rtp 排序去重。
                • rtp 解析成 ps 或 ts。
                • ps 或 ts 解析成h264/h265/aac/g711/opus
                • 输入到复用器,生成 rtsp/rtmp/ts/fmp4 等格式,以便转换成其他协议或容器。

                简单使用

                ZLMediaKit 默认开启 10000 端口用于接收 UDP/TCP 的 GB28181 推流,由于国标推流不好测试,ZLMediaKit 同时也支持 rtp_mpegts 推流,代码会自适应判断是否为 ps 还是 ts。 所以如果大家没有摄像头的情况下,可以用 FFmpeg 简单测试,基本上体验跟国标推流并无二致。

                ',5),f=n(`
              2. ffmpeg 推流命令:

                 ffmpeg -re -i www/record/robot.mp4 -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000
                +import{_ as o,a as d,b as p,c}from"./gb28181_push_streaming_4-qWTnfswt.js";import{_ as u}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as h,c as _,a as e,d as a,b as t,w as s,e as n}from"./app-oTlYPy8h.js";const m={},g=n('

                介绍

                ZLMediaKit 支持 GB28181 的 ps-rtp 推流,支持的编码格式分别为 h264/h265/aac/g711/opus。 在收到 GB28181 推流后,ZLMediaKit 会依次做以下事情:

                • rtp 排序去重。
                • rtp 解析成 ps 或 ts。
                • ps 或 ts 解析成h264/h265/aac/g711/opus
                • 输入到复用器,生成 rtsp/rtmp/ts/fmp4 等格式,以便转换成其他协议或容器。

                简单使用

                ZLMediaKit 默认开启 10000 端口用于接收 UDP/TCP 的 GB28181 推流,由于国标推流不好测试,ZLMediaKit 同时也支持 rtp_mpegts 推流,代码会自适应判断是否为 ps 还是 ts。 所以如果大家没有摄像头的情况下,可以用 FFmpeg 简单测试,基本上体验跟国标推流并无二致。

                ',5),f=n(`
              3. ffmpeg 推流命令:

                 ffmpeg -re -i www/record/robot.mp4 -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000
                 
              4. `,1),b=e("p",null,"MediaServer 收到推流后的日志:",-1),v=e("figure",null,[e("img",{src:o,alt:"图片",tabindex:"0",loading:"lazy"}),e("figcaption",null,"图片")],-1),k=e("code",null,"rtp",-1),x=e("code",null,"BFC2C622",-1),L=e("p",null,"需要指出的是,国标推流的 app 固定为 rtp,你只能通过代码来修改它,stream_id 为 rtp 流的 ssrc,这个是随机的,在 FFmpeg 中貌似没法控制。",-1),M={href:"https://github.com/xia-chu/ZLMediaKit/issues/267",target:"_blank",rel:"noopener noreferrer"},K=e("h2",{id:"高阶使用",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#高阶使用","aria-hidden":"true"},"#"),a(" 高阶使用")],-1),Z=e("p",null,"在推流给 10000 端口时,您可能发现有个缺陷,就是 stream_id 是 ssrc,比较抽象,可能还没法控制。",-1),w=n(`

                在使用 openRtpServer 接口动态开启国标收流端口后,这个端口只能产生一个流,也就是说,一个摄像头需要一个服务器端口用于接收国标推流。

                • 以下是演示范例(postman 工具调用 openRtpServer 接口创建随机端口):
                图片
                图片
                • 然后启动 FFmpeg 推流
                 ffmpeg -re -i www/record/robot.mp4 -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:50077
                 
                • 以下是推流后注册的服务器日志

                  图片
                  图片
                • 需要指出的是,如果 openRtpServer 接口创建的端口一直没收到流(或者解析不出流),那么会自动关闭和释放。

                调试文件生成

                如果你的 MediaServer 能收到国标推流,但是未出现媒体注册相关日志,那么有可能是流有些异常,你可以修改配置文件rtp_proxy.dumpDir指定调试文件导出目录, 这样 ZLMediaKit 会把国标流导出到该文件夹,就像这样:

                图片
                图片

                你可以直接用 ffplay 播放mp2/video后缀的文件rtp后缀的文件,你可以用测试工具test_rtp调试,或者你可以把它分享给其他人帮你分析原因。

                让 ZLMediaKit 往其他国标服务器推流

                ',11),B=e("ul",null,[e("li",null,"postman 调用 startSendRtp 接口推送国标流:")],-1),y=e("figure",null,[e("img",{src:"https://user-images.githubusercontent.com/11495632/93873636-a0576500-fd04-11ea-8b0f-98fb3f60c778.png",alt:"图片",width:"1551",tabindex:"0",loading:"lazy"}),e("figcaption",null,"图片")],-1),z=e("figure",null,[e("img",{src:d,alt:"图片",tabindex:"0",loading:"lazy"}),e("figcaption",null,"图片")],-1),S=e("ul",null,[e("li",null,"上图中是推送国标流给自己,当然你也可以推送给其他服务器,支持 udp/tcp 方式推流。")],-1),F=e("h2",{id:"性能",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#性能","aria-hidden":"true"},"#"),a(" 性能")],-1),G={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/961",target:"_blank",rel:"noopener noreferrer"},C=e("h2",{id:"丢包问题调试",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#丢包问题调试","aria-hidden":"true"},"#"),a(" 丢包问题调试")],-1),R=e("p",null,"如果在测试 GB28181 UDP 推流时,频繁打印以下日志:",-1),V=e("figure",null,[e("img",{src:p,alt:"图片",tabindex:"0",loading:"lazy"}),e("figcaption",null,"图片")],-1),I={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/1221",target:"_blank",rel:"noopener noreferrer"},N=e("h2",{id:"相关文章推荐阅读",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#相关文章推荐阅读","aria-hidden":"true"},"#"),a(" 相关文章推荐阅读")],-1),P={href:"https://notemi.cn/wvp---zlmedia-kit---mediaserverui-to-realize-streaming-playback-and-recording-of-camera-gb28181.html",target:"_blank",rel:"noopener noreferrer"},U={href:"http://dlgcy.com/gb28181-solution-zlmediakit-mediaserverui/",target:"_blank",rel:"noopener noreferrer"},D={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/2217",target:"_blank",rel:"noopener noreferrer"};function E(T,W){const r=l("RouterLink"),i=l("ExternalLinkIcon");return h(),_("div",null,[g,e("ul",null,[f,e("li",null,[b,v,e("p",null,[a("上图中,这个推流的 rtp ssrc 为 BFC2C622(16 进制打印),这个流的 app 为"),k,a(", stream_id 为"),x,a(",您可以根据"),t(r,{to:"/guide/media_server/play_url_rules.html"},{default:s(()=>[a("wiki")]),_:1}),a("来组合成 url 并播放这个流。")])])]),L,e("p",null,[a("另外,每次推流时,请更换 ssrc,否则 ZLMediaKit 发现推流端 ip 和端口变化后,会直接丢弃 rtp 包(现象如此"),e("a",M,[a("issue"),t(i)]),a(");这样做的目的是为了防止两个设备使用同一个 ssrc 推流时互相干扰。")]),K,Z,e("p",null,[a("那么我们能否自定义 stream_id? 答案是肯定的,ZLMediaKit 通过"),t(r,{to:"/guide/media_server/restful_api.html#24indexapiopenrtpserver"},{default:s(()=>[a("restful api")]),_:1}),a("可以动态开启国标收流端口(同时支持 udp/tcp 模式)。")]),w,e("p",null,[a("你可以使用"),t(r,{to:"/guide/media_server/restful_api.html#27indexapistartsendrtp"},{default:s(()=>[a("restful api")]),_:1}),a("让 ZLMediaKit 生成国标流并往其他服务器推送,支持其他任何已注册的流转国标流。")]),B,y,z,S,F,e("p",null,[a("GB28181 的推流性能测试,请参考:"),e("a",G,[a("#961"),t(i)])]),C,R,V,e("p",null,[a("请查看此"),e("a",I,[a("issue"),t(i)]),a(",特别提示,wifi 情况下,由于无线网络干扰严重,丢包问题很可能确实是网络质量差导致的。")]),N,e("ul",null,[e("li",null,[e("p",null,[e("a",P,[a("WVP+ZLMediaKit+MediaServerUI 实现摄像头 GB28181 推流播放录制"),t(i)])])]),e("li",null,[e("p",null,[e("a",U,[a("使用 GB28181.Solution + ZLMediaKit + MediaServerUI 进行摄像头推流和播放"),t(i)])])]),e("li",null,[e("p",null,[e("a",D,[a("GB28181 语音对讲"),t(i)])])])])])}const H=u(m,[["render",E],["__file","push_streaming.html.vue"]]);export{H as default}; diff --git a/assets/push_test.html-HAP8YKRj.js b/assets/push_test.html-44HoghM7.js similarity index 98% rename from assets/push_test.html-HAP8YKRj.js rename to assets/push_test.html-44HoghM7.js index f2670bc..ea588a5 100644 --- a/assets/push_test.html-HAP8YKRj.js +++ b/assets/push_test.html-44HoghM7.js @@ -1,4 +1,4 @@ -import{_ as s}from"./push_test-WgKOKRFc.js";import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as r,c as p,a as l,d as a,b as i,w as c,e as o}from"./app-BrxqtzGY.js";const d={},m=o(`

                推流测试

                ZLMediaKit 支持 rtsp/rtmp/rtp 推流,一般通常使用 obs/ffmpeg 推流测试,其中 FFmpeg 推流命令支持以下:

                • 1、使用 rtsp 方式推流
                # h264推流
                +import{_ as s}from"./push_test-WgKOKRFc.js";import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as r,c as p,a as l,d as a,b as i,w as c,e as o}from"./app-oTlYPy8h.js";const d={},m=o(`

                推流测试

                ZLMediaKit 支持 rtsp/rtmp/rtp 推流,一般通常使用 obs/ffmpeg 推流测试,其中 FFmpeg 推流命令支持以下:

                • 1、使用 rtsp 方式推流
                # h264推流
                 ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
                 # h265推流
                 ffmpeg -re -i "/path/to/test.mp4" -vcodec h265 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
                diff --git a/assets/push_test.html-MSIBzphj.js b/assets/push_test.html-zDMue1Qy.js
                similarity index 98%
                rename from assets/push_test.html-MSIBzphj.js
                rename to assets/push_test.html-zDMue1Qy.js
                index 61021a5..b3375b1 100644
                --- a/assets/push_test.html-MSIBzphj.js
                +++ b/assets/push_test.html-zDMue1Qy.js
                @@ -1,4 +1,4 @@
                -import{_ as s}from"./push_test-WgKOKRFc.js";import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as r,c as p,a as i,d as a,b as l,w as o,e as c}from"./app-BrxqtzGY.js";const d={},m=c(`

                Push Testing

                ZLMediaKit supports RTSP/RTMP/RTP push streaming. Typically, OBS/FFmpeg is used for push testing. The FFmpeg push commands are as follows:

                1. Pushing via RTSP:

                  # H.264 push
                  +import{_ as s}from"./push_test-WgKOKRFc.js";import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as r,c as p,a as i,d as a,b as l,w as o,e as c}from"./app-oTlYPy8h.js";const d={},m=c(`

                  Push Testing

                  ZLMediaKit supports RTSP/RTMP/RTP push streaming. Typically, OBS/FFmpeg is used for push testing. The FFmpeg push commands are as follows:

                  1. Pushing via RTSP:

                    # H.264 push
                     ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
                     # H.265 push
                     ffmpeg -re -i "/path/to/test.mp4" -vcodec h265 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
                    diff --git a/assets/quadrantDiagram-6c355bbc-ZBJyvn0X.js b/assets/quadrantDiagram-6c355bbc-mORRzAzd.js
                    similarity index 99%
                    rename from assets/quadrantDiagram-6c355bbc-ZBJyvn0X.js
                    rename to assets/quadrantDiagram-6c355bbc-mORRzAzd.js
                    index 85e4eef..92f9068 100644
                    --- a/assets/quadrantDiagram-6c355bbc-ZBJyvn0X.js
                    +++ b/assets/quadrantDiagram-6c355bbc-mORRzAzd.js
                    @@ -1,4 +1,4 @@
                    -import{a_ as vt,c as yt,aL as D,l as ot,s as Lt,g as Ct,v as zt,x as bt,a as Et,b as Dt,z as It,h as gt,i as Bt,d as wt}from"./mermaid.core-zy7cM8l9.js";import{l as mt}from"./linear-KPN1H-BK.js";import"./app-BrxqtzGY.js";import"./init-Hi12RPRh.js";var pt=function(){var e=function(K,n,r,l){for(r=r||{},l=K.length;l--;r[K[l]]=n);return r},s=[1,3],h=[1,4],x=[1,5],f=[1,6],d=[1,7],c=[1,5,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],g=[1,5,6,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],i=[32,33,34],y=[2,7],p=[1,13],B=[1,17],N=[1,18],V=[1,19],I=[1,20],b=[1,21],M=[1,22],X=[1,23],C=[1,24],it=[1,25],at=[1,26],nt=[1,27],U=[1,30],Q=[1,31],T=[1,32],m=[1,33],_=[1,34],t=[1,35],A=[1,36],S=[1,37],k=[1,38],F=[1,39],P=[1,40],v=[1,41],L=[1,42],O=[1,57],Y=[1,58],z=[5,22,26,32,33,34,40,41,42,43,44,45,46,47,48,49,50,51],ht={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,SPACE:5,QUADRANT:6,document:7,line:8,statement:9,axisDetails:10,quadrantDetails:11,points:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,text:21,point_start:22,point_x:23,point_y:24,"X-AXIS":25,"AXIS-TEXT-DELIMITER":26,"Y-AXIS":27,QUADRANT_1:28,QUADRANT_2:29,QUADRANT_3:30,QUADRANT_4:31,NEWLINE:32,SEMI:33,EOF:34,alphaNumToken:35,textNoTagsToken:36,STR:37,MD_STR:38,alphaNum:39,PUNCTUATION:40,AMP:41,NUM:42,ALPHA:43,COMMA:44,PLUS:45,EQUALS:46,MULT:47,DOT:48,BRKT:49,UNDERSCORE:50,MINUS:51,$accept:0,$end:1},terminals_:{2:"error",5:"SPACE",6:"QUADRANT",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",22:"point_start",23:"point_x",24:"point_y",25:"X-AXIS",26:"AXIS-TEXT-DELIMITER",27:"Y-AXIS",28:"QUADRANT_1",29:"QUADRANT_2",30:"QUADRANT_3",31:"QUADRANT_4",32:"NEWLINE",33:"SEMI",34:"EOF",37:"STR",38:"MD_STR",40:"PUNCTUATION",41:"AMP",42:"NUM",43:"ALPHA",44:"COMMA",45:"PLUS",46:"EQUALS",47:"MULT",48:"DOT",49:"BRKT",50:"UNDERSCORE",51:"MINUS"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[9,0],[9,2],[9,1],[9,1],[9,1],[9,2],[9,2],[9,2],[9,1],[9,1],[12,4],[10,4],[10,3],[10,2],[10,4],[10,3],[10,2],[11,2],[11,2],[11,2],[11,2],[4,1],[4,1],[4,1],[21,1],[21,2],[21,1],[21,1],[39,1],[39,2],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[36,1],[36,1],[36,1]],performAction:function(n,r,l,o,q,a,et){var u=a.length-1;switch(q){case 12:this.$=a[u].trim(),o.setDiagramTitle(this.$);break;case 13:this.$=a[u].trim(),o.setAccTitle(this.$);break;case 14:case 15:this.$=a[u].trim(),o.setAccDescription(this.$);break;case 16:o.addSection(a[u].substr(8)),this.$=a[u].substr(8);break;case 17:o.addPoint(a[u-3],a[u-1],a[u]);break;case 18:o.setXAxisLeftText(a[u-2]),o.setXAxisRightText(a[u]);break;case 19:a[u-1].text+=" ⟶ ",o.setXAxisLeftText(a[u-1]);break;case 20:o.setXAxisLeftText(a[u]);break;case 21:o.setYAxisBottomText(a[u-2]),o.setYAxisTopText(a[u]);break;case 22:a[u-1].text+=" ⟶ ",o.setYAxisBottomText(a[u-1]);break;case 23:o.setYAxisBottomText(a[u]);break;case 24:o.setQuadrant1Text(a[u]);break;case 25:o.setQuadrant2Text(a[u]);break;case 26:o.setQuadrant3Text(a[u]);break;case 27:o.setQuadrant4Text(a[u]);break;case 31:this.$={text:a[u],type:"text"};break;case 32:this.$={text:a[u-1].text+""+a[u],type:a[u-1].type};break;case 33:this.$={text:a[u],type:"text"};break;case 34:this.$={text:a[u],type:"markdown"};break;case 35:this.$=a[u];break;case 36:this.$=a[u-1]+""+a[u];break}},table:[{3:1,4:2,5:s,6:h,32:x,33:f,34:d},{1:[3]},{3:8,4:2,5:s,6:h,32:x,33:f,34:d},{3:9,4:2,5:s,6:h,32:x,33:f,34:d},e(c,[2,4],{7:10}),e(g,[2,28]),e(g,[2,29]),e(g,[2,30]),{1:[2,1]},{1:[2,2]},e(i,y,{8:11,9:12,10:14,11:15,12:16,21:28,35:29,1:[2,3],5:p,13:B,15:N,17:V,19:I,20:b,25:M,27:X,28:C,29:it,30:at,31:nt,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L}),e(c,[2,5]),{4:43,32:x,33:f,34:d},e(i,y,{10:14,11:15,12:16,21:28,35:29,9:44,5:p,13:B,15:N,17:V,19:I,20:b,25:M,27:X,28:C,29:it,30:at,31:nt,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L}),e(i,[2,9]),e(i,[2,10]),e(i,[2,11]),{14:[1,45]},{16:[1,46]},{18:[1,47]},e(i,[2,15]),e(i,[2,16]),{21:48,35:29,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:49,35:29,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:50,35:29,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:51,35:29,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:52,35:29,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:53,35:29,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{5:O,22:[1,54],35:56,36:55,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y},e(z,[2,31]),e(z,[2,33]),e(z,[2,34]),e(z,[2,37]),e(z,[2,38]),e(z,[2,39]),e(z,[2,40]),e(z,[2,41]),e(z,[2,42]),e(z,[2,43]),e(z,[2,44]),e(z,[2,45]),e(z,[2,46]),e(z,[2,47]),e(c,[2,6]),e(i,[2,8]),e(i,[2,12]),e(i,[2,13]),e(i,[2,14]),e(i,[2,20],{36:55,35:56,5:O,26:[1,59],40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,23],{36:55,35:56,5:O,26:[1,60],40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,24],{36:55,35:56,5:O,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,25],{36:55,35:56,5:O,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,26],{36:55,35:56,5:O,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,27],{36:55,35:56,5:O,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),{23:[1,61]},e(z,[2,32]),e(z,[2,48]),e(z,[2,49]),e(z,[2,50]),e(i,[2,19],{35:29,21:62,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L}),e(i,[2,22],{35:29,21:63,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L}),{24:[1,64]},e(i,[2,18],{36:55,35:56,5:O,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,21],{36:55,35:56,5:O,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,17])],defaultActions:{8:[2,1],9:[2,2]},parseError:function(n,r){if(r.recoverable)this.trace(n);else{var l=new Error(n);throw l.hash=r,l}},parse:function(n){var r=this,l=[0],o=[],q=[null],a=[],et=this.table,u="",st=0,qt=0,St=2,Tt=1,kt=a.slice.call(arguments,1),E=Object.create(this.lexer),Z={yy:{}};for(var dt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,dt)&&(Z.yy[dt]=this.yy[dt]);E.setInput(n,Z.yy),Z.yy.lexer=E,Z.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var ut=E.yylloc;a.push(ut);var Ft=E.options&&E.options.ranges;typeof Z.yy.parseError=="function"?this.parseError=Z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Pt(){var j;return j=o.pop()||E.lex()||Tt,typeof j!="number"&&(j instanceof Array&&(o=j,j=o.pop()),j=r.symbols_[j]||j),j}for(var W,J,H,xt,tt={},rt,$,_t,lt;;){if(J=l[l.length-1],this.defaultActions[J]?H=this.defaultActions[J]:((W===null||typeof W>"u")&&(W=Pt()),H=et[J]&&et[J][W]),typeof H>"u"||!H.length||!H[0]){var ft="";lt=[];for(rt in et[J])this.terminals_[rt]&&rt>St&<.push("'"+this.terminals_[rt]+"'");E.showPosition?ft="Parse error on line "+(st+1)+`:
                    +import{a_ as vt,c as yt,aL as D,l as ot,s as Lt,g as Ct,v as zt,x as bt,a as Et,b as Dt,z as It,h as gt,i as Bt,d as wt}from"./mermaid.core-QJnSHCal.js";import{l as mt}from"./linear-JH76Qt4f.js";import"./app-oTlYPy8h.js";import"./init-Hi12RPRh.js";var pt=function(){var e=function(K,n,r,l){for(r=r||{},l=K.length;l--;r[K[l]]=n);return r},s=[1,3],h=[1,4],x=[1,5],f=[1,6],d=[1,7],c=[1,5,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],g=[1,5,6,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],i=[32,33,34],y=[2,7],p=[1,13],B=[1,17],N=[1,18],V=[1,19],I=[1,20],b=[1,21],M=[1,22],X=[1,23],C=[1,24],it=[1,25],at=[1,26],nt=[1,27],U=[1,30],Q=[1,31],T=[1,32],m=[1,33],_=[1,34],t=[1,35],A=[1,36],S=[1,37],k=[1,38],F=[1,39],P=[1,40],v=[1,41],L=[1,42],O=[1,57],Y=[1,58],z=[5,22,26,32,33,34,40,41,42,43,44,45,46,47,48,49,50,51],ht={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,SPACE:5,QUADRANT:6,document:7,line:8,statement:9,axisDetails:10,quadrantDetails:11,points:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,text:21,point_start:22,point_x:23,point_y:24,"X-AXIS":25,"AXIS-TEXT-DELIMITER":26,"Y-AXIS":27,QUADRANT_1:28,QUADRANT_2:29,QUADRANT_3:30,QUADRANT_4:31,NEWLINE:32,SEMI:33,EOF:34,alphaNumToken:35,textNoTagsToken:36,STR:37,MD_STR:38,alphaNum:39,PUNCTUATION:40,AMP:41,NUM:42,ALPHA:43,COMMA:44,PLUS:45,EQUALS:46,MULT:47,DOT:48,BRKT:49,UNDERSCORE:50,MINUS:51,$accept:0,$end:1},terminals_:{2:"error",5:"SPACE",6:"QUADRANT",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",22:"point_start",23:"point_x",24:"point_y",25:"X-AXIS",26:"AXIS-TEXT-DELIMITER",27:"Y-AXIS",28:"QUADRANT_1",29:"QUADRANT_2",30:"QUADRANT_3",31:"QUADRANT_4",32:"NEWLINE",33:"SEMI",34:"EOF",37:"STR",38:"MD_STR",40:"PUNCTUATION",41:"AMP",42:"NUM",43:"ALPHA",44:"COMMA",45:"PLUS",46:"EQUALS",47:"MULT",48:"DOT",49:"BRKT",50:"UNDERSCORE",51:"MINUS"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[9,0],[9,2],[9,1],[9,1],[9,1],[9,2],[9,2],[9,2],[9,1],[9,1],[12,4],[10,4],[10,3],[10,2],[10,4],[10,3],[10,2],[11,2],[11,2],[11,2],[11,2],[4,1],[4,1],[4,1],[21,1],[21,2],[21,1],[21,1],[39,1],[39,2],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[36,1],[36,1],[36,1]],performAction:function(n,r,l,o,q,a,et){var u=a.length-1;switch(q){case 12:this.$=a[u].trim(),o.setDiagramTitle(this.$);break;case 13:this.$=a[u].trim(),o.setAccTitle(this.$);break;case 14:case 15:this.$=a[u].trim(),o.setAccDescription(this.$);break;case 16:o.addSection(a[u].substr(8)),this.$=a[u].substr(8);break;case 17:o.addPoint(a[u-3],a[u-1],a[u]);break;case 18:o.setXAxisLeftText(a[u-2]),o.setXAxisRightText(a[u]);break;case 19:a[u-1].text+=" ⟶ ",o.setXAxisLeftText(a[u-1]);break;case 20:o.setXAxisLeftText(a[u]);break;case 21:o.setYAxisBottomText(a[u-2]),o.setYAxisTopText(a[u]);break;case 22:a[u-1].text+=" ⟶ ",o.setYAxisBottomText(a[u-1]);break;case 23:o.setYAxisBottomText(a[u]);break;case 24:o.setQuadrant1Text(a[u]);break;case 25:o.setQuadrant2Text(a[u]);break;case 26:o.setQuadrant3Text(a[u]);break;case 27:o.setQuadrant4Text(a[u]);break;case 31:this.$={text:a[u],type:"text"};break;case 32:this.$={text:a[u-1].text+""+a[u],type:a[u-1].type};break;case 33:this.$={text:a[u],type:"text"};break;case 34:this.$={text:a[u],type:"markdown"};break;case 35:this.$=a[u];break;case 36:this.$=a[u-1]+""+a[u];break}},table:[{3:1,4:2,5:s,6:h,32:x,33:f,34:d},{1:[3]},{3:8,4:2,5:s,6:h,32:x,33:f,34:d},{3:9,4:2,5:s,6:h,32:x,33:f,34:d},e(c,[2,4],{7:10}),e(g,[2,28]),e(g,[2,29]),e(g,[2,30]),{1:[2,1]},{1:[2,2]},e(i,y,{8:11,9:12,10:14,11:15,12:16,21:28,35:29,1:[2,3],5:p,13:B,15:N,17:V,19:I,20:b,25:M,27:X,28:C,29:it,30:at,31:nt,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L}),e(c,[2,5]),{4:43,32:x,33:f,34:d},e(i,y,{10:14,11:15,12:16,21:28,35:29,9:44,5:p,13:B,15:N,17:V,19:I,20:b,25:M,27:X,28:C,29:it,30:at,31:nt,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L}),e(i,[2,9]),e(i,[2,10]),e(i,[2,11]),{14:[1,45]},{16:[1,46]},{18:[1,47]},e(i,[2,15]),e(i,[2,16]),{21:48,35:29,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:49,35:29,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:50,35:29,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:51,35:29,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:52,35:29,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:53,35:29,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{5:O,22:[1,54],35:56,36:55,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y},e(z,[2,31]),e(z,[2,33]),e(z,[2,34]),e(z,[2,37]),e(z,[2,38]),e(z,[2,39]),e(z,[2,40]),e(z,[2,41]),e(z,[2,42]),e(z,[2,43]),e(z,[2,44]),e(z,[2,45]),e(z,[2,46]),e(z,[2,47]),e(c,[2,6]),e(i,[2,8]),e(i,[2,12]),e(i,[2,13]),e(i,[2,14]),e(i,[2,20],{36:55,35:56,5:O,26:[1,59],40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,23],{36:55,35:56,5:O,26:[1,60],40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,24],{36:55,35:56,5:O,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,25],{36:55,35:56,5:O,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,26],{36:55,35:56,5:O,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,27],{36:55,35:56,5:O,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),{23:[1,61]},e(z,[2,32]),e(z,[2,48]),e(z,[2,49]),e(z,[2,50]),e(i,[2,19],{35:29,21:62,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L}),e(i,[2,22],{35:29,21:63,37:U,38:Q,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L}),{24:[1,64]},e(i,[2,18],{36:55,35:56,5:O,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,21],{36:55,35:56,5:O,40:T,41:m,42:_,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,17])],defaultActions:{8:[2,1],9:[2,2]},parseError:function(n,r){if(r.recoverable)this.trace(n);else{var l=new Error(n);throw l.hash=r,l}},parse:function(n){var r=this,l=[0],o=[],q=[null],a=[],et=this.table,u="",st=0,qt=0,St=2,Tt=1,kt=a.slice.call(arguments,1),E=Object.create(this.lexer),Z={yy:{}};for(var dt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,dt)&&(Z.yy[dt]=this.yy[dt]);E.setInput(n,Z.yy),Z.yy.lexer=E,Z.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var ut=E.yylloc;a.push(ut);var Ft=E.options&&E.options.ranges;typeof Z.yy.parseError=="function"?this.parseError=Z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Pt(){var j;return j=o.pop()||E.lex()||Tt,typeof j!="number"&&(j instanceof Array&&(o=j,j=o.pop()),j=r.symbols_[j]||j),j}for(var W,J,H,xt,tt={},rt,$,_t,lt;;){if(J=l[l.length-1],this.defaultActions[J]?H=this.defaultActions[J]:((W===null||typeof W>"u")&&(W=Pt()),H=et[J]&&et[J][W]),typeof H>"u"||!H.length||!H[0]){var ft="";lt=[];for(rt in et[J])this.terminals_[rt]&&rt>St&<.push("'"+this.terminals_[rt]+"'");E.showPosition?ft="Parse error on line "+(st+1)+`:
                     `+E.showPosition()+`
                     Expecting `+lt.join(", ")+", got '"+(this.terminals_[W]||W)+"'":ft="Parse error on line "+(st+1)+": Unexpected "+(W==Tt?"end of input":"'"+(this.terminals_[W]||W)+"'"),this.parseError(ft,{text:E.match,token:this.terminals_[W]||W,line:E.yylineno,loc:ut,expected:lt})}if(H[0]instanceof Array&&H.length>1)throw new Error("Parse Error: multiple actions possible at state: "+J+", token: "+W);switch(H[0]){case 1:l.push(W),q.push(E.yytext),a.push(E.yylloc),l.push(H[1]),W=null,qt=E.yyleng,u=E.yytext,st=E.yylineno,ut=E.yylloc;break;case 2:if($=this.productions_[H[1]][1],tt.$=q[q.length-$],tt._$={first_line:a[a.length-($||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-($||1)].first_column,last_column:a[a.length-1].last_column},Ft&&(tt._$.range=[a[a.length-($||1)].range[0],a[a.length-1].range[1]]),xt=this.performAction.apply(tt,[u,qt,st,Z.yy,H[1],q,a].concat(kt)),typeof xt<"u")return xt;$&&(l=l.slice(0,-1*$*2),q=q.slice(0,-1*$),a=a.slice(0,-1*$)),l.push(this.productions_[H[1]][0]),q.push(tt.$),a.push(tt._$),_t=et[l[l.length-2]][l[l.length-1]],l.push(_t);break;case 3:return!0}}return!0}},At=function(){var K={EOF:1,parseError:function(r,l){if(this.yy.parser)this.yy.parser.parseError(r,l);else throw new Error(r)},setInput:function(n,r){return this.yy=r||this.yy||{},this._input=n,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var n=this._input[0];this.yytext+=n,this.yyleng++,this.offset++,this.match+=n,this.matched+=n;var r=n.match(/(?:\r\n?|\n).*/g);return r?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),n},unput:function(n){var r=n.length,l=n.split(/(?:\r\n?|\n)/g);this._input=n+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-r),this.offset-=r;var o=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),l.length-1&&(this.yylineno-=l.length-1);var q=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:l?(l.length===o.length?this.yylloc.first_column:0)+o[o.length-l.length].length-l[0].length:this.yylloc.first_column-r},this.options.ranges&&(this.yylloc.range=[q[0],q[0]+this.yyleng-r]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
                     `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(n){this.unput(this.match.slice(n))},pastInput:function(){var n=this.matched.substr(0,this.matched.length-this.match.length);return(n.length>20?"...":"")+n.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var n=this.match;return n.length<20&&(n+=this._input.substr(0,20-n.length)),(n.substr(0,20)+(n.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var n=this.pastInput(),r=new Array(n.length+1).join("-");return n+this.upcomingInput()+`
                    diff --git a/assets/requirementDiagram-4038b16c-KuNIOd0s.js b/assets/requirementDiagram-4038b16c-HXR1kktq.js
                    similarity index 99%
                    rename from assets/requirementDiagram-4038b16c-KuNIOd0s.js
                    rename to assets/requirementDiagram-4038b16c-HXR1kktq.js
                    index 9e7d7f7..3d44dd3 100644
                    --- a/assets/requirementDiagram-4038b16c-KuNIOd0s.js
                    +++ b/assets/requirementDiagram-4038b16c-HXR1kktq.js
                    @@ -1,4 +1,4 @@
                    -import{c as Te,s as Ce,g as Fe,b as Me,a as De,l as Ne,z as Pe,h as oe,i as Ye,j as ke}from"./mermaid.core-zy7cM8l9.js";import{G as Ue,l as Be}from"./layout-1ugHHiNm.js";import{l as Qe}from"./line-TqRW8de4.js";import"./app-BrxqtzGY.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";var ce=function(){var e=function(V,i,r,a){for(r=r||{},a=V.length;a--;r[V[a]]=i);return r},t=[1,3],l=[1,4],c=[1,5],u=[1,6],d=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],p=[1,18],h=[2,7],o=[1,22],g=[1,23],R=[1,24],A=[1,25],T=[1,26],N=[1,27],v=[1,20],k=[1,28],x=[1,29],F=[62,63],de=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],pe=[1,47],fe=[1,48],ye=[1,49],_e=[1,50],ge=[1,51],Ee=[1,52],Re=[1,53],O=[53,54],M=[1,64],D=[1,60],P=[1,61],Y=[1,62],U=[1,63],B=[1,65],z=[1,69],j=[1,70],X=[1,67],J=[1,68],m=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],ie={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,requirementType:17,requirementName:18,STRUCT_START:19,requirementBody:20,ID:21,COLONSEP:22,id:23,TEXT:24,text:25,RISK:26,riskLevel:27,VERIFYMTHD:28,verifyType:29,STRUCT_STOP:30,REQUIREMENT:31,FUNCTIONAL_REQUIREMENT:32,INTERFACE_REQUIREMENT:33,PERFORMANCE_REQUIREMENT:34,PHYSICAL_REQUIREMENT:35,DESIGN_CONSTRAINT:36,LOW_RISK:37,MED_RISK:38,HIGH_RISK:39,VERIFY_ANALYSIS:40,VERIFY_DEMONSTRATION:41,VERIFY_INSPECTION:42,VERIFY_TEST:43,ELEMENT:44,elementName:45,elementBody:46,TYPE:47,type:48,DOCREF:49,ref:50,END_ARROW_L:51,relationship:52,LINE:53,END_ARROW_R:54,CONTAINS:55,COPIES:56,DERIVES:57,SATISFIES:58,VERIFIES:59,REFINES:60,TRACES:61,unqString:62,qString:63,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",19:"STRUCT_START",21:"ID",22:"COLONSEP",24:"TEXT",26:"RISK",28:"VERIFYMTHD",30:"STRUCT_STOP",31:"REQUIREMENT",32:"FUNCTIONAL_REQUIREMENT",33:"INTERFACE_REQUIREMENT",34:"PERFORMANCE_REQUIREMENT",35:"PHYSICAL_REQUIREMENT",36:"DESIGN_CONSTRAINT",37:"LOW_RISK",38:"MED_RISK",39:"HIGH_RISK",40:"VERIFY_ANALYSIS",41:"VERIFY_DEMONSTRATION",42:"VERIFY_INSPECTION",43:"VERIFY_TEST",44:"ELEMENT",47:"TYPE",49:"DOCREF",51:"END_ARROW_L",53:"LINE",54:"END_ARROW_R",55:"CONTAINS",56:"COPIES",57:"DERIVES",58:"SATISFIES",59:"VERIFIES",60:"REFINES",61:"TRACES",62:"unqString",63:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[14,5],[20,5],[20,5],[20,5],[20,5],[20,2],[20,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[27,1],[27,1],[27,1],[29,1],[29,1],[29,1],[29,1],[15,5],[46,5],[46,5],[46,2],[46,1],[16,5],[16,5],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[18,1],[18,1],[23,1],[23,1],[25,1],[25,1],[45,1],[45,1],[48,1],[48,1],[50,1],[50,1]],performAction:function(i,r,a,n,f,s,W){var _=s.length-1;switch(f){case 4:this.$=s[_].trim(),n.setAccTitle(this.$);break;case 5:case 6:this.$=s[_].trim(),n.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:n.addRequirement(s[_-3],s[_-4]);break;case 14:n.setNewReqId(s[_-2]);break;case 15:n.setNewReqText(s[_-2]);break;case 16:n.setNewReqRisk(s[_-2]);break;case 17:n.setNewReqVerifyMethod(s[_-2]);break;case 20:this.$=n.RequirementType.REQUIREMENT;break;case 21:this.$=n.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=n.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=n.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=n.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=n.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=n.RiskLevel.LOW_RISK;break;case 27:this.$=n.RiskLevel.MED_RISK;break;case 28:this.$=n.RiskLevel.HIGH_RISK;break;case 29:this.$=n.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=n.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=n.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=n.VerifyType.VERIFY_TEST;break;case 33:n.addElement(s[_-3]);break;case 34:n.setNewElementType(s[_-2]);break;case 35:n.setNewElementDocRef(s[_-2]);break;case 38:n.addRelationship(s[_-2],s[_],s[_-4]);break;case 39:n.addRelationship(s[_-2],s[_-4],s[_]);break;case 40:this.$=n.Relationships.CONTAINS;break;case 41:this.$=n.Relationships.COPIES;break;case 42:this.$=n.Relationships.DERIVES;break;case 43:this.$=n.Relationships.SATISFIES;break;case 44:this.$=n.Relationships.VERIFIES;break;case 45:this.$=n.Relationships.REFINES;break;case 46:this.$=n.Relationships.TRACES;break}},table:[{3:1,4:2,6:t,9:l,11:c,13:u},{1:[3]},{3:8,4:2,5:[1,7],6:t,9:l,11:c,13:u},{5:[1,9]},{10:[1,10]},{12:[1,11]},e(d,[2,6]),{3:12,4:2,6:t,9:l,11:c,13:u},{1:[2,2]},{4:17,5:p,7:13,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},e(d,[2,4]),e(d,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:p,7:31,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{4:17,5:p,7:32,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{4:17,5:p,7:33,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{4:17,5:p,7:34,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{4:17,5:p,7:35,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},e(F,[2,20]),e(F,[2,21]),e(F,[2,22]),e(F,[2,23]),e(F,[2,24]),e(F,[2,25]),e(de,[2,49]),e(de,[2,50]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{19:[1,44]},{19:[2,47]},{19:[2,48]},{19:[1,45]},{19:[2,53]},{19:[2,54]},{52:46,55:pe,56:fe,57:ye,58:_e,59:ge,60:Ee,61:Re},{52:54,55:pe,56:fe,57:ye,58:_e,59:ge,60:Ee,61:Re},{5:[1,55]},{5:[1,56]},{53:[1,57]},e(O,[2,40]),e(O,[2,41]),e(O,[2,42]),e(O,[2,43]),e(O,[2,44]),e(O,[2,45]),e(O,[2,46]),{54:[1,58]},{5:M,20:59,21:D,24:P,26:Y,28:U,30:B},{5:z,30:j,46:66,47:X,49:J},{23:71,62:k,63:x},{23:72,62:k,63:x},e(m,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:M,20:77,21:D,24:P,26:Y,28:U,30:B},e(m,[2,19]),e(m,[2,33]),{22:[1,78]},{22:[1,79]},{5:z,30:j,46:80,47:X,49:J},e(m,[2,37]),e(m,[2,38]),e(m,[2,39]),{23:81,62:k,63:x},{25:82,62:[1,83],63:[1,84]},{27:85,37:[1,86],38:[1,87],39:[1,88]},{29:89,40:[1,90],41:[1,91],42:[1,92],43:[1,93]},e(m,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},e(m,[2,36]),{5:[1,100]},{5:[1,101]},{5:[2,51]},{5:[2,52]},{5:[1,102]},{5:[2,26]},{5:[2,27]},{5:[2,28]},{5:[1,103]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[2,32]},{5:[1,104]},{5:[2,55]},{5:[2,56]},{5:[1,105]},{5:[2,57]},{5:[2,58]},{5:M,20:106,21:D,24:P,26:Y,28:U,30:B},{5:M,20:107,21:D,24:P,26:Y,28:U,30:B},{5:M,20:108,21:D,24:P,26:Y,28:U,30:B},{5:M,20:109,21:D,24:P,26:Y,28:U,30:B},{5:z,30:j,46:110,47:X,49:J},{5:z,30:j,46:111,47:X,49:J},e(m,[2,14]),e(m,[2,15]),e(m,[2,16]),e(m,[2,17]),e(m,[2,34]),e(m,[2,35])],defaultActions:{8:[2,2],12:[2,1],30:[2,3],31:[2,8],32:[2,9],33:[2,10],34:[2,11],35:[2,12],37:[2,47],38:[2,48],40:[2,53],41:[2,54],83:[2,51],84:[2,52],86:[2,26],87:[2,27],88:[2,28],90:[2,29],91:[2,30],92:[2,31],93:[2,32],95:[2,55],96:[2,56],98:[2,57],99:[2,58]},parseError:function(i,r){if(r.recoverable)this.trace(i);else{var a=new Error(i);throw a.hash=r,a}},parse:function(i){var r=this,a=[0],n=[],f=[null],s=[],W=this.table,_="",Z=0,me=0,Ve=2,Ie=1,qe=s.slice.call(arguments,1),E=Object.create(this.lexer),L={yy:{}};for(var re in this.yy)Object.prototype.hasOwnProperty.call(this.yy,re)&&(L.yy[re]=this.yy[re]);E.setInput(i,L.yy),L.yy.lexer=E,L.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var se=E.yylloc;s.push(se);var Oe=E.options&&E.options.ranges;typeof L.yy.parseError=="function"?this.parseError=L.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Le(){var $;return $=n.pop()||E.lex()||Ie,typeof $!="number"&&($ instanceof Array&&(n=$,$=n.pop()),$=r.symbols_[$]||$),$}for(var I,C,S,ae,Q={},ee,w,be,te;;){if(C=a[a.length-1],this.defaultActions[C]?S=this.defaultActions[C]:((I===null||typeof I>"u")&&(I=Le()),S=W[C]&&W[C][I]),typeof S>"u"||!S.length||!S[0]){var le="";te=[];for(ee in W[C])this.terminals_[ee]&&ee>Ve&&te.push("'"+this.terminals_[ee]+"'");E.showPosition?le="Parse error on line "+(Z+1)+`:
                    +import{c as Te,s as Ce,g as Fe,b as Me,a as De,l as Ne,z as Pe,h as oe,i as Ye,j as ke}from"./mermaid.core-QJnSHCal.js";import{G as Ue,l as Be}from"./layout-Vth69vlg.js";import{l as Qe}from"./line-ZVNdUhg2.js";import"./app-oTlYPy8h.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";var ce=function(){var e=function(V,i,r,a){for(r=r||{},a=V.length;a--;r[V[a]]=i);return r},t=[1,3],l=[1,4],c=[1,5],u=[1,6],d=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],p=[1,18],h=[2,7],o=[1,22],g=[1,23],R=[1,24],A=[1,25],T=[1,26],N=[1,27],v=[1,20],k=[1,28],x=[1,29],F=[62,63],de=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],pe=[1,47],fe=[1,48],ye=[1,49],_e=[1,50],ge=[1,51],Ee=[1,52],Re=[1,53],O=[53,54],M=[1,64],D=[1,60],P=[1,61],Y=[1,62],U=[1,63],B=[1,65],z=[1,69],j=[1,70],X=[1,67],J=[1,68],m=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],ie={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,requirementType:17,requirementName:18,STRUCT_START:19,requirementBody:20,ID:21,COLONSEP:22,id:23,TEXT:24,text:25,RISK:26,riskLevel:27,VERIFYMTHD:28,verifyType:29,STRUCT_STOP:30,REQUIREMENT:31,FUNCTIONAL_REQUIREMENT:32,INTERFACE_REQUIREMENT:33,PERFORMANCE_REQUIREMENT:34,PHYSICAL_REQUIREMENT:35,DESIGN_CONSTRAINT:36,LOW_RISK:37,MED_RISK:38,HIGH_RISK:39,VERIFY_ANALYSIS:40,VERIFY_DEMONSTRATION:41,VERIFY_INSPECTION:42,VERIFY_TEST:43,ELEMENT:44,elementName:45,elementBody:46,TYPE:47,type:48,DOCREF:49,ref:50,END_ARROW_L:51,relationship:52,LINE:53,END_ARROW_R:54,CONTAINS:55,COPIES:56,DERIVES:57,SATISFIES:58,VERIFIES:59,REFINES:60,TRACES:61,unqString:62,qString:63,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",19:"STRUCT_START",21:"ID",22:"COLONSEP",24:"TEXT",26:"RISK",28:"VERIFYMTHD",30:"STRUCT_STOP",31:"REQUIREMENT",32:"FUNCTIONAL_REQUIREMENT",33:"INTERFACE_REQUIREMENT",34:"PERFORMANCE_REQUIREMENT",35:"PHYSICAL_REQUIREMENT",36:"DESIGN_CONSTRAINT",37:"LOW_RISK",38:"MED_RISK",39:"HIGH_RISK",40:"VERIFY_ANALYSIS",41:"VERIFY_DEMONSTRATION",42:"VERIFY_INSPECTION",43:"VERIFY_TEST",44:"ELEMENT",47:"TYPE",49:"DOCREF",51:"END_ARROW_L",53:"LINE",54:"END_ARROW_R",55:"CONTAINS",56:"COPIES",57:"DERIVES",58:"SATISFIES",59:"VERIFIES",60:"REFINES",61:"TRACES",62:"unqString",63:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[14,5],[20,5],[20,5],[20,5],[20,5],[20,2],[20,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[27,1],[27,1],[27,1],[29,1],[29,1],[29,1],[29,1],[15,5],[46,5],[46,5],[46,2],[46,1],[16,5],[16,5],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[18,1],[18,1],[23,1],[23,1],[25,1],[25,1],[45,1],[45,1],[48,1],[48,1],[50,1],[50,1]],performAction:function(i,r,a,n,f,s,W){var _=s.length-1;switch(f){case 4:this.$=s[_].trim(),n.setAccTitle(this.$);break;case 5:case 6:this.$=s[_].trim(),n.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:n.addRequirement(s[_-3],s[_-4]);break;case 14:n.setNewReqId(s[_-2]);break;case 15:n.setNewReqText(s[_-2]);break;case 16:n.setNewReqRisk(s[_-2]);break;case 17:n.setNewReqVerifyMethod(s[_-2]);break;case 20:this.$=n.RequirementType.REQUIREMENT;break;case 21:this.$=n.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=n.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=n.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=n.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=n.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=n.RiskLevel.LOW_RISK;break;case 27:this.$=n.RiskLevel.MED_RISK;break;case 28:this.$=n.RiskLevel.HIGH_RISK;break;case 29:this.$=n.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=n.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=n.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=n.VerifyType.VERIFY_TEST;break;case 33:n.addElement(s[_-3]);break;case 34:n.setNewElementType(s[_-2]);break;case 35:n.setNewElementDocRef(s[_-2]);break;case 38:n.addRelationship(s[_-2],s[_],s[_-4]);break;case 39:n.addRelationship(s[_-2],s[_-4],s[_]);break;case 40:this.$=n.Relationships.CONTAINS;break;case 41:this.$=n.Relationships.COPIES;break;case 42:this.$=n.Relationships.DERIVES;break;case 43:this.$=n.Relationships.SATISFIES;break;case 44:this.$=n.Relationships.VERIFIES;break;case 45:this.$=n.Relationships.REFINES;break;case 46:this.$=n.Relationships.TRACES;break}},table:[{3:1,4:2,6:t,9:l,11:c,13:u},{1:[3]},{3:8,4:2,5:[1,7],6:t,9:l,11:c,13:u},{5:[1,9]},{10:[1,10]},{12:[1,11]},e(d,[2,6]),{3:12,4:2,6:t,9:l,11:c,13:u},{1:[2,2]},{4:17,5:p,7:13,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},e(d,[2,4]),e(d,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:p,7:31,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{4:17,5:p,7:32,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{4:17,5:p,7:33,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{4:17,5:p,7:34,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{4:17,5:p,7:35,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},e(F,[2,20]),e(F,[2,21]),e(F,[2,22]),e(F,[2,23]),e(F,[2,24]),e(F,[2,25]),e(de,[2,49]),e(de,[2,50]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{19:[1,44]},{19:[2,47]},{19:[2,48]},{19:[1,45]},{19:[2,53]},{19:[2,54]},{52:46,55:pe,56:fe,57:ye,58:_e,59:ge,60:Ee,61:Re},{52:54,55:pe,56:fe,57:ye,58:_e,59:ge,60:Ee,61:Re},{5:[1,55]},{5:[1,56]},{53:[1,57]},e(O,[2,40]),e(O,[2,41]),e(O,[2,42]),e(O,[2,43]),e(O,[2,44]),e(O,[2,45]),e(O,[2,46]),{54:[1,58]},{5:M,20:59,21:D,24:P,26:Y,28:U,30:B},{5:z,30:j,46:66,47:X,49:J},{23:71,62:k,63:x},{23:72,62:k,63:x},e(m,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:M,20:77,21:D,24:P,26:Y,28:U,30:B},e(m,[2,19]),e(m,[2,33]),{22:[1,78]},{22:[1,79]},{5:z,30:j,46:80,47:X,49:J},e(m,[2,37]),e(m,[2,38]),e(m,[2,39]),{23:81,62:k,63:x},{25:82,62:[1,83],63:[1,84]},{27:85,37:[1,86],38:[1,87],39:[1,88]},{29:89,40:[1,90],41:[1,91],42:[1,92],43:[1,93]},e(m,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},e(m,[2,36]),{5:[1,100]},{5:[1,101]},{5:[2,51]},{5:[2,52]},{5:[1,102]},{5:[2,26]},{5:[2,27]},{5:[2,28]},{5:[1,103]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[2,32]},{5:[1,104]},{5:[2,55]},{5:[2,56]},{5:[1,105]},{5:[2,57]},{5:[2,58]},{5:M,20:106,21:D,24:P,26:Y,28:U,30:B},{5:M,20:107,21:D,24:P,26:Y,28:U,30:B},{5:M,20:108,21:D,24:P,26:Y,28:U,30:B},{5:M,20:109,21:D,24:P,26:Y,28:U,30:B},{5:z,30:j,46:110,47:X,49:J},{5:z,30:j,46:111,47:X,49:J},e(m,[2,14]),e(m,[2,15]),e(m,[2,16]),e(m,[2,17]),e(m,[2,34]),e(m,[2,35])],defaultActions:{8:[2,2],12:[2,1],30:[2,3],31:[2,8],32:[2,9],33:[2,10],34:[2,11],35:[2,12],37:[2,47],38:[2,48],40:[2,53],41:[2,54],83:[2,51],84:[2,52],86:[2,26],87:[2,27],88:[2,28],90:[2,29],91:[2,30],92:[2,31],93:[2,32],95:[2,55],96:[2,56],98:[2,57],99:[2,58]},parseError:function(i,r){if(r.recoverable)this.trace(i);else{var a=new Error(i);throw a.hash=r,a}},parse:function(i){var r=this,a=[0],n=[],f=[null],s=[],W=this.table,_="",Z=0,me=0,Ve=2,Ie=1,qe=s.slice.call(arguments,1),E=Object.create(this.lexer),L={yy:{}};for(var re in this.yy)Object.prototype.hasOwnProperty.call(this.yy,re)&&(L.yy[re]=this.yy[re]);E.setInput(i,L.yy),L.yy.lexer=E,L.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var se=E.yylloc;s.push(se);var Oe=E.options&&E.options.ranges;typeof L.yy.parseError=="function"?this.parseError=L.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Le(){var $;return $=n.pop()||E.lex()||Ie,typeof $!="number"&&($ instanceof Array&&(n=$,$=n.pop()),$=r.symbols_[$]||$),$}for(var I,C,S,ae,Q={},ee,w,be,te;;){if(C=a[a.length-1],this.defaultActions[C]?S=this.defaultActions[C]:((I===null||typeof I>"u")&&(I=Le()),S=W[C]&&W[C][I]),typeof S>"u"||!S.length||!S[0]){var le="";te=[];for(ee in W[C])this.terminals_[ee]&&ee>Ve&&te.push("'"+this.terminals_[ee]+"'");E.showPosition?le="Parse error on line "+(Z+1)+`:
                     `+E.showPosition()+`
                     Expecting `+te.join(", ")+", got '"+(this.terminals_[I]||I)+"'":le="Parse error on line "+(Z+1)+": Unexpected "+(I==Ie?"end of input":"'"+(this.terminals_[I]||I)+"'"),this.parseError(le,{text:E.match,token:this.terminals_[I]||I,line:E.yylineno,loc:se,expected:te})}if(S[0]instanceof Array&&S.length>1)throw new Error("Parse Error: multiple actions possible at state: "+C+", token: "+I);switch(S[0]){case 1:a.push(I),f.push(E.yytext),s.push(E.yylloc),a.push(S[1]),I=null,me=E.yyleng,_=E.yytext,Z=E.yylineno,se=E.yylloc;break;case 2:if(w=this.productions_[S[1]][1],Q.$=f[f.length-w],Q._$={first_line:s[s.length-(w||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(w||1)].first_column,last_column:s[s.length-1].last_column},Oe&&(Q._$.range=[s[s.length-(w||1)].range[0],s[s.length-1].range[1]]),ae=this.performAction.apply(Q,[_,me,Z,L.yy,S[1],f,s].concat(qe)),typeof ae<"u")return ae;w&&(a=a.slice(0,-1*w*2),f=f.slice(0,-1*w),s=s.slice(0,-1*w)),a.push(this.productions_[S[1]][0]),f.push(Q.$),s.push(Q._$),be=W[a[a.length-2]][a[a.length-1]],a.push(be);break;case 3:return!0}}return!0}},$e=function(){var V={EOF:1,parseError:function(r,a){if(this.yy.parser)this.yy.parser.parseError(r,a);else throw new Error(r)},setInput:function(i,r){return this.yy=r||this.yy||{},this._input=i,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var i=this._input[0];this.yytext+=i,this.yyleng++,this.offset++,this.match+=i,this.matched+=i;var r=i.match(/(?:\r\n?|\n).*/g);return r?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),i},unput:function(i){var r=i.length,a=i.split(/(?:\r\n?|\n)/g);this._input=i+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-r),this.offset-=r;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),a.length-1&&(this.yylineno-=a.length-1);var f=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:a?(a.length===n.length?this.yylloc.first_column:0)+n[n.length-a.length].length-a[0].length:this.yylloc.first_column-r},this.options.ranges&&(this.yylloc.range=[f[0],f[0]+this.yyleng-r]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
                     `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(i){this.unput(this.match.slice(i))},pastInput:function(){var i=this.matched.substr(0,this.matched.length-this.match.length);return(i.length>20?"...":"")+i.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var i=this.match;return i.length<20&&(i+=this._input.substr(0,20-i.length)),(i.substr(0,20)+(i.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var i=this.pastInput(),r=new Array(i.length+1).join("-");return i+this.upcomingInput()+`
                    diff --git a/assets/restful_api.html-pwLlZzjg.js b/assets/restful_api.html-INg-XF77.js
                    similarity index 99%
                    rename from assets/restful_api.html-pwLlZzjg.js
                    rename to assets/restful_api.html-INg-XF77.js
                    index 6a78c8a..0420858 100644
                    --- a/assets/restful_api.html-pwLlZzjg.js
                    +++ b/assets/restful_api.html-INg-XF77.js
                    @@ -1,4 +1,4 @@
                    -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as p,c as i,a as t,d as e,b as s,e as a}from"./app-BrxqtzGY.js";const r={},c=t("h2",{id:"download-postman-configuration-file-to-test-restful-api",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#download-postman-configuration-file-to-test-restful-api","aria-hidden":"true"},"#"),e(" Download postman configuration file (to test RESTful API)")],-1),d={href:"https://github.com/xia-chu/ZLMediaKit/tree/master/postman",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/xia-chu/ZLMediaKit/blob/master/server/WebApi.cpp#L261",target:"_blank",rel:"noopener noreferrer"},k=a(`

                    API Preview

                    MediaServer is the main process of ZLMediaKit and currently supports the following HTTP API endpoints. All these endpoints support both GET and POST methods.

                          "/index/api/addFFmpegSource",
                    +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as p,c as i,a as t,d as e,b as s,e as a}from"./app-oTlYPy8h.js";const r={},c=t("h2",{id:"download-postman-configuration-file-to-test-restful-api",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#download-postman-configuration-file-to-test-restful-api","aria-hidden":"true"},"#"),e(" Download postman configuration file (to test RESTful API)")],-1),d={href:"https://github.com/xia-chu/ZLMediaKit/tree/master/postman",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/xia-chu/ZLMediaKit/blob/master/server/WebApi.cpp#L261",target:"_blank",rel:"noopener noreferrer"},k=a(`

                    API Preview

                    MediaServer is the main process of ZLMediaKit and currently supports the following HTTP API endpoints. All these endpoints support both GET and POST methods.

                          "/index/api/addFFmpegSource",
                           "/index/api/addStreamProxy",
                           "/index/api/close_stream",
                           "/index/api/close_streams",
                    diff --git a/assets/restful_api.html-0EdVK-2T.js b/assets/restful_api.html-W3f4X4lL.js
                    similarity index 99%
                    rename from assets/restful_api.html-0EdVK-2T.js
                    rename to assets/restful_api.html-W3f4X4lL.js
                    index 86d5f08..459c767 100644
                    --- a/assets/restful_api.html-0EdVK-2T.js
                    +++ b/assets/restful_api.html-W3f4X4lL.js
                    @@ -1,4 +1,4 @@
                    -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as p,o as l,c as i,a as t,d as n,b as e,e as a}from"./app-BrxqtzGY.js";const r={},c=t("h2",{id:"下载-postman-配置文件-可以在线测试-restful-api",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#下载-postman-配置文件-可以在线测试-restful-api","aria-hidden":"true"},"#"),n(" 下载 postman 配置文件(可以在线测试 restful api)")],-1),d={href:"https://github.com/xia-chu/ZLMediaKit/tree/master/postman",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/xia-chu/ZLMediaKit/blob/master/server/WebApi.cpp#L261",target:"_blank",rel:"noopener noreferrer"},k=a(`

                    API 预览

                    MediaServer 是 ZLMediaKit 的主进程,目前支持以下 http api 接口,这些接口全部支持 GET/POST 方式,

                          "/index/api/addFFmpegSource",
                    +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as p,o as l,c as i,a as t,d as n,b as e,e as a}from"./app-oTlYPy8h.js";const r={},c=t("h2",{id:"下载-postman-配置文件-可以在线测试-restful-api",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#下载-postman-配置文件-可以在线测试-restful-api","aria-hidden":"true"},"#"),n(" 下载 postman 配置文件(可以在线测试 restful api)")],-1),d={href:"https://github.com/xia-chu/ZLMediaKit/tree/master/postman",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/xia-chu/ZLMediaKit/blob/master/server/WebApi.cpp#L261",target:"_blank",rel:"noopener noreferrer"},k=a(`

                    API 预览

                    MediaServer 是 ZLMediaKit 的主进程,目前支持以下 http api 接口,这些接口全部支持 GET/POST 方式,

                          "/index/api/addFFmpegSource",
                           "/index/api/addStreamProxy",
                           "/index/api/close_stream",
                           "/index/api/close_streams",
                    diff --git a/assets/rtmp_playback_compatibility_issues.html-h5lBk1EY.js b/assets/rtmp_playback_compatibility_issues.html-iFgHmMMS.js
                    similarity index 95%
                    rename from assets/rtmp_playback_compatibility_issues.html-h5lBk1EY.js
                    rename to assets/rtmp_playback_compatibility_issues.html-iFgHmMMS.js
                    index 6af52b0..885197f 100644
                    --- a/assets/rtmp_playback_compatibility_issues.html-h5lBk1EY.js
                    +++ b/assets/rtmp_playback_compatibility_issues.html-iFgHmMMS.js
                    @@ -1 +1 @@
                    -import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as t,e as i}from"./app-BrxqtzGY.js";const s={},o=i("

                    In general, the specification for RTMP is to first send metadata, followed by config frames, then keyframes, and finally regular frames.

                    Once the config frames are received, the decoder can be initialized.

                    However, some streams are different, as they receive other frames before receiving the config frame for the video.

                    In this case, the video track is not created and initialized.

                    There is a preliminary suspicion that the compatibility of the Nginx RTMP server is not good.

                    ZLMediaKit's streaming tool strictly follows the process of sending metadata first, then config frames, followed by keyframes, and finally regular frames.

                    It also caches all config frames.

                    FFplay can successfully play due to its determination of playback success based on data volume and time.

                    As long as the data volume reaches a certain threshold or the time reaches a certain duration, it triggers the event of successful playback.

                    The advantage of this approach is a high success rate in playback, but the downside is a longer video opening time.

                    ",10),r=[o];function c(n,l){return a(),t("div",null,r)}const d=e(s,[["render",c],["__file","rtmp_playback_compatibility_issues.html.vue"]]);export{d as default}; +import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as t,e as i}from"./app-oTlYPy8h.js";const s={},o=i("

                    In general, the specification for RTMP is to first send metadata, followed by config frames, then keyframes, and finally regular frames.

                    Once the config frames are received, the decoder can be initialized.

                    However, some streams are different, as they receive other frames before receiving the config frame for the video.

                    In this case, the video track is not created and initialized.

                    There is a preliminary suspicion that the compatibility of the Nginx RTMP server is not good.

                    ZLMediaKit's streaming tool strictly follows the process of sending metadata first, then config frames, followed by keyframes, and finally regular frames.

                    It also caches all config frames.

                    FFplay can successfully play due to its determination of playback success based on data volume and time.

                    As long as the data volume reaches a certain threshold or the time reaches a certain duration, it triggers the event of successful playback.

                    The advantage of this approach is a high success rate in playback, but the downside is a longer video opening time.

                    ",10),r=[o];function c(n,l){return a(),t("div",null,r)}const d=e(s,[["render",c],["__file","rtmp_playback_compatibility_issues.html.vue"]]);export{d as default}; diff --git a/assets/rtmp_playback_compatibility_issues.html-CmMs82Q4.js b/assets/rtmp_playback_compatibility_issues.html-wBkT5hGE.js similarity index 94% rename from assets/rtmp_playback_compatibility_issues.html-CmMs82Q4.js rename to assets/rtmp_playback_compatibility_issues.html-wBkT5hGE.js index 7112663..e9d5a3b 100644 --- a/assets/rtmp_playback_compatibility_issues.html-CmMs82Q4.js +++ b/assets/rtmp_playback_compatibility_issues.html-wBkT5hGE.js @@ -1 +1 @@ -import{_ as p}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as t,c,e}from"./app-BrxqtzGY.js";const a={},o=e("

                    一般来说 rtmp 的规范是 先发送 metadata ,然后发送 config 帧,然后发送关键帧 然后是普通帧

                    config 帧收到后就能初始化解码器了

                    但是有些流不太一样,并没有收到视频的 config 帧就收到其他帧了

                    这个时候视频 Track 并没创建和初始化

                    初步怀疑是 nginx 的 rtmp 服务器兼容性不好

                    zlm 的推流器会严格按照先发送 metadata ,然后发送 config 帧,然后发送关键帧 然后是普通帧的流程来做

                    也会缓存所有的 config 帧

                    ffplay 能播放成功是因为它是根据数据量和时间来判断播放成功

                    只要数据量达到一定量或者时间达到一定时间 就会触发播放成功的事件

                    这样做的好处是 播放成功率高 坏处是打开视频时间长

                    ",10),i=[o];function _(n,s){return t(),c("div",null,i)}const f=p(a,[["render",_],["__file","rtmp_playback_compatibility_issues.html.vue"]]);export{f as default}; +import{_ as p}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as t,c,e}from"./app-oTlYPy8h.js";const a={},o=e("

                    一般来说 rtmp 的规范是 先发送 metadata ,然后发送 config 帧,然后发送关键帧 然后是普通帧

                    config 帧收到后就能初始化解码器了

                    但是有些流不太一样,并没有收到视频的 config 帧就收到其他帧了

                    这个时候视频 Track 并没创建和初始化

                    初步怀疑是 nginx 的 rtmp 服务器兼容性不好

                    zlm 的推流器会严格按照先发送 metadata ,然后发送 config 帧,然后发送关键帧 然后是普通帧的流程来做

                    也会缓存所有的 config 帧

                    ffplay 能播放成功是因为它是根据数据量和时间来判断播放成功

                    只要数据量达到一定量或者时间达到一定时间 就会触发播放成功的事件

                    这样做的好处是 播放成功率高 坏处是打开视频时间长

                    ",10),i=[o];function _(n,s){return t(),c("div",null,i)}const f=p(a,[["render",_],["__file","rtmp_playback_compatibility_issues.html.vue"]]);export{f as default}; diff --git a/assets/rtmp_pull_stream_performance_test.html-biPYYmB-.js b/assets/rtmp_pull_stream_performance_test.html-hMTKB3GA.js similarity index 98% rename from assets/rtmp_pull_stream_performance_test.html-biPYYmB-.js rename to assets/rtmp_pull_stream_performance_test.html-hMTKB3GA.js index e3a4eca..38020af 100644 --- a/assets/rtmp_pull_stream_performance_test.html-biPYYmB-.js +++ b/assets/rtmp_pull_stream_performance_test.html-hMTKB3GA.js @@ -1,4 +1,4 @@ -import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as l,c as t,a as e,d as n,b as r,e as d}from"./app-BrxqtzGY.js";const c={},o=e("h2",{id:"一、测试环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一、测试环境","aria-hidden":"true"},"#"),n(" 一、测试环境")],-1),p=e("li",null,"测试日期:2022/5/18",-1),m=e("li",null,"代码版本:git hash: c7d7999f",-1),u=e("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz",-1),v=e("li",null,"操作系统:CentOS release 6.3 (Final)",-1),b=e("li",null,"内存:16GB",-1),h=e("li",null,"网卡:127.0.0.1",-1),g={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"编译器:gcc (GCC) 8.2.0",-1),_=e("li",null,"zlmediakit 编译类型:Release",-1),k=e("li",null,"malloc 库:ptmalloc(未开启 jemalloc)",-1),x=e("li",null,"config.ini 配置文件修改(主要开启合并写、按需转协议):",-1),y=d(`
                    diff --git a/conf/config.ini b/conf/config.ini
                    +import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as l,c as t,a as e,d as n,b as r,e as d}from"./app-oTlYPy8h.js";const c={},o=e("h2",{id:"一、测试环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一、测试环境","aria-hidden":"true"},"#"),n(" 一、测试环境")],-1),p=e("li",null,"测试日期:2022/5/18",-1),m=e("li",null,"代码版本:git hash: c7d7999f",-1),u=e("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz",-1),v=e("li",null,"操作系统:CentOS release 6.3 (Final)",-1),b=e("li",null,"内存:16GB",-1),h=e("li",null,"网卡:127.0.0.1",-1),g={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"编译器:gcc (GCC) 8.2.0",-1),_=e("li",null,"zlmediakit 编译类型:Release",-1),k=e("li",null,"malloc 库:ptmalloc(未开启 jemalloc)",-1),x=e("li",null,"config.ini 配置文件修改(主要开启合并写、按需转协议):",-1),y=d(`
                    diff --git a/conf/config.ini b/conf/config.ini
                     index c2d4613f..99ce5c84 100644
                     --- a/conf/config.ini
                     +++ b/conf/config.ini
                    diff --git a/assets/rtmp_pull_stream_performance_test.html-ANpGb4zw.js b/assets/rtmp_pull_stream_performance_test.html-ukcH42DI.js
                    similarity index 98%
                    rename from assets/rtmp_pull_stream_performance_test.html-ANpGb4zw.js
                    rename to assets/rtmp_pull_stream_performance_test.html-ukcH42DI.js
                    index 1b43edd..a387fd6 100644
                    --- a/assets/rtmp_pull_stream_performance_test.html-ANpGb4zw.js
                    +++ b/assets/rtmp_pull_stream_performance_test.html-ukcH42DI.js
                    @@ -1,4 +1,4 @@
                    -import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as l,c as t,a as e,d as n,b as r,e as d}from"./app-BrxqtzGY.js";const c={},o=e("h2",{id:"一、测试环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一、测试环境","aria-hidden":"true"},"#"),n(" 一、测试环境")],-1),p=e("li",null,"测试日期:2022/5/18",-1),m=e("li",null,"代码版本:git hash: c7d7999f",-1),u=e("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz",-1),v=e("li",null,"操作系统:CentOS release 6.3 (Final)",-1),b=e("li",null,"内存:16GB",-1),h=e("li",null,"网卡:127.0.0.1",-1),g={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"编译器:gcc (GCC) 8.2.0",-1),_=e("li",null,"zlmediakit 编译类型:Release",-1),k=e("li",null,"malloc 库:ptmalloc(未开启 jemalloc)",-1),x=e("li",null,"config.ini 配置文件修改(主要开启合并写、按需转协议):",-1),y=d(`
                    diff --git a/conf/config.ini b/conf/config.ini
                    +import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as l,c as t,a as e,d as n,b as r,e as d}from"./app-oTlYPy8h.js";const c={},o=e("h2",{id:"一、测试环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一、测试环境","aria-hidden":"true"},"#"),n(" 一、测试环境")],-1),p=e("li",null,"测试日期:2022/5/18",-1),m=e("li",null,"代码版本:git hash: c7d7999f",-1),u=e("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz",-1),v=e("li",null,"操作系统:CentOS release 6.3 (Final)",-1),b=e("li",null,"内存:16GB",-1),h=e("li",null,"网卡:127.0.0.1",-1),g={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"编译器:gcc (GCC) 8.2.0",-1),_=e("li",null,"zlmediakit 编译类型:Release",-1),k=e("li",null,"malloc 库:ptmalloc(未开启 jemalloc)",-1),x=e("li",null,"config.ini 配置文件修改(主要开启合并写、按需转协议):",-1),y=d(`
                    diff --git a/conf/config.ini b/conf/config.ini
                     index c2d4613f..99ce5c84 100644
                     --- a/conf/config.ini
                     +++ b/conf/config.ini
                    diff --git a/assets/rtmp_push_stream_performance_test.html-eR62v-Vt.js b/assets/rtmp_push_stream_performance_test.html-4ywCdN8c.js
                    similarity index 98%
                    rename from assets/rtmp_push_stream_performance_test.html-eR62v-Vt.js
                    rename to assets/rtmp_push_stream_performance_test.html-4ywCdN8c.js
                    index 983d7ef..687fa80 100644
                    --- a/assets/rtmp_push_stream_performance_test.html-eR62v-Vt.js
                    +++ b/assets/rtmp_push_stream_performance_test.html-4ywCdN8c.js
                    @@ -1,4 +1,4 @@
                    -import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as l,c as r,a as e,d as n,b as d,e as t}from"./app-BrxqtzGY.js";const c={},o=e("h2",{id:"一、测试环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一、测试环境","aria-hidden":"true"},"#"),n(" 一、测试环境")],-1),m=e("li",null,"测试日期:2022/5/18",-1),p=e("li",null,"代码版本:git hash: c7d7999f",-1),u=e("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz",-1),v=e("li",null,"操作系统:CentOS release 6.3 (Final)",-1),b=e("li",null,"内存:16GB",-1),h=e("li",null,"网卡:127.0.0.1",-1),_={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"编译器:gcc (GCC) 8.2.0",-1),g=e("li",null,"zlmediakit 编译类型:Release",-1),k=e("li",null,"malloc 库:ptmalloc(未开启 jemalloc)",-1),x=e("li",null,"config.ini 配置文件修改(主要开启合并写、按需转协议):",-1),y=t(`
                    diff --git a/conf/config.ini b/conf/config.ini
                    +import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as l,c as r,a as e,d as n,b as d,e as t}from"./app-oTlYPy8h.js";const c={},o=e("h2",{id:"一、测试环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一、测试环境","aria-hidden":"true"},"#"),n(" 一、测试环境")],-1),m=e("li",null,"测试日期:2022/5/18",-1),p=e("li",null,"代码版本:git hash: c7d7999f",-1),u=e("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz",-1),v=e("li",null,"操作系统:CentOS release 6.3 (Final)",-1),b=e("li",null,"内存:16GB",-1),h=e("li",null,"网卡:127.0.0.1",-1),_={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"编译器:gcc (GCC) 8.2.0",-1),g=e("li",null,"zlmediakit 编译类型:Release",-1),k=e("li",null,"malloc 库:ptmalloc(未开启 jemalloc)",-1),x=e("li",null,"config.ini 配置文件修改(主要开启合并写、按需转协议):",-1),y=t(`
                    diff --git a/conf/config.ini b/conf/config.ini
                     index c2d4613f..99ce5c84 100644
                     --- a/conf/config.ini
                     +++ b/conf/config.ini
                    diff --git a/assets/rtmp_push_stream_performance_test.html-9WCFfRY7.js b/assets/rtmp_push_stream_performance_test.html-LfVKdEym.js
                    similarity index 98%
                    rename from assets/rtmp_push_stream_performance_test.html-9WCFfRY7.js
                    rename to assets/rtmp_push_stream_performance_test.html-LfVKdEym.js
                    index d7e5fcb..1138461 100644
                    --- a/assets/rtmp_push_stream_performance_test.html-9WCFfRY7.js
                    +++ b/assets/rtmp_push_stream_performance_test.html-LfVKdEym.js
                    @@ -1,4 +1,4 @@
                    -import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as l,c as r,a as e,d as n,b as d,e as t}from"./app-BrxqtzGY.js";const c={},o=e("h2",{id:"一、测试环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一、测试环境","aria-hidden":"true"},"#"),n(" 一、测试环境")],-1),m=e("li",null,"测试日期:2022/5/18",-1),p=e("li",null,"代码版本:git hash: c7d7999f",-1),u=e("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz",-1),v=e("li",null,"操作系统:CentOS release 6.3 (Final)",-1),b=e("li",null,"内存:16GB",-1),h=e("li",null,"网卡:127.0.0.1",-1),_={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"编译器:gcc (GCC) 8.2.0",-1),g=e("li",null,"zlmediakit 编译类型:Release",-1),k=e("li",null,"malloc 库:ptmalloc(未开启 jemalloc)",-1),x=e("li",null,"config.ini 配置文件修改(主要开启合并写、按需转协议):",-1),y=t(`
                    diff --git a/conf/config.ini b/conf/config.ini
                    +import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as l,c as r,a as e,d as n,b as d,e as t}from"./app-oTlYPy8h.js";const c={},o=e("h2",{id:"一、测试环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一、测试环境","aria-hidden":"true"},"#"),n(" 一、测试环境")],-1),m=e("li",null,"测试日期:2022/5/18",-1),p=e("li",null,"代码版本:git hash: c7d7999f",-1),u=e("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz",-1),v=e("li",null,"操作系统:CentOS release 6.3 (Final)",-1),b=e("li",null,"内存:16GB",-1),h=e("li",null,"网卡:127.0.0.1",-1),_={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"编译器:gcc (GCC) 8.2.0",-1),g=e("li",null,"zlmediakit 编译类型:Release",-1),k=e("li",null,"malloc 库:ptmalloc(未开启 jemalloc)",-1),x=e("li",null,"config.ini 配置文件修改(主要开启合并写、按需转协议):",-1),y=t(`
                    diff --git a/conf/config.ini b/conf/config.ini
                     index c2d4613f..99ce5c84 100644
                     --- a/conf/config.ini
                     +++ b/conf/config.ini
                    diff --git a/assets/rtmp_support_for_h265_and_opus.html-uBU2hKvT.js b/assets/rtmp_support_for_h265_and_opus.html-IiMCf774.js
                    similarity index 97%
                    rename from assets/rtmp_support_for_h265_and_opus.html-uBU2hKvT.js
                    rename to assets/rtmp_support_for_h265_and_opus.html-IiMCf774.js
                    index 38766dd..58b67e0 100644
                    --- a/assets/rtmp_support_for_h265_and_opus.html-uBU2hKvT.js
                    +++ b/assets/rtmp_support_for_h265_and_opus.html-IiMCf774.js
                    @@ -1 +1 @@
                    -import{_ as s}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as a,c,a as e,d as t,b as r}from"./app-BrxqtzGY.js";const d={},_=e("h2",{id:"背景",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#背景","aria-hidden":"true"},"#"),t(" 背景")],-1),i=e("p",null,"rtmp/flv 是直播行业事实上的标准,这两者在国内直播领域应用非常广泛。在浏览器上要实现无插件的低延时直播播放,基本绕不开 rtmp/flv. 由于 rtmp/flv 是 Adobe 设计的私有协议,原生是不支持 H265(视频监控应用广泛)和 opus(RTC 应用广泛)的,而目前视频监控、RTC 相关行业都有使用直播基础设施的需求,所以对 rtmp 进行修改,使其添加对 H265 和 opus 的支持比较重要。",-1),p=e("h2",{id:"实现方式",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#实现方式","aria-hidden":"true"},"#"),t(" 实现方式")],-1),h=e("strong",null,"12",-1),l={href:"https://github.com/ksvc/FFmpeg/wiki",target:"_blank",rel:"noopener noreferrer"},m=e("strong",null,"13",-1),u={href:"https://gitee.com/xia-chu/FFmpeg",target:"_blank",rel:"noopener noreferrer"},f=e("h2",{id:"服务器实现",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#服务器实现","aria-hidden":"true"},"#"),t(" 服务器实现")],-1),g=e("p",null,"ZLMediaKit 已经实现了 rtsp/rtmp/mp4/hls 对 h265/opus 的全面支持, 欢迎各位测试使用。",-1);function x(b,k){const o=n("ExternalLinkIcon");return a(),c("div",null,[_,i,p,e("p",null,[t("rtmp 通过 codec id 来判断编码格式,同时通过 message type 来区分数据类型(包括音频包、视频包),所以音视频的 codec_id 是可以相同的(相同类型不冲突即可); 例如 H264 的 codec id 为 7,G711A 的 codec id 也为 7。 目前国内默认定义 H265 的 codec id 为"),h,t("(由金山云首先"),e("a",l,[t("实现并公布"),r(o)]),t("). 而对 opus 的 rtmp 扩展目前还未有广泛共识,作者在与相关人士讨论后,协商定义其 codec id 为"),m,t(",目前已经实现了对 FFmpeg(基于最新版本)的修改,添加了对"),e("a",u,[t("h265/opus 的 rtmp 扩展"),r(o)]),t(".")]),f,g])}const H=s(d,[["render",x],["__file","rtmp_support_for_h265_and_opus.html.vue"]]);export{H as default};
                    +import{_ as s}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as a,c,a as e,d as t,b as r}from"./app-oTlYPy8h.js";const d={},_=e("h2",{id:"背景",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#背景","aria-hidden":"true"},"#"),t(" 背景")],-1),i=e("p",null,"rtmp/flv 是直播行业事实上的标准,这两者在国内直播领域应用非常广泛。在浏览器上要实现无插件的低延时直播播放,基本绕不开 rtmp/flv. 由于 rtmp/flv 是 Adobe 设计的私有协议,原生是不支持 H265(视频监控应用广泛)和 opus(RTC 应用广泛)的,而目前视频监控、RTC 相关行业都有使用直播基础设施的需求,所以对 rtmp 进行修改,使其添加对 H265 和 opus 的支持比较重要。",-1),p=e("h2",{id:"实现方式",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#实现方式","aria-hidden":"true"},"#"),t(" 实现方式")],-1),h=e("strong",null,"12",-1),l={href:"https://github.com/ksvc/FFmpeg/wiki",target:"_blank",rel:"noopener noreferrer"},m=e("strong",null,"13",-1),u={href:"https://gitee.com/xia-chu/FFmpeg",target:"_blank",rel:"noopener noreferrer"},f=e("h2",{id:"服务器实现",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#服务器实现","aria-hidden":"true"},"#"),t(" 服务器实现")],-1),g=e("p",null,"ZLMediaKit 已经实现了 rtsp/rtmp/mp4/hls 对 h265/opus 的全面支持, 欢迎各位测试使用。",-1);function x(b,k){const o=n("ExternalLinkIcon");return a(),c("div",null,[_,i,p,e("p",null,[t("rtmp 通过 codec id 来判断编码格式,同时通过 message type 来区分数据类型(包括音频包、视频包),所以音视频的 codec_id 是可以相同的(相同类型不冲突即可); 例如 H264 的 codec id 为 7,G711A 的 codec id 也为 7。 目前国内默认定义 H265 的 codec id 为"),h,t("(由金山云首先"),e("a",l,[t("实现并公布"),r(o)]),t("). 而对 opus 的 rtmp 扩展目前还未有广泛共识,作者在与相关人士讨论后,协商定义其 codec id 为"),m,t(",目前已经实现了对 FFmpeg(基于最新版本)的修改,添加了对"),e("a",u,[t("h265/opus 的 rtmp 扩展"),r(o)]),t(".")]),f,g])}const H=s(d,[["render",x],["__file","rtmp_support_for_h265_and_opus.html.vue"]]);export{H as default};
                    diff --git a/assets/rtmp_support_for_h265_and_opus.html-KlA1IkKx.js b/assets/rtmp_support_for_h265_and_opus.html-UXqjeTtH.js
                    similarity index 97%
                    rename from assets/rtmp_support_for_h265_and_opus.html-KlA1IkKx.js
                    rename to assets/rtmp_support_for_h265_and_opus.html-UXqjeTtH.js
                    index c614a17..01d3706 100644
                    --- a/assets/rtmp_support_for_h265_and_opus.html-KlA1IkKx.js
                    +++ b/assets/rtmp_support_for_h265_and_opus.html-UXqjeTtH.js
                    @@ -1 +1 @@
                    -import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as r,c as s,a as e,d as t,b as n}from"./app-BrxqtzGY.js";const d={},c=e("h2",{id:"background",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#background","aria-hidden":"true"},"#"),t(" Background")],-1),h=e("p",null,"RTMP/FLV is the de facto standard in the live streaming industry, and they are widely used in the domestic live streaming field. To achieve plugin-free low-latency live streaming playback in web browsers, RTMP/FLV is essential. Since RTMP/FLV is a proprietary protocol designed by Adobe, it does not natively support H.265 (widely used in video surveillance applications) and Opus (widely used in RTC applications). However, there is a growing demand for live streaming infrastructure in the video surveillance and RTC industries. Therefore, it is important to modify RTMP to add support for H.265 and Opus.",-1),l=e("h2",{id:"implementation-approach",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#implementation-approach","aria-hidden":"true"},"#"),t(" Implementation Approach")],-1),p=e("strong",null,"12",-1),u={href:"https://github.com/ksvc/FFmpeg/wiki",target:"_blank",rel:"noopener noreferrer"},m=e("strong",null,"13",-1),_={href:"https://gitee.com/xia-chu/FFmpeg",target:"_blank",rel:"noopener noreferrer"},f=e("h2",{id:"server-implementation",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#server-implementation","aria-hidden":"true"},"#"),t(" Server Implementation")],-1),g=e("p",null,"ZLMediaKit has already implemented comprehensive support for H.265/Opus in RTSP/RTMP/MP4/HLS. Feel free to test and use it.",-1);function v(y,b){const o=i("ExternalLinkIcon");return r(),s("div",null,[c,h,l,e("p",null,[t("RTMP determines the encoding format through codec ID and distinguishes data types (including audio packets and video packets) through message type. Therefore, the codec_id for audio and video can be the same as long as they are of the same type and do not conflict. For example, the codec ID for H.264 is 7, and the codec ID for G.711A is also 7. Currently, the default codec ID for H.265 in China is "),p,t(" (implemented and published by "),e("a",u,[t("金山云"),n(o)]),t("). As for the RTMP extension for Opus, there is currently no widespread consensus. After discussions with relevant individuals, the author has negotiated and defined its codec ID as "),m,t(". The modification has already been implemented for FFmpeg (based on the latest version) to add support for"),e("a",_,[t("h265/opus RTMP extension"),n(o)]),t(".")]),f,g])}const x=a(d,[["render",v],["__file","rtmp_support_for_h265_and_opus.html.vue"]]);export{x as default};
                    +import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as r,c as s,a as e,d as t,b as n}from"./app-oTlYPy8h.js";const d={},c=e("h2",{id:"background",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#background","aria-hidden":"true"},"#"),t(" Background")],-1),h=e("p",null,"RTMP/FLV is the de facto standard in the live streaming industry, and they are widely used in the domestic live streaming field. To achieve plugin-free low-latency live streaming playback in web browsers, RTMP/FLV is essential. Since RTMP/FLV is a proprietary protocol designed by Adobe, it does not natively support H.265 (widely used in video surveillance applications) and Opus (widely used in RTC applications). However, there is a growing demand for live streaming infrastructure in the video surveillance and RTC industries. Therefore, it is important to modify RTMP to add support for H.265 and Opus.",-1),l=e("h2",{id:"implementation-approach",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#implementation-approach","aria-hidden":"true"},"#"),t(" Implementation Approach")],-1),p=e("strong",null,"12",-1),u={href:"https://github.com/ksvc/FFmpeg/wiki",target:"_blank",rel:"noopener noreferrer"},m=e("strong",null,"13",-1),_={href:"https://gitee.com/xia-chu/FFmpeg",target:"_blank",rel:"noopener noreferrer"},f=e("h2",{id:"server-implementation",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#server-implementation","aria-hidden":"true"},"#"),t(" Server Implementation")],-1),g=e("p",null,"ZLMediaKit has already implemented comprehensive support for H.265/Opus in RTSP/RTMP/MP4/HLS. Feel free to test and use it.",-1);function v(y,b){const o=i("ExternalLinkIcon");return r(),s("div",null,[c,h,l,e("p",null,[t("RTMP determines the encoding format through codec ID and distinguishes data types (including audio packets and video packets) through message type. Therefore, the codec_id for audio and video can be the same as long as they are of the same type and do not conflict. For example, the codec ID for H.264 is 7, and the codec ID for G.711A is also 7. Currently, the default codec ID for H.265 in China is "),p,t(" (implemented and published by "),e("a",u,[t("金山云"),n(o)]),t("). As for the RTMP extension for Opus, there is currently no widespread consensus. After discussions with relevant individuals, the author has negotiated and defined its codec ID as "),m,t(". The modification has already been implemented for FFmpeg (based on the latest version) to add support for"),e("a",_,[t("h265/opus RTMP extension"),n(o)]),t(".")]),f,g])}const x=a(d,[["render",v],["__file","rtmp_support_for_h265_and_opus.html.vue"]]);export{x as default};
                    diff --git a/assets/rtsp_performance_optimization.html-Fk8ai5fo.js b/assets/rtsp_performance_optimization.html-TWn6Egp8.js
                    similarity index 98%
                    rename from assets/rtsp_performance_optimization.html-Fk8ai5fo.js
                    rename to assets/rtsp_performance_optimization.html-TWn6Egp8.js
                    index 7475afb..a000f1b 100644
                    --- a/assets/rtsp_performance_optimization.html-Fk8ai5fo.js
                    +++ b/assets/rtsp_performance_optimization.html-TWn6Egp8.js
                    @@ -1 +1 @@
                    -import{_ as s}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as l,c as r,a as e,d as a,b as i,e as c}from"./app-BrxqtzGY.js";const o={},d=e("h2",{id:"概述",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#概述","aria-hidden":"true"},"#"),a(" 概述")],-1),h={href:"https://github.com/xiongziliang/ZLMediaKit/commit/b169f94cce1ecbab50248f25ee3b33dd40602fe1",target:"_blank",rel:"noopener noreferrer"},u=e("ul",null,[e("li",null,[e("strong",null,"缓存时间戳相同的 RTP 包(意味着是同一帧数据),作为一个数据包进行分发"),a("。")])],-1),g=e("p",null,[a("理论上,这样做可以大大"),e("strong",null,"减少多线程分发时线程切换次数、多余发送逻辑代码的执行以及系统调用次数"),a(",预期在不增加播放延时的情况下能大幅提高 rtsp 服务器的性能.")],-1),p=e("h2",{id:"测试",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#测试","aria-hidden":"true"},"#"),a(" 测试")],-1),m=e("p",null,"为了验证本次优化的预期目标,我在 linux 服务器上做了一系列的测试对比,以下是测试环境:",-1),b=e("li",null,"操作系统:ubuntu16 desktop 64bit",-1),_=e("li",null,"cpu: 4 核心的 Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz",-1),f=e("li",null,"编译器:gcc 5.4.0,开启 Release 编译(cmake -DCMAKE_BUILD_TYPE=Release)",-1),x=e("li",null,"malloc 库:连接 jemalloc",-1),z=e("li",null,"网络: 127.0.0.1 本地循环网络",-1),y={href:"https://github.com/xiongziliang/ZLMediaKit/blob/master/tests/test_benchmark.cpp",target:"_blank",rel:"noopener noreferrer"},M={href:"https://github.com/xiongziliang/ZLMediaKit/tree/master/server",target:"_blank",rel:"noopener noreferrer"},k=e("li",null,"测试码流:4K H264 的 RTSP 流,通过 MP4 Rtsp 点播实现,文件 200 秒,190MB,码流大概 8Mb/s",-1),K=e("li",null,"测试方法:通过 test_benchmark 播放 500 路 RTSP 4K 点播,总码流大概 4Gb/s,分别测试新老版本的 MediaServer 的进程。",-1),L=c('

                    测试数据

                    • 启动的播放器个数: image
                    • 实时码流: image

                    性能对比

                    老版本数据

                    • cpu 使用率(浮动比较大,最高 200%+): imageimage

                    • 性能分析(perf top): image

                    • 总结 : cpu 占用主要发生在内核态的系统调用(syscall)、tcp_sendmsg、内存拷贝。

                    新版本数据:

                    • cpu 使用率(浮动比较小,50%以下): imageimage

                    • 后面我又测试了 2000 个播放器,掉了一批,最后稳定在 1800 个左右,实时流量 17.5Gb/s(单向)左右,cpu 占用 300%左右: imageimageimageimage

                    • 性能分析(perf top): image

                    • 总结 : cpu 占用主要发生在内核态内存拷贝,系统调用(syscall)、tcp_sendmsg 的开销很小。

                    总结

                    本次性能测试基本证明了预想,性能提升大概有 4 倍以上。 本机器为 i7-4790 4 核心 8 线程的,所以 cpu 占用率最高为 800%,现在 ZLMediaKit 在上面支撑 500 个 4K RTSP 播放器,实时流量大概 4Gb/s 时 cpu 使用率 50%不到,通过简单换算,该 cpu 可以支撑大概 8000 个 4K RTSP 播放器,实时流量最高能达到 64Gb/s,考虑到性能折损,我们保守估计可以支持 6000 个 4K RTSP 播放器,50Gb/s 的流量。

                    最后

                    在 ZLMediaKit 流媒体服务器中,通过智能指针引用计数的方式实现了多线程的数据分发,不管分发多少次,数据拷贝次数都是固定的,所以 ZLMediaKit 可以达到如此夸张的性能参数,但是在测试中,我们也能发现,性能占用已经大部分发生在内核态了,应用层的 cpu 占用反而不是瓶颈了。这是因为在内核态,写 socket 缓存需要做内存拷贝,随着播放器个数的增加,内存拷贝会越来越多,此时性能瓶颈不再是应用层,而是由于内存带宽瓶颈导致的内核性能瓶颈。

                    ',11);function R(P,T){const t=n("ExternalLinkIcon");return l(),r("div",null,[d,e("p",null,[a("在最近 ZLMediaKit 的一次提交中,我对 rtsp 服务器的性能做了一次"),e("a",h,[a("改进"),i(t)]),a(",本次改进中,核心的思想是:")]),u,g,p,m,e("ul",null,[b,_,f,x,z,e("li",null,[a("测试客户端:"),e("a",y,[a("test_benchmark"),i(t)])]),e("li",null,[a("测试服务器:"),e("a",M,[a("MediaServer"),i(t)])]),k,K]),L])}const v=s(o,[["render",R],["__file","rtsp_performance_optimization.html.vue"]]);export{v as default}; +import{_ as s}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as l,c as r,a as e,d as a,b as i,e as c}from"./app-oTlYPy8h.js";const o={},d=e("h2",{id:"概述",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#概述","aria-hidden":"true"},"#"),a(" 概述")],-1),h={href:"https://github.com/xiongziliang/ZLMediaKit/commit/b169f94cce1ecbab50248f25ee3b33dd40602fe1",target:"_blank",rel:"noopener noreferrer"},u=e("ul",null,[e("li",null,[e("strong",null,"缓存时间戳相同的 RTP 包(意味着是同一帧数据),作为一个数据包进行分发"),a("。")])],-1),g=e("p",null,[a("理论上,这样做可以大大"),e("strong",null,"减少多线程分发时线程切换次数、多余发送逻辑代码的执行以及系统调用次数"),a(",预期在不增加播放延时的情况下能大幅提高 rtsp 服务器的性能.")],-1),p=e("h2",{id:"测试",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#测试","aria-hidden":"true"},"#"),a(" 测试")],-1),m=e("p",null,"为了验证本次优化的预期目标,我在 linux 服务器上做了一系列的测试对比,以下是测试环境:",-1),b=e("li",null,"操作系统:ubuntu16 desktop 64bit",-1),_=e("li",null,"cpu: 4 核心的 Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz",-1),f=e("li",null,"编译器:gcc 5.4.0,开启 Release 编译(cmake -DCMAKE_BUILD_TYPE=Release)",-1),x=e("li",null,"malloc 库:连接 jemalloc",-1),z=e("li",null,"网络: 127.0.0.1 本地循环网络",-1),y={href:"https://github.com/xiongziliang/ZLMediaKit/blob/master/tests/test_benchmark.cpp",target:"_blank",rel:"noopener noreferrer"},M={href:"https://github.com/xiongziliang/ZLMediaKit/tree/master/server",target:"_blank",rel:"noopener noreferrer"},k=e("li",null,"测试码流:4K H264 的 RTSP 流,通过 MP4 Rtsp 点播实现,文件 200 秒,190MB,码流大概 8Mb/s",-1),K=e("li",null,"测试方法:通过 test_benchmark 播放 500 路 RTSP 4K 点播,总码流大概 4Gb/s,分别测试新老版本的 MediaServer 的进程。",-1),L=c('

                    测试数据

                    • 启动的播放器个数: image
                    • 实时码流: image

                    性能对比

                    老版本数据

                    • cpu 使用率(浮动比较大,最高 200%+): imageimage

                    • 性能分析(perf top): image

                    • 总结 : cpu 占用主要发生在内核态的系统调用(syscall)、tcp_sendmsg、内存拷贝。

                    新版本数据:

                    • cpu 使用率(浮动比较小,50%以下): imageimage

                    • 后面我又测试了 2000 个播放器,掉了一批,最后稳定在 1800 个左右,实时流量 17.5Gb/s(单向)左右,cpu 占用 300%左右: imageimageimageimage

                    • 性能分析(perf top): image

                    • 总结 : cpu 占用主要发生在内核态内存拷贝,系统调用(syscall)、tcp_sendmsg 的开销很小。

                    总结

                    本次性能测试基本证明了预想,性能提升大概有 4 倍以上。 本机器为 i7-4790 4 核心 8 线程的,所以 cpu 占用率最高为 800%,现在 ZLMediaKit 在上面支撑 500 个 4K RTSP 播放器,实时流量大概 4Gb/s 时 cpu 使用率 50%不到,通过简单换算,该 cpu 可以支撑大概 8000 个 4K RTSP 播放器,实时流量最高能达到 64Gb/s,考虑到性能折损,我们保守估计可以支持 6000 个 4K RTSP 播放器,50Gb/s 的流量。

                    最后

                    在 ZLMediaKit 流媒体服务器中,通过智能指针引用计数的方式实现了多线程的数据分发,不管分发多少次,数据拷贝次数都是固定的,所以 ZLMediaKit 可以达到如此夸张的性能参数,但是在测试中,我们也能发现,性能占用已经大部分发生在内核态了,应用层的 cpu 占用反而不是瓶颈了。这是因为在内核态,写 socket 缓存需要做内存拷贝,随着播放器个数的增加,内存拷贝会越来越多,此时性能瓶颈不再是应用层,而是由于内存带宽瓶颈导致的内核性能瓶颈。

                    ',11);function R(P,T){const t=n("ExternalLinkIcon");return l(),r("div",null,[d,e("p",null,[a("在最近 ZLMediaKit 的一次提交中,我对 rtsp 服务器的性能做了一次"),e("a",h,[a("改进"),i(t)]),a(",本次改进中,核心的思想是:")]),u,g,p,m,e("ul",null,[b,_,f,x,z,e("li",null,[a("测试客户端:"),e("a",y,[a("test_benchmark"),i(t)])]),e("li",null,[a("测试服务器:"),e("a",M,[a("MediaServer"),i(t)])]),k,K]),L])}const v=s(o,[["render",R],["__file","rtsp_performance_optimization.html.vue"]]);export{v as default}; diff --git a/assets/rtsp_performance_optimization.html-bYm4ov8K.js b/assets/rtsp_performance_optimization.html-TdeED4XC.js similarity index 98% rename from assets/rtsp_performance_optimization.html-bYm4ov8K.js rename to assets/rtsp_performance_optimization.html-TdeED4XC.js index 819e02e..6ab537f 100644 --- a/assets/rtsp_performance_optimization.html-bYm4ov8K.js +++ b/assets/rtsp_performance_optimization.html-TdeED4XC.js @@ -1 +1 @@ -import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as s,o as r,c as l,a as e,d as a,b as i,e as c}from"./app-BrxqtzGY.js";const o={},d=e("h2",{id:"概述",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#概述","aria-hidden":"true"},"#"),a(" 概述")],-1),h={href:"https://github.com/xiongziliang/ZLMediaKit/commit/b169f94cce1ecbab50248f25ee3b33dd40602fe1",target:"_blank",rel:"noopener noreferrer"},g=e("ul",null,[e("li",null,[e("strong",null,"缓存时间戳相同的 RTP 包(意味着是同一帧数据),作为一个数据包进行分发"),a("。")])],-1),p=e("p",null,[a("理论上,这样做可以大大"),e("strong",null,"减少多线程分发时线程切换次数、多余发送逻辑代码的执行以及系统调用次数"),a(",预期在不增加播放延时的情况下能大幅提高 rtsp 服务器的性能.")],-1),u=e("h2",{id:"测试",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#测试","aria-hidden":"true"},"#"),a(" 测试")],-1),m=e("p",null,"为了验证本次优化的预期目标,我在 linux 服务器上做了一系列的测试对比,以下是测试环境:",-1),b=e("li",null,"操作系统:ubuntu16 desktop 64bit",-1),_=e("li",null,"cpu: 4 核心的 Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz",-1),f=e("li",null,"编译器:gcc 5.4.0,开启 Release 编译(cmake -DCMAKE_BUILD_TYPE=Release)",-1),x=e("li",null,"malloc 库:连接 jemalloc",-1),z=e("li",null,"网络: 127.0.0.1 本地循环网络",-1),y={href:"https://github.com/xiongziliang/ZLMediaKit/blob/master/tests/test_benchmark.cpp",target:"_blank",rel:"noopener noreferrer"},M={href:"https://github.com/xiongziliang/ZLMediaKit/tree/master/server",target:"_blank",rel:"noopener noreferrer"},k=e("li",null,"测试码流:4K H264 的 RTSP 流,通过 MP4 Rtsp 点播实现,文件 200 秒,190MB,码流大概 8Mb/s",-1),K=e("li",null,"测试方法:通过 test_benchmark 播放 500 路 RTSP 4K 点播,总码流大概 4Gb/s,分别测试新老版本的 MediaServer 的进程。",-1),L=c('

                    测试数据

                    • 启动的播放器个数: image
                    • 实时码流: image

                    性能对比

                    老版本数据

                    • cpu 使用率(浮动比较大,最高 200%+):

                      imageimage

                    • 性能分析(perf top):

                      image
                      image
                    • 总结: cpu 占用主要发生在内核态的系统调用(syscall)、tcp_sendmsg、内存拷贝。

                    新版本数据

                    • cpu 使用率(浮动比较小,50%以下):

                      imageimage

                    • 后面我又测试了 2000 个播放器,掉了一批,最后稳定在 1800 个左右,实时流量 17.5Gb/s(单向)左右,cpu 占用 300%左右:

                      imageimageimageimage

                    • 性能分析(perf top):

                      image
                      image
                    • 总结:cpu 占用主要发生在内核态内存拷贝,系统调用(syscall)、tcp_sendmsg 的开销很小。

                    总结

                    本次性能测试基本证明了预想,性能提升大概有 4 倍以上。 本机器为 i7-4790 4 核心 8 线程的,所以 cpu 占用率最高为 800%,现在 ZLMediaKit 在上面支撑 500 个 4K RTSP 播放器,实时流量大概 4Gb/s 时 cpu 使用率 50%不到,通过简单换算,该 cpu 可以支撑大概 8000 个 4K RTSP 播放器,实时流量最高能达到 64Gb/s,考虑到性能折损,我们保守估计可以支持 6000 个 4K RTSP 播放器,50Gb/s 的流量。

                    最后

                    在 ZLMediaKit 流媒体服务器中,通过智能指针引用计数的方式实现了多线程的数据分发,不管分发多少次,数据拷贝次数都是固定的,所以 ZLMediaKit 可以达到如此夸张的性能参数,但是在测试中,我们也能发现,性能占用已经大部分发生在内核态了,应用层的 cpu 占用反而不是瓶颈了。这是因为在内核态,写 socket 缓存需要做内存拷贝,随着播放器个数的增加,内存拷贝会越来越多,此时性能瓶颈不再是应用层,而是由于内存带宽瓶颈导致的内核性能瓶颈。

                    ',11);function R(P,T){const t=s("ExternalLinkIcon");return r(),l("div",null,[d,e("p",null,[a("在最近 ZLMediaKit 的一次提交中,我对 rtsp 服务器的性能做了一次"),e("a",h,[a("改进"),i(t)]),a(",本次改进中,核心的思想是:")]),g,p,u,m,e("ul",null,[b,_,f,x,z,e("li",null,[a("测试客户端:"),e("a",y,[a("test_benchmark"),i(t)])]),e("li",null,[a("测试服务器:"),e("a",M,[a("MediaServer"),i(t)])]),k,K]),L])}const v=n(o,[["render",R],["__file","rtsp_performance_optimization.html.vue"]]);export{v as default}; +import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as s,o as r,c as l,a as e,d as a,b as i,e as c}from"./app-oTlYPy8h.js";const o={},d=e("h2",{id:"概述",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#概述","aria-hidden":"true"},"#"),a(" 概述")],-1),h={href:"https://github.com/xiongziliang/ZLMediaKit/commit/b169f94cce1ecbab50248f25ee3b33dd40602fe1",target:"_blank",rel:"noopener noreferrer"},g=e("ul",null,[e("li",null,[e("strong",null,"缓存时间戳相同的 RTP 包(意味着是同一帧数据),作为一个数据包进行分发"),a("。")])],-1),p=e("p",null,[a("理论上,这样做可以大大"),e("strong",null,"减少多线程分发时线程切换次数、多余发送逻辑代码的执行以及系统调用次数"),a(",预期在不增加播放延时的情况下能大幅提高 rtsp 服务器的性能.")],-1),u=e("h2",{id:"测试",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#测试","aria-hidden":"true"},"#"),a(" 测试")],-1),m=e("p",null,"为了验证本次优化的预期目标,我在 linux 服务器上做了一系列的测试对比,以下是测试环境:",-1),b=e("li",null,"操作系统:ubuntu16 desktop 64bit",-1),_=e("li",null,"cpu: 4 核心的 Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz",-1),f=e("li",null,"编译器:gcc 5.4.0,开启 Release 编译(cmake -DCMAKE_BUILD_TYPE=Release)",-1),x=e("li",null,"malloc 库:连接 jemalloc",-1),z=e("li",null,"网络: 127.0.0.1 本地循环网络",-1),y={href:"https://github.com/xiongziliang/ZLMediaKit/blob/master/tests/test_benchmark.cpp",target:"_blank",rel:"noopener noreferrer"},M={href:"https://github.com/xiongziliang/ZLMediaKit/tree/master/server",target:"_blank",rel:"noopener noreferrer"},k=e("li",null,"测试码流:4K H264 的 RTSP 流,通过 MP4 Rtsp 点播实现,文件 200 秒,190MB,码流大概 8Mb/s",-1),K=e("li",null,"测试方法:通过 test_benchmark 播放 500 路 RTSP 4K 点播,总码流大概 4Gb/s,分别测试新老版本的 MediaServer 的进程。",-1),L=c('

                    测试数据

                    • 启动的播放器个数: image
                    • 实时码流: image

                    性能对比

                    老版本数据

                    • cpu 使用率(浮动比较大,最高 200%+):

                      imageimage

                    • 性能分析(perf top):

                      image
                      image
                    • 总结: cpu 占用主要发生在内核态的系统调用(syscall)、tcp_sendmsg、内存拷贝。

                    新版本数据

                    • cpu 使用率(浮动比较小,50%以下):

                      imageimage

                    • 后面我又测试了 2000 个播放器,掉了一批,最后稳定在 1800 个左右,实时流量 17.5Gb/s(单向)左右,cpu 占用 300%左右:

                      imageimageimageimage

                    • 性能分析(perf top):

                      image
                      image
                    • 总结:cpu 占用主要发生在内核态内存拷贝,系统调用(syscall)、tcp_sendmsg 的开销很小。

                    总结

                    本次性能测试基本证明了预想,性能提升大概有 4 倍以上。 本机器为 i7-4790 4 核心 8 线程的,所以 cpu 占用率最高为 800%,现在 ZLMediaKit 在上面支撑 500 个 4K RTSP 播放器,实时流量大概 4Gb/s 时 cpu 使用率 50%不到,通过简单换算,该 cpu 可以支撑大概 8000 个 4K RTSP 播放器,实时流量最高能达到 64Gb/s,考虑到性能折损,我们保守估计可以支持 6000 个 4K RTSP 播放器,50Gb/s 的流量。

                    最后

                    在 ZLMediaKit 流媒体服务器中,通过智能指针引用计数的方式实现了多线程的数据分发,不管分发多少次,数据拷贝次数都是固定的,所以 ZLMediaKit 可以达到如此夸张的性能参数,但是在测试中,我们也能发现,性能占用已经大部分发生在内核态了,应用层的 cpu 占用反而不是瓶颈了。这是因为在内核态,写 socket 缓存需要做内存拷贝,随着播放器个数的增加,内存拷贝会越来越多,此时性能瓶颈不再是应用层,而是由于内存带宽瓶颈导致的内核性能瓶颈。

                    ',11);function R(P,T){const t=s("ExternalLinkIcon");return r(),l("div",null,[d,e("p",null,[a("在最近 ZLMediaKit 的一次提交中,我对 rtsp 服务器的性能做了一次"),e("a",h,[a("改进"),i(t)]),a(",本次改进中,核心的思想是:")]),g,p,u,m,e("ul",null,[b,_,f,x,z,e("li",null,[a("测试客户端:"),e("a",y,[a("test_benchmark"),i(t)])]),e("li",null,[a("测试服务器:"),e("a",M,[a("MediaServer"),i(t)])]),k,K]),L])}const v=n(o,[["render",R],["__file","rtsp_performance_optimization.html.vue"]]);export{v as default}; diff --git a/assets/rtsp_pull_stream_performance_test.html-_t28Fr8s.js b/assets/rtsp_pull_stream_performance_test.html-KdEDWBLu.js similarity index 98% rename from assets/rtsp_pull_stream_performance_test.html-_t28Fr8s.js rename to assets/rtsp_pull_stream_performance_test.html-KdEDWBLu.js index 7735627..2fd322f 100644 --- a/assets/rtsp_pull_stream_performance_test.html-_t28Fr8s.js +++ b/assets/rtsp_pull_stream_performance_test.html-KdEDWBLu.js @@ -1,4 +1,4 @@ -import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as l,c as t,a as e,d as n,b as r,e as d}from"./app-BrxqtzGY.js";const c={},o=e("h2",{id:"一、测试环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一、测试环境","aria-hidden":"true"},"#"),n(" 一、测试环境")],-1),p=e("li",null,"测试日期:2022/5/18",-1),u=e("li",null,"代码版本:git hash: c7d7999f",-1),m=e("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz",-1),v=e("li",null,"操作系统:CentOS release 6.3 (Final)",-1),b=e("li",null,"内存:16GB",-1),h=e("li",null,"网卡:127.0.0.1",-1),g={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"编译器:gcc (GCC) 8.2.0",-1),_=e("li",null,"zlmediakit 编译类型:Release",-1),k=e("li",null,"malloc 库:ptmalloc(未开启 jemalloc)",-1),x=e("li",null,"config.ini 配置文件修改(主要开启合并写、按需转协议):",-1),y=d(`
                    diff --git a/conf/config.ini b/conf/config.ini
                    +import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as l,c as t,a as e,d as n,b as r,e as d}from"./app-oTlYPy8h.js";const c={},o=e("h2",{id:"一、测试环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一、测试环境","aria-hidden":"true"},"#"),n(" 一、测试环境")],-1),p=e("li",null,"测试日期:2022/5/18",-1),u=e("li",null,"代码版本:git hash: c7d7999f",-1),m=e("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz",-1),v=e("li",null,"操作系统:CentOS release 6.3 (Final)",-1),b=e("li",null,"内存:16GB",-1),h=e("li",null,"网卡:127.0.0.1",-1),g={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"编译器:gcc (GCC) 8.2.0",-1),_=e("li",null,"zlmediakit 编译类型:Release",-1),k=e("li",null,"malloc 库:ptmalloc(未开启 jemalloc)",-1),x=e("li",null,"config.ini 配置文件修改(主要开启合并写、按需转协议):",-1),y=d(`
                    diff --git a/conf/config.ini b/conf/config.ini
                     index c2d4613f..99ce5c84 100644
                     --- a/conf/config.ini
                     +++ b/conf/config.ini
                    diff --git a/assets/rtsp_pull_stream_performance_test.html-1iKNM4Ty.js b/assets/rtsp_pull_stream_performance_test.html-cK-OpNrS.js
                    similarity index 98%
                    rename from assets/rtsp_pull_stream_performance_test.html-1iKNM4Ty.js
                    rename to assets/rtsp_pull_stream_performance_test.html-cK-OpNrS.js
                    index 7735627..2fd322f 100644
                    --- a/assets/rtsp_pull_stream_performance_test.html-1iKNM4Ty.js
                    +++ b/assets/rtsp_pull_stream_performance_test.html-cK-OpNrS.js
                    @@ -1,4 +1,4 @@
                    -import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as l,c as t,a as e,d as n,b as r,e as d}from"./app-BrxqtzGY.js";const c={},o=e("h2",{id:"一、测试环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一、测试环境","aria-hidden":"true"},"#"),n(" 一、测试环境")],-1),p=e("li",null,"测试日期:2022/5/18",-1),u=e("li",null,"代码版本:git hash: c7d7999f",-1),m=e("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz",-1),v=e("li",null,"操作系统:CentOS release 6.3 (Final)",-1),b=e("li",null,"内存:16GB",-1),h=e("li",null,"网卡:127.0.0.1",-1),g={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"编译器:gcc (GCC) 8.2.0",-1),_=e("li",null,"zlmediakit 编译类型:Release",-1),k=e("li",null,"malloc 库:ptmalloc(未开启 jemalloc)",-1),x=e("li",null,"config.ini 配置文件修改(主要开启合并写、按需转协议):",-1),y=d(`
                    diff --git a/conf/config.ini b/conf/config.ini
                    +import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as l,c as t,a as e,d as n,b as r,e as d}from"./app-oTlYPy8h.js";const c={},o=e("h2",{id:"一、测试环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一、测试环境","aria-hidden":"true"},"#"),n(" 一、测试环境")],-1),p=e("li",null,"测试日期:2022/5/18",-1),u=e("li",null,"代码版本:git hash: c7d7999f",-1),m=e("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz",-1),v=e("li",null,"操作系统:CentOS release 6.3 (Final)",-1),b=e("li",null,"内存:16GB",-1),h=e("li",null,"网卡:127.0.0.1",-1),g={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"编译器:gcc (GCC) 8.2.0",-1),_=e("li",null,"zlmediakit 编译类型:Release",-1),k=e("li",null,"malloc 库:ptmalloc(未开启 jemalloc)",-1),x=e("li",null,"config.ini 配置文件修改(主要开启合并写、按需转协议):",-1),y=d(`
                    diff --git a/conf/config.ini b/conf/config.ini
                     index c2d4613f..99ce5c84 100644
                     --- a/conf/config.ini
                     +++ b/conf/config.ini
                    diff --git a/assets/rtsp_push_process.html-Xg9db3f1.js b/assets/rtsp_push_process.html-gk6hQwdn.js
                    similarity index 99%
                    rename from assets/rtsp_push_process.html-Xg9db3f1.js
                    rename to assets/rtsp_push_process.html-gk6hQwdn.js
                    index bad79f5..f960a7b 100644
                    --- a/assets/rtsp_push_process.html-Xg9db3f1.js
                    +++ b/assets/rtsp_push_process.html-gk6hQwdn.js
                    @@ -1,4 +1,4 @@
                    -import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as n,e as s}from"./app-BrxqtzGY.js";const t={},d=s(`

                    1. The client sends an ANNOUNCE command.

                    This step primarily involves transmitting the SDP. Generally, before this command, an OPTIONS command is sent to probe the server's support for the streaming protocol. However, to reduce the number of interactions, the ANNOUNCE command can be directly sent. If not supported, the server naturally responds with an error code.

                    ANNOUNCE rtsp://10.0.9.130:554/live/2.sdp RTSP/1.0
                    +import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as a,c as n,e as s}from"./app-oTlYPy8h.js";const t={},d=s(`

                    1. The client sends an ANNOUNCE command.

                    This step primarily involves transmitting the SDP. Generally, before this command, an OPTIONS command is sent to probe the server's support for the streaming protocol. However, to reduce the number of interactions, the ANNOUNCE command can be directly sent. If not supported, the server naturally responds with an error code.

                    ANNOUNCE rtsp://10.0.9.130:554/live/2.sdp RTSP/1.0
                     CSeq: 1
                     User-Agent: EasyPusher v1.2.16.1105
                     Content-Type: application/sdp
                    diff --git a/assets/rtsp_push_process.html-u1dV3DYT.js b/assets/rtsp_push_process.html-zH-D_jAF.js
                    similarity index 99%
                    rename from assets/rtsp_push_process.html-u1dV3DYT.js
                    rename to assets/rtsp_push_process.html-zH-D_jAF.js
                    index c311fa9..d9e33a7 100644
                    --- a/assets/rtsp_push_process.html-u1dV3DYT.js
                    +++ b/assets/rtsp_push_process.html-zH-D_jAF.js
                    @@ -1,4 +1,4 @@
                    -import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as e,c as n,e as s}from"./app-BrxqtzGY.js";const d={},p=s(`

                    1、客户端发送 ANNOUNCE 命令

                    此步骤主要传输 SDP,一般而言在这个命令之前还需要 OPTIONS 命令侦探服务器是否支持推流协议,但是为了减少交互次数,可以直接发送 ANNOUNCE 命令,如果不支持,服务器自然响应错误代码。

                    ANNOUNCE rtsp://10.0.9.130:554/live/2.sdp RTSP/1.0
                    +import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as e,c as n,e as s}from"./app-oTlYPy8h.js";const d={},p=s(`

                    1、客户端发送 ANNOUNCE 命令

                    此步骤主要传输 SDP,一般而言在这个命令之前还需要 OPTIONS 命令侦探服务器是否支持推流协议,但是为了减少交互次数,可以直接发送 ANNOUNCE 命令,如果不支持,服务器自然响应错误代码。

                    ANNOUNCE rtsp://10.0.9.130:554/live/2.sdp RTSP/1.0
                     CSeq: 1
                     User-Agent: EasyPusher v1.2.16.1105
                     Content-Type: application/sdp
                    diff --git a/assets/rtsp_push_stream_performance_test.html-y53Byttn.js b/assets/rtsp_push_stream_performance_test.html-RMobzxOL.js
                    similarity index 98%
                    rename from assets/rtsp_push_stream_performance_test.html-y53Byttn.js
                    rename to assets/rtsp_push_stream_performance_test.html-RMobzxOL.js
                    index 7450717..f62e325 100644
                    --- a/assets/rtsp_push_stream_performance_test.html-y53Byttn.js
                    +++ b/assets/rtsp_push_stream_performance_test.html-RMobzxOL.js
                    @@ -1,4 +1,4 @@
                    -import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as l,c as d,a as e,d as n,b as r,e as t}from"./app-BrxqtzGY.js";const c={},o=e("h2",{id:"一、测试环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一、测试环境","aria-hidden":"true"},"#"),n(" 一、测试环境")],-1),p=e("li",null,"测试日期:2022/5/18",-1),m=e("li",null,"代码版本:git hash: c7d7999f",-1),u=e("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz",-1),v=e("li",null,"操作系统:CentOS release 6.3 (Final)",-1),b=e("li",null,"内存:16GB",-1),h=e("li",null,"网卡:127.0.0.1",-1),_={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"编译器:gcc (GCC) 8.2.0",-1),g=e("li",null,"zlmediakit 编译类型:Release",-1),k=e("li",null,"malloc 库:ptmalloc(未开启 jemalloc)",-1),x=e("li",null,"config.ini 配置文件修改(主要开启合并写、按需转协议):",-1),y=t(`
                    diff --git a/conf/config.ini b/conf/config.ini
                    +import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as l,c as d,a as e,d as n,b as r,e as t}from"./app-oTlYPy8h.js";const c={},o=e("h2",{id:"一、测试环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一、测试环境","aria-hidden":"true"},"#"),n(" 一、测试环境")],-1),p=e("li",null,"测试日期:2022/5/18",-1),m=e("li",null,"代码版本:git hash: c7d7999f",-1),u=e("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz",-1),v=e("li",null,"操作系统:CentOS release 6.3 (Final)",-1),b=e("li",null,"内存:16GB",-1),h=e("li",null,"网卡:127.0.0.1",-1),_={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"编译器:gcc (GCC) 8.2.0",-1),g=e("li",null,"zlmediakit 编译类型:Release",-1),k=e("li",null,"malloc 库:ptmalloc(未开启 jemalloc)",-1),x=e("li",null,"config.ini 配置文件修改(主要开启合并写、按需转协议):",-1),y=t(`
                    diff --git a/conf/config.ini b/conf/config.ini
                     index c2d4613f..99ce5c84 100644
                     --- a/conf/config.ini
                     +++ b/conf/config.ini
                    diff --git a/assets/rtsp_push_stream_performance_test.html-iJ5a3bwy.js b/assets/rtsp_push_stream_performance_test.html-zFl0_4_8.js
                    similarity index 98%
                    rename from assets/rtsp_push_stream_performance_test.html-iJ5a3bwy.js
                    rename to assets/rtsp_push_stream_performance_test.html-zFl0_4_8.js
                    index 7450717..f62e325 100644
                    --- a/assets/rtsp_push_stream_performance_test.html-iJ5a3bwy.js
                    +++ b/assets/rtsp_push_stream_performance_test.html-zFl0_4_8.js
                    @@ -1,4 +1,4 @@
                    -import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as l,c as d,a as e,d as n,b as r,e as t}from"./app-BrxqtzGY.js";const c={},o=e("h2",{id:"一、测试环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一、测试环境","aria-hidden":"true"},"#"),n(" 一、测试环境")],-1),p=e("li",null,"测试日期:2022/5/18",-1),m=e("li",null,"代码版本:git hash: c7d7999f",-1),u=e("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz",-1),v=e("li",null,"操作系统:CentOS release 6.3 (Final)",-1),b=e("li",null,"内存:16GB",-1),h=e("li",null,"网卡:127.0.0.1",-1),_={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"编译器:gcc (GCC) 8.2.0",-1),g=e("li",null,"zlmediakit 编译类型:Release",-1),k=e("li",null,"malloc 库:ptmalloc(未开启 jemalloc)",-1),x=e("li",null,"config.ini 配置文件修改(主要开启合并写、按需转协议):",-1),y=t(`
                    diff --git a/conf/config.ini b/conf/config.ini
                    +import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as l,c as d,a as e,d as n,b as r,e as t}from"./app-oTlYPy8h.js";const c={},o=e("h2",{id:"一、测试环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一、测试环境","aria-hidden":"true"},"#"),n(" 一、测试环境")],-1),p=e("li",null,"测试日期:2022/5/18",-1),m=e("li",null,"代码版本:git hash: c7d7999f",-1),u=e("li",null,"cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz",-1),v=e("li",null,"操作系统:CentOS release 6.3 (Final)",-1),b=e("li",null,"内存:16GB",-1),h=e("li",null,"网卡:127.0.0.1",-1),_={href:"https://raw.githubusercontent.com/ossrs/srs/develop/trunk/doc/source.200kbps.768x320.flv",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"编译器:gcc (GCC) 8.2.0",-1),g=e("li",null,"zlmediakit 编译类型:Release",-1),k=e("li",null,"malloc 库:ptmalloc(未开启 jemalloc)",-1),x=e("li",null,"config.ini 配置文件修改(主要开启合并写、按需转协议):",-1),y=t(`
                    diff --git a/conf/config.ini b/conf/config.ini
                     index c2d4613f..99ce5c84 100644
                     --- a/conf/config.ini
                     +++ b/conf/config.ini
                    diff --git a/assets/sankeyDiagram-6db3d513-8ESTXLkU.js b/assets/sankeyDiagram-6db3d513-FtDAma5v.js
                    similarity index 99%
                    rename from assets/sankeyDiagram-6db3d513-8ESTXLkU.js
                    rename to assets/sankeyDiagram-6db3d513-FtDAma5v.js
                    index 3b5b6db..0b45098 100644
                    --- a/assets/sankeyDiagram-6db3d513-8ESTXLkU.js
                    +++ b/assets/sankeyDiagram-6db3d513-FtDAma5v.js
                    @@ -1,4 +1,4 @@
                    -import{c as rt,g as mt,s as _t,a as kt,b as xt,x as vt,v as bt,z as wt,j as St,u as Lt,h as Y,i as Et}from"./mermaid.core-zy7cM8l9.js";import{o as At}from"./ordinal-wXG5obU4.js";import"./app-BrxqtzGY.js";import"./init-Hi12RPRh.js";function Tt(t){for(var n=t.length/6|0,i=new Array(n),l=0;l=l)&&(i=l);else{let l=-1;for(let u of t)(u=n(u,++l,t))!=null&&(i=u)&&(i=u)}return i}function yt(t,n){let i;if(n===void 0)for(const l of t)l!=null&&(i>l||i===void 0&&l>=l)&&(i=l);else{let l=-1;for(let u of t)(u=n(u,++l,t))!=null&&(i>u||i===void 0&&u>=u)&&(i=u)}return i}function Z(t,n){let i=0;if(n===void 0)for(let l of t)(l=+l)&&(i+=l);else{let l=-1;for(let u of t)(u=+n(u,++l,t))&&(i+=u)}return i}function Nt(t){return t.target.depth}function Pt(t){return t.depth}function Ct(t,n){return n-1-t.height}function dt(t,n){return t.sourceLinks.length?t.depth:n-1}function It(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?yt(t.sourceLinks,Nt)-1:0}function G(t){return function(){return t}}function lt(t,n){return H(t.source,n.source)||t.index-n.index}function at(t,n){return H(t.target,n.target)||t.index-n.index}function H(t,n){return t.y0-n.y0}function J(t){return t.value}function Ot(t){return t.index}function $t(t){return t.nodes}function zt(t){return t.links}function ct(t,n){const i=t.get(n);if(!i)throw new Error("missing: "+n);return i}function ut({nodes:t}){for(const n of t){let i=n.y0,l=i;for(const u of n.sourceLinks)u.y0=i+u.width/2,i+=u.width;for(const u of n.targetLinks)u.y1=l+u.width/2,l+=u.width}}function jt(){let t=0,n=0,i=1,l=1,u=24,k=8,g,m=Ot,s=dt,o,c,p=$t,b=zt,y=6;function x(){const e={nodes:p.apply(null,arguments),links:b.apply(null,arguments)};return E(e),L(e),A(e),N(e),S(e),ut(e),e}x.update=function(e){return ut(e),e},x.nodeId=function(e){return arguments.length?(m=typeof e=="function"?e:G(e),x):m},x.nodeAlign=function(e){return arguments.length?(s=typeof e=="function"?e:G(e),x):s},x.nodeSort=function(e){return arguments.length?(o=e,x):o},x.nodeWidth=function(e){return arguments.length?(u=+e,x):u},x.nodePadding=function(e){return arguments.length?(k=g=+e,x):k},x.nodes=function(e){return arguments.length?(p=typeof e=="function"?e:G(e),x):p},x.links=function(e){return arguments.length?(b=typeof e=="function"?e:G(e),x):b},x.linkSort=function(e){return arguments.length?(c=e,x):c},x.size=function(e){return arguments.length?(t=n=0,i=+e[0],l=+e[1],x):[i-t,l-n]},x.extent=function(e){return arguments.length?(t=+e[0][0],i=+e[1][0],n=+e[0][1],l=+e[1][1],x):[[t,n],[i,l]]},x.iterations=function(e){return arguments.length?(y=+e,x):y};function E({nodes:e,links:f}){for(const[h,r]of e.entries())r.index=h,r.sourceLinks=[],r.targetLinks=[];const a=new Map(e.map((h,r)=>[m(h,r,e),h]));for(const[h,r]of f.entries()){r.index=h;let{source:_,target:v}=r;typeof _!="object"&&(_=r.source=ct(a,_)),typeof v!="object"&&(v=r.target=ct(a,v)),_.sourceLinks.push(r),v.targetLinks.push(r)}if(c!=null)for(const{sourceLinks:h,targetLinks:r}of e)h.sort(c),r.sort(c)}function L({nodes:e}){for(const f of e)f.value=f.fixedValue===void 0?Math.max(Z(f.sourceLinks,J),Z(f.targetLinks,J)):f.fixedValue}function A({nodes:e}){const f=e.length;let a=new Set(e),h=new Set,r=0;for(;a.size;){for(const _ of a){_.depth=r;for(const{target:v}of _.sourceLinks)h.add(v)}if(++r>f)throw new Error("circular link");a=h,h=new Set}}function N({nodes:e}){const f=e.length;let a=new Set(e),h=new Set,r=0;for(;a.size;){for(const _ of a){_.height=r;for(const{source:v}of _.targetLinks)h.add(v)}if(++r>f)throw new Error("circular link");a=h,h=new Set}}function P({nodes:e}){const f=ot(e,r=>r.depth)+1,a=(i-t-u)/(f-1),h=new Array(f);for(const r of e){const _=Math.max(0,Math.min(f-1,Math.floor(s.call(null,r,f))));r.layer=_,r.x0=t+_*a,r.x1=r.x0+u,h[_]?h[_].push(r):h[_]=[r]}if(o)for(const r of h)r.sort(o);return h}function z(e){const f=yt(e,a=>(l-n-(a.length-1)*g)/Z(a,J));for(const a of e){let h=n;for(const r of a){r.y0=h,r.y1=h+r.value*f,h=r.y1+g;for(const _ of r.sourceLinks)_.width=_.value*f}h=(l-h+g)/(a.length+1);for(let r=0;ra.length)-1)),z(f);for(let a=0;a0))continue;let V=(U/j-v.y0)*f;v.y0+=V,v.y1+=V,w(v)}o===void 0&&_.sort(H),C(_,a)}}function $(e,f,a){for(let h=e.length,r=h-2;r>=0;--r){const _=e[r];for(const v of _){let U=0,j=0;for(const{target:F,value:K}of v.sourceLinks){let W=K*(F.layer-v.layer);U+=R(v,F)*W,j+=W}if(!(j>0))continue;let V=(U/j-v.y0)*f;v.y0+=V,v.y1+=V,w(v)}o===void 0&&_.sort(H),C(_,a)}}function C(e,f){const a=e.length>>1,h=e[a];d(e,h.y0-g,a-1,f),I(e,h.y1+g,a+1,f),d(e,l,e.length-1,f),I(e,n,0,f)}function I(e,f,a,h){for(;a1e-6&&(r.y0+=_,r.y1+=_),f=r.y1+g}}function d(e,f,a,h){for(;a>=0;--a){const r=e[a],_=(r.y1-f)*h;_>1e-6&&(r.y0-=_,r.y1-=_),f=r.y0-g}}function w({sourceLinks:e,targetLinks:f}){if(c===void 0){for(const{source:{sourceLinks:a}}of f)a.sort(at);for(const{target:{targetLinks:a}}of e)a.sort(lt)}}function O(e){if(c===void 0)for(const{sourceLinks:f,targetLinks:a}of e)f.sort(at),a.sort(lt)}function T(e,f){let a=e.y0-(e.sourceLinks.length-1)*g/2;for(const{target:h,width:r}of e.sourceLinks){if(h===f)break;a+=r+g}for(const{source:h,width:r}of f.targetLinks){if(h===e)break;a-=r}return a}function R(e,f){let a=f.y0-(f.targetLinks.length-1)*g/2;for(const{source:h,width:r}of f.targetLinks){if(h===e)break;a+=r+g}for(const{target:h,width:r}of e.sourceLinks){if(h===f)break;a-=r}return a}return x}var tt=Math.PI,et=2*tt,D=1e-6,Dt=et-D;function nt(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function gt(){return new nt}nt.prototype=gt.prototype={constructor:nt,moveTo:function(t,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,n){this._+="L"+(this._x1=+t)+","+(this._y1=+n)},quadraticCurveTo:function(t,n,i,l){this._+="Q"+ +t+","+ +n+","+(this._x1=+i)+","+(this._y1=+l)},bezierCurveTo:function(t,n,i,l,u,k){this._+="C"+ +t+","+ +n+","+ +i+","+ +l+","+(this._x1=+u)+","+(this._y1=+k)},arcTo:function(t,n,i,l,u){t=+t,n=+n,i=+i,l=+l,u=+u;var k=this._x1,g=this._y1,m=i-t,s=l-n,o=k-t,c=g-n,p=o*o+c*c;if(u<0)throw new Error("negative radius: "+u);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=n);else if(p>D)if(!(Math.abs(c*m-s*o)>D)||!u)this._+="L"+(this._x1=t)+","+(this._y1=n);else{var b=i-k,y=l-g,x=m*m+s*s,E=b*b+y*y,L=Math.sqrt(x),A=Math.sqrt(p),N=u*Math.tan((tt-Math.acos((x+p-E)/(2*L*A)))/2),P=N/A,z=N/L;Math.abs(P-1)>D&&(this._+="L"+(t+P*o)+","+(n+P*c)),this._+="A"+u+","+u+",0,0,"+ +(c*b>o*y)+","+(this._x1=t+z*m)+","+(this._y1=n+z*s)}},arc:function(t,n,i,l,u,k){t=+t,n=+n,i=+i,k=!!k;var g=i*Math.cos(l),m=i*Math.sin(l),s=t+g,o=n+m,c=1^k,p=k?l-u:u-l;if(i<0)throw new Error("negative radius: "+i);this._x1===null?this._+="M"+s+","+o:(Math.abs(this._x1-s)>D||Math.abs(this._y1-o)>D)&&(this._+="L"+s+","+o),i&&(p<0&&(p=p%et+et),p>Dt?this._+="A"+i+","+i+",0,1,"+c+","+(t-g)+","+(n-m)+"A"+i+","+i+",0,1,"+c+","+(this._x1=s)+","+(this._y1=o):p>D&&(this._+="A"+i+","+i+",0,"+ +(p>=tt)+","+c+","+(this._x1=t+i*Math.cos(u))+","+(this._y1=n+i*Math.sin(u))))},rect:function(t,n,i,l){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +i+"v"+ +l+"h"+-i+"Z"},toString:function(){return this._}};function ht(t){return function(){return t}}function Bt(t){return t[0]}function Rt(t){return t[1]}var Ut=Array.prototype.slice;function Vt(t){return t.source}function Ft(t){return t.target}function Wt(t){var n=Vt,i=Ft,l=Bt,u=Rt,k=null;function g(){var m,s=Ut.call(arguments),o=n.apply(this,s),c=i.apply(this,s);if(k||(k=m=gt()),t(k,+l.apply(this,(s[0]=o,s)),+u.apply(this,s),+l.apply(this,(s[0]=c,s)),+u.apply(this,s)),m)return k=null,m+""||null}return g.source=function(m){return arguments.length?(n=m,g):n},g.target=function(m){return arguments.length?(i=m,g):i},g.x=function(m){return arguments.length?(l=typeof m=="function"?m:ht(+m),g):l},g.y=function(m){return arguments.length?(u=typeof m=="function"?m:ht(+m),g):u},g.context=function(m){return arguments.length?(k=m??null,g):k},g}function Yt(t,n,i,l,u){t.moveTo(n,i),t.bezierCurveTo(n=(n+l)/2,i,n,u,l,u)}function Gt(){return Wt(Yt)}function Ht(t){return[t.source.x1,t.y0]}function Xt(t){return[t.target.x0,t.y1]}function qt(){return Gt().source(Ht).target(Xt)}var it=function(){var t=function(m,s,o,c){for(o=o||{},c=m.length;c--;o[m[c]]=s);return o},n=[1,9],i=[1,10],l=[1,5,10,12],u={trace:function(){},yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:function(s,o,c,p,b,y,x){var E=y.length-1;switch(b){case 7:const L=p.findOrCreateNode(y[E-4].trim().replaceAll('""','"')),A=p.findOrCreateNode(y[E-2].trim().replaceAll('""','"')),N=parseFloat(y[E].trim());p.addLink(L,A,N);break;case 8:case 9:case 11:this.$=y[E];break;case 10:this.$=y[E-1];break}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:n,20:i},{1:[2,6],7:11,10:[1,12]},t(i,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(l,[2,8]),t(l,[2,9]),{19:[1,16]},t(l,[2,11]),{1:[2,1]},{1:[2,5]},t(i,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:n,20:i},{15:18,16:7,17:8,18:n,20:i},{18:[1,19]},t(i,[2,3]),{12:[1,20]},t(l,[2,10]),{15:21,16:7,17:8,18:n,20:i},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:function(s,o){if(o.recoverable)this.trace(s);else{var c=new Error(s);throw c.hash=o,c}},parse:function(s){var o=this,c=[0],p=[],b=[null],y=[],x=this.table,E="",L=0,A=0,N=2,P=1,z=y.slice.call(arguments,1),S=Object.create(this.lexer),M={yy:{}};for(var $ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$)&&(M.yy[$]=this.yy[$]);S.setInput(s,M.yy),M.yy.lexer=S,M.yy.parser=this,typeof S.yylloc>"u"&&(S.yylloc={});var C=S.yylloc;y.push(C);var I=S.options&&S.options.ranges;typeof M.yy.parseError=="function"?this.parseError=M.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function d(){var v;return v=p.pop()||S.lex()||P,typeof v!="number"&&(v instanceof Array&&(p=v,v=p.pop()),v=o.symbols_[v]||v),v}for(var w,O,T,R,e={},f,a,h,r;;){if(O=c[c.length-1],this.defaultActions[O]?T=this.defaultActions[O]:((w===null||typeof w>"u")&&(w=d()),T=x[O]&&x[O][w]),typeof T>"u"||!T.length||!T[0]){var _="";r=[];for(f in x[O])this.terminals_[f]&&f>N&&r.push("'"+this.terminals_[f]+"'");S.showPosition?_="Parse error on line "+(L+1)+`:
                    +import{c as rt,g as mt,s as _t,a as kt,b as xt,x as vt,v as bt,z as wt,j as St,u as Lt,h as Y,i as Et}from"./mermaid.core-QJnSHCal.js";import{o as At}from"./ordinal-wXG5obU4.js";import"./app-oTlYPy8h.js";import"./init-Hi12RPRh.js";function Tt(t){for(var n=t.length/6|0,i=new Array(n),l=0;l=l)&&(i=l);else{let l=-1;for(let u of t)(u=n(u,++l,t))!=null&&(i=u)&&(i=u)}return i}function yt(t,n){let i;if(n===void 0)for(const l of t)l!=null&&(i>l||i===void 0&&l>=l)&&(i=l);else{let l=-1;for(let u of t)(u=n(u,++l,t))!=null&&(i>u||i===void 0&&u>=u)&&(i=u)}return i}function Z(t,n){let i=0;if(n===void 0)for(let l of t)(l=+l)&&(i+=l);else{let l=-1;for(let u of t)(u=+n(u,++l,t))&&(i+=u)}return i}function Nt(t){return t.target.depth}function Pt(t){return t.depth}function Ct(t,n){return n-1-t.height}function dt(t,n){return t.sourceLinks.length?t.depth:n-1}function It(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?yt(t.sourceLinks,Nt)-1:0}function G(t){return function(){return t}}function lt(t,n){return H(t.source,n.source)||t.index-n.index}function at(t,n){return H(t.target,n.target)||t.index-n.index}function H(t,n){return t.y0-n.y0}function J(t){return t.value}function Ot(t){return t.index}function $t(t){return t.nodes}function zt(t){return t.links}function ct(t,n){const i=t.get(n);if(!i)throw new Error("missing: "+n);return i}function ut({nodes:t}){for(const n of t){let i=n.y0,l=i;for(const u of n.sourceLinks)u.y0=i+u.width/2,i+=u.width;for(const u of n.targetLinks)u.y1=l+u.width/2,l+=u.width}}function jt(){let t=0,n=0,i=1,l=1,u=24,k=8,g,m=Ot,s=dt,o,c,p=$t,b=zt,y=6;function x(){const e={nodes:p.apply(null,arguments),links:b.apply(null,arguments)};return E(e),L(e),A(e),N(e),S(e),ut(e),e}x.update=function(e){return ut(e),e},x.nodeId=function(e){return arguments.length?(m=typeof e=="function"?e:G(e),x):m},x.nodeAlign=function(e){return arguments.length?(s=typeof e=="function"?e:G(e),x):s},x.nodeSort=function(e){return arguments.length?(o=e,x):o},x.nodeWidth=function(e){return arguments.length?(u=+e,x):u},x.nodePadding=function(e){return arguments.length?(k=g=+e,x):k},x.nodes=function(e){return arguments.length?(p=typeof e=="function"?e:G(e),x):p},x.links=function(e){return arguments.length?(b=typeof e=="function"?e:G(e),x):b},x.linkSort=function(e){return arguments.length?(c=e,x):c},x.size=function(e){return arguments.length?(t=n=0,i=+e[0],l=+e[1],x):[i-t,l-n]},x.extent=function(e){return arguments.length?(t=+e[0][0],i=+e[1][0],n=+e[0][1],l=+e[1][1],x):[[t,n],[i,l]]},x.iterations=function(e){return arguments.length?(y=+e,x):y};function E({nodes:e,links:f}){for(const[h,r]of e.entries())r.index=h,r.sourceLinks=[],r.targetLinks=[];const a=new Map(e.map((h,r)=>[m(h,r,e),h]));for(const[h,r]of f.entries()){r.index=h;let{source:_,target:v}=r;typeof _!="object"&&(_=r.source=ct(a,_)),typeof v!="object"&&(v=r.target=ct(a,v)),_.sourceLinks.push(r),v.targetLinks.push(r)}if(c!=null)for(const{sourceLinks:h,targetLinks:r}of e)h.sort(c),r.sort(c)}function L({nodes:e}){for(const f of e)f.value=f.fixedValue===void 0?Math.max(Z(f.sourceLinks,J),Z(f.targetLinks,J)):f.fixedValue}function A({nodes:e}){const f=e.length;let a=new Set(e),h=new Set,r=0;for(;a.size;){for(const _ of a){_.depth=r;for(const{target:v}of _.sourceLinks)h.add(v)}if(++r>f)throw new Error("circular link");a=h,h=new Set}}function N({nodes:e}){const f=e.length;let a=new Set(e),h=new Set,r=0;for(;a.size;){for(const _ of a){_.height=r;for(const{source:v}of _.targetLinks)h.add(v)}if(++r>f)throw new Error("circular link");a=h,h=new Set}}function P({nodes:e}){const f=ot(e,r=>r.depth)+1,a=(i-t-u)/(f-1),h=new Array(f);for(const r of e){const _=Math.max(0,Math.min(f-1,Math.floor(s.call(null,r,f))));r.layer=_,r.x0=t+_*a,r.x1=r.x0+u,h[_]?h[_].push(r):h[_]=[r]}if(o)for(const r of h)r.sort(o);return h}function z(e){const f=yt(e,a=>(l-n-(a.length-1)*g)/Z(a,J));for(const a of e){let h=n;for(const r of a){r.y0=h,r.y1=h+r.value*f,h=r.y1+g;for(const _ of r.sourceLinks)_.width=_.value*f}h=(l-h+g)/(a.length+1);for(let r=0;ra.length)-1)),z(f);for(let a=0;a0))continue;let V=(U/j-v.y0)*f;v.y0+=V,v.y1+=V,w(v)}o===void 0&&_.sort(H),C(_,a)}}function $(e,f,a){for(let h=e.length,r=h-2;r>=0;--r){const _=e[r];for(const v of _){let U=0,j=0;for(const{target:F,value:K}of v.sourceLinks){let W=K*(F.layer-v.layer);U+=R(v,F)*W,j+=W}if(!(j>0))continue;let V=(U/j-v.y0)*f;v.y0+=V,v.y1+=V,w(v)}o===void 0&&_.sort(H),C(_,a)}}function C(e,f){const a=e.length>>1,h=e[a];d(e,h.y0-g,a-1,f),I(e,h.y1+g,a+1,f),d(e,l,e.length-1,f),I(e,n,0,f)}function I(e,f,a,h){for(;a1e-6&&(r.y0+=_,r.y1+=_),f=r.y1+g}}function d(e,f,a,h){for(;a>=0;--a){const r=e[a],_=(r.y1-f)*h;_>1e-6&&(r.y0-=_,r.y1-=_),f=r.y0-g}}function w({sourceLinks:e,targetLinks:f}){if(c===void 0){for(const{source:{sourceLinks:a}}of f)a.sort(at);for(const{target:{targetLinks:a}}of e)a.sort(lt)}}function O(e){if(c===void 0)for(const{sourceLinks:f,targetLinks:a}of e)f.sort(at),a.sort(lt)}function T(e,f){let a=e.y0-(e.sourceLinks.length-1)*g/2;for(const{target:h,width:r}of e.sourceLinks){if(h===f)break;a+=r+g}for(const{source:h,width:r}of f.targetLinks){if(h===e)break;a-=r}return a}function R(e,f){let a=f.y0-(f.targetLinks.length-1)*g/2;for(const{source:h,width:r}of f.targetLinks){if(h===e)break;a+=r+g}for(const{target:h,width:r}of e.sourceLinks){if(h===f)break;a-=r}return a}return x}var tt=Math.PI,et=2*tt,D=1e-6,Dt=et-D;function nt(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function gt(){return new nt}nt.prototype=gt.prototype={constructor:nt,moveTo:function(t,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,n){this._+="L"+(this._x1=+t)+","+(this._y1=+n)},quadraticCurveTo:function(t,n,i,l){this._+="Q"+ +t+","+ +n+","+(this._x1=+i)+","+(this._y1=+l)},bezierCurveTo:function(t,n,i,l,u,k){this._+="C"+ +t+","+ +n+","+ +i+","+ +l+","+(this._x1=+u)+","+(this._y1=+k)},arcTo:function(t,n,i,l,u){t=+t,n=+n,i=+i,l=+l,u=+u;var k=this._x1,g=this._y1,m=i-t,s=l-n,o=k-t,c=g-n,p=o*o+c*c;if(u<0)throw new Error("negative radius: "+u);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=n);else if(p>D)if(!(Math.abs(c*m-s*o)>D)||!u)this._+="L"+(this._x1=t)+","+(this._y1=n);else{var b=i-k,y=l-g,x=m*m+s*s,E=b*b+y*y,L=Math.sqrt(x),A=Math.sqrt(p),N=u*Math.tan((tt-Math.acos((x+p-E)/(2*L*A)))/2),P=N/A,z=N/L;Math.abs(P-1)>D&&(this._+="L"+(t+P*o)+","+(n+P*c)),this._+="A"+u+","+u+",0,0,"+ +(c*b>o*y)+","+(this._x1=t+z*m)+","+(this._y1=n+z*s)}},arc:function(t,n,i,l,u,k){t=+t,n=+n,i=+i,k=!!k;var g=i*Math.cos(l),m=i*Math.sin(l),s=t+g,o=n+m,c=1^k,p=k?l-u:u-l;if(i<0)throw new Error("negative radius: "+i);this._x1===null?this._+="M"+s+","+o:(Math.abs(this._x1-s)>D||Math.abs(this._y1-o)>D)&&(this._+="L"+s+","+o),i&&(p<0&&(p=p%et+et),p>Dt?this._+="A"+i+","+i+",0,1,"+c+","+(t-g)+","+(n-m)+"A"+i+","+i+",0,1,"+c+","+(this._x1=s)+","+(this._y1=o):p>D&&(this._+="A"+i+","+i+",0,"+ +(p>=tt)+","+c+","+(this._x1=t+i*Math.cos(u))+","+(this._y1=n+i*Math.sin(u))))},rect:function(t,n,i,l){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +i+"v"+ +l+"h"+-i+"Z"},toString:function(){return this._}};function ht(t){return function(){return t}}function Bt(t){return t[0]}function Rt(t){return t[1]}var Ut=Array.prototype.slice;function Vt(t){return t.source}function Ft(t){return t.target}function Wt(t){var n=Vt,i=Ft,l=Bt,u=Rt,k=null;function g(){var m,s=Ut.call(arguments),o=n.apply(this,s),c=i.apply(this,s);if(k||(k=m=gt()),t(k,+l.apply(this,(s[0]=o,s)),+u.apply(this,s),+l.apply(this,(s[0]=c,s)),+u.apply(this,s)),m)return k=null,m+""||null}return g.source=function(m){return arguments.length?(n=m,g):n},g.target=function(m){return arguments.length?(i=m,g):i},g.x=function(m){return arguments.length?(l=typeof m=="function"?m:ht(+m),g):l},g.y=function(m){return arguments.length?(u=typeof m=="function"?m:ht(+m),g):u},g.context=function(m){return arguments.length?(k=m??null,g):k},g}function Yt(t,n,i,l,u){t.moveTo(n,i),t.bezierCurveTo(n=(n+l)/2,i,n,u,l,u)}function Gt(){return Wt(Yt)}function Ht(t){return[t.source.x1,t.y0]}function Xt(t){return[t.target.x0,t.y1]}function qt(){return Gt().source(Ht).target(Xt)}var it=function(){var t=function(m,s,o,c){for(o=o||{},c=m.length;c--;o[m[c]]=s);return o},n=[1,9],i=[1,10],l=[1,5,10,12],u={trace:function(){},yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:function(s,o,c,p,b,y,x){var E=y.length-1;switch(b){case 7:const L=p.findOrCreateNode(y[E-4].trim().replaceAll('""','"')),A=p.findOrCreateNode(y[E-2].trim().replaceAll('""','"')),N=parseFloat(y[E].trim());p.addLink(L,A,N);break;case 8:case 9:case 11:this.$=y[E];break;case 10:this.$=y[E-1];break}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:n,20:i},{1:[2,6],7:11,10:[1,12]},t(i,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(l,[2,8]),t(l,[2,9]),{19:[1,16]},t(l,[2,11]),{1:[2,1]},{1:[2,5]},t(i,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:n,20:i},{15:18,16:7,17:8,18:n,20:i},{18:[1,19]},t(i,[2,3]),{12:[1,20]},t(l,[2,10]),{15:21,16:7,17:8,18:n,20:i},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:function(s,o){if(o.recoverable)this.trace(s);else{var c=new Error(s);throw c.hash=o,c}},parse:function(s){var o=this,c=[0],p=[],b=[null],y=[],x=this.table,E="",L=0,A=0,N=2,P=1,z=y.slice.call(arguments,1),S=Object.create(this.lexer),M={yy:{}};for(var $ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$)&&(M.yy[$]=this.yy[$]);S.setInput(s,M.yy),M.yy.lexer=S,M.yy.parser=this,typeof S.yylloc>"u"&&(S.yylloc={});var C=S.yylloc;y.push(C);var I=S.options&&S.options.ranges;typeof M.yy.parseError=="function"?this.parseError=M.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function d(){var v;return v=p.pop()||S.lex()||P,typeof v!="number"&&(v instanceof Array&&(p=v,v=p.pop()),v=o.symbols_[v]||v),v}for(var w,O,T,R,e={},f,a,h,r;;){if(O=c[c.length-1],this.defaultActions[O]?T=this.defaultActions[O]:((w===null||typeof w>"u")&&(w=d()),T=x[O]&&x[O][w]),typeof T>"u"||!T.length||!T[0]){var _="";r=[];for(f in x[O])this.terminals_[f]&&f>N&&r.push("'"+this.terminals_[f]+"'");S.showPosition?_="Parse error on line "+(L+1)+`:
                     `+S.showPosition()+`
                     Expecting `+r.join(", ")+", got '"+(this.terminals_[w]||w)+"'":_="Parse error on line "+(L+1)+": Unexpected "+(w==P?"end of input":"'"+(this.terminals_[w]||w)+"'"),this.parseError(_,{text:S.match,token:this.terminals_[w]||w,line:S.yylineno,loc:C,expected:r})}if(T[0]instanceof Array&&T.length>1)throw new Error("Parse Error: multiple actions possible at state: "+O+", token: "+w);switch(T[0]){case 1:c.push(w),b.push(S.yytext),y.push(S.yylloc),c.push(T[1]),w=null,A=S.yyleng,E=S.yytext,L=S.yylineno,C=S.yylloc;break;case 2:if(a=this.productions_[T[1]][1],e.$=b[b.length-a],e._$={first_line:y[y.length-(a||1)].first_line,last_line:y[y.length-1].last_line,first_column:y[y.length-(a||1)].first_column,last_column:y[y.length-1].last_column},I&&(e._$.range=[y[y.length-(a||1)].range[0],y[y.length-1].range[1]]),R=this.performAction.apply(e,[E,A,L,M.yy,T[1],b,y].concat(z)),typeof R<"u")return R;a&&(c=c.slice(0,-1*a*2),b=b.slice(0,-1*a),y=y.slice(0,-1*a)),c.push(this.productions_[T[1]][0]),b.push(e.$),y.push(e._$),h=x[c[c.length-2]][c[c.length-1]],c.push(h);break;case 3:return!0}}return!0}},k=function(){var m={EOF:1,parseError:function(o,c){if(this.yy.parser)this.yy.parser.parseError(o,c);else throw new Error(o)},setInput:function(s,o){return this.yy=o||this.yy||{},this._input=s,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var s=this._input[0];this.yytext+=s,this.yyleng++,this.offset++,this.match+=s,this.matched+=s;var o=s.match(/(?:\r\n?|\n).*/g);return o?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),s},unput:function(s){var o=s.length,c=s.split(/(?:\r\n?|\n)/g);this._input=s+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-o),this.offset-=o;var p=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var b=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===p.length?this.yylloc.first_column:0)+p[p.length-c.length].length-c[0].length:this.yylloc.first_column-o},this.options.ranges&&(this.yylloc.range=[b[0],b[0]+this.yyleng-o]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
                     `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(s){this.unput(this.match.slice(s))},pastInput:function(){var s=this.matched.substr(0,this.matched.length-this.match.length);return(s.length>20?"...":"")+s.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var s=this.match;return s.length<20&&(s+=this._input.substr(0,20-s.length)),(s.substr(0,20)+(s.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var s=this.pastInput(),o=new Array(s.length+1).join("-");return s+this.upcomingInput()+`
                    diff --git a/assets/sequenceDiagram-465a088a-dqSP27xN.js b/assets/sequenceDiagram-465a088a-x_ttBttK.js
                    similarity index 99%
                    rename from assets/sequenceDiagram-465a088a-dqSP27xN.js
                    rename to assets/sequenceDiagram-465a088a-x_ttBttK.js
                    index 8f2ecb5..20cb34e 100644
                    --- a/assets/sequenceDiagram-465a088a-dqSP27xN.js
                    +++ b/assets/sequenceDiagram-465a088a-x_ttBttK.js
                    @@ -1,4 +1,4 @@
                    -import{g as ke,x as Le,v as Ie,c as dt,s as ae,b as Ae,a as Ne,z as Se,l as U,d as Mt,j as w,e as Me,h as St,i as Re,y as O,m as re,aN as oe,b0 as De,b1 as Ve}from"./mermaid.core-zy7cM8l9.js";import{d as Ce,a as Oe,g as Rt,b as Be,c as Ye,e as Gt}from"./svgDrawCommon-ad5ef572-eI41Wm50.js";import"./app-BrxqtzGY.js";var qt=function(){var t=function(ht,m,_,k){for(_=_||{},k=ht.length;k--;_[ht[k]]=m);return _},e=[1,2],o=[1,3],i=[1,4],s=[2,4],n=[1,9],c=[1,11],h=[1,13],p=[1,14],a=[1,16],x=[1,17],E=[1,18],u=[1,24],g=[1,25],b=[1,26],P=[1,27],I=[1,28],R=[1,29],N=[1,30],F=[1,31],S=[1,32],tt=[1,33],W=[1,34],K=[1,35],Z=[1,36],q=[1,37],Y=[1,38],C=[1,39],G=[1,41],z=[1,42],X=[1,43],Q=[1,44],j=[1,45],y=[1,46],v=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],L=[4,5,16,50,52,53],pt=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],et=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],A=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],$t=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],lt=[68,69,70],nt=[1,120],Ct={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,DOTTED_ARROW:74,SOLID_CROSS:75,DOTTED_CROSS:76,SOLID_POINT:77,DOTTED_POINT:78,TXT:79,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"DOTTED_ARROW",75:"SOLID_CROSS",76:"DOTTED_CROSS",77:"SOLID_POINT",78:"DOTTED_POINT",79:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:function(m,_,k,T,M,l,vt){var d=l.length-1;switch(M){case 3:return T.apply(l[d]),l[d];case 4:case 9:this.$=[];break;case 5:case 10:l[d-1].push(l[d]),this.$=l[d-1];break;case 6:case 7:case 11:case 12:this.$=l[d];break;case 8:case 13:this.$=[];break;case 15:l[d].type="createParticipant",this.$=l[d];break;case 16:l[d-1].unshift({type:"boxStart",boxData:T.parseBoxData(l[d-2])}),l[d-1].push({type:"boxEnd",boxText:l[d-2]}),this.$=l[d-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(l[d-2]),sequenceIndexStep:Number(l[d-1]),sequenceVisible:!0,signalType:T.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(l[d-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:T.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:T.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:T.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:T.LINETYPE.ACTIVE_START,actor:l[d-1]};break;case 23:this.$={type:"activeEnd",signalType:T.LINETYPE.ACTIVE_END,actor:l[d-1]};break;case 29:T.setDiagramTitle(l[d].substring(6)),this.$=l[d].substring(6);break;case 30:T.setDiagramTitle(l[d].substring(7)),this.$=l[d].substring(7);break;case 31:this.$=l[d].trim(),T.setAccTitle(this.$);break;case 32:case 33:this.$=l[d].trim(),T.setAccDescription(this.$);break;case 34:l[d-1].unshift({type:"loopStart",loopText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.LOOP_START}),l[d-1].push({type:"loopEnd",loopText:l[d-2],signalType:T.LINETYPE.LOOP_END}),this.$=l[d-1];break;case 35:l[d-1].unshift({type:"rectStart",color:T.parseMessage(l[d-2]),signalType:T.LINETYPE.RECT_START}),l[d-1].push({type:"rectEnd",color:T.parseMessage(l[d-2]),signalType:T.LINETYPE.RECT_END}),this.$=l[d-1];break;case 36:l[d-1].unshift({type:"optStart",optText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.OPT_START}),l[d-1].push({type:"optEnd",optText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.OPT_END}),this.$=l[d-1];break;case 37:l[d-1].unshift({type:"altStart",altText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.ALT_START}),l[d-1].push({type:"altEnd",signalType:T.LINETYPE.ALT_END}),this.$=l[d-1];break;case 38:l[d-1].unshift({type:"parStart",parText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.PAR_START}),l[d-1].push({type:"parEnd",signalType:T.LINETYPE.PAR_END}),this.$=l[d-1];break;case 39:l[d-1].unshift({type:"parStart",parText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.PAR_OVER_START}),l[d-1].push({type:"parEnd",signalType:T.LINETYPE.PAR_END}),this.$=l[d-1];break;case 40:l[d-1].unshift({type:"criticalStart",criticalText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.CRITICAL_START}),l[d-1].push({type:"criticalEnd",signalType:T.LINETYPE.CRITICAL_END}),this.$=l[d-1];break;case 41:l[d-1].unshift({type:"breakStart",breakText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.BREAK_START}),l[d-1].push({type:"breakEnd",optText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.BREAK_END}),this.$=l[d-1];break;case 43:this.$=l[d-3].concat([{type:"option",optionText:T.parseMessage(l[d-1]),signalType:T.LINETYPE.CRITICAL_OPTION},l[d]]);break;case 45:this.$=l[d-3].concat([{type:"and",parText:T.parseMessage(l[d-1]),signalType:T.LINETYPE.PAR_AND},l[d]]);break;case 47:this.$=l[d-3].concat([{type:"else",altText:T.parseMessage(l[d-1]),signalType:T.LINETYPE.ALT_ELSE},l[d]]);break;case 48:l[d-3].draw="participant",l[d-3].type="addParticipant",l[d-3].description=T.parseMessage(l[d-1]),this.$=l[d-3];break;case 49:l[d-1].draw="participant",l[d-1].type="addParticipant",this.$=l[d-1];break;case 50:l[d-3].draw="actor",l[d-3].type="addParticipant",l[d-3].description=T.parseMessage(l[d-1]),this.$=l[d-3];break;case 51:l[d-1].draw="actor",l[d-1].type="addParticipant",this.$=l[d-1];break;case 52:l[d-1].type="destroyParticipant",this.$=l[d-1];break;case 53:this.$=[l[d-1],{type:"addNote",placement:l[d-2],actor:l[d-1].actor,text:l[d]}];break;case 54:l[d-2]=[].concat(l[d-1],l[d-1]).slice(0,2),l[d-2][0]=l[d-2][0].actor,l[d-2][1]=l[d-2][1].actor,this.$=[l[d-1],{type:"addNote",placement:T.PLACEMENT.OVER,actor:l[d-2].slice(0,2),text:l[d]}];break;case 55:this.$=[l[d-1],{type:"addLinks",actor:l[d-1].actor,text:l[d]}];break;case 56:this.$=[l[d-1],{type:"addALink",actor:l[d-1].actor,text:l[d]}];break;case 57:this.$=[l[d-1],{type:"addProperties",actor:l[d-1].actor,text:l[d]}];break;case 58:this.$=[l[d-1],{type:"addDetails",actor:l[d-1].actor,text:l[d]}];break;case 61:this.$=[l[d-2],l[d]];break;case 62:this.$=l[d];break;case 63:this.$=T.PLACEMENT.LEFTOF;break;case 64:this.$=T.PLACEMENT.RIGHTOF;break;case 65:this.$=[l[d-4],l[d-1],{type:"addMessage",from:l[d-4].actor,to:l[d-1].actor,signalType:l[d-3],msg:l[d],activate:!0},{type:"activeStart",signalType:T.LINETYPE.ACTIVE_START,actor:l[d-1]}];break;case 66:this.$=[l[d-4],l[d-1],{type:"addMessage",from:l[d-4].actor,to:l[d-1].actor,signalType:l[d-3],msg:l[d]},{type:"activeEnd",signalType:T.LINETYPE.ACTIVE_END,actor:l[d-4]}];break;case 67:this.$=[l[d-3],l[d-1],{type:"addMessage",from:l[d-3].actor,to:l[d-1].actor,signalType:l[d-2],msg:l[d]}];break;case 68:this.$={type:"addParticipant",actor:l[d]};break;case 69:this.$=T.LINETYPE.SOLID_OPEN;break;case 70:this.$=T.LINETYPE.DOTTED_OPEN;break;case 71:this.$=T.LINETYPE.SOLID;break;case 72:this.$=T.LINETYPE.DOTTED;break;case 73:this.$=T.LINETYPE.SOLID_CROSS;break;case 74:this.$=T.LINETYPE.DOTTED_CROSS;break;case 75:this.$=T.LINETYPE.SOLID_POINT;break;case 76:this.$=T.LINETYPE.DOTTED_POINT;break;case 77:this.$=T.parseMessage(l[d].trim().substring(1));break}},table:[{3:1,4:e,5:o,6:i},{1:[3]},{3:5,4:e,5:o,6:i},{3:6,4:e,5:o,6:i},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],s,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:n,5:c,8:8,9:10,12:12,13:h,14:p,17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},t(v,[2,5]),{9:47,12:12,13:h,14:p,17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},t(v,[2,7]),t(v,[2,8]),t(v,[2,14]),{12:48,50:q,52:Y,53:C},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:y},{22:55,70:y},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(v,[2,29]),t(v,[2,30]),{32:[1,61]},{34:[1,62]},t(v,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:y},{22:72,70:y},{22:73,70:y},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82]},{55:83,57:[1,84],65:[1,85],66:[1,86]},{22:87,70:y},{22:88,70:y},{22:89,70:y},{22:90,70:y},t([5,51,64,71,72,73,74,75,76,77,78,79],[2,68]),t(v,[2,6]),t(v,[2,15]),t(L,[2,9],{10:91}),t(v,[2,17]),{5:[1,93],19:[1,92]},{5:[1,94]},t(v,[2,21]),{5:[1,95]},{5:[1,96]},t(v,[2,24]),t(v,[2,25]),t(v,[2,26]),t(v,[2,27]),t(v,[2,28]),t(v,[2,31]),t(v,[2,32]),t(pt,s,{7:97}),t(pt,s,{7:98}),t(pt,s,{7:99}),t(et,s,{40:100,7:101}),t(A,s,{42:102,7:103}),t(A,s,{7:103,42:104}),t($t,s,{45:105,7:106}),t(pt,s,{7:107}),{5:[1,109],51:[1,108]},{5:[1,111],51:[1,110]},{5:[1,112]},{22:115,68:[1,113],69:[1,114],70:y},t(lt,[2,69]),t(lt,[2,70]),t(lt,[2,71]),t(lt,[2,72]),t(lt,[2,73]),t(lt,[2,74]),t(lt,[2,75]),t(lt,[2,76]),{22:116,70:y},{22:118,58:117,70:y},{70:[2,63]},{70:[2,64]},{56:119,79:nt},{56:121,79:nt},{56:122,79:nt},{56:123,79:nt},{4:[1,126],5:[1,128],11:125,12:127,16:[1,124],50:q,52:Y,53:C},{5:[1,129]},t(v,[2,19]),t(v,[2,20]),t(v,[2,22]),t(v,[2,23]),{4:n,5:c,8:8,9:10,12:12,13:h,14:p,16:[1,130],17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},{4:n,5:c,8:8,9:10,12:12,13:h,14:p,16:[1,131],17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},{4:n,5:c,8:8,9:10,12:12,13:h,14:p,16:[1,132],17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},{16:[1,133]},{4:n,5:c,8:8,9:10,12:12,13:h,14:p,16:[2,46],17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,49:[1,134],50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},{16:[1,135]},{4:n,5:c,8:8,9:10,12:12,13:h,14:p,16:[2,44],17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,48:[1,136],50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},{16:[1,137]},{16:[1,138]},{4:n,5:c,8:8,9:10,12:12,13:h,14:p,16:[2,42],17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,47:[1,139],50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},{4:n,5:c,8:8,9:10,12:12,13:h,14:p,16:[1,140],17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},{15:[1,141]},t(v,[2,49]),{15:[1,142]},t(v,[2,51]),t(v,[2,52]),{22:143,70:y},{22:144,70:y},{56:145,79:nt},{56:146,79:nt},{56:147,79:nt},{64:[1,148],79:[2,62]},{5:[2,55]},{5:[2,77]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(v,[2,16]),t(L,[2,10]),{12:149,50:q,52:Y,53:C},t(L,[2,12]),t(L,[2,13]),t(v,[2,18]),t(v,[2,34]),t(v,[2,35]),t(v,[2,36]),t(v,[2,37]),{15:[1,150]},t(v,[2,38]),{15:[1,151]},t(v,[2,39]),t(v,[2,40]),{15:[1,152]},t(v,[2,41]),{5:[1,153]},{5:[1,154]},{56:155,79:nt},{56:156,79:nt},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:157,70:y},t(L,[2,11]),t(et,s,{7:101,40:158}),t(A,s,{7:103,42:159}),t($t,s,{7:106,45:160}),t(v,[2,48]),t(v,[2,50]),{5:[2,65]},{5:[2,66]},{79:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],85:[2,63],86:[2,64],119:[2,55],120:[2,77],121:[2,56],122:[2,57],123:[2,58],145:[2,67],146:[2,53],147:[2,54],155:[2,65],156:[2,66],157:[2,61],158:[2,47],159:[2,45],160:[2,43]},parseError:function(m,_){if(_.recoverable)this.trace(m);else{var k=new Error(m);throw k.hash=_,k}},parse:function(m){var _=this,k=[0],T=[],M=[null],l=[],vt=this.table,d="",It=0,te=0,we=2,ee=1,ve=l.slice.call(arguments,1),B=Object.create(this.lexer),ut={yy:{}};for(var Bt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Bt)&&(ut.yy[Bt]=this.yy[Bt]);B.setInput(m,ut.yy),ut.yy.lexer=B,ut.yy.parser=this,typeof B.yylloc>"u"&&(B.yylloc={});var Yt=B.yylloc;l.push(Yt);var _e=B.options&&B.options.ranges;typeof ut.yy.parseError=="function"?this.parseError=ut.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Pe(){var rt;return rt=T.pop()||B.lex()||ee,typeof rt!="number"&&(rt instanceof Array&&(T=rt,rt=T.pop()),rt=_.symbols_[rt]||rt),rt}for(var H,ft,$,Ft,yt={},At,at,ie,Nt;;){if(ft=k[k.length-1],this.defaultActions[ft]?$=this.defaultActions[ft]:((H===null||typeof H>"u")&&(H=Pe()),$=vt[ft]&&vt[ft][H]),typeof $>"u"||!$.length||!$[0]){var Wt="";Nt=[];for(At in vt[ft])this.terminals_[At]&&At>we&&Nt.push("'"+this.terminals_[At]+"'");B.showPosition?Wt="Parse error on line "+(It+1)+`:
                    +import{g as ke,x as Le,v as Ie,c as dt,s as ae,b as Ae,a as Ne,z as Se,l as U,d as Mt,j as w,e as Me,h as St,i as Re,y as O,m as re,aN as oe,b0 as De,b1 as Ve}from"./mermaid.core-QJnSHCal.js";import{d as Ce,a as Oe,g as Rt,b as Be,c as Ye,e as Gt}from"./svgDrawCommon-ad5ef572-WW-Kq4zg.js";import"./app-oTlYPy8h.js";var qt=function(){var t=function(ht,m,_,k){for(_=_||{},k=ht.length;k--;_[ht[k]]=m);return _},e=[1,2],o=[1,3],i=[1,4],s=[2,4],n=[1,9],c=[1,11],h=[1,13],p=[1,14],a=[1,16],x=[1,17],E=[1,18],u=[1,24],g=[1,25],b=[1,26],P=[1,27],I=[1,28],R=[1,29],N=[1,30],F=[1,31],S=[1,32],tt=[1,33],W=[1,34],K=[1,35],Z=[1,36],q=[1,37],Y=[1,38],C=[1,39],G=[1,41],z=[1,42],X=[1,43],Q=[1,44],j=[1,45],y=[1,46],v=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],L=[4,5,16,50,52,53],pt=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],et=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],A=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],$t=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],lt=[68,69,70],nt=[1,120],Ct={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,DOTTED_ARROW:74,SOLID_CROSS:75,DOTTED_CROSS:76,SOLID_POINT:77,DOTTED_POINT:78,TXT:79,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"DOTTED_ARROW",75:"SOLID_CROSS",76:"DOTTED_CROSS",77:"SOLID_POINT",78:"DOTTED_POINT",79:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:function(m,_,k,T,M,l,vt){var d=l.length-1;switch(M){case 3:return T.apply(l[d]),l[d];case 4:case 9:this.$=[];break;case 5:case 10:l[d-1].push(l[d]),this.$=l[d-1];break;case 6:case 7:case 11:case 12:this.$=l[d];break;case 8:case 13:this.$=[];break;case 15:l[d].type="createParticipant",this.$=l[d];break;case 16:l[d-1].unshift({type:"boxStart",boxData:T.parseBoxData(l[d-2])}),l[d-1].push({type:"boxEnd",boxText:l[d-2]}),this.$=l[d-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(l[d-2]),sequenceIndexStep:Number(l[d-1]),sequenceVisible:!0,signalType:T.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(l[d-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:T.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:T.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:T.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:T.LINETYPE.ACTIVE_START,actor:l[d-1]};break;case 23:this.$={type:"activeEnd",signalType:T.LINETYPE.ACTIVE_END,actor:l[d-1]};break;case 29:T.setDiagramTitle(l[d].substring(6)),this.$=l[d].substring(6);break;case 30:T.setDiagramTitle(l[d].substring(7)),this.$=l[d].substring(7);break;case 31:this.$=l[d].trim(),T.setAccTitle(this.$);break;case 32:case 33:this.$=l[d].trim(),T.setAccDescription(this.$);break;case 34:l[d-1].unshift({type:"loopStart",loopText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.LOOP_START}),l[d-1].push({type:"loopEnd",loopText:l[d-2],signalType:T.LINETYPE.LOOP_END}),this.$=l[d-1];break;case 35:l[d-1].unshift({type:"rectStart",color:T.parseMessage(l[d-2]),signalType:T.LINETYPE.RECT_START}),l[d-1].push({type:"rectEnd",color:T.parseMessage(l[d-2]),signalType:T.LINETYPE.RECT_END}),this.$=l[d-1];break;case 36:l[d-1].unshift({type:"optStart",optText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.OPT_START}),l[d-1].push({type:"optEnd",optText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.OPT_END}),this.$=l[d-1];break;case 37:l[d-1].unshift({type:"altStart",altText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.ALT_START}),l[d-1].push({type:"altEnd",signalType:T.LINETYPE.ALT_END}),this.$=l[d-1];break;case 38:l[d-1].unshift({type:"parStart",parText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.PAR_START}),l[d-1].push({type:"parEnd",signalType:T.LINETYPE.PAR_END}),this.$=l[d-1];break;case 39:l[d-1].unshift({type:"parStart",parText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.PAR_OVER_START}),l[d-1].push({type:"parEnd",signalType:T.LINETYPE.PAR_END}),this.$=l[d-1];break;case 40:l[d-1].unshift({type:"criticalStart",criticalText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.CRITICAL_START}),l[d-1].push({type:"criticalEnd",signalType:T.LINETYPE.CRITICAL_END}),this.$=l[d-1];break;case 41:l[d-1].unshift({type:"breakStart",breakText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.BREAK_START}),l[d-1].push({type:"breakEnd",optText:T.parseMessage(l[d-2]),signalType:T.LINETYPE.BREAK_END}),this.$=l[d-1];break;case 43:this.$=l[d-3].concat([{type:"option",optionText:T.parseMessage(l[d-1]),signalType:T.LINETYPE.CRITICAL_OPTION},l[d]]);break;case 45:this.$=l[d-3].concat([{type:"and",parText:T.parseMessage(l[d-1]),signalType:T.LINETYPE.PAR_AND},l[d]]);break;case 47:this.$=l[d-3].concat([{type:"else",altText:T.parseMessage(l[d-1]),signalType:T.LINETYPE.ALT_ELSE},l[d]]);break;case 48:l[d-3].draw="participant",l[d-3].type="addParticipant",l[d-3].description=T.parseMessage(l[d-1]),this.$=l[d-3];break;case 49:l[d-1].draw="participant",l[d-1].type="addParticipant",this.$=l[d-1];break;case 50:l[d-3].draw="actor",l[d-3].type="addParticipant",l[d-3].description=T.parseMessage(l[d-1]),this.$=l[d-3];break;case 51:l[d-1].draw="actor",l[d-1].type="addParticipant",this.$=l[d-1];break;case 52:l[d-1].type="destroyParticipant",this.$=l[d-1];break;case 53:this.$=[l[d-1],{type:"addNote",placement:l[d-2],actor:l[d-1].actor,text:l[d]}];break;case 54:l[d-2]=[].concat(l[d-1],l[d-1]).slice(0,2),l[d-2][0]=l[d-2][0].actor,l[d-2][1]=l[d-2][1].actor,this.$=[l[d-1],{type:"addNote",placement:T.PLACEMENT.OVER,actor:l[d-2].slice(0,2),text:l[d]}];break;case 55:this.$=[l[d-1],{type:"addLinks",actor:l[d-1].actor,text:l[d]}];break;case 56:this.$=[l[d-1],{type:"addALink",actor:l[d-1].actor,text:l[d]}];break;case 57:this.$=[l[d-1],{type:"addProperties",actor:l[d-1].actor,text:l[d]}];break;case 58:this.$=[l[d-1],{type:"addDetails",actor:l[d-1].actor,text:l[d]}];break;case 61:this.$=[l[d-2],l[d]];break;case 62:this.$=l[d];break;case 63:this.$=T.PLACEMENT.LEFTOF;break;case 64:this.$=T.PLACEMENT.RIGHTOF;break;case 65:this.$=[l[d-4],l[d-1],{type:"addMessage",from:l[d-4].actor,to:l[d-1].actor,signalType:l[d-3],msg:l[d],activate:!0},{type:"activeStart",signalType:T.LINETYPE.ACTIVE_START,actor:l[d-1]}];break;case 66:this.$=[l[d-4],l[d-1],{type:"addMessage",from:l[d-4].actor,to:l[d-1].actor,signalType:l[d-3],msg:l[d]},{type:"activeEnd",signalType:T.LINETYPE.ACTIVE_END,actor:l[d-4]}];break;case 67:this.$=[l[d-3],l[d-1],{type:"addMessage",from:l[d-3].actor,to:l[d-1].actor,signalType:l[d-2],msg:l[d]}];break;case 68:this.$={type:"addParticipant",actor:l[d]};break;case 69:this.$=T.LINETYPE.SOLID_OPEN;break;case 70:this.$=T.LINETYPE.DOTTED_OPEN;break;case 71:this.$=T.LINETYPE.SOLID;break;case 72:this.$=T.LINETYPE.DOTTED;break;case 73:this.$=T.LINETYPE.SOLID_CROSS;break;case 74:this.$=T.LINETYPE.DOTTED_CROSS;break;case 75:this.$=T.LINETYPE.SOLID_POINT;break;case 76:this.$=T.LINETYPE.DOTTED_POINT;break;case 77:this.$=T.parseMessage(l[d].trim().substring(1));break}},table:[{3:1,4:e,5:o,6:i},{1:[3]},{3:5,4:e,5:o,6:i},{3:6,4:e,5:o,6:i},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],s,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:n,5:c,8:8,9:10,12:12,13:h,14:p,17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},t(v,[2,5]),{9:47,12:12,13:h,14:p,17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},t(v,[2,7]),t(v,[2,8]),t(v,[2,14]),{12:48,50:q,52:Y,53:C},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:y},{22:55,70:y},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(v,[2,29]),t(v,[2,30]),{32:[1,61]},{34:[1,62]},t(v,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:y},{22:72,70:y},{22:73,70:y},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82]},{55:83,57:[1,84],65:[1,85],66:[1,86]},{22:87,70:y},{22:88,70:y},{22:89,70:y},{22:90,70:y},t([5,51,64,71,72,73,74,75,76,77,78,79],[2,68]),t(v,[2,6]),t(v,[2,15]),t(L,[2,9],{10:91}),t(v,[2,17]),{5:[1,93],19:[1,92]},{5:[1,94]},t(v,[2,21]),{5:[1,95]},{5:[1,96]},t(v,[2,24]),t(v,[2,25]),t(v,[2,26]),t(v,[2,27]),t(v,[2,28]),t(v,[2,31]),t(v,[2,32]),t(pt,s,{7:97}),t(pt,s,{7:98}),t(pt,s,{7:99}),t(et,s,{40:100,7:101}),t(A,s,{42:102,7:103}),t(A,s,{7:103,42:104}),t($t,s,{45:105,7:106}),t(pt,s,{7:107}),{5:[1,109],51:[1,108]},{5:[1,111],51:[1,110]},{5:[1,112]},{22:115,68:[1,113],69:[1,114],70:y},t(lt,[2,69]),t(lt,[2,70]),t(lt,[2,71]),t(lt,[2,72]),t(lt,[2,73]),t(lt,[2,74]),t(lt,[2,75]),t(lt,[2,76]),{22:116,70:y},{22:118,58:117,70:y},{70:[2,63]},{70:[2,64]},{56:119,79:nt},{56:121,79:nt},{56:122,79:nt},{56:123,79:nt},{4:[1,126],5:[1,128],11:125,12:127,16:[1,124],50:q,52:Y,53:C},{5:[1,129]},t(v,[2,19]),t(v,[2,20]),t(v,[2,22]),t(v,[2,23]),{4:n,5:c,8:8,9:10,12:12,13:h,14:p,16:[1,130],17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},{4:n,5:c,8:8,9:10,12:12,13:h,14:p,16:[1,131],17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},{4:n,5:c,8:8,9:10,12:12,13:h,14:p,16:[1,132],17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},{16:[1,133]},{4:n,5:c,8:8,9:10,12:12,13:h,14:p,16:[2,46],17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,49:[1,134],50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},{16:[1,135]},{4:n,5:c,8:8,9:10,12:12,13:h,14:p,16:[2,44],17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,48:[1,136],50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},{16:[1,137]},{16:[1,138]},{4:n,5:c,8:8,9:10,12:12,13:h,14:p,16:[2,42],17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,47:[1,139],50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},{4:n,5:c,8:8,9:10,12:12,13:h,14:p,16:[1,140],17:15,18:a,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:b,33:P,35:I,36:R,37:N,38:F,39:S,41:tt,43:W,44:K,46:Z,50:q,52:Y,53:C,54:G,59:z,60:X,61:Q,62:j,70:y},{15:[1,141]},t(v,[2,49]),{15:[1,142]},t(v,[2,51]),t(v,[2,52]),{22:143,70:y},{22:144,70:y},{56:145,79:nt},{56:146,79:nt},{56:147,79:nt},{64:[1,148],79:[2,62]},{5:[2,55]},{5:[2,77]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(v,[2,16]),t(L,[2,10]),{12:149,50:q,52:Y,53:C},t(L,[2,12]),t(L,[2,13]),t(v,[2,18]),t(v,[2,34]),t(v,[2,35]),t(v,[2,36]),t(v,[2,37]),{15:[1,150]},t(v,[2,38]),{15:[1,151]},t(v,[2,39]),t(v,[2,40]),{15:[1,152]},t(v,[2,41]),{5:[1,153]},{5:[1,154]},{56:155,79:nt},{56:156,79:nt},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:157,70:y},t(L,[2,11]),t(et,s,{7:101,40:158}),t(A,s,{7:103,42:159}),t($t,s,{7:106,45:160}),t(v,[2,48]),t(v,[2,50]),{5:[2,65]},{5:[2,66]},{79:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],85:[2,63],86:[2,64],119:[2,55],120:[2,77],121:[2,56],122:[2,57],123:[2,58],145:[2,67],146:[2,53],147:[2,54],155:[2,65],156:[2,66],157:[2,61],158:[2,47],159:[2,45],160:[2,43]},parseError:function(m,_){if(_.recoverable)this.trace(m);else{var k=new Error(m);throw k.hash=_,k}},parse:function(m){var _=this,k=[0],T=[],M=[null],l=[],vt=this.table,d="",It=0,te=0,we=2,ee=1,ve=l.slice.call(arguments,1),B=Object.create(this.lexer),ut={yy:{}};for(var Bt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Bt)&&(ut.yy[Bt]=this.yy[Bt]);B.setInput(m,ut.yy),ut.yy.lexer=B,ut.yy.parser=this,typeof B.yylloc>"u"&&(B.yylloc={});var Yt=B.yylloc;l.push(Yt);var _e=B.options&&B.options.ranges;typeof ut.yy.parseError=="function"?this.parseError=ut.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Pe(){var rt;return rt=T.pop()||B.lex()||ee,typeof rt!="number"&&(rt instanceof Array&&(T=rt,rt=T.pop()),rt=_.symbols_[rt]||rt),rt}for(var H,ft,$,Ft,yt={},At,at,ie,Nt;;){if(ft=k[k.length-1],this.defaultActions[ft]?$=this.defaultActions[ft]:((H===null||typeof H>"u")&&(H=Pe()),$=vt[ft]&&vt[ft][H]),typeof $>"u"||!$.length||!$[0]){var Wt="";Nt=[];for(At in vt[ft])this.terminals_[At]&&At>we&&Nt.push("'"+this.terminals_[At]+"'");B.showPosition?Wt="Parse error on line "+(It+1)+`:
                     `+B.showPosition()+`
                     Expecting `+Nt.join(", ")+", got '"+(this.terminals_[H]||H)+"'":Wt="Parse error on line "+(It+1)+": Unexpected "+(H==ee?"end of input":"'"+(this.terminals_[H]||H)+"'"),this.parseError(Wt,{text:B.match,token:this.terminals_[H]||H,line:B.yylineno,loc:Yt,expected:Nt})}if($[0]instanceof Array&&$.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ft+", token: "+H);switch($[0]){case 1:k.push(H),M.push(B.yytext),l.push(B.yylloc),k.push($[1]),H=null,te=B.yyleng,d=B.yytext,It=B.yylineno,Yt=B.yylloc;break;case 2:if(at=this.productions_[$[1]][1],yt.$=M[M.length-at],yt._$={first_line:l[l.length-(at||1)].first_line,last_line:l[l.length-1].last_line,first_column:l[l.length-(at||1)].first_column,last_column:l[l.length-1].last_column},_e&&(yt._$.range=[l[l.length-(at||1)].range[0],l[l.length-1].range[1]]),Ft=this.performAction.apply(yt,[d,te,It,ut.yy,$[1],M,l].concat(ve)),typeof Ft<"u")return Ft;at&&(k=k.slice(0,-1*at*2),M=M.slice(0,-1*at),l=l.slice(0,-1*at)),k.push(this.productions_[$[1]][0]),M.push(yt.$),l.push(yt._$),ie=vt[k[k.length-2]][k[k.length-1]],k.push(ie);break;case 3:return!0}}return!0}},me=function(){var ht={EOF:1,parseError:function(_,k){if(this.yy.parser)this.yy.parser.parseError(_,k);else throw new Error(_)},setInput:function(m,_){return this.yy=_||this.yy||{},this._input=m,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var m=this._input[0];this.yytext+=m,this.yyleng++,this.offset++,this.match+=m,this.matched+=m;var _=m.match(/(?:\r\n?|\n).*/g);return _?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),m},unput:function(m){var _=m.length,k=m.split(/(?:\r\n?|\n)/g);this._input=m+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-_),this.offset-=_;var T=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),k.length-1&&(this.yylineno-=k.length-1);var M=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:k?(k.length===T.length?this.yylloc.first_column:0)+T[T.length-k.length].length-k[0].length:this.yylloc.first_column-_},this.options.ranges&&(this.yylloc.range=[M[0],M[0]+this.yyleng-_]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
                     `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(m){this.unput(this.match.slice(m))},pastInput:function(){var m=this.matched.substr(0,this.matched.length-this.match.length);return(m.length>20?"...":"")+m.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var m=this.match;return m.length<20&&(m+=this._input.substr(0,20-m.length)),(m.substr(0,20)+(m.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var m=this.pastInput(),_=new Array(m.length+1).join("-");return m+this.upcomingInput()+`
                    diff --git a/assets/sequence_diagram.html-mA7gwutk.js b/assets/sequence_diagram.html-FlbOL2Y8.js
                    similarity index 97%
                    rename from assets/sequence_diagram.html-mA7gwutk.js
                    rename to assets/sequence_diagram.html-FlbOL2Y8.js
                    index 911c83f..ee8a1e0 100644
                    --- a/assets/sequence_diagram.html-mA7gwutk.js
                    +++ b/assets/sequence_diagram.html-FlbOL2Y8.js
                    @@ -1 +1 @@
                    -import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as i,c as r,b as m}from"./app-BrxqtzGY.js";const d={};function o(c,s){const e=a("Mermaid");return i(),r("div",null,[m(e,{id:"mermaid-0",code:"eJyNUktPwkAQvvMr9giJhXsPnrypiYk3L6TaRRuhre3i4yaKBiwGHyQ+glETERJDqvFFAPXPdLf15F9w25WmUFSapt2dme+bmW+G47gIklAa8oCUip/VTWIUyXOOvnbDiLheHa5kobwAJyRhURMyEUAfVdCQtCCpgowAOWqSyjs+a4Q8c1PTUJSESQmFQYd5vF3GN08hj/V2ZZ/nrdY53rsm1X36dam9MD8T4MbHA+yABxrS1YSGMmpiCSGVS6VXE2u6+/MxjvlKHrY8ngCyn4gnlzVSfHfMmivBqYkPbnHzFFdZawOwoYVSFZ9zVmufwb66Jad+i8uHa3AeLCnKclRHGhQySVlByZSSlcWY1TaszovHP5RwsELnftuuNDSoo1Q2DQRVigqiOOuxzmjK+kZsDHc3cd1gYxxWty89H4yMkopJSjlfxxhTvBcLuEGl2JoUDvDe5Zh7emzg3RK7h7J6aXuD4KnCuHBPMVQeZg3A+mccAOWL+OOO6sNM8Xj873DvZLWa/wVSMUnhFe88fp40fetwULB7z2F3jslFuNtfd4OcXFnttlPfsqsGa79/O766BX8/ZJikJxFqI2wIzRioDZdNq1P76WiULQhGfgNzyghy"}),m(e,{id:"mermaid-1",code:"eJyNUstOwlAQ3fMVXUpiYd+FK3fqD7ghVa7aKKWWq25BUUGeKvFBatREbBODjfEBAYSf6Z2WFb/gbatNgUZtmnZyZ86cmXMuy7IhLOAtxDFQzA+VNJQ1eM/Q19QKITubQts7SFxF8wK/LvOJEEMfiZexsCpIvIgZOGtCrU+utanM8uISigv8goCnQS7LaZYcVMjD21Te+Lwz61mjXScn96CU6NcmcMo8Poadm/NxMBwj45QUlXFCim5gLLFrW7vRvZT98zCW3oKXfaePDzneiIPbBuT7lt6wR7zSSfWRNK+I4i44AQsclGr5njHaJRc26hUt9ZFUTvfQCrORTG7OpLCM+ERMTOLYWnJHjIeNTsHofjj9Axs6VBOacXQX0ksTteAmZobpujU4dvGmmgElT0oV6/kZyirJfXi4sKvieLNJCcYaQ02HYsYTNzxrI181clSEXJWc3Abp4inOuZGvctxAX2E2TwZPdHj3KBKJ/F7uREa7+VehWdMg1yKHr8PLpncaDPJfAidhds/hJnDBYOPh8s7odCx131QKVKUp60e9nGe+iGI0iiP5H/ZTRr87Fd3oNr43cjwKtGDivkC5Chc/9V/nmg7O"}),m(e,{id:"mermaid-2",code:"eJzT1dXlKsksyUm1Ung2ae2zKftedm55NreZCyRenFpYmpqXnOqSmZhelJjLpQAEBYlFJZnJmQWJeSVQDU9nrsCQifLxTU3JTPTOLMGQerJ3wfNZLU92zHratfDZnF4gCTIArAxunoKunR2SGQpWCkUlxQX6RSW5BfoZJSUFumk5ZfrlxWAqI6cYru/F+u3PNjaBzULSDTIMq61AL89Y/3TCsmdzOoFehpii82L5sqf9E8tTkxQy8vOzNfLz4gtyEis1wYZiNUVBF9W1Vk/7m55N3fB0QsezzVPf7+lBNh3DaSCtcOdbQVjPOiY87ZrPBQA0g8TU"}),m(e,{id:"mermaid-3",code:"eJzT1dXlKsksyUm1UnjWt+LZ1saXnVuezW3mAokXpxaWpuYlp7pkJqYXJeZyKQBBQWJRSWZyZkFiXglUw9OZKzBkonx8U1MyE70zSzCknuxd8HxWy5Mds552LXw2pxdIggwAK4Obp6BrZ4dkhoKVQlFJcYF+UUluAUTNi/Xbn21sAmtCUgbShdV4oN9mrH86YdmzOZ1Av0GM0HmxfNnT/onlqUkKGfn52Rr5efEFpUk5mcUZmmBzsRqkoIvqMqun/U3Ppm54OqHj2eap7/f0IFuA4TqQVrgXrSCsZx0TnnbN5wIAep+7Xw=="})])}const U=n(d,[["render",o],["__file","sequence_diagram.html.vue"]]);export{U as default};
                    +import{_ as n}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as a,o as i,c as r,b as m}from"./app-oTlYPy8h.js";const d={};function o(c,s){const e=a("Mermaid");return i(),r("div",null,[m(e,{id:"mermaid-0",code:"eJyNUktPwkAQvvMr9giJhXsPnrypiYk3L6TaRRuhre3i4yaKBiwGHyQ+glETERJDqvFFAPXPdLf15F9w25WmUFSapt2dme+bmW+G47gIklAa8oCUip/VTWIUyXOOvnbDiLheHa5kobwAJyRhURMyEUAfVdCQtCCpgowAOWqSyjs+a4Q8c1PTUJSESQmFQYd5vF3GN08hj/V2ZZ/nrdY53rsm1X36dam9MD8T4MbHA+yABxrS1YSGMmpiCSGVS6VXE2u6+/MxjvlKHrY8ngCyn4gnlzVSfHfMmivBqYkPbnHzFFdZawOwoYVSFZ9zVmufwb66Jad+i8uHa3AeLCnKclRHGhQySVlByZSSlcWY1TaszovHP5RwsELnftuuNDSoo1Q2DQRVigqiOOuxzmjK+kZsDHc3cd1gYxxWty89H4yMkopJSjlfxxhTvBcLuEGl2JoUDvDe5Zh7emzg3RK7h7J6aXuD4KnCuHBPMVQeZg3A+mccAOWL+OOO6sNM8Xj873DvZLWa/wVSMUnhFe88fp40fetwULB7z2F3jslFuNtfd4OcXFnttlPfsqsGa79/O766BX8/ZJikJxFqI2wIzRioDZdNq1P76WiULQhGfgNzyghy"}),m(e,{id:"mermaid-1",code:"eJyNUstOwlAQ3fMVXUpiYd+FK3fqD7ghVa7aKKWWq25BUUGeKvFBatREbBODjfEBAYSf6Z2WFb/gbatNgUZtmnZyZ86cmXMuy7IhLOAtxDFQzA+VNJQ1eM/Q19QKITubQts7SFxF8wK/LvOJEEMfiZexsCpIvIgZOGtCrU+utanM8uISigv8goCnQS7LaZYcVMjD21Te+Lwz61mjXScn96CU6NcmcMo8Poadm/NxMBwj45QUlXFCim5gLLFrW7vRvZT98zCW3oKXfaePDzneiIPbBuT7lt6wR7zSSfWRNK+I4i44AQsclGr5njHaJRc26hUt9ZFUTvfQCrORTG7OpLCM+ERMTOLYWnJHjIeNTsHofjj9Axs6VBOacXQX0ksTteAmZobpujU4dvGmmgElT0oV6/kZyirJfXi4sKvieLNJCcYaQ02HYsYTNzxrI181clSEXJWc3Abp4inOuZGvctxAX2E2TwZPdHj3KBKJ/F7uREa7+VehWdMg1yKHr8PLpncaDPJfAidhds/hJnDBYOPh8s7odCx131QKVKUp60e9nGe+iGI0iiP5H/ZTRr87Fd3oNr43cjwKtGDivkC5Chc/9V/nmg7O"}),m(e,{id:"mermaid-2",code:"eJzT1dXlKsksyUm1Ung2ae2zKftedm55NreZCyRenFpYmpqXnOqSmZhelJjLpQAEBYlFJZnJmQWJeSVQDU9nrsCQifLxTU3JTPTOLMGQerJ3wfNZLU92zHratfDZnF4gCTIArAxunoKunR2SGQpWCkUlxQX6RSW5BfoZJSUFumk5ZfrlxWAqI6cYru/F+u3PNjaBzULSDTIMq61AL89Y/3TCsmdzOoFehpii82L5sqf9E8tTkxQy8vOzNfLz4gtyEis1wYZiNUVBF9W1Vk/7m55N3fB0QsezzVPf7+lBNh3DaSCtcOdbQVjPOiY87ZrPBQA0g8TU"}),m(e,{id:"mermaid-3",code:"eJzT1dXlKsksyUm1UnjWt+LZ1saXnVuezW3mAokXpxaWpuYlp7pkJqYXJeZyKQBBQWJRSWZyZkFiXglUw9OZKzBkonx8U1MyE70zSzCknuxd8HxWy5Mds552LXw2pxdIggwAK4Obp6BrZ4dkhoKVQlFJcYF+UUluAUTNi/Xbn21sAmtCUgbShdV4oN9mrH86YdmzOZ1Av0GM0HmxfNnT/onlqUkKGfn52Rr5efEFpUk5mcUZmmBzsRqkoIvqMqun/U3Ppm54OqHj2eap7/f0IFuA4TqQVrgXrSCsZx0TnnbN5wIAep+7Xw=="})])}const U=n(d,[["render",o],["__file","sequence_diagram.html.vue"]]);export{U as default};
                    diff --git a/assets/sequence_diagram.html-9KpjQs_B.js b/assets/sequence_diagram.html-SYfON6Mt.js
                    similarity index 97%
                    rename from assets/sequence_diagram.html-9KpjQs_B.js
                    rename to assets/sequence_diagram.html-SYfON6Mt.js
                    index 727e211..23dc5b5 100644
                    --- a/assets/sequence_diagram.html-9KpjQs_B.js
                    +++ b/assets/sequence_diagram.html-SYfON6Mt.js
                    @@ -1 +1 @@
                    -import{_ as c}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as r,c as d,b as o}from"./app-BrxqtzGY.js";const m={};function a(x,n){const e=i("Mermaid");return r(),d("div",null,[o(e,{id:"mermaid-0",code:"eJyFUstuwjAQvPMVeywSgTuHSi3lUPWFSntoL8jES3BxbHft8Pj7bmICiASaiyN7d3Z2ZpIk6QQVNA7hzSQPmAsjYVJorUwG00AocpiQTdH7Tlnr8bdAk+KDEhmJvAP8OUFBpcoJE2CixQ6pcf39/IJSiScVGk8jkSOJxvWXLQjuC68Mj4Yp0pphq6o4ApLb2xPYYX1NJUEfPFDwbkAhd4NlCC5Z6PVg48sDHFfORbqq0I4QDcTREtMVqAWEJYKPWuBWMXhbZxvhYS2htOjB2BD7exBIZRmz3eAcltau4Cbiz7hmtrCFkV3ANZooVxt0k63QGt7H049FoeFu8gg3Qso4ng3c7roQLG/BEoPb+3vcq22haEy5QnsPcy6cs/x2kLpb4cRGSM4Z7rWokXyRlrFiur0akTBjeZBQNgiVYNHiA1ClU+9g5wngeU7qxrH5sbt6i7qv3+9fqi/PCloZcGQzYvgr5Z+eL1JtPZtdT0BqaTjPbTUDjWzZ+2KyXi2sFW6QPAtBJ75cTZfBGf9JpP/z1QyYicudZmBv5rX8jC71/AFzcIE+"}),o(e,{id:"mermaid-1",code:"eJyFU01T4zAMvfdX6EhnSHvvgcPCnvarMywHuHSMoySmiW1kJaX/Hjkm0GkM5GJHkd6Tnl6Koliw4RY38M8WN9gpW8K2D42xNdwyoepgS05jCIuYG/C5R6vxxqiaVLcAebwiNtp4ZRm2rToizcIPv/9gadQvw7NPiSTSXasOSc0S7l1P8KMPxkoTcIs0CMGYlciguLo6IdhMYYqtBg5AHPyauPPrhtkXVTusDyEe4CXzUen9iPYBMUO8blDvwVTADUJIquCLEfBcZa7hzSRm6TCAdZzqL4HJ1LV0e8BHaJzbw0XC30nOrnK9LZeAA9okXA565DxXMfKJhm/NxvjFYBQcY70nMyhGOR077VpgB9pZpniVAfWIsBwJz3Fn0sxoQu+9k9C76svLSTLCWmZGwjInW1pbWl9cCoReR99VfXu+7Sn1p31yx8ga256WuVqtPst/hzY2Tl+TwH+RfhckoFsXZGUTA1Km4Nx9IwfaMj9o3h9/HQwGD0gBKkcnTvvSIxZ3ciuRvnfJzNTKpuFOXe3Tr59re26x/0jyHq2UQXgFLzR4/Q=="}),o(e,{id:"mermaid-2",code:"eJxtkT9rxDAMxfd8Co0tXMh+w0H/bG2h0Kldii6nxOKc2JXkHO2nr+MUepB4Mch6v6cn13VdGZunPbx6/D5ie4a7ZC4I/6BxGKu5Q+kr0djSI2MvOFSQT0QxbjniaEVKsip/PL/QifGJbfX0HpLAfVIeSRXeSKasL10LC+rD4Uq/TJfLMk+ipiCmsREbYuPMYt35qblouZxXiH9ZCvEfU6hb1nt4cJSjcwfmqMizmcNMIhlYNW9iBybc97l+oSO4EM5wE8bPufe2+GyBoV4FwbxBMhIFFIIJPZ92245goTysUszMZSFX36apbbNxl3z1Cxw9oG4="}),o(e,{id:"mermaid-3",code:"eJx1UL1OwzAQ3vMUN4LUiD1DJX42QKrUCRZ0da/xqYlt7s5F4ulxAmlR03r093tfXdeVsXXUwCpvOlbPoYX7bD4Kf6NxDNXAUfrMFBw9MbaCfQXlJRRjxwmDTWKSGfL+8kpbxme2GfQWs8BDVg6kCmuSQ9GPrKMd1MvlP4sGxDTdifUJ1ISwh3SqLUNJ/c05aUaLS1ENPHpye+AdmKfJqGR6VEgkPauW+xdgwm1b/r9oAz7GPdzE8PFHvx3TLtlDfd59hWU6MhIFFIIDdrxdXM0FixM2u2hwPm7UwHo2hWbnSpVd7qofrXmm7w=="})])}const s=c(m,[["render",a],["__file","sequence_diagram.html.vue"]]);export{s as default};
                    +import{_ as c}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as r,c as d,b as o}from"./app-oTlYPy8h.js";const m={};function a(x,n){const e=i("Mermaid");return r(),d("div",null,[o(e,{id:"mermaid-0",code:"eJyFUstuwjAQvPMVeywSgTuHSi3lUPWFSntoL8jES3BxbHft8Pj7bmICiASaiyN7d3Z2ZpIk6QQVNA7hzSQPmAsjYVJorUwG00AocpiQTdH7Tlnr8bdAk+KDEhmJvAP8OUFBpcoJE2CixQ6pcf39/IJSiScVGk8jkSOJxvWXLQjuC68Mj4Yp0pphq6o4ApLb2xPYYX1NJUEfPFDwbkAhd4NlCC5Z6PVg48sDHFfORbqq0I4QDcTREtMVqAWEJYKPWuBWMXhbZxvhYS2htOjB2BD7exBIZRmz3eAcltau4Cbiz7hmtrCFkV3ANZooVxt0k63QGt7H049FoeFu8gg3Qso4ng3c7roQLG/BEoPb+3vcq22haEy5QnsPcy6cs/x2kLpb4cRGSM4Z7rWokXyRlrFiur0akTBjeZBQNgiVYNHiA1ClU+9g5wngeU7qxrH5sbt6i7qv3+9fqi/PCloZcGQzYvgr5Z+eL1JtPZtdT0BqaTjPbTUDjWzZ+2KyXi2sFW6QPAtBJ75cTZfBGf9JpP/z1QyYicudZmBv5rX8jC71/AFzcIE+"}),o(e,{id:"mermaid-1",code:"eJyFU01T4zAMvfdX6EhnSHvvgcPCnvarMywHuHSMoySmiW1kJaX/Hjkm0GkM5GJHkd6Tnl6Koliw4RY38M8WN9gpW8K2D42xNdwyoepgS05jCIuYG/C5R6vxxqiaVLcAebwiNtp4ZRm2rToizcIPv/9gadQvw7NPiSTSXasOSc0S7l1P8KMPxkoTcIs0CMGYlciguLo6IdhMYYqtBg5AHPyauPPrhtkXVTusDyEe4CXzUen9iPYBMUO8blDvwVTADUJIquCLEfBcZa7hzSRm6TCAdZzqL4HJ1LV0e8BHaJzbw0XC30nOrnK9LZeAA9okXA565DxXMfKJhm/NxvjFYBQcY70nMyhGOR077VpgB9pZpniVAfWIsBwJz3Fn0sxoQu+9k9C76svLSTLCWmZGwjInW1pbWl9cCoReR99VfXu+7Sn1p31yx8ga256WuVqtPst/hzY2Tl+TwH+RfhckoFsXZGUTA1Km4Nx9IwfaMj9o3h9/HQwGD0gBKkcnTvvSIxZ3ciuRvnfJzNTKpuFOXe3Tr59re26x/0jyHq2UQXgFLzR4/Q=="}),o(e,{id:"mermaid-2",code:"eJxtkT9rxDAMxfd8Co0tXMh+w0H/bG2h0Kldii6nxOKc2JXkHO2nr+MUepB4Mch6v6cn13VdGZunPbx6/D5ie4a7ZC4I/6BxGKu5Q+kr0djSI2MvOFSQT0QxbjniaEVKsip/PL/QifGJbfX0HpLAfVIeSRXeSKasL10LC+rD4Uq/TJfLMk+ipiCmsREbYuPMYt35qblouZxXiH9ZCvEfU6hb1nt4cJSjcwfmqMizmcNMIhlYNW9iBybc97l+oSO4EM5wE8bPufe2+GyBoV4FwbxBMhIFFIIJPZ92245goTysUszMZSFX36apbbNxl3z1Cxw9oG4="}),o(e,{id:"mermaid-3",code:"eJx1UL1OwzAQ3vMUN4LUiD1DJX42QKrUCRZ0da/xqYlt7s5F4ulxAmlR03r093tfXdeVsXXUwCpvOlbPoYX7bD4Kf6NxDNXAUfrMFBw9MbaCfQXlJRRjxwmDTWKSGfL+8kpbxme2GfQWs8BDVg6kCmuSQ9GPrKMd1MvlP4sGxDTdifUJ1ISwh3SqLUNJ/c05aUaLS1ENPHpye+AdmKfJqGR6VEgkPauW+xdgwm1b/r9oAz7GPdzE8PFHvx3TLtlDfd59hWU6MhIFFIIDdrxdXM0FixM2u2hwPm7UwHo2hWbnSpVd7qofrXmm7w=="})])}const s=c(m,[["render",a],["__file","sequence_diagram.html.vue"]]);export{s as default};
                    diff --git a/assets/start.html-uDyezAWa.js b/assets/start.html-KblEw28K.js
                    similarity index 99%
                    rename from assets/start.html-uDyezAWa.js
                    rename to assets/start.html-KblEw28K.js
                    index 2131e17..7711b31 100644
                    --- a/assets/start.html-uDyezAWa.js
                    +++ b/assets/start.html-KblEw28K.js
                    @@ -1,4 +1,4 @@
                    -import{_ as c}from"./vs_code_zh-ltEPcFYF.js";import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as d,o as p,c as r,a,d as e,b as n,w as l,e as s}from"./app-BrxqtzGY.js";const u={},m=s(`

                    1、获取代码

                    请不要使用 github 下载 zip 包的方式下载源码,务必使用 git 克隆 ZLMediaKit 的代码,因为 ZLMediaKit 依赖于第三方代码,zip 包不会下载第三方依赖源码,你可以这样操作:

                    #国内用户推荐从同步镜像网站gitee下载
                    +import{_ as c}from"./vs_code_zh-ltEPcFYF.js";import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as d,o as p,c as r,a,d as e,b as n,w as l,e as s}from"./app-oTlYPy8h.js";const u={},m=s(`

                    1、获取代码

                    请不要使用 github 下载 zip 包的方式下载源码,务必使用 git 克隆 ZLMediaKit 的代码,因为 ZLMediaKit 依赖于第三方代码,zip 包不会下载第三方依赖源码,你可以这样操作:

                    #国内用户推荐从同步镜像网站gitee下载
                     git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
                     cd ZLMediaKit
                     #千万不要忘记执行这句命令
                    diff --git a/assets/start.html-6kI24E98.js b/assets/start.html-T6-Hncwi.js
                    similarity index 99%
                    rename from assets/start.html-6kI24E98.js
                    rename to assets/start.html-T6-Hncwi.js
                    index 93b62b6..8728d3b 100644
                    --- a/assets/start.html-6kI24E98.js
                    +++ b/assets/start.html-T6-Hncwi.js
                    @@ -1,4 +1,4 @@
                    -import{_ as r}from"./vs_code_zh-ltEPcFYF.js";import{_ as d}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as o,o as c,c as p,a as e,d as a,b as n,w as i,e as t}from"./app-BrxqtzGY.js";const u={},m=t(`

                    1. Obtain the Source Code

                    Please refrain from downloading the source code in zip package format directly from GitHub. Instead, you should clone the ZLMediaKit code using git. This is due to ZLMediaKit's reliance on multiple third-party project codes which are not included in the zip package. Follow these steps to do this:

                    # It's recommended for users in China to download from the synchronized mirror site, gitee
                    +import{_ as r}from"./vs_code_zh-ltEPcFYF.js";import{_ as d}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as o,o as c,c as p,a as e,d as a,b as n,w as i,e as t}from"./app-oTlYPy8h.js";const u={},m=t(`

                    1. Obtain the Source Code

                    Please refrain from downloading the source code in zip package format directly from GitHub. Instead, you should clone the ZLMediaKit code using git. This is due to ZLMediaKit's reliance on multiple third-party project codes which are not included in the zip package. Follow these steps to do this:

                    # It's recommended for users in China to download from the synchronized mirror site, gitee
                     git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
                     cd ZLMediaKit
                     # Remember to execute this command
                    diff --git a/assets/start_server.html-eoFuSTqV.js b/assets/start_server.html-kjQal3He.js
                    similarity index 98%
                    rename from assets/start_server.html-eoFuSTqV.js
                    rename to assets/start_server.html-kjQal3He.js
                    index cb59f59..3f7f681 100644
                    --- a/assets/start_server.html-eoFuSTqV.js
                    +++ b/assets/start_server.html-kjQal3He.js
                    @@ -1,4 +1,4 @@
                    -import{_ as e,a,b as l}from"./start_server_3-RVnx99XR.js";import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as s,c as r,e as n}from"./app-BrxqtzGY.js";const d={},t=n(`

                    程序所在路径

                    在编译 zlmediakit 后,会生成 MediaServer 主程序,该程序相对路径为release/\${platform}/\${build_type}/MediaServer

                    \${platform}根据您的操作系统,可能为windows/linux/mac,\${build_type}根据您 cmake 时指定的编译类型,可能为Debug/Release.

                    启动与参数

                    • 先参考启动参数帮助:
                    xzl-mac-pro:Debug xzl$ ./MediaServer -h
                    +import{_ as e,a,b as l}from"./start_server_3-RVnx99XR.js";import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as s,c as r,e as n}from"./app-oTlYPy8h.js";const d={},t=n(`

                    程序所在路径

                    在编译 zlmediakit 后,会生成 MediaServer 主程序,该程序相对路径为release/\${platform}/\${build_type}/MediaServer

                    \${platform}根据您的操作系统,可能为windows/linux/mac,\${build_type}根据您 cmake 时指定的编译类型,可能为Debug/Release.

                    启动与参数

                    • 先参考启动参数帮助:
                    xzl-mac-pro:Debug xzl$ ./MediaServer -h
                       -h  --help     无参  默认:null                                                    选填  打印此信息
                       -d  --daemon   无参  默认:null                                                    选填  是否以Daemon方式启动
                       -l  --level    有参  默认:0                                                       选填  日志等级,LTrace~LError(0~4)
                    diff --git a/assets/start_server.html-EcCCtjYj.js b/assets/start_server.html-yxCpNJvw.js
                    similarity index 98%
                    rename from assets/start_server.html-EcCCtjYj.js
                    rename to assets/start_server.html-yxCpNJvw.js
                    index b2f5d9a..5b54f5f 100644
                    --- a/assets/start_server.html-EcCCtjYj.js
                    +++ b/assets/start_server.html-yxCpNJvw.js
                    @@ -1,4 +1,4 @@
                    -import{_ as e,a,b as t}from"./start_server_3-RVnx99XR.js";import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as r,c as s,e as n}from"./app-BrxqtzGY.js";const l={},o=n(`

                    Program Path

                    After compiling ZLMediaKit, the MediaServer main program is generated. The relative path of the program is release/\${platform}/\${build_type}/MediaServer.

                    \${platform} depends on your operating system, which may be windows/linux/mac, and \${build_type} depends on the compile type you specified when using cmake, which could be Debug/Release.

                    Start-up and Parameters

                    • First, please refer to the help for startup parameters:
                    xzl-mac-pro:Debug xzl$ ./MediaServer -h
                    +import{_ as e,a,b as t}from"./start_server_3-RVnx99XR.js";import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as r,c as s,e as n}from"./app-oTlYPy8h.js";const l={},o=n(`

                    Program Path

                    After compiling ZLMediaKit, the MediaServer main program is generated. The relative path of the program is release/\${platform}/\${build_type}/MediaServer.

                    \${platform} depends on your operating system, which may be windows/linux/mac, and \${build_type} depends on the compile type you specified when using cmake, which could be Debug/Release.

                    Start-up and Parameters

                    • First, please refer to the help for startup parameters:
                    xzl-mac-pro:Debug xzl$ ./MediaServer -h
                       -h  --help     no argument  default:null                                          optional  print this information
                       -d  --daemon   no argument  default:null                                          optional  start in Daemon mode or not
                       -l  --level    argument     default:0                                             optional  log level, LTrace~LError(0~4)
                    diff --git a/assets/stateDiagram-b620d43f-w1mYtpVD.js b/assets/stateDiagram-b620d43f-n-a3FIBU.js
                    similarity index 97%
                    rename from assets/stateDiagram-b620d43f-w1mYtpVD.js
                    rename to assets/stateDiagram-b620d43f-n-a3FIBU.js
                    index c53a123..2619a83 100644
                    --- a/assets/stateDiagram-b620d43f-w1mYtpVD.js
                    +++ b/assets/stateDiagram-b620d43f-n-a3FIBU.js
                    @@ -1 +1 @@
                    -import{p as P,d as N,s as W}from"./styles-bbc3fe3b-4cn30Fs-.js";import{c as t,h as H,l as b,i as R,j as T,ao as v,y as U}from"./mermaid.core-zy7cM8l9.js";import{G as C,l as F}from"./layout-1ugHHiNm.js";import{l as $}from"./line-TqRW8de4.js";import"./app-BrxqtzGY.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";const O=e=>e.append("circle").attr("class","start-state").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit).attr("cy",t().state.padding+t().state.sizeUnit),X=e=>e.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",t().state.textHeight).attr("class","divider").attr("x2",t().state.textHeight*2).attr("y1",0).attr("y2",0),J=(e,i)=>{const o=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+2*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.id),c=o.node().getBBox();return e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",c.width+2*t().state.padding).attr("height",c.height+2*t().state.padding).attr("rx",t().state.radius),o},Y=(e,i)=>{const o=function(l,m,w){const E=l.append("tspan").attr("x",2*t().state.padding).text(m);w||E.attr("dy",t().state.textHeight)},s=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+1.3*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.descriptions[0]).node().getBBox(),g=s.height,p=e.append("text").attr("x",t().state.padding).attr("y",g+t().state.padding*.4+t().state.dividerMargin+t().state.textHeight).attr("class","state-description");let a=!0,r=!0;i.descriptions.forEach(function(l){a||(o(p,l,r),r=!1),a=!1});const y=e.append("line").attr("x1",t().state.padding).attr("y1",t().state.padding+g+t().state.dividerMargin/2).attr("y2",t().state.padding+g+t().state.dividerMargin/2).attr("class","descr-divider"),x=p.node().getBBox(),d=Math.max(x.width,s.width);return y.attr("x2",d+3*t().state.padding),e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",d+2*t().state.padding).attr("height",x.height+g+2*t().state.padding).attr("rx",t().state.radius),e},I=(e,i,o)=>{const c=t().state.padding,s=2*t().state.padding,g=e.node().getBBox(),p=g.width,a=g.x,r=e.append("text").attr("x",0).attr("y",t().state.titleShift).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.id),x=r.node().getBBox().width+s;let d=Math.max(x,p);d===p&&(d=d+s);let l;const m=e.node().getBBox();i.doc,l=a-c,x>p&&(l=(p-d)/2+c),Math.abs(a-m.x)p&&(l=a-(x-p)/2);const w=1-t().state.textHeight;return e.insert("rect",":first-child").attr("x",l).attr("y",w).attr("class",o?"alt-composit":"composit").attr("width",d).attr("height",m.height+t().state.textHeight+t().state.titleShift+1).attr("rx","0"),r.attr("x",l+c),x<=p&&r.attr("x",a+(d-s)/2-x/2+c),e.insert("rect",":first-child").attr("x",l).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",d).attr("height",t().state.textHeight*3).attr("rx",t().state.radius),e.insert("rect",":first-child").attr("x",l).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",d).attr("height",m.height+3+2*t().state.textHeight).attr("rx",t().state.radius),e},_=e=>(e.append("circle").attr("class","end-state-outer").attr("r",t().state.sizeUnit+t().state.miniPadding).attr("cx",t().state.padding+t().state.sizeUnit+t().state.miniPadding).attr("cy",t().state.padding+t().state.sizeUnit+t().state.miniPadding),e.append("circle").attr("class","end-state-inner").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit+2).attr("cy",t().state.padding+t().state.sizeUnit+2)),q=(e,i)=>{let o=t().state.forkWidth,c=t().state.forkHeight;if(i.parentId){let s=o;o=c,c=s}return e.append("rect").style("stroke","black").style("fill","black").attr("width",o).attr("height",c).attr("x",t().state.padding).attr("y",t().state.padding)},Z=(e,i,o,c)=>{let s=0;const g=c.append("text");g.style("text-anchor","start"),g.attr("class","noteText");let p=e.replace(/\r\n/g,"
                    ");p=p.replace(/\n/g,"
                    ");const a=p.split(T.lineBreakRegex);let r=1.25*t().state.noteMargin;for(const y of a){const x=y.trim();if(x.length>0){const d=g.append("tspan");if(d.text(x),r===0){const l=d.node().getBBox();r+=l.height}s+=r,d.attr("x",i+t().state.noteMargin),d.attr("y",o+s+1.25*t().state.noteMargin)}}return{textWidth:g.node().getBBox().width,textHeight:s}},j=(e,i)=>{i.attr("class","state-note");const o=i.append("rect").attr("x",0).attr("y",t().state.padding),c=i.append("g"),{textWidth:s,textHeight:g}=Z(e,0,0,c);return o.attr("height",g+2*t().state.noteMargin),o.attr("width",s+t().state.noteMargin*2),o},L=function(e,i){const o=i.id,c={id:o,label:i.id,width:0,height:0},s=e.append("g").attr("id",o).attr("class","stateGroup");i.type==="start"&&O(s),i.type==="end"&&_(s),(i.type==="fork"||i.type==="join")&&q(s,i),i.type==="note"&&j(i.note.text,s),i.type==="divider"&&X(s),i.type==="default"&&i.descriptions.length===0&&J(s,i),i.type==="default"&&i.descriptions.length>0&&Y(s,i);const g=s.node().getBBox();return c.width=g.width+2*t().state.padding,c.height=g.height+2*t().state.padding,c};let G=0;const K=function(e,i,o){const c=function(r){switch(r){case N.relationType.AGGREGATION:return"aggregation";case N.relationType.EXTENSION:return"extension";case N.relationType.COMPOSITION:return"composition";case N.relationType.DEPENDENCY:return"dependency"}};i.points=i.points.filter(r=>!Number.isNaN(r.y));const s=i.points,g=$().x(function(r){return r.x}).y(function(r){return r.y}).curve(v),p=e.append("path").attr("d",g(s)).attr("id","edge"+G).attr("class","transition");let a="";if(t().state.arrowMarkerAbsolute&&(a=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,a=a.replace(/\(/g,"\\("),a=a.replace(/\)/g,"\\)")),p.attr("marker-end","url("+a+"#"+c(N.relationType.DEPENDENCY)+"End)"),o.title!==void 0){const r=e.append("g").attr("class","stateLabel"),{x:y,y:x}=U.calcLabelPosition(i.points),d=T.getRows(o.title);let l=0;const m=[];let w=0,E=0;for(let u=0;u<=d.length;u++){const h=r.append("text").attr("text-anchor","middle").text(d[u]).attr("x",y).attr("y",x+l),f=h.node().getBBox();w=Math.max(w,f.width),E=Math.min(E,f.x),b.info(f.x,y,x+l),l===0&&(l=h.node().getBBox().height,b.info("Title height",l,x)),m.push(h)}let k=l*d.length;if(d.length>1){const u=(d.length-1)*l*.5;m.forEach((h,f)=>h.attr("y",x+f*l-u)),k=l*d.length}const n=r.node().getBBox();r.insert("rect",":first-child").attr("class","box").attr("x",y-w/2-t().state.padding/2).attr("y",x-k/2-t().state.padding/2-3.5).attr("width",w+t().state.padding).attr("height",k+t().state.padding),b.info(n)}G++};let B;const z={},Q=function(){},V=function(e){e.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},D=function(e,i,o,c){B=t().state;const s=t().securityLevel;let g;s==="sandbox"&&(g=H("#i"+i));const p=s==="sandbox"?H(g.nodes()[0].contentDocument.body):H("body"),a=s==="sandbox"?g.nodes()[0].contentDocument:document;b.debug("Rendering diagram "+e);const r=p.select(`[id='${i}']`);V(r);const y=c.db.getRootDoc();A(y,r,void 0,!1,p,a,c);const x=B.padding,d=r.node().getBBox(),l=d.width+x*2,m=d.height+x*2,w=l*1.75;R(r,m,w,B.useMaxWidth),r.attr("viewBox",`${d.x-B.padding} ${d.y-B.padding} `+l+" "+m)},tt=e=>e?e.length*B.fontSizeFactor:1,A=(e,i,o,c,s,g,p)=>{const a=new C({compound:!0,multigraph:!0});let r,y=!0;for(r=0;r{const f=h.parentElement;let S=0,M=0;f&&(f.parentElement&&(S=f.parentElement.getBBox().width),M=parseInt(f.getAttribute("data-x-shift"),10),Number.isNaN(M)&&(M=0)),h.setAttribute("x1",0-M+8),h.setAttribute("x2",S-M-8)})):b.debug("No Node "+n+": "+JSON.stringify(a.node(n)))});let E=w.getBBox();a.edges().forEach(function(n){n!==void 0&&a.edge(n)!==void 0&&(b.debug("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(a.edge(n))),K(i,a.edge(n),a.edge(n).relation))}),E=w.getBBox();const k={id:o||"root",label:o||"root",width:0,height:0};return k.width=E.width+2*B.padding,k.height=E.height+2*B.padding,b.debug("Doc rendered",k,a),k},et={setConf:Q,draw:D},ct={parser:P,db:N,renderer:et,styles:W,init:e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute,N.clear()}};export{ct as diagram}; +import{p as P,d as N,s as W}from"./styles-bbc3fe3b-H5-300oD.js";import{c as t,h as H,l as b,i as R,j as T,ao as v,y as U}from"./mermaid.core-QJnSHCal.js";import{G as C,l as F}from"./layout-Vth69vlg.js";import{l as $}from"./line-ZVNdUhg2.js";import"./app-oTlYPy8h.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";const O=e=>e.append("circle").attr("class","start-state").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit).attr("cy",t().state.padding+t().state.sizeUnit),X=e=>e.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",t().state.textHeight).attr("class","divider").attr("x2",t().state.textHeight*2).attr("y1",0).attr("y2",0),J=(e,i)=>{const o=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+2*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.id),c=o.node().getBBox();return e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",c.width+2*t().state.padding).attr("height",c.height+2*t().state.padding).attr("rx",t().state.radius),o},Y=(e,i)=>{const o=function(l,m,w){const E=l.append("tspan").attr("x",2*t().state.padding).text(m);w||E.attr("dy",t().state.textHeight)},s=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+1.3*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.descriptions[0]).node().getBBox(),g=s.height,p=e.append("text").attr("x",t().state.padding).attr("y",g+t().state.padding*.4+t().state.dividerMargin+t().state.textHeight).attr("class","state-description");let a=!0,r=!0;i.descriptions.forEach(function(l){a||(o(p,l,r),r=!1),a=!1});const y=e.append("line").attr("x1",t().state.padding).attr("y1",t().state.padding+g+t().state.dividerMargin/2).attr("y2",t().state.padding+g+t().state.dividerMargin/2).attr("class","descr-divider"),x=p.node().getBBox(),d=Math.max(x.width,s.width);return y.attr("x2",d+3*t().state.padding),e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",d+2*t().state.padding).attr("height",x.height+g+2*t().state.padding).attr("rx",t().state.radius),e},I=(e,i,o)=>{const c=t().state.padding,s=2*t().state.padding,g=e.node().getBBox(),p=g.width,a=g.x,r=e.append("text").attr("x",0).attr("y",t().state.titleShift).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.id),x=r.node().getBBox().width+s;let d=Math.max(x,p);d===p&&(d=d+s);let l;const m=e.node().getBBox();i.doc,l=a-c,x>p&&(l=(p-d)/2+c),Math.abs(a-m.x)p&&(l=a-(x-p)/2);const w=1-t().state.textHeight;return e.insert("rect",":first-child").attr("x",l).attr("y",w).attr("class",o?"alt-composit":"composit").attr("width",d).attr("height",m.height+t().state.textHeight+t().state.titleShift+1).attr("rx","0"),r.attr("x",l+c),x<=p&&r.attr("x",a+(d-s)/2-x/2+c),e.insert("rect",":first-child").attr("x",l).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",d).attr("height",t().state.textHeight*3).attr("rx",t().state.radius),e.insert("rect",":first-child").attr("x",l).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",d).attr("height",m.height+3+2*t().state.textHeight).attr("rx",t().state.radius),e},_=e=>(e.append("circle").attr("class","end-state-outer").attr("r",t().state.sizeUnit+t().state.miniPadding).attr("cx",t().state.padding+t().state.sizeUnit+t().state.miniPadding).attr("cy",t().state.padding+t().state.sizeUnit+t().state.miniPadding),e.append("circle").attr("class","end-state-inner").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit+2).attr("cy",t().state.padding+t().state.sizeUnit+2)),q=(e,i)=>{let o=t().state.forkWidth,c=t().state.forkHeight;if(i.parentId){let s=o;o=c,c=s}return e.append("rect").style("stroke","black").style("fill","black").attr("width",o).attr("height",c).attr("x",t().state.padding).attr("y",t().state.padding)},Z=(e,i,o,c)=>{let s=0;const g=c.append("text");g.style("text-anchor","start"),g.attr("class","noteText");let p=e.replace(/\r\n/g,"
                    ");p=p.replace(/\n/g,"
                    ");const a=p.split(T.lineBreakRegex);let r=1.25*t().state.noteMargin;for(const y of a){const x=y.trim();if(x.length>0){const d=g.append("tspan");if(d.text(x),r===0){const l=d.node().getBBox();r+=l.height}s+=r,d.attr("x",i+t().state.noteMargin),d.attr("y",o+s+1.25*t().state.noteMargin)}}return{textWidth:g.node().getBBox().width,textHeight:s}},j=(e,i)=>{i.attr("class","state-note");const o=i.append("rect").attr("x",0).attr("y",t().state.padding),c=i.append("g"),{textWidth:s,textHeight:g}=Z(e,0,0,c);return o.attr("height",g+2*t().state.noteMargin),o.attr("width",s+t().state.noteMargin*2),o},L=function(e,i){const o=i.id,c={id:o,label:i.id,width:0,height:0},s=e.append("g").attr("id",o).attr("class","stateGroup");i.type==="start"&&O(s),i.type==="end"&&_(s),(i.type==="fork"||i.type==="join")&&q(s,i),i.type==="note"&&j(i.note.text,s),i.type==="divider"&&X(s),i.type==="default"&&i.descriptions.length===0&&J(s,i),i.type==="default"&&i.descriptions.length>0&&Y(s,i);const g=s.node().getBBox();return c.width=g.width+2*t().state.padding,c.height=g.height+2*t().state.padding,c};let G=0;const K=function(e,i,o){const c=function(r){switch(r){case N.relationType.AGGREGATION:return"aggregation";case N.relationType.EXTENSION:return"extension";case N.relationType.COMPOSITION:return"composition";case N.relationType.DEPENDENCY:return"dependency"}};i.points=i.points.filter(r=>!Number.isNaN(r.y));const s=i.points,g=$().x(function(r){return r.x}).y(function(r){return r.y}).curve(v),p=e.append("path").attr("d",g(s)).attr("id","edge"+G).attr("class","transition");let a="";if(t().state.arrowMarkerAbsolute&&(a=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,a=a.replace(/\(/g,"\\("),a=a.replace(/\)/g,"\\)")),p.attr("marker-end","url("+a+"#"+c(N.relationType.DEPENDENCY)+"End)"),o.title!==void 0){const r=e.append("g").attr("class","stateLabel"),{x:y,y:x}=U.calcLabelPosition(i.points),d=T.getRows(o.title);let l=0;const m=[];let w=0,E=0;for(let u=0;u<=d.length;u++){const h=r.append("text").attr("text-anchor","middle").text(d[u]).attr("x",y).attr("y",x+l),f=h.node().getBBox();w=Math.max(w,f.width),E=Math.min(E,f.x),b.info(f.x,y,x+l),l===0&&(l=h.node().getBBox().height,b.info("Title height",l,x)),m.push(h)}let k=l*d.length;if(d.length>1){const u=(d.length-1)*l*.5;m.forEach((h,f)=>h.attr("y",x+f*l-u)),k=l*d.length}const n=r.node().getBBox();r.insert("rect",":first-child").attr("class","box").attr("x",y-w/2-t().state.padding/2).attr("y",x-k/2-t().state.padding/2-3.5).attr("width",w+t().state.padding).attr("height",k+t().state.padding),b.info(n)}G++};let B;const z={},Q=function(){},V=function(e){e.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},D=function(e,i,o,c){B=t().state;const s=t().securityLevel;let g;s==="sandbox"&&(g=H("#i"+i));const p=s==="sandbox"?H(g.nodes()[0].contentDocument.body):H("body"),a=s==="sandbox"?g.nodes()[0].contentDocument:document;b.debug("Rendering diagram "+e);const r=p.select(`[id='${i}']`);V(r);const y=c.db.getRootDoc();A(y,r,void 0,!1,p,a,c);const x=B.padding,d=r.node().getBBox(),l=d.width+x*2,m=d.height+x*2,w=l*1.75;R(r,m,w,B.useMaxWidth),r.attr("viewBox",`${d.x-B.padding} ${d.y-B.padding} `+l+" "+m)},tt=e=>e?e.length*B.fontSizeFactor:1,A=(e,i,o,c,s,g,p)=>{const a=new C({compound:!0,multigraph:!0});let r,y=!0;for(r=0;r{const f=h.parentElement;let S=0,M=0;f&&(f.parentElement&&(S=f.parentElement.getBBox().width),M=parseInt(f.getAttribute("data-x-shift"),10),Number.isNaN(M)&&(M=0)),h.setAttribute("x1",0-M+8),h.setAttribute("x2",S-M-8)})):b.debug("No Node "+n+": "+JSON.stringify(a.node(n)))});let E=w.getBBox();a.edges().forEach(function(n){n!==void 0&&a.edge(n)!==void 0&&(b.debug("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(a.edge(n))),K(i,a.edge(n),a.edge(n).relation))}),E=w.getBBox();const k={id:o||"root",label:o||"root",width:0,height:0};return k.width=E.width+2*B.padding,k.height=E.height+2*B.padding,b.debug("Doc rendered",k,a),k},et={setConf:Q,draw:D},ct={parser:P,db:N,renderer:et,styles:W,init:e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute,N.clear()}};export{ct as diagram}; diff --git a/assets/stateDiagram-v2-2671c3d1-xaF1im6Z.js b/assets/stateDiagram-v2-2671c3d1-1xa5Hugt.js similarity index 92% rename from assets/stateDiagram-v2-2671c3d1-xaF1im6Z.js rename to assets/stateDiagram-v2-2671c3d1-1xa5Hugt.js index c5714f3..ebf636c 100644 --- a/assets/stateDiagram-v2-2671c3d1-xaF1im6Z.js +++ b/assets/stateDiagram-v2-2671c3d1-1xa5Hugt.js @@ -1 +1 @@ -import{p as J,d as B,s as Q,D as H,a as X,S as Z,b as F,c as I}from"./styles-bbc3fe3b-4cn30Fs-.js";import{G as tt}from"./layout-1ugHHiNm.js";import{l as E,c as g,h as x,y as et,i as ot,j as w}from"./mermaid.core-zy7cM8l9.js";import{r as st}from"./index-67a42d7d-p9ZYh1Xw.js";import"./app-BrxqtzGY.js";import"./edges-80f1ebb6--gcvlmof.js";import"./createText-aebacdfe-JILF3Vy1.js";import"./line-TqRW8de4.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";const h="rect",C="rectWithTitle",nt="start",ct="end",it="divider",rt="roundedWithTitle",lt="note",at="noteGroup",_="statediagram",dt="state",Et=`${_}-${dt}`,U="transition",St="note",Tt="note-edge",pt=`${U} ${Tt}`,_t=`${_}-${St}`,ut="cluster",Dt=`${_}-${ut}`,bt="cluster-alt",ft=`${_}-${bt}`,V="parent",Y="note",At="state",N="----",ht=`${N}${Y}`,M=`${N}${V}`,W="fill:none",z="fill: #333",m="c",j="text",q="normal";let y={},d=0;const yt=function(t){const n=Object.keys(t);for(const e of n)t[e]},gt=function(t,n){return n.db.extract(n.db.getRootDocV2()),n.db.getClasses()};function $t(t){return t==null?"":t.classes?t.classes.join(" "):""}function R(t="",n=0,e="",c=N){const i=e!==null&&e.length>0?`${c}${e}`:"";return`${At}-${t}${i}-${n}`}const A=(t,n,e,c,i,r)=>{const o=e.id,u=$t(c[o]);if(o!=="root"){let T=h;e.start===!0&&(T=nt),e.start===!1&&(T=ct),e.type!==H&&(T=e.type),y[o]||(y[o]={id:o,shape:T,description:w.sanitizeText(o,g()),classes:`${u} ${Et}`});const s=y[o];e.description&&(Array.isArray(s.description)?(s.shape=C,s.description.push(e.description)):s.description.length>0?(s.shape=C,s.description===o?s.description=[e.description]:s.description=[s.description,e.description]):(s.shape=h,s.description=e.description),s.description=w.sanitizeTextOrArray(s.description,g())),s.description.length===1&&s.shape===C&&(s.shape=h),!s.type&&e.doc&&(E.info("Setting cluster for ",o,G(e)),s.type="group",s.dir=G(e),s.shape=e.type===X?it:rt,s.classes=s.classes+" "+Dt+" "+(r?ft:""));const p={labelStyle:"",shape:s.shape,labelText:s.description,classes:s.classes,style:"",id:o,dir:s.dir,domId:R(o,d),type:s.type,padding:15};if(p.centerLabel=!0,e.note){const l={labelStyle:"",shape:lt,labelText:e.note.text,classes:_t,style:"",id:o+ht+"-"+d,domId:R(o,d,Y),type:s.type,padding:15},a={labelStyle:"",shape:at,labelText:e.note.text,classes:s.classes,style:"",id:o+M,domId:R(o,d,V),type:"group",padding:0};d++;const D=o+M;t.setNode(D,a),t.setNode(l.id,l),t.setNode(o,p),t.setParent(o,D),t.setParent(l.id,D);let S=o,b=l.id;e.note.position==="left of"&&(S=l.id,b=o),t.setEdge(S,b,{arrowhead:"none",arrowType:"",style:W,labelStyle:"",classes:pt,arrowheadStyle:z,labelpos:m,labelType:j,thickness:q})}else t.setNode(o,p)}n&&n.id!=="root"&&(E.trace("Setting node ",o," to be child of its parent ",n.id),t.setParent(o,n.id)),e.doc&&(E.trace("Adding nodes children "),xt(t,e,e.doc,c,i,!r))},xt=(t,n,e,c,i,r)=>{E.trace("items",e),e.forEach(o=>{switch(o.stmt){case F:A(t,n,o,c,i,r);break;case H:A(t,n,o,c,i,r);break;case Z:{A(t,n,o.state1,c,i,r),A(t,n,o.state2,c,i,r);const u={id:"edge"+d,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:W,labelStyle:"",label:w.sanitizeText(o.description,g()),arrowheadStyle:z,labelpos:m,labelType:j,thickness:q,classes:U};t.setEdge(o.state1.id,o.state2.id,u,d),d++}break}})},G=(t,n=I)=>{let e=n;if(t.doc)for(let c=0;c{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,B.clear()}};export{Ht as diagram}; +import{p as J,d as B,s as Q,D as H,a as X,S as Z,b as F,c as I}from"./styles-bbc3fe3b-H5-300oD.js";import{G as tt}from"./layout-Vth69vlg.js";import{l as E,c as g,h as x,y as et,i as ot,j as w}from"./mermaid.core-QJnSHCal.js";import{r as st}from"./index-67a42d7d-TJSwJJ1D.js";import"./app-oTlYPy8h.js";import"./edges-80f1ebb6-kOLp6foW.js";import"./createText-aebacdfe-8FzA6VnR.js";import"./line-ZVNdUhg2.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";const h="rect",C="rectWithTitle",nt="start",ct="end",it="divider",rt="roundedWithTitle",lt="note",at="noteGroup",_="statediagram",dt="state",Et=`${_}-${dt}`,U="transition",St="note",Tt="note-edge",pt=`${U} ${Tt}`,_t=`${_}-${St}`,ut="cluster",Dt=`${_}-${ut}`,bt="cluster-alt",ft=`${_}-${bt}`,V="parent",Y="note",At="state",N="----",ht=`${N}${Y}`,M=`${N}${V}`,W="fill:none",z="fill: #333",m="c",j="text",q="normal";let y={},d=0;const yt=function(t){const n=Object.keys(t);for(const e of n)t[e]},gt=function(t,n){return n.db.extract(n.db.getRootDocV2()),n.db.getClasses()};function $t(t){return t==null?"":t.classes?t.classes.join(" "):""}function R(t="",n=0,e="",c=N){const i=e!==null&&e.length>0?`${c}${e}`:"";return`${At}-${t}${i}-${n}`}const A=(t,n,e,c,i,r)=>{const o=e.id,u=$t(c[o]);if(o!=="root"){let T=h;e.start===!0&&(T=nt),e.start===!1&&(T=ct),e.type!==H&&(T=e.type),y[o]||(y[o]={id:o,shape:T,description:w.sanitizeText(o,g()),classes:`${u} ${Et}`});const s=y[o];e.description&&(Array.isArray(s.description)?(s.shape=C,s.description.push(e.description)):s.description.length>0?(s.shape=C,s.description===o?s.description=[e.description]:s.description=[s.description,e.description]):(s.shape=h,s.description=e.description),s.description=w.sanitizeTextOrArray(s.description,g())),s.description.length===1&&s.shape===C&&(s.shape=h),!s.type&&e.doc&&(E.info("Setting cluster for ",o,G(e)),s.type="group",s.dir=G(e),s.shape=e.type===X?it:rt,s.classes=s.classes+" "+Dt+" "+(r?ft:""));const p={labelStyle:"",shape:s.shape,labelText:s.description,classes:s.classes,style:"",id:o,dir:s.dir,domId:R(o,d),type:s.type,padding:15};if(p.centerLabel=!0,e.note){const l={labelStyle:"",shape:lt,labelText:e.note.text,classes:_t,style:"",id:o+ht+"-"+d,domId:R(o,d,Y),type:s.type,padding:15},a={labelStyle:"",shape:at,labelText:e.note.text,classes:s.classes,style:"",id:o+M,domId:R(o,d,V),type:"group",padding:0};d++;const D=o+M;t.setNode(D,a),t.setNode(l.id,l),t.setNode(o,p),t.setParent(o,D),t.setParent(l.id,D);let S=o,b=l.id;e.note.position==="left of"&&(S=l.id,b=o),t.setEdge(S,b,{arrowhead:"none",arrowType:"",style:W,labelStyle:"",classes:pt,arrowheadStyle:z,labelpos:m,labelType:j,thickness:q})}else t.setNode(o,p)}n&&n.id!=="root"&&(E.trace("Setting node ",o," to be child of its parent ",n.id),t.setParent(o,n.id)),e.doc&&(E.trace("Adding nodes children "),xt(t,e,e.doc,c,i,!r))},xt=(t,n,e,c,i,r)=>{E.trace("items",e),e.forEach(o=>{switch(o.stmt){case F:A(t,n,o,c,i,r);break;case H:A(t,n,o,c,i,r);break;case Z:{A(t,n,o.state1,c,i,r),A(t,n,o.state2,c,i,r);const u={id:"edge"+d,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:W,labelStyle:"",label:w.sanitizeText(o.description,g()),arrowheadStyle:z,labelpos:m,labelType:j,thickness:q,classes:U};t.setEdge(o.state1.id,o.state2.id,u,d),d++}break}})},G=(t,n=I)=>{let e=n;if(t.doc)for(let c=0;c{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,B.clear()}};export{Ht as diagram}; diff --git a/assets/style-Tj0-KenM.css b/assets/style-Tj0-KenM.css deleted file mode 100644 index 2fbf5df..0000000 --- a/assets/style-Tj0-KenM.css +++ /dev/null @@ -1 +0,0 @@ -html[data-theme=dark]{--text-color: #9e9e9e;--bg-color: #0d1117;--bg-color-secondary: #161b22;--bg-color-tertiary: #21262c;--border-color: #30363d;--box-shadow: #282a32;--card-shadow: rgba(0, 0, 0, .3);--black: #fff;--dark-grey: #999;--light-grey: #666;--white: #000;--grey3: #bbb;--grey12: #333;--grey14: #111;--bg-color-light: #161b22;--bg-color-back: #0d1117;--bg-color-float: #161b22;--bg-color-blur: rgba(13, 17, 23, .9);--bg-color-float-blur: rgba(22, 27, 34, .9);--text-color-light: #a8a8a8;--text-color-lighter: #b1b1b1;--text-color-bright: #c5c5c5;--border-color-light: #2e333a;--border-color-dark: #394048}:root{--theme-color: #096dd9;--text-color: #2c3e50;--bg-color: #fff;--bg-color-secondary: #f8f8f8;--bg-color-tertiary: #efeef4;--border-color: #eaecef;--box-shadow: #f0f1f2;--card-shadow: rgba(0, 0, 0, .15);--black: #000;--dark-grey: #666;--light-grey: #999;--white: #fff;--grey3: #333;--grey12: #bbb;--grey14: #eee;--navbar-height: 3.75rem;--navbar-horizontal-padding: 1.5rem;--navbar-vertical-padding: .7rem;--navbar-mobile-height: 3.25rem;--navbar-mobile-horizontal-padding: 1rem;--navbar-mobile-vertical-padding: .5rem;--sidebar-width: 18rem;--sidebar-mobile-width: 16rem;--content-width: 780px;--home-page-width: 1160px;--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", STHeiti, "Microsoft YaHei", SimSun, sans-serif;--font-family-heading: Georgia Pro, Crimson, Georgia, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", STHeiti, "Microsoft YaHei", SimSun, sans-serif;--font-family-mono: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;--line-numbers-width: 2.5rem;--color-transition: .3s ease;--transform-transition: .3s ease;--vp-bg: var(--bg-color);--vp-bgl: var(--bg-color-light);--vp-bglt: var(--bg-color-tertiary);--vp-c: var(--text-color);--vp-cl: var(--text-color-light);--vp-clt: var(--text-color-lighter);--vp-brc: var(--border-color);--vp-brcd: var(--border-color-dark);--vp-tc: var(--theme-color);--vp-tcl: var(--theme-color-light);--vp-ct: var(--color-transition);--vp-tt: var(--transform-transition);--bg-color-light: #fff;--bg-color-back: #f8f8f8;--bg-color-float: #fff;--bg-color-blur: rgba(255, 255, 255, .9);--bg-color-float-blur: rgba(255, 255, 255, .9);--text-color-light: #3a5169;--text-color-lighter: #476582;--text-color-bright: #6a8bad;--border-color-light: #eceef1;--border-color-dark: #cfd4db;--theme-color-dark: #0862c3;--theme-color-light: #0a7bf4;--theme-color-mask: rgba(9, 109, 217, .15)}:root{--badge-tip-color: #42b983;--badge-warning-color: #f4cd00;--badge-danger-color: #f55;--badge-info-color: #0295ff;--badge-note-color: #666}.vp-badge{display:inline-block;vertical-align:center;height:18px;padding:0 6px;border-radius:3px;background:var(--vp-tc);color:var(--white);font-size:14px;line-height:18px;transition:background var(--vp-ct),color var(--vp-ct)}.vp-badge+.vp-badge{margin-inline-start:5px}h1 .vp-badge,h2 .vp-badge,h3 .vp-badge,h4 .vp-badge,h5 .vp-badge,h6 .vp-badge{vertical-align:top}.vp-badge.tip{background:var(--badge-tip-color)}.vp-badge.warning{background:var(--badge-warning-color)}.vp-badge.danger{background:var(--badge-danger-color)}.vp-badge.info{background:var(--badge-info-color)}.vp-badge.note{background:var(--badge-note-color)}.font-icon{display:inline-block}.theme-hope-content .font-icon{vertical-align:middle}:root{--balloon-border-radius: 2px;--balloon-color: rgba(16, 16, 16, .95);--balloon-text-color: #fff;--balloon-font-size: 12px;--balloon-move: 4px}button[aria-label][data-balloon-pos]{overflow:visible}[aria-label][data-balloon-pos]{position:relative;cursor:pointer}[aria-label][data-balloon-pos]:after{opacity:0;pointer-events:none;transition:all .18s ease-out .18s;text-indent:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-weight:400;font-style:normal;text-shadow:none;font-size:var(--balloon-font-size);background:var(--balloon-color);border-radius:2px;color:var(--balloon-text-color);border-radius:var(--balloon-border-radius);content:attr(aria-label);padding:.5em 1em;position:absolute;white-space:nowrap;z-index:10}[aria-label][data-balloon-pos]:before{width:0;height:0;border:5px solid transparent;border-top-color:var(--balloon-color);opacity:0;pointer-events:none;transition:all .18s ease-out .18s;content:"";position:absolute;z-index:10}[aria-label][data-balloon-pos]:hover:before,[aria-label][data-balloon-pos]:hover:after,[aria-label][data-balloon-pos][data-balloon-visible]:before,[aria-label][data-balloon-pos][data-balloon-visible]:after,[aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:before,[aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:after{opacity:1;pointer-events:none}[aria-label][data-balloon-pos].font-awesome:after{font-family:FontAwesome,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}[aria-label][data-balloon-pos][data-balloon-break]:after{white-space:pre}[aria-label][data-balloon-pos][data-balloon-break][data-balloon-length]:after{white-space:pre-line;word-break:break-word}[aria-label][data-balloon-pos][data-balloon-blunt]:before,[aria-label][data-balloon-pos][data-balloon-blunt]:after{transition:none}[aria-label][data-balloon-pos][data-balloon-pos=up]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos=up][data-balloon-visible]:after,[aria-label][data-balloon-pos][data-balloon-pos=down]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos=down][data-balloon-visible]:after{transform:translate(-50%)}[aria-label][data-balloon-pos][data-balloon-pos=up]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos=up][data-balloon-visible]:before,[aria-label][data-balloon-pos][data-balloon-pos=down]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos=down][data-balloon-visible]:before{transform:translate(-50%)}[aria-label][data-balloon-pos][data-balloon-pos*=-left]:after{left:0}[aria-label][data-balloon-pos][data-balloon-pos*=-left]:before{left:5px}[aria-label][data-balloon-pos][data-balloon-pos*=-right]:after{right:0}[aria-label][data-balloon-pos][data-balloon-pos*=-right]:before{right:5px}[aria-label][data-balloon-pos][data-balloon-po*=-left]:hover:after,[aria-label][data-balloon-pos][data-balloon-po*=-left][data-balloon-visible]:after,[aria-label][data-balloon-pos][data-balloon-pos*=-right]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos*=-right][data-balloon-visible]:after{transform:translate(0)}[aria-label][data-balloon-pos][data-balloon-po*=-left]:hover:before,[aria-label][data-balloon-pos][data-balloon-po*=-left][data-balloon-visible]:before,[aria-label][data-balloon-pos][data-balloon-pos*=-right]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos*=-right][data-balloon-visible]:before{transform:translate(0)}[aria-label][data-balloon-pos][data-balloon-pos^=up]:before,[aria-label][data-balloon-pos][data-balloon-pos^=up]:after{bottom:100%;transform-origin:top;transform:translateY(var(--balloon-move))}[aria-label][data-balloon-pos][data-balloon-pos^=up]:after{margin-bottom:10px}[aria-label][data-balloon-pos][data-balloon-pos=up]:before,[aria-label][data-balloon-pos][data-balloon-pos=up]:after{left:50%;transform:translate(-50%,var(--balloon-move))}[aria-label][data-balloon-pos][data-balloon-pos^=down]:before,[aria-label][data-balloon-pos][data-balloon-pos^=down]:after{top:100%;transform:translateY(calc(var(--balloon-move) * -1))}[aria-label][data-balloon-pos][data-balloon-pos^=down]:after{margin-top:10px}[aria-label][data-balloon-pos][data-balloon-pos^=down]:before{width:0;height:0;border:5px solid transparent;border-bottom-color:var(--balloon-color)}[aria-label][data-balloon-pos][data-balloon-pos=down]:after,[aria-label][data-balloon-pos][data-balloon-pos=down]:before{left:50%;transform:translate(-50%,calc(var(--balloon-move) * -1))}[aria-label][data-balloon-pos][data-balloon-pos=left]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos=left][data-balloon-visible]:after,[aria-label][data-balloon-pos][data-balloon-pos=right]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos=right][data-balloon-visible]:after{transform:translateY(-50%)}[aria-label][data-balloon-pos][data-balloon-pos=left]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos=left][data-balloon-visible]:before,[aria-label][data-balloon-pos][data-balloon-pos=right]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos=right][data-balloon-visible]:before{transform:translateY(-50%)}[aria-label][data-balloon-pos][data-balloon-pos=left]:after,[aria-label][data-balloon-pos][data-balloon-pos=left]:before{right:100%;top:50%;transform:translate(var(--balloon-move),-50%)}[aria-label][data-balloon-pos][data-balloon-pos=left]:after{margin-right:10px}[aria-label][data-balloon-pos][data-balloon-pos=left]:before{width:0;height:0;border:5px solid transparent;border-left-color:var(--balloon-color)}[aria-label][data-balloon-pos][data-balloon-pos=right]:after,[aria-label][data-balloon-pos][data-balloon-pos=right]:before{left:100%;top:50%;transform:translate(calc(var(--balloon-move) * -1),-50%)}[aria-label][data-balloon-pos][data-balloon-pos=right]:after{margin-left:10px}[aria-label][data-balloon-pos][data-balloon-pos=right]:before{width:0;height:0;border:5px solid transparent;border-right-color:var(--balloon-color)}[aria-label][data-balloon-pos][data-balloon-length]:after{white-space:normal}[aria-label][data-balloon-pos][data-balloon-length=small]:after{width:80px}[aria-label][data-balloon-pos][data-balloon-length=medium]:after{width:150px}[aria-label][data-balloon-pos][data-balloon-length=large]:after{width:260px}[aria-label][data-balloon-pos][data-balloon-length=xlarge]:after{width:380px}@media screen and (max-width: 768px){[aria-label][data-balloon-pos][data-balloon-length=xlarge]:after{width:90vw}}[aria-label][data-balloon-pos][data-balloon-length=fit]:after{width:100%}.vp-back-to-top-button{border-width:0;background:transparent;cursor:pointer;position:fixed!important;bottom:64px;inset-inline-end:1rem;z-index:100;width:48px;height:48px;padding:8px;border-radius:50%;background:var(--vp-bg);color:var(--vp-tc);box-shadow:2px 2px 10px 4px var(--card-shadow);transition:background var(--vp-ct),color var(--vp-ct),box-shadow var(--vp-ct)}@media (max-width: 719px){.vp-back-to-top-button{width:36px;height:36px}}@media print{.vp-back-to-top-button{display:none}}.vp-back-to-top-button:hover{color:var(--vp-tcl)}.vp-back-to-top-button .back-to-top-icon{overflow:hidden;width:100%;border-radius:50%;fill:currentcolor}.vp-scroll-progress{position:absolute;right:-2px;bottom:-2px;width:52px;height:52px}@media (max-width: 719px){.vp-scroll-progress{width:40px;height:40px}}.vp-scroll-progress svg{width:100%;height:100%}.vp-scroll-progress circle{opacity:.9;fill:none;stroke:var(--vp-tc);transform:rotate(-90deg);transform-origin:50% 50%;r:22;stroke-dasharray:0% 314.1593%;stroke-width:3px}@media (max-width: 719px){.vp-scroll-progress circle{r:18}}.fade-enter-active,.fade-leave-active{transition:opacity var(--vp-ct)}.fade-enter-from,.fade-leave-to{opacity:0}@media screen{.sr-only{position:absolute;overflow:hidden;clip:rect 0,0,0,0;width:1px;height:1px;margin:-1px;padding:0;border:0}}@media print{.sr-only{display:none}}.vp-catalog-wrapper{margin-top:8px;margin-bottom:8px}.vp-catalog-wrapper.index ol{padding-inline-start:0}.vp-catalog-wrapper.index li{list-style-type:none}.vp-catalog-wrapper.index .vp-catalogs{padding-inline-start:0}.vp-catalog-wrapper.index .vp-catalog{list-style-type:none}.vp-catalog-wrapper.index .vp-catalog-title:before{content:"§" counter(catalog-item,upper-roman) " "}.vp-catalog-wrapper.index .vp-child-catalogs{counter-reset:child-catalog}.vp-catalog-wrapper.index .vp-child-catalog{counter-increment:child-catalog}.vp-catalog-wrapper.index .vp-child-catalog .vp-catalog-title:before{content:counter(catalog-item) "." counter(child-catalog) " "}.vp-catalog-wrapper.index .vp-sub-catalogs{padding-inline-start:.5rem}.vp-catalogs{margin:0;counter-reset:catalog-item}.vp-catalogs.deep{padding-inline-start:0}.vp-catalogs.deep .vp-catalog{list-style-type:none}.vp-catalogs .font-icon{vertical-align:baseline;margin-inline-end:.25rem}.vp-catalog{counter-increment:catalog-item}.vp-catalog-main-title{margin-top:calc(.5rem - var(--navbar-height, 3.6rem));margin-bottom:.5rem;padding-top:var(--navbar-height, 3.6rem);font-weight:500;font-size:1.75rem}.vp-catalog-main-title:first-child{margin-bottom:.5rem!important}.vp-catalog-main-title:only-child{margin-bottom:0!important}.vp-catalog-child-title{margin-bottom:.5rem!important}.vp-catalog-child-title.has-children{margin-top:calc(.5rem - var(--navbar-height, 3.6rem));padding-top:var(--navbar-height, 3.6rem);border-bottom:1px solid var(--vp-brc);font-weight:500;font-size:1.3rem;transition:border-color var(--vp-ct)}.vp-catalog-child-title.has-children:only-child{margin-bottom:0!important}.vp-catalog-sub-title{font-weight:500;font-size:1.1rem}.vp-catalog-sub-title:only-child{margin-bottom:0!important}.vp-catalog-title{color:inherit;text-decoration:none}.vp-catalog-title:hover{color:var(--vp-tc)}.vp-child-catalogs{margin:0}.vp-child-catalog{list-style-type:disc}.vp-sub-catalogs{counter-reset:sub-catalog}.vp-sub-catalog{counter-increment:sub-catalog}.vp-sub-catalog .vp-link:before{content:counter(catalog-item) "." counter(child-catalog) "." counter(sub-catalog) " "}.vp-sub-catalogs-wrapper{display:flex;flex-wrap:wrap}.vp-sub-catalog-link{display:inline-block;margin:4px 8px;padding:4px 8px;border-radius:6px;background-color:var(--vp-bgl);line-height:1.5;overflow-wrap:break-word;transition:background-color var(--vp-ct),color var(--vp-ct)}.vp-sub-catalog-link:hover{background-color:var(--vp-tcl);color:var(--vp-bg);text-decoration:none!important}.vp-empty-catalog{font-size:1.25rem;text-align:center}:root{--external-link-icon-color: #aaa}.external-link-icon{position:relative;display:inline-block;color:var(--external-link-icon-color);vertical-align:middle;top:-1px}@media print{.external-link-icon{display:none}}.external-link-icon-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}:root{--nprogress-color: #29d;--nprogress-z-index: 1031}#nprogress{pointer-events:none}#nprogress .bar{background:var(--nprogress-color);position:fixed;z-index:var(--nprogress-z-index);top:0;left:0;width:100%;height:2px}.giscus-wrapper{max-width:var(--content-width, 740px);margin:0 auto;padding:2rem 2.5rem}@media (max-width: 959px){.giscus-wrapper{padding:1.5rem}}@media (max-width: 419px){.giscus-wrapper{padding:1rem 1.5rem}}@media print{.giscus-wrapper{max-width:unset}}@media print{.giscus-wrapper{display:none!important}}.giscus-wrapper.input-top .giscus{margin-bottom:-3rem}:root{--copy-icon: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E");--copied-icon: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4'/%3E%3C/svg%3E")}div[class*=language-]>button.copy-code-button{border-width:0;background:transparent;position:absolute;outline:none;cursor:pointer}@media print{div[class*=language-]>button.copy-code-button{display:none}}div[class*=language-]>button.copy-code-button .copy-icon{background:currentcolor;-webkit-mask-image:var(--copy-icon);mask-image:var(--copy-icon);-webkit-mask-position:50%;mask-position:50%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:1em;mask-size:1em}div[class*=language-]>button.copy-code-button:not(.fancy){border-width:0;background:transparent;cursor:pointer;position:absolute;top:.5em;right:.5em;z-index:5;width:2.5rem;height:2.5rem;padding:0;border-radius:.5rem;opacity:0;transition:opacity .4s}div[class*=language-]>button.copy-code-button:not(.fancy):hover,div[class*=language-]>button.copy-code-button:not(.fancy).copied{background:var(--code-hl-bg-color, rgba(0, 0, 0, .66))}div[class*=language-]>button.copy-code-button:not(.fancy):focus,div[class*=language-]>button.copy-code-button:not(.fancy).copied{opacity:1}div[class*=language-]>button.copy-code-button:not(.fancy).copied:after{content:attr(data-copied);position:absolute;top:0;right:calc(100% + .25rem);display:block;height:1.25rem;padding:.625rem;border-radius:.5rem;background:var(--code-hl-bg-color, rgba(0, 0, 0, .66));color:var(--code-ln-color, #9e9e9e);font-weight:500;line-height:1.25rem;white-space:nowrap}div[class*=language-]>button.copy-code-button:not(.fancy) .copy-icon{width:1.25rem;height:1.25rem;padding:.625rem;color:var(--code-ln-color, #9e9e9e);font-size:1.25rem}div[class*=language-]>button.copy-code-button.fancy{right:-14px;bottom:-14px;z-index:5;width:2rem;height:2rem;padding:7px 8px;border-radius:50%;background:#339af0;color:#fff}@media (max-width: 419px){div[class*=language-]>button.copy-code-button.fancy{right:0;bottom:0;width:28px;height:28px;border-radius:50% 10% 0}}div[class*=language-]>button.copy-code-button.fancy:hover{background:#228be6}div[class*=language-]>button.copy-code-button.fancy .copy-icon{width:100%;height:100%;color:#fff;font-size:1.25rem}@media (max-width: 419px){div[class*=language-]>button.copy-code-button.fancy .copy-icon{position:relative;top:2px;left:2px}}div[class*=language-]>button.copy-code-button.copied .copy-icon{-webkit-mask-image:var(--copied-icon);mask-image:var(--copied-icon)}div[class*=language-]:hover:before{display:none}div[class*=language-]:hover>button.copy-code-button:not(.fancy){opacity:1}.theme-hope-content figure{position:relative;display:flex;flex-direction:column;width:auto;margin:1rem auto;text-align:center;transition:transform var(--vp-tt)}.theme-hope-content figure img{overflow:hidden;margin:0 auto;border-radius:8px}.theme-hope-content figure img[tabindex]:hover,.theme-hope-content figure img[tabindex]:focus{box-shadow:2px 2px 10px 0 var(--card-shadow)}@media print{.theme-hope-content figure>a[href^="http://"]:after,.theme-hope-content figure>a[href^="https://"]:after{content:""}}.theme-hope-content figure>a .external-link-icon{display:none}.theme-hope-content figure figcaption{display:inline-block;margin:6px auto;font-size:.8rem}:root{--important-title-color: #230555;--important-bg-color: #f4eefe;--important-border-color: #a371f7;--important-code-bg-color: rgb(163 113 247 / 10%);--info-title-color: #193c47;--info-bg-color: #eef9fd;--info-border-color: #4cb3d4;--info-code-bg-color: rgb(76 179 212 / 10%);--note-title-color: #474748;--note-bg-color: #fdfdfe;--note-border-color: #ccc;--note-code-bg-color: rgb(212 213 216 / 20%);--tip-title-color: #003100;--tip-bg-color: #e6f6e6;--tip-border-color: #009400;--tip-code-bg-color: rgb(0 148 0 / 15%);--warning-title-color: #4d3800;--warning-bg-color: #fff8e6;--warning-border-color: #e6a700;--warning-code-bg-color: rgb(230 167 0 / 15%);--caution-title-color: #4b1113;--caution-bg-color: #ffebec;--caution-border-color: #e13238;--caution-code-bg-color: rgb(225 50 56 / 15%);--detail-bg-color: #eee;--detail-text-color: inherit;--detail-code-bg-color: rgb(127 127 127 / 15%)}html[data-theme=dark]{--important-title-color: #f4eefe;--important-bg-color: #230555;--info-title-color: #eef9fd;--info-bg-color: #193c47;--note-title-color: #fdfdfe;--note-bg-color: #474748;--tip-title-color: #e6f6e6;--tip-bg-color: #003100;--warning-title-color: #fff8e6;--warning-bg-color: #4d3800;--caution-title-color: #ffebec;--caution-bg-color: #4b1113;--detail-bg-color: #333;--detail-text-color: #a8a8a8}.hint-container{position:relative;transition:background var(--vp-ct),border-color var(--vp-ct),color var(--vp-ct)}@media print{.hint-container{page-break-inside:avoid}}.hint-container .hint-container-title{position:relative;font-weight:600;line-height:1.25}.hint-container.important,.hint-container.info,.hint-container.note,.hint-container.tip,.hint-container.warning,.hint-container.caution{margin:1rem 0;padding:.25rem 1rem;border-inline-start-width:.3rem;border-inline-start-style:solid;border-radius:.5rem;color:inherit}@media (max-width: 419px){.hint-container.important,.hint-container.info,.hint-container.note,.hint-container.tip,.hint-container.warning,.hint-container.caution{margin-inline:-.75rem}}.hint-container.important .hint-container-title,.hint-container.info .hint-container-title,.hint-container.note .hint-container-title,.hint-container.tip .hint-container-title,.hint-container.warning .hint-container-title,.hint-container.caution .hint-container-title{padding-inline-start:1.75rem}@media print{.hint-container.important .hint-container-title,.hint-container.info .hint-container-title,.hint-container.note .hint-container-title,.hint-container.tip .hint-container-title,.hint-container.warning .hint-container-title,.hint-container.caution .hint-container-title{padding-inline-start:0}}.hint-container.important .hint-container-title:before,.hint-container.info .hint-container-title:before,.hint-container.note .hint-container-title:before,.hint-container.tip .hint-container-title:before,.hint-container.warning .hint-container-title:before,.hint-container.caution .hint-container-title:before{content:" ";position:absolute;top:calc(50% - .6125em);inset-inline-start:0;width:1.25em;height:1.25em;background-position:left;background-repeat:no-repeat}@media print{.hint-container.important .hint-container-title:before,.hint-container.info .hint-container-title:before,.hint-container.note .hint-container-title:before,.hint-container.tip .hint-container-title:before,.hint-container.warning .hint-container-title:before,.hint-container.caution .hint-container-title:before{display:none}}.hint-container.important p,.hint-container.info p,.hint-container.note p,.hint-container.tip p,.hint-container.warning p,.hint-container.caution p{line-height:1.5}.hint-container.important a,.hint-container.info a,.hint-container.note a,.hint-container.tip a,.hint-container.warning a,.hint-container.caution a{color:var(--vp-tc)}.hint-container.important{border-color:var(--important-border-color);background:var(--important-bg-color)}.hint-container.important>.hint-container-title{color:var(--important-title-color)}.hint-container.important>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M512 981.333a84.992 84.992 0 0 1-84.907-84.906h169.814A84.992 84.992 0 0 1 512 981.333zm384-128H128v-42.666l85.333-85.334v-256A298.325 298.325 0 0 1 448 177.92V128a64 64 0 0 1 128 0v49.92a298.325 298.325 0 0 1 234.667 291.413v256L896 810.667v42.666zm-426.667-256v85.334h85.334v-85.334h-85.334zm0-256V512h85.334V341.333h-85.334z' fill='%23a371f7'/%3E%3C/svg%3E")}.hint-container.important code{background:var(--important-code-bg-color)}.hint-container.info{border-color:var(--info-border-color);background:var(--info-bg-color)}.hint-container.info>.hint-container-title{color:var(--info-title-color)}.hint-container.info>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-11v6h2v-6h-2zm0-4v2h2V7h-2z' fill='%234cb3d4'/%3E%3C/svg%3E")}.hint-container.info code{background:var(--info-code-bg-color)}.hint-container.note{border-color:var(--note-border-color);background:var(--note-bg-color)}.hint-container.note>.hint-container-title{color:var(--note-title-color)}.hint-container.note>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-11v6h2v-6h-2zm0-4v2h2V7h-2z' fill='%23ccc'/%3E%3C/svg%3E")}.hint-container.note code{background:var(--note-code-bg-color)}.hint-container.tip{border-color:var(--tip-border-color);background:var(--tip-bg-color)}.hint-container.tip>.hint-container-title{color:var(--tip-title-color)}.hint-container.tip>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23009400' d='M7.941 18c-.297-1.273-1.637-2.314-2.187-3a8 8 0 1 1 12.49.002c-.55.685-1.888 1.726-2.185 2.998H7.94zM16 20v1a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2v-1h8zm-3-9.995V6l-4.5 6.005H11v4l4.5-6H13z'/%3E%3C/svg%3E")}.hint-container.tip code{background:var(--tip-code-bg-color)}.hint-container.warning{border-color:var(--warning-border-color);background:var(--warning-bg-color)}.hint-container.warning>.hint-container-title{color:var(--warning-title-color)}.hint-container.warning>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M576.286 752.57v-95.425q0-7.031-4.771-11.802t-11.3-4.772h-96.43q-6.528 0-11.3 4.772t-4.77 11.802v95.424q0 7.031 4.77 11.803t11.3 4.77h96.43q6.528 0 11.3-4.77t4.77-11.803zm-1.005-187.836 9.04-230.524q0-6.027-5.022-9.543-6.529-5.524-12.053-5.524H456.754q-5.524 0-12.053 5.524-5.022 3.516-5.022 10.547l8.538 229.52q0 5.023 5.022 8.287t12.053 3.265h92.913q7.032 0 11.803-3.265t5.273-8.287zM568.25 95.65l385.714 707.142q17.578 31.641-1.004 63.282-8.538 14.564-23.354 23.102t-31.892 8.538H126.286q-17.076 0-31.892-8.538T71.04 866.074q-18.582-31.641-1.004-63.282L455.75 95.65q8.538-15.57 23.605-24.61T512 62t32.645 9.04 23.605 24.61z' fill='%23e6a700'/%3E%3C/svg%3E")}.hint-container.warning code{background:var(--warning-code-bg-color)}.hint-container.caution{border-color:var(--caution-border-color);background:var(--caution-bg-color)}.hint-container.caution>.hint-container-title{color:var(--caution-title-color)}.hint-container.caution>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2c5.523 0 10 4.477 10 10v3.764a2 2 0 0 1-1.106 1.789L18 19v1a3 3 0 0 1-2.824 2.995L14.95 23a2.5 2.5 0 0 0 .044-.33L15 22.5V22a2 2 0 0 0-1.85-1.995L13 20h-2a2 2 0 0 0-1.995 1.85L9 22v.5c0 .171.017.339.05.5H9a3 3 0 0 1-3-3v-1l-2.894-1.447A2 2 0 0 1 2 15.763V12C2 6.477 6.477 2 12 2zm-4 9a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm8 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4z' fill='%23e13238'/%3E%3C/svg%3E")}.hint-container.caution code{background:var(--caution-code-bg-color)}.hint-container.details{position:relative;display:block;margin:1rem 0;padding:1.5rem;border-radius:.5rem;background:var(--detail-bg-color);color:var(--detail-text-color);transition:background var(--vp-tt),color var(--vp-tt)}@media (max-width: 419px){.hint-container.details{margin-inline:-.75rem}}.hint-container.details h4{margin-top:0}.hint-container.details figure:last-child,.hint-container.details p:last-child{margin-bottom:0;padding-bottom:0}.hint-container.details a{color:var(--vp-tc)}.hint-container.details code{background:var(--detail-code-bg-color)}.hint-container.details summary{position:relative;margin:-1.5rem;padding-block:1.5rem;padding-inline:4rem 1.5rem;list-style:none;cursor:pointer}.hint-container.details summary::-webkit-details-marker{display:none}.hint-container.details summary::marker{color:transparent;font-size:0}.hint-container.details summary:before,.hint-container.details summary:after{content:" ";position:absolute;top:calc(50% - .75rem);inset-inline-start:1.5rem;width:1.5rem;height:1.5rem}.hint-container.details summary:before{border-radius:50%;background:#ccc;transition:background var(--vp-ct),transform var(--vp-tt)}html[data-theme=dark] .hint-container.details summary:before{background:#555}.hint-container.details summary:after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");line-height:normal;transition:transform var(--vp-tt);transform:rotate(90deg)}html[data-theme=dark] .hint-container.details summary:after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.hint-container.details[open]>summary{margin-bottom:.5em}.hint-container.details[open]>summary:after{transform:rotate(180deg)}.mermaid-preview .node rect,.mermaid-preview .clusters rect,.mermaid-preview rect.note,.mermaid-preview .actor,.mermaid-wrapper .node rect,.mermaid-wrapper .clusters rect,.mermaid-wrapper rect.note,.mermaid-wrapper .actor{rx:8;ry:8}.mermaid-wrapper{position:relative;overflow-x:auto;padding:.6em .4em;text-align:center;transition:all 1s}@media (max-width: 419px){.mermaid-wrapper{margin:0 -1.5rem;padding:.6em 0}}.mermaid-loading{color:var(--vp-tc)}@media print{.mermaid-content{page-break-inside:avoid}}.mermaid-actions{text-align:end}@media print{.mermaid-actions{display:none}}.mermaid-preview{position:fixed;top:0;right:0;bottom:0;left:0;z-index:800;display:flex;align-items:center;justify-content:center;background-color:#fffc}html[data-theme=dark] .mermaid-preview{background-color:#000c}.mermaid-preview svg{max-width:100%;max-height:100%}.preview-button,.download-button{border-width:0;background:transparent;cursor:pointer;width:2rem;height:2rem;padding:.25rem;color:var(--dark-grey)}@media (max-width: 719px){.preview-button,.download-button{width:1.5rem;height:1.5rem}}.preview-button:hover,.download-button:hover{color:var(--vp-tc)}.preview-button svg,.download-button svg{width:100%;height:100%}/*! PhotoSwipe main CSS by Dmytro Semenov | photoswipe.com */.pswp{--pswp-bg: #000;--pswp-placeholder-bg: #222;--pswp-root-z-index: 100000;--pswp-preloader-color: rgba(79, 79, 79, .4);--pswp-preloader-color-secondary: rgba(255, 255, 255, .9);--pswp-icon-color: #fff;--pswp-icon-color-secondary: #4f4f4f;--pswp-icon-stroke-color: #4f4f4f;--pswp-icon-stroke-width: 2px;--pswp-error-text-color: var(--pswp-icon-color)}.pswp{position:fixed;top:0;left:0;width:100%;height:100%;z-index:var(--pswp-root-z-index);display:none;touch-action:none;outline:0;opacity:.003;contain:layout style size;-webkit-tap-highlight-color:rgba(0,0,0,0)}.pswp:focus{outline:0}.pswp *{box-sizing:border-box}.pswp img{max-width:none}.pswp--open{display:block}.pswp,.pswp__bg{transform:translateZ(0);will-change:opacity}.pswp__bg{opacity:.005;background:var(--pswp-bg)}.pswp,.pswp__scroll-wrap{overflow:hidden}.pswp__scroll-wrap,.pswp__bg,.pswp__container,.pswp__item,.pswp__content,.pswp__img,.pswp__zoom-wrap{position:absolute;top:0;left:0;width:100%;height:100%}.pswp__img,.pswp__zoom-wrap{width:auto;height:auto}.pswp--click-to-zoom.pswp--zoom-allowed .pswp__img{cursor:zoom-in}.pswp--click-to-zoom.pswp--zoomed-in .pswp__img{cursor:move;cursor:grab}.pswp--click-to-zoom.pswp--zoomed-in .pswp__img:active{cursor:grabbing}.pswp--no-mouse-drag.pswp--zoomed-in .pswp__img,.pswp--no-mouse-drag.pswp--zoomed-in .pswp__img:active,.pswp__img{cursor:zoom-out}.pswp__container,.pswp__img,.pswp__button,.pswp__counter{-webkit-user-select:none;-moz-user-select:none;user-select:none}.pswp__item{z-index:1;overflow:hidden}.pswp__hidden{display:none!important}.pswp__content{pointer-events:none}.pswp__content>*{pointer-events:auto}.pswp__error-msg-container{display:grid}.pswp__error-msg{margin:auto;font-size:1em;line-height:1;color:var(--pswp-error-text-color)}.pswp .pswp__hide-on-close{opacity:.005;will-change:opacity;transition:opacity var(--pswp-transition-duration) cubic-bezier(.4,0,.22,1);z-index:10;pointer-events:none}.pswp--ui-visible .pswp__hide-on-close{opacity:1;pointer-events:auto}.pswp__button{position:relative;display:block;width:50px;height:60px;padding:0;margin:0;overflow:hidden;cursor:pointer;background:none;border:0;box-shadow:none;opacity:.85;-webkit-appearance:none;-webkit-touch-callout:none}.pswp__button:hover,.pswp__button:active,.pswp__button:focus{transition:none;padding:0;background:none;border:0;box-shadow:none;opacity:1}.pswp__button:disabled{opacity:.3;cursor:auto}.pswp__icn{fill:var(--pswp-icon-color);color:var(--pswp-icon-color-secondary)}.pswp__icn{position:absolute;top:14px;left:9px;width:32px;height:32px;overflow:hidden;pointer-events:none}.pswp__icn-shadow{stroke:var(--pswp-icon-stroke-color);stroke-width:var(--pswp-icon-stroke-width);fill:none}.pswp__icn:focus{outline:0}div.pswp__img--placeholder,.pswp__img--with-bg{background:var(--pswp-placeholder-bg)}.pswp__top-bar{position:absolute;left:0;top:0;width:100%;height:60px;display:flex;flex-direction:row;justify-content:flex-end;z-index:10;pointer-events:none!important}.pswp__top-bar>*{pointer-events:auto;will-change:opacity}.pswp__button--close{margin-right:6px}.pswp__button--arrow{position:absolute;width:75px;height:100px;top:50%;margin-top:-50px}.pswp__button--arrow:disabled{display:none;cursor:default}.pswp__button--arrow .pswp__icn{top:50%;margin-top:-30px;width:60px;height:60px;background:none;border-radius:0}.pswp--one-slide .pswp__button--arrow{display:none}.pswp--touch .pswp__button--arrow{visibility:hidden}.pswp--has_mouse .pswp__button--arrow{visibility:visible}.pswp__button--arrow--prev{right:auto;left:0}.pswp__button--arrow--next{right:0}.pswp__button--arrow--next .pswp__icn{left:auto;right:14px;transform:scaleX(-1)}.pswp__button--zoom{display:none}.pswp--zoom-allowed .pswp__button--zoom{display:block}.pswp--zoomed-in .pswp__zoom-icn-bar-v{display:none}.pswp__preloader{position:relative;overflow:hidden;width:50px;height:60px;margin-right:auto}.pswp__preloader .pswp__icn{opacity:0;transition:opacity .2s linear;animation:pswp-clockwise .6s linear infinite}.pswp__preloader--active .pswp__icn{opacity:.85}@keyframes pswp-clockwise{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.pswp__counter{height:30px;margin-top:15px;margin-inline-start:20px;font-size:14px;line-height:30px;color:var(--pswp-icon-color);text-shadow:1px 1px 3px var(--pswp-icon-color-secondary);opacity:.85}.pswp--one-slide .pswp__counter{display:none}.photo-swipe-loading{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center}.photo-swipe-bullets-indicator{position:absolute;bottom:30px;left:50%;display:flex;flex-direction:row;align-items:center;transform:translate(-50%)}.photo-swipe-bullet{width:12px;height:6px;margin:0 5px;border-radius:3px;background:#fff;transition:width var(--vp-tt),color var(--vp-ct)}.photo-swipe-bullet.active{width:30px;background:var(--vp-tc)}@keyframes rotate{0%{transform:rotate(0)}50%{transform:rotate(360deg)}to{transform:rotate(360deg)}}.popup-enter-active,.popup-leave-active{transition:opacity .3s,transform .3s}.popup-enter-from,.popup-leave-to{opacity:0;transform:translateY(50%) scale(.5)}.sw-hint-popup,.sw-update-popup{position:fixed;bottom:1rem;inset-inline-end:1rem;z-index:300;padding:.5rem .75rem;border-width:0;border-radius:.5rem;background:var(--vp-bg);color:var(--vp-c);box-shadow:0 2px 12px 0 var(--card-shadow);font-size:1rem;line-height:1.5;cursor:pointer}@media print{.sw-hint-popup,.sw-update-popup{display:none}}.sw-hint-popup .icon-wrapper,.sw-update-popup .icon-wrapper{display:inline-block;vertical-align:middle;width:1.5rem;height:1.5rem;margin-inline-start:.4rem;border-radius:.75rem;background:var(--vp-tc)}.sw-hint-popup .icon-wrapper svg,.sw-update-popup .icon-wrapper svg{width:1.2rem;height:1.2rem;margin:.15rem;color:var(--white, #fff);animation:rotate 3s ease infinite}:root{--navbar-bg-color: var(--bg-color-float-blur);--sidebar-bg-color: var(--bg-color-blur)}html[data-theme=dark]{--navbar-bg-color: var(--bg-color-blur);--sidebar-bg-color: var(--bg-color-blur)}#app{--code-hl-bg-color: var(--code-highlight-line-color);--code-ln-color: var(--code-line-color);--code-ln-wrapper-width: var(--line-numbers-width);--code-tabs-nav-text-color: var(--code-color);--code-tabs-nav-bg-color: var(--code-border-color);--code-tabs-nav-hover-color: var(--code-highlight-line-color);--sidebar-space: var(--sidebar-width)}@media (max-width: 959px){#app{--navbar-height: var(--navbar-mobile-height);--navbar-vertical-padding: var(--navbar-mobile-vertical-padding);--navbar-horizontal-padding: var(--navbar-mobile-horizontal-padding);--sidebar-width: var(--sidebar-mobile-width)}}@media (min-width: 1440px){#app{--sidebar-space: clamp( var(--sidebar-width), max(0px, calc((100vw - var(--content-width)) / 2 - 2rem)), 100vw )}}.DocSearch-Button,.DocSearch{--docsearch-primary-color: var(--vp-tc);--docsearch-text-color: var(--vp-c);--docsearch-highlight-color: var(--vp-tc);--docsearch-muted-color: var(--light-grey);--docsearch-container-background: rgb(9 10 17 / 80%);--docsearch-modal-background: var(--bg-color-float);--docsearch-searchbox-background: var(--bg-color-secondary);--docsearch-searchbox-focus-background: var(--vp-bg);--docsearch-searchbox-shadow: inset 0 0 0 2px var(--vp-tc);--docsearch-hit-color: var(--vp-cl);--docsearch-hit-active-color: var(--vp-bg);--docsearch-hit-background: var(--vp-bg);--docsearch-hit-shadow: 0 1px 3px 0 var(--border-color);--docsearch-footer-background: var(--vp-bg)}html[data-theme=dark] .DocSearch-Button,html[data-theme=dark] .DocSearch{--docsearch-logo-color: var(--vp-c);--docsearch-modal-shadow: inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;--docsearch-key-shadow: inset 0 -2px 0 0 #282d55, inset 0 0 1px 1px #51577d, 0 2px 2px 0 rgb(3 4 9 / 30%);--docsearch-key-gradient: linear-gradient(-225deg, #444950, #1c1e21);--docsearch-footer-shadow: inset 0 1px 0 0 rgb(73 76 106 / 50%), 0 -4px 8px 0 rgb(0 0 0 / 20%)}#nprogress{--nprogress-color: var(--vp-tc)}.search-box{--search-bg-color: var(--vp-bg);--search-accent-color: var(--vp-tc);--search-text-color: var(--vp-c);--search-border-color: var(--border-color);--search-item-text-color: var(--vp-clt);--search-item-focus-bg-color: var(--bg-color-secondary)}.external-link-icon{--external-link-icon-color: var(--light-grey)}html,body{margin:0;padding:0;background:#fff}html{font-size:16px;font-display:optional;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:transparent}@media print{html{font-size:12pt}}body{min-height:100vh;color:#2c3e50}a{color:#3eaf7c;font-weight:500;text-decoration:none;overflow-wrap:break-word}kbd{display:inline-block;min-width:1em;margin-inline:.125rem;padding:.25em;border:1px solid #eee;border-radius:.25em;box-shadow:1px 1px 4px #00000026;line-height:1;letter-spacing:-.1em;text-align:center}code{margin:0;padding:.2rem .4rem;border-radius:5px;background:rgba(127,127,127,.12);font-size:.85em;overflow-wrap:break-word}table code{padding:.1rem .4rem}p a code{color:#3eaf7c;font-weight:400}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:500;line-height:1.25;overflow-wrap:break-word}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2rem}h2{padding-bottom:.3rem;border-bottom:1px solid #eaecef;font-size:1.65rem}h3{font-size:1.35rem}h4{font-size:1.15rem}h5{font-size:1.05rem}h6{font-size:1rem}a.header-anchor{float:left;margin-top:.125em;margin-inline-start:-.87em;padding-inline-end:.23em;font-size:.85em;opacity:0;transition:opacity .2s}@media print{a.header-anchor{display:none!important}}a.header-anchor:hover{text-decoration:none}a.header-anchor:focus-visible{opacity:1}p,ul,ol{line-height:1.6;overflow-wrap:break-word}@media print{p,ul,ol{line-height:1.5}}ul,ol{padding-inline-start:1.2em}blockquote{margin:1rem 0;padding:.25rem 0 .25rem 1rem;border-inline-start:.2rem solid #ddd;color:#666;font-size:1rem;overflow-wrap:break-word}blockquote>p{margin:0}hr{border:0;border-top:1px solid #eaecef}table{display:block;overflow-x:auto;margin:1rem 0;border-collapse:collapse}tr:nth-child(2n){background:#f6f8fa}th,td{padding:.6em 1em;border:1px solid #dfe2e5}pre{direction:ltr}@page{margin:2cm;font-size:12pt;size:a4}@media print{*,:after,:before{box-shadow:none!important;text-shadow:none!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}a{color:inherit;font-weight:inherit!important;font-size:inherit!important;text-decoration:underline}a[href^="http://"]:after,a[href^="https://"]:after{content:" (" attr(href) ") "}abbr[title]:after{content:" (" attr(title) ")"}pre{border:1px solid #eee;white-space:pre-wrap!important}pre>code{white-space:pre-wrap!important}blockquote{border-inline-start:.2rem solid #ddd;color:inherit}blockquote,pre{orphans:5;widows:5}img,tr,canvas{page-break-inside:avoid}}@font-face{font-weight:400;font-style:normal;font-family:Crimson;src:url(data:font/truetype;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTYr5mwEAAAyMAAAAHEdERUYAKQATAAAMbAAAAB5PUy8yVsJ0MgAAAVgAAABgY21hcBiKDzgAAAHcAAABWGdhc3D//wADAAAMZAAAAAhnbHlmr+DBdQAAA1AAAAdsaGVhZBZwt+8AAADcAAAANmhoZWEFawEuAAABFAAAACRobXR4BksA9gAAAbgAAAAibG9jYQlsC24AAAM0AAAAHG1heHAAEQBZAAABOAAAACBuYW1lLaFDVAAACrwAAAFrcG9zdAC1AHoAAAwoAAAAPAABAAAAAQAAqBd2H18PPPUACwQAAAAAANqqufwAAAAA2qq5/AAb/9wB4QMeAAAACAACAAAAAAAAAAEAAAMs/ywAXAH9AAAAAAHhAAEAAAAAAAAAAAAAAAAAAAAEAAEAAAANAFkAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAH1AZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAIABgMAAAAAAAAAAAABEAAAAAAAAAAAAAAAUGZFZADAADAAOQMs/ywAXAMsANQAAAABAAAAAAMYAAAAAAAgAAEBpwAfAAAAAAFVAAAB/QAfAH0ALQA+ABsAPgAyACgAPgAxAAAAAAADAAAAAwAAABwAAQAAAAAAUgADAAEAAAAcAAQANgAAAAQABAABAAAAOf//AAAAL///AAAAAQAEAAAAAAADAAQABQAGAAcACAAJAAoACwAMAAABBgAAAQAAAAAAAAABAgAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAwQFBgcICQoLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAJgAmAGIAwAEeAZIBzgJAApYC2gNiA7YAAQAf/9wBhwMeABIAAAEGBwYHATAXFjM2NzY3ASYnJjcBgxwLCgH+zgMECxIKCgIBLgEDAwMDHhQFBgP85wMEAQgJBgMOAwMDEwAAAAIAH//9Ad0CkAAQACEAABMWFxYXNjc2NzQnJicGBwYHNyY3NjcWFxYXFAcGByYnJjcfATo6amo7OQE5OmxrOjkBXQIlJEE5IyIBIyJEOSQjAgFOkV5eBAReXoqJXl4EBF5eggJ0UlEDA09Qe3xVVgMDU1OEAAAAAAEAff/9AYACkQA+AAA3FAcGBwYHBiMGFQYXNjc2MzIXFhc2JzQnIicmJyY1JjURNjc2MSYnJicjBgcGBwYVFBUUFxYXNjc2NzIXFhXkAQEEBRgYDAMBBB4ZGhweGxofBAEDDBgZBQQBAQMEAQIDBAIFNTZCAgMDBA0XFw0LBQV3GBMVDAgEBAUKCgUCAQICAQIFCgoFBAQIDBUTGAGnLxkbBAYFAQIZGh4BAgECBQUEAwUHBwEICRYAAAAAAQAtAAAB0QKRADoAADcGFxYXITY3NjcmJyYjIgcGBwYHBisBNjc2NzY3NjUmJyYnBgcGBxQXFhc2NzY3FhcWFxYHBgcGBwYHLgEEAwMBYwURERADBwYFBAMDAg8VEx/LJkBAOhsQDwIxMkxSMjIHCAYGCSYmPTIfHwEBCgoeLkJBQg8EBQQCETAwKQICAgEBBCgUEylJSUYhJicsRDIzAgY1NRoEBQYBEyEhAwEjIjYlJCQtQlBQSAAAAAABAD7/+wG+ApEASgAANwYXFhcWFxYzNjc2NyYnJic2NzY3JicmIwYHBgcUFxYXNjc2NxYXFhcGBwYHBgcUFRQXNjc2NxYXFhcGBwYnIicmJyYnJiciBwYXPwEIBwUaHB0VZU5NBAMvLi8eIB4DAywsKzwrKxgEAwUIHR4wLRscAQMvLz8BAQYKEhEQNSYmAgImJSsWExQPCw0NFREMDQE7DgsLBQwFBgE8PWpMKSoGECQkMkAiIQIdHyUHBwcBCRscAwEbGSpCIyUOAgMCAwwIAwUEAQEoKD9XJSQBBQYODg8PAQ0NFQAAAgAb//oB4QKTACIAJQAANxQXFhchFRQXFjMyNzYjNTM2NzY1NCcmJyMRNCcmIwYHBgcBExEbAgMFASEJCRIdCAkBRgIBAQUEBTwFAwgHCQkG/vjmxgUGBgOwBQIBAwKzAgQDCBAMDQEBlAYGBgEICQf+cwEs/tQAAQA+//sBvgKTAEoAADcGFxYXFhcWMzY3NjcmJyYnIgcGBzY3NjczMjc2NzY3NjU0JyYnBgcGByMGBwYHFBcWMzY3NjMWFxYHBgcGJyInJicmJyYnIgcGFz8BCAcFGhwdFWVOTQQBMjJbFx8gFwoJCQlWKB0dFQ4JCAQDBQMdHSKXCREQEgMCBA4bGhNYJyUBAiYlKxYTFA8LDQ0VEQwNATsOCwsFDAUGATw9akU2NwMFBggrMC8uAgICExcZBgQCAgMBAwQBMVNUWAUFBAYFBAMxMTNZIyQBBQYODg8PAQ0NFQAAAgAy//oBzQKXACAAMwAANxQXFhc2NzY3NicmJyIHBgc2NzY3NCcmJwYHBgcGBwYXNyY3Njc2FxYXFgcGBwYHJicmNzM1NV5aOTsCAioqahoiIRsnWFhFAwIHQ0tMOTAZGQFbBAQaGxkXRB8fAQEfIDE9Hh4E511FRwQDPT1ZPEJBBQwLF4Y9PRMGCwwBEiwsPDZFRkkTHyAbCAcBAjAwREYsLQEFREVQAAAAAAEAKP/7AdUCiwApAAATFhcWMzI3Njc2NzYzIQYHBgcWFxYzMjcBNjc2NzQnJiMiBwYjIQYHBgcoAwYHAwYDAwELEBEdAQUJYWJXAQ8PDgcDAQ4LCQgBAQEEBhUVFv7JBgsNDAH6DQMCAQEFKRITFMjHjQcFBgMCPxYSEwoEAgMBAhkrKiAAAAADAD7/9wG/ApIAKABBAFgAADcGFxYXNjc2NyYnJicmJzQ3Njc2NyYnJiMGBwYHFhcWFxYVFAcGBwYHNyY3Njc2MzIzMhcyFxYXFhcGBwYHIicmNxMmNzY3FhcWFRQHBgcGByIjIicmJyY3PwE1M1ZQODgDAykpMQIBAyYlJQMCMC9HRjExAgIiIiMCAiMvLwNTBBQTKgEBAQECAQIBEjU1CAEdHjMrISICGAMYGSYvGxoTEx8CAQIBBAMfJCQBoU8tLQECMjFPOC4uGwIBAgEWJiU7SCYoAjEwQzopKhMBAgECEykpQAQsIiEbAQEBBywsQjUeHQEiI0QBZSMhIAECJiYvKh8gFAEBAhAfIEYAAAIAMf/6AcsClwAgADMAABMGFxYXMjc2NwYHBgcUFxYXNjc2NzY3NjUmJyYnBgcGBzcmNzY3FhcWFRQHBgcGJyYnJjc0AyopahoiIRsoV1hFAwIHQ0tMODEZGQE2NF5ZOjoBWgMfHzE9Hh4EGhoaF0QeHwUBy0dBQgUMCxeFPj0SBwsLAREsLD01RkVPV0dFBQQ8PU8UPCwtAQVFRUklIRsHCAECMDBPAAAADACWAAEAAAAAAAEABwAQAAEAAAAAAAIABwAoAAEAAAAAAAMABwBAAAEAAAAAAAQABwBYAAEAAAAAAAUAHgCeAAEAAAAAAAYABwDNAAMAAQQJAAEADgAAAAMAAQQJAAIADgAYAAMAAQQJAAMADgAwAAMAAQQJAAQADgBIAAMAAQQJAAUAPABgAAMAAQQJAAYADgC9AEMAcgBpAG0AcwBvAG4AAENyaW1zb24AAEMAcgBpAG0AcwBvAG4AAENyaW1zb24AAEMAcgBpAG0AcwBvAG4AAENyaW1zb24AAEMAcgBpAG0AcwBvAG4AAENyaW1zb24AAFYAZQByAHMAaQBvAG4AIAAxAC4AMAA7ACAARgBvAG4AdABFAGQAaQB0AG8AcgAgACgAdgAxAC4AMAApAABWZXJzaW9uIDEuMDsgRm9udEVkaXRvciAodjEuMCkAAEMAcgBpAG0AcwBvAG4AAENyaW1zb24AAAACAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAABAAIAEwAUABUAFgAXABgAGQAaABsAHAAAAAH//wACAAEAAAAMAAAAFgAAAAIAAQADAAwAAQAEAAAAAgAAAAAAAAABAAAAANWkJwgAAAAA2qq5/AAAAADaqrn8) format("truetype")}html,body{background:var(--bg-color);transition:background var(--color-transition)}:root{color-scheme:light}html[data-theme=dark]{color-scheme:dark}body{color:var(--text-color);font-family:var(--font-family)}@media (min-width: 1440px){body{font-size:17px}}a{color:var(--theme-color)}kbd{border-color:var(--border-color-dark);background:var(--bg-color-secondary);font-family:var(--font-family-mono)}code{font-family:var(--font-family-mono);transition:background var(--color-transition),color var(--color-transition)}html[data-theme=dark] code{background:#333}p a code{color:var(--theme-color)}blockquote{border-color:#eee;color:#666;transition:border-color var(--color-transition),color var(--color-transition)}html[data-theme=dark] blockquote{border-color:#333}h1,h2,h3,h4,h5,h6{font-family:var(--font-family-heading)}@media (max-width: 419px){h1{font-size:1.9rem}}h2{border-color:var(--border-color);transition:border-bottom-color var(--color-transition)}hr{border-color:var(--border-color);transition:border-top-color var(--color-transition)}tr:nth-child(2n){background:var(--bg-color-secondary)}th,td{border-color:var(--border-color-dark)}@media print{@page{--text-color: #000 !important;--bg-color: #fff !important}div[class*=language-]{position:relative!important}}.theme-hope-content:not(.custom)>*:first-child{margin-top:0}.vp-breadcrumb{max-width:var(--content-width, 740px);margin-inline:auto;padding-inline:2.5rem;position:relative;z-index:2;padding-top:1rem;font-size:15px}@media (max-width: 959px){.vp-breadcrumb{padding-inline:1.5rem}}@media print{.vp-breadcrumb{max-width:unset}}@media (max-width: 959px){.vp-breadcrumb{font-size:14px}}@media (max-width: 419px){.vp-breadcrumb{padding-top:.5rem;font-size:12.8px}}@media print{.vp-breadcrumb{display:none}}.vp-breadcrumb .icon{margin-inline-end:.25em;font-size:1em}.vp-breadcrumb img.icon{vertical-align:-.125em;height:1em}.vp-breadcrumb a{display:inline-block;padding:0 .5em}.vp-breadcrumb a:before{position:relative;bottom:.125rem;margin-inline-end:.25em}.vp-breadcrumb a:hover{color:var(--theme-color)}.vp-breadcrumb ol{margin:0;padding-inline-start:0;list-style:none}.vp-breadcrumb li{display:inline-block;line-height:1.5}.vp-breadcrumb li:first-child a{padding-inline-start:0}.vp-breadcrumb li:last-child a{padding-inline-end:0}.vp-breadcrumb li.is-active a{color:var(--light-grey);cursor:default;pointer-events:none}.vp-breadcrumb li+li:before{content:"/";color:var(--light-grey)}.toggle-sidebar-wrapper{position:fixed;top:var(--navbar-height);bottom:0;inset-inline-start:var(--sidebar-space);z-index:100;display:flex;align-items:center;justify-content:center;font-size:2rem;transition:inset-inline-start var(--transform-transition)}@media (max-width: 719px){.toggle-sidebar-wrapper{display:none}}@media (min-width: 1440px){.toggle-sidebar-wrapper{display:none}}.toggle-sidebar-wrapper:hover{background:rgba(127,127,127,.05);cursor:pointer}.toggle-sidebar-wrapper .arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s}html[data-theme=dark] .toggle-sidebar-wrapper .arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.toggle-sidebar-wrapper .arrow.down{transform:rotate(180deg)}html[dir=rtl] .toggle-sidebar-wrapper .arrow.down{transform:rotate(-180deg)}.toggle-sidebar-wrapper .arrow.end{transform:rotate(90deg)}html[dir=rtl] .toggle-sidebar-wrapper .arrow.end,.toggle-sidebar-wrapper .arrow.start{transform:rotate(-90deg)}html[dir=rtl] .toggle-sidebar-wrapper .arrow.start{transform:rotate(90deg)}.theme-container{display:flex;flex-direction:column;justify-content:space-between;min-height:100vh}.theme-container .vp-page{padding-top:var(--navbar-height);padding-inline-start:calc(var(--sidebar-space) + 2rem)}@media (max-width: 719px){.theme-container .vp-page{padding-inline:0}}@media (min-width: 1440px){.theme-container .vp-page{padding-inline-end:calc(100vw - var(--content-width) - var(--sidebar-space) - 6rem)}}.theme-container .vp-sidebar{top:var(--navbar-height)}.theme-container.no-navbar .vp-page{padding-top:0}.theme-container.no-navbar .vp-sidebar{top:0}@media (max-width: 719px){.theme-container.no-navbar .vp-sidebar{top:0}}@media (max-width: 719px){.theme-container.hide-navbar .vp-sidebar{top:0}}.theme-container.sidebar-collapsed .vp-page{padding-inline-start:0}.theme-container.sidebar-collapsed .vp-sidebar{box-shadow:none;transform:translate(-100%)}html[dir=rtl] .theme-container.sidebar-collapsed .vp-sidebar{transform:translate(100%)}.theme-container.sidebar-collapsed .toggle-sidebar-wrapper{inset-inline-start:0}.theme-container.no-sidebar .vp-page{padding-inline:0}@media (min-width: 1440px){.theme-container.no-sidebar.has-toc .vp-page{padding-inline-end:16rem}}.theme-container.no-sidebar .vp-toggle-sidebar-button,.theme-container.no-sidebar .toggle-sidebar-wrapper,.theme-container.no-sidebar .vp-sidebar{display:none}.theme-container.sidebar-open .vp-sidebar{box-shadow:2px 0 8px var(--card-shadow);transform:translate(0)}.fade-slide-y-enter-active{transition:all .3s ease!important}.fade-slide-y-leave-active{transition:all .3s cubic-bezier(1,.5,.8,1)!important}.fade-slide-y-enter-from,.fade-slide-y-leave-to{opacity:0;transform:translateY(10px)}.vp-feature-wrapper{position:relative}.vp-feature-bg{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;background-attachment:fixed;background-position:50%;background-size:cover}.vp-feature-bg.light{display:inline-block}.vp-feature-bg.dark,html[data-theme=dark] .vp-feature-bg.light{display:none}html[data-theme=dark] .vp-feature-bg.dark{display:inline-block}.vp-feature{position:relative;z-index:1;margin:0 auto;padding:1.5rem 1rem;color:var(--text-color-lighter);text-align:center}.vp-feature-bg+.vp-feature{color:#222}html[data-theme=dark] .vp-feature-bg+.vp-feature{color:#eee}.vp-feature-bg+.vp-feature .icon{color:inherit}.vp-feature-image{height:10rem;margin:0 auto}@media (max-width: 959px){.vp-feature-image{height:8rem}}.vp-feature-image.light{display:inline-block}.vp-feature-image.dark,html[data-theme=dark] .vp-feature-image.light{display:none}html[data-theme=dark] .vp-feature-image.dark{display:inline-block}.vp-feature-header{margin-bottom:1.5rem;border-bottom:none;font-size:3rem;font-family:var(--font-family);text-align:center}@media (max-width: 959px){.vp-feature-header{font-size:2.5rem}}@media (max-width: 719px){.vp-feature-header{font-size:2.25rem}}@media (max-width: 419px){.vp-feature-header{font-size:2rem}}.vp-feature-description{font-size:1.125rem}.vp-features{z-index:1;display:flex;flex-wrap:wrap;align-items:stretch;place-content:stretch center;margin:1rem 0;text-align:start}@media print{.vp-features{display:block}}.vp-features:first-child{border-top:1px solid var(--border-color);transition:border-color var(--color-transition)}.vp-feature-item{position:relative;display:block;flex-basis:calc(33% - 3rem);margin:.5rem;padding:1rem;border-radius:.5rem;color:inherit;transition:background var(--color-transition),box-shadow var(--color-transition),transform var(--transform-transition)}@media (min-width: 1440px){.vp-feature-item{flex-basis:calc(25% - 3rem)}}@media (max-width: 959px){.vp-feature-item{flex-basis:calc(50% - 3rem)}}@media (max-width: 719px){.vp-feature-item{flex-basis:100%;font-size:.95rem}}@media (max-width: 419px){.vp-feature-item{margin:.5rem 0;font-size:.9rem}}.vp-feature-item.link{cursor:pointer}@media print{.vp-feature-item.link{text-decoration:none}}.vp-feature-item .icon{display:inline-block;height:1.1em;margin-inline-end:.5rem;color:var(--theme-color);font-weight:400;font-size:1.1em}.vp-feature-item:hover{background-color:var(--bg-color-secondary);box-shadow:0 2px 12px 0 var(--card-shadow);transform:translate(-2px,-2px);transform:scale(1.05)}.vp-feature-bg+.vp-feature .vp-feature-item:hover{background-color:transparent}.vp-feature-item:only-child{flex-basis:100%}.vp-feature-item:first-child:nth-last-child(2),.vp-feature-item:nth-child(2):last-child{flex-basis:calc(50% - 3rem)}@media (max-width: 719px){.vp-feature-item:first-child:nth-last-child(2),.vp-feature-item:nth-child(2):last-child{flex-basis:100%}}.vp-feature-title{margin:.25rem 0 .5rem;font-weight:700;font-size:1.3rem;font-family:var(--font-family)}@media (max-width: 419px){.vp-feature-title{font-size:1.2rem}}.vp-feature-details{margin:0;line-height:1.4}.vp-footer-wrapper{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-evenly;padding-block:.75rem;padding-inline:calc(var(--sidebar-space) + 2rem) 2rem;border-top:1px solid var(--border-color);background:var(--bg-color);color:var(--dark-grey);text-align:center;transition:border-top-color var(--color-transition),background var(--color-transition),padding var(--transform-transition)}@media (max-width: 719px){.vp-footer-wrapper{padding-inline-start:2rem}}@media (min-width: 1440px){.vp-footer-wrapper{z-index:50;padding-inline-start:2rem}}@media print{.vp-footer-wrapper{margin:0!important;padding:0!important}}@media (max-width: 419px){.vp-footer-wrapper{display:block}}.no-sidebar .vp-footer-wrapper,.sidebar-collapsed .vp-footer-wrapper{padding-inline-start:2rem}.vp-footer{margin:.5rem 1rem;font-size:14px}@media print{.vp-footer{display:none}}.vp-copyright{margin:6px 0;font-size:13px}.vp-page:not(.not-found)+.vp-footer-wrapper{margin-top:-2rem}.vp-hero-info-wrapper{position:relative;display:flex;align-items:center;justify-content:center;margin-inline:auto}.vp-hero-info-wrapper.fullscreen{height:calc(100vh - var(--navbar-height))!important}.vp-hero-info{z-index:1;width:100%;padding-inline:2.5rem}@media (max-width: 959px){.vp-hero-info{padding-inline:1.5rem}}@media (min-width: 959px){.vp-hero-info{display:flex;align-items:center;justify-content:space-evenly}}.vp-hero-mask{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;background-position:50%;background-size:cover}.vp-hero-mask:after{content:" ";position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:block}.vp-hero-mask.light{display:block}html[data-theme=dark] .vp-hero-mask.light,.vp-hero-mask.dark{display:none}html[data-theme=dark] .vp-hero-mask.dark{display:block}.vp-hero-infos{z-index:1;margin:0 .5rem}.vp-hero-image{display:block;max-width:100%;max-height:18rem;margin:1rem}@media (max-width: 959px){.vp-hero-image{margin:2rem auto}}@media (max-width: 719px){.vp-hero-image{max-height:16rem;margin:1.5rem auto}}@media (max-width: 419px){.vp-hero-image{max-height:14rem}}.vp-hero-image.light{display:block}html[data-theme=dark] .vp-hero-image.light,.vp-hero-image.dark{display:none}html[data-theme=dark] .vp-hero-image.dark{display:block}#main-title{margin:.5rem 0;background:linear-gradient(120deg,var(--theme-color-light),var(--theme-color) 30%,#7509d9 100%);-webkit-background-clip:text;background-clip:text;font-weight:700;font-size:3.6rem;font-family:var(--font-family);line-height:1.5;-webkit-text-fill-color:transparent}@media (max-width: 719px){#main-title{margin:0}}@media (max-width: 959px){#main-title{font-size:2.5rem;text-align:center}}@media (max-width: 719px){#main-title{font-size:2.25rem;text-align:center}}@media (max-width: 419px){#main-title{margin:0 auto;font-size:2rem}}#main-description,.vp-hero-actions{margin:1.8rem 0}@media (max-width: 719px){#main-description,.vp-hero-actions{margin:1.5rem 0}}@media (max-width: 959px){#main-description,.vp-hero-actions{margin:1.5rem auto;text-align:center}}@media (max-width: 419px){#main-description,.vp-hero-actions{margin:1.2rem 0}}#main-description{max-width:35rem;color:var(--text-color-light);font-weight:500;font-size:1.6rem;line-height:1.3}@media (max-width: 719px){#main-description{font-size:1.4rem}}@media (max-width: 419px){#main-description{font-size:1.2rem}}.vp-hero-action{display:inline-block;overflow:hidden;min-width:4rem;margin:.5rem;padding:.5em 1.5rem;border-radius:2rem;background:var(--bg-color-secondary);color:var(--text-color);font-size:1.2rem;text-align:center;transition:color var(--color-transition),color var(--color-transition),transform var(--transform-transition)}@media (max-width: 719px){.vp-hero-action{padding:.5rem 1rem;font-size:1.1rem}}@media (max-width: 419px){.vp-hero-action{font-size:1rem}}@media print{.vp-hero-action{text-decoration:none}}.vp-hero-action:hover{background:var(--bg-color-tertiary)}.vp-hero-action.primary{border-color:var(--theme-color);background:var(--theme-color);color:var(--white)}.vp-hero-action.primary:hover{border-color:var(--theme-color-light);background:var(--theme-color-light)}.vp-project-home:not(.pure) .vp-hero-action:active{transform:scale(.96)}.vp-hero-action .icon{margin-inline-end:.25em}.vp-highlight-wrapper{position:relative;display:flex;align-items:center;justify-content:center}.vp-highlight-wrapper:nth-child(2n) .vp-highlight{flex-direction:row-reverse}.vp-highlight{z-index:1;display:flex;flex:1;align-items:center;justify-content:flex-end;max-width:var(--home-page-width);margin:0 auto;padding:1.5rem 2.5rem;color:#222}@media (max-width: 719px){.vp-highlight{display:block;padding-inline:1.5rem;text-align:center}}html[data-theme=dark] .vp-highlight{color:#eee}.vp-highlight-bg{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;background-attachment:fixed;background-position:50%;background-size:cover}.vp-highlight-bg.light{display:inline-block}.vp-highlight-bg.dark,html[data-theme=dark] .vp-highlight-bg.light{display:none}html[data-theme=dark] .vp-highlight-bg.dark{display:inline-block}.vp-highlight-image{width:12rem;margin:2rem 4rem}@media (max-width: 959px){.vp-highlight-image{width:10rem}}@media (max-width: 719px){.vp-highlight-image{width:8rem;margin:0 auto}}.vp-highlight-image.light{display:inline-block}.vp-highlight-image.dark,html[data-theme=dark] .vp-highlight-image.light{display:none}html[data-theme=dark] .vp-highlight-image.dark{display:inline-block}.vp-highlight-info-wrapper{display:flex;flex:1;justify-content:center;padding:2rem}@media (max-width: 719px){.vp-highlight-info-wrapper{padding:1rem 0}}.vp-highlight-info-wrapper:only-child{flex:1 0 100%}.vp-highlight-info{text-align:start}.vp-highlight-header{margin-bottom:1.5rem;border-bottom:none;font-size:3rem;font-family:var(--font-family)}@media (max-width: 959px){.vp-highlight-header{font-size:2.5rem}}@media (max-width: 719px){.vp-highlight-header{font-size:2.25rem;text-align:center}}@media (max-width: 419px){.vp-highlight-header{font-size:2rem}}.vp-highlight-description{font-size:1.125rem}.vp-highlights{margin-inline-start:-1.25em;padding-inline-start:0}.vp-highlight-item-wrapper{padding:.5em .5em .5em 1.75em;border-radius:.5rem;list-style:none}.vp-highlight-item-wrapper.link{cursor:pointer}.vp-highlight-item-wrapper:hover{background-color:var(--bg-color-secondary);box-shadow:0 2px 12px 0 var(--card-shadow);transition:transform var(--transform-transition);transform:translate(-2px,-2px)}.vp-highlight-bg+.vp-highlight .vp-highlight-item-wrapper:hover{background-color:transparent}.vp-highlight-item-wrapper::marker{font-weight:700}.vp-highlight-item{display:list-item;color:inherit;list-style:initial}@media print{.vp-highlight-item{text-decoration:none}}.vp-highlight-title{margin:0;font-weight:600;font-size:1.125rem;font-family:var(--font-family)}.vp-highlight-title .icon{margin-inline-end:.25em;font-size:1em}.vp-highlight-title img.icon{vertical-align:-.125em;height:1em}.vp-highlight-details{margin:.5rem 0 0}.vp-project-home{--content-width: var(--home-page-width);display:block;flex:1;padding-top:var(--navbar-height)}@media screen{.vp-project-home .vp-hero-info-wrapper:not(.fullscreen) .vp-hero-info{max-width:var(--home-page-width)}}@media screen{.vp-project-home .vp-feature{max-width:var(--home-page-width)}}.vp-project-home .theme-hope-content{padding-bottom:1.5rem!important}.vp-project-home .theme-hope-content:empty{padding:0!important}.not-found-hint{padding:2rem}.not-found-hint .error-code{margin:0;font-weight:700;font-size:4rem;line-height:4rem}.not-found-hint .error-title{font-weight:700}.not-found-hint .error-hint{margin:0;padding:12px 0;font-weight:600;font-size:20px;line-height:20px;letter-spacing:2px}.vp-page.not-found{display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;width:100vw;max-width:var(--home-page-width);margin:0 auto;padding:calc(var(--navbar-height) + 1rem) 1rem 1rem!important;text-align:center}.vp-page.not-found .action-button{display:inline-block;box-sizing:border-box;margin:.25rem;padding:.75rem 1rem;border-width:0;border-bottom:1px solid var(--theme-color-dark);border-radius:3rem;background:var(--theme-color);color:var(--white);outline:none;font-size:1rem;transition:background .1s ease}.vp-page.not-found .action-button:hover{background:var(--theme-color-light);cursor:pointer}.vp-page-nav{display:flex;flex-wrap:wrap;min-height:2rem;margin-top:0;padding-block:.5rem;padding-inline:2rem;border-top:1px solid var(--border-color);transition:border-top var(--color-transition)}@media (max-width: 959px){.vp-page-nav{padding-inline:1rem}}@media print{.vp-page-nav{display:none}}.vp-page-nav .nav-link{display:inline-block;flex-grow:1;margin:.25rem;padding:.25rem .5rem;border:1px solid var(--border-color);border-radius:.25rem}.vp-page-nav .nav-link:hover{background:var(--bg-color-secondary)}.vp-page-nav .nav-link .hint{color:var(--light-grey);font-size:.875rem;line-height:2}.vp-page-nav .nav-link .arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s;font-size:.75rem}html[data-theme=dark] .vp-page-nav .nav-link .arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.vp-page-nav .nav-link .arrow.down{transform:rotate(180deg)}html[dir=rtl] .vp-page-nav .nav-link .arrow.down{transform:rotate(-180deg)}.vp-page-nav .nav-link .arrow.end{transform:rotate(90deg)}html[dir=rtl] .vp-page-nav .nav-link .arrow.end,.vp-page-nav .nav-link .arrow.start{transform:rotate(-90deg)}html[dir=rtl] .vp-page-nav .nav-link .arrow.start{transform:rotate(90deg)}.vp-page-nav .prev{text-align:start}.vp-page-nav .prev .icon{margin-inline-end:.25em;font-size:1em}.vp-page-nav .prev img.icon{vertical-align:-.125em;height:1em}.vp-page-nav .next{text-align:end}.vp-page-nav .next .icon{margin-inline-start:.25em;font-size:1em}.vp-page-nav .next img.icon{vertical-align:-.125em;height:1em}.vp-page-title{max-width:var(--content-width, 740px);margin-inline:auto;padding-inline:2.5rem;position:relative;z-index:1;padding-top:1rem;padding-bottom:0}@media (max-width: 959px){.vp-page-title{padding-inline:1.5rem}}@media print{.vp-page-title{max-width:unset}}@media print{.vp-page-title{padding-inline:0!important}}@media (max-width: 959px){.vp-page-title{padding-top:.5rem}}.vp-page-title h1{margin-top:calc(0px - var(--navbar-height))!important;margin-bottom:1rem;padding-top:var(--navbar-height)!important;font-size:2.2rem}@media (max-width: 959px){.vp-page-title h1{margin-bottom:.5rem}}.vp-page-title h1 .icon{margin-inline-end:.25em;color:var(--theme-color);font-size:.9em}.vp-page-title h1 img.icon{vertical-align:-.125em;height:1em}.theme-hope-content:not(.custom){padding-top:0!important}.theme-hope-content:not(.custom) h1:first-child,.theme-hope-content:not(.custom) h2:first-child,.theme-hope-content:not(.custom) h3:first-child,.theme-hope-content:not(.custom) h4:first-child,.theme-hope-content:not(.custom) h5:first-child,.theme-hope-content:not(.custom) h6:first-child{margin-top:calc(.5rem - var(--navbar-height))!important;padding-top:var(--navbar-height)!important}.theme-hope-content:not(.custom)>h1:first-child{display:none}.vp-page{display:block;flex-grow:1;padding-bottom:2rem;transition:padding var(--transform-transition)}@media print{.vp-page{min-height:auto!important;margin:0!important;padding:0!important}}.page-cover{-o-object-fit:cover;object-fit:cover;width:calc(100% + 2rem);max-height:25vh;margin-inline-start:-2rem}@media (max-width: 719px){.page-cover{width:100%;margin:0;border-radius:0}}@media (min-width: 1440px){.page-cover{width:calc(100% - 2rem);margin:0 1rem;border-radius:.5rem}}.page-cover .sidebar-collapsed{width:100%;margin-inline-start:0}.vp-skip-link{top:.25rem;inset-inline-start:.25rem;z-index:999;padding:.65rem 1.5rem;border-radius:.5rem;background:var(--bg-color);color:var(--theme-color);box-shadow:var(--card-shadow);font-weight:700;font-size:.9em;text-decoration:none}@media print{.vp-skip-link{display:none}}.vp-skip-link:focus{clip:auto;width:auto;height:auto;-webkit-clip-path:none;clip-path:none}.theme-hope-content pre{overflow:auto;margin:.85rem 0;padding:1rem;border-radius:6px;line-height:1.375}.theme-hope-content pre code{padding:0;border-radius:0;background:transparent!important;color:var(--code-color);font-family:var(--font-family-mono);text-align:left;white-space:pre;word-spacing:normal;word-wrap:normal;word-break:normal;overflow-wrap:unset;-webkit-hyphens:none;hyphens:none;transition:color var(--color-transition);-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}@media print{.theme-hope-content pre code{white-space:pre-wrap}}.theme-hope-content .line-number{font-family:var(--font-family-mono)}div[class*=language-]{position:relative;border-radius:6px;background:var(--code-bg-color);font-size:16px;transition:background var(--color-transition)}@media (max-width: 419px){.theme-hope-content>div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}div[class*=language-]:before{content:attr(data-ext);position:absolute;top:0;right:1em;z-index:3;color:var(--code-line-color);font-size:.75rem;transition:color var(--color-transition)}div[class*=language-] pre{position:relative;z-index:1;scrollbar-gutter:stable}div[class*=language-] .highlight-lines{position:absolute;top:0;bottom:0;left:0;width:100%;padding:1rem 0;line-height:1.375;-webkit-user-select:none;-moz-user-select:none;user-select:none}div[class*=language-] .highlight-line{background:var(--code-highlight-line-color);transition:background var(--color-transition)}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;top:0;bottom:0;left:0;z-index:2;width:var(--line-numbers-width);border-right:1px solid var(--code-highlight-line-color);border-radius:6px 0 0 6px;transition:border-color var(--color-transition)}@media (max-width: 419px){div[class*=language-].line-numbers-mode:after{border-radius:0}}@media print{div[class*=language-].line-numbers-mode:after{display:none}}div[class*=language-].line-numbers-mode .highlight-line{position:relative}div[class*=language-].line-numbers-mode .highlight-line:before{content:" ";position:absolute;top:0;left:0;z-index:3;display:block;width:var(--line-numbers-width);height:100%}div[class*=language-].line-numbers-mode pre{vertical-align:middle;margin-left:var(--line-numbers-width);padding-left:.5rem}@media print{div[class*=language-].line-numbers-mode pre{margin-left:0;padding-left:1rem}}div[class*=language-].line-numbers-mode .line-numbers{position:absolute;top:0;bottom:0;left:0;display:flex;flex-direction:column;width:var(--line-numbers-width);padding:1rem 0;color:var(--code-line-color);counter-reset:line-number;text-align:center;transition:color var(--color-transition)}@media print{div[class*=language-].line-numbers-mode .line-numbers{display:none}}div[class*=language-].line-numbers-mode .line-number{position:relative;z-index:4;display:flex;flex:1;align-items:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-number:before{content:counter(line-number);display:block;font-size:.8em;line-height:1;counter-increment:line-number}div[class*=language-]:not(.line-numbers-mode) .line-numbers{display:none}html[data-theme=light] #app{--code-color: #383a42;--code-line-color: rgba(56, 58, 66, .67);--code-bg-color: #ecf4fa;--code-border-color: #c3def3;--code-highlight-line-color: #d8e9f6}html[data-theme=light] code[class*=language-],html[data-theme=light] pre[class*=language-]{-moz-tab-size:2;-o-tab-size:2;tab-size:2}html[data-theme=light] code[class*=language-]::-moz-selection,html[data-theme=light] code[class*=language-] ::-moz-selection,html[data-theme=light] pre[class*=language-]::-moz-selection,html[data-theme=light] pre[class*=language-] ::-moz-selection{background:#e5e5e6;color:inherit}html[data-theme=light] code[class*=language-]::selection,html[data-theme=light] code[class*=language-] ::selection,html[data-theme=light] pre[class*=language-]::selection,html[data-theme=light] pre[class*=language-] ::selection{background:#e5e5e6;color:inherit}html[data-theme=light] .token.comment,html[data-theme=light] .token.prolog,html[data-theme=light] .token.cdata{color:#a0a1a7}html[data-theme=light] .token.doctype,html[data-theme=light] .token.punctuation,html[data-theme=light] .token.entity{color:#383a42}html[data-theme=light] .token.attr-name,html[data-theme=light] .token.class-name,html[data-theme=light] .token.boolean,html[data-theme=light] .token.constant,html[data-theme=light] .token.number,html[data-theme=light] .token.atrule{color:#b76b01}html[data-theme=light] .token.keyword{color:#a626a4}html[data-theme=light] .token.property,html[data-theme=light] .token.tag,html[data-theme=light] .token.symbol,html[data-theme=light] .token.deleted,html[data-theme=light] .token.important{color:#e45649}html[data-theme=light] .token.selector,html[data-theme=light] .token.string,html[data-theme=light] .token.char,html[data-theme=light] .token.builtin,html[data-theme=light] .token.inserted,html[data-theme=light] .token.regex,html[data-theme=light] .token.attr-value,html[data-theme=light] .token.attr-value>.token.punctuation{color:#50a14f}html[data-theme=light] .token.variable,html[data-theme=light] .token.operator,html[data-theme=light] .token.function{color:#4078f2}html[data-theme=light] .token.url{color:#0184bc}html[data-theme=light] .token.attr-value>.token.punctuation.attr-equals,html[data-theme=light] .token.special-attr>.token.attr-value>.token.value.css{color:#383a42}html[data-theme=light] .language-css .token.selector{color:#e45649}html[data-theme=light] .language-css .token.property{color:#383a42}html[data-theme=light] .language-css .token.function,html[data-theme=light] .language-css .token.url>.token.function{color:#0184bc}html[data-theme=light] .language-css .token.url>.token.string.url{color:#50a14f}html[data-theme=light] .language-css .token.important,html[data-theme=light] .language-css .token.atrule .token.rule,html[data-theme=light] .language-javascript .token.operator{color:#a626a4}html[data-theme=light] .language-javascript .token.template-string>.token.interpolation>.token.interpolation-punctuation.punctuation{color:#ca1243}html[data-theme=light] .language-json .token.operator{color:#383a42}html[data-theme=light] .language-json .token.null.keyword{color:#b76b01}html[data-theme=light] .language-markdown .token.url,html[data-theme=light] .language-markdown .token.url>.token.operator,html[data-theme=light] .language-markdown .token.url-reference.url>.token.string{color:#383a42}html[data-theme=light] .language-markdown .token.url>.token.content{color:#4078f2}html[data-theme=light] .language-markdown .token.url>.token.url,html[data-theme=light] .language-markdown .token.url-reference.url{color:#0184bc}html[data-theme=light] .language-markdown .token.blockquote.punctuation,html[data-theme=light] .language-markdown .token.hr.punctuation{color:#a0a1a7;font-style:italic}html[data-theme=light] .language-markdown .token.code-snippet{color:#50a14f}html[data-theme=light] .language-markdown .token.bold .token.content{color:#b76b01}html[data-theme=light] .language-markdown .token.italic .token.content{color:#a626a4}html[data-theme=light] .language-markdown .token.strike .token.content,html[data-theme=light] .language-markdown .token.strike .token.punctuation,html[data-theme=light] .language-markdown .token.list.punctuation,html[data-theme=light] .language-markdown .token.title.important>.token.punctuation{color:#e45649}html[data-theme=light] .token.bold{font-weight:700}html[data-theme=light] .token.comment,html[data-theme=light] .token.italic{font-style:italic}html[data-theme=light] .token.entity{cursor:help}html[data-theme=light] .token.namespace{opacity:.8}html[data-theme=dark] #app{--code-color: #abb2bf;--code-line-color: rgba(171, 178, 191, .67);--code-bg-color: #282c34;--code-border-color: #343e51;--code-highlight-line-color: #2f3542}html[data-theme=dark] code[class*=language-],html[data-theme=dark] pre[class*=language-]{text-shadow:0 1px rgba(0,0,0,.3);-moz-tab-size:2;-o-tab-size:2;tab-size:2}@media print{html[data-theme=dark] code[class*=language-],html[data-theme=dark] pre[class*=language-]{text-shadow:none}}html[data-theme=dark] code[class*=language-]::-moz-selection,html[data-theme=dark] code[class*=language-] ::-moz-selection,html[data-theme=dark] pre[class*=language-]::-moz-selection,html[data-theme=dark] pre[class*=language-] ::-moz-selection{background:#3e4451;color:inherit;text-shadow:none}html[data-theme=dark] code[class*=language-]::selection,html[data-theme=dark] code[class*=language-] ::selection,html[data-theme=dark] pre[class*=language-]::selection,html[data-theme=dark] pre[class*=language-] ::selection{background:#3e4451;color:inherit;text-shadow:none}html[data-theme=dark] .token.comment,html[data-theme=dark] .token.prolog,html[data-theme=dark] .token.cdata{color:#5c6370}html[data-theme=dark] .token.doctype,html[data-theme=dark] .token.punctuation,html[data-theme=dark] .token.entity{color:#abb2bf}html[data-theme=dark] .token.attr-name,html[data-theme=dark] .token.class-name,html[data-theme=dark] .token.boolean,html[data-theme=dark] .token.constant,html[data-theme=dark] .token.number,html[data-theme=dark] .token.atrule{color:#d19a66}html[data-theme=dark] .token.keyword{color:#c678dd}html[data-theme=dark] .token.property,html[data-theme=dark] .token.tag,html[data-theme=dark] .token.symbol,html[data-theme=dark] .token.deleted,html[data-theme=dark] .token.important{color:#e06c75}html[data-theme=dark] .token.selector,html[data-theme=dark] .token.string,html[data-theme=dark] .token.char,html[data-theme=dark] .token.builtin,html[data-theme=dark] .token.inserted,html[data-theme=dark] .token.regex,html[data-theme=dark] .token.attr-value,html[data-theme=dark] .token.attr-value>.token.punctuation{color:#98c379}html[data-theme=dark] .token.variable,html[data-theme=dark] .token.operator,html[data-theme=dark] .token.function{color:#61afef}html[data-theme=dark] .token.url{color:#56b6c2}html[data-theme=dark] .token.attr-value>.token.punctuation.attr-equals,html[data-theme=dark] .token.special-attr>.token.attr-value>.token.value.css{color:#abb2bf}html[data-theme=dark] .language-css .token.selector{color:#e06c75}html[data-theme=dark] .language-css .token.property{color:#abb2bf}html[data-theme=dark] .language-css .token.function,html[data-theme=dark] .language-css .token.url>.token.function{color:#56b6c2}html[data-theme=dark] .language-css .token.url>.token.string.url{color:#98c379}html[data-theme=dark] .language-css .token.important,html[data-theme=dark] .language-css .token.atrule .token.rule,html[data-theme=dark] .language-javascript .token.operator{color:#c678dd}html[data-theme=dark] .language-javascript .token.template-string>.token.interpolation>.token.interpolation-punctuation.punctuation{color:#be5046}html[data-theme=dark] .language-json .token.operator{color:#abb2bf}html[data-theme=dark] .language-json .token.null.keyword{color:#d19a66}html[data-theme=dark] .language-markdown .token.url,html[data-theme=dark] .language-markdown .token.url>.token.operator,html[data-theme=dark] .language-markdown .token.url-reference.url>.token.string{color:#abb2bf}html[data-theme=dark] .language-markdown .token.url>.token.content{color:#61afef}html[data-theme=dark] .language-markdown .token.url>.token.url,html[data-theme=dark] .language-markdown .token.url-reference.url{color:#56b6c2}html[data-theme=dark] .language-markdown .token.blockquote.punctuation,html[data-theme=dark] .language-markdown .token.hr.punctuation{color:#5c6370;font-style:italic}html[data-theme=dark] .language-markdown .token.code-snippet{color:#98c379}html[data-theme=dark] .language-markdown .token.bold .token.content{color:#d19a66}html[data-theme=dark] .language-markdown .token.italic .token.content{color:#c678dd}html[data-theme=dark] .language-markdown .token.strike .token.content,html[data-theme=dark] .language-markdown .token.strike .token.punctuation,html[data-theme=dark] .language-markdown .token.list.punctuation,html[data-theme=dark] .language-markdown .token.title.important>.token.punctuation{color:#e06c75}html[data-theme=dark] .token.bold{font-weight:700}html[data-theme=dark] .token.comment,html[data-theme=dark] .token.italic{font-style:italic}html[data-theme=dark] .token.entity{cursor:help}html[data-theme=dark] .token.namespace{opacity:.8}.sr-only{position:absolute;overflow:hidden;clip:rect(0,0,0,0);width:1px;height:1px;margin:-1px;padding:0;border-width:0;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media print{.theme-hope-content{margin:0!important;padding-inline:0!important}}.theme-hope-content.custom{margin:0;padding:0}.theme-hope-content:not(.custom){max-width:var(--content-width, 740px);margin:0 auto;padding:2rem 2.5rem;padding-top:0}@media (max-width: 959px){.theme-hope-content:not(.custom){padding:1.5rem}}@media (max-width: 419px){.theme-hope-content:not(.custom){padding:1rem 1.5rem}}@media print{.theme-hope-content:not(.custom){max-width:unset}}.theme-hope-content:not(.custom)>h1,.theme-hope-content:not(.custom)>h2,.theme-hope-content:not(.custom)>h3,.theme-hope-content:not(.custom)>h4,.theme-hope-content:not(.custom)>h5,.theme-hope-content:not(.custom)>h6{margin-top:calc(.5rem - var(--navbar-height));margin-bottom:.5rem;padding-top:calc(1rem + var(--navbar-height));outline:none}.theme-container.no-navbar .theme-hope-content:not(.custom)>h1,.theme-container.no-navbar .theme-hope-content:not(.custom)>h2,.theme-container.no-navbar .theme-hope-content:not(.custom)>h3,.theme-container.no-navbar .theme-hope-content:not(.custom)>h4,.theme-container.no-navbar .theme-hope-content:not(.custom)>h5,.theme-container.no-navbar .theme-hope-content:not(.custom)>h6{margin-top:1.5rem;padding-top:0}.theme-hope-content:not(.custom)>p,.theme-hope-content:not(.custom)>ul p,.theme-hope-content:not(.custom)>ol p{text-align:justify;overflow-wrap:break-word;-webkit-hyphens:auto;hyphens:auto}@media (max-width: 419px){.theme-hope-content:not(.custom)>p,.theme-hope-content:not(.custom)>ul p,.theme-hope-content:not(.custom)>ol p{text-align:start}}@media print{.theme-hope-content:not(.custom)>p,.theme-hope-content:not(.custom)>ul p,.theme-hope-content:not(.custom)>ol p{text-align:start}}.theme-hope-content a:hover{text-decoration:underline}.theme-hope-content img{max-width:100%}::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}html[data-theme=light]::view-transition-old(root),html[data-theme=dark]::view-transition-new(root){z-index:1}html[data-theme=light]::view-transition-new(root),html[data-theme=dark]::view-transition-old(root){z-index:99999}@media (min-width: 1280px){.chart-wrapper::-webkit-scrollbar,.flowchart-wrapper::-webkit-scrollbar,.mermaid-wrapper::-webkit-scrollbar{width:8px;height:8px}.chart-wrapper::-webkit-scrollbar-track-piece,.flowchart-wrapper::-webkit-scrollbar-track-piece,.mermaid-wrapper::-webkit-scrollbar-track-piece{border-radius:8px;background:rgba(0,0,0,.1)}}html[dir=rtl] a.header-anchor{float:right}#docsearch-container{min-width:145.7px!important}@media (max-width: 959px){#docsearch-container{min-width:36px!important}}.DocSearch.DocSearch-Button{margin-left:0}@media (max-width: 959px){.DocSearch.DocSearch-Button{min-width:36px!important}}.DocSearch .DocSearch-Button-Placeholder{display:inline-block;padding:4px 12px 4px 6px;font-size:14px}@media (max-width: 719px){.DocSearch .DocSearch-Button-Placeholder{display:none}}.DocSearch .DocSearch-Search-Icon{width:1.25em;height:1.25em}@media (max-width: 959px){.DocSearch .DocSearch-Button-Keys{display:none}}.DocSearch .DocSearch-Button-Key{background:var(--bg-color);box-shadow:none}:root{scrollbar-width:thin}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track-piece{border-radius:6px;background:rgba(0,0,0,.1)}::-webkit-scrollbar-thumb{border-radius:6px;background:var(--theme-color)}::-webkit-scrollbar-thumb:active{background:var(--theme-color-light)}@media (max-width: 719px){.hide-in-mobile{display:none!important}}@media (max-width: 959px){.hide-in-pad{display:none!important}}.page-author-item{display:inline-block;margin:0 4px;font-weight:400;overflow-wrap:break-word}.page-category-info{flex-wrap:wrap}.page-category-item{display:inline-block;margin:.125em .25em;padding:0 .25em;border-radius:.25em;background:var(--bg-color-secondary);color:var(--text-color-light);font-weight:700;font-size:.75rem;line-height:2;transition:background var(--color-transition),color var(--color-transition)}@media print{.page-category-item{padding:0;font-weight:400}.page-category-item:after{content:", "}.page-category-item:last-of-type:after{content:""}}.page-category-item.clickable>span:hover{color:var(--theme-color);cursor:pointer}.page-category-item.category0{background:#fde5e7;color:#ec2f3e}html[data-theme=dark] .page-category-item.category0{background:#340509;color:#ba111f}.page-category-item.category0:hover{background:#f9bec3}html[data-theme=dark] .page-category-item.category0:hover{background:#53080e}.page-category-item.category1{background:#ffeee8;color:#fb7649}html[data-theme=dark] .page-category-item.category1{background:#441201;color:#f54205}.page-category-item.category1:hover{background:#fed4c6}html[data-theme=dark] .page-category-item.category1:hover{background:#6d1d02}.page-category-item.category2{background:#fef5e7;color:#f5b041}html[data-theme=dark] .page-category-item.category2{background:#3e2703;color:#e08e0b}.page-category-item.category2:hover{background:#fce6c4}html[data-theme=dark] .page-category-item.category2:hover{background:#633f05}.page-category-item.category3{background:#eafaf1;color:#55d98d}html[data-theme=dark] .page-category-item.category3{background:#0c331c;color:#29b866}.page-category-item.category3:hover{background:#caf3db}html[data-theme=dark] .page-category-item.category3:hover{background:#12522d}.page-category-item.category4{background:#e6f9ee;color:#36d278}html[data-theme=dark] .page-category-item.category4{background:#092917;color:#219552}.page-category-item.category4:hover{background:#c0f1d5}html[data-theme=dark] .page-category-item.category4:hover{background:#0f4224}.page-category-item.category5{background:#e1fcfc;color:#16e1e1}html[data-theme=dark] .page-category-item.category5{background:#042929;color:#0e9595}.page-category-item.category5:hover{background:#b4f8f8}html[data-theme=dark] .page-category-item.category5:hover{background:#064242}.page-category-item.category6{background:#e4f0fe;color:#2589f6}html[data-theme=dark] .page-category-item.category6{background:#021b36;color:#0862c3}.page-category-item.category6:hover{background:#bbdafc}html[data-theme=dark] .page-category-item.category6:hover{background:#042c57}.page-category-item.category7{background:#f7f1fd;color:#bb8ced}html[data-theme=dark] .page-category-item.category7{background:#2a0b4b;color:#9851e4}.page-category-item.category7:hover{background:#eadbfa}html[data-theme=dark] .page-category-item.category7:hover{background:#431277}.page-category-item.category8{background:#fdeaf5;color:#ef59ab}html[data-theme=dark] .page-category-item.category8{background:#400626;color:#e81689}.page-category-item.category8:hover{background:#facbe5}html[data-theme=dark] .page-category-item.category8:hover{background:#670a3d}.page-original-info{position:relative;display:inline-block;vertical-align:middle;overflow:hidden;padding:0 .5em;border:.5px solid var(--dark-grey);border-radius:.75em;background:var(--bg-color);font-size:.75em;line-height:1.5!important}.page-info{display:flex;flex-wrap:wrap;align-items:center;place-content:stretch flex-start;color:var(--dark-grey);font-size:14px}@media print{.page-info{display:flex!important}}.page-info>span{display:flex;align-items:center;max-width:100%;margin-inline-end:.5em;line-height:2}@media (min-width: 1440px){.page-info>span{font-size:1.1em}}@media (max-width: 419px){.page-info>span{margin-inline-end:.3em;font-size:.875em}}@media print{.page-info>span{display:flex!important}}.page-info .icon{position:relative;display:inline-block;vertical-align:middle;width:1em;height:1em;margin-inline-end:.25em}.page-info a{color:inherit}.page-info a:hover,.page-info a:active{color:var(--theme-color)}.page-meta{max-width:var(--content-width, 740px);margin-inline:auto;padding-inline:2.5rem;display:flex;flex-wrap:wrap;justify-content:space-between;overflow:auto;padding-top:.75rem;padding-bottom:.75rem}@media (max-width: 959px){.page-meta{padding-inline:1.5rem}}@media print{.page-meta{max-width:unset}}@media print{.page-meta{margin:0!important;padding-inline:0!important}}@media (max-width: 719px){.page-meta{display:block}}.page-meta .meta-item{flex-grow:1}.page-meta .meta-item .label{font-weight:500}.page-meta .meta-item .label:not(a){color:var(--text-color-lighter)}.page-meta .meta-item .info{color:var(--dark-grey);font-weight:400}.page-meta .git-info{text-align:end}.page-meta .edit-link{margin-top:.25rem;margin-bottom:.25rem;margin-inline-end:.5rem;font-size:14px}@media print{.page-meta .edit-link{display:none}}.page-meta .edit-link .icon{position:relative;bottom:-.125em;width:1em;height:1em;margin-inline-end:.25em}.page-meta .update-time,.page-meta .contributors{margin-top:.25rem;margin-bottom:.25rem;font-size:14px}@media (max-width: 719px){.page-meta .update-time,.page-meta .contributors{font-size:13px;text-align:start}}.print-button{border-width:0;background:transparent;cursor:pointer;box-sizing:content-box;width:1rem;height:1rem;padding:.5rem;border-radius:.25em;color:inherit;font-size:1rem;transform:translateY(.25rem)}@media print{.print-button{display:none}}.page-tag-info{flex-wrap:wrap}.page-tag-item{position:relative;display:inline-block;vertical-align:middle;overflow:hidden;min-width:1.5rem;margin:.125rem;padding:.125rem .25rem .125rem .625rem;background:var(--bg-color-secondary);background:linear-gradient(135deg,transparent .75em,var(--bg-color-secondary) 0) top,linear-gradient(45deg,transparent .75em,var(--bg-color-secondary) 0) bottom;background-size:100% 52%!important;background-repeat:no-repeat!important;color:var(--text-color-light);font-weight:700;font-size:.625rem;line-height:1.5;text-align:center;transition:background var(--color-transition),color var(--color-transition)}@media print{.page-tag-item{padding:0;font-weight:400}.page-tag-item:after{content:", "}.page-tag-item:last-of-type:after{content:""}}.page-tag-item.clickable:hover{cursor:pointer}.page-tag-item.tag0{background:#fde5e7;background:linear-gradient(135deg,transparent .75em,#fde5e7 0) top,linear-gradient(45deg,transparent .75em,#fde5e7 0) bottom;color:#ec2f3e}html[data-theme=dark] .page-tag-item.tag0{background:#340509;background:linear-gradient(135deg,transparent .75em,#340509 0) top,linear-gradient(45deg,transparent .75em,#340509 0) bottom;color:#ba111f}.page-tag-item.tag0.clickable:hover{background:#f9bec3;background:linear-gradient(135deg,transparent .75em,#f9bec3 0) top,linear-gradient(45deg,transparent .75em,#f9bec3 0) bottom}html[data-theme=dark] .page-tag-item.tag0.clickable:hover{background:#53080e;background:linear-gradient(135deg,transparent .75em,#53080e 0) top,linear-gradient(45deg,transparent .75em,#53080e 0) bottom}.page-tag-item.tag1{background:#ffeee8;background:linear-gradient(135deg,transparent .75em,#ffeee8 0) top,linear-gradient(45deg,transparent .75em,#ffeee8 0) bottom;color:#fb7649}html[data-theme=dark] .page-tag-item.tag1{background:#441201;background:linear-gradient(135deg,transparent .75em,#441201 0) top,linear-gradient(45deg,transparent .75em,#441201 0) bottom;color:#f54205}.page-tag-item.tag1.clickable:hover{background:#fed4c6;background:linear-gradient(135deg,transparent .75em,#fed4c6 0) top,linear-gradient(45deg,transparent .75em,#fed4c6 0) bottom}html[data-theme=dark] .page-tag-item.tag1.clickable:hover{background:#6d1d02;background:linear-gradient(135deg,transparent .75em,#6d1d02 0) top,linear-gradient(45deg,transparent .75em,#6d1d02 0) bottom}.page-tag-item.tag2{background:#fef5e7;background:linear-gradient(135deg,transparent .75em,#fef5e7 0) top,linear-gradient(45deg,transparent .75em,#fef5e7 0) bottom;color:#f5b041}html[data-theme=dark] .page-tag-item.tag2{background:#3e2703;background:linear-gradient(135deg,transparent .75em,#3e2703 0) top,linear-gradient(45deg,transparent .75em,#3e2703 0) bottom;color:#e08e0b}.page-tag-item.tag2.clickable:hover{background:#fce6c4;background:linear-gradient(135deg,transparent .75em,#fce6c4 0) top,linear-gradient(45deg,transparent .75em,#fce6c4 0) bottom}html[data-theme=dark] .page-tag-item.tag2.clickable:hover{background:#633f05;background:linear-gradient(135deg,transparent .75em,#633f05 0) top,linear-gradient(45deg,transparent .75em,#633f05 0) bottom}.page-tag-item.tag3{background:#eafaf1;background:linear-gradient(135deg,transparent .75em,#eafaf1 0) top,linear-gradient(45deg,transparent .75em,#eafaf1 0) bottom;color:#55d98d}html[data-theme=dark] .page-tag-item.tag3{background:#0c331c;background:linear-gradient(135deg,transparent .75em,#0c331c 0) top,linear-gradient(45deg,transparent .75em,#0c331c 0) bottom;color:#29b866}.page-tag-item.tag3.clickable:hover{background:#caf3db;background:linear-gradient(135deg,transparent .75em,#caf3db 0) top,linear-gradient(45deg,transparent .75em,#caf3db 0) bottom}html[data-theme=dark] .page-tag-item.tag3.clickable:hover{background:#12522d;background:linear-gradient(135deg,transparent .75em,#12522d 0) top,linear-gradient(45deg,transparent .75em,#12522d 0) bottom}.page-tag-item.tag4{background:#e6f9ee;background:linear-gradient(135deg,transparent .75em,#e6f9ee 0) top,linear-gradient(45deg,transparent .75em,#e6f9ee 0) bottom;color:#36d278}html[data-theme=dark] .page-tag-item.tag4{background:#092917;background:linear-gradient(135deg,transparent .75em,#092917 0) top,linear-gradient(45deg,transparent .75em,#092917 0) bottom;color:#219552}.page-tag-item.tag4.clickable:hover{background:#c0f1d5;background:linear-gradient(135deg,transparent .75em,#c0f1d5 0) top,linear-gradient(45deg,transparent .75em,#c0f1d5 0) bottom}html[data-theme=dark] .page-tag-item.tag4.clickable:hover{background:#0f4224;background:linear-gradient(135deg,transparent .75em,#0f4224 0) top,linear-gradient(45deg,transparent .75em,#0f4224 0) bottom}.page-tag-item.tag5{background:#e1fcfc;background:linear-gradient(135deg,transparent .75em,#e1fcfc 0) top,linear-gradient(45deg,transparent .75em,#e1fcfc 0) bottom;color:#16e1e1}html[data-theme=dark] .page-tag-item.tag5{background:#042929;background:linear-gradient(135deg,transparent .75em,#042929 0) top,linear-gradient(45deg,transparent .75em,#042929 0) bottom;color:#0e9595}.page-tag-item.tag5.clickable:hover{background:#b4f8f8;background:linear-gradient(135deg,transparent .75em,#b4f8f8 0) top,linear-gradient(45deg,transparent .75em,#b4f8f8 0) bottom}html[data-theme=dark] .page-tag-item.tag5.clickable:hover{background:#064242;background:linear-gradient(135deg,transparent .75em,#064242 0) top,linear-gradient(45deg,transparent .75em,#064242 0) bottom}.page-tag-item.tag6{background:#e4f0fe;background:linear-gradient(135deg,transparent .75em,#e4f0fe 0) top,linear-gradient(45deg,transparent .75em,#e4f0fe 0) bottom;color:#2589f6}html[data-theme=dark] .page-tag-item.tag6{background:#021b36;background:linear-gradient(135deg,transparent .75em,#021b36 0) top,linear-gradient(45deg,transparent .75em,#021b36 0) bottom;color:#0862c3}.page-tag-item.tag6.clickable:hover{background:#bbdafc;background:linear-gradient(135deg,transparent .75em,#bbdafc 0) top,linear-gradient(45deg,transparent .75em,#bbdafc 0) bottom}html[data-theme=dark] .page-tag-item.tag6.clickable:hover{background:#042c57;background:linear-gradient(135deg,transparent .75em,#042c57 0) top,linear-gradient(45deg,transparent .75em,#042c57 0) bottom}.page-tag-item.tag7{background:#f7f1fd;background:linear-gradient(135deg,transparent .75em,#f7f1fd 0) top,linear-gradient(45deg,transparent .75em,#f7f1fd 0) bottom;color:#bb8ced}html[data-theme=dark] .page-tag-item.tag7{background:#2a0b4b;background:linear-gradient(135deg,transparent .75em,#2a0b4b 0) top,linear-gradient(45deg,transparent .75em,#2a0b4b 0) bottom;color:#9851e4}.page-tag-item.tag7.clickable:hover{background:#eadbfa;background:linear-gradient(135deg,transparent .75em,#eadbfa 0) top,linear-gradient(45deg,transparent .75em,#eadbfa 0) bottom}html[data-theme=dark] .page-tag-item.tag7.clickable:hover{background:#431277;background:linear-gradient(135deg,transparent .75em,#431277 0) top,linear-gradient(45deg,transparent .75em,#431277 0) bottom}.page-tag-item.tag8{background:#fdeaf5;background:linear-gradient(135deg,transparent .75em,#fdeaf5 0) top,linear-gradient(45deg,transparent .75em,#fdeaf5 0) bottom;color:#ef59ab}html[data-theme=dark] .page-tag-item.tag8{background:#400626;background:linear-gradient(135deg,transparent .75em,#400626 0) top,linear-gradient(45deg,transparent .75em,#400626 0) bottom;color:#e81689}.page-tag-item.tag8.clickable:hover{background:#facbe5;background:linear-gradient(135deg,transparent .75em,#facbe5 0) top,linear-gradient(45deg,transparent .75em,#facbe5 0) bottom}html[data-theme=dark] .page-tag-item.tag8.clickable:hover{background:#670a3d;background:linear-gradient(135deg,transparent .75em,#670a3d 0) top,linear-gradient(45deg,transparent .75em,#670a3d 0) bottom}.toc-place-holder{margin-inline:auto;padding-inline:2.5rem;position:sticky;top:calc(var(--navbar-height) + 2rem);z-index:99;max-width:var(--content-width, 740px)}@media (max-width: 959px){.toc-place-holder{padding-inline:1.5rem}}@media print{.toc-place-holder{max-width:unset}}.toc-place-holder+.theme-hope-content:not(.custom){padding-top:0}#toc{position:absolute;inset-inline-start:calc(100% + 1rem);display:none;min-width:10rem;max-width:15rem}@media (min-width: 1440px){.has-toc #toc{display:block}}@media print{#toc{display:none!important}}#toc .toc-header{margin-bottom:.75rem;margin-inline-start:.5rem;font-weight:600;font-size:.875rem}#toc .toc-wrapper{position:relative;overflow:hidden auto;max-height:75vh;margin:0 .5rem;padding-inline-start:8px;text-overflow:ellipsis;white-space:nowrap;scroll-behavior:smooth}#toc .toc-wrapper::-webkit-scrollbar-track-piece{background:transparent}#toc .toc-wrapper::-webkit-scrollbar{width:3px}#toc .toc-wrapper::-webkit-scrollbar-thumb:vertical{background:#ddd}html[data-theme=dark] #toc .toc-wrapper::-webkit-scrollbar-thumb:vertical{background:#333}#toc .toc-wrapper:before{content:" ";position:absolute;top:0;bottom:0;inset-inline-start:0;z-index:-1;width:2px;background:var(--border-color)}#toc .toc-list{position:relative;margin:0;padding:0}#toc .toc-marker{content:" ";position:absolute;top:0;inset-inline-start:-8px;z-index:2;width:2px;height:1.7rem;background:var(--theme-color);transition:top var(--vp-tt)}#toc .toc-link{position:relative;display:block;overflow:hidden;max-width:100%;color:var(--light-grey);line-height:inherit;text-overflow:ellipsis;white-space:nowrap}#toc .toc-link.level2{padding-inline-start:0px;font-size:14px}#toc .toc-link.level3{padding-inline-start:8px;font-size:13px}#toc .toc-link.level4{padding-inline-start:16px;font-size:12px}#toc .toc-link.level5{padding-inline-start:24px;font-size:11px}#toc .toc-link.level6{padding-inline-start:32px;font-size:10px}#toc .toc-item{position:relative;box-sizing:border-box;height:1.7rem;padding:0 .5rem;list-style:none;line-height:1.7rem}#toc .toc-item:hover>.toc-link{color:var(--theme-color)}#toc .toc-item.active>.toc-link{color:var(--theme-color);font-weight:700}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper:not(:hover) .arrow{transform:rotate(-180deg)}.dropdown-wrapper .dropdown-title{border-width:0;background:transparent;cursor:pointer;padding:0 .25rem;color:var(--dark-grey);font-weight:500;font-size:inherit;font-family:inherit;line-height:inherit;cursor:inherit}.dropdown-wrapper .dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .icon{margin-inline-end:.25em;font-size:1em}.dropdown-wrapper .dropdown-title .arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s;font-size:1.2em}html[data-theme=dark] .dropdown-wrapper .dropdown-title .arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.dropdown-wrapper .dropdown-title .arrow.down{transform:rotate(180deg)}html[dir=rtl] .dropdown-wrapper .dropdown-title .arrow.down{transform:rotate(-180deg)}.dropdown-wrapper .dropdown-title .arrow.end{transform:rotate(90deg)}html[dir=rtl] .dropdown-wrapper .dropdown-title .arrow.end,.dropdown-wrapper .dropdown-title .arrow.start{transform:rotate(-90deg)}html[dir=rtl] .dropdown-wrapper .dropdown-title .arrow.start{transform:rotate(90deg)}.dropdown-wrapper ul{margin:0;padding:0;list-style-type:none}.dropdown-wrapper .nav-dropdown{position:absolute;top:100%;inset-inline-end:0;overflow-y:auto;box-sizing:border-box;min-width:6rem;max-height:calc(100vh - var(--navbar-height));margin:0;padding:.5rem .75rem;border:1px solid var(--grey14);border-radius:.5rem;background:var(--bg-color);box-shadow:2px 2px 10px var(--card-shadow);text-align:start;white-space:nowrap;opacity:0;visibility:hidden;transition:all .18s ease-out;transform:scale(.9)}.dropdown-wrapper:hover .nav-dropdown,.dropdown-wrapper.open .nav-dropdown{z-index:2;opacity:1;visibility:visible;transform:none}.dropdown-wrapper .nav-link{position:relative;display:block;margin-bottom:0;border-bottom:none;color:var(--dark-grey);font-weight:400;font-size:.875rem;line-height:1.7rem;transition:color var(--color-transition)}.dropdown-wrapper .nav-link:hover,.dropdown-wrapper .nav-link.active{color:var(--theme-color)}.dropdown-wrapper .dropdown-subtitle{margin:0;padding:.5rem .25rem 0;color:var(--light-grey);font-weight:600;font-size:.75rem;line-height:2;text-transform:uppercase;transition:color var(--color-transition)}.dropdown-wrapper .dropdown-subitem-wrapper{padding:0 0 .25rem}.dropdown-wrapper .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .dropdown-item:last-child .dropdown-subtitle{padding-top:0}.dropdown-wrapper .dropdown-item:last-child .dropdown-subitem-wrapper{padding-bottom:0}.nav-screen-dropdown-title{border-width:0;background:transparent;position:relative;display:flex;align-items:center;width:100%;padding:0;color:var(--dark-grey);font-size:inherit;font-family:inherit;text-align:start;cursor:pointer}.nav-screen-dropdown-title:hover,.nav-screen-dropdown-title.active{color:var(--text-color)}.nav-screen-dropdown-title .title{flex:1}.nav-screen-dropdown-title .arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s}html[data-theme=dark] .nav-screen-dropdown-title .arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.nav-screen-dropdown-title .arrow.down{transform:rotate(180deg)}html[dir=rtl] .nav-screen-dropdown-title .arrow.down{transform:rotate(-180deg)}.nav-screen-dropdown-title .arrow.end{transform:rotate(90deg)}html[dir=rtl] .nav-screen-dropdown-title .arrow.end,.nav-screen-dropdown-title .arrow.start{transform:rotate(-90deg)}html[dir=rtl] .nav-screen-dropdown-title .arrow.start{transform:rotate(90deg)}.nav-screen-dropdown{overflow:hidden;margin:.5rem 0 0;padding:0;list-style:none;transition:transform .1s ease-out;transform:scaleY(1);transform-origin:top}.nav-screen-dropdown.hide{height:0;margin:0;transform:scaleY(0)}.nav-screen-dropdown .nav-link{position:relative;display:block;padding-inline-start:.5rem;font-weight:400;line-height:2}.nav-screen-dropdown .nav-link:hover,.nav-screen-dropdown .nav-link.active{color:var(--theme-color)}.nav-screen-dropdown .nav-link .icon{font-size:1em}.nav-screen-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.nav-screen-dropdown .dropdown-subtitle{margin:0;padding-inline-start:.25rem;color:var(--light-grey);font-weight:600;font-size:.75rem;line-height:2;text-transform:uppercase;transition:color var(--color-transition)}.nav-screen-dropdown .dropdown-subtitle .nav-link{padding:0}.nav-screen-dropdown .dropdown-subitem-wrapper{margin:0;padding:0;list-style:none}.nav-screen-dropdown .dropdown-subitem{padding-inline-start:.5rem;font-size:.9em}.nav-screen-links{display:none;padding-bottom:.75rem}@media (max-width: 719px){.nav-screen-links{display:block}}.nav-screen-links .navbar-links-item{position:relative;display:block;padding:12px 4px 11px 0;border-bottom:1px solid var(--border-color);font-size:16px;line-height:1.5rem;transition:border-bottom-color var(--color-transition)}.nav-screen-links .nav-link{display:inline-block;width:100%;color:var(--dark-grey);font-weight:400}.nav-screen-links .nav-link:hover{color:var(--text-color)}.nav-screen-links .nav-link.active{color:var(--theme-color)}.vp-nav-screen-container{max-width:320px;margin:0 auto;padding:2rem 0 4rem}#nav-screen{position:fixed;inset:var(--navbar-height) 0 0 0;z-index:150;display:none;overflow-y:auto;padding:0 2rem;background:var(--bg-color);transition:background .5s}@media (max-width: 719px){#nav-screen{display:block}}#nav-screen.fade-enter-active,#nav-screen.fade-leave-active{transition:opacity .25s}#nav-screen.fade-enter-active .vp-nav-screen-container,#nav-screen.fade-leave-active .vp-nav-screen-container{transition:transform .25s ease}#nav-screen.fade-enter-from,#nav-screen.fade-leave-to{opacity:0}#nav-screen.fade-enter-from .vp-nav-screen-container,#nav-screen.fade-leave-to .vp-nav-screen-container{transform:translateY(-8px)}#nav-screen .icon{margin-inline-end:.25em;font-size:1em}#nav-screen img.icon{vertical-align:-.125em;height:1em}.vp-outlook-wrapper{display:flex;justify-content:space-around}.vp-nav-logo{vertical-align:top;height:var(--navbar-line-height);margin-inline-end:.8rem}.vp-nav-logo.light{display:inline-block}.vp-nav-logo.dark,html[data-theme=dark] .vp-nav-logo.light{display:none}html[data-theme=dark] .vp-nav-logo.dark{display:inline-block}.vp-site-name{position:relative;color:var(--text-color);font-size:1.25rem}@media (max-width: 719px){.vp-site-name{overflow:hidden;width:calc(100vw - 9.4rem);text-overflow:ellipsis;white-space:nowrap}}.vp-brand:hover .vp-site-name{color:var(--theme-color)}.vp-navbar .vp-nav-links{display:flex;align-items:center;font-size:.875rem}.vp-navbar .nav-item{position:relative;margin:0 .25rem;line-height:2rem}.vp-navbar .nav-item:first-child{margin-inline-start:0}.vp-navbar .nav-item:last-child{margin-inline-end:0}.vp-navbar .nav-item>.nav-link{color:var(--dark-grey)}.vp-navbar .nav-item>.nav-link:after{content:" ";position:absolute;inset:auto 50% 0;height:2px;border-radius:1px;background:var(--theme-color-light);visibility:hidden;transition:inset .2s ease-in-out}.vp-navbar .nav-item>.nav-link.active{color:var(--theme-color)}.vp-navbar .nav-item>.nav-link:hover:after,.vp-navbar .nav-item>.nav-link.active:after{inset:auto 0 0;visibility:visible}.vp-navbar{--navbar-line-height: calc( var(--navbar-height) - var(--navbar-vertical-padding) * 2 );position:fixed;inset:0 0 auto;z-index:175;display:flex;align-items:center;justify-content:space-between;box-sizing:border-box;height:var(--navbar-height);padding:var(--navbar-vertical-padding) var(--navbar-horizontal-padding);background:var(--navbar-bg-color);box-shadow:0 2px 8px var(--card-shadow);line-height:var(--navbar-line-height);white-space:nowrap;transition:transform ease-in-out .3s,background var(--color-transition),box-shadow var(--color-transition);-webkit-backdrop-filter:saturate(150%) blur(12px);backdrop-filter:saturate(150%) blur(12px)}@media print{.vp-navbar{display:none}}.hide-navbar .vp-navbar.auto-hide{transform:translateY(-100%)}.vp-navbar .nav-link{padding:0 .25rem;color:var(--dark-grey)}.vp-navbar .nav-link.active{color:var(--theme-color)}.vp-navbar .nav-link .icon{margin-inline-end:.25em;font-size:1em}.vp-navbar .nav-link img.icon{vertical-align:-.125em;height:1em}.vp-navbar.hide-icon .vp-nav-links .icon{display:none!important}.vp-navbar-start,.vp-navbar-end,.vp-navbar-center{display:flex;flex:1;align-items:center}.vp-navbar-start>*,.vp-navbar-end>*,.vp-navbar-center>*{position:relative;margin:0 .25rem!important}.vp-navbar-start>*:first-child,.vp-navbar-end>*:first-child,.vp-navbar-center>*:first-child{margin-inline-start:0!important}.vp-navbar-start>*:last-child,.vp-navbar-end>*:last-child,.vp-navbar-center>*:last-child{margin-inline-end:0!important}.vp-navbar-start{justify-content:start}.vp-navbar-center{justify-content:center}.vp-navbar-end{justify-content:end}.vp-navbar .vp-repo{margin:0!important}.vp-navbar .vp-repo-link{display:inline-block;margin:auto;padding:6px;color:var(--dark-grey);line-height:1}.vp-navbar .vp-repo-link:hover,.vp-navbar .vp-repo-link:active{color:var(--theme-color)}.vp-toggle-navbar-button{border-width:0;background:transparent;cursor:pointer;position:relative;display:none;align-items:center;justify-content:center;padding:6px}@media screen and (max-width: 719px){.vp-toggle-navbar-button{display:flex}}.vp-toggle-navbar-button>span{position:relative;overflow:hidden;width:16px;height:14px}.vp-toggle-navbar-button .vp-top,.vp-toggle-navbar-button .vp-middle,.vp-toggle-navbar-button .vp-bottom{position:absolute;width:16px;height:2px;background:var(--dark-grey);transition:top .25s,background .5s,transform .25s}.vp-toggle-navbar-button .vp-top{top:0;left:0;transform:translate(0)}.vp-toggle-navbar-button .vp-middle{top:6px;left:0;transform:translate(8px)}.vp-toggle-navbar-button .vp-bottom{top:12px;left:0;transform:translate(4px)}.vp-toggle-navbar-button:hover .vp-top{top:0;left:0;transform:translate(4px)}.vp-toggle-navbar-button:hover .vp-middle{top:6;left:0;transform:translate(0)}.vp-toggle-navbar-button:hover .vp-bottom{top:12px;left:0;transform:translate(8px)}.vp-toggle-navbar-button.is-active .vp-top{top:6px;transform:translate(0) rotate(225deg)}.vp-toggle-navbar-button.is-active .vp-middle{top:6px;transform:translate(16px)}.vp-toggle-navbar-button.is-active .vp-bottom{top:6px;transform:translate(0) rotate(135deg)}.vp-toggle-navbar-button.is-active:hover .vp-top,.vp-toggle-navbar-button.is-active:hover .vp-middle,.vp-toggle-navbar-button.is-active:hover .vp-bottom{background:var(--theme-color);transition:top .25s,background .25s,transform .25s}.vp-toggle-sidebar-button{border-width:0;background:transparent;cursor:pointer;display:none;vertical-align:middle;box-sizing:content-box;width:1rem;height:1rem;padding:.5rem;font:unset;transition:transform .2s ease-in-out}@media screen and (max-width: 719px){.vp-toggle-sidebar-button{display:block;padding-inline-end:var(--navbar-mobile-horizontal-padding)}}.vp-toggle-sidebar-button:before,.vp-toggle-sidebar-button:after,.vp-toggle-sidebar-button .icon{display:block;width:100%;height:2px;border-radius:.05em;background:var(--dark-grey);transition:transform .2s ease-in-out}.vp-toggle-sidebar-button:before{content:" ";margin-top:.125em}.sidebar-open .vp-toggle-sidebar-button:before{transform:translateY(.34rem) rotate(135deg)}.vp-toggle-sidebar-button:after{content:" ";margin-bottom:.125em}.sidebar-open .vp-toggle-sidebar-button:after{transform:translateY(-.34rem) rotate(-135deg)}.vp-toggle-sidebar-button .icon{margin:.2em 0}.sidebar-open .vp-toggle-sidebar-button .icon{transform:scale(0)}.appearance-title{display:block;margin:0;padding:0 .25rem;color:var(--light-grey);font-weight:600;font-size:.75rem;line-height:2;transition:color var(--color-transition)}#appearance-switch{border-width:0;background:transparent;vertical-align:middle;padding:6px;color:var(--dark-grey);cursor:pointer;transition:color var(--color-transition)}#appearance-switch:hover{color:var(--theme-color)}#appearance-switch .icon{width:1.25rem;height:1.25rem}.outlook-button{border-width:0;background:transparent;cursor:pointer;position:relative;padding:.375rem;color:var(--dark-grey)}.outlook-button .icon{vertical-align:middle;width:1.25rem;height:1.25rem}.outlook-dropdown{position:absolute;top:100%;inset-inline-end:0;overflow-y:auto;box-sizing:border-box;min-width:100px;margin:0;padding:.5rem .75rem;border:1px solid var(--grey14);border-radius:.25rem;background:var(--bg-color);box-shadow:2px 2px 10px var(--card-shadow);text-align:start;white-space:nowrap;opacity:0;visibility:hidden;transition:all .18s ease-out;transform:scale(.8)}.outlook-dropdown>*:not(:last-child){padding-bottom:.5rem;border-bottom:1px solid var(--grey14)}.outlook-button:hover .outlook-dropdown,.outlook-button.open .outlook-dropdown{z-index:2;opacity:1;visibility:visible;transform:scale(1)}.theme-color-title{display:block;margin:0;padding:0 .25rem;color:var(--light-grey);font-weight:600;font-size:.75rem;line-height:2;transition:color var(--color-transition)}#theme-color-picker{display:flex;margin:0;padding:0;list-style-type:none;font-size:14px}#theme-color-picker li span{display:inline-block;vertical-align:middle;width:15px;height:15px;margin:0 2px;border-radius:2px}#theme-color-picker li span.theme-color,#theme-color-picker li span.theme-color html[data-theme=dark]{background:#096dd9}@media print{.full-screen-wrapper{display:none}}.full-screen-title{display:block;margin:0;padding:0 .25rem;color:var(--light-grey);font-weight:600;font-size:.75rem;line-height:2;transition:color var(--color-transition)}.full-screen,.cancel-full-screen{border-width:0;background:transparent;vertical-align:middle;padding:.375rem;color:var(--dark-grey);cursor:pointer}.full-screen:hover,.cancel-full-screen:hover{color:var(--theme-color)}.full-screen .icon,.cancel-full-screen .icon{width:1.25rem;height:1.25rem}.enter-fullscreen-icon:hover,.cancel-fullscreen-icon{color:var(--theme-color)}.cancel-fullscreen-icon:hover{color:var(--dark-grey)}.vp-sidebar-heading{display:flex;align-items:center;overflow:hidden;box-sizing:border-box;width:calc(100% - 1rem);margin:0;margin-inline:.5rem;padding:.25rem .5rem;border-width:0;border-radius:.375rem;background:transparent;color:var(--text-color);font-size:1.1em;line-height:1.5;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:color .15s ease;transform:rotate(0)}.vp-sidebar-heading.open{color:inherit}.vp-sidebar-heading.clickable:hover{background:var(--bg-color-secondary)}.vp-sidebar-heading.clickable.exact{border-inline-start-color:var(--theme-color);color:var(--theme-color)}.vp-sidebar-heading.clickable.exact a{color:inherit}.vp-sidebar-heading .vp-sidebar-title{flex:1}.vp-sidebar-heading .vp-arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s;font-size:1.5em}html[data-theme=dark] .vp-sidebar-heading .vp-arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.vp-sidebar-heading .vp-arrow.down{transform:rotate(180deg)}html[dir=rtl] .vp-sidebar-heading .vp-arrow.down{transform:rotate(-180deg)}.vp-sidebar-heading .vp-arrow.end{transform:rotate(90deg)}html[dir=rtl] .vp-sidebar-heading .vp-arrow.end,.vp-sidebar-heading .vp-arrow.start{transform:rotate(-90deg)}html[dir=rtl] .vp-sidebar-heading .vp-arrow.start{transform:rotate(90deg)}button.vp-sidebar-heading{outline:none;font-weight:inherit;font-family:inherit;line-height:inherit;text-align:start;cursor:pointer}.vp-sidebar-link{display:inline-block;box-sizing:border-box;width:calc(100% - 1rem);margin-inline:.5rem;padding:.25rem .5rem;border-radius:.375rem;color:var(--text-color);font-weight:400;font-size:1em;line-height:1.5}.vp-sidebar-link:hover{background:var(--bg-color-secondary)}.vp-sidebar-link.active{background:var(--theme-color-mask);color:var(--theme-color);font-weight:500}.vp-sidebar-link.active .icon{color:var(--theme-color)}.vp-sidebar-sub-headers .vp-sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-inline-start:none}.vp-sidebar-sub-headers .vp-sidebar-link.active{background:transparent;font-weight:500}.vp-sidebar-group:not(.collapsible) .vp-sidebar-heading:not(.clickable){color:inherit;cursor:auto}.vp-sidebar-group .vp-sidebar-group{padding-inline-start:.75rem}.vp-sidebar-group .vp-sidebar-group .vp-sidebar-heading{font-size:1em}.vp-sidebar-group .vp-sidebar-link{padding-inline-start:1.25rem}.vp-sidebar-links,.vp-sidebar-links ul{margin:0;padding:0}.vp-sidebar-links ul.vp-sidebar-sub-headers{padding-inline-start:.75rem;font-size:.95em}@media (min-width: 1440px){.has-toc .vp-sidebar-links ul.vp-sidebar-sub-headers{display:none}}.vp-sidebar-links li{list-style-type:none}.vp-sidebar>.vp-sidebar-links{padding:1.5rem 0}@media (max-width: 719px){.vp-sidebar>.vp-sidebar-links{padding:1rem 0}}.vp-sidebar>.vp-sidebar-links>li>.vp-sidebar-link{font-size:1.1em}.vp-sidebar>.vp-sidebar-links>li:not(:first-child){margin-top:.5rem}.vp-sidebar{position:fixed;top:0;bottom:0;inset-inline-start:0;z-index:1;overflow-y:auto;width:var(--sidebar-width);margin:0;padding-inline-start:calc(var(--sidebar-space) - var(--sidebar-width));background:var(--sidebar-bg-color);box-shadow:2px 0 8px var(--card-shadow);font-size:.94rem;transition:background var(--color-transition),box-shadow var(--color-transition),padding var(--transform-transition),transform var(--transform-transition);-webkit-backdrop-filter:saturate(150%) blur(12px);backdrop-filter:saturate(150%) blur(12px);scrollbar-color:var(--theme-color) var(--border-color);scrollbar-width:thin}@media (max-width: 959px){.vp-sidebar{font-size:.86em}}@media (max-width: 719px){.vp-sidebar{z-index:125;box-shadow:none;transform:translate(-100%)}html[dir=rtl] .vp-sidebar{transform:translate(100%)}}@media (min-width: 1440px){.vp-sidebar{padding-bottom:3rem;box-shadow:none;font-size:1rem}}@media print{.vp-sidebar{display:none}}.vp-sidebar a{display:inline-block;color:var(--text-color);font-weight:400}.vp-sidebar .icon{margin-inline-end:.25em;font-size:1em}.vp-sidebar img.icon{vertical-align:-.125em;height:1em}.vp-sidebar.hide-icon .icon{display:none!important}.vp-sidebar-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9;background:rgba(0,0,0,.15)}.vp-sidebar-mask.fade-enter-active,.vp-sidebar-mask.fade-leave-active{transition:opacity .25s}.vp-sidebar-mask.fade-enter-from,.vp-sidebar-mask.fade-leave-to{opacity:0}.vp-hero-info-wrapper{width:100vw;background:url(/assets/image/bg.svg) center/cover no-repeat}@media (min-width: 768px){.vp-hero-info-wrapper{height:100vh}} diff --git a/assets/style-XrnrrA7w.css b/assets/style-XrnrrA7w.css new file mode 100644 index 0000000..6d197b7 --- /dev/null +++ b/assets/style-XrnrrA7w.css @@ -0,0 +1 @@ +html[data-theme=dark]{--text-color: #9e9e9e;--bg-color: #0d1117;--bg-color-secondary: #161b22;--bg-color-tertiary: #21262c;--border-color: #30363d;--box-shadow: #282a32;--card-shadow: rgba(0, 0, 0, .3);--black: #fff;--dark-grey: #999;--light-grey: #666;--white: #000;--grey3: #bbb;--grey12: #333;--grey14: #111;--bg-color-light: #161b22;--bg-color-back: #0d1117;--bg-color-float: #161b22;--bg-color-blur: rgba(13, 17, 23, .9);--bg-color-float-blur: rgba(22, 27, 34, .9);--text-color-light: #a8a8a8;--text-color-lighter: #b1b1b1;--text-color-bright: #c5c5c5;--border-color-light: #2e333a;--border-color-dark: #394048}:root{--theme-color: #096dd9;--text-color: #2c3e50;--bg-color: #fff;--bg-color-secondary: #f8f8f8;--bg-color-tertiary: #efeef4;--border-color: #eaecef;--box-shadow: #f0f1f2;--card-shadow: rgba(0, 0, 0, .15);--black: #000;--dark-grey: #666;--light-grey: #999;--white: #fff;--grey3: #333;--grey12: #bbb;--grey14: #eee;--navbar-height: 3.75rem;--navbar-horizontal-padding: 1.5rem;--navbar-vertical-padding: .7rem;--navbar-mobile-height: 3.25rem;--navbar-mobile-horizontal-padding: 1rem;--navbar-mobile-vertical-padding: .5rem;--sidebar-width: 18rem;--sidebar-mobile-width: 16rem;--content-width: 780px;--home-page-width: 1160px;--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", STHeiti, "Microsoft YaHei", SimSun, sans-serif;--font-family-heading: Georgia Pro, Crimson, Georgia, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", STHeiti, "Microsoft YaHei", SimSun, sans-serif;--font-family-mono: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;--line-numbers-width: 2.5rem;--color-transition: .3s ease;--transform-transition: .3s ease;--vp-bg: var(--bg-color);--vp-bgl: var(--bg-color-light);--vp-bglt: var(--bg-color-tertiary);--vp-c: var(--text-color);--vp-cl: var(--text-color-light);--vp-clt: var(--text-color-lighter);--vp-brc: var(--border-color);--vp-brcd: var(--border-color-dark);--vp-tc: var(--theme-color);--vp-tcl: var(--theme-color-light);--vp-ct: var(--color-transition);--vp-tt: var(--transform-transition);--bg-color-light: #fff;--bg-color-back: #f8f8f8;--bg-color-float: #fff;--bg-color-blur: rgba(255, 255, 255, .9);--bg-color-float-blur: rgba(255, 255, 255, .9);--text-color-light: #3a5169;--text-color-lighter: #476582;--text-color-bright: #6a8bad;--border-color-light: #eceef1;--border-color-dark: #cfd4db;--theme-color-dark: #0862c3;--theme-color-light: #0a7bf4;--theme-color-mask: rgba(9, 109, 217, .15)}:root{--badge-tip-color: #42b983;--badge-warning-color: #f4cd00;--badge-danger-color: #f55;--badge-info-color: #0295ff;--badge-note-color: #666}.vp-badge{display:inline-block;vertical-align:center;height:18px;padding:0 6px;border-radius:3px;background:var(--vp-tc);color:var(--white);font-size:14px;line-height:18px;transition:background var(--vp-ct),color var(--vp-ct)}.vp-badge+.vp-badge{margin-inline-start:5px}h1 .vp-badge,h2 .vp-badge,h3 .vp-badge,h4 .vp-badge,h5 .vp-badge,h6 .vp-badge{vertical-align:top}.vp-badge.tip{background:var(--badge-tip-color)}.vp-badge.warning{background:var(--badge-warning-color)}.vp-badge.danger{background:var(--badge-danger-color)}.vp-badge.info{background:var(--badge-info-color)}.vp-badge.note{background:var(--badge-note-color)}.font-icon{display:inline-block}.theme-hope-content .font-icon{vertical-align:middle}:root{--balloon-border-radius: 2px;--balloon-color: rgba(16, 16, 16, .95);--balloon-text-color: #fff;--balloon-font-size: 12px;--balloon-move: 4px}button[aria-label][data-balloon-pos]{overflow:visible}[aria-label][data-balloon-pos]{position:relative;cursor:pointer}[aria-label][data-balloon-pos]:after{opacity:0;pointer-events:none;transition:all .18s ease-out .18s;text-indent:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-weight:400;font-style:normal;text-shadow:none;font-size:var(--balloon-font-size);background:var(--balloon-color);border-radius:2px;color:var(--balloon-text-color);border-radius:var(--balloon-border-radius);content:attr(aria-label);padding:.5em 1em;position:absolute;white-space:nowrap;z-index:10}[aria-label][data-balloon-pos]:before{width:0;height:0;border:5px solid transparent;border-top-color:var(--balloon-color);opacity:0;pointer-events:none;transition:all .18s ease-out .18s;content:"";position:absolute;z-index:10}[aria-label][data-balloon-pos]:hover:before,[aria-label][data-balloon-pos]:hover:after,[aria-label][data-balloon-pos][data-balloon-visible]:before,[aria-label][data-balloon-pos][data-balloon-visible]:after,[aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:before,[aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:after{opacity:1;pointer-events:none}[aria-label][data-balloon-pos].font-awesome:after{font-family:FontAwesome,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}[aria-label][data-balloon-pos][data-balloon-break]:after{white-space:pre}[aria-label][data-balloon-pos][data-balloon-break][data-balloon-length]:after{white-space:pre-line;word-break:break-word}[aria-label][data-balloon-pos][data-balloon-blunt]:before,[aria-label][data-balloon-pos][data-balloon-blunt]:after{transition:none}[aria-label][data-balloon-pos][data-balloon-pos=up]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos=up][data-balloon-visible]:after,[aria-label][data-balloon-pos][data-balloon-pos=down]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos=down][data-balloon-visible]:after{transform:translate(-50%)}[aria-label][data-balloon-pos][data-balloon-pos=up]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos=up][data-balloon-visible]:before,[aria-label][data-balloon-pos][data-balloon-pos=down]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos=down][data-balloon-visible]:before{transform:translate(-50%)}[aria-label][data-balloon-pos][data-balloon-pos*=-left]:after{left:0}[aria-label][data-balloon-pos][data-balloon-pos*=-left]:before{left:5px}[aria-label][data-balloon-pos][data-balloon-pos*=-right]:after{right:0}[aria-label][data-balloon-pos][data-balloon-pos*=-right]:before{right:5px}[aria-label][data-balloon-pos][data-balloon-po*=-left]:hover:after,[aria-label][data-balloon-pos][data-balloon-po*=-left][data-balloon-visible]:after,[aria-label][data-balloon-pos][data-balloon-pos*=-right]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos*=-right][data-balloon-visible]:after{transform:translate(0)}[aria-label][data-balloon-pos][data-balloon-po*=-left]:hover:before,[aria-label][data-balloon-pos][data-balloon-po*=-left][data-balloon-visible]:before,[aria-label][data-balloon-pos][data-balloon-pos*=-right]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos*=-right][data-balloon-visible]:before{transform:translate(0)}[aria-label][data-balloon-pos][data-balloon-pos^=up]:before,[aria-label][data-balloon-pos][data-balloon-pos^=up]:after{bottom:100%;transform-origin:top;transform:translateY(var(--balloon-move))}[aria-label][data-balloon-pos][data-balloon-pos^=up]:after{margin-bottom:10px}[aria-label][data-balloon-pos][data-balloon-pos=up]:before,[aria-label][data-balloon-pos][data-balloon-pos=up]:after{left:50%;transform:translate(-50%,var(--balloon-move))}[aria-label][data-balloon-pos][data-balloon-pos^=down]:before,[aria-label][data-balloon-pos][data-balloon-pos^=down]:after{top:100%;transform:translateY(calc(var(--balloon-move) * -1))}[aria-label][data-balloon-pos][data-balloon-pos^=down]:after{margin-top:10px}[aria-label][data-balloon-pos][data-balloon-pos^=down]:before{width:0;height:0;border:5px solid transparent;border-bottom-color:var(--balloon-color)}[aria-label][data-balloon-pos][data-balloon-pos=down]:after,[aria-label][data-balloon-pos][data-balloon-pos=down]:before{left:50%;transform:translate(-50%,calc(var(--balloon-move) * -1))}[aria-label][data-balloon-pos][data-balloon-pos=left]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos=left][data-balloon-visible]:after,[aria-label][data-balloon-pos][data-balloon-pos=right]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos=right][data-balloon-visible]:after{transform:translateY(-50%)}[aria-label][data-balloon-pos][data-balloon-pos=left]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos=left][data-balloon-visible]:before,[aria-label][data-balloon-pos][data-balloon-pos=right]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos=right][data-balloon-visible]:before{transform:translateY(-50%)}[aria-label][data-balloon-pos][data-balloon-pos=left]:after,[aria-label][data-balloon-pos][data-balloon-pos=left]:before{right:100%;top:50%;transform:translate(var(--balloon-move),-50%)}[aria-label][data-balloon-pos][data-balloon-pos=left]:after{margin-right:10px}[aria-label][data-balloon-pos][data-balloon-pos=left]:before{width:0;height:0;border:5px solid transparent;border-left-color:var(--balloon-color)}[aria-label][data-balloon-pos][data-balloon-pos=right]:after,[aria-label][data-balloon-pos][data-balloon-pos=right]:before{left:100%;top:50%;transform:translate(calc(var(--balloon-move) * -1),-50%)}[aria-label][data-balloon-pos][data-balloon-pos=right]:after{margin-left:10px}[aria-label][data-balloon-pos][data-balloon-pos=right]:before{width:0;height:0;border:5px solid transparent;border-right-color:var(--balloon-color)}[aria-label][data-balloon-pos][data-balloon-length]:after{white-space:normal}[aria-label][data-balloon-pos][data-balloon-length=small]:after{width:80px}[aria-label][data-balloon-pos][data-balloon-length=medium]:after{width:150px}[aria-label][data-balloon-pos][data-balloon-length=large]:after{width:260px}[aria-label][data-balloon-pos][data-balloon-length=xlarge]:after{width:380px}@media screen and (max-width: 768px){[aria-label][data-balloon-pos][data-balloon-length=xlarge]:after{width:90vw}}[aria-label][data-balloon-pos][data-balloon-length=fit]:after{width:100%}.vp-back-to-top-button{border-width:0;background:transparent;cursor:pointer;position:fixed!important;bottom:64px;inset-inline-end:1rem;z-index:100;width:48px;height:48px;padding:8px;border-radius:50%;background:var(--vp-bg);color:var(--vp-tc);box-shadow:2px 2px 10px 4px var(--card-shadow);transition:background var(--vp-ct),color var(--vp-ct),box-shadow var(--vp-ct)}@media (max-width: 719px){.vp-back-to-top-button{width:36px;height:36px}}@media print{.vp-back-to-top-button{display:none}}.vp-back-to-top-button:hover{color:var(--vp-tcl)}.vp-back-to-top-button .back-to-top-icon{overflow:hidden;width:100%;border-radius:50%;fill:currentcolor}.vp-scroll-progress{position:absolute;right:-2px;bottom:-2px;width:52px;height:52px}@media (max-width: 719px){.vp-scroll-progress{width:40px;height:40px}}.vp-scroll-progress svg{width:100%;height:100%}.vp-scroll-progress circle{opacity:.9;fill:none;stroke:var(--vp-tc);transform:rotate(-90deg);transform-origin:50% 50%;r:22;stroke-dasharray:0% 314.1593%;stroke-width:3px}@media (max-width: 719px){.vp-scroll-progress circle{r:18}}.fade-enter-active,.fade-leave-active{transition:opacity var(--vp-ct)}.fade-enter-from,.fade-leave-to{opacity:0}@media screen{.sr-only{position:absolute;overflow:hidden;clip:rect 0,0,0,0;width:1px;height:1px;margin:-1px;padding:0;border:0}}@media print{.sr-only{display:none}}.vp-catalog-wrapper{margin-top:8px;margin-bottom:8px}.vp-catalog-wrapper.index ol{padding-inline-start:0}.vp-catalog-wrapper.index li{list-style-type:none}.vp-catalog-wrapper.index .vp-catalogs{padding-inline-start:0}.vp-catalog-wrapper.index .vp-catalog{list-style-type:none}.vp-catalog-wrapper.index .vp-catalog-title:before{content:"§" counter(catalog-item,upper-roman) " "}.vp-catalog-wrapper.index .vp-child-catalogs{counter-reset:child-catalog}.vp-catalog-wrapper.index .vp-child-catalog{counter-increment:child-catalog}.vp-catalog-wrapper.index .vp-child-catalog .vp-catalog-title:before{content:counter(catalog-item) "." counter(child-catalog) " "}.vp-catalog-wrapper.index .vp-sub-catalogs{padding-inline-start:.5rem}.vp-catalogs{margin:0;counter-reset:catalog-item}.vp-catalogs.deep{padding-inline-start:0}.vp-catalogs.deep .vp-catalog{list-style-type:none}.vp-catalogs .font-icon{vertical-align:baseline;margin-inline-end:.25rem}.vp-catalog{counter-increment:catalog-item}.vp-catalog-main-title{margin-top:calc(.5rem - var(--navbar-height, 3.6rem));margin-bottom:.5rem;padding-top:var(--navbar-height, 3.6rem);font-weight:500;font-size:1.75rem}.vp-catalog-main-title:first-child{margin-bottom:.5rem!important}.vp-catalog-main-title:only-child{margin-bottom:0!important}.vp-catalog-child-title{margin-bottom:.5rem!important}.vp-catalog-child-title.has-children{margin-top:calc(.5rem - var(--navbar-height, 3.6rem));padding-top:var(--navbar-height, 3.6rem);border-bottom:1px solid var(--vp-brc);font-weight:500;font-size:1.3rem;transition:border-color var(--vp-ct)}.vp-catalog-child-title.has-children:only-child{margin-bottom:0!important}.vp-catalog-sub-title{font-weight:500;font-size:1.1rem}.vp-catalog-sub-title:only-child{margin-bottom:0!important}.vp-catalog-title{color:inherit;text-decoration:none}.vp-catalog-title:hover{color:var(--vp-tc)}.vp-child-catalogs{margin:0}.vp-child-catalog{list-style-type:disc}.vp-sub-catalogs{counter-reset:sub-catalog}.vp-sub-catalog{counter-increment:sub-catalog}.vp-sub-catalog .vp-link:before{content:counter(catalog-item) "." counter(child-catalog) "." counter(sub-catalog) " "}.vp-sub-catalogs-wrapper{display:flex;flex-wrap:wrap}.vp-sub-catalog-link{display:inline-block;margin:4px 8px;padding:4px 8px;border-radius:6px;background-color:var(--vp-bgl);line-height:1.5;overflow-wrap:break-word;transition:background-color var(--vp-ct),color var(--vp-ct)}.vp-sub-catalog-link:hover{background-color:var(--vp-tcl);color:var(--vp-bg);text-decoration:none!important}.vp-empty-catalog{font-size:1.25rem;text-align:center}:root{--external-link-icon-color: #aaa}.external-link-icon{position:relative;display:inline-block;color:var(--external-link-icon-color);vertical-align:middle;top:-1px}@media print{.external-link-icon{display:none}}.external-link-icon-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}:root{--nprogress-color: #29d;--nprogress-z-index: 1031}#nprogress{pointer-events:none}#nprogress .bar{background:var(--nprogress-color);position:fixed;z-index:var(--nprogress-z-index);top:0;left:0;width:100%;height:2px}.giscus-wrapper{max-width:var(--content-width, 740px);margin:0 auto;padding:2rem 2.5rem}@media (max-width: 959px){.giscus-wrapper{padding:1.5rem}}@media (max-width: 419px){.giscus-wrapper{padding:1rem 1.5rem}}@media print{.giscus-wrapper{max-width:unset}}@media print{.giscus-wrapper{display:none!important}}.giscus-wrapper.input-top .giscus{margin-bottom:-3rem}:root{--copy-icon: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E");--copied-icon: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4'/%3E%3C/svg%3E")}div[class*=language-]>button.copy-code-button{border-width:0;background:transparent;position:absolute;outline:none;cursor:pointer}@media print{div[class*=language-]>button.copy-code-button{display:none}}div[class*=language-]>button.copy-code-button .copy-icon{background:currentcolor;-webkit-mask-image:var(--copy-icon);mask-image:var(--copy-icon);-webkit-mask-position:50%;mask-position:50%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:1em;mask-size:1em}div[class*=language-]>button.copy-code-button:not(.fancy){border-width:0;background:transparent;cursor:pointer;position:absolute;top:.5em;right:.5em;z-index:5;width:2.5rem;height:2.5rem;padding:0;border-radius:.5rem;opacity:0;transition:opacity .4s}div[class*=language-]>button.copy-code-button:not(.fancy):hover,div[class*=language-]>button.copy-code-button:not(.fancy).copied{background:var(--code-hl-bg-color, rgba(0, 0, 0, .66))}div[class*=language-]>button.copy-code-button:not(.fancy):focus,div[class*=language-]>button.copy-code-button:not(.fancy).copied{opacity:1}div[class*=language-]>button.copy-code-button:not(.fancy).copied:after{content:attr(data-copied);position:absolute;top:0;right:calc(100% + .25rem);display:block;height:1.25rem;padding:.625rem;border-radius:.5rem;background:var(--code-hl-bg-color, rgba(0, 0, 0, .66));color:var(--code-ln-color, #9e9e9e);font-weight:500;line-height:1.25rem;white-space:nowrap}div[class*=language-]>button.copy-code-button:not(.fancy) .copy-icon{width:1.25rem;height:1.25rem;padding:.625rem;color:var(--code-ln-color, #9e9e9e);font-size:1.25rem}div[class*=language-]>button.copy-code-button.fancy{right:-14px;bottom:-14px;z-index:5;width:2rem;height:2rem;padding:7px 8px;border-radius:50%;background:#339af0;color:#fff}@media (max-width: 419px){div[class*=language-]>button.copy-code-button.fancy{right:0;bottom:0;width:28px;height:28px;border-radius:50% 10% 0}}div[class*=language-]>button.copy-code-button.fancy:hover{background:#228be6}div[class*=language-]>button.copy-code-button.fancy .copy-icon{width:100%;height:100%;color:#fff;font-size:1.25rem}@media (max-width: 419px){div[class*=language-]>button.copy-code-button.fancy .copy-icon{position:relative;top:2px;left:2px}}div[class*=language-]>button.copy-code-button.copied .copy-icon{-webkit-mask-image:var(--copied-icon);mask-image:var(--copied-icon)}div[class*=language-]:hover:before{display:none}div[class*=language-]:hover>button.copy-code-button:not(.fancy){opacity:1}.theme-hope-content figure{position:relative;display:flex;flex-direction:column;width:auto;margin:1rem auto;text-align:center;transition:transform var(--vp-tt)}.theme-hope-content figure img{overflow:hidden;margin:0 auto;border-radius:8px}.theme-hope-content figure img[tabindex]:hover,.theme-hope-content figure img[tabindex]:focus{box-shadow:2px 2px 10px 0 var(--card-shadow)}@media print{.theme-hope-content figure>a[href^="http://"]:after,.theme-hope-content figure>a[href^="https://"]:after{content:""}}.theme-hope-content figure>a .external-link-icon{display:none}.theme-hope-content figure figcaption{display:inline-block;margin:6px auto;font-size:.8rem}:root{--important-title-color: #230555;--important-bg-color: #f4eefe;--important-border-color: #a371f7;--important-code-bg-color: rgb(163 113 247 / 10%);--info-title-color: #193c47;--info-bg-color: #eef9fd;--info-border-color: #4cb3d4;--info-code-bg-color: rgb(76 179 212 / 10%);--note-title-color: #474748;--note-bg-color: #fdfdfe;--note-border-color: #ccc;--note-code-bg-color: rgb(212 213 216 / 20%);--tip-title-color: #003100;--tip-bg-color: #e6f6e6;--tip-border-color: #009400;--tip-code-bg-color: rgb(0 148 0 / 15%);--warning-title-color: #4d3800;--warning-bg-color: #fff8e6;--warning-border-color: #e6a700;--warning-code-bg-color: rgb(230 167 0 / 15%);--caution-title-color: #4b1113;--caution-bg-color: #ffebec;--caution-border-color: #e13238;--caution-code-bg-color: rgb(225 50 56 / 15%);--detail-bg-color: #eee;--detail-text-color: inherit;--detail-code-bg-color: rgb(127 127 127 / 15%)}html[data-theme=dark]{--important-title-color: #f4eefe;--important-bg-color: #230555;--info-title-color: #eef9fd;--info-bg-color: #193c47;--note-title-color: #fdfdfe;--note-bg-color: #474748;--tip-title-color: #e6f6e6;--tip-bg-color: #003100;--warning-title-color: #fff8e6;--warning-bg-color: #4d3800;--caution-title-color: #ffebec;--caution-bg-color: #4b1113;--detail-bg-color: #333;--detail-text-color: #a8a8a8}.hint-container{position:relative;transition:background var(--vp-ct),border-color var(--vp-ct),color var(--vp-ct)}@media print{.hint-container{page-break-inside:avoid}}.hint-container .hint-container-title{position:relative;font-weight:600;line-height:1.25}.hint-container.important,.hint-container.info,.hint-container.note,.hint-container.tip,.hint-container.warning,.hint-container.caution{margin:1rem 0;padding:.25rem 1rem;border-inline-start-width:.3rem;border-inline-start-style:solid;border-radius:.5rem;color:inherit}@media (max-width: 419px){.hint-container.important,.hint-container.info,.hint-container.note,.hint-container.tip,.hint-container.warning,.hint-container.caution{margin-inline:-.75rem}}.hint-container.important .hint-container-title,.hint-container.info .hint-container-title,.hint-container.note .hint-container-title,.hint-container.tip .hint-container-title,.hint-container.warning .hint-container-title,.hint-container.caution .hint-container-title{padding-inline-start:1.75rem}@media print{.hint-container.important .hint-container-title,.hint-container.info .hint-container-title,.hint-container.note .hint-container-title,.hint-container.tip .hint-container-title,.hint-container.warning .hint-container-title,.hint-container.caution .hint-container-title{padding-inline-start:0}}.hint-container.important .hint-container-title:before,.hint-container.info .hint-container-title:before,.hint-container.note .hint-container-title:before,.hint-container.tip .hint-container-title:before,.hint-container.warning .hint-container-title:before,.hint-container.caution .hint-container-title:before{content:" ";position:absolute;top:calc(50% - .6125em);inset-inline-start:0;width:1.25em;height:1.25em;background-position:left;background-repeat:no-repeat}@media print{.hint-container.important .hint-container-title:before,.hint-container.info .hint-container-title:before,.hint-container.note .hint-container-title:before,.hint-container.tip .hint-container-title:before,.hint-container.warning .hint-container-title:before,.hint-container.caution .hint-container-title:before{display:none}}.hint-container.important p,.hint-container.info p,.hint-container.note p,.hint-container.tip p,.hint-container.warning p,.hint-container.caution p{line-height:1.5}.hint-container.important a,.hint-container.info a,.hint-container.note a,.hint-container.tip a,.hint-container.warning a,.hint-container.caution a{color:var(--vp-tc)}.hint-container.important{border-color:var(--important-border-color);background:var(--important-bg-color)}.hint-container.important>.hint-container-title{color:var(--important-title-color)}.hint-container.important>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M512 981.333a84.992 84.992 0 0 1-84.907-84.906h169.814A84.992 84.992 0 0 1 512 981.333zm384-128H128v-42.666l85.333-85.334v-256A298.325 298.325 0 0 1 448 177.92V128a64 64 0 0 1 128 0v49.92a298.325 298.325 0 0 1 234.667 291.413v256L896 810.667v42.666zm-426.667-256v85.334h85.334v-85.334h-85.334zm0-256V512h85.334V341.333h-85.334z' fill='%23a371f7'/%3E%3C/svg%3E")}.hint-container.important code{background:var(--important-code-bg-color)}.hint-container.info{border-color:var(--info-border-color);background:var(--info-bg-color)}.hint-container.info>.hint-container-title{color:var(--info-title-color)}.hint-container.info>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-11v6h2v-6h-2zm0-4v2h2V7h-2z' fill='%234cb3d4'/%3E%3C/svg%3E")}.hint-container.info code{background:var(--info-code-bg-color)}.hint-container.note{border-color:var(--note-border-color);background:var(--note-bg-color)}.hint-container.note>.hint-container-title{color:var(--note-title-color)}.hint-container.note>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-11v6h2v-6h-2zm0-4v2h2V7h-2z' fill='%23ccc'/%3E%3C/svg%3E")}.hint-container.note code{background:var(--note-code-bg-color)}.hint-container.tip{border-color:var(--tip-border-color);background:var(--tip-bg-color)}.hint-container.tip>.hint-container-title{color:var(--tip-title-color)}.hint-container.tip>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23009400' d='M7.941 18c-.297-1.273-1.637-2.314-2.187-3a8 8 0 1 1 12.49.002c-.55.685-1.888 1.726-2.185 2.998H7.94zM16 20v1a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2v-1h8zm-3-9.995V6l-4.5 6.005H11v4l4.5-6H13z'/%3E%3C/svg%3E")}.hint-container.tip code{background:var(--tip-code-bg-color)}.hint-container.warning{border-color:var(--warning-border-color);background:var(--warning-bg-color)}.hint-container.warning>.hint-container-title{color:var(--warning-title-color)}.hint-container.warning>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M576.286 752.57v-95.425q0-7.031-4.771-11.802t-11.3-4.772h-96.43q-6.528 0-11.3 4.772t-4.77 11.802v95.424q0 7.031 4.77 11.803t11.3 4.77h96.43q6.528 0 11.3-4.77t4.77-11.803zm-1.005-187.836 9.04-230.524q0-6.027-5.022-9.543-6.529-5.524-12.053-5.524H456.754q-5.524 0-12.053 5.524-5.022 3.516-5.022 10.547l8.538 229.52q0 5.023 5.022 8.287t12.053 3.265h92.913q7.032 0 11.803-3.265t5.273-8.287zM568.25 95.65l385.714 707.142q17.578 31.641-1.004 63.282-8.538 14.564-23.354 23.102t-31.892 8.538H126.286q-17.076 0-31.892-8.538T71.04 866.074q-18.582-31.641-1.004-63.282L455.75 95.65q8.538-15.57 23.605-24.61T512 62t32.645 9.04 23.605 24.61z' fill='%23e6a700'/%3E%3C/svg%3E")}.hint-container.warning code{background:var(--warning-code-bg-color)}.hint-container.caution{border-color:var(--caution-border-color);background:var(--caution-bg-color)}.hint-container.caution>.hint-container-title{color:var(--caution-title-color)}.hint-container.caution>.hint-container-title:before{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2c5.523 0 10 4.477 10 10v3.764a2 2 0 0 1-1.106 1.789L18 19v1a3 3 0 0 1-2.824 2.995L14.95 23a2.5 2.5 0 0 0 .044-.33L15 22.5V22a2 2 0 0 0-1.85-1.995L13 20h-2a2 2 0 0 0-1.995 1.85L9 22v.5c0 .171.017.339.05.5H9a3 3 0 0 1-3-3v-1l-2.894-1.447A2 2 0 0 1 2 15.763V12C2 6.477 6.477 2 12 2zm-4 9a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm8 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4z' fill='%23e13238'/%3E%3C/svg%3E")}.hint-container.caution code{background:var(--caution-code-bg-color)}.hint-container.details{position:relative;display:block;margin:1rem 0;padding:1.5rem;border-radius:.5rem;background:var(--detail-bg-color);color:var(--detail-text-color);transition:background var(--vp-tt),color var(--vp-tt)}@media (max-width: 419px){.hint-container.details{margin-inline:-.75rem}}.hint-container.details h4{margin-top:0}.hint-container.details figure:last-child,.hint-container.details p:last-child{margin-bottom:0;padding-bottom:0}.hint-container.details a{color:var(--vp-tc)}.hint-container.details code{background:var(--detail-code-bg-color)}.hint-container.details summary{position:relative;margin:-1.5rem;padding-block:1.5rem;padding-inline:4rem 1.5rem;list-style:none;cursor:pointer}.hint-container.details summary::-webkit-details-marker{display:none}.hint-container.details summary::marker{color:transparent;font-size:0}.hint-container.details summary:before,.hint-container.details summary:after{content:" ";position:absolute;top:calc(50% - .75rem);inset-inline-start:1.5rem;width:1.5rem;height:1.5rem}.hint-container.details summary:before{border-radius:50%;background:#ccc;transition:background var(--vp-ct),transform var(--vp-tt)}html[data-theme=dark] .hint-container.details summary:before{background:#555}.hint-container.details summary:after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");line-height:normal;transition:transform var(--vp-tt);transform:rotate(90deg)}html[data-theme=dark] .hint-container.details summary:after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.hint-container.details[open]>summary{margin-bottom:.5em}.hint-container.details[open]>summary:after{transform:rotate(180deg)}.mermaid-preview .node rect,.mermaid-preview .clusters rect,.mermaid-preview rect.note,.mermaid-preview .actor,.mermaid-wrapper .node rect,.mermaid-wrapper .clusters rect,.mermaid-wrapper rect.note,.mermaid-wrapper .actor{rx:8;ry:8}.mermaid-wrapper{position:relative;overflow-x:auto;padding:.6em .4em;text-align:center;transition:all 1s}@media (max-width: 419px){.mermaid-wrapper{margin:0 -1.5rem;padding:.6em 0}}.mermaid-loading{color:var(--vp-tc)}@media print{.mermaid-content{page-break-inside:avoid}}.mermaid-actions{text-align:end}@media print{.mermaid-actions{display:none}}.mermaid-preview{position:fixed;top:0;right:0;bottom:0;left:0;z-index:800;display:flex;align-items:center;justify-content:center;background-color:#fffc}html[data-theme=dark] .mermaid-preview{background-color:#000c}.mermaid-preview svg{max-width:100%;max-height:100%}.preview-button,.download-button{border-width:0;background:transparent;cursor:pointer;width:2rem;height:2rem;padding:.25rem;color:var(--dark-grey)}@media (max-width: 719px){.preview-button,.download-button{width:1.5rem;height:1.5rem}}.preview-button:hover,.download-button:hover{color:var(--vp-tc)}.preview-button svg,.download-button svg{width:100%;height:100%}:root{--tab-bg-color: var(--vp-bg);--tab-nav-text-color: var(--vp-c);--tab-nav-bg-color: #e0e0e0;--tab-nav-hover-color: #eee}html[data-theme=dark]{--tab-nav-bg-color: #34343f;--tab-nav-hover-color: #2d2d38}.vp-tabs{margin:1.5rem 0;border:2px solid var(--vp-brc);border-radius:8px}@media (max-width: 419px){.theme-hope-content>.vp-tabs{margin-inline:-1.5rem;border-radius:0}}.vp-tabs-nav{overflow-x:auto;margin:0;padding:0;border-radius:8px 8px 0 0;background:var(--tab-nav-bg-color);list-style:none;white-space:nowrap;transition:background var(--vp-ct)}@media print{.vp-tabs-nav{display:none}}@media (max-width: 419px){.vp-tabs-nav{border-radius:0}}.vp-tab-nav{border-width:0;position:relative;min-width:4rem;margin:0;padding:.5em 1em;border-radius:8px 8px 0 0;background:transparent;color:var(--tab-nav-text-color);font-weight:600;font-size:.85em;line-height:1.75;cursor:pointer;transition:background var(--vp-ct),color var(--vp-ct)}.vp-tab-nav:hover{background:var(--tab-nav-hover-color)}.vp-tab-nav:before,.vp-tab-nav:after{content:" ";position:absolute;bottom:0;z-index:1;width:8px;height:8px}.vp-tab-nav:before{right:100%}.vp-tab-nav:after{left:100%}.vp-tab-nav.active{background:var(--tab-bg-color)}.vp-tab-nav.active:before{background:radial-gradient(16px at left top,transparent 50%,var(--tab-bg-color) 50%)}.vp-tab-nav.active:after{background:radial-gradient(16px at right top,transparent 50%,var(--tab-bg-color) 50%)}.vp-tab-nav:first-child:before{display:none}.vp-tab{display:none;padding:1rem .75rem;background:var(--tab-bg-color);transition:background var(--vp-ct)}@media print{.vp-tab{display:block;padding:.5rem}}.vp-tab.active{display:block}.vp-tab:nth-child(2) .vp-tab-title{border-top:none}.vp-tab-title{display:none;padding:.25rem 0;border-top:1px solid var(--vp-brc);font-weight:500}@media print{.vp-tab-title{display:block}}/*! PhotoSwipe main CSS by Dmytro Semenov | photoswipe.com */.pswp{--pswp-bg: #000;--pswp-placeholder-bg: #222;--pswp-root-z-index: 100000;--pswp-preloader-color: rgba(79, 79, 79, .4);--pswp-preloader-color-secondary: rgba(255, 255, 255, .9);--pswp-icon-color: #fff;--pswp-icon-color-secondary: #4f4f4f;--pswp-icon-stroke-color: #4f4f4f;--pswp-icon-stroke-width: 2px;--pswp-error-text-color: var(--pswp-icon-color)}.pswp{position:fixed;top:0;left:0;width:100%;height:100%;z-index:var(--pswp-root-z-index);display:none;touch-action:none;outline:0;opacity:.003;contain:layout style size;-webkit-tap-highlight-color:rgba(0,0,0,0)}.pswp:focus{outline:0}.pswp *{box-sizing:border-box}.pswp img{max-width:none}.pswp--open{display:block}.pswp,.pswp__bg{transform:translateZ(0);will-change:opacity}.pswp__bg{opacity:.005;background:var(--pswp-bg)}.pswp,.pswp__scroll-wrap{overflow:hidden}.pswp__scroll-wrap,.pswp__bg,.pswp__container,.pswp__item,.pswp__content,.pswp__img,.pswp__zoom-wrap{position:absolute;top:0;left:0;width:100%;height:100%}.pswp__img,.pswp__zoom-wrap{width:auto;height:auto}.pswp--click-to-zoom.pswp--zoom-allowed .pswp__img{cursor:zoom-in}.pswp--click-to-zoom.pswp--zoomed-in .pswp__img{cursor:move;cursor:grab}.pswp--click-to-zoom.pswp--zoomed-in .pswp__img:active{cursor:grabbing}.pswp--no-mouse-drag.pswp--zoomed-in .pswp__img,.pswp--no-mouse-drag.pswp--zoomed-in .pswp__img:active,.pswp__img{cursor:zoom-out}.pswp__container,.pswp__img,.pswp__button,.pswp__counter{-webkit-user-select:none;-moz-user-select:none;user-select:none}.pswp__item{z-index:1;overflow:hidden}.pswp__hidden{display:none!important}.pswp__content{pointer-events:none}.pswp__content>*{pointer-events:auto}.pswp__error-msg-container{display:grid}.pswp__error-msg{margin:auto;font-size:1em;line-height:1;color:var(--pswp-error-text-color)}.pswp .pswp__hide-on-close{opacity:.005;will-change:opacity;transition:opacity var(--pswp-transition-duration) cubic-bezier(.4,0,.22,1);z-index:10;pointer-events:none}.pswp--ui-visible .pswp__hide-on-close{opacity:1;pointer-events:auto}.pswp__button{position:relative;display:block;width:50px;height:60px;padding:0;margin:0;overflow:hidden;cursor:pointer;background:none;border:0;box-shadow:none;opacity:.85;-webkit-appearance:none;-webkit-touch-callout:none}.pswp__button:hover,.pswp__button:active,.pswp__button:focus{transition:none;padding:0;background:none;border:0;box-shadow:none;opacity:1}.pswp__button:disabled{opacity:.3;cursor:auto}.pswp__icn{fill:var(--pswp-icon-color);color:var(--pswp-icon-color-secondary)}.pswp__icn{position:absolute;top:14px;left:9px;width:32px;height:32px;overflow:hidden;pointer-events:none}.pswp__icn-shadow{stroke:var(--pswp-icon-stroke-color);stroke-width:var(--pswp-icon-stroke-width);fill:none}.pswp__icn:focus{outline:0}div.pswp__img--placeholder,.pswp__img--with-bg{background:var(--pswp-placeholder-bg)}.pswp__top-bar{position:absolute;left:0;top:0;width:100%;height:60px;display:flex;flex-direction:row;justify-content:flex-end;z-index:10;pointer-events:none!important}.pswp__top-bar>*{pointer-events:auto;will-change:opacity}.pswp__button--close{margin-right:6px}.pswp__button--arrow{position:absolute;width:75px;height:100px;top:50%;margin-top:-50px}.pswp__button--arrow:disabled{display:none;cursor:default}.pswp__button--arrow .pswp__icn{top:50%;margin-top:-30px;width:60px;height:60px;background:none;border-radius:0}.pswp--one-slide .pswp__button--arrow{display:none}.pswp--touch .pswp__button--arrow{visibility:hidden}.pswp--has_mouse .pswp__button--arrow{visibility:visible}.pswp__button--arrow--prev{right:auto;left:0}.pswp__button--arrow--next{right:0}.pswp__button--arrow--next .pswp__icn{left:auto;right:14px;transform:scaleX(-1)}.pswp__button--zoom{display:none}.pswp--zoom-allowed .pswp__button--zoom{display:block}.pswp--zoomed-in .pswp__zoom-icn-bar-v{display:none}.pswp__preloader{position:relative;overflow:hidden;width:50px;height:60px;margin-right:auto}.pswp__preloader .pswp__icn{opacity:0;transition:opacity .2s linear;animation:pswp-clockwise .6s linear infinite}.pswp__preloader--active .pswp__icn{opacity:.85}@keyframes pswp-clockwise{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.pswp__counter{height:30px;margin-top:15px;margin-inline-start:20px;font-size:14px;line-height:30px;color:var(--pswp-icon-color);text-shadow:1px 1px 3px var(--pswp-icon-color-secondary);opacity:.85}.pswp--one-slide .pswp__counter{display:none}.photo-swipe-loading{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center}.photo-swipe-bullets-indicator{position:absolute;bottom:30px;left:50%;display:flex;flex-direction:row;align-items:center;transform:translate(-50%)}.photo-swipe-bullet{width:12px;height:6px;margin:0 5px;border-radius:3px;background:#fff;transition:width var(--vp-tt),color var(--vp-ct)}.photo-swipe-bullet.active{width:30px;background:var(--vp-tc)}@keyframes rotate{0%{transform:rotate(0)}50%{transform:rotate(360deg)}to{transform:rotate(360deg)}}.popup-enter-active,.popup-leave-active{transition:opacity .3s,transform .3s}.popup-enter-from,.popup-leave-to{opacity:0;transform:translateY(50%) scale(.5)}.sw-hint-popup,.sw-update-popup{position:fixed;bottom:1rem;inset-inline-end:1rem;z-index:300;padding:.5rem .75rem;border-width:0;border-radius:.5rem;background:var(--vp-bg);color:var(--vp-c);box-shadow:0 2px 12px 0 var(--card-shadow);font-size:1rem;line-height:1.5;cursor:pointer}@media print{.sw-hint-popup,.sw-update-popup{display:none}}.sw-hint-popup .icon-wrapper,.sw-update-popup .icon-wrapper{display:inline-block;vertical-align:middle;width:1.5rem;height:1.5rem;margin-inline-start:.4rem;border-radius:.75rem;background:var(--vp-tc)}.sw-hint-popup .icon-wrapper svg,.sw-update-popup .icon-wrapper svg{width:1.2rem;height:1.2rem;margin:.15rem;color:var(--white, #fff);animation:rotate 3s ease infinite}:root{--navbar-bg-color: var(--bg-color-float-blur);--sidebar-bg-color: var(--bg-color-blur)}html[data-theme=dark]{--navbar-bg-color: var(--bg-color-blur);--sidebar-bg-color: var(--bg-color-blur)}#app{--code-hl-bg-color: var(--code-highlight-line-color);--code-ln-color: var(--code-line-color);--code-ln-wrapper-width: var(--line-numbers-width);--code-tabs-nav-text-color: var(--code-color);--code-tabs-nav-bg-color: var(--code-border-color);--code-tabs-nav-hover-color: var(--code-highlight-line-color);--sidebar-space: var(--sidebar-width)}@media (max-width: 959px){#app{--navbar-height: var(--navbar-mobile-height);--navbar-vertical-padding: var(--navbar-mobile-vertical-padding);--navbar-horizontal-padding: var(--navbar-mobile-horizontal-padding);--sidebar-width: var(--sidebar-mobile-width)}}@media (min-width: 1440px){#app{--sidebar-space: clamp( var(--sidebar-width), max(0px, calc((100vw - var(--content-width)) / 2 - 2rem)), 100vw )}}.DocSearch-Button,.DocSearch{--docsearch-primary-color: var(--vp-tc);--docsearch-text-color: var(--vp-c);--docsearch-highlight-color: var(--vp-tc);--docsearch-muted-color: var(--light-grey);--docsearch-container-background: rgb(9 10 17 / 80%);--docsearch-modal-background: var(--bg-color-float);--docsearch-searchbox-background: var(--bg-color-secondary);--docsearch-searchbox-focus-background: var(--vp-bg);--docsearch-searchbox-shadow: inset 0 0 0 2px var(--vp-tc);--docsearch-hit-color: var(--vp-cl);--docsearch-hit-active-color: var(--vp-bg);--docsearch-hit-background: var(--vp-bg);--docsearch-hit-shadow: 0 1px 3px 0 var(--border-color);--docsearch-footer-background: var(--vp-bg)}html[data-theme=dark] .DocSearch-Button,html[data-theme=dark] .DocSearch{--docsearch-logo-color: var(--vp-c);--docsearch-modal-shadow: inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;--docsearch-key-shadow: inset 0 -2px 0 0 #282d55, inset 0 0 1px 1px #51577d, 0 2px 2px 0 rgb(3 4 9 / 30%);--docsearch-key-gradient: linear-gradient(-225deg, #444950, #1c1e21);--docsearch-footer-shadow: inset 0 1px 0 0 rgb(73 76 106 / 50%), 0 -4px 8px 0 rgb(0 0 0 / 20%)}#nprogress{--nprogress-color: var(--vp-tc)}.search-box{--search-bg-color: var(--vp-bg);--search-accent-color: var(--vp-tc);--search-text-color: var(--vp-c);--search-border-color: var(--border-color);--search-item-text-color: var(--vp-clt);--search-item-focus-bg-color: var(--bg-color-secondary)}.external-link-icon{--external-link-icon-color: var(--light-grey)}html,body{margin:0;padding:0;background:#fff}html{font-size:16px;font-display:optional;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:transparent}@media print{html{font-size:12pt}}body{min-height:100vh;color:#2c3e50}a{color:#3eaf7c;font-weight:500;text-decoration:none;overflow-wrap:break-word}kbd{display:inline-block;min-width:1em;margin-inline:.125rem;padding:.25em;border:1px solid #eee;border-radius:.25em;box-shadow:1px 1px 4px #00000026;line-height:1;letter-spacing:-.1em;text-align:center}code{margin:0;padding:.2rem .4rem;border-radius:5px;background:rgba(127,127,127,.12);font-size:.85em;overflow-wrap:break-word}table code{padding:.1rem .4rem}p a code{color:#3eaf7c;font-weight:400}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:500;line-height:1.25;overflow-wrap:break-word}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2rem}h2{padding-bottom:.3rem;border-bottom:1px solid #eaecef;font-size:1.65rem}h3{font-size:1.35rem}h4{font-size:1.15rem}h5{font-size:1.05rem}h6{font-size:1rem}a.header-anchor{float:left;margin-top:.125em;margin-inline-start:-.87em;padding-inline-end:.23em;font-size:.85em;opacity:0;transition:opacity .2s}@media print{a.header-anchor{display:none!important}}a.header-anchor:hover{text-decoration:none}a.header-anchor:focus-visible{opacity:1}p,ul,ol{line-height:1.6;overflow-wrap:break-word}@media print{p,ul,ol{line-height:1.5}}ul,ol{padding-inline-start:1.2em}blockquote{margin:1rem 0;padding:.25rem 0 .25rem 1rem;border-inline-start:.2rem solid #ddd;color:#666;font-size:1rem;overflow-wrap:break-word}blockquote>p{margin:0}hr{border:0;border-top:1px solid #eaecef}table{display:block;overflow-x:auto;margin:1rem 0;border-collapse:collapse}tr:nth-child(2n){background:#f6f8fa}th,td{padding:.6em 1em;border:1px solid #dfe2e5}pre{direction:ltr}@page{margin:2cm;font-size:12pt;size:a4}@media print{*,:after,:before{box-shadow:none!important;text-shadow:none!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}a{color:inherit;font-weight:inherit!important;font-size:inherit!important;text-decoration:underline}a[href^="http://"]:after,a[href^="https://"]:after{content:" (" attr(href) ") "}abbr[title]:after{content:" (" attr(title) ")"}pre{border:1px solid #eee;white-space:pre-wrap!important}pre>code{white-space:pre-wrap!important}blockquote{border-inline-start:.2rem solid #ddd;color:inherit}blockquote,pre{orphans:5;widows:5}img,tr,canvas{page-break-inside:avoid}}@font-face{font-weight:400;font-style:normal;font-family:Crimson;src:url(data:font/truetype;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTYr5mwEAAAyMAAAAHEdERUYAKQATAAAMbAAAAB5PUy8yVsJ0MgAAAVgAAABgY21hcBiKDzgAAAHcAAABWGdhc3D//wADAAAMZAAAAAhnbHlmr+DBdQAAA1AAAAdsaGVhZBZwt+8AAADcAAAANmhoZWEFawEuAAABFAAAACRobXR4BksA9gAAAbgAAAAibG9jYQlsC24AAAM0AAAAHG1heHAAEQBZAAABOAAAACBuYW1lLaFDVAAACrwAAAFrcG9zdAC1AHoAAAwoAAAAPAABAAAAAQAAqBd2H18PPPUACwQAAAAAANqqufwAAAAA2qq5/AAb/9wB4QMeAAAACAACAAAAAAAAAAEAAAMs/ywAXAH9AAAAAAHhAAEAAAAAAAAAAAAAAAAAAAAEAAEAAAANAFkAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAH1AZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAIABgMAAAAAAAAAAAABEAAAAAAAAAAAAAAAUGZFZADAADAAOQMs/ywAXAMsANQAAAABAAAAAAMYAAAAAAAgAAEBpwAfAAAAAAFVAAAB/QAfAH0ALQA+ABsAPgAyACgAPgAxAAAAAAADAAAAAwAAABwAAQAAAAAAUgADAAEAAAAcAAQANgAAAAQABAABAAAAOf//AAAAL///AAAAAQAEAAAAAAADAAQABQAGAAcACAAJAAoACwAMAAABBgAAAQAAAAAAAAABAgAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAwQFBgcICQoLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAJgAmAGIAwAEeAZIBzgJAApYC2gNiA7YAAQAf/9wBhwMeABIAAAEGBwYHATAXFjM2NzY3ASYnJjcBgxwLCgH+zgMECxIKCgIBLgEDAwMDHhQFBgP85wMEAQgJBgMOAwMDEwAAAAIAH//9Ad0CkAAQACEAABMWFxYXNjc2NzQnJicGBwYHNyY3NjcWFxYXFAcGByYnJjcfATo6amo7OQE5OmxrOjkBXQIlJEE5IyIBIyJEOSQjAgFOkV5eBAReXoqJXl4EBF5eggJ0UlEDA09Qe3xVVgMDU1OEAAAAAAEAff/9AYACkQA+AAA3FAcGBwYHBiMGFQYXNjc2MzIXFhc2JzQnIicmJyY1JjURNjc2MSYnJicjBgcGBwYVFBUUFxYXNjc2NzIXFhXkAQEEBRgYDAMBBB4ZGhweGxofBAEDDBgZBQQBAQMEAQIDBAIFNTZCAgMDBA0XFw0LBQV3GBMVDAgEBAUKCgUCAQICAQIFCgoFBAQIDBUTGAGnLxkbBAYFAQIZGh4BAgECBQUEAwUHBwEICRYAAAAAAQAtAAAB0QKRADoAADcGFxYXITY3NjcmJyYjIgcGBwYHBisBNjc2NzY3NjUmJyYnBgcGBxQXFhc2NzY3FhcWFxYHBgcGBwYHLgEEAwMBYwURERADBwYFBAMDAg8VEx/LJkBAOhsQDwIxMkxSMjIHCAYGCSYmPTIfHwEBCgoeLkJBQg8EBQQCETAwKQICAgEBBCgUEylJSUYhJicsRDIzAgY1NRoEBQYBEyEhAwEjIjYlJCQtQlBQSAAAAAABAD7/+wG+ApEASgAANwYXFhcWFxYzNjc2NyYnJic2NzY3JicmIwYHBgcUFxYXNjc2NxYXFhcGBwYHBgcUFRQXNjc2NxYXFhcGBwYnIicmJyYnJiciBwYXPwEIBwUaHB0VZU5NBAMvLi8eIB4DAywsKzwrKxgEAwUIHR4wLRscAQMvLz8BAQYKEhEQNSYmAgImJSsWExQPCw0NFREMDQE7DgsLBQwFBgE8PWpMKSoGECQkMkAiIQIdHyUHBwcBCRscAwEbGSpCIyUOAgMCAwwIAwUEAQEoKD9XJSQBBQYODg8PAQ0NFQAAAgAb//oB4QKTACIAJQAANxQXFhchFRQXFjMyNzYjNTM2NzY1NCcmJyMRNCcmIwYHBgcBExEbAgMFASEJCRIdCAkBRgIBAQUEBTwFAwgHCQkG/vjmxgUGBgOwBQIBAwKzAgQDCBAMDQEBlAYGBgEICQf+cwEs/tQAAQA+//sBvgKTAEoAADcGFxYXFhcWMzY3NjcmJyYnIgcGBzY3NjczMjc2NzY3NjU0JyYnBgcGByMGBwYHFBcWMzY3NjMWFxYHBgcGJyInJicmJyYnIgcGFz8BCAcFGhwdFWVOTQQBMjJbFx8gFwoJCQlWKB0dFQ4JCAQDBQMdHSKXCREQEgMCBA4bGhNYJyUBAiYlKxYTFA8LDQ0VEQwNATsOCwsFDAUGATw9akU2NwMFBggrMC8uAgICExcZBgQCAgMBAwQBMVNUWAUFBAYFBAMxMTNZIyQBBQYODg8PAQ0NFQAAAgAy//oBzQKXACAAMwAANxQXFhc2NzY3NicmJyIHBgc2NzY3NCcmJwYHBgcGBwYXNyY3Njc2FxYXFgcGBwYHJicmNzM1NV5aOTsCAioqahoiIRsnWFhFAwIHQ0tMOTAZGQFbBAQaGxkXRB8fAQEfIDE9Hh4E511FRwQDPT1ZPEJBBQwLF4Y9PRMGCwwBEiwsPDZFRkkTHyAbCAcBAjAwREYsLQEFREVQAAAAAAEAKP/7AdUCiwApAAATFhcWMzI3Njc2NzYzIQYHBgcWFxYzMjcBNjc2NzQnJiMiBwYjIQYHBgcoAwYHAwYDAwELEBEdAQUJYWJXAQ8PDgcDAQ4LCQgBAQEEBhUVFv7JBgsNDAH6DQMCAQEFKRITFMjHjQcFBgMCPxYSEwoEAgMBAhkrKiAAAAADAD7/9wG/ApIAKABBAFgAADcGFxYXNjc2NyYnJicmJzQ3Njc2NyYnJiMGBwYHFhcWFxYVFAcGBwYHNyY3Njc2MzIzMhcyFxYXFhcGBwYHIicmNxMmNzY3FhcWFRQHBgcGByIjIicmJyY3PwE1M1ZQODgDAykpMQIBAyYlJQMCMC9HRjExAgIiIiMCAiMvLwNTBBQTKgEBAQECAQIBEjU1CAEdHjMrISICGAMYGSYvGxoTEx8CAQIBBAMfJCQBoU8tLQECMjFPOC4uGwIBAgEWJiU7SCYoAjEwQzopKhMBAgECEykpQAQsIiEbAQEBBywsQjUeHQEiI0QBZSMhIAECJiYvKh8gFAEBAhAfIEYAAAIAMf/6AcsClwAgADMAABMGFxYXMjc2NwYHBgcUFxYXNjc2NzY3NjUmJyYnBgcGBzcmNzY3FhcWFRQHBgcGJyYnJjc0AyopahoiIRsoV1hFAwIHQ0tMODEZGQE2NF5ZOjoBWgMfHzE9Hh4EGhoaF0QeHwUBy0dBQgUMCxeFPj0SBwsLAREsLD01RkVPV0dFBQQ8PU8UPCwtAQVFRUklIRsHCAECMDBPAAAADACWAAEAAAAAAAEABwAQAAEAAAAAAAIABwAoAAEAAAAAAAMABwBAAAEAAAAAAAQABwBYAAEAAAAAAAUAHgCeAAEAAAAAAAYABwDNAAMAAQQJAAEADgAAAAMAAQQJAAIADgAYAAMAAQQJAAMADgAwAAMAAQQJAAQADgBIAAMAAQQJAAUAPABgAAMAAQQJAAYADgC9AEMAcgBpAG0AcwBvAG4AAENyaW1zb24AAEMAcgBpAG0AcwBvAG4AAENyaW1zb24AAEMAcgBpAG0AcwBvAG4AAENyaW1zb24AAEMAcgBpAG0AcwBvAG4AAENyaW1zb24AAFYAZQByAHMAaQBvAG4AIAAxAC4AMAA7ACAARgBvAG4AdABFAGQAaQB0AG8AcgAgACgAdgAxAC4AMAApAABWZXJzaW9uIDEuMDsgRm9udEVkaXRvciAodjEuMCkAAEMAcgBpAG0AcwBvAG4AAENyaW1zb24AAAACAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAABAAIAEwAUABUAFgAXABgAGQAaABsAHAAAAAH//wACAAEAAAAMAAAAFgAAAAIAAQADAAwAAQAEAAAAAgAAAAAAAAABAAAAANWkJwgAAAAA2qq5/AAAAADaqrn8) format("truetype")}html,body{background:var(--bg-color);transition:background var(--color-transition)}:root{color-scheme:light}html[data-theme=dark]{color-scheme:dark}body{color:var(--text-color);font-family:var(--font-family)}@media (min-width: 1440px){body{font-size:17px}}a{color:var(--theme-color)}kbd{border-color:var(--border-color-dark);background:var(--bg-color-secondary);font-family:var(--font-family-mono)}code{font-family:var(--font-family-mono);transition:background var(--color-transition),color var(--color-transition)}html[data-theme=dark] code{background:#333}p a code{color:var(--theme-color)}blockquote{border-color:#eee;color:#666;transition:border-color var(--color-transition),color var(--color-transition)}html[data-theme=dark] blockquote{border-color:#333}h1,h2,h3,h4,h5,h6{font-family:var(--font-family-heading)}@media (max-width: 419px){h1{font-size:1.9rem}}h2{border-color:var(--border-color);transition:border-bottom-color var(--color-transition)}hr{border-color:var(--border-color);transition:border-top-color var(--color-transition)}tr:nth-child(2n){background:var(--bg-color-secondary)}th,td{border-color:var(--border-color-dark)}@media print{@page{--text-color: #000 !important;--bg-color: #fff !important}div[class*=language-]{position:relative!important}}.theme-hope-content:not(.custom)>*:first-child{margin-top:0}.vp-breadcrumb{max-width:var(--content-width, 740px);margin-inline:auto;padding-inline:2.5rem;position:relative;z-index:2;padding-top:1rem;font-size:15px}@media (max-width: 959px){.vp-breadcrumb{padding-inline:1.5rem}}@media print{.vp-breadcrumb{max-width:unset}}@media (max-width: 959px){.vp-breadcrumb{font-size:14px}}@media (max-width: 419px){.vp-breadcrumb{padding-top:.5rem;font-size:12.8px}}@media print{.vp-breadcrumb{display:none}}.vp-breadcrumb .icon{margin-inline-end:.25em;font-size:1em}.vp-breadcrumb img.icon{vertical-align:-.125em;height:1em}.vp-breadcrumb a{display:inline-block;padding:0 .5em}.vp-breadcrumb a:before{position:relative;bottom:.125rem;margin-inline-end:.25em}.vp-breadcrumb a:hover{color:var(--theme-color)}.vp-breadcrumb ol{margin:0;padding-inline-start:0;list-style:none}.vp-breadcrumb li{display:inline-block;line-height:1.5}.vp-breadcrumb li:first-child a{padding-inline-start:0}.vp-breadcrumb li:last-child a{padding-inline-end:0}.vp-breadcrumb li.is-active a{color:var(--light-grey);cursor:default;pointer-events:none}.vp-breadcrumb li+li:before{content:"/";color:var(--light-grey)}.toggle-sidebar-wrapper{position:fixed;top:var(--navbar-height);bottom:0;inset-inline-start:var(--sidebar-space);z-index:100;display:flex;align-items:center;justify-content:center;font-size:2rem;transition:inset-inline-start var(--transform-transition)}@media (max-width: 719px){.toggle-sidebar-wrapper{display:none}}@media (min-width: 1440px){.toggle-sidebar-wrapper{display:none}}.toggle-sidebar-wrapper:hover{background:rgba(127,127,127,.05);cursor:pointer}.toggle-sidebar-wrapper .arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s}html[data-theme=dark] .toggle-sidebar-wrapper .arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.toggle-sidebar-wrapper .arrow.down{transform:rotate(180deg)}html[dir=rtl] .toggle-sidebar-wrapper .arrow.down{transform:rotate(-180deg)}.toggle-sidebar-wrapper .arrow.end{transform:rotate(90deg)}html[dir=rtl] .toggle-sidebar-wrapper .arrow.end,.toggle-sidebar-wrapper .arrow.start{transform:rotate(-90deg)}html[dir=rtl] .toggle-sidebar-wrapper .arrow.start{transform:rotate(90deg)}.theme-container{display:flex;flex-direction:column;justify-content:space-between;min-height:100vh}.theme-container .vp-page{padding-top:var(--navbar-height);padding-inline-start:calc(var(--sidebar-space) + 2rem)}@media (max-width: 719px){.theme-container .vp-page{padding-inline:0}}@media (min-width: 1440px){.theme-container .vp-page{padding-inline-end:calc(100vw - var(--content-width) - var(--sidebar-space) - 6rem)}}.theme-container .vp-sidebar{top:var(--navbar-height)}.theme-container.no-navbar .vp-page{padding-top:0}.theme-container.no-navbar .vp-sidebar{top:0}@media (max-width: 719px){.theme-container.no-navbar .vp-sidebar{top:0}}@media (max-width: 719px){.theme-container.hide-navbar .vp-sidebar{top:0}}.theme-container.sidebar-collapsed .vp-page{padding-inline-start:0}.theme-container.sidebar-collapsed .vp-sidebar{box-shadow:none;transform:translate(-100%)}html[dir=rtl] .theme-container.sidebar-collapsed .vp-sidebar{transform:translate(100%)}.theme-container.sidebar-collapsed .toggle-sidebar-wrapper{inset-inline-start:0}.theme-container.no-sidebar .vp-page{padding-inline:0}@media (min-width: 1440px){.theme-container.no-sidebar.has-toc .vp-page{padding-inline-end:16rem}}.theme-container.no-sidebar .vp-toggle-sidebar-button,.theme-container.no-sidebar .toggle-sidebar-wrapper,.theme-container.no-sidebar .vp-sidebar{display:none}.theme-container.sidebar-open .vp-sidebar{box-shadow:2px 0 8px var(--card-shadow);transform:translate(0)}.fade-slide-y-enter-active{transition:all .3s ease!important}.fade-slide-y-leave-active{transition:all .3s cubic-bezier(1,.5,.8,1)!important}.fade-slide-y-enter-from,.fade-slide-y-leave-to{opacity:0;transform:translateY(10px)}.vp-feature-wrapper{position:relative}.vp-feature-bg{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;background-attachment:fixed;background-position:50%;background-size:cover}.vp-feature-bg.light{display:inline-block}.vp-feature-bg.dark,html[data-theme=dark] .vp-feature-bg.light{display:none}html[data-theme=dark] .vp-feature-bg.dark{display:inline-block}.vp-feature{position:relative;z-index:1;margin:0 auto;padding:1.5rem 1rem;color:var(--text-color-lighter);text-align:center}.vp-feature-bg+.vp-feature{color:#222}html[data-theme=dark] .vp-feature-bg+.vp-feature{color:#eee}.vp-feature-bg+.vp-feature .icon{color:inherit}.vp-feature-image{height:10rem;margin:0 auto}@media (max-width: 959px){.vp-feature-image{height:8rem}}.vp-feature-image.light{display:inline-block}.vp-feature-image.dark,html[data-theme=dark] .vp-feature-image.light{display:none}html[data-theme=dark] .vp-feature-image.dark{display:inline-block}.vp-feature-header{margin-bottom:1.5rem;border-bottom:none;font-size:3rem;font-family:var(--font-family);text-align:center}@media (max-width: 959px){.vp-feature-header{font-size:2.5rem}}@media (max-width: 719px){.vp-feature-header{font-size:2.25rem}}@media (max-width: 419px){.vp-feature-header{font-size:2rem}}.vp-feature-description{font-size:1.125rem}.vp-features{z-index:1;display:flex;flex-wrap:wrap;align-items:stretch;place-content:stretch center;margin:1rem 0;text-align:start}@media print{.vp-features{display:block}}.vp-features:first-child{border-top:1px solid var(--border-color);transition:border-color var(--color-transition)}.vp-feature-item{position:relative;display:block;flex-basis:calc(33% - 3rem);margin:.5rem;padding:1rem;border-radius:.5rem;color:inherit;transition:background var(--color-transition),box-shadow var(--color-transition),transform var(--transform-transition)}@media (min-width: 1440px){.vp-feature-item{flex-basis:calc(25% - 3rem)}}@media (max-width: 959px){.vp-feature-item{flex-basis:calc(50% - 3rem)}}@media (max-width: 719px){.vp-feature-item{flex-basis:100%;font-size:.95rem}}@media (max-width: 419px){.vp-feature-item{margin:.5rem 0;font-size:.9rem}}.vp-feature-item.link{cursor:pointer}@media print{.vp-feature-item.link{text-decoration:none}}.vp-feature-item .icon{display:inline-block;height:1.1em;margin-inline-end:.5rem;color:var(--theme-color);font-weight:400;font-size:1.1em}.vp-feature-item:hover{background-color:var(--bg-color-secondary);box-shadow:0 2px 12px 0 var(--card-shadow);transform:translate(-2px,-2px);transform:scale(1.05)}.vp-feature-bg+.vp-feature .vp-feature-item:hover{background-color:transparent}.vp-feature-item:only-child{flex-basis:100%}.vp-feature-item:first-child:nth-last-child(2),.vp-feature-item:nth-child(2):last-child{flex-basis:calc(50% - 3rem)}@media (max-width: 719px){.vp-feature-item:first-child:nth-last-child(2),.vp-feature-item:nth-child(2):last-child{flex-basis:100%}}.vp-feature-title{margin:.25rem 0 .5rem;font-weight:700;font-size:1.3rem;font-family:var(--font-family)}@media (max-width: 419px){.vp-feature-title{font-size:1.2rem}}.vp-feature-details{margin:0;line-height:1.4}.vp-footer-wrapper{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-evenly;padding-block:.75rem;padding-inline:calc(var(--sidebar-space) + 2rem) 2rem;border-top:1px solid var(--border-color);background:var(--bg-color);color:var(--dark-grey);text-align:center;transition:border-top-color var(--color-transition),background var(--color-transition),padding var(--transform-transition)}@media (max-width: 719px){.vp-footer-wrapper{padding-inline-start:2rem}}@media (min-width: 1440px){.vp-footer-wrapper{z-index:50;padding-inline-start:2rem}}@media print{.vp-footer-wrapper{margin:0!important;padding:0!important}}@media (max-width: 419px){.vp-footer-wrapper{display:block}}.no-sidebar .vp-footer-wrapper,.sidebar-collapsed .vp-footer-wrapper{padding-inline-start:2rem}.vp-footer{margin:.5rem 1rem;font-size:14px}@media print{.vp-footer{display:none}}.vp-copyright{margin:6px 0;font-size:13px}.vp-page:not(.not-found)+.vp-footer-wrapper{margin-top:-2rem}.vp-hero-info-wrapper{position:relative;display:flex;align-items:center;justify-content:center;margin-inline:auto}.vp-hero-info-wrapper.fullscreen{height:calc(100vh - var(--navbar-height))!important}.vp-hero-info{z-index:1;width:100%;padding-inline:2.5rem}@media (max-width: 959px){.vp-hero-info{padding-inline:1.5rem}}@media (min-width: 959px){.vp-hero-info{display:flex;align-items:center;justify-content:space-evenly}}.vp-hero-mask{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;background-position:50%;background-size:cover}.vp-hero-mask:after{content:" ";position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:block}.vp-hero-mask.light{display:block}html[data-theme=dark] .vp-hero-mask.light,.vp-hero-mask.dark{display:none}html[data-theme=dark] .vp-hero-mask.dark{display:block}.vp-hero-infos{z-index:1;margin:0 .5rem}.vp-hero-image{display:block;max-width:100%;max-height:18rem;margin:1rem}@media (max-width: 959px){.vp-hero-image{margin:2rem auto}}@media (max-width: 719px){.vp-hero-image{max-height:16rem;margin:1.5rem auto}}@media (max-width: 419px){.vp-hero-image{max-height:14rem}}.vp-hero-image.light{display:block}html[data-theme=dark] .vp-hero-image.light,.vp-hero-image.dark{display:none}html[data-theme=dark] .vp-hero-image.dark{display:block}#main-title{margin:.5rem 0;background:linear-gradient(120deg,var(--theme-color-light),var(--theme-color) 30%,#7509d9 100%);-webkit-background-clip:text;background-clip:text;font-weight:700;font-size:3.6rem;font-family:var(--font-family);line-height:1.5;-webkit-text-fill-color:transparent}@media (max-width: 719px){#main-title{margin:0}}@media (max-width: 959px){#main-title{font-size:2.5rem;text-align:center}}@media (max-width: 719px){#main-title{font-size:2.25rem;text-align:center}}@media (max-width: 419px){#main-title{margin:0 auto;font-size:2rem}}#main-description,.vp-hero-actions{margin:1.8rem 0}@media (max-width: 719px){#main-description,.vp-hero-actions{margin:1.5rem 0}}@media (max-width: 959px){#main-description,.vp-hero-actions{margin:1.5rem auto;text-align:center}}@media (max-width: 419px){#main-description,.vp-hero-actions{margin:1.2rem 0}}#main-description{max-width:35rem;color:var(--text-color-light);font-weight:500;font-size:1.6rem;line-height:1.3}@media (max-width: 719px){#main-description{font-size:1.4rem}}@media (max-width: 419px){#main-description{font-size:1.2rem}}.vp-hero-action{display:inline-block;overflow:hidden;min-width:4rem;margin:.5rem;padding:.5em 1.5rem;border-radius:2rem;background:var(--bg-color-secondary);color:var(--text-color);font-size:1.2rem;text-align:center;transition:color var(--color-transition),color var(--color-transition),transform var(--transform-transition)}@media (max-width: 719px){.vp-hero-action{padding:.5rem 1rem;font-size:1.1rem}}@media (max-width: 419px){.vp-hero-action{font-size:1rem}}@media print{.vp-hero-action{text-decoration:none}}.vp-hero-action:hover{background:var(--bg-color-tertiary)}.vp-hero-action.primary{border-color:var(--theme-color);background:var(--theme-color);color:var(--white)}.vp-hero-action.primary:hover{border-color:var(--theme-color-light);background:var(--theme-color-light)}.vp-project-home:not(.pure) .vp-hero-action:active{transform:scale(.96)}.vp-hero-action .icon{margin-inline-end:.25em}.vp-highlight-wrapper{position:relative;display:flex;align-items:center;justify-content:center}.vp-highlight-wrapper:nth-child(2n) .vp-highlight{flex-direction:row-reverse}.vp-highlight{z-index:1;display:flex;flex:1;align-items:center;justify-content:flex-end;max-width:var(--home-page-width);margin:0 auto;padding:1.5rem 2.5rem;color:#222}@media (max-width: 719px){.vp-highlight{display:block;padding-inline:1.5rem;text-align:center}}html[data-theme=dark] .vp-highlight{color:#eee}.vp-highlight-bg{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;background-attachment:fixed;background-position:50%;background-size:cover}.vp-highlight-bg.light{display:inline-block}.vp-highlight-bg.dark,html[data-theme=dark] .vp-highlight-bg.light{display:none}html[data-theme=dark] .vp-highlight-bg.dark{display:inline-block}.vp-highlight-image{width:12rem;margin:2rem 4rem}@media (max-width: 959px){.vp-highlight-image{width:10rem}}@media (max-width: 719px){.vp-highlight-image{width:8rem;margin:0 auto}}.vp-highlight-image.light{display:inline-block}.vp-highlight-image.dark,html[data-theme=dark] .vp-highlight-image.light{display:none}html[data-theme=dark] .vp-highlight-image.dark{display:inline-block}.vp-highlight-info-wrapper{display:flex;flex:1;justify-content:center;padding:2rem}@media (max-width: 719px){.vp-highlight-info-wrapper{padding:1rem 0}}.vp-highlight-info-wrapper:only-child{flex:1 0 100%}.vp-highlight-info{text-align:start}.vp-highlight-header{margin-bottom:1.5rem;border-bottom:none;font-size:3rem;font-family:var(--font-family)}@media (max-width: 959px){.vp-highlight-header{font-size:2.5rem}}@media (max-width: 719px){.vp-highlight-header{font-size:2.25rem;text-align:center}}@media (max-width: 419px){.vp-highlight-header{font-size:2rem}}.vp-highlight-description{font-size:1.125rem}.vp-highlights{margin-inline-start:-1.25em;padding-inline-start:0}.vp-highlight-item-wrapper{padding:.5em .5em .5em 1.75em;border-radius:.5rem;list-style:none}.vp-highlight-item-wrapper.link{cursor:pointer}.vp-highlight-item-wrapper:hover{background-color:var(--bg-color-secondary);box-shadow:0 2px 12px 0 var(--card-shadow);transition:transform var(--transform-transition);transform:translate(-2px,-2px)}.vp-highlight-bg+.vp-highlight .vp-highlight-item-wrapper:hover{background-color:transparent}.vp-highlight-item-wrapper::marker{font-weight:700}.vp-highlight-item{display:list-item;color:inherit;list-style:initial}@media print{.vp-highlight-item{text-decoration:none}}.vp-highlight-title{margin:0;font-weight:600;font-size:1.125rem;font-family:var(--font-family)}.vp-highlight-title .icon{margin-inline-end:.25em;font-size:1em}.vp-highlight-title img.icon{vertical-align:-.125em;height:1em}.vp-highlight-details{margin:.5rem 0 0}.vp-project-home{--content-width: var(--home-page-width);display:block;flex:1;padding-top:var(--navbar-height)}@media screen{.vp-project-home .vp-hero-info-wrapper:not(.fullscreen) .vp-hero-info{max-width:var(--home-page-width)}}@media screen{.vp-project-home .vp-feature{max-width:var(--home-page-width)}}.vp-project-home .theme-hope-content{padding-bottom:1.5rem!important}.vp-project-home .theme-hope-content:empty{padding:0!important}.not-found-hint{padding:2rem}.not-found-hint .error-code{margin:0;font-weight:700;font-size:4rem;line-height:4rem}.not-found-hint .error-title{font-weight:700}.not-found-hint .error-hint{margin:0;padding:12px 0;font-weight:600;font-size:20px;line-height:20px;letter-spacing:2px}.vp-page.not-found{display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;width:100vw;max-width:var(--home-page-width);margin:0 auto;padding:calc(var(--navbar-height) + 1rem) 1rem 1rem!important;text-align:center}.vp-page.not-found .action-button{display:inline-block;box-sizing:border-box;margin:.25rem;padding:.75rem 1rem;border-width:0;border-bottom:1px solid var(--theme-color-dark);border-radius:3rem;background:var(--theme-color);color:var(--white);outline:none;font-size:1rem;transition:background .1s ease}.vp-page.not-found .action-button:hover{background:var(--theme-color-light);cursor:pointer}.vp-page-nav{display:flex;flex-wrap:wrap;min-height:2rem;margin-top:0;padding-block:.5rem;padding-inline:2rem;border-top:1px solid var(--border-color);transition:border-top var(--color-transition)}@media (max-width: 959px){.vp-page-nav{padding-inline:1rem}}@media print{.vp-page-nav{display:none}}.vp-page-nav .nav-link{display:inline-block;flex-grow:1;margin:.25rem;padding:.25rem .5rem;border:1px solid var(--border-color);border-radius:.25rem}.vp-page-nav .nav-link:hover{background:var(--bg-color-secondary)}.vp-page-nav .nav-link .hint{color:var(--light-grey);font-size:.875rem;line-height:2}.vp-page-nav .nav-link .arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s;font-size:.75rem}html[data-theme=dark] .vp-page-nav .nav-link .arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.vp-page-nav .nav-link .arrow.down{transform:rotate(180deg)}html[dir=rtl] .vp-page-nav .nav-link .arrow.down{transform:rotate(-180deg)}.vp-page-nav .nav-link .arrow.end{transform:rotate(90deg)}html[dir=rtl] .vp-page-nav .nav-link .arrow.end,.vp-page-nav .nav-link .arrow.start{transform:rotate(-90deg)}html[dir=rtl] .vp-page-nav .nav-link .arrow.start{transform:rotate(90deg)}.vp-page-nav .prev{text-align:start}.vp-page-nav .prev .icon{margin-inline-end:.25em;font-size:1em}.vp-page-nav .prev img.icon{vertical-align:-.125em;height:1em}.vp-page-nav .next{text-align:end}.vp-page-nav .next .icon{margin-inline-start:.25em;font-size:1em}.vp-page-nav .next img.icon{vertical-align:-.125em;height:1em}.vp-page-title{max-width:var(--content-width, 740px);margin-inline:auto;padding-inline:2.5rem;position:relative;z-index:1;padding-top:1rem;padding-bottom:0}@media (max-width: 959px){.vp-page-title{padding-inline:1.5rem}}@media print{.vp-page-title{max-width:unset}}@media print{.vp-page-title{padding-inline:0!important}}@media (max-width: 959px){.vp-page-title{padding-top:.5rem}}.vp-page-title h1{margin-top:calc(0px - var(--navbar-height))!important;margin-bottom:1rem;padding-top:var(--navbar-height)!important;font-size:2.2rem}@media (max-width: 959px){.vp-page-title h1{margin-bottom:.5rem}}.vp-page-title h1 .icon{margin-inline-end:.25em;color:var(--theme-color);font-size:.9em}.vp-page-title h1 img.icon{vertical-align:-.125em;height:1em}.theme-hope-content:not(.custom){padding-top:0!important}.theme-hope-content:not(.custom) h1:first-child,.theme-hope-content:not(.custom) h2:first-child,.theme-hope-content:not(.custom) h3:first-child,.theme-hope-content:not(.custom) h4:first-child,.theme-hope-content:not(.custom) h5:first-child,.theme-hope-content:not(.custom) h6:first-child{margin-top:calc(.5rem - var(--navbar-height))!important;padding-top:var(--navbar-height)!important}.theme-hope-content:not(.custom)>h1:first-child{display:none}.vp-page{display:block;flex-grow:1;padding-bottom:2rem;transition:padding var(--transform-transition)}@media print{.vp-page{min-height:auto!important;margin:0!important;padding:0!important}}.page-cover{-o-object-fit:cover;object-fit:cover;width:calc(100% + 2rem);max-height:25vh;margin-inline-start:-2rem}@media (max-width: 719px){.page-cover{width:100%;margin:0;border-radius:0}}@media (min-width: 1440px){.page-cover{width:calc(100% - 2rem);margin:0 1rem;border-radius:.5rem}}.page-cover .sidebar-collapsed{width:100%;margin-inline-start:0}.vp-skip-link{top:.25rem;inset-inline-start:.25rem;z-index:999;padding:.65rem 1.5rem;border-radius:.5rem;background:var(--bg-color);color:var(--theme-color);box-shadow:var(--card-shadow);font-weight:700;font-size:.9em;text-decoration:none}@media print{.vp-skip-link{display:none}}.vp-skip-link:focus{clip:auto;width:auto;height:auto;-webkit-clip-path:none;clip-path:none}.theme-hope-content pre{overflow:auto;margin:.85rem 0;padding:1rem;border-radius:6px;line-height:1.375}.theme-hope-content pre code{padding:0;border-radius:0;background:transparent!important;color:var(--code-color);font-family:var(--font-family-mono);text-align:left;white-space:pre;word-spacing:normal;word-wrap:normal;word-break:normal;overflow-wrap:unset;-webkit-hyphens:none;hyphens:none;transition:color var(--color-transition);-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}@media print{.theme-hope-content pre code{white-space:pre-wrap}}.theme-hope-content .line-number{font-family:var(--font-family-mono)}div[class*=language-]{position:relative;border-radius:6px;background:var(--code-bg-color);font-size:16px;transition:background var(--color-transition)}@media (max-width: 419px){.theme-hope-content>div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}div[class*=language-]:before{content:attr(data-ext);position:absolute;top:0;right:1em;z-index:3;color:var(--code-line-color);font-size:.75rem;transition:color var(--color-transition)}div[class*=language-] pre{position:relative;z-index:1;scrollbar-gutter:stable}div[class*=language-] .highlight-lines{position:absolute;top:0;bottom:0;left:0;width:100%;padding:1rem 0;line-height:1.375;-webkit-user-select:none;-moz-user-select:none;user-select:none}div[class*=language-] .highlight-line{background:var(--code-highlight-line-color);transition:background var(--color-transition)}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;top:0;bottom:0;left:0;z-index:2;width:var(--line-numbers-width);border-right:1px solid var(--code-highlight-line-color);border-radius:6px 0 0 6px;transition:border-color var(--color-transition)}@media (max-width: 419px){div[class*=language-].line-numbers-mode:after{border-radius:0}}@media print{div[class*=language-].line-numbers-mode:after{display:none}}div[class*=language-].line-numbers-mode .highlight-line{position:relative}div[class*=language-].line-numbers-mode .highlight-line:before{content:" ";position:absolute;top:0;left:0;z-index:3;display:block;width:var(--line-numbers-width);height:100%}div[class*=language-].line-numbers-mode pre{vertical-align:middle;margin-left:var(--line-numbers-width);padding-left:.5rem}@media print{div[class*=language-].line-numbers-mode pre{margin-left:0;padding-left:1rem}}div[class*=language-].line-numbers-mode .line-numbers{position:absolute;top:0;bottom:0;left:0;display:flex;flex-direction:column;width:var(--line-numbers-width);padding:1rem 0;color:var(--code-line-color);counter-reset:line-number;text-align:center;transition:color var(--color-transition)}@media print{div[class*=language-].line-numbers-mode .line-numbers{display:none}}div[class*=language-].line-numbers-mode .line-number{position:relative;z-index:4;display:flex;flex:1;align-items:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-number:before{content:counter(line-number);display:block;font-size:.8em;line-height:1;counter-increment:line-number}div[class*=language-]:not(.line-numbers-mode) .line-numbers{display:none}html[data-theme=light] #app{--code-color: #383a42;--code-line-color: rgba(56, 58, 66, .67);--code-bg-color: #ecf4fa;--code-border-color: #c3def3;--code-highlight-line-color: #d8e9f6}html[data-theme=light] code[class*=language-],html[data-theme=light] pre[class*=language-]{-moz-tab-size:2;-o-tab-size:2;tab-size:2}html[data-theme=light] code[class*=language-]::-moz-selection,html[data-theme=light] code[class*=language-] ::-moz-selection,html[data-theme=light] pre[class*=language-]::-moz-selection,html[data-theme=light] pre[class*=language-] ::-moz-selection{background:#e5e5e6;color:inherit}html[data-theme=light] code[class*=language-]::selection,html[data-theme=light] code[class*=language-] ::selection,html[data-theme=light] pre[class*=language-]::selection,html[data-theme=light] pre[class*=language-] ::selection{background:#e5e5e6;color:inherit}html[data-theme=light] .token.comment,html[data-theme=light] .token.prolog,html[data-theme=light] .token.cdata{color:#a0a1a7}html[data-theme=light] .token.doctype,html[data-theme=light] .token.punctuation,html[data-theme=light] .token.entity{color:#383a42}html[data-theme=light] .token.attr-name,html[data-theme=light] .token.class-name,html[data-theme=light] .token.boolean,html[data-theme=light] .token.constant,html[data-theme=light] .token.number,html[data-theme=light] .token.atrule{color:#b76b01}html[data-theme=light] .token.keyword{color:#a626a4}html[data-theme=light] .token.property,html[data-theme=light] .token.tag,html[data-theme=light] .token.symbol,html[data-theme=light] .token.deleted,html[data-theme=light] .token.important{color:#e45649}html[data-theme=light] .token.selector,html[data-theme=light] .token.string,html[data-theme=light] .token.char,html[data-theme=light] .token.builtin,html[data-theme=light] .token.inserted,html[data-theme=light] .token.regex,html[data-theme=light] .token.attr-value,html[data-theme=light] .token.attr-value>.token.punctuation{color:#50a14f}html[data-theme=light] .token.variable,html[data-theme=light] .token.operator,html[data-theme=light] .token.function{color:#4078f2}html[data-theme=light] .token.url{color:#0184bc}html[data-theme=light] .token.attr-value>.token.punctuation.attr-equals,html[data-theme=light] .token.special-attr>.token.attr-value>.token.value.css{color:#383a42}html[data-theme=light] .language-css .token.selector{color:#e45649}html[data-theme=light] .language-css .token.property{color:#383a42}html[data-theme=light] .language-css .token.function,html[data-theme=light] .language-css .token.url>.token.function{color:#0184bc}html[data-theme=light] .language-css .token.url>.token.string.url{color:#50a14f}html[data-theme=light] .language-css .token.important,html[data-theme=light] .language-css .token.atrule .token.rule,html[data-theme=light] .language-javascript .token.operator{color:#a626a4}html[data-theme=light] .language-javascript .token.template-string>.token.interpolation>.token.interpolation-punctuation.punctuation{color:#ca1243}html[data-theme=light] .language-json .token.operator{color:#383a42}html[data-theme=light] .language-json .token.null.keyword{color:#b76b01}html[data-theme=light] .language-markdown .token.url,html[data-theme=light] .language-markdown .token.url>.token.operator,html[data-theme=light] .language-markdown .token.url-reference.url>.token.string{color:#383a42}html[data-theme=light] .language-markdown .token.url>.token.content{color:#4078f2}html[data-theme=light] .language-markdown .token.url>.token.url,html[data-theme=light] .language-markdown .token.url-reference.url{color:#0184bc}html[data-theme=light] .language-markdown .token.blockquote.punctuation,html[data-theme=light] .language-markdown .token.hr.punctuation{color:#a0a1a7;font-style:italic}html[data-theme=light] .language-markdown .token.code-snippet{color:#50a14f}html[data-theme=light] .language-markdown .token.bold .token.content{color:#b76b01}html[data-theme=light] .language-markdown .token.italic .token.content{color:#a626a4}html[data-theme=light] .language-markdown .token.strike .token.content,html[data-theme=light] .language-markdown .token.strike .token.punctuation,html[data-theme=light] .language-markdown .token.list.punctuation,html[data-theme=light] .language-markdown .token.title.important>.token.punctuation{color:#e45649}html[data-theme=light] .token.bold{font-weight:700}html[data-theme=light] .token.comment,html[data-theme=light] .token.italic{font-style:italic}html[data-theme=light] .token.entity{cursor:help}html[data-theme=light] .token.namespace{opacity:.8}html[data-theme=dark] #app{--code-color: #abb2bf;--code-line-color: rgba(171, 178, 191, .67);--code-bg-color: #282c34;--code-border-color: #343e51;--code-highlight-line-color: #2f3542}html[data-theme=dark] code[class*=language-],html[data-theme=dark] pre[class*=language-]{text-shadow:0 1px rgba(0,0,0,.3);-moz-tab-size:2;-o-tab-size:2;tab-size:2}@media print{html[data-theme=dark] code[class*=language-],html[data-theme=dark] pre[class*=language-]{text-shadow:none}}html[data-theme=dark] code[class*=language-]::-moz-selection,html[data-theme=dark] code[class*=language-] ::-moz-selection,html[data-theme=dark] pre[class*=language-]::-moz-selection,html[data-theme=dark] pre[class*=language-] ::-moz-selection{background:#3e4451;color:inherit;text-shadow:none}html[data-theme=dark] code[class*=language-]::selection,html[data-theme=dark] code[class*=language-] ::selection,html[data-theme=dark] pre[class*=language-]::selection,html[data-theme=dark] pre[class*=language-] ::selection{background:#3e4451;color:inherit;text-shadow:none}html[data-theme=dark] .token.comment,html[data-theme=dark] .token.prolog,html[data-theme=dark] .token.cdata{color:#5c6370}html[data-theme=dark] .token.doctype,html[data-theme=dark] .token.punctuation,html[data-theme=dark] .token.entity{color:#abb2bf}html[data-theme=dark] .token.attr-name,html[data-theme=dark] .token.class-name,html[data-theme=dark] .token.boolean,html[data-theme=dark] .token.constant,html[data-theme=dark] .token.number,html[data-theme=dark] .token.atrule{color:#d19a66}html[data-theme=dark] .token.keyword{color:#c678dd}html[data-theme=dark] .token.property,html[data-theme=dark] .token.tag,html[data-theme=dark] .token.symbol,html[data-theme=dark] .token.deleted,html[data-theme=dark] .token.important{color:#e06c75}html[data-theme=dark] .token.selector,html[data-theme=dark] .token.string,html[data-theme=dark] .token.char,html[data-theme=dark] .token.builtin,html[data-theme=dark] .token.inserted,html[data-theme=dark] .token.regex,html[data-theme=dark] .token.attr-value,html[data-theme=dark] .token.attr-value>.token.punctuation{color:#98c379}html[data-theme=dark] .token.variable,html[data-theme=dark] .token.operator,html[data-theme=dark] .token.function{color:#61afef}html[data-theme=dark] .token.url{color:#56b6c2}html[data-theme=dark] .token.attr-value>.token.punctuation.attr-equals,html[data-theme=dark] .token.special-attr>.token.attr-value>.token.value.css{color:#abb2bf}html[data-theme=dark] .language-css .token.selector{color:#e06c75}html[data-theme=dark] .language-css .token.property{color:#abb2bf}html[data-theme=dark] .language-css .token.function,html[data-theme=dark] .language-css .token.url>.token.function{color:#56b6c2}html[data-theme=dark] .language-css .token.url>.token.string.url{color:#98c379}html[data-theme=dark] .language-css .token.important,html[data-theme=dark] .language-css .token.atrule .token.rule,html[data-theme=dark] .language-javascript .token.operator{color:#c678dd}html[data-theme=dark] .language-javascript .token.template-string>.token.interpolation>.token.interpolation-punctuation.punctuation{color:#be5046}html[data-theme=dark] .language-json .token.operator{color:#abb2bf}html[data-theme=dark] .language-json .token.null.keyword{color:#d19a66}html[data-theme=dark] .language-markdown .token.url,html[data-theme=dark] .language-markdown .token.url>.token.operator,html[data-theme=dark] .language-markdown .token.url-reference.url>.token.string{color:#abb2bf}html[data-theme=dark] .language-markdown .token.url>.token.content{color:#61afef}html[data-theme=dark] .language-markdown .token.url>.token.url,html[data-theme=dark] .language-markdown .token.url-reference.url{color:#56b6c2}html[data-theme=dark] .language-markdown .token.blockquote.punctuation,html[data-theme=dark] .language-markdown .token.hr.punctuation{color:#5c6370;font-style:italic}html[data-theme=dark] .language-markdown .token.code-snippet{color:#98c379}html[data-theme=dark] .language-markdown .token.bold .token.content{color:#d19a66}html[data-theme=dark] .language-markdown .token.italic .token.content{color:#c678dd}html[data-theme=dark] .language-markdown .token.strike .token.content,html[data-theme=dark] .language-markdown .token.strike .token.punctuation,html[data-theme=dark] .language-markdown .token.list.punctuation,html[data-theme=dark] .language-markdown .token.title.important>.token.punctuation{color:#e06c75}html[data-theme=dark] .token.bold{font-weight:700}html[data-theme=dark] .token.comment,html[data-theme=dark] .token.italic{font-style:italic}html[data-theme=dark] .token.entity{cursor:help}html[data-theme=dark] .token.namespace{opacity:.8}.sr-only{position:absolute;overflow:hidden;clip:rect(0,0,0,0);width:1px;height:1px;margin:-1px;padding:0;border-width:0;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media print{.theme-hope-content{margin:0!important;padding-inline:0!important}}.theme-hope-content.custom{margin:0;padding:0}.theme-hope-content:not(.custom){max-width:var(--content-width, 740px);margin:0 auto;padding:2rem 2.5rem;padding-top:0}@media (max-width: 959px){.theme-hope-content:not(.custom){padding:1.5rem}}@media (max-width: 419px){.theme-hope-content:not(.custom){padding:1rem 1.5rem}}@media print{.theme-hope-content:not(.custom){max-width:unset}}.theme-hope-content:not(.custom)>h1,.theme-hope-content:not(.custom)>h2,.theme-hope-content:not(.custom)>h3,.theme-hope-content:not(.custom)>h4,.theme-hope-content:not(.custom)>h5,.theme-hope-content:not(.custom)>h6{margin-top:calc(.5rem - var(--navbar-height));margin-bottom:.5rem;padding-top:calc(1rem + var(--navbar-height));outline:none}.theme-container.no-navbar .theme-hope-content:not(.custom)>h1,.theme-container.no-navbar .theme-hope-content:not(.custom)>h2,.theme-container.no-navbar .theme-hope-content:not(.custom)>h3,.theme-container.no-navbar .theme-hope-content:not(.custom)>h4,.theme-container.no-navbar .theme-hope-content:not(.custom)>h5,.theme-container.no-navbar .theme-hope-content:not(.custom)>h6{margin-top:1.5rem;padding-top:0}.theme-hope-content:not(.custom)>p,.theme-hope-content:not(.custom)>ul p,.theme-hope-content:not(.custom)>ol p{text-align:justify;overflow-wrap:break-word;-webkit-hyphens:auto;hyphens:auto}@media (max-width: 419px){.theme-hope-content:not(.custom)>p,.theme-hope-content:not(.custom)>ul p,.theme-hope-content:not(.custom)>ol p{text-align:start}}@media print{.theme-hope-content:not(.custom)>p,.theme-hope-content:not(.custom)>ul p,.theme-hope-content:not(.custom)>ol p{text-align:start}}.theme-hope-content a:hover{text-decoration:underline}.theme-hope-content img{max-width:100%}::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}html[data-theme=light]::view-transition-old(root),html[data-theme=dark]::view-transition-new(root){z-index:1}html[data-theme=light]::view-transition-new(root),html[data-theme=dark]::view-transition-old(root){z-index:99999}@media (min-width: 1280px){.chart-wrapper::-webkit-scrollbar,.flowchart-wrapper::-webkit-scrollbar,.mermaid-wrapper::-webkit-scrollbar{width:8px;height:8px}.chart-wrapper::-webkit-scrollbar-track-piece,.flowchart-wrapper::-webkit-scrollbar-track-piece,.mermaid-wrapper::-webkit-scrollbar-track-piece{border-radius:8px;background:rgba(0,0,0,.1)}}html[dir=rtl] a.header-anchor{float:right}#docsearch-container{min-width:145.7px!important}@media (max-width: 959px){#docsearch-container{min-width:36px!important}}.DocSearch.DocSearch-Button{margin-left:0}@media (max-width: 959px){.DocSearch.DocSearch-Button{min-width:36px!important}}.DocSearch .DocSearch-Button-Placeholder{display:inline-block;padding:4px 12px 4px 6px;font-size:14px}@media (max-width: 719px){.DocSearch .DocSearch-Button-Placeholder{display:none}}.DocSearch .DocSearch-Search-Icon{width:1.25em;height:1.25em}@media (max-width: 959px){.DocSearch .DocSearch-Button-Keys{display:none}}.DocSearch .DocSearch-Button-Key{background:var(--bg-color);box-shadow:none}:root{scrollbar-width:thin}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track-piece{border-radius:6px;background:rgba(0,0,0,.1)}::-webkit-scrollbar-thumb{border-radius:6px;background:var(--theme-color)}::-webkit-scrollbar-thumb:active{background:var(--theme-color-light)}@media (max-width: 719px){.hide-in-mobile{display:none!important}}@media (max-width: 959px){.hide-in-pad{display:none!important}}.page-author-item{display:inline-block;margin:0 4px;font-weight:400;overflow-wrap:break-word}.page-category-info{flex-wrap:wrap}.page-category-item{display:inline-block;margin:.125em .25em;padding:0 .25em;border-radius:.25em;background:var(--bg-color-secondary);color:var(--text-color-light);font-weight:700;font-size:.75rem;line-height:2;transition:background var(--color-transition),color var(--color-transition)}@media print{.page-category-item{padding:0;font-weight:400}.page-category-item:after{content:", "}.page-category-item:last-of-type:after{content:""}}.page-category-item.clickable>span:hover{color:var(--theme-color);cursor:pointer}.page-category-item.category0{background:#fde5e7;color:#ec2f3e}html[data-theme=dark] .page-category-item.category0{background:#340509;color:#ba111f}.page-category-item.category0:hover{background:#f9bec3}html[data-theme=dark] .page-category-item.category0:hover{background:#53080e}.page-category-item.category1{background:#ffeee8;color:#fb7649}html[data-theme=dark] .page-category-item.category1{background:#441201;color:#f54205}.page-category-item.category1:hover{background:#fed4c6}html[data-theme=dark] .page-category-item.category1:hover{background:#6d1d02}.page-category-item.category2{background:#fef5e7;color:#f5b041}html[data-theme=dark] .page-category-item.category2{background:#3e2703;color:#e08e0b}.page-category-item.category2:hover{background:#fce6c4}html[data-theme=dark] .page-category-item.category2:hover{background:#633f05}.page-category-item.category3{background:#eafaf1;color:#55d98d}html[data-theme=dark] .page-category-item.category3{background:#0c331c;color:#29b866}.page-category-item.category3:hover{background:#caf3db}html[data-theme=dark] .page-category-item.category3:hover{background:#12522d}.page-category-item.category4{background:#e6f9ee;color:#36d278}html[data-theme=dark] .page-category-item.category4{background:#092917;color:#219552}.page-category-item.category4:hover{background:#c0f1d5}html[data-theme=dark] .page-category-item.category4:hover{background:#0f4224}.page-category-item.category5{background:#e1fcfc;color:#16e1e1}html[data-theme=dark] .page-category-item.category5{background:#042929;color:#0e9595}.page-category-item.category5:hover{background:#b4f8f8}html[data-theme=dark] .page-category-item.category5:hover{background:#064242}.page-category-item.category6{background:#e4f0fe;color:#2589f6}html[data-theme=dark] .page-category-item.category6{background:#021b36;color:#0862c3}.page-category-item.category6:hover{background:#bbdafc}html[data-theme=dark] .page-category-item.category6:hover{background:#042c57}.page-category-item.category7{background:#f7f1fd;color:#bb8ced}html[data-theme=dark] .page-category-item.category7{background:#2a0b4b;color:#9851e4}.page-category-item.category7:hover{background:#eadbfa}html[data-theme=dark] .page-category-item.category7:hover{background:#431277}.page-category-item.category8{background:#fdeaf5;color:#ef59ab}html[data-theme=dark] .page-category-item.category8{background:#400626;color:#e81689}.page-category-item.category8:hover{background:#facbe5}html[data-theme=dark] .page-category-item.category8:hover{background:#670a3d}.page-original-info{position:relative;display:inline-block;vertical-align:middle;overflow:hidden;padding:0 .5em;border:.5px solid var(--dark-grey);border-radius:.75em;background:var(--bg-color);font-size:.75em;line-height:1.5!important}.page-info{display:flex;flex-wrap:wrap;align-items:center;place-content:stretch flex-start;color:var(--dark-grey);font-size:14px}@media print{.page-info{display:flex!important}}.page-info>span{display:flex;align-items:center;max-width:100%;margin-inline-end:.5em;line-height:2}@media (min-width: 1440px){.page-info>span{font-size:1.1em}}@media (max-width: 419px){.page-info>span{margin-inline-end:.3em;font-size:.875em}}@media print{.page-info>span{display:flex!important}}.page-info .icon{position:relative;display:inline-block;vertical-align:middle;width:1em;height:1em;margin-inline-end:.25em}.page-info a{color:inherit}.page-info a:hover,.page-info a:active{color:var(--theme-color)}.page-meta{max-width:var(--content-width, 740px);margin-inline:auto;padding-inline:2.5rem;display:flex;flex-wrap:wrap;justify-content:space-between;overflow:auto;padding-top:.75rem;padding-bottom:.75rem}@media (max-width: 959px){.page-meta{padding-inline:1.5rem}}@media print{.page-meta{max-width:unset}}@media print{.page-meta{margin:0!important;padding-inline:0!important}}@media (max-width: 719px){.page-meta{display:block}}.page-meta .meta-item{flex-grow:1}.page-meta .meta-item .label{font-weight:500}.page-meta .meta-item .label:not(a){color:var(--text-color-lighter)}.page-meta .meta-item .info{color:var(--dark-grey);font-weight:400}.page-meta .git-info{text-align:end}.page-meta .edit-link{margin-top:.25rem;margin-bottom:.25rem;margin-inline-end:.5rem;font-size:14px}@media print{.page-meta .edit-link{display:none}}.page-meta .edit-link .icon{position:relative;bottom:-.125em;width:1em;height:1em;margin-inline-end:.25em}.page-meta .update-time,.page-meta .contributors{margin-top:.25rem;margin-bottom:.25rem;font-size:14px}@media (max-width: 719px){.page-meta .update-time,.page-meta .contributors{font-size:13px;text-align:start}}.print-button{border-width:0;background:transparent;cursor:pointer;box-sizing:content-box;width:1rem;height:1rem;padding:.5rem;border-radius:.25em;color:inherit;font-size:1rem;transform:translateY(.25rem)}@media print{.print-button{display:none}}.page-tag-info{flex-wrap:wrap}.page-tag-item{position:relative;display:inline-block;vertical-align:middle;overflow:hidden;min-width:1.5rem;margin:.125rem;padding:.125rem .25rem .125rem .625rem;background:var(--bg-color-secondary);background:linear-gradient(135deg,transparent .75em,var(--bg-color-secondary) 0) top,linear-gradient(45deg,transparent .75em,var(--bg-color-secondary) 0) bottom;background-size:100% 52%!important;background-repeat:no-repeat!important;color:var(--text-color-light);font-weight:700;font-size:.625rem;line-height:1.5;text-align:center;transition:background var(--color-transition),color var(--color-transition)}@media print{.page-tag-item{padding:0;font-weight:400}.page-tag-item:after{content:", "}.page-tag-item:last-of-type:after{content:""}}.page-tag-item.clickable:hover{cursor:pointer}.page-tag-item.tag0{background:#fde5e7;background:linear-gradient(135deg,transparent .75em,#fde5e7 0) top,linear-gradient(45deg,transparent .75em,#fde5e7 0) bottom;color:#ec2f3e}html[data-theme=dark] .page-tag-item.tag0{background:#340509;background:linear-gradient(135deg,transparent .75em,#340509 0) top,linear-gradient(45deg,transparent .75em,#340509 0) bottom;color:#ba111f}.page-tag-item.tag0.clickable:hover{background:#f9bec3;background:linear-gradient(135deg,transparent .75em,#f9bec3 0) top,linear-gradient(45deg,transparent .75em,#f9bec3 0) bottom}html[data-theme=dark] .page-tag-item.tag0.clickable:hover{background:#53080e;background:linear-gradient(135deg,transparent .75em,#53080e 0) top,linear-gradient(45deg,transparent .75em,#53080e 0) bottom}.page-tag-item.tag1{background:#ffeee8;background:linear-gradient(135deg,transparent .75em,#ffeee8 0) top,linear-gradient(45deg,transparent .75em,#ffeee8 0) bottom;color:#fb7649}html[data-theme=dark] .page-tag-item.tag1{background:#441201;background:linear-gradient(135deg,transparent .75em,#441201 0) top,linear-gradient(45deg,transparent .75em,#441201 0) bottom;color:#f54205}.page-tag-item.tag1.clickable:hover{background:#fed4c6;background:linear-gradient(135deg,transparent .75em,#fed4c6 0) top,linear-gradient(45deg,transparent .75em,#fed4c6 0) bottom}html[data-theme=dark] .page-tag-item.tag1.clickable:hover{background:#6d1d02;background:linear-gradient(135deg,transparent .75em,#6d1d02 0) top,linear-gradient(45deg,transparent .75em,#6d1d02 0) bottom}.page-tag-item.tag2{background:#fef5e7;background:linear-gradient(135deg,transparent .75em,#fef5e7 0) top,linear-gradient(45deg,transparent .75em,#fef5e7 0) bottom;color:#f5b041}html[data-theme=dark] .page-tag-item.tag2{background:#3e2703;background:linear-gradient(135deg,transparent .75em,#3e2703 0) top,linear-gradient(45deg,transparent .75em,#3e2703 0) bottom;color:#e08e0b}.page-tag-item.tag2.clickable:hover{background:#fce6c4;background:linear-gradient(135deg,transparent .75em,#fce6c4 0) top,linear-gradient(45deg,transparent .75em,#fce6c4 0) bottom}html[data-theme=dark] .page-tag-item.tag2.clickable:hover{background:#633f05;background:linear-gradient(135deg,transparent .75em,#633f05 0) top,linear-gradient(45deg,transparent .75em,#633f05 0) bottom}.page-tag-item.tag3{background:#eafaf1;background:linear-gradient(135deg,transparent .75em,#eafaf1 0) top,linear-gradient(45deg,transparent .75em,#eafaf1 0) bottom;color:#55d98d}html[data-theme=dark] .page-tag-item.tag3{background:#0c331c;background:linear-gradient(135deg,transparent .75em,#0c331c 0) top,linear-gradient(45deg,transparent .75em,#0c331c 0) bottom;color:#29b866}.page-tag-item.tag3.clickable:hover{background:#caf3db;background:linear-gradient(135deg,transparent .75em,#caf3db 0) top,linear-gradient(45deg,transparent .75em,#caf3db 0) bottom}html[data-theme=dark] .page-tag-item.tag3.clickable:hover{background:#12522d;background:linear-gradient(135deg,transparent .75em,#12522d 0) top,linear-gradient(45deg,transparent .75em,#12522d 0) bottom}.page-tag-item.tag4{background:#e6f9ee;background:linear-gradient(135deg,transparent .75em,#e6f9ee 0) top,linear-gradient(45deg,transparent .75em,#e6f9ee 0) bottom;color:#36d278}html[data-theme=dark] .page-tag-item.tag4{background:#092917;background:linear-gradient(135deg,transparent .75em,#092917 0) top,linear-gradient(45deg,transparent .75em,#092917 0) bottom;color:#219552}.page-tag-item.tag4.clickable:hover{background:#c0f1d5;background:linear-gradient(135deg,transparent .75em,#c0f1d5 0) top,linear-gradient(45deg,transparent .75em,#c0f1d5 0) bottom}html[data-theme=dark] .page-tag-item.tag4.clickable:hover{background:#0f4224;background:linear-gradient(135deg,transparent .75em,#0f4224 0) top,linear-gradient(45deg,transparent .75em,#0f4224 0) bottom}.page-tag-item.tag5{background:#e1fcfc;background:linear-gradient(135deg,transparent .75em,#e1fcfc 0) top,linear-gradient(45deg,transparent .75em,#e1fcfc 0) bottom;color:#16e1e1}html[data-theme=dark] .page-tag-item.tag5{background:#042929;background:linear-gradient(135deg,transparent .75em,#042929 0) top,linear-gradient(45deg,transparent .75em,#042929 0) bottom;color:#0e9595}.page-tag-item.tag5.clickable:hover{background:#b4f8f8;background:linear-gradient(135deg,transparent .75em,#b4f8f8 0) top,linear-gradient(45deg,transparent .75em,#b4f8f8 0) bottom}html[data-theme=dark] .page-tag-item.tag5.clickable:hover{background:#064242;background:linear-gradient(135deg,transparent .75em,#064242 0) top,linear-gradient(45deg,transparent .75em,#064242 0) bottom}.page-tag-item.tag6{background:#e4f0fe;background:linear-gradient(135deg,transparent .75em,#e4f0fe 0) top,linear-gradient(45deg,transparent .75em,#e4f0fe 0) bottom;color:#2589f6}html[data-theme=dark] .page-tag-item.tag6{background:#021b36;background:linear-gradient(135deg,transparent .75em,#021b36 0) top,linear-gradient(45deg,transparent .75em,#021b36 0) bottom;color:#0862c3}.page-tag-item.tag6.clickable:hover{background:#bbdafc;background:linear-gradient(135deg,transparent .75em,#bbdafc 0) top,linear-gradient(45deg,transparent .75em,#bbdafc 0) bottom}html[data-theme=dark] .page-tag-item.tag6.clickable:hover{background:#042c57;background:linear-gradient(135deg,transparent .75em,#042c57 0) top,linear-gradient(45deg,transparent .75em,#042c57 0) bottom}.page-tag-item.tag7{background:#f7f1fd;background:linear-gradient(135deg,transparent .75em,#f7f1fd 0) top,linear-gradient(45deg,transparent .75em,#f7f1fd 0) bottom;color:#bb8ced}html[data-theme=dark] .page-tag-item.tag7{background:#2a0b4b;background:linear-gradient(135deg,transparent .75em,#2a0b4b 0) top,linear-gradient(45deg,transparent .75em,#2a0b4b 0) bottom;color:#9851e4}.page-tag-item.tag7.clickable:hover{background:#eadbfa;background:linear-gradient(135deg,transparent .75em,#eadbfa 0) top,linear-gradient(45deg,transparent .75em,#eadbfa 0) bottom}html[data-theme=dark] .page-tag-item.tag7.clickable:hover{background:#431277;background:linear-gradient(135deg,transparent .75em,#431277 0) top,linear-gradient(45deg,transparent .75em,#431277 0) bottom}.page-tag-item.tag8{background:#fdeaf5;background:linear-gradient(135deg,transparent .75em,#fdeaf5 0) top,linear-gradient(45deg,transparent .75em,#fdeaf5 0) bottom;color:#ef59ab}html[data-theme=dark] .page-tag-item.tag8{background:#400626;background:linear-gradient(135deg,transparent .75em,#400626 0) top,linear-gradient(45deg,transparent .75em,#400626 0) bottom;color:#e81689}.page-tag-item.tag8.clickable:hover{background:#facbe5;background:linear-gradient(135deg,transparent .75em,#facbe5 0) top,linear-gradient(45deg,transparent .75em,#facbe5 0) bottom}html[data-theme=dark] .page-tag-item.tag8.clickable:hover{background:#670a3d;background:linear-gradient(135deg,transparent .75em,#670a3d 0) top,linear-gradient(45deg,transparent .75em,#670a3d 0) bottom}.toc-place-holder{margin-inline:auto;padding-inline:2.5rem;position:sticky;top:calc(var(--navbar-height) + 2rem);z-index:99;max-width:var(--content-width, 740px)}@media (max-width: 959px){.toc-place-holder{padding-inline:1.5rem}}@media print{.toc-place-holder{max-width:unset}}.toc-place-holder+.theme-hope-content:not(.custom){padding-top:0}#toc{position:absolute;inset-inline-start:calc(100% + 1rem);display:none;min-width:10rem;max-width:15rem}@media (min-width: 1440px){.has-toc #toc{display:block}}@media print{#toc{display:none!important}}#toc .toc-header{margin-bottom:.75rem;margin-inline-start:.5rem;font-weight:600;font-size:.875rem}#toc .toc-wrapper{position:relative;overflow:hidden auto;max-height:75vh;margin:0 .5rem;padding-inline-start:8px;text-overflow:ellipsis;white-space:nowrap;scroll-behavior:smooth}#toc .toc-wrapper::-webkit-scrollbar-track-piece{background:transparent}#toc .toc-wrapper::-webkit-scrollbar{width:3px}#toc .toc-wrapper::-webkit-scrollbar-thumb:vertical{background:#ddd}html[data-theme=dark] #toc .toc-wrapper::-webkit-scrollbar-thumb:vertical{background:#333}#toc .toc-wrapper:before{content:" ";position:absolute;top:0;bottom:0;inset-inline-start:0;z-index:-1;width:2px;background:var(--border-color)}#toc .toc-list{position:relative;margin:0;padding:0}#toc .toc-marker{content:" ";position:absolute;top:0;inset-inline-start:-8px;z-index:2;width:2px;height:1.7rem;background:var(--theme-color);transition:top var(--vp-tt)}#toc .toc-link{position:relative;display:block;overflow:hidden;max-width:100%;color:var(--light-grey);line-height:inherit;text-overflow:ellipsis;white-space:nowrap}#toc .toc-link.level2{padding-inline-start:0px;font-size:14px}#toc .toc-link.level3{padding-inline-start:8px;font-size:13px}#toc .toc-link.level4{padding-inline-start:16px;font-size:12px}#toc .toc-link.level5{padding-inline-start:24px;font-size:11px}#toc .toc-link.level6{padding-inline-start:32px;font-size:10px}#toc .toc-item{position:relative;box-sizing:border-box;height:1.7rem;padding:0 .5rem;list-style:none;line-height:1.7rem}#toc .toc-item:hover>.toc-link{color:var(--theme-color)}#toc .toc-item.active>.toc-link{color:var(--theme-color);font-weight:700}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper:not(:hover) .arrow{transform:rotate(-180deg)}.dropdown-wrapper .dropdown-title{border-width:0;background:transparent;cursor:pointer;padding:0 .25rem;color:var(--dark-grey);font-weight:500;font-size:inherit;font-family:inherit;line-height:inherit;cursor:inherit}.dropdown-wrapper .dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .icon{margin-inline-end:.25em;font-size:1em}.dropdown-wrapper .dropdown-title .arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s;font-size:1.2em}html[data-theme=dark] .dropdown-wrapper .dropdown-title .arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.dropdown-wrapper .dropdown-title .arrow.down{transform:rotate(180deg)}html[dir=rtl] .dropdown-wrapper .dropdown-title .arrow.down{transform:rotate(-180deg)}.dropdown-wrapper .dropdown-title .arrow.end{transform:rotate(90deg)}html[dir=rtl] .dropdown-wrapper .dropdown-title .arrow.end,.dropdown-wrapper .dropdown-title .arrow.start{transform:rotate(-90deg)}html[dir=rtl] .dropdown-wrapper .dropdown-title .arrow.start{transform:rotate(90deg)}.dropdown-wrapper ul{margin:0;padding:0;list-style-type:none}.dropdown-wrapper .nav-dropdown{position:absolute;top:100%;inset-inline-end:0;overflow-y:auto;box-sizing:border-box;min-width:6rem;max-height:calc(100vh - var(--navbar-height));margin:0;padding:.5rem .75rem;border:1px solid var(--grey14);border-radius:.5rem;background:var(--bg-color);box-shadow:2px 2px 10px var(--card-shadow);text-align:start;white-space:nowrap;opacity:0;visibility:hidden;transition:all .18s ease-out;transform:scale(.9)}.dropdown-wrapper:hover .nav-dropdown,.dropdown-wrapper.open .nav-dropdown{z-index:2;opacity:1;visibility:visible;transform:none}.dropdown-wrapper .nav-link{position:relative;display:block;margin-bottom:0;border-bottom:none;color:var(--dark-grey);font-weight:400;font-size:.875rem;line-height:1.7rem;transition:color var(--color-transition)}.dropdown-wrapper .nav-link:hover,.dropdown-wrapper .nav-link.active{color:var(--theme-color)}.dropdown-wrapper .dropdown-subtitle{margin:0;padding:.5rem .25rem 0;color:var(--light-grey);font-weight:600;font-size:.75rem;line-height:2;text-transform:uppercase;transition:color var(--color-transition)}.dropdown-wrapper .dropdown-subitem-wrapper{padding:0 0 .25rem}.dropdown-wrapper .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .dropdown-item:last-child .dropdown-subtitle{padding-top:0}.dropdown-wrapper .dropdown-item:last-child .dropdown-subitem-wrapper{padding-bottom:0}.nav-screen-dropdown-title{border-width:0;background:transparent;position:relative;display:flex;align-items:center;width:100%;padding:0;color:var(--dark-grey);font-size:inherit;font-family:inherit;text-align:start;cursor:pointer}.nav-screen-dropdown-title:hover,.nav-screen-dropdown-title.active{color:var(--text-color)}.nav-screen-dropdown-title .title{flex:1}.nav-screen-dropdown-title .arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s}html[data-theme=dark] .nav-screen-dropdown-title .arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.nav-screen-dropdown-title .arrow.down{transform:rotate(180deg)}html[dir=rtl] .nav-screen-dropdown-title .arrow.down{transform:rotate(-180deg)}.nav-screen-dropdown-title .arrow.end{transform:rotate(90deg)}html[dir=rtl] .nav-screen-dropdown-title .arrow.end,.nav-screen-dropdown-title .arrow.start{transform:rotate(-90deg)}html[dir=rtl] .nav-screen-dropdown-title .arrow.start{transform:rotate(90deg)}.nav-screen-dropdown{overflow:hidden;margin:.5rem 0 0;padding:0;list-style:none;transition:transform .1s ease-out;transform:scaleY(1);transform-origin:top}.nav-screen-dropdown.hide{height:0;margin:0;transform:scaleY(0)}.nav-screen-dropdown .nav-link{position:relative;display:block;padding-inline-start:.5rem;font-weight:400;line-height:2}.nav-screen-dropdown .nav-link:hover,.nav-screen-dropdown .nav-link.active{color:var(--theme-color)}.nav-screen-dropdown .nav-link .icon{font-size:1em}.nav-screen-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.nav-screen-dropdown .dropdown-subtitle{margin:0;padding-inline-start:.25rem;color:var(--light-grey);font-weight:600;font-size:.75rem;line-height:2;text-transform:uppercase;transition:color var(--color-transition)}.nav-screen-dropdown .dropdown-subtitle .nav-link{padding:0}.nav-screen-dropdown .dropdown-subitem-wrapper{margin:0;padding:0;list-style:none}.nav-screen-dropdown .dropdown-subitem{padding-inline-start:.5rem;font-size:.9em}.nav-screen-links{display:none;padding-bottom:.75rem}@media (max-width: 719px){.nav-screen-links{display:block}}.nav-screen-links .navbar-links-item{position:relative;display:block;padding:12px 4px 11px 0;border-bottom:1px solid var(--border-color);font-size:16px;line-height:1.5rem;transition:border-bottom-color var(--color-transition)}.nav-screen-links .nav-link{display:inline-block;width:100%;color:var(--dark-grey);font-weight:400}.nav-screen-links .nav-link:hover{color:var(--text-color)}.nav-screen-links .nav-link.active{color:var(--theme-color)}.vp-nav-screen-container{max-width:320px;margin:0 auto;padding:2rem 0 4rem}#nav-screen{position:fixed;inset:var(--navbar-height) 0 0 0;z-index:150;display:none;overflow-y:auto;padding:0 2rem;background:var(--bg-color);transition:background .5s}@media (max-width: 719px){#nav-screen{display:block}}#nav-screen.fade-enter-active,#nav-screen.fade-leave-active{transition:opacity .25s}#nav-screen.fade-enter-active .vp-nav-screen-container,#nav-screen.fade-leave-active .vp-nav-screen-container{transition:transform .25s ease}#nav-screen.fade-enter-from,#nav-screen.fade-leave-to{opacity:0}#nav-screen.fade-enter-from .vp-nav-screen-container,#nav-screen.fade-leave-to .vp-nav-screen-container{transform:translateY(-8px)}#nav-screen .icon{margin-inline-end:.25em;font-size:1em}#nav-screen img.icon{vertical-align:-.125em;height:1em}.vp-outlook-wrapper{display:flex;justify-content:space-around}.vp-nav-logo{vertical-align:top;height:var(--navbar-line-height);margin-inline-end:.8rem}.vp-nav-logo.light{display:inline-block}.vp-nav-logo.dark,html[data-theme=dark] .vp-nav-logo.light{display:none}html[data-theme=dark] .vp-nav-logo.dark{display:inline-block}.vp-site-name{position:relative;color:var(--text-color);font-size:1.25rem}@media (max-width: 719px){.vp-site-name{overflow:hidden;width:calc(100vw - 9.4rem);text-overflow:ellipsis;white-space:nowrap}}.vp-brand:hover .vp-site-name{color:var(--theme-color)}.vp-navbar .vp-nav-links{display:flex;align-items:center;font-size:.875rem}.vp-navbar .nav-item{position:relative;margin:0 .25rem;line-height:2rem}.vp-navbar .nav-item:first-child{margin-inline-start:0}.vp-navbar .nav-item:last-child{margin-inline-end:0}.vp-navbar .nav-item>.nav-link{color:var(--dark-grey)}.vp-navbar .nav-item>.nav-link:after{content:" ";position:absolute;inset:auto 50% 0;height:2px;border-radius:1px;background:var(--theme-color-light);visibility:hidden;transition:inset .2s ease-in-out}.vp-navbar .nav-item>.nav-link.active{color:var(--theme-color)}.vp-navbar .nav-item>.nav-link:hover:after,.vp-navbar .nav-item>.nav-link.active:after{inset:auto 0 0;visibility:visible}.vp-navbar{--navbar-line-height: calc( var(--navbar-height) - var(--navbar-vertical-padding) * 2 );position:fixed;inset:0 0 auto;z-index:175;display:flex;align-items:center;justify-content:space-between;box-sizing:border-box;height:var(--navbar-height);padding:var(--navbar-vertical-padding) var(--navbar-horizontal-padding);background:var(--navbar-bg-color);box-shadow:0 2px 8px var(--card-shadow);line-height:var(--navbar-line-height);white-space:nowrap;transition:transform ease-in-out .3s,background var(--color-transition),box-shadow var(--color-transition);-webkit-backdrop-filter:saturate(150%) blur(12px);backdrop-filter:saturate(150%) blur(12px)}@media print{.vp-navbar{display:none}}.hide-navbar .vp-navbar.auto-hide{transform:translateY(-100%)}.vp-navbar .nav-link{padding:0 .25rem;color:var(--dark-grey)}.vp-navbar .nav-link.active{color:var(--theme-color)}.vp-navbar .nav-link .icon{margin-inline-end:.25em;font-size:1em}.vp-navbar .nav-link img.icon{vertical-align:-.125em;height:1em}.vp-navbar.hide-icon .vp-nav-links .icon{display:none!important}.vp-navbar-start,.vp-navbar-end,.vp-navbar-center{display:flex;flex:1;align-items:center}.vp-navbar-start>*,.vp-navbar-end>*,.vp-navbar-center>*{position:relative;margin:0 .25rem!important}.vp-navbar-start>*:first-child,.vp-navbar-end>*:first-child,.vp-navbar-center>*:first-child{margin-inline-start:0!important}.vp-navbar-start>*:last-child,.vp-navbar-end>*:last-child,.vp-navbar-center>*:last-child{margin-inline-end:0!important}.vp-navbar-start{justify-content:start}.vp-navbar-center{justify-content:center}.vp-navbar-end{justify-content:end}.vp-navbar .vp-repo{margin:0!important}.vp-navbar .vp-repo-link{display:inline-block;margin:auto;padding:6px;color:var(--dark-grey);line-height:1}.vp-navbar .vp-repo-link:hover,.vp-navbar .vp-repo-link:active{color:var(--theme-color)}.vp-toggle-navbar-button{border-width:0;background:transparent;cursor:pointer;position:relative;display:none;align-items:center;justify-content:center;padding:6px}@media screen and (max-width: 719px){.vp-toggle-navbar-button{display:flex}}.vp-toggle-navbar-button>span{position:relative;overflow:hidden;width:16px;height:14px}.vp-toggle-navbar-button .vp-top,.vp-toggle-navbar-button .vp-middle,.vp-toggle-navbar-button .vp-bottom{position:absolute;width:16px;height:2px;background:var(--dark-grey);transition:top .25s,background .5s,transform .25s}.vp-toggle-navbar-button .vp-top{top:0;left:0;transform:translate(0)}.vp-toggle-navbar-button .vp-middle{top:6px;left:0;transform:translate(8px)}.vp-toggle-navbar-button .vp-bottom{top:12px;left:0;transform:translate(4px)}.vp-toggle-navbar-button:hover .vp-top{top:0;left:0;transform:translate(4px)}.vp-toggle-navbar-button:hover .vp-middle{top:6;left:0;transform:translate(0)}.vp-toggle-navbar-button:hover .vp-bottom{top:12px;left:0;transform:translate(8px)}.vp-toggle-navbar-button.is-active .vp-top{top:6px;transform:translate(0) rotate(225deg)}.vp-toggle-navbar-button.is-active .vp-middle{top:6px;transform:translate(16px)}.vp-toggle-navbar-button.is-active .vp-bottom{top:6px;transform:translate(0) rotate(135deg)}.vp-toggle-navbar-button.is-active:hover .vp-top,.vp-toggle-navbar-button.is-active:hover .vp-middle,.vp-toggle-navbar-button.is-active:hover .vp-bottom{background:var(--theme-color);transition:top .25s,background .25s,transform .25s}.vp-toggle-sidebar-button{border-width:0;background:transparent;cursor:pointer;display:none;vertical-align:middle;box-sizing:content-box;width:1rem;height:1rem;padding:.5rem;font:unset;transition:transform .2s ease-in-out}@media screen and (max-width: 719px){.vp-toggle-sidebar-button{display:block;padding-inline-end:var(--navbar-mobile-horizontal-padding)}}.vp-toggle-sidebar-button:before,.vp-toggle-sidebar-button:after,.vp-toggle-sidebar-button .icon{display:block;width:100%;height:2px;border-radius:.05em;background:var(--dark-grey);transition:transform .2s ease-in-out}.vp-toggle-sidebar-button:before{content:" ";margin-top:.125em}.sidebar-open .vp-toggle-sidebar-button:before{transform:translateY(.34rem) rotate(135deg)}.vp-toggle-sidebar-button:after{content:" ";margin-bottom:.125em}.sidebar-open .vp-toggle-sidebar-button:after{transform:translateY(-.34rem) rotate(-135deg)}.vp-toggle-sidebar-button .icon{margin:.2em 0}.sidebar-open .vp-toggle-sidebar-button .icon{transform:scale(0)}.appearance-title{display:block;margin:0;padding:0 .25rem;color:var(--light-grey);font-weight:600;font-size:.75rem;line-height:2;transition:color var(--color-transition)}#appearance-switch{border-width:0;background:transparent;vertical-align:middle;padding:6px;color:var(--dark-grey);cursor:pointer;transition:color var(--color-transition)}#appearance-switch:hover{color:var(--theme-color)}#appearance-switch .icon{width:1.25rem;height:1.25rem}.outlook-button{border-width:0;background:transparent;cursor:pointer;position:relative;padding:.375rem;color:var(--dark-grey)}.outlook-button .icon{vertical-align:middle;width:1.25rem;height:1.25rem}.outlook-dropdown{position:absolute;top:100%;inset-inline-end:0;overflow-y:auto;box-sizing:border-box;min-width:100px;margin:0;padding:.5rem .75rem;border:1px solid var(--grey14);border-radius:.25rem;background:var(--bg-color);box-shadow:2px 2px 10px var(--card-shadow);text-align:start;white-space:nowrap;opacity:0;visibility:hidden;transition:all .18s ease-out;transform:scale(.8)}.outlook-dropdown>*:not(:last-child){padding-bottom:.5rem;border-bottom:1px solid var(--grey14)}.outlook-button:hover .outlook-dropdown,.outlook-button.open .outlook-dropdown{z-index:2;opacity:1;visibility:visible;transform:scale(1)}.theme-color-title{display:block;margin:0;padding:0 .25rem;color:var(--light-grey);font-weight:600;font-size:.75rem;line-height:2;transition:color var(--color-transition)}#theme-color-picker{display:flex;margin:0;padding:0;list-style-type:none;font-size:14px}#theme-color-picker li span{display:inline-block;vertical-align:middle;width:15px;height:15px;margin:0 2px;border-radius:2px}#theme-color-picker li span.theme-color,#theme-color-picker li span.theme-color html[data-theme=dark]{background:#096dd9}@media print{.full-screen-wrapper{display:none}}.full-screen-title{display:block;margin:0;padding:0 .25rem;color:var(--light-grey);font-weight:600;font-size:.75rem;line-height:2;transition:color var(--color-transition)}.full-screen,.cancel-full-screen{border-width:0;background:transparent;vertical-align:middle;padding:.375rem;color:var(--dark-grey);cursor:pointer}.full-screen:hover,.cancel-full-screen:hover{color:var(--theme-color)}.full-screen .icon,.cancel-full-screen .icon{width:1.25rem;height:1.25rem}.enter-fullscreen-icon:hover,.cancel-fullscreen-icon{color:var(--theme-color)}.cancel-fullscreen-icon:hover{color:var(--dark-grey)}.vp-sidebar-heading{display:flex;align-items:center;overflow:hidden;box-sizing:border-box;width:calc(100% - 1rem);margin:0;margin-inline:.5rem;padding:.25rem .5rem;border-width:0;border-radius:.375rem;background:transparent;color:var(--text-color);font-size:1.1em;line-height:1.5;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:color .15s ease;transform:rotate(0)}.vp-sidebar-heading.open{color:inherit}.vp-sidebar-heading.clickable:hover{background:var(--bg-color-secondary)}.vp-sidebar-heading.clickable.exact{border-inline-start-color:var(--theme-color);color:var(--theme-color)}.vp-sidebar-heading.clickable.exact a{color:inherit}.vp-sidebar-heading .vp-sidebar-title{flex:1}.vp-sidebar-heading .vp-arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s;font-size:1.5em}html[data-theme=dark] .vp-sidebar-heading .vp-arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.vp-sidebar-heading .vp-arrow.down{transform:rotate(180deg)}html[dir=rtl] .vp-sidebar-heading .vp-arrow.down{transform:rotate(-180deg)}.vp-sidebar-heading .vp-arrow.end{transform:rotate(90deg)}html[dir=rtl] .vp-sidebar-heading .vp-arrow.end,.vp-sidebar-heading .vp-arrow.start{transform:rotate(-90deg)}html[dir=rtl] .vp-sidebar-heading .vp-arrow.start{transform:rotate(90deg)}button.vp-sidebar-heading{outline:none;font-weight:inherit;font-family:inherit;line-height:inherit;text-align:start;cursor:pointer}.vp-sidebar-link{display:inline-block;box-sizing:border-box;width:calc(100% - 1rem);margin-inline:.5rem;padding:.25rem .5rem;border-radius:.375rem;color:var(--text-color);font-weight:400;font-size:1em;line-height:1.5}.vp-sidebar-link:hover{background:var(--bg-color-secondary)}.vp-sidebar-link.active{background:var(--theme-color-mask);color:var(--theme-color);font-weight:500}.vp-sidebar-link.active .icon{color:var(--theme-color)}.vp-sidebar-sub-headers .vp-sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-inline-start:none}.vp-sidebar-sub-headers .vp-sidebar-link.active{background:transparent;font-weight:500}.vp-sidebar-group:not(.collapsible) .vp-sidebar-heading:not(.clickable){color:inherit;cursor:auto}.vp-sidebar-group .vp-sidebar-group{padding-inline-start:.75rem}.vp-sidebar-group .vp-sidebar-group .vp-sidebar-heading{font-size:1em}.vp-sidebar-group .vp-sidebar-link{padding-inline-start:1.25rem}.vp-sidebar-links,.vp-sidebar-links ul{margin:0;padding:0}.vp-sidebar-links ul.vp-sidebar-sub-headers{padding-inline-start:.75rem;font-size:.95em}@media (min-width: 1440px){.has-toc .vp-sidebar-links ul.vp-sidebar-sub-headers{display:none}}.vp-sidebar-links li{list-style-type:none}.vp-sidebar>.vp-sidebar-links{padding:1.5rem 0}@media (max-width: 719px){.vp-sidebar>.vp-sidebar-links{padding:1rem 0}}.vp-sidebar>.vp-sidebar-links>li>.vp-sidebar-link{font-size:1.1em}.vp-sidebar>.vp-sidebar-links>li:not(:first-child){margin-top:.5rem}.vp-sidebar{position:fixed;top:0;bottom:0;inset-inline-start:0;z-index:1;overflow-y:auto;width:var(--sidebar-width);margin:0;padding-inline-start:calc(var(--sidebar-space) - var(--sidebar-width));background:var(--sidebar-bg-color);box-shadow:2px 0 8px var(--card-shadow);font-size:.94rem;transition:background var(--color-transition),box-shadow var(--color-transition),padding var(--transform-transition),transform var(--transform-transition);-webkit-backdrop-filter:saturate(150%) blur(12px);backdrop-filter:saturate(150%) blur(12px);scrollbar-color:var(--theme-color) var(--border-color);scrollbar-width:thin}@media (max-width: 959px){.vp-sidebar{font-size:.86em}}@media (max-width: 719px){.vp-sidebar{z-index:125;box-shadow:none;transform:translate(-100%)}html[dir=rtl] .vp-sidebar{transform:translate(100%)}}@media (min-width: 1440px){.vp-sidebar{padding-bottom:3rem;box-shadow:none;font-size:1rem}}@media print{.vp-sidebar{display:none}}.vp-sidebar a{display:inline-block;color:var(--text-color);font-weight:400}.vp-sidebar .icon{margin-inline-end:.25em;font-size:1em}.vp-sidebar img.icon{vertical-align:-.125em;height:1em}.vp-sidebar.hide-icon .icon{display:none!important}.vp-sidebar-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9;background:rgba(0,0,0,.15)}.vp-sidebar-mask.fade-enter-active,.vp-sidebar-mask.fade-leave-active{transition:opacity .25s}.vp-sidebar-mask.fade-enter-from,.vp-sidebar-mask.fade-leave-to{opacity:0}.vp-hero-info-wrapper{width:100vw;background:url(/assets/image/bg.svg) center/cover no-repeat}@media (min-width: 768px){.vp-hero-info-wrapper{height:100vh}} diff --git a/assets/styles-4ba6ed67-HTbB9pbZ.js b/assets/styles-4ba6ed67-qSs9rwsT.js similarity index 99% rename from assets/styles-4ba6ed67-HTbB9pbZ.js rename to assets/styles-4ba6ed67-qSs9rwsT.js index 2bc8f16..06cb52a 100644 --- a/assets/styles-4ba6ed67-HTbB9pbZ.js +++ b/assets/styles-4ba6ed67-qSs9rwsT.js @@ -1,4 +1,4 @@ -import{s as Xe,g as We,a as qe,b as He,c as F,v as Je,x as Ze,j as v,z as $e,l as et,y as Pe,h as U,d as tt,ar as ye}from"./mermaid.core-zy7cM8l9.js";var De=function(){var e=function(L,u,a,o){for(a=a||{},o=L.length;o--;a[L[o]]=u);return a},n=[1,16],r=[1,17],h=[1,18],l=[1,37],A=[1,38],g=[1,24],D=[1,22],B=[1,23],_=[1,29],ne=[1,30],ue=[1,31],re=[1,32],ae=[1,33],le=[1,34],ce=[1,25],oe=[1,26],he=[1,27],Ae=[1,28],d=[1,42],E=[1,39],C=[1,40],m=[1,41],k=[1,43],pe=[1,9],c=[1,8,9],Y=[1,54],K=[1,55],j=[1,56],Q=[1,57],X=[1,58],fe=[1,59],de=[1,60],W=[1,8,9,38],Ne=[1,71],V=[1,8,9,12,13,21,36,38,41,58,59,60,61,62,63,64,69,71],q=[1,8,9,12,13,19,21,36,38,41,45,58,59,60,61,62,63,64,69,71,84,86,87,88,89],H=[13,84,86,87,88,89],M=[13,63,64,84,86,87,88,89],ve=[13,58,59,60,61,62,84,86,87,88,89],Ee=[1,90],Ce=[1,8,9,36,38,41],J=[1,8,9,21],me={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,className:17,classLiteralName:18,GENERICTYPE:19,relationStatement:20,LABEL:21,namespaceStatement:22,classStatement:23,memberStatement:24,annotationStatement:25,clickStatement:26,cssClassStatement:27,noteStatement:28,direction:29,acc_title:30,acc_title_value:31,acc_descr:32,acc_descr_value:33,acc_descr_multiline_value:34,namespaceIdentifier:35,STRUCT_START:36,classStatements:37,STRUCT_STOP:38,NAMESPACE:39,classIdentifier:40,STYLE_SEPARATOR:41,members:42,CLASS:43,ANNOTATION_START:44,ANNOTATION_END:45,MEMBER:46,SEPARATOR:47,relation:48,NOTE_FOR:49,noteText:50,NOTE:51,direction_tb:52,direction_bt:53,direction_rl:54,direction_lr:55,relationType:56,lineType:57,AGGREGATION:58,EXTENSION:59,COMPOSITION:60,DEPENDENCY:61,LOLLIPOP:62,LINE:63,DOTTED_LINE:64,CALLBACK:65,LINK:66,LINK_TARGET:67,CLICK:68,CALLBACK_NAME:69,CALLBACK_ARGS:70,HREF:71,CSSCLASS:72,commentToken:73,textToken:74,graphCodeTokens:75,textNoTagsToken:76,TAGSTART:77,TAGEND:78,"==":79,"--":80,PCT:81,DEFAULT:82,SPACE:83,MINUS:84,keywords:85,UNICODE_TEXT:86,NUM:87,ALPHA:88,BQUOTE_STR:89,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",19:"GENERICTYPE",21:"LABEL",30:"acc_title",31:"acc_title_value",32:"acc_descr",33:"acc_descr_value",34:"acc_descr_multiline_value",36:"STRUCT_START",38:"STRUCT_STOP",39:"NAMESPACE",41:"STYLE_SEPARATOR",43:"CLASS",44:"ANNOTATION_START",45:"ANNOTATION_END",46:"MEMBER",47:"SEPARATOR",49:"NOTE_FOR",51:"NOTE",52:"direction_tb",53:"direction_bt",54:"direction_rl",55:"direction_lr",58:"AGGREGATION",59:"EXTENSION",60:"COMPOSITION",61:"DEPENDENCY",62:"LOLLIPOP",63:"LINE",64:"DOTTED_LINE",65:"CALLBACK",66:"LINK",67:"LINK_TARGET",68:"CLICK",69:"CALLBACK_NAME",70:"CALLBACK_ARGS",71:"HREF",72:"CSSCLASS",75:"graphCodeTokens",77:"TAGSTART",78:"TAGEND",79:"==",80:"--",81:"PCT",82:"DEFAULT",83:"SPACE",84:"MINUS",85:"keywords",86:"UNICODE_TEXT",87:"NUM",88:"ALPHA",89:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,2],[17,1],[17,1],[17,2],[17,2],[17,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[22,4],[22,5],[35,2],[37,1],[37,2],[37,3],[23,1],[23,3],[23,4],[23,6],[40,2],[40,3],[25,4],[42,1],[42,2],[24,1],[24,2],[24,1],[24,1],[20,3],[20,4],[20,4],[20,5],[28,3],[28,2],[29,1],[29,1],[29,1],[29,1],[48,3],[48,2],[48,2],[48,1],[56,1],[56,1],[56,1],[56,1],[56,1],[57,1],[57,1],[26,3],[26,4],[26,3],[26,4],[26,4],[26,5],[26,3],[26,4],[26,4],[26,5],[26,4],[26,5],[26,5],[26,6],[27,3],[73,1],[73,1],[74,1],[74,1],[74,1],[74,1],[74,1],[74,1],[74,1],[76,1],[76,1],[76,1],[76,1],[16,1],[16,1],[16,1],[16,1],[18,1],[50,1]],performAction:function(u,a,o,i,p,t,G){var s=t.length-1;switch(p){case 8:this.$=t[s-1];break;case 9:case 11:case 12:this.$=t[s];break;case 10:case 13:this.$=t[s-1]+t[s];break;case 14:case 15:this.$=t[s-1]+"~"+t[s]+"~";break;case 16:i.addRelation(t[s]);break;case 17:t[s-1].title=i.cleanupLabel(t[s]),i.addRelation(t[s-1]);break;case 26:this.$=t[s].trim(),i.setAccTitle(this.$);break;case 27:case 28:this.$=t[s].trim(),i.setAccDescription(this.$);break;case 29:i.addClassesToNamespace(t[s-3],t[s-1]);break;case 30:i.addClassesToNamespace(t[s-4],t[s-1]);break;case 31:this.$=t[s],i.addNamespace(t[s]);break;case 32:this.$=[t[s]];break;case 33:this.$=[t[s-1]];break;case 34:t[s].unshift(t[s-2]),this.$=t[s];break;case 36:i.setCssClass(t[s-2],t[s]);break;case 37:i.addMembers(t[s-3],t[s-1]);break;case 38:i.setCssClass(t[s-5],t[s-3]),i.addMembers(t[s-5],t[s-1]);break;case 39:this.$=t[s],i.addClass(t[s]);break;case 40:this.$=t[s-1],i.addClass(t[s-1]),i.setClassLabel(t[s-1],t[s]);break;case 41:i.addAnnotation(t[s],t[s-2]);break;case 42:this.$=[t[s]];break;case 43:t[s].push(t[s-1]),this.$=t[s];break;case 44:break;case 45:i.addMember(t[s-1],i.cleanupLabel(t[s]));break;case 46:break;case 47:break;case 48:this.$={id1:t[s-2],id2:t[s],relation:t[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 49:this.$={id1:t[s-3],id2:t[s],relation:t[s-1],relationTitle1:t[s-2],relationTitle2:"none"};break;case 50:this.$={id1:t[s-3],id2:t[s],relation:t[s-2],relationTitle1:"none",relationTitle2:t[s-1]};break;case 51:this.$={id1:t[s-4],id2:t[s],relation:t[s-2],relationTitle1:t[s-3],relationTitle2:t[s-1]};break;case 52:i.addNote(t[s],t[s-1]);break;case 53:i.addNote(t[s]);break;case 54:i.setDirection("TB");break;case 55:i.setDirection("BT");break;case 56:i.setDirection("RL");break;case 57:i.setDirection("LR");break;case 58:this.$={type1:t[s-2],type2:t[s],lineType:t[s-1]};break;case 59:this.$={type1:"none",type2:t[s],lineType:t[s-1]};break;case 60:this.$={type1:t[s-1],type2:"none",lineType:t[s]};break;case 61:this.$={type1:"none",type2:"none",lineType:t[s]};break;case 62:this.$=i.relationType.AGGREGATION;break;case 63:this.$=i.relationType.EXTENSION;break;case 64:this.$=i.relationType.COMPOSITION;break;case 65:this.$=i.relationType.DEPENDENCY;break;case 66:this.$=i.relationType.LOLLIPOP;break;case 67:this.$=i.lineType.LINE;break;case 68:this.$=i.lineType.DOTTED_LINE;break;case 69:case 75:this.$=t[s-2],i.setClickEvent(t[s-1],t[s]);break;case 70:case 76:this.$=t[s-3],i.setClickEvent(t[s-2],t[s-1]),i.setTooltip(t[s-2],t[s]);break;case 71:this.$=t[s-2],i.setLink(t[s-1],t[s]);break;case 72:this.$=t[s-3],i.setLink(t[s-2],t[s-1],t[s]);break;case 73:this.$=t[s-3],i.setLink(t[s-2],t[s-1]),i.setTooltip(t[s-2],t[s]);break;case 74:this.$=t[s-4],i.setLink(t[s-3],t[s-2],t[s]),i.setTooltip(t[s-3],t[s-1]);break;case 77:this.$=t[s-3],i.setClickEvent(t[s-2],t[s-1],t[s]);break;case 78:this.$=t[s-4],i.setClickEvent(t[s-3],t[s-2],t[s-1]),i.setTooltip(t[s-3],t[s]);break;case 79:this.$=t[s-3],i.setLink(t[s-2],t[s]);break;case 80:this.$=t[s-4],i.setLink(t[s-3],t[s-1],t[s]);break;case 81:this.$=t[s-4],i.setLink(t[s-3],t[s-1]),i.setTooltip(t[s-3],t[s]);break;case 82:this.$=t[s-5],i.setLink(t[s-4],t[s-2],t[s]),i.setTooltip(t[s-4],t[s-1]);break;case 83:i.setCssClass(t[s-1],t[s]);break}},table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:35,17:19,18:36,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:n,32:r,34:h,35:20,39:l,40:21,43:A,44:g,46:D,47:B,49:_,51:ne,52:ue,53:re,54:ae,55:le,65:ce,66:oe,68:he,72:Ae,84:d,86:E,87:C,88:m,89:k},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},e(pe,[2,5],{8:[1,44]}),{8:[1,45]},e(c,[2,16],{21:[1,46]}),e(c,[2,18]),e(c,[2,19]),e(c,[2,20]),e(c,[2,21]),e(c,[2,22]),e(c,[2,23]),e(c,[2,24]),e(c,[2,25]),{31:[1,47]},{33:[1,48]},e(c,[2,28]),e(c,[2,44],{48:49,56:52,57:53,13:[1,50],21:[1,51],58:Y,59:K,60:j,61:Q,62:X,63:fe,64:de}),{36:[1,61]},e(W,[2,35],{36:[1,63],41:[1,62]}),e(c,[2,46]),e(c,[2,47]),{16:64,84:d,86:E,87:C,88:m},{16:35,17:65,18:36,84:d,86:E,87:C,88:m,89:k},{16:35,17:66,18:36,84:d,86:E,87:C,88:m,89:k},{16:35,17:67,18:36,84:d,86:E,87:C,88:m,89:k},{13:[1,68]},{16:35,17:69,18:36,84:d,86:E,87:C,88:m,89:k},{13:Ne,50:70},e(c,[2,54]),e(c,[2,55]),e(c,[2,56]),e(c,[2,57]),e(V,[2,11],{16:35,18:36,17:72,19:[1,73],84:d,86:E,87:C,88:m,89:k}),e(V,[2,12],{19:[1,74]}),{15:75,16:76,84:d,86:E,87:C,88:m},{16:35,17:77,18:36,84:d,86:E,87:C,88:m,89:k},e(q,[2,97]),e(q,[2,98]),e(q,[2,99]),e(q,[2,100]),e([1,8,9,12,13,19,21,36,38,41,58,59,60,61,62,63,64,69,71],[2,101]),e(pe,[2,6],{10:5,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,17:19,35:20,40:21,16:35,18:36,5:78,30:n,32:r,34:h,39:l,43:A,44:g,46:D,47:B,49:_,51:ne,52:ue,53:re,54:ae,55:le,65:ce,66:oe,68:he,72:Ae,84:d,86:E,87:C,88:m,89:k}),{5:79,10:5,16:35,17:19,18:36,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:n,32:r,34:h,35:20,39:l,40:21,43:A,44:g,46:D,47:B,49:_,51:ne,52:ue,53:re,54:ae,55:le,65:ce,66:oe,68:he,72:Ae,84:d,86:E,87:C,88:m,89:k},e(c,[2,17]),e(c,[2,26]),e(c,[2,27]),{13:[1,81],16:35,17:80,18:36,84:d,86:E,87:C,88:m,89:k},{48:82,56:52,57:53,58:Y,59:K,60:j,61:Q,62:X,63:fe,64:de},e(c,[2,45]),{57:83,63:fe,64:de},e(H,[2,61],{56:84,58:Y,59:K,60:j,61:Q,62:X}),e(M,[2,62]),e(M,[2,63]),e(M,[2,64]),e(M,[2,65]),e(M,[2,66]),e(ve,[2,67]),e(ve,[2,68]),{8:[1,86],23:87,37:85,40:21,43:A},{16:88,84:d,86:E,87:C,88:m},{42:89,46:Ee},{45:[1,91]},{13:[1,92]},{13:[1,93]},{69:[1,94],71:[1,95]},{16:96,84:d,86:E,87:C,88:m},{13:Ne,50:97},e(c,[2,53]),e(c,[2,102]),e(V,[2,13]),e(V,[2,14]),e(V,[2,15]),{36:[2,31]},{15:98,16:76,36:[2,9],84:d,86:E,87:C,88:m},e(Ce,[2,39],{11:99,12:[1,100]}),e(pe,[2,7]),{9:[1,101]},e(J,[2,48]),{16:35,17:102,18:36,84:d,86:E,87:C,88:m,89:k},{13:[1,104],16:35,17:103,18:36,84:d,86:E,87:C,88:m,89:k},e(H,[2,60],{56:105,58:Y,59:K,60:j,61:Q,62:X}),e(H,[2,59]),{38:[1,106]},{23:87,37:107,40:21,43:A},{8:[1,108],38:[2,32]},e(W,[2,36],{36:[1,109]}),{38:[1,110]},{38:[2,42],42:111,46:Ee},{16:35,17:112,18:36,84:d,86:E,87:C,88:m,89:k},e(c,[2,69],{13:[1,113]}),e(c,[2,71],{13:[1,115],67:[1,114]}),e(c,[2,75],{13:[1,116],70:[1,117]}),{13:[1,118]},e(c,[2,83]),e(c,[2,52]),{36:[2,10]},e(Ce,[2,40]),{13:[1,119]},{1:[2,4]},e(J,[2,50]),e(J,[2,49]),{16:35,17:120,18:36,84:d,86:E,87:C,88:m,89:k},e(H,[2,58]),e(c,[2,29]),{38:[1,121]},{23:87,37:122,38:[2,33],40:21,43:A},{42:123,46:Ee},e(W,[2,37]),{38:[2,43]},e(c,[2,41]),e(c,[2,70]),e(c,[2,72]),e(c,[2,73],{67:[1,124]}),e(c,[2,76]),e(c,[2,77],{13:[1,125]}),e(c,[2,79],{13:[1,127],67:[1,126]}),{14:[1,128]},e(J,[2,51]),e(c,[2,30]),{38:[2,34]},{38:[1,129]},e(c,[2,74]),e(c,[2,78]),e(c,[2,80]),e(c,[2,81],{67:[1,130]}),e(Ce,[2,8]),e(W,[2,38]),e(c,[2,82])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],75:[2,31],98:[2,10],101:[2,4],111:[2,43],122:[2,34]},parseError:function(u,a){if(a.recoverable)this.trace(u);else{var o=new Error(u);throw o.hash=a,o}},parse:function(u){var a=this,o=[0],i=[],p=[null],t=[],G=this.table,s="",Z=0,Le=0,Ye=2,xe=1,Ke=t.slice.call(arguments,1),b=Object.create(this.lexer),I={yy:{}};for(var ge in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ge)&&(I.yy[ge]=this.yy[ge]);b.setInput(u,I.yy),I.yy.lexer=b,I.yy.parser=this,typeof b.yylloc>"u"&&(b.yylloc={});var ke=b.yylloc;t.push(ke);var je=b.options&&b.options.ranges;typeof I.yy.parseError=="function"?this.parseError=I.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Qe(){var N;return N=i.pop()||b.lex()||xe,typeof N!="number"&&(N instanceof Array&&(i=N,N=i.pop()),N=a.symbols_[N]||N),N}for(var T,O,y,Te,w={},$,S,Ie,ee;;){if(O=o[o.length-1],this.defaultActions[O]?y=this.defaultActions[O]:((T===null||typeof T>"u")&&(T=Qe()),y=G[O]&&G[O][T]),typeof y>"u"||!y.length||!y[0]){var Fe="";ee=[];for($ in G[O])this.terminals_[$]&&$>Ye&&ee.push("'"+this.terminals_[$]+"'");b.showPosition?Fe="Parse error on line "+(Z+1)+`: +import{s as Xe,g as We,a as qe,b as He,c as F,v as Je,x as Ze,j as v,z as $e,l as et,y as Pe,h as U,d as tt,ar as ye}from"./mermaid.core-QJnSHCal.js";var De=function(){var e=function(L,u,a,o){for(a=a||{},o=L.length;o--;a[L[o]]=u);return a},n=[1,16],r=[1,17],h=[1,18],l=[1,37],A=[1,38],g=[1,24],D=[1,22],B=[1,23],_=[1,29],ne=[1,30],ue=[1,31],re=[1,32],ae=[1,33],le=[1,34],ce=[1,25],oe=[1,26],he=[1,27],Ae=[1,28],d=[1,42],E=[1,39],C=[1,40],m=[1,41],k=[1,43],pe=[1,9],c=[1,8,9],Y=[1,54],K=[1,55],j=[1,56],Q=[1,57],X=[1,58],fe=[1,59],de=[1,60],W=[1,8,9,38],Ne=[1,71],V=[1,8,9,12,13,21,36,38,41,58,59,60,61,62,63,64,69,71],q=[1,8,9,12,13,19,21,36,38,41,45,58,59,60,61,62,63,64,69,71,84,86,87,88,89],H=[13,84,86,87,88,89],M=[13,63,64,84,86,87,88,89],ve=[13,58,59,60,61,62,84,86,87,88,89],Ee=[1,90],Ce=[1,8,9,36,38,41],J=[1,8,9,21],me={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,className:17,classLiteralName:18,GENERICTYPE:19,relationStatement:20,LABEL:21,namespaceStatement:22,classStatement:23,memberStatement:24,annotationStatement:25,clickStatement:26,cssClassStatement:27,noteStatement:28,direction:29,acc_title:30,acc_title_value:31,acc_descr:32,acc_descr_value:33,acc_descr_multiline_value:34,namespaceIdentifier:35,STRUCT_START:36,classStatements:37,STRUCT_STOP:38,NAMESPACE:39,classIdentifier:40,STYLE_SEPARATOR:41,members:42,CLASS:43,ANNOTATION_START:44,ANNOTATION_END:45,MEMBER:46,SEPARATOR:47,relation:48,NOTE_FOR:49,noteText:50,NOTE:51,direction_tb:52,direction_bt:53,direction_rl:54,direction_lr:55,relationType:56,lineType:57,AGGREGATION:58,EXTENSION:59,COMPOSITION:60,DEPENDENCY:61,LOLLIPOP:62,LINE:63,DOTTED_LINE:64,CALLBACK:65,LINK:66,LINK_TARGET:67,CLICK:68,CALLBACK_NAME:69,CALLBACK_ARGS:70,HREF:71,CSSCLASS:72,commentToken:73,textToken:74,graphCodeTokens:75,textNoTagsToken:76,TAGSTART:77,TAGEND:78,"==":79,"--":80,PCT:81,DEFAULT:82,SPACE:83,MINUS:84,keywords:85,UNICODE_TEXT:86,NUM:87,ALPHA:88,BQUOTE_STR:89,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",19:"GENERICTYPE",21:"LABEL",30:"acc_title",31:"acc_title_value",32:"acc_descr",33:"acc_descr_value",34:"acc_descr_multiline_value",36:"STRUCT_START",38:"STRUCT_STOP",39:"NAMESPACE",41:"STYLE_SEPARATOR",43:"CLASS",44:"ANNOTATION_START",45:"ANNOTATION_END",46:"MEMBER",47:"SEPARATOR",49:"NOTE_FOR",51:"NOTE",52:"direction_tb",53:"direction_bt",54:"direction_rl",55:"direction_lr",58:"AGGREGATION",59:"EXTENSION",60:"COMPOSITION",61:"DEPENDENCY",62:"LOLLIPOP",63:"LINE",64:"DOTTED_LINE",65:"CALLBACK",66:"LINK",67:"LINK_TARGET",68:"CLICK",69:"CALLBACK_NAME",70:"CALLBACK_ARGS",71:"HREF",72:"CSSCLASS",75:"graphCodeTokens",77:"TAGSTART",78:"TAGEND",79:"==",80:"--",81:"PCT",82:"DEFAULT",83:"SPACE",84:"MINUS",85:"keywords",86:"UNICODE_TEXT",87:"NUM",88:"ALPHA",89:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,2],[17,1],[17,1],[17,2],[17,2],[17,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[22,4],[22,5],[35,2],[37,1],[37,2],[37,3],[23,1],[23,3],[23,4],[23,6],[40,2],[40,3],[25,4],[42,1],[42,2],[24,1],[24,2],[24,1],[24,1],[20,3],[20,4],[20,4],[20,5],[28,3],[28,2],[29,1],[29,1],[29,1],[29,1],[48,3],[48,2],[48,2],[48,1],[56,1],[56,1],[56,1],[56,1],[56,1],[57,1],[57,1],[26,3],[26,4],[26,3],[26,4],[26,4],[26,5],[26,3],[26,4],[26,4],[26,5],[26,4],[26,5],[26,5],[26,6],[27,3],[73,1],[73,1],[74,1],[74,1],[74,1],[74,1],[74,1],[74,1],[74,1],[76,1],[76,1],[76,1],[76,1],[16,1],[16,1],[16,1],[16,1],[18,1],[50,1]],performAction:function(u,a,o,i,p,t,G){var s=t.length-1;switch(p){case 8:this.$=t[s-1];break;case 9:case 11:case 12:this.$=t[s];break;case 10:case 13:this.$=t[s-1]+t[s];break;case 14:case 15:this.$=t[s-1]+"~"+t[s]+"~";break;case 16:i.addRelation(t[s]);break;case 17:t[s-1].title=i.cleanupLabel(t[s]),i.addRelation(t[s-1]);break;case 26:this.$=t[s].trim(),i.setAccTitle(this.$);break;case 27:case 28:this.$=t[s].trim(),i.setAccDescription(this.$);break;case 29:i.addClassesToNamespace(t[s-3],t[s-1]);break;case 30:i.addClassesToNamespace(t[s-4],t[s-1]);break;case 31:this.$=t[s],i.addNamespace(t[s]);break;case 32:this.$=[t[s]];break;case 33:this.$=[t[s-1]];break;case 34:t[s].unshift(t[s-2]),this.$=t[s];break;case 36:i.setCssClass(t[s-2],t[s]);break;case 37:i.addMembers(t[s-3],t[s-1]);break;case 38:i.setCssClass(t[s-5],t[s-3]),i.addMembers(t[s-5],t[s-1]);break;case 39:this.$=t[s],i.addClass(t[s]);break;case 40:this.$=t[s-1],i.addClass(t[s-1]),i.setClassLabel(t[s-1],t[s]);break;case 41:i.addAnnotation(t[s],t[s-2]);break;case 42:this.$=[t[s]];break;case 43:t[s].push(t[s-1]),this.$=t[s];break;case 44:break;case 45:i.addMember(t[s-1],i.cleanupLabel(t[s]));break;case 46:break;case 47:break;case 48:this.$={id1:t[s-2],id2:t[s],relation:t[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 49:this.$={id1:t[s-3],id2:t[s],relation:t[s-1],relationTitle1:t[s-2],relationTitle2:"none"};break;case 50:this.$={id1:t[s-3],id2:t[s],relation:t[s-2],relationTitle1:"none",relationTitle2:t[s-1]};break;case 51:this.$={id1:t[s-4],id2:t[s],relation:t[s-2],relationTitle1:t[s-3],relationTitle2:t[s-1]};break;case 52:i.addNote(t[s],t[s-1]);break;case 53:i.addNote(t[s]);break;case 54:i.setDirection("TB");break;case 55:i.setDirection("BT");break;case 56:i.setDirection("RL");break;case 57:i.setDirection("LR");break;case 58:this.$={type1:t[s-2],type2:t[s],lineType:t[s-1]};break;case 59:this.$={type1:"none",type2:t[s],lineType:t[s-1]};break;case 60:this.$={type1:t[s-1],type2:"none",lineType:t[s]};break;case 61:this.$={type1:"none",type2:"none",lineType:t[s]};break;case 62:this.$=i.relationType.AGGREGATION;break;case 63:this.$=i.relationType.EXTENSION;break;case 64:this.$=i.relationType.COMPOSITION;break;case 65:this.$=i.relationType.DEPENDENCY;break;case 66:this.$=i.relationType.LOLLIPOP;break;case 67:this.$=i.lineType.LINE;break;case 68:this.$=i.lineType.DOTTED_LINE;break;case 69:case 75:this.$=t[s-2],i.setClickEvent(t[s-1],t[s]);break;case 70:case 76:this.$=t[s-3],i.setClickEvent(t[s-2],t[s-1]),i.setTooltip(t[s-2],t[s]);break;case 71:this.$=t[s-2],i.setLink(t[s-1],t[s]);break;case 72:this.$=t[s-3],i.setLink(t[s-2],t[s-1],t[s]);break;case 73:this.$=t[s-3],i.setLink(t[s-2],t[s-1]),i.setTooltip(t[s-2],t[s]);break;case 74:this.$=t[s-4],i.setLink(t[s-3],t[s-2],t[s]),i.setTooltip(t[s-3],t[s-1]);break;case 77:this.$=t[s-3],i.setClickEvent(t[s-2],t[s-1],t[s]);break;case 78:this.$=t[s-4],i.setClickEvent(t[s-3],t[s-2],t[s-1]),i.setTooltip(t[s-3],t[s]);break;case 79:this.$=t[s-3],i.setLink(t[s-2],t[s]);break;case 80:this.$=t[s-4],i.setLink(t[s-3],t[s-1],t[s]);break;case 81:this.$=t[s-4],i.setLink(t[s-3],t[s-1]),i.setTooltip(t[s-3],t[s]);break;case 82:this.$=t[s-5],i.setLink(t[s-4],t[s-2],t[s]),i.setTooltip(t[s-4],t[s-1]);break;case 83:i.setCssClass(t[s-1],t[s]);break}},table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:35,17:19,18:36,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:n,32:r,34:h,35:20,39:l,40:21,43:A,44:g,46:D,47:B,49:_,51:ne,52:ue,53:re,54:ae,55:le,65:ce,66:oe,68:he,72:Ae,84:d,86:E,87:C,88:m,89:k},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},e(pe,[2,5],{8:[1,44]}),{8:[1,45]},e(c,[2,16],{21:[1,46]}),e(c,[2,18]),e(c,[2,19]),e(c,[2,20]),e(c,[2,21]),e(c,[2,22]),e(c,[2,23]),e(c,[2,24]),e(c,[2,25]),{31:[1,47]},{33:[1,48]},e(c,[2,28]),e(c,[2,44],{48:49,56:52,57:53,13:[1,50],21:[1,51],58:Y,59:K,60:j,61:Q,62:X,63:fe,64:de}),{36:[1,61]},e(W,[2,35],{36:[1,63],41:[1,62]}),e(c,[2,46]),e(c,[2,47]),{16:64,84:d,86:E,87:C,88:m},{16:35,17:65,18:36,84:d,86:E,87:C,88:m,89:k},{16:35,17:66,18:36,84:d,86:E,87:C,88:m,89:k},{16:35,17:67,18:36,84:d,86:E,87:C,88:m,89:k},{13:[1,68]},{16:35,17:69,18:36,84:d,86:E,87:C,88:m,89:k},{13:Ne,50:70},e(c,[2,54]),e(c,[2,55]),e(c,[2,56]),e(c,[2,57]),e(V,[2,11],{16:35,18:36,17:72,19:[1,73],84:d,86:E,87:C,88:m,89:k}),e(V,[2,12],{19:[1,74]}),{15:75,16:76,84:d,86:E,87:C,88:m},{16:35,17:77,18:36,84:d,86:E,87:C,88:m,89:k},e(q,[2,97]),e(q,[2,98]),e(q,[2,99]),e(q,[2,100]),e([1,8,9,12,13,19,21,36,38,41,58,59,60,61,62,63,64,69,71],[2,101]),e(pe,[2,6],{10:5,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,17:19,35:20,40:21,16:35,18:36,5:78,30:n,32:r,34:h,39:l,43:A,44:g,46:D,47:B,49:_,51:ne,52:ue,53:re,54:ae,55:le,65:ce,66:oe,68:he,72:Ae,84:d,86:E,87:C,88:m,89:k}),{5:79,10:5,16:35,17:19,18:36,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:n,32:r,34:h,35:20,39:l,40:21,43:A,44:g,46:D,47:B,49:_,51:ne,52:ue,53:re,54:ae,55:le,65:ce,66:oe,68:he,72:Ae,84:d,86:E,87:C,88:m,89:k},e(c,[2,17]),e(c,[2,26]),e(c,[2,27]),{13:[1,81],16:35,17:80,18:36,84:d,86:E,87:C,88:m,89:k},{48:82,56:52,57:53,58:Y,59:K,60:j,61:Q,62:X,63:fe,64:de},e(c,[2,45]),{57:83,63:fe,64:de},e(H,[2,61],{56:84,58:Y,59:K,60:j,61:Q,62:X}),e(M,[2,62]),e(M,[2,63]),e(M,[2,64]),e(M,[2,65]),e(M,[2,66]),e(ve,[2,67]),e(ve,[2,68]),{8:[1,86],23:87,37:85,40:21,43:A},{16:88,84:d,86:E,87:C,88:m},{42:89,46:Ee},{45:[1,91]},{13:[1,92]},{13:[1,93]},{69:[1,94],71:[1,95]},{16:96,84:d,86:E,87:C,88:m},{13:Ne,50:97},e(c,[2,53]),e(c,[2,102]),e(V,[2,13]),e(V,[2,14]),e(V,[2,15]),{36:[2,31]},{15:98,16:76,36:[2,9],84:d,86:E,87:C,88:m},e(Ce,[2,39],{11:99,12:[1,100]}),e(pe,[2,7]),{9:[1,101]},e(J,[2,48]),{16:35,17:102,18:36,84:d,86:E,87:C,88:m,89:k},{13:[1,104],16:35,17:103,18:36,84:d,86:E,87:C,88:m,89:k},e(H,[2,60],{56:105,58:Y,59:K,60:j,61:Q,62:X}),e(H,[2,59]),{38:[1,106]},{23:87,37:107,40:21,43:A},{8:[1,108],38:[2,32]},e(W,[2,36],{36:[1,109]}),{38:[1,110]},{38:[2,42],42:111,46:Ee},{16:35,17:112,18:36,84:d,86:E,87:C,88:m,89:k},e(c,[2,69],{13:[1,113]}),e(c,[2,71],{13:[1,115],67:[1,114]}),e(c,[2,75],{13:[1,116],70:[1,117]}),{13:[1,118]},e(c,[2,83]),e(c,[2,52]),{36:[2,10]},e(Ce,[2,40]),{13:[1,119]},{1:[2,4]},e(J,[2,50]),e(J,[2,49]),{16:35,17:120,18:36,84:d,86:E,87:C,88:m,89:k},e(H,[2,58]),e(c,[2,29]),{38:[1,121]},{23:87,37:122,38:[2,33],40:21,43:A},{42:123,46:Ee},e(W,[2,37]),{38:[2,43]},e(c,[2,41]),e(c,[2,70]),e(c,[2,72]),e(c,[2,73],{67:[1,124]}),e(c,[2,76]),e(c,[2,77],{13:[1,125]}),e(c,[2,79],{13:[1,127],67:[1,126]}),{14:[1,128]},e(J,[2,51]),e(c,[2,30]),{38:[2,34]},{38:[1,129]},e(c,[2,74]),e(c,[2,78]),e(c,[2,80]),e(c,[2,81],{67:[1,130]}),e(Ce,[2,8]),e(W,[2,38]),e(c,[2,82])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],75:[2,31],98:[2,10],101:[2,4],111:[2,43],122:[2,34]},parseError:function(u,a){if(a.recoverable)this.trace(u);else{var o=new Error(u);throw o.hash=a,o}},parse:function(u){var a=this,o=[0],i=[],p=[null],t=[],G=this.table,s="",Z=0,Le=0,Ye=2,xe=1,Ke=t.slice.call(arguments,1),b=Object.create(this.lexer),I={yy:{}};for(var ge in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ge)&&(I.yy[ge]=this.yy[ge]);b.setInput(u,I.yy),I.yy.lexer=b,I.yy.parser=this,typeof b.yylloc>"u"&&(b.yylloc={});var ke=b.yylloc;t.push(ke);var je=b.options&&b.options.ranges;typeof I.yy.parseError=="function"?this.parseError=I.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Qe(){var N;return N=i.pop()||b.lex()||xe,typeof N!="number"&&(N instanceof Array&&(i=N,N=i.pop()),N=a.symbols_[N]||N),N}for(var T,O,y,Te,w={},$,S,Ie,ee;;){if(O=o[o.length-1],this.defaultActions[O]?y=this.defaultActions[O]:((T===null||typeof T>"u")&&(T=Qe()),y=G[O]&&G[O][T]),typeof y>"u"||!y.length||!y[0]){var Fe="";ee=[];for($ in G[O])this.terminals_[$]&&$>Ye&&ee.push("'"+this.terminals_[$]+"'");b.showPosition?Fe="Parse error on line "+(Z+1)+`: `+b.showPosition()+` Expecting `+ee.join(", ")+", got '"+(this.terminals_[T]||T)+"'":Fe="Parse error on line "+(Z+1)+": Unexpected "+(T==xe?"end of input":"'"+(this.terminals_[T]||T)+"'"),this.parseError(Fe,{text:b.match,token:this.terminals_[T]||T,line:b.yylineno,loc:ke,expected:ee})}if(y[0]instanceof Array&&y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+O+", token: "+T);switch(y[0]){case 1:o.push(T),p.push(b.yytext),t.push(b.yylloc),o.push(y[1]),T=null,Le=b.yyleng,s=b.yytext,Z=b.yylineno,ke=b.yylloc;break;case 2:if(S=this.productions_[y[1]][1],w.$=p[p.length-S],w._$={first_line:t[t.length-(S||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(S||1)].first_column,last_column:t[t.length-1].last_column},je&&(w._$.range=[t[t.length-(S||1)].range[0],t[t.length-1].range[1]]),Te=this.performAction.apply(w,[s,Le,Z,I.yy,y[1],p,t].concat(Ke)),typeof Te<"u")return Te;S&&(o=o.slice(0,-1*S*2),p=p.slice(0,-1*S),t=t.slice(0,-1*S)),o.push(this.productions_[y[1]][0]),p.push(w.$),t.push(w._$),Ie=G[o[o.length-2]][o[o.length-1]],o.push(Ie);break;case 3:return!0}}return!0}},ze=function(){var L={EOF:1,parseError:function(a,o){if(this.yy.parser)this.yy.parser.parseError(a,o);else throw new Error(a)},setInput:function(u,a){return this.yy=a||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var a=u.match(/(?:\r\n?|\n).*/g);return a?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},unput:function(u){var a=u.length,o=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-a),this.offset-=a;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),o.length-1&&(this.yylineno-=o.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:o?(o.length===i.length?this.yylloc.first_column:0)+i[i.length-o.length].length-o[0].length:this.yylloc.first_column-a},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-a]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(u){this.unput(this.match.slice(u))},pastInput:function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var u=this.pastInput(),a=new Array(u.length+1).join("-");return u+this.upcomingInput()+` diff --git a/assets/styles-b966c4ae-H6tCXVxS.js b/assets/styles-b966c4ae-B_U_A2hx.js similarity index 98% rename from assets/styles-b966c4ae-H6tCXVxS.js rename to assets/styles-b966c4ae-B_U_A2hx.js index 0157a40..57e2f1c 100644 --- a/assets/styles-b966c4ae-H6tCXVxS.js +++ b/assets/styles-b966c4ae-B_U_A2hx.js @@ -1,4 +1,4 @@ -import{G as V}from"./layout-1ugHHiNm.js";import{ag as D,ah as M,ai as R,aj as j,ak as F,al as U,ad as H,p as N,l as y,q as W,c as C,j as G,r as $,o as E,h as _,y as X,t as J,am as K}from"./mermaid.core-zy7cM8l9.js";import{r as Q}from"./index-67a42d7d-p9ZYh1Xw.js";function Y(e){return typeof e=="string"?new D([document.querySelectorAll(e)],[document.documentElement]):new D([R(e)],M)}const Z=(e,r)=>j.lang.round(F.parse(e)[r]),O=Z;function be(e,r){return!!e.children(r).length}function fe(e){return L(e.v)+":"+L(e.w)+":"+L(e.name)}var ee=/:/g;function L(e){return e?String(e).replace(ee,"\\:"):""}function te(e,r){r&&e.attr("style",r)}function ue(e,r,c){r&&e.attr("class",r).attr("class",c+" "+e.attr("class"))}function we(e,r){var c=r.graph();if(U(c)){var a=c.transition;if(H(a))return a(e)}return e}function le(e,r){var c=e.append("foreignObject").attr("width","100000"),a=c.append("xhtml:div");a.attr("xmlns","http://www.w3.org/1999/xhtml");var i=r.label;switch(typeof i){case"function":a.insert(i);break;case"object":a.insert(function(){return i});break;default:a.html(i)}te(a,r.labelStyle),a.style("display","inline-block"),a.style("white-space","nowrap");var d=a.node().getBoundingClientRect();return c.attr("width",d.width).attr("height",d.height),c}const z={},re=function(e){const r=Object.keys(e);for(const c of r)z[c]=e[c]},q=function(e,r,c,a,i,d){const u=a.select(`[id="${c}"]`);Object.keys(e).forEach(function(p){const l=e[p];let g="default";l.classes.length>0&&(g=l.classes.join(" ")),g=g+" flowchart-label";const w=N(l.styles);let t=l.text!==void 0?l.text:l.id,s;if(y.info("vertex",l,l.labelType),l.labelType==="markdown")y.info("vertex",l,l.labelType);else if(W(C().flowchart.htmlLabels)){const m={label:t.replace(/fa[blrs]?:fa-[\w-]+/g,k=>``)};s=le(u,m).node(),s.parentNode.removeChild(s)}else{const m=i.createElementNS("http://www.w3.org/2000/svg","text");m.setAttribute("style",w.labelStyle.replace("color:","fill:"));const k=t.split(G.lineBreakRegex);for(const T of k){const v=i.createElementNS("http://www.w3.org/2000/svg","tspan");v.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),v.setAttribute("dy","1em"),v.setAttribute("x","1"),v.textContent=T,m.appendChild(v)}s=m}let b=0,o="";switch(l.type){case"round":b=5,o="rect";break;case"square":o="rect";break;case"diamond":o="question";break;case"hexagon":o="hexagon";break;case"odd":o="rect_left_inv_arrow";break;case"lean_right":o="lean_right";break;case"lean_left":o="lean_left";break;case"trapezoid":o="trapezoid";break;case"inv_trapezoid":o="inv_trapezoid";break;case"odd_right":o="rect_left_inv_arrow";break;case"circle":o="circle";break;case"ellipse":o="ellipse";break;case"stadium":o="stadium";break;case"subroutine":o="subroutine";break;case"cylinder":o="cylinder";break;case"group":o="rect";break;case"doublecircle":o="doublecircle";break;default:o="rect"}r.setNode(l.id,{labelStyle:w.labelStyle,shape:o,labelText:t,labelType:l.labelType,rx:b,ry:b,class:g,style:w.style,id:l.id,link:l.link,linkTarget:l.linkTarget,tooltip:d.db.getTooltip(l.id)||"",domId:d.db.lookUpDomId(l.id),haveCallback:l.haveCallback,width:l.type==="group"?500:void 0,dir:l.dir,type:l.type,props:l.props,padding:C().flowchart.padding}),y.info("setNode",{labelStyle:w.labelStyle,labelType:l.labelType,shape:o,labelText:t,rx:b,ry:b,class:g,style:w.style,id:l.id,domId:d.db.lookUpDomId(l.id),width:l.type==="group"?500:void 0,type:l.type,dir:l.dir,props:l.props,padding:C().flowchart.padding})})},P=function(e,r,c){y.info("abc78 edges = ",e);let a=0,i={},d,u;if(e.defaultStyle!==void 0){const n=N(e.defaultStyle);d=n.style,u=n.labelStyle}e.forEach(function(n){a++;const p="L-"+n.start+"-"+n.end;i[p]===void 0?(i[p]=0,y.info("abc78 new entry",p,i[p])):(i[p]++,y.info("abc78 new entry",p,i[p]));let l=p+"-"+i[p];y.info("abc78 new link id to be used is",p,l,i[p]);const g="LS-"+n.start,w="LE-"+n.end,t={style:"",labelStyle:""};switch(t.minlen=n.length||1,n.type==="arrow_open"?t.arrowhead="none":t.arrowhead="normal",t.arrowTypeStart="arrow_open",t.arrowTypeEnd="arrow_open",n.type){case"double_arrow_cross":t.arrowTypeStart="arrow_cross";case"arrow_cross":t.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":t.arrowTypeStart="arrow_point";case"arrow_point":t.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":t.arrowTypeStart="arrow_circle";case"arrow_circle":t.arrowTypeEnd="arrow_circle";break}let s="",b="";switch(n.stroke){case"normal":s="fill:none;",d!==void 0&&(s=d),u!==void 0&&(b=u),t.thickness="normal",t.pattern="solid";break;case"dotted":t.thickness="normal",t.pattern="dotted",t.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":t.thickness="thick",t.pattern="solid",t.style="stroke-width: 3.5px;fill:none;";break;case"invisible":t.thickness="invisible",t.pattern="solid",t.style="stroke-width: 0;fill:none;";break}if(n.style!==void 0){const o=N(n.style);s=o.style,b=o.labelStyle}t.style=t.style+=s,t.labelStyle=t.labelStyle+=b,n.interpolate!==void 0?t.curve=$(n.interpolate,E):e.defaultInterpolate!==void 0?t.curve=$(e.defaultInterpolate,E):t.curve=$(z.curve,E),n.text===void 0?n.style!==void 0&&(t.arrowheadStyle="fill: #333"):(t.arrowheadStyle="fill: #333",t.labelpos="c"),t.labelType=n.labelType,t.label=n.text.replace(G.lineBreakRegex,` +import{G as V}from"./layout-Vth69vlg.js";import{ag as D,ah as M,ai as R,aj as j,ak as F,al as U,ad as H,p as N,l as y,q as W,c as C,j as G,r as $,o as E,h as _,y as X,t as J,am as K}from"./mermaid.core-QJnSHCal.js";import{r as Q}from"./index-67a42d7d-TJSwJJ1D.js";function Y(e){return typeof e=="string"?new D([document.querySelectorAll(e)],[document.documentElement]):new D([R(e)],M)}const Z=(e,r)=>j.lang.round(F.parse(e)[r]),O=Z;function be(e,r){return!!e.children(r).length}function fe(e){return L(e.v)+":"+L(e.w)+":"+L(e.name)}var ee=/:/g;function L(e){return e?String(e).replace(ee,"\\:"):""}function te(e,r){r&&e.attr("style",r)}function ue(e,r,c){r&&e.attr("class",r).attr("class",c+" "+e.attr("class"))}function we(e,r){var c=r.graph();if(U(c)){var a=c.transition;if(H(a))return a(e)}return e}function le(e,r){var c=e.append("foreignObject").attr("width","100000"),a=c.append("xhtml:div");a.attr("xmlns","http://www.w3.org/1999/xhtml");var i=r.label;switch(typeof i){case"function":a.insert(i);break;case"object":a.insert(function(){return i});break;default:a.html(i)}te(a,r.labelStyle),a.style("display","inline-block"),a.style("white-space","nowrap");var d=a.node().getBoundingClientRect();return c.attr("width",d.width).attr("height",d.height),c}const z={},re=function(e){const r=Object.keys(e);for(const c of r)z[c]=e[c]},q=function(e,r,c,a,i,d){const u=a.select(`[id="${c}"]`);Object.keys(e).forEach(function(p){const l=e[p];let g="default";l.classes.length>0&&(g=l.classes.join(" ")),g=g+" flowchart-label";const w=N(l.styles);let t=l.text!==void 0?l.text:l.id,s;if(y.info("vertex",l,l.labelType),l.labelType==="markdown")y.info("vertex",l,l.labelType);else if(W(C().flowchart.htmlLabels)){const m={label:t.replace(/fa[blrs]?:fa-[\w-]+/g,k=>``)};s=le(u,m).node(),s.parentNode.removeChild(s)}else{const m=i.createElementNS("http://www.w3.org/2000/svg","text");m.setAttribute("style",w.labelStyle.replace("color:","fill:"));const k=t.split(G.lineBreakRegex);for(const T of k){const v=i.createElementNS("http://www.w3.org/2000/svg","tspan");v.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),v.setAttribute("dy","1em"),v.setAttribute("x","1"),v.textContent=T,m.appendChild(v)}s=m}let b=0,o="";switch(l.type){case"round":b=5,o="rect";break;case"square":o="rect";break;case"diamond":o="question";break;case"hexagon":o="hexagon";break;case"odd":o="rect_left_inv_arrow";break;case"lean_right":o="lean_right";break;case"lean_left":o="lean_left";break;case"trapezoid":o="trapezoid";break;case"inv_trapezoid":o="inv_trapezoid";break;case"odd_right":o="rect_left_inv_arrow";break;case"circle":o="circle";break;case"ellipse":o="ellipse";break;case"stadium":o="stadium";break;case"subroutine":o="subroutine";break;case"cylinder":o="cylinder";break;case"group":o="rect";break;case"doublecircle":o="doublecircle";break;default:o="rect"}r.setNode(l.id,{labelStyle:w.labelStyle,shape:o,labelText:t,labelType:l.labelType,rx:b,ry:b,class:g,style:w.style,id:l.id,link:l.link,linkTarget:l.linkTarget,tooltip:d.db.getTooltip(l.id)||"",domId:d.db.lookUpDomId(l.id),haveCallback:l.haveCallback,width:l.type==="group"?500:void 0,dir:l.dir,type:l.type,props:l.props,padding:C().flowchart.padding}),y.info("setNode",{labelStyle:w.labelStyle,labelType:l.labelType,shape:o,labelText:t,rx:b,ry:b,class:g,style:w.style,id:l.id,domId:d.db.lookUpDomId(l.id),width:l.type==="group"?500:void 0,type:l.type,dir:l.dir,props:l.props,padding:C().flowchart.padding})})},P=function(e,r,c){y.info("abc78 edges = ",e);let a=0,i={},d,u;if(e.defaultStyle!==void 0){const n=N(e.defaultStyle);d=n.style,u=n.labelStyle}e.forEach(function(n){a++;const p="L-"+n.start+"-"+n.end;i[p]===void 0?(i[p]=0,y.info("abc78 new entry",p,i[p])):(i[p]++,y.info("abc78 new entry",p,i[p]));let l=p+"-"+i[p];y.info("abc78 new link id to be used is",p,l,i[p]);const g="LS-"+n.start,w="LE-"+n.end,t={style:"",labelStyle:""};switch(t.minlen=n.length||1,n.type==="arrow_open"?t.arrowhead="none":t.arrowhead="normal",t.arrowTypeStart="arrow_open",t.arrowTypeEnd="arrow_open",n.type){case"double_arrow_cross":t.arrowTypeStart="arrow_cross";case"arrow_cross":t.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":t.arrowTypeStart="arrow_point";case"arrow_point":t.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":t.arrowTypeStart="arrow_circle";case"arrow_circle":t.arrowTypeEnd="arrow_circle";break}let s="",b="";switch(n.stroke){case"normal":s="fill:none;",d!==void 0&&(s=d),u!==void 0&&(b=u),t.thickness="normal",t.pattern="solid";break;case"dotted":t.thickness="normal",t.pattern="dotted",t.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":t.thickness="thick",t.pattern="solid",t.style="stroke-width: 3.5px;fill:none;";break;case"invisible":t.thickness="invisible",t.pattern="solid",t.style="stroke-width: 0;fill:none;";break}if(n.style!==void 0){const o=N(n.style);s=o.style,b=o.labelStyle}t.style=t.style+=s,t.labelStyle=t.labelStyle+=b,n.interpolate!==void 0?t.curve=$(n.interpolate,E):e.defaultInterpolate!==void 0?t.curve=$(e.defaultInterpolate,E):t.curve=$(z.curve,E),n.text===void 0?n.style!==void 0&&(t.arrowheadStyle="fill: #333"):(t.arrowheadStyle="fill: #333",t.labelpos="c"),t.labelType=n.labelType,t.label=n.text.replace(G.lineBreakRegex,` `),n.style===void 0&&(t.style=t.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),t.labelStyle=t.labelStyle.replace("color:","fill:"),t.id=l,t.classes="flowchart-link "+g+" "+w,r.setEdge(n.start,n.end,t,a)})},ae=function(e,r){return r.db.getClasses()},oe=async function(e,r,c,a){y.info("Drawing flowchart");let i=a.db.getDirection();i===void 0&&(i="TD");const{securityLevel:d,flowchart:u}=C(),n=u.nodeSpacing||50,p=u.rankSpacing||50;let l;d==="sandbox"&&(l=_("#i"+r));const g=d==="sandbox"?_(l.nodes()[0].contentDocument.body):_("body"),w=d==="sandbox"?l.nodes()[0].contentDocument:document,t=new V({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:n,ranksep:p,marginx:0,marginy:0}).setDefaultEdgeLabel(function(){return{}});let s;const b=a.db.getSubGraphs();y.info("Subgraphs - ",b);for(let f=b.length-1;f>=0;f--)s=b[f],y.info("Subgraph - ",s),a.db.addVertex(s.id,{text:s.title,type:s.labelType},"group",void 0,s.classes,s.dir);const o=a.db.getVertices(),m=a.db.getEdges();y.info("Edges",m);let k=0;for(k=b.length-1;k>=0;k--){s=b[k],Y("cluster").append("text");for(let f=0;f{const c=O,a=c(e,"r"),i=c(e,"g"),d=c(e,"b");return K(a,i,d,r)},se=e=>`.label { font-family: ${e.fontFamily}; color: ${e.nodeTextColor||e.textColor}; diff --git a/assets/styles-bbc3fe3b-4cn30Fs-.js b/assets/styles-bbc3fe3b-H5-300oD.js similarity index 99% rename from assets/styles-bbc3fe3b-4cn30Fs-.js rename to assets/styles-bbc3fe3b-H5-300oD.js index cd93e5f..172106a 100644 --- a/assets/styles-bbc3fe3b-4cn30Fs-.js +++ b/assets/styles-bbc3fe3b-H5-300oD.js @@ -1,4 +1,4 @@ -import{c as Y,g as Ut,s as zt,a as Mt,b as Ht,v as Xt,x as Kt,l as D,j as ot,z as Wt,b2 as Jt}from"./mermaid.core-zy7cM8l9.js";var gt=function(){var t=function(C,r,n,i){for(n=n||{},i=C.length;i--;n[C[i]]=r);return n},s=[1,2],a=[1,3],h=[1,4],f=[2,4],d=[1,9],y=[1,11],k=[1,15],u=[1,16],E=[1,17],T=[1,18],R=[1,30],G=[1,19],j=[1,20],U=[1,21],z=[1,22],M=[1,23],H=[1,25],X=[1,26],K=[1,27],W=[1,28],J=[1,29],q=[1,32],Q=[1,33],Z=[1,34],tt=[1,35],w=[1,31],c=[1,4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],et=[1,4,5,13,14,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],Dt=[4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],ht={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,cssClassStatement:11,idStatement:12,DESCR:13,"-->":14,HIDE_EMPTY:15,scale:16,WIDTH:17,COMPOSIT_STATE:18,STRUCT_START:19,STRUCT_STOP:20,STATE_DESCR:21,AS:22,ID:23,FORK:24,JOIN:25,CHOICE:26,CONCURRENT:27,note:28,notePosition:29,NOTE_TEXT:30,direction:31,acc_title:32,acc_title_value:33,acc_descr:34,acc_descr_value:35,acc_descr_multiline_value:36,classDef:37,CLASSDEF_ID:38,CLASSDEF_STYLEOPTS:39,DEFAULT:40,class:41,CLASSENTITY_IDS:42,STYLECLASS:43,direction_tb:44,direction_bt:45,direction_rl:46,direction_lr:47,eol:48,";":49,EDGE_STATE:50,STYLE_SEPARATOR:51,left_of:52,right_of:53,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",13:"DESCR",14:"-->",15:"HIDE_EMPTY",16:"scale",17:"WIDTH",18:"COMPOSIT_STATE",19:"STRUCT_START",20:"STRUCT_STOP",21:"STATE_DESCR",22:"AS",23:"ID",24:"FORK",25:"JOIN",26:"CHOICE",27:"CONCURRENT",28:"note",30:"NOTE_TEXT",32:"acc_title",33:"acc_title_value",34:"acc_descr",35:"acc_descr_value",36:"acc_descr_multiline_value",37:"classDef",38:"CLASSDEF_ID",39:"CLASSDEF_STYLEOPTS",40:"DEFAULT",41:"class",42:"CLASSENTITY_IDS",43:"STYLECLASS",44:"direction_tb",45:"direction_bt",46:"direction_rl",47:"direction_lr",49:";",50:"EDGE_STATE",51:"STYLE_SEPARATOR",52:"left_of",53:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[31,1],[31,1],[31,1],[31,1],[48,1],[48,1],[12,1],[12,1],[12,3],[12,3],[29,1],[29,1]],performAction:function(r,n,i,o,p,e,$){var l=e.length-1;switch(p){case 3:return o.setRootDoc(e[l]),e[l];case 4:this.$=[];break;case 5:e[l]!="nl"&&(e[l-1].push(e[l]),this.$=e[l-1]);break;case 6:case 7:this.$=e[l];break;case 8:this.$="nl";break;case 11:this.$=e[l];break;case 12:const B=e[l-1];B.description=o.trimColon(e[l]),this.$=B;break;case 13:this.$={stmt:"relation",state1:e[l-2],state2:e[l]};break;case 14:const ft=o.trimColon(e[l]);this.$={stmt:"relation",state1:e[l-3],state2:e[l-1],description:ft};break;case 18:this.$={stmt:"state",id:e[l-3],type:"default",description:"",doc:e[l-1]};break;case 19:var v=e[l],O=e[l-2].trim();if(e[l].match(":")){var st=e[l].split(":");v=st[0],O=[O,st[1]]}this.$={stmt:"state",id:v,type:"default",description:O};break;case 20:this.$={stmt:"state",id:e[l-3],type:"default",description:e[l-5],doc:e[l-1]};break;case 21:this.$={stmt:"state",id:e[l],type:"fork"};break;case 22:this.$={stmt:"state",id:e[l],type:"join"};break;case 23:this.$={stmt:"state",id:e[l],type:"choice"};break;case 24:this.$={stmt:"state",id:o.getDividerId(),type:"divider"};break;case 25:this.$={stmt:"state",id:e[l-1].trim(),note:{position:e[l-2].trim(),text:e[l].trim()}};break;case 28:this.$=e[l].trim(),o.setAccTitle(this.$);break;case 29:case 30:this.$=e[l].trim(),o.setAccDescription(this.$);break;case 31:case 32:this.$={stmt:"classDef",id:e[l-1].trim(),classes:e[l].trim()};break;case 33:this.$={stmt:"applyClass",id:e[l-1].trim(),styleClass:e[l].trim()};break;case 34:o.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 35:o.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 36:o.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 37:o.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 40:case 41:this.$={stmt:"state",id:e[l].trim(),type:"default",description:""};break;case 42:this.$={stmt:"state",id:e[l-2].trim(),classes:[e[l].trim()],type:"default",description:""};break;case 43:this.$={stmt:"state",id:e[l-2].trim(),classes:[e[l].trim()],type:"default",description:""};break}},table:[{3:1,4:s,5:a,6:h},{1:[3]},{3:5,4:s,5:a,6:h},{3:6,4:s,5:a,6:h},t([1,4,5,15,16,18,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],f,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:d,5:y,8:8,9:10,10:12,11:13,12:14,15:k,16:u,18:E,21:T,23:R,24:G,25:j,26:U,27:z,28:M,31:24,32:H,34:X,36:K,37:W,41:J,44:q,45:Q,46:Z,47:tt,50:w},t(c,[2,5]),{9:36,10:12,11:13,12:14,15:k,16:u,18:E,21:T,23:R,24:G,25:j,26:U,27:z,28:M,31:24,32:H,34:X,36:K,37:W,41:J,44:q,45:Q,46:Z,47:tt,50:w},t(c,[2,7]),t(c,[2,8]),t(c,[2,9]),t(c,[2,10]),t(c,[2,11],{13:[1,37],14:[1,38]}),t(c,[2,15]),{17:[1,39]},t(c,[2,17],{19:[1,40]}),{22:[1,41]},t(c,[2,21]),t(c,[2,22]),t(c,[2,23]),t(c,[2,24]),{29:42,30:[1,43],52:[1,44],53:[1,45]},t(c,[2,27]),{33:[1,46]},{35:[1,47]},t(c,[2,30]),{38:[1,48],40:[1,49]},{42:[1,50]},t(et,[2,40],{51:[1,51]}),t(et,[2,41],{51:[1,52]}),t(c,[2,34]),t(c,[2,35]),t(c,[2,36]),t(c,[2,37]),t(c,[2,6]),t(c,[2,12]),{12:53,23:R,50:w},t(c,[2,16]),t(Dt,f,{7:54}),{23:[1,55]},{23:[1,56]},{22:[1,57]},{23:[2,44]},{23:[2,45]},t(c,[2,28]),t(c,[2,29]),{39:[1,58]},{39:[1,59]},{43:[1,60]},{23:[1,61]},{23:[1,62]},t(c,[2,13],{13:[1,63]}),{4:d,5:y,8:8,9:10,10:12,11:13,12:14,15:k,16:u,18:E,20:[1,64],21:T,23:R,24:G,25:j,26:U,27:z,28:M,31:24,32:H,34:X,36:K,37:W,41:J,44:q,45:Q,46:Z,47:tt,50:w},t(c,[2,19],{19:[1,65]}),{30:[1,66]},{23:[1,67]},t(c,[2,31]),t(c,[2,32]),t(c,[2,33]),t(et,[2,42]),t(et,[2,43]),t(c,[2,14]),t(c,[2,18]),t(Dt,f,{7:68}),t(c,[2,25]),t(c,[2,26]),{4:d,5:y,8:8,9:10,10:12,11:13,12:14,15:k,16:u,18:E,20:[1,69],21:T,23:R,24:G,25:j,26:U,27:z,28:M,31:24,32:H,34:X,36:K,37:W,41:J,44:q,45:Q,46:Z,47:tt,50:w},t(c,[2,20])],defaultActions:{5:[2,1],6:[2,2],44:[2,44],45:[2,45]},parseError:function(r,n){if(n.recoverable)this.trace(r);else{var i=new Error(r);throw i.hash=n,i}},parse:function(r){var n=this,i=[0],o=[],p=[null],e=[],$=this.table,l="",v=0,O=0,st=2,B=1,ft=e.slice.call(arguments,1),S=Object.create(this.lexer),A={yy:{}};for(var dt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,dt)&&(A.yy[dt]=this.yy[dt]);S.setInput(r,A.yy),A.yy.lexer=S,A.yy.parser=this,typeof S.yylloc>"u"&&(S.yylloc={});var yt=S.yylloc;e.push(yt);var Gt=S.options&&S.options.ranges;typeof A.yy.parseError=="function"?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function jt(){var x;return x=o.pop()||S.lex()||B,typeof x!="number"&&(x instanceof Array&&(o=x,x=o.pop()),x=n.symbols_[x]||x),x}for(var _,L,m,pt,N={},it,b,Ct,rt;;){if(L=i[i.length-1],this.defaultActions[L]?m=this.defaultActions[L]:((_===null||typeof _>"u")&&(_=jt()),m=$[L]&&$[L][_]),typeof m>"u"||!m.length||!m[0]){var St="";rt=[];for(it in $[L])this.terminals_[it]&&it>st&&rt.push("'"+this.terminals_[it]+"'");S.showPosition?St="Parse error on line "+(v+1)+`: +import{c as Y,g as Ut,s as zt,a as Mt,b as Ht,v as Xt,x as Kt,l as D,j as ot,z as Wt,b2 as Jt}from"./mermaid.core-QJnSHCal.js";var gt=function(){var t=function(C,r,n,i){for(n=n||{},i=C.length;i--;n[C[i]]=r);return n},s=[1,2],a=[1,3],h=[1,4],f=[2,4],d=[1,9],y=[1,11],k=[1,15],u=[1,16],E=[1,17],T=[1,18],R=[1,30],G=[1,19],j=[1,20],U=[1,21],z=[1,22],M=[1,23],H=[1,25],X=[1,26],K=[1,27],W=[1,28],J=[1,29],q=[1,32],Q=[1,33],Z=[1,34],tt=[1,35],w=[1,31],c=[1,4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],et=[1,4,5,13,14,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],Dt=[4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],ht={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,cssClassStatement:11,idStatement:12,DESCR:13,"-->":14,HIDE_EMPTY:15,scale:16,WIDTH:17,COMPOSIT_STATE:18,STRUCT_START:19,STRUCT_STOP:20,STATE_DESCR:21,AS:22,ID:23,FORK:24,JOIN:25,CHOICE:26,CONCURRENT:27,note:28,notePosition:29,NOTE_TEXT:30,direction:31,acc_title:32,acc_title_value:33,acc_descr:34,acc_descr_value:35,acc_descr_multiline_value:36,classDef:37,CLASSDEF_ID:38,CLASSDEF_STYLEOPTS:39,DEFAULT:40,class:41,CLASSENTITY_IDS:42,STYLECLASS:43,direction_tb:44,direction_bt:45,direction_rl:46,direction_lr:47,eol:48,";":49,EDGE_STATE:50,STYLE_SEPARATOR:51,left_of:52,right_of:53,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",13:"DESCR",14:"-->",15:"HIDE_EMPTY",16:"scale",17:"WIDTH",18:"COMPOSIT_STATE",19:"STRUCT_START",20:"STRUCT_STOP",21:"STATE_DESCR",22:"AS",23:"ID",24:"FORK",25:"JOIN",26:"CHOICE",27:"CONCURRENT",28:"note",30:"NOTE_TEXT",32:"acc_title",33:"acc_title_value",34:"acc_descr",35:"acc_descr_value",36:"acc_descr_multiline_value",37:"classDef",38:"CLASSDEF_ID",39:"CLASSDEF_STYLEOPTS",40:"DEFAULT",41:"class",42:"CLASSENTITY_IDS",43:"STYLECLASS",44:"direction_tb",45:"direction_bt",46:"direction_rl",47:"direction_lr",49:";",50:"EDGE_STATE",51:"STYLE_SEPARATOR",52:"left_of",53:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[31,1],[31,1],[31,1],[31,1],[48,1],[48,1],[12,1],[12,1],[12,3],[12,3],[29,1],[29,1]],performAction:function(r,n,i,o,p,e,$){var l=e.length-1;switch(p){case 3:return o.setRootDoc(e[l]),e[l];case 4:this.$=[];break;case 5:e[l]!="nl"&&(e[l-1].push(e[l]),this.$=e[l-1]);break;case 6:case 7:this.$=e[l];break;case 8:this.$="nl";break;case 11:this.$=e[l];break;case 12:const B=e[l-1];B.description=o.trimColon(e[l]),this.$=B;break;case 13:this.$={stmt:"relation",state1:e[l-2],state2:e[l]};break;case 14:const ft=o.trimColon(e[l]);this.$={stmt:"relation",state1:e[l-3],state2:e[l-1],description:ft};break;case 18:this.$={stmt:"state",id:e[l-3],type:"default",description:"",doc:e[l-1]};break;case 19:var v=e[l],O=e[l-2].trim();if(e[l].match(":")){var st=e[l].split(":");v=st[0],O=[O,st[1]]}this.$={stmt:"state",id:v,type:"default",description:O};break;case 20:this.$={stmt:"state",id:e[l-3],type:"default",description:e[l-5],doc:e[l-1]};break;case 21:this.$={stmt:"state",id:e[l],type:"fork"};break;case 22:this.$={stmt:"state",id:e[l],type:"join"};break;case 23:this.$={stmt:"state",id:e[l],type:"choice"};break;case 24:this.$={stmt:"state",id:o.getDividerId(),type:"divider"};break;case 25:this.$={stmt:"state",id:e[l-1].trim(),note:{position:e[l-2].trim(),text:e[l].trim()}};break;case 28:this.$=e[l].trim(),o.setAccTitle(this.$);break;case 29:case 30:this.$=e[l].trim(),o.setAccDescription(this.$);break;case 31:case 32:this.$={stmt:"classDef",id:e[l-1].trim(),classes:e[l].trim()};break;case 33:this.$={stmt:"applyClass",id:e[l-1].trim(),styleClass:e[l].trim()};break;case 34:o.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 35:o.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 36:o.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 37:o.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 40:case 41:this.$={stmt:"state",id:e[l].trim(),type:"default",description:""};break;case 42:this.$={stmt:"state",id:e[l-2].trim(),classes:[e[l].trim()],type:"default",description:""};break;case 43:this.$={stmt:"state",id:e[l-2].trim(),classes:[e[l].trim()],type:"default",description:""};break}},table:[{3:1,4:s,5:a,6:h},{1:[3]},{3:5,4:s,5:a,6:h},{3:6,4:s,5:a,6:h},t([1,4,5,15,16,18,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],f,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:d,5:y,8:8,9:10,10:12,11:13,12:14,15:k,16:u,18:E,21:T,23:R,24:G,25:j,26:U,27:z,28:M,31:24,32:H,34:X,36:K,37:W,41:J,44:q,45:Q,46:Z,47:tt,50:w},t(c,[2,5]),{9:36,10:12,11:13,12:14,15:k,16:u,18:E,21:T,23:R,24:G,25:j,26:U,27:z,28:M,31:24,32:H,34:X,36:K,37:W,41:J,44:q,45:Q,46:Z,47:tt,50:w},t(c,[2,7]),t(c,[2,8]),t(c,[2,9]),t(c,[2,10]),t(c,[2,11],{13:[1,37],14:[1,38]}),t(c,[2,15]),{17:[1,39]},t(c,[2,17],{19:[1,40]}),{22:[1,41]},t(c,[2,21]),t(c,[2,22]),t(c,[2,23]),t(c,[2,24]),{29:42,30:[1,43],52:[1,44],53:[1,45]},t(c,[2,27]),{33:[1,46]},{35:[1,47]},t(c,[2,30]),{38:[1,48],40:[1,49]},{42:[1,50]},t(et,[2,40],{51:[1,51]}),t(et,[2,41],{51:[1,52]}),t(c,[2,34]),t(c,[2,35]),t(c,[2,36]),t(c,[2,37]),t(c,[2,6]),t(c,[2,12]),{12:53,23:R,50:w},t(c,[2,16]),t(Dt,f,{7:54}),{23:[1,55]},{23:[1,56]},{22:[1,57]},{23:[2,44]},{23:[2,45]},t(c,[2,28]),t(c,[2,29]),{39:[1,58]},{39:[1,59]},{43:[1,60]},{23:[1,61]},{23:[1,62]},t(c,[2,13],{13:[1,63]}),{4:d,5:y,8:8,9:10,10:12,11:13,12:14,15:k,16:u,18:E,20:[1,64],21:T,23:R,24:G,25:j,26:U,27:z,28:M,31:24,32:H,34:X,36:K,37:W,41:J,44:q,45:Q,46:Z,47:tt,50:w},t(c,[2,19],{19:[1,65]}),{30:[1,66]},{23:[1,67]},t(c,[2,31]),t(c,[2,32]),t(c,[2,33]),t(et,[2,42]),t(et,[2,43]),t(c,[2,14]),t(c,[2,18]),t(Dt,f,{7:68}),t(c,[2,25]),t(c,[2,26]),{4:d,5:y,8:8,9:10,10:12,11:13,12:14,15:k,16:u,18:E,20:[1,69],21:T,23:R,24:G,25:j,26:U,27:z,28:M,31:24,32:H,34:X,36:K,37:W,41:J,44:q,45:Q,46:Z,47:tt,50:w},t(c,[2,20])],defaultActions:{5:[2,1],6:[2,2],44:[2,44],45:[2,45]},parseError:function(r,n){if(n.recoverable)this.trace(r);else{var i=new Error(r);throw i.hash=n,i}},parse:function(r){var n=this,i=[0],o=[],p=[null],e=[],$=this.table,l="",v=0,O=0,st=2,B=1,ft=e.slice.call(arguments,1),S=Object.create(this.lexer),A={yy:{}};for(var dt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,dt)&&(A.yy[dt]=this.yy[dt]);S.setInput(r,A.yy),A.yy.lexer=S,A.yy.parser=this,typeof S.yylloc>"u"&&(S.yylloc={});var yt=S.yylloc;e.push(yt);var Gt=S.options&&S.options.ranges;typeof A.yy.parseError=="function"?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function jt(){var x;return x=o.pop()||S.lex()||B,typeof x!="number"&&(x instanceof Array&&(o=x,x=o.pop()),x=n.symbols_[x]||x),x}for(var _,L,m,pt,N={},it,b,Ct,rt;;){if(L=i[i.length-1],this.defaultActions[L]?m=this.defaultActions[L]:((_===null||typeof _>"u")&&(_=jt()),m=$[L]&&$[L][_]),typeof m>"u"||!m.length||!m[0]){var St="";rt=[];for(it in $[L])this.terminals_[it]&&it>st&&rt.push("'"+this.terminals_[it]+"'");S.showPosition?St="Parse error on line "+(v+1)+`: `+S.showPosition()+` Expecting `+rt.join(", ")+", got '"+(this.terminals_[_]||_)+"'":St="Parse error on line "+(v+1)+": Unexpected "+(_==B?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(St,{text:S.match,token:this.terminals_[_]||_,line:S.yylineno,loc:yt,expected:rt})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+L+", token: "+_);switch(m[0]){case 1:i.push(_),p.push(S.yytext),e.push(S.yylloc),i.push(m[1]),_=null,O=S.yyleng,l=S.yytext,v=S.yylineno,yt=S.yylloc;break;case 2:if(b=this.productions_[m[1]][1],N.$=p[p.length-b],N._$={first_line:e[e.length-(b||1)].first_line,last_line:e[e.length-1].last_line,first_column:e[e.length-(b||1)].first_column,last_column:e[e.length-1].last_column},Gt&&(N._$.range=[e[e.length-(b||1)].range[0],e[e.length-1].range[1]]),pt=this.performAction.apply(N,[l,O,v,A.yy,m[1],p,e].concat(ft)),typeof pt<"u")return pt;b&&(i=i.slice(0,-1*b*2),p=p.slice(0,-1*b),e=e.slice(0,-1*b)),i.push(this.productions_[m[1]][0]),p.push(N.$),e.push(N._$),Ct=$[i[i.length-2]][i[i.length-1]],i.push(Ct);break;case 3:return!0}}return!0}},Yt=function(){var C={EOF:1,parseError:function(n,i){if(this.yy.parser)this.yy.parser.parseError(n,i);else throw new Error(n)},setInput:function(r,n){return this.yy=n||this.yy||{},this._input=r,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var r=this._input[0];this.yytext+=r,this.yyleng++,this.offset++,this.match+=r,this.matched+=r;var n=r.match(/(?:\r\n?|\n).*/g);return n?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),r},unput:function(r){var n=r.length,i=r.split(/(?:\r\n?|\n)/g);this._input=r+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;var o=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===o.length?this.yylloc.first_column:0)+o[o.length-i.length].length-i[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-n]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(r){this.unput(this.match.slice(r))},pastInput:function(){var r=this.matched.substr(0,this.matched.length-this.match.length);return(r.length>20?"...":"")+r.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var r=this.match;return r.length<20&&(r+=this._input.substr(0,20-r.length)),(r.substr(0,20)+(r.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var r=this.pastInput(),n=new Array(r.length+1).join("-");return r+this.upcomingInput()+` diff --git a/assets/svgDrawCommon-ad5ef572-eI41Wm50.js b/assets/svgDrawCommon-ad5ef572-WW-Kq4zg.js similarity index 95% rename from assets/svgDrawCommon-ad5ef572-eI41Wm50.js rename to assets/svgDrawCommon-ad5ef572-WW-Kq4zg.js index 26f9743..38eca86 100644 --- a/assets/svgDrawCommon-ad5ef572-eI41Wm50.js +++ b/assets/svgDrawCommon-ad5ef572-WW-Kq4zg.js @@ -1 +1 @@ -import{n as o,m as i}from"./mermaid.core-zy7cM8l9.js";const c=(s,t)=>{const r=s.append("rect");if(r.attr("x",t.x),r.attr("y",t.y),r.attr("fill",t.fill),r.attr("stroke",t.stroke),r.attr("width",t.width),r.attr("height",t.height),t.rx!==void 0&&r.attr("rx",t.rx),t.ry!==void 0&&r.attr("ry",t.ry),t.attrs!==void 0)for(const e in t.attrs)r.attr(e,t.attrs[e]);return t.class!==void 0&&r.attr("class",t.class),r},x=(s,t)=>{const r={x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,stroke:t.stroke,class:"rect"};c(s,r).lower()},d=(s,t)=>{const r=t.text.replace(o," "),e=s.append("text");e.attr("x",t.x),e.attr("y",t.y),e.attr("class","legend"),e.style("text-anchor",t.anchor),t.class!==void 0&&e.attr("class",t.class);const n=e.append("tspan");return n.attr("x",t.x+t.textMargin*2),n.text(r),e},h=(s,t,r,e)=>{const n=s.append("image");n.attr("x",t),n.attr("y",r);const a=i.sanitizeUrl(e);n.attr("xlink:href",a)},y=(s,t,r,e)=>{const n=s.append("use");n.attr("x",t),n.attr("y",r);const a=i.sanitizeUrl(e);n.attr("xlink:href",`#${a}`)},g=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),p=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0});export{x as a,y as b,h as c,c as d,p as e,d as f,g}; +import{n as o,m as i}from"./mermaid.core-QJnSHCal.js";const c=(s,t)=>{const r=s.append("rect");if(r.attr("x",t.x),r.attr("y",t.y),r.attr("fill",t.fill),r.attr("stroke",t.stroke),r.attr("width",t.width),r.attr("height",t.height),t.rx!==void 0&&r.attr("rx",t.rx),t.ry!==void 0&&r.attr("ry",t.ry),t.attrs!==void 0)for(const e in t.attrs)r.attr(e,t.attrs[e]);return t.class!==void 0&&r.attr("class",t.class),r},x=(s,t)=>{const r={x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,stroke:t.stroke,class:"rect"};c(s,r).lower()},d=(s,t)=>{const r=t.text.replace(o," "),e=s.append("text");e.attr("x",t.x),e.attr("y",t.y),e.attr("class","legend"),e.style("text-anchor",t.anchor),t.class!==void 0&&e.attr("class",t.class);const n=e.append("tspan");return n.attr("x",t.x+t.textMargin*2),n.text(r),e},h=(s,t,r,e)=>{const n=s.append("image");n.attr("x",t),n.attr("y",r);const a=i.sanitizeUrl(e);n.attr("xlink:href",a)},y=(s,t,r,e)=>{const n=s.append("use");n.attr("x",t),n.attr("y",r);const a=i.sanitizeUrl(e);n.attr("xlink:href",`#${a}`)},g=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),p=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0});export{x as a,y as b,h as c,c as d,p as e,d as f,g}; diff --git a/assets/thanks.html-F1DFxuQI.js b/assets/thanks.html-7ORVp6Jc.js similarity index 98% rename from assets/thanks.html-F1DFxuQI.js rename to assets/thanks.html-7ORVp6Jc.js index ea8bcf0..69d712d 100644 --- a/assets/thanks.html-F1DFxuQI.js +++ b/assets/thanks.html-7ORVp6Jc.js @@ -1 +1 @@ -import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as h,o as i,c as s,a as e,d as r,b as t,e as n}from"./app-BrxqtzGY.js";const _={},c=e("h2",{id:"特别感谢",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#特别感谢","aria-hidden":"true"},"#"),r(" 特别感谢")],-1),l={href:"https://github.com/ireader",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/ireader/media-server",target:"_blank",rel:"noopener noreferrer"},f=e("h2",{id:"致谢",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#致谢","aria-hidden":"true"},"#"),r(" 致谢")],-1),p=e("p",null,"感谢以下各位对本项目包括但不限于代码贡献、问题反馈、资金捐赠等各种方式的支持!以下排名不分先后:",-1),m={href:"https://github.com/ireader",target:"_blank",rel:"noopener noreferrer"},b={href:"https://github.com/gemfield",target:"_blank",rel:"noopener noreferrer"},d={href:"https://github.com/nanguantong2",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/tsingeye",target:"_blank",rel:"noopener noreferrer"},k={href:"https://github.com/chenxiaolei",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/zqsong",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/baiyfcu",target:"_blank",rel:"noopener noreferrer"},x={href:"https://github.com/3503207480",target:"_blank",rel:"noopener noreferrer"},q={href:"https://github.com/DroidChow",target:"_blank",rel:"noopener noreferrer"},j={href:"https://github.com/HuoQiShuai",target:"_blank",rel:"noopener noreferrer"},z={href:"https://github.com/ChinaCCF",target:"_blank",rel:"noopener noreferrer"},L={href:"https://github.com/JerryLinGd",target:"_blank",rel:"noopener noreferrer"},C={href:"https://www.linkingvision.com/",target:"_blank",rel:"noopener noreferrer"},v={href:"https://github.com/taotaobujue2008",target:"_blank",rel:"noopener noreferrer"},T=e("a",{href:"mailto:409257224@qq.com"},"好心情",-1),J={href:"https://github.com/MingZhuLiu",target:"_blank",rel:"noopener noreferrer"},A={href:"https://github.com/wasphin",target:"_blank",rel:"noopener noreferrer"},D={href:"https://github.com/doodoocoder",target:"_blank",rel:"noopener noreferrer"},Z={href:"https://github.com/Colibrow",target:"_blank",rel:"noopener noreferrer"},B={href:"https://github.com/swwheihei",target:"_blank",rel:"noopener noreferrer"},H={href:"https://gitee.com/kkkkk5G",target:"_blank",rel:"noopener noreferrer"},K=e("a",{href:"mailto:zhouweimin@supremind.com"},"Zhou Weimin",-1),N={href:"https://github.com/jim-king-2000",target:"_blank",rel:"noopener noreferrer"},W=e("a",{href:"mailto:392293307@qq.com"},"西瓜丶",-1),P={href:"https://github.com/MingZhuLiu",target:"_blank",rel:"noopener noreferrer"},S={href:"https://github.com/chengxiaosheng",target:"_blank",rel:"noopener noreferrer"},G=e("a",{href:"mailto:2381267071@qq.com"},"big panda",-1),V={href:"https://github.com/tanningzhong",target:"_blank",rel:"noopener noreferrer"},X={href:"https://github.com/hctym1995",target:"_blank",rel:"noopener noreferrer"},E={href:"https://gitee.com/kingyuanyuan",target:"_blank",rel:"noopener noreferrer"},F=e("a",{href:"mailto:sunhui200475@163.com"},"sunhui",-1),M=e("a",{href:"mailto:fangpengcheng@bilibili.com"},"mirs",-1),I=e("a",{href:"mailto:kevin__cheng@outlook.com"},"Kevin Cheng",-1),O=e("a",{href:"mailto:root@oopy.org"},"Liu Jiang",-1),R={href:"https://github.com/alongl",target:"_blank",rel:"noopener noreferrer"},Q=n('qingcilyg1949zhlong大裤衩droid.chow',5),U={href:"https://github.com/musicwood",target:"_blank",rel:"noopener noreferrer"},Y={href:"https://github.com/CharleyWangHZ",target:"_blank",rel:"noopener noreferrer"},$={href:"https://github.com/johzzy",target:"_blank",rel:"noopener noreferrer"},ee={href:"https://github.com/DoubleX69",target:"_blank",rel:"noopener noreferrer"},re={href:"https://github.com/lawrencehj",target:"_blank",rel:"noopener noreferrer"},oe=e("a",{href:"mailto:xyyangkun@163.com"},"yangkun",-1),te=e("a",{href:"mailto:holychaossword@hotmail.com"},"Xinghua Zhao",-1),ne={href:"https://github.com/brokensword2018",target:"_blank",rel:"noopener noreferrer"},ae={href:"https://github.com/rqb500",target:"_blank",rel:"noopener noreferrer"},he={href:"https://github.com/alexliyu7352",target:"_blank",rel:"noopener noreferrer"},ie={href:"https://github.com/Dw9",target:"_blank",rel:"noopener noreferrer"},se=n('明月惊鹊cgmhejilinalexliyu7352cgm',5),_e={href:"https://github.com/HaoruiWang",target:"_blank",rel:"noopener noreferrer"},ce=e("a",{href:"mailto:joshuafc@foxmail.com"},"joshuafc",-1),le={href:"https://github.com/JayChen0519",target:"_blank",rel:"noopener noreferrer"},ge=e("a",{href:"mailto:zuoxue@qq.com"},"zx",-1),fe=e("a",{href:"mailto:wangcker@163.com"},"wangcker",-1),pe=e("a",{href:"mailto:wp@zafu.edu.cn"},"WuPeng",-1),me={href:"https://github.com/starry",target:"_blank",rel:"noopener noreferrer"},be={href:"https://github.com/mtdxc",target:"_blank",rel:"noopener noreferrer"},de={href:"https://github.com/hugangfeng333",target:"_blank",rel:"noopener noreferrer"},ue={href:"https://github.com/zhao85",target:"_blank",rel:"noopener noreferrer"},ke={href:"https://github.com/dreamisdream",target:"_blank",rel:"noopener noreferrer"},ye={href:"https://github.com/dcan123",target:"_blank",rel:"noopener noreferrer"},we={href:"https://github.com/duiniuluantanqin",target:"_blank",rel:"noopener noreferrer"},xe={href:"https://gitee.com/leon14631",target:"_blank",rel:"noopener noreferrer"},qe={href:"https://github.com/custompal",target:"_blank",rel:"noopener noreferrer"},je={href:"https://github.com/PioLing",target:"_blank",rel:"noopener noreferrer"},ze={href:"https://github.com/ZSC714725",target:"_blank",rel:"noopener noreferrer"},Le={href:"https://github.com/gongluck",target:"_blank",rel:"noopener noreferrer"},Ce={href:"https://github.com/a-ucontrol",target:"_blank",rel:"noopener noreferrer"},ve={href:"https://github.com/TalusL",target:"_blank",rel:"noopener noreferrer"},Te={href:"https://github.com/AHAOAHA",target:"_blank",rel:"noopener noreferrer"},Je={href:"https://github.com/TempoTian",target:"_blank",rel:"noopener noreferrer"},Ae={href:"https://github.com/yjkhtddx",target:"_blank",rel:"noopener noreferrer"},De={href:"https://github.com/ljx0305",target:"_blank",rel:"noopener noreferrer"},Ze={href:"https://github.com/zhu410289616",target:"_blank",rel:"noopener noreferrer"},Be={href:"https://github.com/1461521844lijin",target:"_blank",rel:"noopener noreferrer"},He={href:"https://github.com/PioLing",target:"_blank",rel:"noopener noreferrer"},Ke={href:"https://github.com/BackT0TheFuture",target:"_blank",rel:"noopener noreferrer"},Ne={href:"https://github.com/perara",target:"_blank",rel:"noopener noreferrer"},We={href:"https://github.com/codeRATny",target:"_blank",rel:"noopener noreferrer"},Pe={href:"https://github.com/dengjfzh",target:"_blank",rel:"noopener noreferrer"},Se={href:"https://github.com/ixingqiao",target:"_blank",rel:"noopener noreferrer"},Ge={href:"https://github.com/xuandu",target:"_blank",rel:"noopener noreferrer"},Ve={href:"https://github.com/tbago",target:"_blank",rel:"noopener noreferrer"},Xe={href:"https://github.com/Luosh",target:"_blank",rel:"noopener noreferrer"},Ee={href:"https://github.com/linxiaoyan",target:"_blank",rel:"noopener noreferrer"},Fe={href:"https://github.com/mc373906408",target:"_blank",rel:"noopener noreferrer"},Me={href:"https://github.com/Deepslient",target:"_blank",rel:"noopener noreferrer"},Ie={href:"https://github.com/rayjay214",target:"_blank",rel:"noopener noreferrer"},Oe={href:"https://github.com/ArmstrongCN",target:"_blank",rel:"noopener noreferrer"},Re={href:"https://github.com/leibnewton",target:"_blank",rel:"noopener noreferrer"},Qe={href:"https://github.com/1002victor",target:"_blank",rel:"noopener noreferrer"},Ue=e("p",null,"同时感谢 JetBrains 对开源项目的支持,本项目使用 CLion 开发与调试:",-1),Ye={href:"https://jb.gg/OpenSourceSupport",target:"_blank",rel:"noopener noreferrer"},$e=e("img",{src:"https://resources.jetbrains.com/storage/products/company/brand/logos/CLion.svg",alt:"JetBrains",tabindex:"0",loading:"lazy"},null,-1),er=e("figcaption",null,"JetBrains",-1);function rr(or,tr){const o=h("ExternalLinkIcon");return i(),s("div",null,[c,e("p",null,[r("本项目采用了"),e("a",l,[r("老陈"),t(o)]),r(" 的 "),e("a",g,[r("media-server"),t(o)]),r(" 库, 本项目的 ts/fmp4/mp4/ps 容器格式的复用解复用都依赖 media-server 库。在实现本项目诸多功能时,老陈多次给予了无私热情关键的帮助, 特此对他表示诚挚的感谢!")]),f,p,e("p",null,[e("a",m,[r("老陈"),t(o)]),e("a",b,[r("Gemfield"),t(o)]),e("a",d,[r("南冠彤"),t(o)]),e("a",u,[r("凹凸慢"),t(o)]),e("a",k,[r("chenxiaolei"),t(o)]),e("a",y,[r("史前小虫"),t(o)]),e("a",w,[r("清涩绿茶"),t(o)]),e("a",x,[r("3503207480"),t(o)]),e("a",q,[r("DroidChow"),t(o)]),e("a",j,[r("阿塞"),t(o)]),e("a",z,[r("火宣"),t(o)]),e("a",L,[r("γ 瑞 γ ミ"),t(o)]),e("a",C,[r("linkingvision"),t(o)]),e("a",v,[r("茄子"),t(o)]),T,e("a",J,[r("浮沉"),t(o)]),e("a",A,[r("Xiaofeng Wang"),t(o)]),e("a",D,[r("doodoocoder"),t(o)]),e("a",Z,[r("qingci"),t(o)]),e("a",B,[r("swwheihei"),t(o)]),e("a",H,[r("KKKKK5G"),t(o)]),K,e("a",N,[r("Jim Jin"),t(o)]),W,e("a",P,[r("MingZhuLiu"),t(o)]),e("a",S,[r("chengxiaosheng"),t(o)]),G,e("a",V,[r("tanningzhong"),t(o)]),e("a",X,[r("hctym1995"),t(o)]),e("a",E,[r("hewenyuan"),t(o)]),F,M,I,O,e("a",R,[r("along"),t(o)]),Q,e("a",U,[r("陈晓林"),t(o)]),e("a",Y,[r("CharleyWangHZ"),t(o)]),e("a",$,[r("Johnny"),t(o)]),e("a",ee,[r("DoubleX69"),t(o)]),e("a",re,[r("lawrencehj"),t(o)]),oe,te,e("a",ne,[r("hejilin"),t(o)]),e("a",ae,[r("rqb500"),t(o)]),e("a",he,[r("Alex"),t(o)]),e("a",ie,[r("Dw9"),t(o)]),se,e("a",_e,[r("haorui wang"),t(o)]),ce,e("a",le,[r("JayChen0519"),t(o)]),ge,fe,pe,e("a",me,[r("starry"),t(o)]),e("a",be,[r("mtdxc"),t(o)]),e("a",de,[r("胡刚风"),t(o)]),e("a",ue,[r("zhao85"),t(o)]),e("a",ke,[r("dreamisdream"),t(o)]),e("a",ye,[r("dingcan"),t(o)]),e("a",we,[r("Haibo Chen"),t(o)]),e("a",xe,[r("Leon"),t(o)]),e("a",qe,[r("custompal"),t(o)]),e("a",je,[r("PioLing"),t(o)]),e("a",ze,[r("KevinZang"),t(o)]),e("a",Le,[r("gongluck"),t(o)]),e("a",Ce,[r("a-ucontrol"),t(o)]),e("a",ve,[r("TalusL"),t(o)]),e("a",Te,[r("ahaooahaz"),t(o)]),e("a",Je,[r("TempoTian"),t(o)]),e("a",Ae,[r("Derek Liu"),t(o)]),e("a",De,[r("ljx0305"),t(o)]),e("a",Ze,[r("朱如洪 "),t(o)]),e("a",Be,[r("lijin"),t(o)]),e("a",He,[r("PioLing"),t(o)]),e("a",Ke,[r("BackT0TheFuture"),t(o)]),e("a",Ne,[r("perara"),t(o)]),e("a",We,[r("codeRATny"),t(o)]),e("a",Pe,[r("dengjfzh"),t(o)]),e("a",Se,[r("百鸣"),t(o)]),e("a",Ge,[r("fruit Juice"),t(o)]),e("a",Ve,[r("tbago"),t(o)]),e("a",Xe,[r("Luosh"),t(o)]),e("a",Ee,[r("linxiaoyan87"),t(o)]),e("a",Fe,[r("waken"),t(o)]),e("a",Me,[r("Deepslient"),t(o)]),e("a",Ie,[r("imp_rayjay"),t(o)]),e("a",Oe,[r("ArmstrongCN"),t(o)]),e("a",Re,[r("leibnewton"),t(o)]),e("a",Qe,[r("1002victor"),t(o)])]),Ue,e("figure",null,[e("a",Ye,[$e,t(o)]),er])])}const hr=a(_,[["render",rr],["__file","thanks.html.vue"]]);export{hr as default}; +import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as h,o as i,c as s,a as e,d as r,b as t,e as n}from"./app-oTlYPy8h.js";const _={},c=e("h2",{id:"特别感谢",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#特别感谢","aria-hidden":"true"},"#"),r(" 特别感谢")],-1),l={href:"https://github.com/ireader",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/ireader/media-server",target:"_blank",rel:"noopener noreferrer"},f=e("h2",{id:"致谢",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#致谢","aria-hidden":"true"},"#"),r(" 致谢")],-1),p=e("p",null,"感谢以下各位对本项目包括但不限于代码贡献、问题反馈、资金捐赠等各种方式的支持!以下排名不分先后:",-1),m={href:"https://github.com/ireader",target:"_blank",rel:"noopener noreferrer"},b={href:"https://github.com/gemfield",target:"_blank",rel:"noopener noreferrer"},d={href:"https://github.com/nanguantong2",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/tsingeye",target:"_blank",rel:"noopener noreferrer"},k={href:"https://github.com/chenxiaolei",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/zqsong",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/baiyfcu",target:"_blank",rel:"noopener noreferrer"},x={href:"https://github.com/3503207480",target:"_blank",rel:"noopener noreferrer"},q={href:"https://github.com/DroidChow",target:"_blank",rel:"noopener noreferrer"},j={href:"https://github.com/HuoQiShuai",target:"_blank",rel:"noopener noreferrer"},z={href:"https://github.com/ChinaCCF",target:"_blank",rel:"noopener noreferrer"},L={href:"https://github.com/JerryLinGd",target:"_blank",rel:"noopener noreferrer"},C={href:"https://www.linkingvision.com/",target:"_blank",rel:"noopener noreferrer"},v={href:"https://github.com/taotaobujue2008",target:"_blank",rel:"noopener noreferrer"},T=e("a",{href:"mailto:409257224@qq.com"},"好心情",-1),J={href:"https://github.com/MingZhuLiu",target:"_blank",rel:"noopener noreferrer"},A={href:"https://github.com/wasphin",target:"_blank",rel:"noopener noreferrer"},D={href:"https://github.com/doodoocoder",target:"_blank",rel:"noopener noreferrer"},Z={href:"https://github.com/Colibrow",target:"_blank",rel:"noopener noreferrer"},B={href:"https://github.com/swwheihei",target:"_blank",rel:"noopener noreferrer"},H={href:"https://gitee.com/kkkkk5G",target:"_blank",rel:"noopener noreferrer"},K=e("a",{href:"mailto:zhouweimin@supremind.com"},"Zhou Weimin",-1),N={href:"https://github.com/jim-king-2000",target:"_blank",rel:"noopener noreferrer"},W=e("a",{href:"mailto:392293307@qq.com"},"西瓜丶",-1),P={href:"https://github.com/MingZhuLiu",target:"_blank",rel:"noopener noreferrer"},S={href:"https://github.com/chengxiaosheng",target:"_blank",rel:"noopener noreferrer"},G=e("a",{href:"mailto:2381267071@qq.com"},"big panda",-1),V={href:"https://github.com/tanningzhong",target:"_blank",rel:"noopener noreferrer"},X={href:"https://github.com/hctym1995",target:"_blank",rel:"noopener noreferrer"},E={href:"https://gitee.com/kingyuanyuan",target:"_blank",rel:"noopener noreferrer"},F=e("a",{href:"mailto:sunhui200475@163.com"},"sunhui",-1),M=e("a",{href:"mailto:fangpengcheng@bilibili.com"},"mirs",-1),I=e("a",{href:"mailto:kevin__cheng@outlook.com"},"Kevin Cheng",-1),O=e("a",{href:"mailto:root@oopy.org"},"Liu Jiang",-1),R={href:"https://github.com/alongl",target:"_blank",rel:"noopener noreferrer"},Q=n('qingcilyg1949zhlong大裤衩droid.chow',5),U={href:"https://github.com/musicwood",target:"_blank",rel:"noopener noreferrer"},Y={href:"https://github.com/CharleyWangHZ",target:"_blank",rel:"noopener noreferrer"},$={href:"https://github.com/johzzy",target:"_blank",rel:"noopener noreferrer"},ee={href:"https://github.com/DoubleX69",target:"_blank",rel:"noopener noreferrer"},re={href:"https://github.com/lawrencehj",target:"_blank",rel:"noopener noreferrer"},oe=e("a",{href:"mailto:xyyangkun@163.com"},"yangkun",-1),te=e("a",{href:"mailto:holychaossword@hotmail.com"},"Xinghua Zhao",-1),ne={href:"https://github.com/brokensword2018",target:"_blank",rel:"noopener noreferrer"},ae={href:"https://github.com/rqb500",target:"_blank",rel:"noopener noreferrer"},he={href:"https://github.com/alexliyu7352",target:"_blank",rel:"noopener noreferrer"},ie={href:"https://github.com/Dw9",target:"_blank",rel:"noopener noreferrer"},se=n('明月惊鹊cgmhejilinalexliyu7352cgm',5),_e={href:"https://github.com/HaoruiWang",target:"_blank",rel:"noopener noreferrer"},ce=e("a",{href:"mailto:joshuafc@foxmail.com"},"joshuafc",-1),le={href:"https://github.com/JayChen0519",target:"_blank",rel:"noopener noreferrer"},ge=e("a",{href:"mailto:zuoxue@qq.com"},"zx",-1),fe=e("a",{href:"mailto:wangcker@163.com"},"wangcker",-1),pe=e("a",{href:"mailto:wp@zafu.edu.cn"},"WuPeng",-1),me={href:"https://github.com/starry",target:"_blank",rel:"noopener noreferrer"},be={href:"https://github.com/mtdxc",target:"_blank",rel:"noopener noreferrer"},de={href:"https://github.com/hugangfeng333",target:"_blank",rel:"noopener noreferrer"},ue={href:"https://github.com/zhao85",target:"_blank",rel:"noopener noreferrer"},ke={href:"https://github.com/dreamisdream",target:"_blank",rel:"noopener noreferrer"},ye={href:"https://github.com/dcan123",target:"_blank",rel:"noopener noreferrer"},we={href:"https://github.com/duiniuluantanqin",target:"_blank",rel:"noopener noreferrer"},xe={href:"https://gitee.com/leon14631",target:"_blank",rel:"noopener noreferrer"},qe={href:"https://github.com/custompal",target:"_blank",rel:"noopener noreferrer"},je={href:"https://github.com/PioLing",target:"_blank",rel:"noopener noreferrer"},ze={href:"https://github.com/ZSC714725",target:"_blank",rel:"noopener noreferrer"},Le={href:"https://github.com/gongluck",target:"_blank",rel:"noopener noreferrer"},Ce={href:"https://github.com/a-ucontrol",target:"_blank",rel:"noopener noreferrer"},ve={href:"https://github.com/TalusL",target:"_blank",rel:"noopener noreferrer"},Te={href:"https://github.com/AHAOAHA",target:"_blank",rel:"noopener noreferrer"},Je={href:"https://github.com/TempoTian",target:"_blank",rel:"noopener noreferrer"},Ae={href:"https://github.com/yjkhtddx",target:"_blank",rel:"noopener noreferrer"},De={href:"https://github.com/ljx0305",target:"_blank",rel:"noopener noreferrer"},Ze={href:"https://github.com/zhu410289616",target:"_blank",rel:"noopener noreferrer"},Be={href:"https://github.com/1461521844lijin",target:"_blank",rel:"noopener noreferrer"},He={href:"https://github.com/PioLing",target:"_blank",rel:"noopener noreferrer"},Ke={href:"https://github.com/BackT0TheFuture",target:"_blank",rel:"noopener noreferrer"},Ne={href:"https://github.com/perara",target:"_blank",rel:"noopener noreferrer"},We={href:"https://github.com/codeRATny",target:"_blank",rel:"noopener noreferrer"},Pe={href:"https://github.com/dengjfzh",target:"_blank",rel:"noopener noreferrer"},Se={href:"https://github.com/ixingqiao",target:"_blank",rel:"noopener noreferrer"},Ge={href:"https://github.com/xuandu",target:"_blank",rel:"noopener noreferrer"},Ve={href:"https://github.com/tbago",target:"_blank",rel:"noopener noreferrer"},Xe={href:"https://github.com/Luosh",target:"_blank",rel:"noopener noreferrer"},Ee={href:"https://github.com/linxiaoyan",target:"_blank",rel:"noopener noreferrer"},Fe={href:"https://github.com/mc373906408",target:"_blank",rel:"noopener noreferrer"},Me={href:"https://github.com/Deepslient",target:"_blank",rel:"noopener noreferrer"},Ie={href:"https://github.com/rayjay214",target:"_blank",rel:"noopener noreferrer"},Oe={href:"https://github.com/ArmstrongCN",target:"_blank",rel:"noopener noreferrer"},Re={href:"https://github.com/leibnewton",target:"_blank",rel:"noopener noreferrer"},Qe={href:"https://github.com/1002victor",target:"_blank",rel:"noopener noreferrer"},Ue=e("p",null,"同时感谢 JetBrains 对开源项目的支持,本项目使用 CLion 开发与调试:",-1),Ye={href:"https://jb.gg/OpenSourceSupport",target:"_blank",rel:"noopener noreferrer"},$e=e("img",{src:"https://resources.jetbrains.com/storage/products/company/brand/logos/CLion.svg",alt:"JetBrains",tabindex:"0",loading:"lazy"},null,-1),er=e("figcaption",null,"JetBrains",-1);function rr(or,tr){const o=h("ExternalLinkIcon");return i(),s("div",null,[c,e("p",null,[r("本项目采用了"),e("a",l,[r("老陈"),t(o)]),r(" 的 "),e("a",g,[r("media-server"),t(o)]),r(" 库, 本项目的 ts/fmp4/mp4/ps 容器格式的复用解复用都依赖 media-server 库。在实现本项目诸多功能时,老陈多次给予了无私热情关键的帮助, 特此对他表示诚挚的感谢!")]),f,p,e("p",null,[e("a",m,[r("老陈"),t(o)]),e("a",b,[r("Gemfield"),t(o)]),e("a",d,[r("南冠彤"),t(o)]),e("a",u,[r("凹凸慢"),t(o)]),e("a",k,[r("chenxiaolei"),t(o)]),e("a",y,[r("史前小虫"),t(o)]),e("a",w,[r("清涩绿茶"),t(o)]),e("a",x,[r("3503207480"),t(o)]),e("a",q,[r("DroidChow"),t(o)]),e("a",j,[r("阿塞"),t(o)]),e("a",z,[r("火宣"),t(o)]),e("a",L,[r("γ 瑞 γ ミ"),t(o)]),e("a",C,[r("linkingvision"),t(o)]),e("a",v,[r("茄子"),t(o)]),T,e("a",J,[r("浮沉"),t(o)]),e("a",A,[r("Xiaofeng Wang"),t(o)]),e("a",D,[r("doodoocoder"),t(o)]),e("a",Z,[r("qingci"),t(o)]),e("a",B,[r("swwheihei"),t(o)]),e("a",H,[r("KKKKK5G"),t(o)]),K,e("a",N,[r("Jim Jin"),t(o)]),W,e("a",P,[r("MingZhuLiu"),t(o)]),e("a",S,[r("chengxiaosheng"),t(o)]),G,e("a",V,[r("tanningzhong"),t(o)]),e("a",X,[r("hctym1995"),t(o)]),e("a",E,[r("hewenyuan"),t(o)]),F,M,I,O,e("a",R,[r("along"),t(o)]),Q,e("a",U,[r("陈晓林"),t(o)]),e("a",Y,[r("CharleyWangHZ"),t(o)]),e("a",$,[r("Johnny"),t(o)]),e("a",ee,[r("DoubleX69"),t(o)]),e("a",re,[r("lawrencehj"),t(o)]),oe,te,e("a",ne,[r("hejilin"),t(o)]),e("a",ae,[r("rqb500"),t(o)]),e("a",he,[r("Alex"),t(o)]),e("a",ie,[r("Dw9"),t(o)]),se,e("a",_e,[r("haorui wang"),t(o)]),ce,e("a",le,[r("JayChen0519"),t(o)]),ge,fe,pe,e("a",me,[r("starry"),t(o)]),e("a",be,[r("mtdxc"),t(o)]),e("a",de,[r("胡刚风"),t(o)]),e("a",ue,[r("zhao85"),t(o)]),e("a",ke,[r("dreamisdream"),t(o)]),e("a",ye,[r("dingcan"),t(o)]),e("a",we,[r("Haibo Chen"),t(o)]),e("a",xe,[r("Leon"),t(o)]),e("a",qe,[r("custompal"),t(o)]),e("a",je,[r("PioLing"),t(o)]),e("a",ze,[r("KevinZang"),t(o)]),e("a",Le,[r("gongluck"),t(o)]),e("a",Ce,[r("a-ucontrol"),t(o)]),e("a",ve,[r("TalusL"),t(o)]),e("a",Te,[r("ahaooahaz"),t(o)]),e("a",Je,[r("TempoTian"),t(o)]),e("a",Ae,[r("Derek Liu"),t(o)]),e("a",De,[r("ljx0305"),t(o)]),e("a",Ze,[r("朱如洪 "),t(o)]),e("a",Be,[r("lijin"),t(o)]),e("a",He,[r("PioLing"),t(o)]),e("a",Ke,[r("BackT0TheFuture"),t(o)]),e("a",Ne,[r("perara"),t(o)]),e("a",We,[r("codeRATny"),t(o)]),e("a",Pe,[r("dengjfzh"),t(o)]),e("a",Se,[r("百鸣"),t(o)]),e("a",Ge,[r("fruit Juice"),t(o)]),e("a",Ve,[r("tbago"),t(o)]),e("a",Xe,[r("Luosh"),t(o)]),e("a",Ee,[r("linxiaoyan87"),t(o)]),e("a",Fe,[r("waken"),t(o)]),e("a",Me,[r("Deepslient"),t(o)]),e("a",Ie,[r("imp_rayjay"),t(o)]),e("a",Oe,[r("ArmstrongCN"),t(o)]),e("a",Re,[r("leibnewton"),t(o)]),e("a",Qe,[r("1002victor"),t(o)])]),Ue,e("figure",null,[e("a",Ye,[$e,t(o)]),er])])}const hr=a(_,[["render",rr],["__file","thanks.html.vue"]]);export{hr as default}; diff --git a/assets/thanks.html-uU2jemjd.js b/assets/thanks.html-bZ4iyCmp.js similarity index 98% rename from assets/thanks.html-uU2jemjd.js rename to assets/thanks.html-bZ4iyCmp.js index a402bcf..7cefb91 100644 --- a/assets/thanks.html-uU2jemjd.js +++ b/assets/thanks.html-bZ4iyCmp.js @@ -1 +1 @@ -import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as h,o as i,c as s,a as e,d as r,b as t,e as n}from"./app-BrxqtzGY.js";const l={},c=e("h2",{id:"special-thanks",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#special-thanks","aria-hidden":"true"},"#"),r(" Special Thanks")],-1),_={href:"https://github.com/ireader/media-server",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/ireader",target:"_blank",rel:"noopener noreferrer"},p=e("h2",{id:"acknowledgments",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#acknowledgments","aria-hidden":"true"},"#"),r(" Acknowledgments")],-1),f=e("p",null,"Thanks to all those who have supported this project in various ways, including but not limited to code contributions, problem feedback, and donations. The following list is not in any particular order:",-1),d={href:"https://github.com/ireader",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/gemfield",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/nanguantong2",target:"_blank",rel:"noopener noreferrer"},b={href:"https://github.com/tsingeye",target:"_blank",rel:"noopener noreferrer"},k={href:"https://github.com/chenxiaolei",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/zqsong",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/baiyfcu",target:"_blank",rel:"noopener noreferrer"},x={href:"https://github.com/3503207480",target:"_blank",rel:"noopener noreferrer"},q={href:"https://github.com/DroidChow",target:"_blank",rel:"noopener noreferrer"},j={href:"https://github.com/HuoQiShuai",target:"_blank",rel:"noopener noreferrer"},L={href:"https://github.com/ChinaCCF",target:"_blank",rel:"noopener noreferrer"},z={href:"https://github.com/JerryLinGd",target:"_blank",rel:"noopener noreferrer"},v={href:"https://www.linkingvision.com/",target:"_blank",rel:"noopener noreferrer"},C={href:"https://github.com/taotaobujue2008",target:"_blank",rel:"noopener noreferrer"},T=e("a",{href:"mailto:409257224@qq.com"},"好心情",-1),J={href:"https://github.com/MingZhuLiu",target:"_blank",rel:"noopener noreferrer"},A={href:"https://github.com/wasphin",target:"_blank",rel:"noopener noreferrer"},D={href:"https://github.com/doodoocoder",target:"_blank",rel:"noopener noreferrer"},Z={href:"https://github.com/Colibrow",target:"_blank",rel:"noopener noreferrer"},B={href:"https://github.com/swwheihei",target:"_blank",rel:"noopener noreferrer"},H={href:"https://gitee.com/kkkkk5G",target:"_blank",rel:"noopener noreferrer"},K=e("a",{href:"mailto:zhouweimin@supremind.com"},"Zhou Weimin",-1),S={href:"https://github.com/jim-king-2000",target:"_blank",rel:"noopener noreferrer"},W=e("a",{href:"mailto:392293307@qq.com"},"西瓜丶",-1),P={href:"https://github.com/MingZhuLiu",target:"_blank",rel:"noopener noreferrer"},G={href:"https://github.com/chengxiaosheng",target:"_blank",rel:"noopener noreferrer"},N=e("a",{href:"mailto:2381267071@qq.com"},"big panda",-1),V={href:"https://github.com/tanningzhong",target:"_blank",rel:"noopener noreferrer"},X={href:"https://github.com/hctym1995",target:"_blank",rel:"noopener noreferrer"},E={href:"https://gitee.com/kingyuanyuan",target:"_blank",rel:"noopener noreferrer"},F=e("a",{href:"mailto:sunhui200475@163.com"},"sunhui",-1),M=e("a",{href:"mailto:fangpengcheng@bilibili.com"},"mirs",-1),I=e("a",{href:"mailto:kevin__cheng@outlook.com"},"Kevin Cheng",-1),O=e("a",{href:"mailto:root@oopy.org"},"Liu Jiang",-1),R={href:"https://github.com/alongl",target:"_blank",rel:"noopener noreferrer"},Q=n('qingcilyg1949zhlong大裤衩droid.chow',5),U={href:"https://github.com/musicwood",target:"_blank",rel:"noopener noreferrer"},Y={href:"https://github.com/CharleyWangHZ",target:"_blank",rel:"noopener noreferrer"},$={href:"https://github.com/johzzy",target:"_blank",rel:"noopener noreferrer"},ee={href:"https://github.com/DoubleX69",target:"_blank",rel:"noopener noreferrer"},re={href:"https://github.com/lawrencehj",target:"_blank",rel:"noopener noreferrer"},oe=e("a",{href:"mailto:xyyangkun@163.com"},"yangkun",-1),te=e("a",{href:"mailto:holychaossword@hotmail.com"},"Xinghua Zhao",-1),ne={href:"https://github.com/brokensword2018",target:"_blank",rel:"noopener noreferrer"},ae={href:"https://github.com/rqb500",target:"_blank",rel:"noopener noreferrer"},he={href:"https://github.com/alexliyu7352",target:"_blank",rel:"noopener noreferrer"},ie={href:"https://github.com/Dw9",target:"_blank",rel:"noopener noreferrer"},se=n('明月惊鹊cgmhejilinalexliyu7352cgm',5),le={href:"https://github.com/HaoruiWang",target:"_blank",rel:"noopener noreferrer"},ce=e("a",{href:"mailto:joshuafc@foxmail.com"},"joshuafc",-1),_e={href:"https://github.com/JayChen0519",target:"_blank",rel:"noopener noreferrer"},ge=e("a",{href:"mailto:zuoxue@qq.com"},"zx",-1),pe=e("a",{href:"mailto:wangcker@163.com"},"wangcker",-1),fe=e("a",{href:"mailto:wp@zafu.edu.cn"},"WuPeng",-1),de={href:"https://github.com/starry",target:"_blank",rel:"noopener noreferrer"},me={href:"https://github.com/mtdxc",target:"_blank",rel:"noopener noreferrer"},ue={href:"https://github.com/hugangfeng333",target:"_blank",rel:"noopener noreferrer"},be={href:"https://github.com/zhao85",target:"_blank",rel:"noopener noreferrer"},ke={href:"https://github.com/dreamisdream",target:"_blank",rel:"noopener noreferrer"},ye={href:"https://github.com/dcan123",target:"_blank",rel:"noopener noreferrer"},we={href:"https://github.com/duiniuluantanqin",target:"_blank",rel:"noopener noreferrer"},xe={href:"https://gitee.com/leon14631",target:"_blank",rel:"noopener noreferrer"},qe={href:"https://github.com/custompal",target:"_blank",rel:"noopener noreferrer"},je={href:"https://github.com/PioLing",target:"_blank",rel:"noopener noreferrer"},Le={href:"https://github.com/ZSC714725",target:"_blank",rel:"noopener noreferrer"},ze={href:"https://github.com/gongluck",target:"_blank",rel:"noopener noreferrer"},ve={href:"https://github.com/a-ucontrol",target:"_blank",rel:"noopener noreferrer"},Ce={href:"https://github.com/TalusL",target:"_blank",rel:"noopener noreferrer"},Te={href:"https://github.com/AHAOAHA",target:"_blank",rel:"noopener noreferrer"},Je={href:"https://github.com/TempoTian",target:"_blank",rel:"noopener noreferrer"},Ae={href:"https://github.com/yjkhtddx",target:"_blank",rel:"noopener noreferrer"},De={href:"https://github.com/ljx0305",target:"_blank",rel:"noopener noreferrer"},Ze={href:"https://github.com/zhu410289616",target:"_blank",rel:"noopener noreferrer"},Be={href:"https://github.com/1461521844lijin",target:"_blank",rel:"noopener noreferrer"},He={href:"https://github.com/PioLing",target:"_blank",rel:"noopener noreferrer"},Ke={href:"https://github.com/BackT0TheFuture",target:"_blank",rel:"noopener noreferrer"},Se={href:"https://github.com/perara",target:"_blank",rel:"noopener noreferrer"},We={href:"https://github.com/codeRATny",target:"_blank",rel:"noopener noreferrer"},Pe={href:"https://github.com/dengjfzh",target:"_blank",rel:"noopener noreferrer"},Ge={href:"https://github.com/ixingqiao",target:"_blank",rel:"noopener noreferrer"},Ne={href:"https://github.com/xuandu",target:"_blank",rel:"noopener noreferrer"},Ve={href:"https://github.com/tbago",target:"_blank",rel:"noopener noreferrer"},Xe={href:"https://github.com/Luosh",target:"_blank",rel:"noopener noreferrer"},Ee={href:"https://github.com/linxiaoyan",target:"_blank",rel:"noopener noreferrer"},Fe={href:"https://github.com/mc373906408",target:"_blank",rel:"noopener noreferrer"},Me={href:"https://github.com/Deepslient",target:"_blank",rel:"noopener noreferrer"},Ie=e("p",null,"Also thank to JetBrains for their support for open source project, we developed and debugged zlmediakit with CLion:",-1),Oe={href:"https://jb.gg/OpenSourceSupport",target:"_blank",rel:"noopener noreferrer"},Re=e("img",{src:"https://resources.jetbrains.com/storage/products/company/brand/logos/CLion.svg",alt:"JetBrains",tabindex:"0",loading:"lazy"},null,-1),Qe=e("figcaption",null,"JetBrains",-1);function Ue(Ye,$e){const o=h("ExternalLinkIcon");return i(),s("div",null,[c,e("p",null,[r("This project uses the "),e("a",_,[r("media-server"),t(o)]),r(" library developed by "),e("a",g,[r("Lao Chen"),t(o)]),r(". The reuse and de-multiplexing of ts/fmp4/mp4/ps container formats in this project depend on the media-server library. Lao Chen has provided invaluable help and support multiple times in implementing many functions of this project, and we would like to express our sincere gratitude to him!")]),p,f,e("p",null,[e("a",d,[r("老陈"),t(o)]),e("a",m,[r("Gemfield"),t(o)]),e("a",u,[r("南冠彤"),t(o)]),e("a",b,[r("凹凸慢"),t(o)]),e("a",k,[r("chenxiaolei"),t(o)]),e("a",y,[r("史前小虫"),t(o)]),e("a",w,[r("清涩绿茶"),t(o)]),e("a",x,[r("3503207480"),t(o)]),e("a",q,[r("DroidChow"),t(o)]),e("a",j,[r("阿塞"),t(o)]),e("a",L,[r("火宣"),t(o)]),e("a",z,[r("γ 瑞 γ ミ"),t(o)]),e("a",v,[r("linkingvision"),t(o)]),e("a",C,[r("茄子"),t(o)]),T,e("a",J,[r("浮沉"),t(o)]),e("a",A,[r("Xiaofeng Wang"),t(o)]),e("a",D,[r("doodoocoder"),t(o)]),e("a",Z,[r("qingci"),t(o)]),e("a",B,[r("swwheihei"),t(o)]),e("a",H,[r("KKKKK5G"),t(o)]),K,e("a",S,[r("Jim Jin"),t(o)]),W,e("a",P,[r("MingZhuLiu"),t(o)]),e("a",G,[r("chengxiaosheng"),t(o)]),N,e("a",V,[r("tanningzhong"),t(o)]),e("a",X,[r("hctym1995"),t(o)]),e("a",E,[r("hewenyuan"),t(o)]),F,M,I,O,e("a",R,[r("along"),t(o)]),Q,e("a",U,[r("陈晓林"),t(o)]),e("a",Y,[r("CharleyWangHZ"),t(o)]),e("a",$,[r("Johnny"),t(o)]),e("a",ee,[r("DoubleX69"),t(o)]),e("a",re,[r("lawrencehj"),t(o)]),oe,te,e("a",ne,[r("hejilin"),t(o)]),e("a",ae,[r("rqb500"),t(o)]),e("a",he,[r("Alex"),t(o)]),e("a",ie,[r("Dw9"),t(o)]),se,e("a",le,[r("haorui wang"),t(o)]),ce,e("a",_e,[r("JayChen0519"),t(o)]),ge,pe,fe,e("a",de,[r("starry"),t(o)]),e("a",me,[r("mtdxc"),t(o)]),e("a",ue,[r("胡刚风"),t(o)]),e("a",be,[r("zhao85"),t(o)]),e("a",ke,[r("dreamisdream"),t(o)]),e("a",ye,[r("dingcan"),t(o)]),e("a",we,[r("Haibo Chen"),t(o)]),e("a",xe,[r("Leon"),t(o)]),e("a",qe,[r("custompal"),t(o)]),e("a",je,[r("PioLing"),t(o)]),e("a",Le,[r("KevinZang"),t(o)]),e("a",ze,[r("gongluck"),t(o)]),e("a",ve,[r("a-ucontrol"),t(o)]),e("a",Ce,[r("TalusL"),t(o)]),e("a",Te,[r("ahaooahaz"),t(o)]),e("a",Je,[r("TempoTian"),t(o)]),e("a",Ae,[r("Derek Liu"),t(o)]),e("a",De,[r("ljx0305"),t(o)]),e("a",Ze,[r("朱如洪 "),t(o)]),e("a",Be,[r("lijin"),t(o)]),e("a",He,[r("PioLing"),t(o)]),e("a",Ke,[r("BackT0TheFuture"),t(o)]),e("a",Se,[r("perara"),t(o)]),e("a",We,[r("codeRATny"),t(o)]),e("a",Pe,[r("dengjfzh"),t(o)]),e("a",Ge,[r("百鸣"),t(o)]),e("a",Ne,[r("fruit Juice"),t(o)]),e("a",Ve,[r("tbago"),t(o)]),e("a",Xe,[r("Luosh"),t(o)]),e("a",Ee,[r("linxiaoyan87"),t(o)]),e("a",Fe,[r("waken"),t(o)]),e("a",Me,[r("Deepslient"),t(o)])]),Ie,e("figure",null,[e("a",Oe,[Re,t(o)]),Qe])])}const or=a(l,[["render",Ue],["__file","thanks.html.vue"]]);export{or as default}; +import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as h,o as i,c as s,a as e,d as r,b as t,e as n}from"./app-oTlYPy8h.js";const l={},c=e("h2",{id:"special-thanks",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#special-thanks","aria-hidden":"true"},"#"),r(" Special Thanks")],-1),_={href:"https://github.com/ireader/media-server",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/ireader",target:"_blank",rel:"noopener noreferrer"},p=e("h2",{id:"acknowledgments",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#acknowledgments","aria-hidden":"true"},"#"),r(" Acknowledgments")],-1),f=e("p",null,"Thanks to all those who have supported this project in various ways, including but not limited to code contributions, problem feedback, and donations. The following list is not in any particular order:",-1),d={href:"https://github.com/ireader",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/gemfield",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/nanguantong2",target:"_blank",rel:"noopener noreferrer"},b={href:"https://github.com/tsingeye",target:"_blank",rel:"noopener noreferrer"},k={href:"https://github.com/chenxiaolei",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/zqsong",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/baiyfcu",target:"_blank",rel:"noopener noreferrer"},x={href:"https://github.com/3503207480",target:"_blank",rel:"noopener noreferrer"},q={href:"https://github.com/DroidChow",target:"_blank",rel:"noopener noreferrer"},j={href:"https://github.com/HuoQiShuai",target:"_blank",rel:"noopener noreferrer"},L={href:"https://github.com/ChinaCCF",target:"_blank",rel:"noopener noreferrer"},z={href:"https://github.com/JerryLinGd",target:"_blank",rel:"noopener noreferrer"},v={href:"https://www.linkingvision.com/",target:"_blank",rel:"noopener noreferrer"},C={href:"https://github.com/taotaobujue2008",target:"_blank",rel:"noopener noreferrer"},T=e("a",{href:"mailto:409257224@qq.com"},"好心情",-1),J={href:"https://github.com/MingZhuLiu",target:"_blank",rel:"noopener noreferrer"},A={href:"https://github.com/wasphin",target:"_blank",rel:"noopener noreferrer"},D={href:"https://github.com/doodoocoder",target:"_blank",rel:"noopener noreferrer"},Z={href:"https://github.com/Colibrow",target:"_blank",rel:"noopener noreferrer"},B={href:"https://github.com/swwheihei",target:"_blank",rel:"noopener noreferrer"},H={href:"https://gitee.com/kkkkk5G",target:"_blank",rel:"noopener noreferrer"},K=e("a",{href:"mailto:zhouweimin@supremind.com"},"Zhou Weimin",-1),S={href:"https://github.com/jim-king-2000",target:"_blank",rel:"noopener noreferrer"},W=e("a",{href:"mailto:392293307@qq.com"},"西瓜丶",-1),P={href:"https://github.com/MingZhuLiu",target:"_blank",rel:"noopener noreferrer"},G={href:"https://github.com/chengxiaosheng",target:"_blank",rel:"noopener noreferrer"},N=e("a",{href:"mailto:2381267071@qq.com"},"big panda",-1),V={href:"https://github.com/tanningzhong",target:"_blank",rel:"noopener noreferrer"},X={href:"https://github.com/hctym1995",target:"_blank",rel:"noopener noreferrer"},E={href:"https://gitee.com/kingyuanyuan",target:"_blank",rel:"noopener noreferrer"},F=e("a",{href:"mailto:sunhui200475@163.com"},"sunhui",-1),M=e("a",{href:"mailto:fangpengcheng@bilibili.com"},"mirs",-1),I=e("a",{href:"mailto:kevin__cheng@outlook.com"},"Kevin Cheng",-1),O=e("a",{href:"mailto:root@oopy.org"},"Liu Jiang",-1),R={href:"https://github.com/alongl",target:"_blank",rel:"noopener noreferrer"},Q=n('qingcilyg1949zhlong大裤衩droid.chow',5),U={href:"https://github.com/musicwood",target:"_blank",rel:"noopener noreferrer"},Y={href:"https://github.com/CharleyWangHZ",target:"_blank",rel:"noopener noreferrer"},$={href:"https://github.com/johzzy",target:"_blank",rel:"noopener noreferrer"},ee={href:"https://github.com/DoubleX69",target:"_blank",rel:"noopener noreferrer"},re={href:"https://github.com/lawrencehj",target:"_blank",rel:"noopener noreferrer"},oe=e("a",{href:"mailto:xyyangkun@163.com"},"yangkun",-1),te=e("a",{href:"mailto:holychaossword@hotmail.com"},"Xinghua Zhao",-1),ne={href:"https://github.com/brokensword2018",target:"_blank",rel:"noopener noreferrer"},ae={href:"https://github.com/rqb500",target:"_blank",rel:"noopener noreferrer"},he={href:"https://github.com/alexliyu7352",target:"_blank",rel:"noopener noreferrer"},ie={href:"https://github.com/Dw9",target:"_blank",rel:"noopener noreferrer"},se=n('明月惊鹊cgmhejilinalexliyu7352cgm',5),le={href:"https://github.com/HaoruiWang",target:"_blank",rel:"noopener noreferrer"},ce=e("a",{href:"mailto:joshuafc@foxmail.com"},"joshuafc",-1),_e={href:"https://github.com/JayChen0519",target:"_blank",rel:"noopener noreferrer"},ge=e("a",{href:"mailto:zuoxue@qq.com"},"zx",-1),pe=e("a",{href:"mailto:wangcker@163.com"},"wangcker",-1),fe=e("a",{href:"mailto:wp@zafu.edu.cn"},"WuPeng",-1),de={href:"https://github.com/starry",target:"_blank",rel:"noopener noreferrer"},me={href:"https://github.com/mtdxc",target:"_blank",rel:"noopener noreferrer"},ue={href:"https://github.com/hugangfeng333",target:"_blank",rel:"noopener noreferrer"},be={href:"https://github.com/zhao85",target:"_blank",rel:"noopener noreferrer"},ke={href:"https://github.com/dreamisdream",target:"_blank",rel:"noopener noreferrer"},ye={href:"https://github.com/dcan123",target:"_blank",rel:"noopener noreferrer"},we={href:"https://github.com/duiniuluantanqin",target:"_blank",rel:"noopener noreferrer"},xe={href:"https://gitee.com/leon14631",target:"_blank",rel:"noopener noreferrer"},qe={href:"https://github.com/custompal",target:"_blank",rel:"noopener noreferrer"},je={href:"https://github.com/PioLing",target:"_blank",rel:"noopener noreferrer"},Le={href:"https://github.com/ZSC714725",target:"_blank",rel:"noopener noreferrer"},ze={href:"https://github.com/gongluck",target:"_blank",rel:"noopener noreferrer"},ve={href:"https://github.com/a-ucontrol",target:"_blank",rel:"noopener noreferrer"},Ce={href:"https://github.com/TalusL",target:"_blank",rel:"noopener noreferrer"},Te={href:"https://github.com/AHAOAHA",target:"_blank",rel:"noopener noreferrer"},Je={href:"https://github.com/TempoTian",target:"_blank",rel:"noopener noreferrer"},Ae={href:"https://github.com/yjkhtddx",target:"_blank",rel:"noopener noreferrer"},De={href:"https://github.com/ljx0305",target:"_blank",rel:"noopener noreferrer"},Ze={href:"https://github.com/zhu410289616",target:"_blank",rel:"noopener noreferrer"},Be={href:"https://github.com/1461521844lijin",target:"_blank",rel:"noopener noreferrer"},He={href:"https://github.com/PioLing",target:"_blank",rel:"noopener noreferrer"},Ke={href:"https://github.com/BackT0TheFuture",target:"_blank",rel:"noopener noreferrer"},Se={href:"https://github.com/perara",target:"_blank",rel:"noopener noreferrer"},We={href:"https://github.com/codeRATny",target:"_blank",rel:"noopener noreferrer"},Pe={href:"https://github.com/dengjfzh",target:"_blank",rel:"noopener noreferrer"},Ge={href:"https://github.com/ixingqiao",target:"_blank",rel:"noopener noreferrer"},Ne={href:"https://github.com/xuandu",target:"_blank",rel:"noopener noreferrer"},Ve={href:"https://github.com/tbago",target:"_blank",rel:"noopener noreferrer"},Xe={href:"https://github.com/Luosh",target:"_blank",rel:"noopener noreferrer"},Ee={href:"https://github.com/linxiaoyan",target:"_blank",rel:"noopener noreferrer"},Fe={href:"https://github.com/mc373906408",target:"_blank",rel:"noopener noreferrer"},Me={href:"https://github.com/Deepslient",target:"_blank",rel:"noopener noreferrer"},Ie=e("p",null,"Also thank to JetBrains for their support for open source project, we developed and debugged zlmediakit with CLion:",-1),Oe={href:"https://jb.gg/OpenSourceSupport",target:"_blank",rel:"noopener noreferrer"},Re=e("img",{src:"https://resources.jetbrains.com/storage/products/company/brand/logos/CLion.svg",alt:"JetBrains",tabindex:"0",loading:"lazy"},null,-1),Qe=e("figcaption",null,"JetBrains",-1);function Ue(Ye,$e){const o=h("ExternalLinkIcon");return i(),s("div",null,[c,e("p",null,[r("This project uses the "),e("a",_,[r("media-server"),t(o)]),r(" library developed by "),e("a",g,[r("Lao Chen"),t(o)]),r(". The reuse and de-multiplexing of ts/fmp4/mp4/ps container formats in this project depend on the media-server library. Lao Chen has provided invaluable help and support multiple times in implementing many functions of this project, and we would like to express our sincere gratitude to him!")]),p,f,e("p",null,[e("a",d,[r("老陈"),t(o)]),e("a",m,[r("Gemfield"),t(o)]),e("a",u,[r("南冠彤"),t(o)]),e("a",b,[r("凹凸慢"),t(o)]),e("a",k,[r("chenxiaolei"),t(o)]),e("a",y,[r("史前小虫"),t(o)]),e("a",w,[r("清涩绿茶"),t(o)]),e("a",x,[r("3503207480"),t(o)]),e("a",q,[r("DroidChow"),t(o)]),e("a",j,[r("阿塞"),t(o)]),e("a",L,[r("火宣"),t(o)]),e("a",z,[r("γ 瑞 γ ミ"),t(o)]),e("a",v,[r("linkingvision"),t(o)]),e("a",C,[r("茄子"),t(o)]),T,e("a",J,[r("浮沉"),t(o)]),e("a",A,[r("Xiaofeng Wang"),t(o)]),e("a",D,[r("doodoocoder"),t(o)]),e("a",Z,[r("qingci"),t(o)]),e("a",B,[r("swwheihei"),t(o)]),e("a",H,[r("KKKKK5G"),t(o)]),K,e("a",S,[r("Jim Jin"),t(o)]),W,e("a",P,[r("MingZhuLiu"),t(o)]),e("a",G,[r("chengxiaosheng"),t(o)]),N,e("a",V,[r("tanningzhong"),t(o)]),e("a",X,[r("hctym1995"),t(o)]),e("a",E,[r("hewenyuan"),t(o)]),F,M,I,O,e("a",R,[r("along"),t(o)]),Q,e("a",U,[r("陈晓林"),t(o)]),e("a",Y,[r("CharleyWangHZ"),t(o)]),e("a",$,[r("Johnny"),t(o)]),e("a",ee,[r("DoubleX69"),t(o)]),e("a",re,[r("lawrencehj"),t(o)]),oe,te,e("a",ne,[r("hejilin"),t(o)]),e("a",ae,[r("rqb500"),t(o)]),e("a",he,[r("Alex"),t(o)]),e("a",ie,[r("Dw9"),t(o)]),se,e("a",le,[r("haorui wang"),t(o)]),ce,e("a",_e,[r("JayChen0519"),t(o)]),ge,pe,fe,e("a",de,[r("starry"),t(o)]),e("a",me,[r("mtdxc"),t(o)]),e("a",ue,[r("胡刚风"),t(o)]),e("a",be,[r("zhao85"),t(o)]),e("a",ke,[r("dreamisdream"),t(o)]),e("a",ye,[r("dingcan"),t(o)]),e("a",we,[r("Haibo Chen"),t(o)]),e("a",xe,[r("Leon"),t(o)]),e("a",qe,[r("custompal"),t(o)]),e("a",je,[r("PioLing"),t(o)]),e("a",Le,[r("KevinZang"),t(o)]),e("a",ze,[r("gongluck"),t(o)]),e("a",ve,[r("a-ucontrol"),t(o)]),e("a",Ce,[r("TalusL"),t(o)]),e("a",Te,[r("ahaooahaz"),t(o)]),e("a",Je,[r("TempoTian"),t(o)]),e("a",Ae,[r("Derek Liu"),t(o)]),e("a",De,[r("ljx0305"),t(o)]),e("a",Ze,[r("朱如洪 "),t(o)]),e("a",Be,[r("lijin"),t(o)]),e("a",He,[r("PioLing"),t(o)]),e("a",Ke,[r("BackT0TheFuture"),t(o)]),e("a",Se,[r("perara"),t(o)]),e("a",We,[r("codeRATny"),t(o)]),e("a",Pe,[r("dengjfzh"),t(o)]),e("a",Ge,[r("百鸣"),t(o)]),e("a",Ne,[r("fruit Juice"),t(o)]),e("a",Ve,[r("tbago"),t(o)]),e("a",Xe,[r("Luosh"),t(o)]),e("a",Ee,[r("linxiaoyan87"),t(o)]),e("a",Fe,[r("waken"),t(o)]),e("a",Me,[r("Deepslient"),t(o)])]),Ie,e("figure",null,[e("a",Oe,[Re,t(o)]),Qe])])}const or=a(l,[["render",Ue],["__file","thanks.html.vue"]]);export{or as default}; diff --git a/assets/the_nature_of_live_broadcast_delay.html-KHnxiXxs.js b/assets/the_nature_of_live_broadcast_delay.html-9a3MrQ9p.js similarity index 97% rename from assets/the_nature_of_live_broadcast_delay.html-KHnxiXxs.js rename to assets/the_nature_of_live_broadcast_delay.html-9a3MrQ9p.js index fe9c056..a60a173 100644 --- a/assets/the_nature_of_live_broadcast_delay.html-KHnxiXxs.js +++ b/assets/the_nature_of_live_broadcast_delay.html-9a3MrQ9p.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as t,c as a,e as o}from"./app-BrxqtzGY.js";const i={},s=o("
                    1. Live streaming is the representation of ongoing events, generating data as time passes.

                    2. So why is there a delay in live streaming? The essence lies in the fact that, in order to enhance the user experience, live streaming caches a portion of historical data (such as using GOP caching to improve video loading speed).

                    3. Does this mean that without GOP caching, there would be no delay? The answer is incorrect because not only does your server have a cache, but the player also has its own cache. There is a time difference between when the player clicks "Play" and when the video appears. Why does the player do this? The reason is to improve the smoothness of playback by implementing caching. We can consider the transmission of live streaming data to the player as a pipeline. Just like a pipeline can have varying water flow rates and even interruptions, if we don't use a "bucket" to buffer it, the video may stutter.

                    4. Let's assume we remove all the caches from both the server and the player. Does that mean there would be no delay? Too young, too simple! Remember, caches can never be completely eliminated. Let's say the network is a water pipe, and we block it for 5 seconds before releasing it. Will the data from those 5 seconds disappear? No! Live streaming is an ongoing event, continuously generating "water flow." It will cause the pipe to expand. During those 5 seconds, the player has to wait for the data, and once the network is restored, the player will receive a surge of data from those 5 seconds. Then, the continuous flow of live streaming data resumes. As a result, the player ends up with an extra 5 seconds of data, which can either be discarded or played back at an accelerated speed. Otherwise, it will never magically disappear.

                    5. Unfortunately, I have to tell you that almost all standard players do not directly discard data or accelerate playback speed.

                    6. Now, an observant friend may ask, why does UDP live streaming have lower latency? The reason is that UDP, as a "pipe," has many holes, allowing excessive water to leak out. The result is direct data loss, causing the player to experience screen glitches.

                    7. The expansion of the TCP pipeline can be understood as an increase in network link buffering (router buffering). What if there is too much water accumulation? First, it fills up the network link buffer, then the sending-side socket buffer, and then the sending-side application logic buffer. If there is still not enough space, I'm sorry, but the server has no choice but to sever the TCP connection.

                    ",1),n=[s];function r(l,h){return t(),a("div",null,n)}const p=e(i,[["render",r],["__file","the_nature_of_live_broadcast_delay.html.vue"]]);export{p as default}; +import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as t,c as a,e as o}from"./app-oTlYPy8h.js";const i={},s=o("
                    1. Live streaming is the representation of ongoing events, generating data as time passes.

                    2. So why is there a delay in live streaming? The essence lies in the fact that, in order to enhance the user experience, live streaming caches a portion of historical data (such as using GOP caching to improve video loading speed).

                    3. Does this mean that without GOP caching, there would be no delay? The answer is incorrect because not only does your server have a cache, but the player also has its own cache. There is a time difference between when the player clicks "Play" and when the video appears. Why does the player do this? The reason is to improve the smoothness of playback by implementing caching. We can consider the transmission of live streaming data to the player as a pipeline. Just like a pipeline can have varying water flow rates and even interruptions, if we don't use a "bucket" to buffer it, the video may stutter.

                    4. Let's assume we remove all the caches from both the server and the player. Does that mean there would be no delay? Too young, too simple! Remember, caches can never be completely eliminated. Let's say the network is a water pipe, and we block it for 5 seconds before releasing it. Will the data from those 5 seconds disappear? No! Live streaming is an ongoing event, continuously generating "water flow." It will cause the pipe to expand. During those 5 seconds, the player has to wait for the data, and once the network is restored, the player will receive a surge of data from those 5 seconds. Then, the continuous flow of live streaming data resumes. As a result, the player ends up with an extra 5 seconds of data, which can either be discarded or played back at an accelerated speed. Otherwise, it will never magically disappear.

                    5. Unfortunately, I have to tell you that almost all standard players do not directly discard data or accelerate playback speed.

                    6. Now, an observant friend may ask, why does UDP live streaming have lower latency? The reason is that UDP, as a "pipe," has many holes, allowing excessive water to leak out. The result is direct data loss, causing the player to experience screen glitches.

                    7. The expansion of the TCP pipeline can be understood as an increase in network link buffering (router buffering). What if there is too much water accumulation? First, it fills up the network link buffer, then the sending-side socket buffer, and then the sending-side application logic buffer. If there is still not enough space, I'm sorry, but the server has no choice but to sever the TCP connection.

                    ",1),n=[s];function r(l,h){return t(),a("div",null,n)}const p=e(i,[["render",r],["__file","the_nature_of_live_broadcast_delay.html.vue"]]);export{p as default}; diff --git a/assets/the_nature_of_live_broadcast_delay.html-vfCX1bgp.js b/assets/the_nature_of_live_broadcast_delay.html-wpUMkFJz.js similarity index 97% rename from assets/the_nature_of_live_broadcast_delay.html-vfCX1bgp.js rename to assets/the_nature_of_live_broadcast_delay.html-wpUMkFJz.js index 56e6002..4d9b4c9 100644 --- a/assets/the_nature_of_live_broadcast_delay.html-vfCX1bgp.js +++ b/assets/the_nature_of_live_broadcast_delay.html-wpUMkFJz.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o,c as t,e as c}from"./app-BrxqtzGY.js";const l={},i=c("
                    • 1、所谓直播就是正在发生的事情,流逝多少时间产生多少数据。

                    • 2、那么直播为什么会有延时?本质是,直播为了提升体验,会给缓存一部分历史数据(比如说为了提高画面打开速度做 GOP 缓存)。

                    • 3、那是不是没有 GOP 缓存就不会有延时呢?答案是错误的,因为不仅仅你的服务器有缓存,播放器也有缓存。播放器在点击开始播放出现画面会有时间差,那么为什么播放器要这么做?原因是播放器为了提高播放流畅度,做了缓存。直播数据传到播放器我们可以认为是一根水管,这跟水管水量时大时小,有时干脆断流,如果不用缓存一下,那么画面会卡顿。

                    • 4、假定我们削掉服务器和播放器所有的缓存,那么是不是就没有延时呢?Too yong too simple!记住,缓存是永远无法消灭的。假定网络是根水管,我们掐住它 5 秒,然后再放开手,那么这 5 秒的数据会消失吗?并不会!直播是正在发生的事情,它会源源不断产生水量,会把水管涨粗,在这 5 秒内,播放器就得干等数据,等网络恢复了,那么这 5 秒的数据会一股脑怼给播放器,然后又是接着的源源不断过来的直播数据,这样播放器就多了 5 秒的数据,而这多出来 5 秒的数据要么直接丢弃要么加快播放速度,否则永远都不会凭空消灭掉。

                    • 5、很遗憾的告诉你,几乎所有标准播放器,都不会直接丢数据或加快播放速度。

                    • 6、那细心的小伙伴会问我,为什么 UDP 直播延时更低?原因是 UDP 这根管子上有很多破洞,水量太大了直接漏了,表现形式就是数据直接丢了,那么播放器就得花屏了。

                    • 7、TCP 水管涨粗可以理解为网络链路缓存的增加(路由器缓存增加),如果滞留的水量太大了怎么办?那么先是撑满网络链路缓存,然后撑满发送端 Socket 缓存,然后撑满发送端应用逻辑缓存,如果还放不下,那么对不起,服务器只能掐断 TCP 了。

                    ",1),_=[i];function r(d,s){return o(),t("div",null,_)}const a=e(l,[["render",r],["__file","the_nature_of_live_broadcast_delay.html.vue"]]);export{a as default}; +import{_ as e}from"./plugin-vue_export-helper-x3n3nnut.js";import{o,c as t,e as c}from"./app-oTlYPy8h.js";const l={},i=c("
                    • 1、所谓直播就是正在发生的事情,流逝多少时间产生多少数据。

                    • 2、那么直播为什么会有延时?本质是,直播为了提升体验,会给缓存一部分历史数据(比如说为了提高画面打开速度做 GOP 缓存)。

                    • 3、那是不是没有 GOP 缓存就不会有延时呢?答案是错误的,因为不仅仅你的服务器有缓存,播放器也有缓存。播放器在点击开始播放出现画面会有时间差,那么为什么播放器要这么做?原因是播放器为了提高播放流畅度,做了缓存。直播数据传到播放器我们可以认为是一根水管,这跟水管水量时大时小,有时干脆断流,如果不用缓存一下,那么画面会卡顿。

                    • 4、假定我们削掉服务器和播放器所有的缓存,那么是不是就没有延时呢?Too yong too simple!记住,缓存是永远无法消灭的。假定网络是根水管,我们掐住它 5 秒,然后再放开手,那么这 5 秒的数据会消失吗?并不会!直播是正在发生的事情,它会源源不断产生水量,会把水管涨粗,在这 5 秒内,播放器就得干等数据,等网络恢复了,那么这 5 秒的数据会一股脑怼给播放器,然后又是接着的源源不断过来的直播数据,这样播放器就多了 5 秒的数据,而这多出来 5 秒的数据要么直接丢弃要么加快播放速度,否则永远都不会凭空消灭掉。

                    • 5、很遗憾的告诉你,几乎所有标准播放器,都不会直接丢数据或加快播放速度。

                    • 6、那细心的小伙伴会问我,为什么 UDP 直播延时更低?原因是 UDP 这根管子上有很多破洞,水量太大了直接漏了,表现形式就是数据直接丢了,那么播放器就得花屏了。

                    • 7、TCP 水管涨粗可以理解为网络链路缓存的增加(路由器缓存增加),如果滞留的水量太大了怎么办?那么先是撑满网络链路缓存,然后撑满发送端 Socket 缓存,然后撑满发送端应用逻辑缓存,如果还放不下,那么对不起,服务器只能掐断 TCP 了。

                    ",1),_=[i];function r(d,s){return o(),t("div",null,_)}const a=e(l,[["render",r],["__file","the_nature_of_live_broadcast_delay.html.vue"]]);export{a as default}; diff --git a/assets/timeline-definition-732a2638-SVdJN6QQ.js b/assets/timeline-definition-732a2638-sTxw8mS_.js similarity index 99% rename from assets/timeline-definition-732a2638-SVdJN6QQ.js rename to assets/timeline-definition-732a2638-sTxw8mS_.js index d2d6e4f..bb9d445 100644 --- a/assets/timeline-definition-732a2638-SVdJN6QQ.js +++ b/assets/timeline-definition-732a2638-sTxw8mS_.js @@ -1,4 +1,4 @@ -import{b3 as ft,z as gt,c as mt,l as E,h as G,t as xt,b4 as bt,b5 as _t,b6 as kt}from"./mermaid.core-zy7cM8l9.js";import{a as D}from"./arc-kFrifBKJ.js";import"./app-BrxqtzGY.js";import"./path-aUcfwwLI.js";var K=function(){var n=function(g,i,r,c){for(r=r||{},c=g.length;c--;r[g[c]]=i);return r},t=[6,8,10,11,12,14,16,17,20,21],e=[1,9],a=[1,10],s=[1,11],h=[1,12],l=[1,13],p=[1,16],y=[1,17],f={trace:function(){},yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:function(i,r,c,d,u,o,$){var x=o.length-1;switch(u){case 1:return o[x-1];case 2:this.$=[];break;case 3:o[x-1].push(o[x]),this.$=o[x-1];break;case 4:case 5:this.$=o[x];break;case 6:case 7:this.$=[];break;case 8:d.getCommonDb().setDiagramTitle(o[x].substr(6)),this.$=o[x].substr(6);break;case 9:this.$=o[x].trim(),d.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=o[x].trim(),d.getCommonDb().setAccDescription(this.$);break;case 12:d.addSection(o[x].substr(8)),this.$=o[x].substr(8);break;case 15:d.addTask(o[x],0,""),this.$=o[x];break;case 16:d.addEvent(o[x].substr(2)),this.$=o[x];break}},table:[{3:1,4:[1,2]},{1:[3]},n(t,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:e,12:a,14:s,16:h,17:l,18:14,19:15,20:p,21:y},n(t,[2,7],{1:[2,1]}),n(t,[2,3]),{9:18,11:e,12:a,14:s,16:h,17:l,18:14,19:15,20:p,21:y},n(t,[2,5]),n(t,[2,6]),n(t,[2,8]),{13:[1,19]},{15:[1,20]},n(t,[2,11]),n(t,[2,12]),n(t,[2,13]),n(t,[2,14]),n(t,[2,15]),n(t,[2,16]),n(t,[2,4]),n(t,[2,9]),n(t,[2,10])],defaultActions:{},parseError:function(i,r){if(r.recoverable)this.trace(i);else{var c=new Error(i);throw c.hash=r,c}},parse:function(i){var r=this,c=[0],d=[],u=[null],o=[],$=this.table,x="",T=0,W=0,C=2,A=1,B=o.slice.call(arguments,1),k=Object.create(this.lexer),w={yy:{}};for(var v in this.yy)Object.prototype.hasOwnProperty.call(this.yy,v)&&(w.yy[v]=this.yy[v]);k.setInput(i,w.yy),w.yy.lexer=k,w.yy.parser=this,typeof k.yylloc>"u"&&(k.yylloc={});var I=k.yylloc;o.push(I);var P=k.options&&k.options.ranges;typeof w.yy.parseError=="function"?this.parseError=w.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function z(){var M;return M=d.pop()||k.lex()||A,typeof M!="number"&&(M instanceof Array&&(d=M,M=d.pop()),M=r.symbols_[M]||M),M}for(var _,L,S,Z,R={},O,N,Y,j;;){if(L=c[c.length-1],this.defaultActions[L]?S=this.defaultActions[L]:((_===null||typeof _>"u")&&(_=z()),S=$[L]&&$[L][_]),typeof S>"u"||!S.length||!S[0]){var J="";j=[];for(O in $[L])this.terminals_[O]&&O>C&&j.push("'"+this.terminals_[O]+"'");k.showPosition?J="Parse error on line "+(T+1)+`: +import{b3 as ft,z as gt,c as mt,l as E,h as G,t as xt,b4 as bt,b5 as _t,b6 as kt}from"./mermaid.core-QJnSHCal.js";import{a as D}from"./arc-upp1iHW0.js";import"./app-oTlYPy8h.js";import"./path-aUcfwwLI.js";var K=function(){var n=function(g,i,r,c){for(r=r||{},c=g.length;c--;r[g[c]]=i);return r},t=[6,8,10,11,12,14,16,17,20,21],e=[1,9],a=[1,10],s=[1,11],h=[1,12],l=[1,13],p=[1,16],y=[1,17],f={trace:function(){},yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:function(i,r,c,d,u,o,$){var x=o.length-1;switch(u){case 1:return o[x-1];case 2:this.$=[];break;case 3:o[x-1].push(o[x]),this.$=o[x-1];break;case 4:case 5:this.$=o[x];break;case 6:case 7:this.$=[];break;case 8:d.getCommonDb().setDiagramTitle(o[x].substr(6)),this.$=o[x].substr(6);break;case 9:this.$=o[x].trim(),d.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=o[x].trim(),d.getCommonDb().setAccDescription(this.$);break;case 12:d.addSection(o[x].substr(8)),this.$=o[x].substr(8);break;case 15:d.addTask(o[x],0,""),this.$=o[x];break;case 16:d.addEvent(o[x].substr(2)),this.$=o[x];break}},table:[{3:1,4:[1,2]},{1:[3]},n(t,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:e,12:a,14:s,16:h,17:l,18:14,19:15,20:p,21:y},n(t,[2,7],{1:[2,1]}),n(t,[2,3]),{9:18,11:e,12:a,14:s,16:h,17:l,18:14,19:15,20:p,21:y},n(t,[2,5]),n(t,[2,6]),n(t,[2,8]),{13:[1,19]},{15:[1,20]},n(t,[2,11]),n(t,[2,12]),n(t,[2,13]),n(t,[2,14]),n(t,[2,15]),n(t,[2,16]),n(t,[2,4]),n(t,[2,9]),n(t,[2,10])],defaultActions:{},parseError:function(i,r){if(r.recoverable)this.trace(i);else{var c=new Error(i);throw c.hash=r,c}},parse:function(i){var r=this,c=[0],d=[],u=[null],o=[],$=this.table,x="",T=0,W=0,C=2,A=1,B=o.slice.call(arguments,1),k=Object.create(this.lexer),w={yy:{}};for(var v in this.yy)Object.prototype.hasOwnProperty.call(this.yy,v)&&(w.yy[v]=this.yy[v]);k.setInput(i,w.yy),w.yy.lexer=k,w.yy.parser=this,typeof k.yylloc>"u"&&(k.yylloc={});var I=k.yylloc;o.push(I);var P=k.options&&k.options.ranges;typeof w.yy.parseError=="function"?this.parseError=w.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function z(){var M;return M=d.pop()||k.lex()||A,typeof M!="number"&&(M instanceof Array&&(d=M,M=d.pop()),M=r.symbols_[M]||M),M}for(var _,L,S,Z,R={},O,N,Y,j;;){if(L=c[c.length-1],this.defaultActions[L]?S=this.defaultActions[L]:((_===null||typeof _>"u")&&(_=z()),S=$[L]&&$[L][_]),typeof S>"u"||!S.length||!S[0]){var J="";j=[];for(O in $[L])this.terminals_[O]&&O>C&&j.push("'"+this.terminals_[O]+"'");k.showPosition?J="Parse error on line "+(T+1)+`: `+k.showPosition()+` Expecting `+j.join(", ")+", got '"+(this.terminals_[_]||_)+"'":J="Parse error on line "+(T+1)+": Unexpected "+(_==A?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(J,{text:k.match,token:this.terminals_[_]||_,line:k.yylineno,loc:I,expected:j})}if(S[0]instanceof Array&&S.length>1)throw new Error("Parse Error: multiple actions possible at state: "+L+", token: "+_);switch(S[0]){case 1:c.push(_),u.push(k.yytext),o.push(k.yylloc),c.push(S[1]),_=null,W=k.yyleng,x=k.yytext,T=k.yylineno,I=k.yylloc;break;case 2:if(N=this.productions_[S[1]][1],R.$=u[u.length-N],R._$={first_line:o[o.length-(N||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(N||1)].first_column,last_column:o[o.length-1].last_column},P&&(R._$.range=[o[o.length-(N||1)].range[0],o[o.length-1].range[1]]),Z=this.performAction.apply(R,[x,W,T,w.yy,S[1],u,o].concat(B)),typeof Z<"u")return Z;N&&(c=c.slice(0,-1*N*2),u=u.slice(0,-1*N),o=o.slice(0,-1*N)),c.push(this.productions_[S[1]][0]),u.push(R.$),o.push(R._$),Y=$[c[c.length-2]][c[c.length-1]],c.push(Y);break;case 3:return!0}}return!0}},b=function(){var g={EOF:1,parseError:function(r,c){if(this.yy.parser)this.yy.parser.parseError(r,c);else throw new Error(r)},setInput:function(i,r){return this.yy=r||this.yy||{},this._input=i,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var i=this._input[0];this.yytext+=i,this.yyleng++,this.offset++,this.match+=i,this.matched+=i;var r=i.match(/(?:\r\n?|\n).*/g);return r?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),i},unput:function(i){var r=i.length,c=i.split(/(?:\r\n?|\n)/g);this._input=i+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-r),this.offset-=r;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var u=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-r},this.options.ranges&&(this.yylloc.range=[u[0],u[0]+this.yyleng-r]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(i){this.unput(this.match.slice(i))},pastInput:function(){var i=this.matched.substr(0,this.matched.length-this.match.length);return(i.length>20?"...":"")+i.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var i=this.match;return i.length<20&&(i+=this._input.substr(0,20-i.length)),(i.substr(0,20)+(i.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var i=this.pastInput(),r=new Array(i.length+1).join("-");return i+this.upcomingInput()+` diff --git a/assets/use_cases.html-lHSo0w28.js b/assets/use_cases.html-Ga8uwVa2.js similarity index 92% rename from assets/use_cases.html-lHSo0w28.js rename to assets/use_cases.html-Ga8uwVa2.js index ecf88ea..006596a 100644 --- a/assets/use_cases.html-lHSo0w28.js +++ b/assets/use_cases.html-Ga8uwVa2.js @@ -1 +1 @@ -import{_ as s}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as r,c as a,a as n,d as e,b as i}from"./app-BrxqtzGY.js";const c={},l={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/511",target:"_blank",rel:"noopener noreferrer"};function d(p,m){const o=t("ExternalLinkIcon");return r(),a("div",null,[n("p",null,[e("This project has received recognition from numerous companies and individual developers. According to the author's incomplete statistics, these companies include well-known internet giants, leading cloud service providers in China, several renowned AI unicorns, as well as a range of small and medium-sized companies. Users can endorse this project by pasting their company name and relevant project introduction on the "),n("a",l,[e("issue"),i(o)]),e(" page. We appreciate your support!")])])}const h=s(c,[["render",d],["__file","use_cases.html.vue"]]);export{h as default}; +import{_ as s}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as t,o as r,c as a,a as n,d as e,b as i}from"./app-oTlYPy8h.js";const c={},l={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/511",target:"_blank",rel:"noopener noreferrer"};function d(p,m){const o=t("ExternalLinkIcon");return r(),a("div",null,[n("p",null,[e("This project has received recognition from numerous companies and individual developers. According to the author's incomplete statistics, these companies include well-known internet giants, leading cloud service providers in China, several renowned AI unicorns, as well as a range of small and medium-sized companies. Users can endorse this project by pasting their company name and relevant project introduction on the "),n("a",l,[e("issue"),i(o)]),e(" page. We appreciate your support!")])])}const h=s(c,[["render",d],["__file","use_cases.html.vue"]]);export{h as default}; diff --git a/assets/use_cases.html-NGOdBBIO.js b/assets/use_cases.html-Ztr99Hiu.js similarity index 92% rename from assets/use_cases.html-NGOdBBIO.js rename to assets/use_cases.html-Ztr99Hiu.js index 7351020..808fe49 100644 --- a/assets/use_cases.html-NGOdBBIO.js +++ b/assets/use_cases.html-Ztr99Hiu.js @@ -1 +1 @@ -import{_ as s}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as r,c as a,a as t,d as e,b as c}from"./app-BrxqtzGY.js";const _={},i={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/511",target:"_blank",rel:"noopener noreferrer"};function l(d,m){const o=n("ExternalLinkIcon");return r(),a("div",null,[t("p",null,[e("本项目已经得到不少公司和个人开发者的认可,据作者不完全统计, 使用本项目的公司包括知名的互联网巨头、国内排名前列的云服务公司、多家知名的 AI 独角兽公司, 以及一系列中小型公司。使用者可以通过在 "),t("a",i,[e("issue"),c(o)]),e(" 上粘贴公司的大名和相关项目介绍为本项目背书,感谢支持!")])])}const p=s(_,[["render",l],["__file","use_cases.html.vue"]]);export{p as default}; +import{_ as s}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as r,c as a,a as t,d as e,b as c}from"./app-oTlYPy8h.js";const _={},i={href:"https://github.com/ZLMediaKit/ZLMediaKit/issues/511",target:"_blank",rel:"noopener noreferrer"};function l(d,m){const o=n("ExternalLinkIcon");return r(),a("div",null,[t("p",null,[e("本项目已经得到不少公司和个人开发者的认可,据作者不完全统计, 使用本项目的公司包括知名的互联网巨头、国内排名前列的云服务公司、多家知名的 AI 独角兽公司, 以及一系列中小型公司。使用者可以通过在 "),t("a",i,[e("issue"),c(o)]),e(" 上粘贴公司的大名和相关项目介绍为本项目背书,感谢支持!")])])}const p=s(_,[["render",l],["__file","use_cases.html.vue"]]);export{p as default}; diff --git a/assets/video_conferencing_related_resources.html-SX4i-tyB.js b/assets/video_conferencing_related_resources.html-U1qNLSQN.js similarity index 96% rename from assets/video_conferencing_related_resources.html-SX4i-tyB.js rename to assets/video_conferencing_related_resources.html-U1qNLSQN.js index b41b9a9..7812998 100644 --- a/assets/video_conferencing_related_resources.html-SX4i-tyB.js +++ b/assets/video_conferencing_related_resources.html-U1qNLSQN.js @@ -1 +1 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as i,c as a,a as e,d as r,b as n}from"./app-BrxqtzGY.js";const c={},s={href:"https://www.bilibili.com/video/BV1AK411R7NG/",target:"_blank",rel:"noopener noreferrer"},_={href:"https://user-images.githubusercontent.com/11495632/204230234-04da9d84-ffc7-4d32-bda3-04c72474205f.png",target:"_blank",rel:"noopener noreferrer"},d={href:"https://user-images.githubusercontent.com/11495632/204230272-13448d78-b6da-40f2-94b9-da517fa5cc0b.png",target:"_blank",rel:"noopener noreferrer"},u={href:"https://user-images.githubusercontent.com/11495632/204230325-1b395c6f-c094-414d-9d4e-8ea04120eed6.png",target:"_blank",rel:"noopener noreferrer"},b=e("p",null,"WebRTC",-1),f={href:"https://www.bilibili.com/video/BV1kq4y1u7cN/",target:"_blank",rel:"noopener noreferrer"},h={href:"https://www.bilibili.com/video/BV1SR4y1t7V4/",target:"_blank",rel:"noopener noreferrer"},p={href:"https://www.bilibili.com/video/BV1Eg411N7TJ/",target:"_blank",rel:"noopener noreferrer"},m={href:"https://www.bilibili.com/video/BV1uL4y1i7KP/",target:"_blank",rel:"noopener noreferrer"};function g(w,k){const t=l("ExternalLinkIcon");return i(),a("div",null,[e("ul",null,[e("li",null,[e("p",null,[e("a",s,[r("Random Tech Talking"),n(t)])]),e("ul",null,[e("li",null,[r("相关素材: "),e("a",_,[r("webrtc over tcp"),n(t)]),r("、"),e("a",d,[r("webrtc over udp"),n(t)]),r("、"),e("a",u,[r("webrtc 时序图"),n(t)]),r("。")])])]),e("li",null,[b,e("ul",null,[e("li",null,[e("a",f,[r("ZLMediaKit 源代码讲解 1"),n(t)])]),e("li",null,[e("a",h,[r("ZLMediaKit 源代码讲解 2"),n(t)])]),e("li",null,[e("a",p,[r("ZLMediaKit webrtc 使用演示"),n(t)])]),e("li",null,[e("a",m,[r("ZLMediaKit webrtc 实现"),n(t)])])])])])])}const B=o(c,[["render",g],["__file","video_conferencing_related_resources.html.vue"]]);export{B as default}; +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as i,c as a,a as e,d as r,b as n}from"./app-oTlYPy8h.js";const c={},s={href:"https://www.bilibili.com/video/BV1AK411R7NG/",target:"_blank",rel:"noopener noreferrer"},_={href:"https://user-images.githubusercontent.com/11495632/204230234-04da9d84-ffc7-4d32-bda3-04c72474205f.png",target:"_blank",rel:"noopener noreferrer"},d={href:"https://user-images.githubusercontent.com/11495632/204230272-13448d78-b6da-40f2-94b9-da517fa5cc0b.png",target:"_blank",rel:"noopener noreferrer"},u={href:"https://user-images.githubusercontent.com/11495632/204230325-1b395c6f-c094-414d-9d4e-8ea04120eed6.png",target:"_blank",rel:"noopener noreferrer"},b=e("p",null,"WebRTC",-1),f={href:"https://www.bilibili.com/video/BV1kq4y1u7cN/",target:"_blank",rel:"noopener noreferrer"},h={href:"https://www.bilibili.com/video/BV1SR4y1t7V4/",target:"_blank",rel:"noopener noreferrer"},p={href:"https://www.bilibili.com/video/BV1Eg411N7TJ/",target:"_blank",rel:"noopener noreferrer"},m={href:"https://www.bilibili.com/video/BV1uL4y1i7KP/",target:"_blank",rel:"noopener noreferrer"};function g(w,k){const t=l("ExternalLinkIcon");return i(),a("div",null,[e("ul",null,[e("li",null,[e("p",null,[e("a",s,[r("Random Tech Talking"),n(t)])]),e("ul",null,[e("li",null,[r("相关素材: "),e("a",_,[r("webrtc over tcp"),n(t)]),r("、"),e("a",d,[r("webrtc over udp"),n(t)]),r("、"),e("a",u,[r("webrtc 时序图"),n(t)]),r("。")])])]),e("li",null,[b,e("ul",null,[e("li",null,[e("a",f,[r("ZLMediaKit 源代码讲解 1"),n(t)])]),e("li",null,[e("a",h,[r("ZLMediaKit 源代码讲解 2"),n(t)])]),e("li",null,[e("a",p,[r("ZLMediaKit webrtc 使用演示"),n(t)])]),e("li",null,[e("a",m,[r("ZLMediaKit webrtc 实现"),n(t)])])])])])])}const B=o(c,[["render",g],["__file","video_conferencing_related_resources.html.vue"]]);export{B as default}; diff --git a/assets/video_conferencing_related_resources.html-AS8_6dZk.js b/assets/video_conferencing_related_resources.html-cJ9at7Xc.js similarity index 96% rename from assets/video_conferencing_related_resources.html-AS8_6dZk.js rename to assets/video_conferencing_related_resources.html-cJ9at7Xc.js index 5a7830b..24dddc1 100644 --- a/assets/video_conferencing_related_resources.html-AS8_6dZk.js +++ b/assets/video_conferencing_related_resources.html-cJ9at7Xc.js @@ -1 +1 @@ -import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as i,c as a,a as e,d as r,b as n}from"./app-BrxqtzGY.js";const c={},s={href:"https://www.bilibili.com/video/BV1AK411R7NG/",target:"_blank",rel:"noopener noreferrer"},_={href:"https://user-images.githubusercontent.com/11495632/204230234-04da9d84-ffc7-4d32-bda3-04c72474205f.png",target:"_blank",rel:"noopener noreferrer"},d={href:"https://user-images.githubusercontent.com/11495632/204230272-13448d78-b6da-40f2-94b9-da517fa5cc0b.png",target:"_blank",rel:"noopener noreferrer"},u={href:"https://user-images.githubusercontent.com/11495632/204230325-1b395c6f-c094-414d-9d4e-8ea04120eed6.png",target:"_blank",rel:"noopener noreferrer"},b=e("p",null,"WebRTC",-1),p={href:"https://www.bilibili.com/video/BV1kq4y1u7cN/",target:"_blank",rel:"noopener noreferrer"},f={href:"https://www.bilibili.com/video/BV1SR4y1t7V4/",target:"_blank",rel:"noopener noreferrer"},h={href:"https://www.bilibili.com/video/BV1Eg411N7TJ/",target:"_blank",rel:"noopener noreferrer"},m={href:"https://www.bilibili.com/video/BV1uL4y1i7KP/",target:"_blank",rel:"noopener noreferrer"};function g(w,k){const t=l("ExternalLinkIcon");return i(),a("div",null,[e("ul",null,[e("li",null,[e("p",null,[e("a",s,[r("Random Tech Talking"),n(t)])]),e("ul",null,[e("li",null,[r("Related materials:"),e("a",_,[r("webrtc over tcp"),n(t)]),r("、"),e("a",d,[r("webrtc over udp"),n(t)]),r("、"),e("a",u,[r("webrtc 时序图"),n(t)]),r("。")])])]),e("li",null,[b,e("ul",null,[e("li",null,[e("a",p,[r("ZLMediaKit Source Code Explanation 1"),n(t)])]),e("li",null,[e("a",f,[r("ZLMediaKit Source Code Explanation 2"),n(t)])]),e("li",null,[e("a",h,[r("ZLMediaKit webrtc Usage Demonstration"),n(t)])]),e("li",null,[e("a",m,[r("ZLMediaKit webrtc Implementation"),n(t)])])])])])])}const x=o(c,[["render",g],["__file","video_conferencing_related_resources.html.vue"]]);export{x as default}; +import{_ as o}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o as i,c as a,a as e,d as r,b as n}from"./app-oTlYPy8h.js";const c={},s={href:"https://www.bilibili.com/video/BV1AK411R7NG/",target:"_blank",rel:"noopener noreferrer"},_={href:"https://user-images.githubusercontent.com/11495632/204230234-04da9d84-ffc7-4d32-bda3-04c72474205f.png",target:"_blank",rel:"noopener noreferrer"},d={href:"https://user-images.githubusercontent.com/11495632/204230272-13448d78-b6da-40f2-94b9-da517fa5cc0b.png",target:"_blank",rel:"noopener noreferrer"},u={href:"https://user-images.githubusercontent.com/11495632/204230325-1b395c6f-c094-414d-9d4e-8ea04120eed6.png",target:"_blank",rel:"noopener noreferrer"},b=e("p",null,"WebRTC",-1),p={href:"https://www.bilibili.com/video/BV1kq4y1u7cN/",target:"_blank",rel:"noopener noreferrer"},f={href:"https://www.bilibili.com/video/BV1SR4y1t7V4/",target:"_blank",rel:"noopener noreferrer"},h={href:"https://www.bilibili.com/video/BV1Eg411N7TJ/",target:"_blank",rel:"noopener noreferrer"},m={href:"https://www.bilibili.com/video/BV1uL4y1i7KP/",target:"_blank",rel:"noopener noreferrer"};function g(w,k){const t=l("ExternalLinkIcon");return i(),a("div",null,[e("ul",null,[e("li",null,[e("p",null,[e("a",s,[r("Random Tech Talking"),n(t)])]),e("ul",null,[e("li",null,[r("Related materials:"),e("a",_,[r("webrtc over tcp"),n(t)]),r("、"),e("a",d,[r("webrtc over udp"),n(t)]),r("、"),e("a",u,[r("webrtc 时序图"),n(t)]),r("。")])])]),e("li",null,[b,e("ul",null,[e("li",null,[e("a",p,[r("ZLMediaKit Source Code Explanation 1"),n(t)])]),e("li",null,[e("a",f,[r("ZLMediaKit Source Code Explanation 2"),n(t)])]),e("li",null,[e("a",h,[r("ZLMediaKit webrtc Usage Demonstration"),n(t)])]),e("li",null,[e("a",m,[r("ZLMediaKit webrtc Implementation"),n(t)])])])])])])}const x=o(c,[["render",g],["__file","video_conferencing_related_resources.html.vue"]]);export{x as default}; diff --git a/assets/web_hook_api.html-DDD36REX.js b/assets/web_hook_api.html-OmnDRkZ1.js similarity index 99% rename from assets/web_hook_api.html-DDD36REX.js rename to assets/web_hook_api.html-OmnDRkZ1.js index 3514bad..be60374 100644 --- a/assets/web_hook_api.html-DDD36REX.js +++ b/assets/web_hook_api.html-OmnDRkZ1.js @@ -1,4 +1,4 @@ -import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as o,o as p,c as l,a as e,d as n,b as r,e as s}from"./app-BrxqtzGY.js";const c={},i=s(`

                    Web Hook Preview

                    MediaServer can notify certain internal events through HTTP POST to a third-party HTTP server. The following are the relevant default configurations:

                    [hook]
                    +import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as o,o as p,c as l,a as e,d as n,b as r,e as s}from"./app-oTlYPy8h.js";const c={},i=s(`

                    Web Hook Preview

                    MediaServer can notify certain internal events through HTTP POST to a third-party HTTP server. The following are the relevant default configurations:

                    [hook]
                     enable=1
                     admin_params=secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
                     timeoutSec=10
                    diff --git a/assets/web_hook_api.html-I46LUNuG.js b/assets/web_hook_api.html-QYXcFVoT.js
                    similarity index 99%
                    rename from assets/web_hook_api.html-I46LUNuG.js
                    rename to assets/web_hook_api.html-QYXcFVoT.js
                    index 08e8676..b449f31 100644
                    --- a/assets/web_hook_api.html-I46LUNuG.js
                    +++ b/assets/web_hook_api.html-QYXcFVoT.js
                    @@ -1,4 +1,4 @@
                    -import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as p,o,c as l,a as n,d as s,b as r,e}from"./app-BrxqtzGY.js";const c={},d=e(`

                    HOOK 预览

                    MediaServer 可以把内部的一些事件通过 http post 第三方 http 服务器的方式通知出去,以下是相关的默认配置:

                    [hook]
                    +import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as p,o,c as l,a as n,d as s,b as r,e}from"./app-oTlYPy8h.js";const c={},d=e(`

                    HOOK 预览

                    MediaServer 可以把内部的一些事件通过 http post 第三方 http 服务器的方式通知出去,以下是相关的默认配置:

                    [hook]
                     enable=1
                     admin_params=secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
                     timeoutSec=10
                    diff --git a/assets/webrtc_compilation_and_use.html-Ck_2B7eV.js b/assets/webrtc_compilation_and_use.html-Ck_2B7eV.js
                    new file mode 100644
                    index 0000000..5ce69a2
                    --- /dev/null
                    +++ b/assets/webrtc_compilation_and_use.html-Ck_2B7eV.js
                    @@ -0,0 +1 @@
                    +const e=JSON.parse('{"key":"v-5eb5ee22","path":"/zh/guide/protocol/webrtc/webrtc_compilation_and_use.html","title":"webrtc 编译与使用","lang":"zh-CN","frontmatter":{"title":"webrtc 编译与使用","description":"环境 依赖准备 openssl 安装 (openssl 版本要求 1.1 以上); libsrtp 安装; 点击这里 (https://codeload.github.com/cisco/libsrtp/tar.gz/refs/tags/v2.3.0)下载安装 对于一些比较新的编译环境(如 GCC 10+),编译 libsrtp-2.3.0 可能会存在...","head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://docs.ZLMediaKit.com/guide/protocol/webrtc/webrtc_compilation_and_use.html"}],["meta",{"property":"og:url","content":"https://docs.ZLMediaKit.com/zh/guide/protocol/webrtc/webrtc_compilation_and_use.html"}],["meta",{"property":"og:site_name","content":"ZLMediaKit"}],["meta",{"property":"og:title","content":"webrtc 编译与使用"}],["meta",{"property":"og:description","content":"环境 依赖准备 openssl 安装 (openssl 版本要求 1.1 以上); libsrtp 安装; 点击这里 (https://codeload.github.com/cisco/libsrtp/tar.gz/refs/tags/v2.3.0)下载安装 对于一些比较新的编译环境(如 GCC 10+),编译 libsrtp-2.3.0 可能会存在..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2023-12-06T10:57:19.000Z"}],["meta",{"property":"article:author","content":"ZLMediaKit"}],["meta",{"property":"article:modified_time","content":"2023-12-06T10:57:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"webrtc 编译与使用\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2023-12-06T10:57:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"ZLMediaKit\\",\\"url\\":\\"https://docs.ZLMediaKit.com\\"}]}"]]},"headers":[{"level":2,"title":"环境","slug":"环境","link":"#环境","children":[]},{"level":2,"title":"依赖准备","slug":"依赖准备","link":"#依赖准备","children":[]},{"level":2,"title":"编译","slug":"编译","link":"#编译","children":[]},{"level":2,"title":"修改配置文件","slug":"修改配置文件","link":"#修改配置文件","children":[]},{"level":2,"title":"测试","slug":"测试","link":"#测试","children":[]},{"level":2,"title":"问题解决","slug":"问题解决","link":"#问题解决","children":[]},{"level":2,"title":"Q And A(播放问题) ?","slug":"q-and-a-播放问题","link":"#q-and-a-播放问题","children":[]}],"git":{"createdTime":1700403910000,"updatedTime":1701860239000,"contributors":[{"name":"Mr.Hope","email":"mister-hope@outlook.com","commits":2},{"name":"Alex","email":"liyu7352@gmail.com","commits":1}]},"readingTime":{"minutes":2.87,"words":860},"filePathRelative":"zh/guide/protocol/webrtc/webrtc_compilation_and_use.md","localizedDate":"2023年11月19日","autoDesc":true}');export{e as data};
                    diff --git a/assets/webrtc_compilation_and_use.html-3Wgq1AT7.js b/assets/webrtc_compilation_and_use.html-EzMJU7Jv.js
                    similarity index 99%
                    rename from assets/webrtc_compilation_and_use.html-3Wgq1AT7.js
                    rename to assets/webrtc_compilation_and_use.html-EzMJU7Jv.js
                    index 66e16c1..701fa06 100644
                    --- a/assets/webrtc_compilation_and_use.html-3Wgq1AT7.js
                    +++ b/assets/webrtc_compilation_and_use.html-EzMJU7Jv.js
                    @@ -1,4 +1,4 @@
                    -import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o,c as r,a as n,d as s,b as a,e as t}from"./app-BrxqtzGY.js";const c={},p=t(`

                    Environment

                    machine
                    +import{_ as i}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as l,o,c as r,a as n,d as s,b as a,e as t}from"./app-oTlYPy8h.js";const c={},p=t(`

                    Environment

                    machine
                     centos 7.6
                     gcc version 5.4.0 (GCC)
                     cmake version 3.20.5
                    diff --git a/assets/webrtc_compilation_and_use.html-FCI8zWK-.js b/assets/webrtc_compilation_and_use.html-ZhDB0Qu6.js
                    similarity index 99%
                    rename from assets/webrtc_compilation_and_use.html-FCI8zWK-.js
                    rename to assets/webrtc_compilation_and_use.html-ZhDB0Qu6.js
                    index 59a3c06..2539a9a 100644
                    --- a/assets/webrtc_compilation_and_use.html-FCI8zWK-.js
                    +++ b/assets/webrtc_compilation_and_use.html-ZhDB0Qu6.js
                    @@ -1,4 +1,4 @@
                    -import{_ as l}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as p,c,a as n,d as s,b as e,e as t}from"./app-BrxqtzGY.js";const o={},r=t(`

                    环境

                    编译机器:
                    +import{_ as l}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as i,o as p,c,a as n,d as s,b as e,e as t}from"./app-oTlYPy8h.js";const o={},r=t(`

                    环境

                    编译机器:
                     centos 7.6
                     gcc version 5.4.0 (GCC)
                     cmake version 3.20.5
                    diff --git a/assets/webrtc_compilation_and_use.html-zmvb9by4.js b/assets/webrtc_compilation_and_use.html-zmvb9by4.js
                    deleted file mode 100644
                    index ae8fd46..0000000
                    --- a/assets/webrtc_compilation_and_use.html-zmvb9by4.js
                    +++ /dev/null
                    @@ -1 +0,0 @@
                    -const e=JSON.parse('{"key":"v-5eb5ee22","path":"/zh/guide/protocol/webrtc/webrtc_compilation_and_use.html","title":"webrtc编译与使用","lang":"zh-CN","frontmatter":{"title":"webrtc编译与使用","description":"环境 依赖准备 openssl 安装 (openssl 版本要求 1.1 以上); libsrtp 安装; 点击这里 (https://codeload.github.com/cisco/libsrtp/tar.gz/refs/tags/v2.3.0)下载安装 对于一些比较新的编译环境(如 GCC 10+),编译 libsrtp-2.3.0 可能会存在...","head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://docs.ZLMediaKit.com/guide/protocol/webrtc/webrtc_compilation_and_use.html"}],["meta",{"property":"og:url","content":"https://docs.ZLMediaKit.com/zh/guide/protocol/webrtc/webrtc_compilation_and_use.html"}],["meta",{"property":"og:site_name","content":"ZLMediaKit"}],["meta",{"property":"og:title","content":"webrtc编译与使用"}],["meta",{"property":"og:description","content":"环境 依赖准备 openssl 安装 (openssl 版本要求 1.1 以上); libsrtp 安装; 点击这里 (https://codeload.github.com/cisco/libsrtp/tar.gz/refs/tags/v2.3.0)下载安装 对于一些比较新的编译环境(如 GCC 10+),编译 libsrtp-2.3.0 可能会存在..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2023-12-05T08:36:26.000Z"}],["meta",{"property":"article:author","content":"ZLMediaKit"}],["meta",{"property":"article:modified_time","content":"2023-12-05T08:36:26.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"webrtc编译与使用\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2023-12-05T08:36:26.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"ZLMediaKit\\",\\"url\\":\\"https://docs.ZLMediaKit.com\\"}]}"]]},"headers":[{"level":2,"title":"环境","slug":"环境","link":"#环境","children":[]},{"level":2,"title":"依赖准备","slug":"依赖准备","link":"#依赖准备","children":[]},{"level":2,"title":"编译","slug":"编译","link":"#编译","children":[]},{"level":2,"title":"修改配置文件","slug":"修改配置文件","link":"#修改配置文件","children":[]},{"level":2,"title":"测试","slug":"测试","link":"#测试","children":[]},{"level":2,"title":"问题解决","slug":"问题解决","link":"#问题解决","children":[]},{"level":2,"title":"Q And A(播放问题) ?","slug":"q-and-a-播放问题","link":"#q-and-a-播放问题","children":[]}],"git":{"createdTime":1700403910000,"updatedTime":1701765386000,"contributors":[{"name":"Alex","email":"liyu7352@gmail.com","commits":1},{"name":"Mr.Hope","email":"mister-hope@outlook.com","commits":1}]},"readingTime":{"minutes":2.87,"words":860},"filePathRelative":"zh/guide/protocol/webrtc/webrtc_compilation_and_use.md","localizedDate":"2023年11月19日","autoDesc":true}');export{e as data};
                    diff --git a/assets/webrtc_signaling_interaction_format.html-tkZpC3_1.js b/assets/webrtc_signaling_interaction_format.html-QJ72-nhn.js
                    similarity index 99%
                    rename from assets/webrtc_signaling_interaction_format.html-tkZpC3_1.js
                    rename to assets/webrtc_signaling_interaction_format.html-QJ72-nhn.js
                    index 8344aac..48191bc 100644
                    --- a/assets/webrtc_signaling_interaction_format.html-tkZpC3_1.js
                    +++ b/assets/webrtc_signaling_interaction_format.html-QJ72-nhn.js
                    @@ -1,4 +1,4 @@
                    -import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as n,c as e,e as s}from"./app-BrxqtzGY.js";const t={},r=s(`

                    前言

                    zlmediakit webrtc 信令格式新增支持 whip/whep 标准,测试地址如下:

                    推流:https://zlmediakit.com/index/api/whip?app=live&stream=test

                    拉流:https://zlmediakit.com/index/api/whep?app=live&stream=test

                    本文后续篇幅为私有信令格式。

                    一、webrtc sdp 交换请求基本格式

                    • 请求地址: /index/api/webrtc?app=live&stream=test&type=[push/play/echo]
                    • 请求方式: http post
                    • 请求 body: webrtc offer sdp
                    • 回复 body:
                    {
                    +import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as n,c as e,e as s}from"./app-oTlYPy8h.js";const t={},r=s(`

                    前言

                    zlmediakit webrtc 信令格式新增支持 whip/whep 标准,测试地址如下:

                    推流:https://zlmediakit.com/index/api/whip?app=live&stream=test

                    拉流:https://zlmediakit.com/index/api/whep?app=live&stream=test

                    本文后续篇幅为私有信令格式。

                    一、webrtc sdp 交换请求基本格式

                    • 请求地址: /index/api/webrtc?app=live&stream=test&type=[push/play/echo]
                    • 请求方式: http post
                    • 请求 body: webrtc offer sdp
                    • 回复 body:
                    {
                       "code": 0,
                       "id": "zlm_1",
                       "sdp": "v=0\\r\\no=mozilla...THIS_IS_SDPARTA-99.0 6880954646154322397 0 IN IP4 172.18.190.185\\r\\ns=-\\r\\nt=0 0\\r\\na=group:BUNDLE 0 1\\r\\na=msid-semantic: WMS *\\r\\na=ice-lite\\r\\nm=audio 8000 UDP/TLS/RTP/SAVPF 0\\r\\nc=IN IP4 172.18.190.185\\r\\na=rtcp:8000 IN IP4 172.18.190.185\\r\\na=ice-ufrag:rBK+uR9AAAA=_2\\r\\na=ice-pwd:H4rtFC1xhef0ynU2lk8z22ha\\r\\na=fingerprint:sha-256 6E:EF:E7:75:56:2A:66:DF:6C:9D:72:B6:A5:21:35:73:19:66:D8:00:F4:BC:36:59:61:1B:5D:35:13:99:14:AE\\r\\na=setup:passive\\r\\na=mid:0\\r\\na=ice-lite\\r\\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\\r\\na=extmap:2/sendonly urn:ietf:params:rtp-hdrext:csrc-audio-level\\r\\na=recvonly\\r\\na=rtcp-mux\\r\\na=rtpmap:0 PCMU/8000/1\\r\\na=candidate:udpcandidate 1 udp 120 172.18.190.185 8000 typ host\\r\\nm=video 8000 UDP/TLS/RTP/SAVPF 126 127\\r\\nc=IN IP4 172.18.190.185\\r\\na=rtcp:8000 IN IP4 172.18.190.185\\r\\na=ice-ufrag:rBK+uR9AAAA=_2\\r\\na=ice-pwd:H4rtFC1xhef0ynU2lk8z22ha\\r\\na=fingerprint:sha-256 6E:EF:E7:75:56:2A:66:DF:6C:9D:72:B6:A5:21:35:73:19:66:D8:00:F4:BC:36:59:61:1B:5D:35:13:99:14:AE\\r\\na=setup:passive\\r\\na=mid:1\\r\\na=ice-lite\\r\\na=extmap:4 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\\r\\na=extmap:5 urn:ietf:params:rtp-hdrext:toffset\\r\\na=extmap:6/sendonly http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\\r\\na=extmap:7 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\\r\\na=recvonly\\r\\na=rtcp-mux\\r\\na=rtpmap:126 H264/90000\\r\\na=rtcp-fb:126 ccm fir\\r\\na=rtcp-fb:126 goog-remb\\r\\na=rtcp-fb:126 nack\\r\\na=rtcp-fb:126 nack pli\\r\\na=rtcp-fb:126 transport-cc\\r\\na=fmtp:126 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f;x-google-max-bitrate=8000;x-google-min-bitrate=4000;x-google-start-bitrate=6000\\r\\na=rtpmap:127 rtx/90000\\r\\na=fmtp:127 apt=126\\r\\na=candidate:udpcandidate 1 udp 120 172.18.190.185 8000 typ host\\r\\n",
                    diff --git a/assets/webrtc_signaling_interaction_format.html-z1sc5Nd0.js b/assets/webrtc_signaling_interaction_format.html-QfhUllLQ.js
                    similarity index 99%
                    rename from assets/webrtc_signaling_interaction_format.html-z1sc5Nd0.js
                    rename to assets/webrtc_signaling_interaction_format.html-QfhUllLQ.js
                    index 9d2e5cf..3166e50 100644
                    --- a/assets/webrtc_signaling_interaction_format.html-z1sc5Nd0.js
                    +++ b/assets/webrtc_signaling_interaction_format.html-QfhUllLQ.js
                    @@ -1,4 +1,4 @@
                    -import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as n,c as e,e as s}from"./app-BrxqtzGY.js";const t={},r=s(`

                    Introduction

                    zlmediakit has added support for the whip/whep standard in the WebRTC signaling format. The test url are as follows:

                    Push stream:https://zlmediakit.com/index/api/whip?app=live&stream=test

                    Pull stream:https://zlmediakit.com/index/api/whep?app=live&stream=test

                    The subsequent sections of this article will cover the private signaling format.

                    1. Basic Format of WebRTC SDP Exchange Request

                    • Request URL: /index/api/webrtc?app=live&stream=test&type=[push/play/echo]

                    • Request Method: HTTP POST

                    • Request Body: WebRTC offer SDP

                    • Response Body:

                      {
                      +import{_ as a}from"./plugin-vue_export-helper-x3n3nnut.js";import{o as n,c as e,e as s}from"./app-oTlYPy8h.js";const t={},r=s(`

                      Introduction

                      zlmediakit has added support for the whip/whep standard in the WebRTC signaling format. The test url are as follows:

                      Push stream:https://zlmediakit.com/index/api/whip?app=live&stream=test

                      Pull stream:https://zlmediakit.com/index/api/whep?app=live&stream=test

                      The subsequent sections of this article will cover the private signaling format.

                      1. Basic Format of WebRTC SDP Exchange Request

                      • Request URL: /index/api/webrtc?app=live&stream=test&type=[push/play/echo]

                      • Request Method: HTTP POST

                      • Request Body: WebRTC offer SDP

                      • Response Body:

                        {
                           "code": 0,
                           "id": "zlm_1",
                           "sdp": "v=0\\r\\no=mozilla...THIS_IS_SDPARTA-99.0 6880954646154322397 0 IN IP4 172.18.190.185\\r\\ns=-\\r\\nt=0 0\\r\\na=group:BUNDLE 0 1\\r\\na=msid-semantic: WMS *\\r\\na=ice-lite\\r\\nm=audio 8000 UDP/TLS/RTP/SAVPF 0\\r\\nc=IN IP4 172.18.190.185\\r\\na=rtcp:8000 IN IP4 172.18.190.185\\r\\na=ice-ufrag:rBK+uR9AAAA=_2\\r\\na=ice-pwd:H4rtFC1xhef0ynU2lk8z22ha\\r\\na=fingerprint:sha-256 6E:EF:E7:75:56:2A:66:DF:6C:9D:72:B6:A5:21:35:73:19:66:D8:00:F4:BC:36:59:61:1B:5D:35:13:99:14:AE\\r\\na=setup:passive\\r\\na=mid:0\\r\\na=ice-lite\\r\\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\\r\\na=extmap:2/sendonly urn:ietf:params:rtp-hdrext:csrc-audio-level\\r\\na=recvonly\\r\\na=rtcp-mux\\r\\na=rtpmap:0 PCMU/8000/1\\r\\na=candidate:udpcandidate 1 udp 120 172.18.190.185 8000 typ host\\r\\nm=video 8000 UDP/TLS/RTP/SAVPF 126 127\\r\\nc=IN IP4 172.18.190.185\\r\\na=rtcp:8000 IN IP4 172.18.190.185\\r\\na=ice-ufrag:rBK+uR9AAAA=_2\\r\\na=ice-pwd:H4rtFC1xhef0ynU2lk8z22ha\\r\\na=fingerprint:sha-256 6E:EF:E7:75:56:2A:66:DF:6C:9D:72:B6:A5:21:35:73:19:66:D8:00:F4:BC:36:59:61:1B:5D:35:13:99:14:AE\\r\\na=setup:passive\\r\\na=mid:1\\r\\na=ice-lite\\r\\na=extmap:4 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\\r\\na=extmap:5 urn:ietf:params:rtp-hdrext:toffset\\r\\na=extmap:6/sendonly http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\\r\\na=extmap:7 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\\r\\na=recvonly\\r\\na=rtcp-mux\\r\\na=rtpmap:126 H264/90000\\r\\na=rtcp-fb:126 ccm fir\\r\\na=rtcp-fb:126 goog-remb\\r\\na=rtcp-fb:126 nack\\r\\na=rtcp-fb:126 nack pli\\r\\na=rtcp-fb:126 transport-cc\\r\\na=fmtp:126 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f;x-google-max-bitrate=8000;x-google-min-bitrate=4000;x-google-start-bitrate=6000\\r\\na=rtpmap:127 rtx/90000\\r\\na=fmtp:127 apt=126\\r\\na=candidate:udpcandidate 1 udp 120 172.18.190.185 8000 typ host\\r\\n",
                        diff --git a/assets/xychartDiagram-f746c04c-ewecNIL5.js b/assets/xychartDiagram-f746c04c--73jsRcR.js
                        similarity index 99%
                        rename from assets/xychartDiagram-f746c04c-ewecNIL5.js
                        rename to assets/xychartDiagram-f746c04c--73jsRcR.js
                        index 5cf3858..5bc3321 100644
                        --- a/assets/xychartDiagram-f746c04c-ewecNIL5.js
                        +++ b/assets/xychartDiagram-f746c04c--73jsRcR.js
                        @@ -1,4 +1,4 @@
                        -import{a_ as zt,a$ as ot,aM as wt,aL as Ft,s as Nt,g as Xt,v as Yt,x as St,a as Ht,b as $t,z as Ut,l as _t,aJ as qt,i as jt,d as Gt}from"./mermaid.core-zy7cM8l9.js";import{a as Qt}from"./createText-aebacdfe-JILF3Vy1.js";import{i as Kt}from"./init-Hi12RPRh.js";import{o as Jt}from"./ordinal-wXG5obU4.js";import{l as ft}from"./linear-KPN1H-BK.js";import{l as pt}from"./line-TqRW8de4.js";import"./app-BrxqtzGY.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";function Zt(e,t,i){e=+e,t=+t,i=(n=arguments.length)<2?(t=e,e=0,1):n<3?1:+i;for(var s=-1,n=Math.max(0,Math.ceil((t-e)/i))|0,o=new Array(n);++s"u"&&(k.yylloc={});var tt=k.yylloc;a.push(tt);var Wt=k.options&&k.options.ranges;typeof B.yy.parseError=="function"?this.parseError=B.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ot(){var I;return I=g.pop()||k.lex()||xt,typeof I!="number"&&(I instanceof Array&&(g=I,I=g.pop()),I=l.symbols_[I]||I),I}for(var D,W,E,it,O={},q,M,dt,j;;){if(W=u[u.length-1],this.defaultActions[W]?E=this.defaultActions[W]:((D===null||typeof D>"u")&&(D=Ot()),E=F[W]&&F[W][D]),typeof E>"u"||!E.length||!E[0]){var et="";j=[];for(q in F[W])this.terminals_[q]&&q>Vt&&j.push("'"+this.terminals_[q]+"'");k.showPosition?et="Parse error on line "+(U+1)+`:
                        +import{a_ as zt,a$ as ot,aM as wt,aL as Ft,s as Nt,g as Xt,v as Yt,x as St,a as Ht,b as $t,z as Ut,l as _t,aJ as qt,i as jt,d as Gt}from"./mermaid.core-QJnSHCal.js";import{a as Qt}from"./createText-aebacdfe-8FzA6VnR.js";import{i as Kt}from"./init-Hi12RPRh.js";import{o as Jt}from"./ordinal-wXG5obU4.js";import{l as ft}from"./linear-JH76Qt4f.js";import{l as pt}from"./line-ZVNdUhg2.js";import"./app-oTlYPy8h.js";import"./array-Nw74a44z.js";import"./path-aUcfwwLI.js";function Zt(e,t,i){e=+e,t=+t,i=(n=arguments.length)<2?(t=e,e=0,1):n<3?1:+i;for(var s=-1,n=Math.max(0,Math.ceil((t-e)/i))|0,o=new Array(n);++s"u"&&(k.yylloc={});var tt=k.yylloc;a.push(tt);var Wt=k.options&&k.options.ranges;typeof B.yy.parseError=="function"?this.parseError=B.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ot(){var I;return I=g.pop()||k.lex()||xt,typeof I!="number"&&(I instanceof Array&&(g=I,I=g.pop()),I=l.symbols_[I]||I),I}for(var D,W,E,it,O={},q,M,dt,j;;){if(W=u[u.length-1],this.defaultActions[W]?E=this.defaultActions[W]:((D===null||typeof D>"u")&&(D=Ot()),E=F[W]&&F[W][D]),typeof E>"u"||!E.length||!E[0]){var et="";j=[];for(q in F[W])this.terminals_[q]&&q>Vt&&j.push("'"+this.terminals_[q]+"'");k.showPosition?et="Parse error on line "+(U+1)+`:
                         `+k.showPosition()+`
                         Expecting `+j.join(", ")+", got '"+(this.terminals_[D]||D)+"'":et="Parse error on line "+(U+1)+": Unexpected "+(D==xt?"end of input":"'"+(this.terminals_[D]||D)+"'"),this.parseError(et,{text:k.match,token:this.terminals_[D]||D,line:k.yylineno,loc:tt,expected:j})}if(E[0]instanceof Array&&E.length>1)throw new Error("Parse Error: multiple actions possible at state: "+W+", token: "+D);switch(E[0]){case 1:u.push(D),b.push(k.yytext),a.push(k.yylloc),u.push(E[1]),D=null,gt=k.yyleng,x=k.yytext,U=k.yylineno,tt=k.yylloc;break;case 2:if(M=this.productions_[E[1]][1],O.$=b[b.length-M],O._$={first_line:a[a.length-(M||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(M||1)].first_column,last_column:a[a.length-1].last_column},Wt&&(O._$.range=[a[a.length-(M||1)].range[0],a[a.length-1].range[1]]),it=this.performAction.apply(O,[x,gt,U,B.yy,E[1],b,a].concat(Bt)),typeof it<"u")return it;M&&(u=u.slice(0,-1*M*2),b=b.slice(0,-1*M),a=a.slice(0,-1*M)),u.push(this.productions_[E[1]][0]),b.push(O.$),a.push(O._$),dt=F[u[u.length-2]][u[u.length-1]],u.push(dt);break;case 3:return!0}}return!0}},It=function(){var V={EOF:1,parseError:function(l,u){if(this.yy.parser)this.yy.parser.parseError(l,u);else throw new Error(l)},setInput:function(r,l){return this.yy=l||this.yy||{},this._input=r,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var r=this._input[0];this.yytext+=r,this.yyleng++,this.offset++,this.match+=r,this.matched+=r;var l=r.match(/(?:\r\n?|\n).*/g);return l?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),r},unput:function(r){var l=r.length,u=r.split(/(?:\r\n?|\n)/g);this._input=r+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-l),this.offset-=l;var g=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),u.length-1&&(this.yylineno-=u.length-1);var b=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:u?(u.length===g.length?this.yylloc.first_column:0)+g[g.length-u.length].length-u[0].length:this.yylloc.first_column-l},this.options.ranges&&(this.yylloc.range=[b[0],b[0]+this.yyleng-l]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
                         `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(r){this.unput(this.match.slice(r))},pastInput:function(){var r=this.matched.substr(0,this.matched.length-this.match.length);return(r.length>20?"...":"")+r.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var r=this.match;return r.length<20&&(r+=this._input.substr(0,20-r.length)),(r.substr(0,20)+(r.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var r=this.pastInput(),l=new Array(r.length+1).join("-");return r+this.upcomingInput()+`
                        diff --git a/assets/zltoolkit_source_code_study_notes.html-rBGfF-Ka.js b/assets/zltoolkit_source_code_study_notes.html-JWQ-N5Wz.js
                        similarity index 86%
                        rename from assets/zltoolkit_source_code_study_notes.html-rBGfF-Ka.js
                        rename to assets/zltoolkit_source_code_study_notes.html-JWQ-N5Wz.js
                        index 8052ad7..f4026f2 100644
                        --- a/assets/zltoolkit_source_code_study_notes.html-rBGfF-Ka.js
                        +++ b/assets/zltoolkit_source_code_study_notes.html-JWQ-N5Wz.js
                        @@ -1 +1 @@
                        -import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as r,c,a as e,d as s,b as l}from"./app-BrxqtzGY.js";const _={},a={href:"https://blog.csdn.net/youlezhe/category_11460699.html",target:"_blank",rel:"noopener noreferrer"};function d(i,u){const o=n("ExternalLinkIcon");return r(),c("div",null,[e("p",null,[e("a",a,[s("zltoolkit source code analysis"),l(o)])])])}const p=t(_,[["render",d],["__file","zltoolkit_source_code_study_notes.html.vue"]]);export{p as default};
                        +import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as r,c,a as e,d as s,b as l}from"./app-oTlYPy8h.js";const _={},a={href:"https://blog.csdn.net/youlezhe/category_11460699.html",target:"_blank",rel:"noopener noreferrer"};function d(i,u){const o=n("ExternalLinkIcon");return r(),c("div",null,[e("p",null,[e("a",a,[s("zltoolkit source code analysis"),l(o)])])])}const p=t(_,[["render",d],["__file","zltoolkit_source_code_study_notes.html.vue"]]);export{p as default};
                        diff --git a/assets/zltoolkit_source_code_study_notes.html-ElJi0L0Z.js b/assets/zltoolkit_source_code_study_notes.html-ypL46AQc.js
                        similarity index 86%
                        rename from assets/zltoolkit_source_code_study_notes.html-ElJi0L0Z.js
                        rename to assets/zltoolkit_source_code_study_notes.html-ypL46AQc.js
                        index f592a58..612403a 100644
                        --- a/assets/zltoolkit_source_code_study_notes.html-ElJi0L0Z.js
                        +++ b/assets/zltoolkit_source_code_study_notes.html-ypL46AQc.js
                        @@ -1 +1 @@
                        -import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as r,c,a as e,d as s,b as _}from"./app-BrxqtzGY.js";const l={},a={href:"https://blog.csdn.net/youlezhe/category_11460699.html",target:"_blank",rel:"noopener noreferrer"};function d(i,m){const o=n("ExternalLinkIcon");return r(),c("div",null,[e("p",null,[e("a",a,[s("zltoolkit 源码分析"),_(o)])])])}const p=t(l,[["render",d],["__file","zltoolkit_source_code_study_notes.html.vue"]]);export{p as default};
                        +import{_ as t}from"./plugin-vue_export-helper-x3n3nnut.js";import{r as n,o as r,c,a as e,d as s,b as _}from"./app-oTlYPy8h.js";const l={},a={href:"https://blog.csdn.net/youlezhe/category_11460699.html",target:"_blank",rel:"noopener noreferrer"};function d(i,m){const o=n("ExternalLinkIcon");return r(),c("div",null,[e("p",null,[e("a",a,[s("zltoolkit 源码分析"),_(o)])])])}const p=t(l,[["render",d],["__file","zltoolkit_source_code_study_notes.html.vue"]]);export{p as default};
                        diff --git a/guide/code/index.html b/guide/code/index.html
                        index becc692..f887be1 100644
                        --- a/guide/code/index.html
                        +++ b/guide/code/index.html
                        @@ -29,12 +29,12 @@
                               }
                             
                             Code interpretation | ZLMediaKit
                        -    
                        -    
                        +    
                        +    
                             
                           
                           
                             
                        Skip to main content

                        Code interpretation

                        ZLMediaKitLess than 1 minute

                        Catalog

                        No catalog

                        - + diff --git a/guide/code/oncetoken.html b/guide/code/oncetoken.html index 6d16614..c5af8e1 100644 --- a/guide/code/oncetoken.html +++ b/guide/code/oncetoken.html @@ -29,8 +29,8 @@ } onceToken | ZLMediaKit - - + + @@ -90,6 +90,6 @@ //Omitted subsequent code }
                      • The name of this object is derived from pthread_once and dispatch_once in iOS.

                - + diff --git a/guide/faq/index.html b/guide/faq/index.html index 20366ca..7c48d5d 100644 --- a/guide/faq/index.html +++ b/guide/faq/index.html @@ -29,12 +29,12 @@ } FAQ | ZLMediaKit - - + + - + diff --git a/guide/faq/not_recommended_qq.html b/guide/faq/not_recommended_qq.html index 1002a98..d32afdc 100644 --- a/guide/faq/not_recommended_qq.html +++ b/guide/faq/not_recommended_qq.html @@ -29,12 +29,12 @@ } Why is it not recommended to consult questions via QQ private chat? | ZLMediaKit - - + +
                Skip to main content

                Why is it not recommended to consult questions via QQ private chat?

                ZLMediaKitLess than 1 minute

                1. Private chat on QQ is difficult to trace and organize, making it hard to form documentation. There are often repetitive questions, which do not benefit the project.

                2. The efficiency of communication on QQ is actually quite low. Although it allows for timely responses, the threshold for asking questions is too low. Questioners often need the respondent's progressive guidance to clarify their questions, which wastes a lot of time.

                3. Private chat messages on QQ are not timely and often interrupt the respondent's current work process. In contrast, GitHub issues can be handled in a unified manner, saving more time.

                4. Other users cannot participate in answering questions through private chat on QQ, and others cannot see the questions and answers. This is not conducive to divergent thinking and knowledge dissemination.

                Private chat for technical consultations is generally only accepted from the following individuals with selfless friendship relationships:

                1. Those who have submitted pull requests or other forms of code contributions.
                2. Those who have open-sourced projects based on ZLMediaKit.
                3. Those who have actively answered related technical questions in QQ groups or issues.
                4. Those who have shared self-written ZLMediaKit-related documents.
                5. Those who have sponsored the ZLMediaKit project or the author.
                6. Those who have made any contributions to the development and promotion of ZLMediaKit.
                - + diff --git a/guide/faq/rtmp_playback_compatibility_issues.html b/guide/faq/rtmp_playback_compatibility_issues.html index 6d638f2..4a559c0 100644 --- a/guide/faq/rtmp_playback_compatibility_issues.html +++ b/guide/faq/rtmp_playback_compatibility_issues.html @@ -29,12 +29,12 @@ } RTMP Playback Compatibility Issues | ZLMediaKit - - + +
                Skip to main content

                RTMP Playback Compatibility Issues

                ZLMediaKitLess than 1 minute

                In general, the specification for RTMP is to first send metadata, followed by config frames, then keyframes, and finally regular frames.

                Once the config frames are received, the decoder can be initialized.

                However, some streams are different, as they receive other frames before receiving the config frame for the video.

                In this case, the video track is not created and initialized.

                There is a preliminary suspicion that the compatibility of the Nginx RTMP server is not good.

                ZLMediaKit's streaming tool strictly follows the process of sending metadata first, then config frames, followed by keyframes, and finally regular frames.

                It also caches all config frames.

                FFplay can successfully play due to its determination of playback success based on data volume and time.

                As long as the data volume reaches a certain threshold or the time reaches a certain duration, it triggers the event of successful playback.

                The advantage of this approach is a high success rate in playback, but the downside is a longer video opening time.

                - + diff --git a/guide/index.html b/guide/index.html index e8b60b9..62f5b76 100644 --- a/guide/index.html +++ b/guide/index.html @@ -29,8 +29,8 @@ } Guide | ZLMediaKit - - + + @@ -38,6 +38,6 @@ docker run -id -p 1935:1935 -p 8080:80 -p 8443:443 -p 8554:554 -p 10000:10000 -p 10000:10000/udp -p 8000:8000/udp -p 9000:9000/udp zlmediakit/zlmediakit:master

                You can also compile the image according to the Dockerfile:

                bash build_docker_images.sh
                 
              5. - + diff --git a/guide/install/compilation_instructions_for_windows_version.html b/guide/install/compilation_instructions_for_windows_version.html index 07857ff..a0e7e08 100644 --- a/guide/install/compilation_instructions_for_windows_version.html +++ b/guide/install/compilation_instructions_for_windows_version.html @@ -29,8 +29,8 @@ } Building Instructions for Windows | ZLMediaKit - - + + @@ -69,6 +69,6 @@

              To compile a 64-bit program and link openssl, you also need to link Crypt32.lib and ws2_32.lib. Normally, when executing cmake .. @CMAKE_OPTIONS, you should see similar output like this:

              found library:C:/work/develop/vcpkg/installed/x64-windows-static/lib/libssl.lib;C:/work/develop/vcpkg/installed/x64-windows-static/lib/libcrypto.lib;Crypt32.lib;ws2_32.lib,ENABLE_OPENSSL defined
               

              If Crypt32.lib and ws2_32.lib are not present, you can manually modify the CMakeLists.txt file to resolve the issue (search for OPENSSL_LIBRARIES to find the corresponding location).

              list(APPEND LINK_LIB_LIST ${OPENSSL_LIBRARIES} Crypt32.lib ws2_32.lib)
               
          - + diff --git a/guide/install/index.html b/guide/install/index.html index f756268..4c02ad9 100644 --- a/guide/install/index.html +++ b/guide/install/index.html @@ -29,12 +29,12 @@ } Install | ZLMediaKit - - + + - + diff --git a/guide/install/install_zlmediakit_using_vcpkg.html b/guide/install/install_zlmediakit_using_vcpkg.html index 4ef53cb..4d8542a 100644 --- a/guide/install/install_zlmediakit_using_vcpkg.html +++ b/guide/install/install_zlmediakit_using_vcpkg.html @@ -28,13 +28,13 @@ document.documentElement.setAttribute("data-theme", "dark"); } - Installing zlmediakit with vcpkg | ZLMediaKit - - + Installing zlmediakit with vcpkg | ZLMediaKit + + -
          Skip to main content

          Installing zlmediakit with vcpkg

          ZLMediaKitAbout 1 min

          Introduction

          vcpkg is a cross-platform SDK package management tool, similar to yum/apt on Linux and Homebrew on macOS. It supports multiple platforms such as Linux, macOS, and Windows, making it a powerful tool for C/C++ developers to manage dependencies. Currently, zlmediakit has been added to vcpkg on August 8, 2023. Users can conveniently install zlmediakit C SDK and MediaServer executable program using vcpkg, resolving various compilation dependency-related issues. The inclusion of zlmediakit in vcpkg has received extensive support from @JackBoosYopen in new window, and we express our sincere gratitude for that!

          Installation Guide

          1. Install vcpkg

          Taking Linux platform as an example:

          # Download vcpkg tool
          +    
          Skip to main content

          Installing zlmediakit with vcpkg

          ZLMediaKitAbout 1 min

          Introduction

          vcpkg is a cross-platform SDK package management tool, similar to yum/apt on Linux and Homebrew on macOS. It supports multiple platforms such as Linux, macOS, and Windows, making it a powerful tool for C/C++ developers to manage dependencies. Currently, zlmediakit has been added to vcpkg on August 8, 2023. Users can conveniently install zlmediakit C SDK and MediaServer executable program using vcpkg, resolving various compilation dependency-related issues. The inclusion of zlmediakit in vcpkg has received extensive support from @JackBoosYopen in new window, and we express our sincere gratitude for that!

          Installation Guide

          1. Install vcpkg

          Taking Linux platform as an example:

          # Download vcpkg tool
           git clone https://github.com/microsoft/vcpkg
           # Start the installation; if prompted with installation failure, please install the dependencies first
           ./vcpkg/bootstrap-vcpkg.sh
          @@ -44,7 +44,7 @@
           
        5. Install zlmediakit with all features (including webrtc datachannel)

          ./vcpkg/vcpkg install zlmediakit\[core,mp4,openssl,webrtc,sctp\]
           
        6. Install zlmediakit with minimum features

          ./vcpkg/vcpkg install zlmediakit\[core\]
           
        7. Uninstall zlmediakit

          ./vcpkg/vcpkg remove zlmediakit
          -
        8. Installation path

        9. The MediaServer process depends on config.ini, default.pem, www, and other related files, which can be copied from the source code.

          3. Install different versions

          • Check the platforms supported by vcpkg
          ./vcpkg/vcpkg help triplet
          +
        10. Installation path

          The MediaServer process depends on config.ini, default.pem, www, and other related files, which can be copied from the source code.

        11. 3. Install different versions

          • Check the platforms supported by vcpkg
          ./vcpkg/vcpkg help triplet
           
          • Example for Linux

            ./vcpkg/vcpkg help triplet | grep linux
               x64-linux
               x86-linux
            @@ -70,7 +70,7 @@
             ./vcpkg/vcpkg remove zlmediakit
             # Then install the dynamic library version
             ./vcpkg/vcpkg install zlmediakit\[core,mp4,openssl,webrtc,sctp\]:x64-linux-dynamic
            -
          install_zlmediakit_using_vcpkg_2
          install_zlmediakit_using_vcpkg_2
    - +
install_zlmediakit_using_vcpkg_2
install_zlmediakit_using_vcpkg_2
+ diff --git a/guide/install/start.html b/guide/install/start.html index 57fceca..53394de 100644 --- a/guide/install/start.html +++ b/guide/install/start.html @@ -29,8 +29,8 @@ } Start | ZLMediaKit - - + + @@ -93,6 +93,6 @@
  • On Windows:

    ZLMediaKit/release/windows/Debug/mk_api.dll
     ZLMediaKit/release/windows/Debug/mk_api.lib
     
  • The SDK header file has detailed comments, which are generally sufficient for secondary development.

  • Test programs starting with test_

    The related code is in the ZLMediaKit/tests directory, and you can refer to the code to start the test process.

  • 8. Testing

    Please refer to this article to complete the stream push and play test.

    - + diff --git a/guide/media_server/config_file.html b/guide/media_server/config_file.html index 9e53b13..4d77be4 100644 --- a/guide/media_server/config_file.html +++ b/guide/media_server/config_file.html @@ -29,8 +29,8 @@ } Configuration File Explanation | ZLMediaKit - - + + @@ -420,6 +420,6 @@ # Telnet server listening port in debug mode port=0

    You can also refer to HTTP-HOOK-API Supported by MediaServer for configuration related to hooks.

    - + diff --git a/guide/media_server/generate_ssl_self-signed_certificate_and_test.html b/guide/media_server/generate_ssl_self-signed_certificate_and_test.html index e425063..03a0f75 100644 --- a/guide/media_server/generate_ssl_self-signed_certificate_and_test.html +++ b/guide/media_server/generate_ssl_self-signed_certificate_and_test.html @@ -29,8 +29,8 @@ } Generate SSL self-signed certificate and test | ZLMediaKit - - + + @@ -55,6 +55,6 @@

    4. Merge Public Key and Private Key

    cat server.crt server.key > ./ssl.pem
     

    5. Load the Certificate

    ./MediaServer -s ./ssl.pem
     
    图片.png
    图片.png
    - + diff --git a/guide/media_server/how_to_enable_https_related_functions.html b/guide/media_server/how_to_enable_https_related_functions.html index 5b7d369..2d50918 100644 --- a/guide/media_server/how_to_enable_https_related_functions.html +++ b/guide/media_server/how_to_enable_https_related_functions.html @@ -29,8 +29,8 @@ } How to Enable HTTPS Related Functions | ZLMediaKit - - + + @@ -58,6 +58,6 @@ 127.0.0.1 test.zlmediakit.com # Save and exit vi after making the modification
    • Open the browser and enter the HTTPS address for testing:
    图片
    图片
    • View the certificate:
    图片
    图片

    VI. Deploying in a Production Environment

    • After completing all the previous steps and passing the verification, you can proceed to deploy the application in a production environment. To do this, you need to bind the certificate domain name to the real public IP address of your cloud host:
    图片
    图片
    图片
    图片
    - + diff --git a/guide/media_server/index.html b/guide/media_server/index.html index d443833..1197382 100644 --- a/guide/media_server/index.html +++ b/guide/media_server/index.html @@ -29,12 +29,12 @@ } Media Server | ZLMediaKit - - + + - + diff --git a/guide/media_server/on-demand_push_streaming.html b/guide/media_server/on-demand_push_streaming.html index 86ddeeb..0f1064b 100644 --- a/guide/media_server/on-demand_push_streaming.html +++ b/guide/media_server/on-demand_push_streaming.html @@ -29,12 +29,12 @@ } Implement on-demand push streaming | ZLMediaKit - - + + - + diff --git a/guide/media_server/on-demand_streaming.html b/guide/media_server/on-demand_streaming.html index c1f3733..c985309 100644 --- a/guide/media_server/on-demand_streaming.html +++ b/guide/media_server/on-demand_streaming.html @@ -29,12 +29,12 @@ } Implement on-demand pull streaming | ZLMediaKit - - + + - + diff --git a/guide/media_server/play_url_rules.html b/guide/media_server/play_url_rules.html index 578b63e..43cf944 100644 --- a/guide/media_server/play_url_rules.html +++ b/guide/media_server/play_url_rules.html @@ -29,12 +29,12 @@ } Playing URL Rules | ZLMediaKit - - + +
    Skip to main content

    Playing URL Rules

    ZLMediaKitAbout 3 min

    1. Components of a URL

    Taking rtsp://somedomain.com:554/live/0?token=abcdefg&field=value as an example, this URL is divided into the following parts:

    • Protocol(scheam): RTSP protocol, default port 554
    • Virtual Host(vhost): somedomain.com. This field can be either a domain name or an IP. If it is an IP, the corresponding virtual host is __defaultVhost__
    • Server Port(port): 554. If the port number is not specified, the protocol's default port number is used
    • Application Name(app): live
    • Stream ID(streamid): 0
    • Parameters(args): token=abcdefg&field=value

    2. Stream Media Source in ZLMediaKit

    In ZLMediaKit, a stream media source is a data object that can be used for functions such as live broadcasting and stream forwarding, and is referred to as MediaSource in this project. Currently, it supports five types of stream media sources, namely RtspMediaSource, RtmpMediaSource, HlsMediaSource, TSMediaSource, FMP4MediaSource.

    Identifying a stream media source is mainly based on four elements (referred to as 4-tuples hereafter), which are:

    • Protocol(scheam)
    • Virtual Host(vhost)
    • Application Name(app)
    • Stream ID(streamid)

    RtspMediaSource supports RTSP playback, RTSP streaming, WebRTC playback, and WebRTC streaming.

    RtmpMediaSource supports RTMP streaming/playback, HTTP-FLV playback, and WS-FLV playback.

    HlsMediaSource supports HLS playback.

    TSMediaSource supports HTTP-TS playback and WS-TS playback.

    FMP4MediaSource supports HTTP-FMP4 playback and WS-FMP4 playback.

    3. Playback URLs Corresponding to the Stream Media Source

    Suppose there is a RtspMediaSource, and its 4-tuple are rtsp (RtspMediaSource is always rtsp), somedomain.com, live, and 0 Then the URLs for playing this stream media source correspond to:

    • rtsp://somedomain.com/live/0
    • rtsps://somedomain.com/live/0
    • rtsp://127.0.0.1/live/0?vhost=somedomain.com
    • rtsps://127.0.0.1/live/0?vhost=somedomain.com

    If there is a RtmpMediaSource, and its 4-tuple are rtmp (RtmpMediaSource is always rtmp), somedomain.com, live, and 0 Then the URLs for playing this stream media source correspond to:

    • rtmp://somedomain.com/live/0
    • rtmps://somedomain.com/live/0
    • rtmp://127.0.0.1/live/0?vhost=somedomain.com
    • rtmps://127.0.0.1/live/0?vhost=somedomain.com

    RTMP types of stream media sources also support live streaming through http-flv, websocket, and other protocols. The corresponding URLs are as follows:

    Note: Old code live broadcast suffix is .flv, and it has been changed to .live.flv in the new code

    • http://somedomain.com/live/0.live.flv
    • https://somedomain.com/live/0.live.flv
    • http://127.0.0.1/live/0.live.flv?vhost=somedomain.com
    • https://127.0.0.1/live/0.live.flv?vhost=somedomain.com
    • ws://somedomain.com/live/0.live.flv
    • wss://somedomain.com/live/0.live.flv
    • ws://127.0.0.1/live/0.live.flv?vhost=somedomain.com
    • wss://127.0.0.1/live/0.live.flv?vhost=somedomain.com

    Sure, ZLMediaKit typically converts RTSP and RTMP media streams to each other and also transforms them into HLS/HTTP-TS/WS-TS/HTTP-fMP4/WS-fMP4. The playback URLs are as follows:

    • HLS

      • http://somedomain.com/live/0/hls.m3u8
      • https://somedomain.com/live/0/hls.m3u8
      • http://127.0.0.1/live/0/hls.m3u8?vhost=somedomain.com
      • https://127.0.0.1/live/0/hls.m3u8?vhost=somedomain.com
    • HTTP-TS/WS-TS (with the suffix .live.ts, to resolve the conflict with HLS)

      • http://somedomain.com/live/0.live.ts
      • https://somedomain.com/live/0.live.ts
      • http://127.0.0.1/live/0.live.ts?vhost=somedomain.com
      • https://127.0.0.1/live/0.live.ts?vhost=somedomain.com
      • ws://somedomain.com/live/0.live.ts
      • wss://somedomain.com/live/0.live.ts
      • ws://127.0.0.1/live/0.live.ts?vhost=somedomain.com
      • wss://127.0.0.1/live/0.live.ts?vhost=somedomain.com
    • HTTP-fMP4/WS-fMP4 (with the suffix .live.mp4, to resolve the conflict with MP4 on-demand)

      • http://somedomain.com/live/0.live.mp4
      • https://somedomain.com/live/0.live.mp4
      • http://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
      • https://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
      • ws://somedomain.com/live/0.live.mp4
      • wss://somedomain.com/live/0.live.mp4
      • ws://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
      • wss://127.0.0.1/live/0.live.mp4?vhost=somedomain.com

    Generally speaking, all the above URLs are valid in ZLMediaKit, as ZLMediaKit converts media sources by default.

    4. Video-on-Demand URL

    ZLMediaKit typically implements video-on-demand via MP4 files, and we recommend using HTTP MP4 on-demand as it is the simplest method and the server does not need to demultiplex the MP4 files. ZLMediaKit currently also supports RTSP, RTMP, HTTP-FLV, and WebSocket-FLV MP4 on-demand. The corresponding URLs are similar to live broadcast URLs and will not be elaborated here; only the differences are discussed.

    • ZLMediaKit restricts the application name for on-demand to the default record.
    • Suppose an MP4 file is placed in the HTTP root directory record folder (www/record). Its relative path is www/record/0.mp4, then the on-demand URL would be:
      • rtsp://somedomain.com/record/0.mp4
      • rtmp://somedomain.com/record/0.mp4
      • http://somedomain.com/record/0.mp4 (This is a generic HTTP file on-demand; the server does not need to demultiplex the file)
      • http://somedomain.com/record/0.mp4.live.flv (This is HTTP-FLV live streaming, not HTTP on-demand; the server needs to demultiplex the file)
      • ws://somedomain.com/record/0.mp4.live.flv
      • http://somedomain.com/record/0.mp4.live.ts (This is HTTP-TS live streaming, not HTTP on-demand; the server needs to demultiplex the file)
      • ws://somedomain.com/record/0.mp4.live.ts
      • http://somedomain.com/record/0.mp4.live.mp4 (This is HTTP-fMP4 live streaming, not HTTP on-demand; the server needs to demultiplex the file)
      • ws://somedomain.com/record/0.mp4.live.mp4
    • If virtual hosting is enabled, then the on-demand files should be placed in www/somedomain.com/record/0.mp4.

    5. WebRTC Push/Pull

    WebRTC playback is slightly different from the methods mentioned above. The WebRTC protocol itself does not define a signaling interaction protocol, and users need to implement the sdp+icecandidate exchange logic themselves. So, WebRTC does not have a standard player, and you need to use JS or a native SDK to implement playback.

    ZLMediaKit implements the WebRTC SDP+icecandidate exchange method via HTTP POST. The interface name is /index/api/webrtc. This interface uses POST content to pass the offer sdp while passing the media source's four-tuple app stream_id in the URL query parameters. Since HTTP inherently supports vhost, there's no need to specify vhost separately. WebRTC in ZLMediaKit can be considered another representation of the RTSP protocol. Their push and playback use the same data source, which is RtspMediaSource.

    When pushing WebRTC, the HTTP POST interface for exchanging WebRTC SDP+icecandidate is similar to: http://127.0.0.1/index/api/webrtc?app=live&stream=test&type=push

    When playing WebRTC, the HTTP POST interface for exchanging WebRTC SDP+icecandidate is similar to: http://127.0.0.1/index/api/webrtc?app=live&stream=test&type=play.

    ZLMediaKit comes with a WebRTC test player/pusher. After starting ZLMediaKit, you can access it by visiting http://127.0.0.1/webrtc/ in your browser.

    Additionally, ZLMediaKit also supports playing MP4 files via WebRTC. The HTTP POST interface is similar to: http://127.0.0.1/index/api/webrtc?app=record&stream=test.mp4&type=play.

    6. URL Parameters

    ZLMediaKit recognizes the string after the question mark in the URL as parameters, which are consistent with HTTP formats. Among them, vhost is a built-in parameter supported by ZLMediaKit, which allows specifying a virtual host. URL parameters are mainly used for streaming and playback authentication. When triggering the hook API, these parameters will be submitted to the third-party business server.

    - + diff --git a/guide/media_server/playback_authentication.html b/guide/media_server/playback_authentication.html index 33ccb0f..c73f9d1 100644 --- a/guide/media_server/playback_authentication.html +++ b/guide/media_server/playback_authentication.html @@ -29,12 +29,12 @@ } Implementing Playback Authentication | ZLMediaKit - - + + - + diff --git a/guide/media_server/push_authentication.html b/guide/media_server/push_authentication.html index ba9af63..4e97199 100644 --- a/guide/media_server/push_authentication.html +++ b/guide/media_server/push_authentication.html @@ -29,12 +29,12 @@ } Implementing Push Streaming Authentication | ZLMediaKit - - + + - + diff --git a/guide/media_server/push_test.html b/guide/media_server/push_test.html index f39b265..ab3a538 100644 --- a/guide/media_server/push_test.html +++ b/guide/media_server/push_test.html @@ -29,8 +29,8 @@ } Push and Playback Testing | ZLMediaKit - - + + @@ -49,6 +49,6 @@ ^ ^ ^ ^ schema vhost app stream_id

    Playback URL

    Please refer to the play URL rules to play the aforementioned push stream.

    - + diff --git a/guide/media_server/restful_api.html b/guide/media_server/restful_api.html index 8c39a4f..95b0795 100644 --- a/guide/media_server/restful_api.html +++ b/guide/media_server/restful_api.html @@ -29,8 +29,8 @@ } RESTful API | ZLMediaKit - - + + @@ -520,6 +520,6 @@ ] }
    - + diff --git a/guide/media_server/sequence_diagram.html b/guide/media_server/sequence_diagram.html index b99ce91..f77443c 100644 --- a/guide/media_server/sequence_diagram.html +++ b/guide/media_server/sequence_diagram.html @@ -29,12 +29,12 @@ } Sequence diagram | ZLMediaKit - - + + - + diff --git a/guide/media_server/start_server.html b/guide/media_server/start_server.html index a110046..7836a38 100644 --- a/guide/media_server/start_server.html +++ b/guide/media_server/start_server.html @@ -29,8 +29,8 @@ } Starting and Stopping the Server | ZLMediaKit - - + + @@ -43,6 +43,6 @@ -s --ssl argument default:/Users/xzl/git/ZLMediaKit/release/mac/Debug/ssl.p12 optional path of the SSL certificate file or directory, supports p12/pem types -t --threads argument default:8 optional number of threads to launch for event triggering
    • Explanation:

      • -d(--daemon): Whether to start as a daemon. The daemon does only one thing: monitor whether the child process (the actual working process) has exited, and attempts to restart the child process if it has exited.
      • -l(--level): Specifies the log print level, with values ranging from 0 to 4. The higher the level, the fewer logs are printed.
      • -m(--max_day): The number of days the log files are kept. Logs created during the current run of the program will be deleted if they exceed this number of days.
      • -c(--config): Specifies the configuration file path. The configuration file is in ini format, please refer to the default configuration file of ZLMediaKit.
      • -s(--ssl): Specifies the SSL certificate path. The certificate format supports p12 and pem types, which must include both public and private keys, and the private key must not be password encrypted. If a directory is specified, all certificates under the directory will be loaded.
      • -t(--threads): Specifies the number of event-driven threads (performing major tasks) and background working threads (performing blocking tasks).
    • Startup command:

    Image
    Image
    • Notes:
        1. If you need to close the shell after starting MediaServer, you need to enter exit to exit the shell, otherwise closing the shell will also close the MediaServer.
        1. If you are going to use FFmpeg related functions, you should start the program like this: nohup ./MediaServer -d &. Otherwise, the fork FFmpeg process may cause the MediaServer process to hang.

    Hot Loading of Configuration Files

    After modifying and saving the configuration file, enter killall -1 MediaServer in the shell to make ZLMediaKit hot load the configuration file. If successful, it will print the following style of logs:

    Image
    Image

    Stopping the Server

    • If you started the server in the background, please enter killall -2 MediaServer in the shell to gracefully shut down the server (the program will automatically release resources and exit after receiving the SIGINT signal).
    • Otherwise, you can press Ctr + C to exit the program.
    • The logs when MediaServer exits are as follows:
    Image
    Image
    - + diff --git a/guide/media_server/web_hook_api.html b/guide/media_server/web_hook_api.html index cad9b86..36830d3 100644 --- a/guide/media_server/web_hook_api.html +++ b/guide/media_server/web_hook_api.html @@ -29,8 +29,8 @@ } Web Hook | ZLMediaKit - - + + @@ -647,6 +647,6 @@ "mediaServerId" : "192.168.255.10" }
  • Request parameters:

    Parameter NameParameter TypeParameter Explanation
    local_portintParameter input for openRtpServer
    re_use_portboolParameter input for openRtpServer
    ssrcuint32Parameter input for openRtpServer
    stream_idstringParameter input for openRtpServer
    tcp_modeintParameter input for openRtpServer
    mediaServerIdstringServer ID, set through the configuration file
  • - + diff --git a/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html b/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html index 0aa6264..081b411 100644 --- a/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html +++ b/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html @@ -29,8 +29,8 @@ } GB28181 SIP信令抓包 | ZLMediaKit - - + + @@ -172,6 +172,6 @@ User-Agent: Hikvision Content-Length: 0
    - + diff --git a/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html b/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html index a781171..436af18 100644 --- a/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html +++ b/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html @@ -29,12 +29,12 @@ } GB28181怎么用设备ID作为流ID | ZLMediaKit - - + +
    Skip to main content

    GB28181怎么用设备ID作为流ID

    ZLMediaKitAbout 1 min

    为了支持 RTP 流的识别(与摄像头 ID 产生关联), 必须通过 源地址ssrc本地端口号 来区分.

    但是在 issue #338 里面有开发者反馈,有些设备不支持设置 ssrc,ssrc 一直为 0.

    而源地址端口也会一直变,RTP 推流前 SIP 服务器也不知道摄像头推流端口(甚至 IP 都不知道) 那么区分流只通过源地址也不现实, 因为一个局域网内也可能多个设备, 如果 ZLMediaKit 在公网,那么这些流的 IP 是一致的,而端口是随机的,根本没法跟摄像头 ID 对应起来.

    所以为了实现 RTP 推流参数的流 ID 与摄像头 ID 产生关联,就基本只剩下本地端口号这条路了,这就意味着一个端口只能接受一个流。

    在不指定流 ID 时,ZLMediaKit 的行为跟之前完全一样,单端口支持多流,ssrc 作为 stream id。

    如果指定了该端口绑定的流 ID,那么该端口只能接收一路流。

    以下是关键代码:

    image
    image
    image
    image
    image
    image
    image
    image
    image
    image
    image
    image
    - + diff --git a/guide/protocol/gb28181/index.html b/guide/protocol/gb28181/index.html index c6a1dcb..837df55 100644 --- a/guide/protocol/gb28181/index.html +++ b/guide/protocol/gb28181/index.html @@ -29,12 +29,12 @@ } Gb28181 | ZLMediaKit - - + + - + diff --git a/guide/protocol/gb28181/push_streaming.html b/guide/protocol/gb28181/push_streaming.html index 22428b4..0e3cd59 100644 --- a/guide/protocol/gb28181/push_streaming.html +++ b/guide/protocol/gb28181/push_streaming.html @@ -29,14 +29,14 @@ } GB28181推流 | ZLMediaKit - - + +
    Skip to main content

    GB28181推流

    ZLMediaKitAbout 3 min

    介绍

    ZLMediaKit 支持 GB28181 的 ps-rtp 推流,支持的编码格式分别为 h264/h265/aac/g711/opus。 在收到 GB28181 推流后,ZLMediaKit 会依次做以下事情:

    • rtp 排序去重。
    • rtp 解析成 ps 或 ts。
    • ps 或 ts 解析成h264/h265/aac/g711/opus
    • 输入到复用器,生成 rtsp/rtmp/ts/fmp4 等格式,以便转换成其他协议或容器。

    简单使用

    ZLMediaKit 默认开启 10000 端口用于接收 UDP/TCP 的 GB28181 推流,由于国标推流不好测试,ZLMediaKit 同时也支持 rtp_mpegts 推流,代码会自适应判断是否为 ps 还是 ts。 所以如果大家没有摄像头的情况下,可以用 FFmpeg 简单测试,基本上体验跟国标推流并无二致。

    • ffmpeg 推流命令:

       ffmpeg -re -i www/record/robot.mp4 -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000
       
    • MediaServer 收到推流后的日志:

      图片
      图片

      上图中,这个推流的 rtp ssrc 为 BFC2C622(16 进制打印),这个流的 app 为rtp, stream_id 为BFC2C622,您可以根据wiki来组合成 url 并播放这个流。

    需要指出的是,国标推流的 app 固定为 rtp,你只能通过代码来修改它,stream_id 为 rtp 流的 ssrc,这个是随机的,在 FFmpeg 中貌似没法控制。

    另外,每次推流时,请更换 ssrc,否则 ZLMediaKit 发现推流端 ip 和端口变化后,会直接丢弃 rtp 包(现象如此issueopen in new window);这样做的目的是为了防止两个设备使用同一个 ssrc 推流时互相干扰。

    高阶使用

    在推流给 10000 端口时,您可能发现有个缺陷,就是 stream_id 是 ssrc,比较抽象,可能还没法控制。

    那么我们能否自定义 stream_id? 答案是肯定的,ZLMediaKit 通过restful api可以动态开启国标收流端口(同时支持 udp/tcp 模式)。

    在使用 openRtpServer 接口动态开启国标收流端口后,这个端口只能产生一个流,也就是说,一个摄像头需要一个服务器端口用于接收国标推流。

    • 以下是演示范例(postman 工具调用 openRtpServer 接口创建随机端口):
    图片
    图片
    • 然后启动 FFmpeg 推流
     ffmpeg -re -i www/record/robot.mp4 -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:50077
     
    • 以下是推流后注册的服务器日志

      图片
      图片
    • 需要指出的是,如果 openRtpServer 接口创建的端口一直没收到流(或者解析不出流),那么会自动关闭和释放。

    调试文件生成

    如果你的 MediaServer 能收到国标推流,但是未出现媒体注册相关日志,那么有可能是流有些异常,你可以修改配置文件rtp_proxy.dumpDir指定调试文件导出目录, 这样 ZLMediaKit 会把国标流导出到该文件夹,就像这样:

    图片
    图片

    你可以直接用 ffplay 播放mp2/video后缀的文件rtp后缀的文件,你可以用测试工具test_rtp调试,或者你可以把它分享给其他人帮你分析原因。

    让 ZLMediaKit 往其他国标服务器推流

    你可以使用restful api让 ZLMediaKit 生成国标流并往其他服务器推送,支持其他任何已注册的流转国标流。

    • postman 调用 startSendRtp 接口推送国标流:
    图片
    图片
    图片
    图片
    • 上图中是推送国标流给自己,当然你也可以推送给其他服务器,支持 udp/tcp 方式推流。

    性能

    GB28181 的推流性能测试,请参考:#961open in new window

    丢包问题调试

    如果在测试 GB28181 UDP 推流时,频繁打印以下日志:

    图片
    图片

    请查看此issueopen in new window,特别提示,wifi 情况下,由于无线网络干扰严重,丢包问题很可能确实是网络质量差导致的。

    相关文章推荐阅读

    - + diff --git a/guide/protocol/index.html b/guide/protocol/index.html index 3f92cbf..3d53248 100644 --- a/guide/protocol/index.html +++ b/guide/protocol/index.html @@ -29,12 +29,12 @@ } Protocol | ZLMediaKit - - + +
    Skip to main content

    Protocol

    ZLMediaKitLess than 1 minute

    Catalog

    No catalog

    - + diff --git a/guide/protocol/srt/index.html b/guide/protocol/srt/index.html index b939511..5a8d5b4 100644 --- a/guide/protocol/srt/index.html +++ b/guide/protocol/srt/index.html @@ -29,12 +29,12 @@ } SRT | ZLMediaKit - - + +
    Skip to main content

    SRT

    ZLMediaKitLess than 1 minute

    feature

    • NACK support
    • listener support
    • push stream payload must ts
    • pull stream payload is ts
    • protocol implement referenceopen in new window
    • version support (>=1.3.0)
    • fec and encrypted not support

    usage

    zlm get vhost,app,streamid and push or play by streamid of srt like this #!::key1=value1,key2=value2,key3=value4......

    h and r is special key,to get vhost app streamid, if h not exist ,vhost is default value

    m is special key, to judge is push or pull, if value is publish the mode is push,otherwise is play, if m not exist, mode is play

    other key and m ,can use by webhook to auth for play or push

    like: #!::h=zlmediakit.com,r=live/test,m=publish

    vhost = zlmediakit.com

    app = live

    streamid = test

    mode is push

    • OBS push stream url

      srt://192.168.1.105:9000?streamid=#!::r=live/test,m=publish

    • ffmpeg push

      ffmpeg -re -stream_loop -1 -i test.ts -c:v copy -c:a copy -f mpegts srt://192.168.1.105:9000?streamid=#!::r=live/test,m=publish

    • ffplay pull

      ffplay -i srt://192.168.1.105:9000?streamid=#!::r=live/test

    • vlc not support ,because can't set stream id referenceopen in new window

    - + diff --git a/guide/protocol/webrtc/index.html b/guide/protocol/webrtc/index.html index 7c938df..35e3cca 100644 --- a/guide/protocol/webrtc/index.html +++ b/guide/protocol/webrtc/index.html @@ -29,12 +29,12 @@ } Webrtc | ZLMediaKit - - + + - + diff --git a/guide/protocol/webrtc/webrtc_compilation_and_use.html b/guide/protocol/webrtc/webrtc_compilation_and_use.html index 84be40d..ac067d3 100644 --- a/guide/protocol/webrtc/webrtc_compilation_and_use.html +++ b/guide/protocol/webrtc/webrtc_compilation_and_use.html @@ -29,8 +29,8 @@ } Compiling and Using WebRTC | ZLMediaKit - - + + @@ -93,6 +93,6 @@

    Testing

    The latest zlmediakit source code comes with a valid SSL certificate default.pem, corresponding to the domain name default.zlmediakit.com, which resolves to the IP address 127.0.0.1. To start testing, open https://default.zlmediakit.com/webrtc/open in new window in your browser. Please start streaming first before testing playback. If WebRTC playback is not working, please refer to this issueopen in new window.

    Troubleshooting

    Q&A(Playback Issues) ?

    • OBS streaming and RTC playback stuttering?

      WebRTC H.264 does not support B-frames, so B-frames need to be removed when using FFmpeg. You can add the -bf 0 parameter or specify the H.264 profile as baseline.

    • RTSP streaming, unsuccessful RTC playback?

      Set directProxy in the zlm configuration file to 0 for RTSP streaming.

    • WebRTC video or audio not playing?

      WebRTC in the web client supports encoding formats such as H.264, opus/48000/2, pcma/8000, pcmu/8000. Check if the encoding format is correct. Usually, the audio is not supported, and you need to use the transcode branch for transcoding (video does not require transcoding).

    - + diff --git a/guide/protocol/webrtc/webrtc_signaling_interaction_format.html b/guide/protocol/webrtc/webrtc_signaling_interaction_format.html index 087dec6..f1c0be7 100644 --- a/guide/protocol/webrtc/webrtc_signaling_interaction_format.html +++ b/guide/protocol/webrtc/webrtc_signaling_interaction_format.html @@ -29,8 +29,8 @@ } WebRTC Signaling Interaction Format | ZLMediaKit - - + + @@ -156,6 +156,6 @@ }
    - + diff --git a/guide/sdk/how_to_create_a_live_steam.html b/guide/sdk/how_to_create_a_live_steam.html index d0e8834..db1de5f 100644 --- a/guide/sdk/how_to_create_a_live_steam.html +++ b/guide/sdk/how_to_create_a_live_steam.html @@ -29,12 +29,12 @@ } How to create a live stream | ZLMediaKit - - + +
    Skip to main content

    How to create a live stream

    ZLMediaKitLess than 1 minute

    How to create a live steam
    How to create a live steam
    - + diff --git a/guide/sdk/index.html b/guide/sdk/index.html index 348a6d7..76174cd 100644 --- a/guide/sdk/index.html +++ b/guide/sdk/index.html @@ -29,12 +29,12 @@ } SDK API | ZLMediaKit - - + + - + diff --git a/index.html b/index.html index 12313b1..858916b 100644 --- a/index.html +++ b/index.html @@ -29,12 +29,12 @@ } Home | ZLMediaKit - - + +
    Skip to main content
    ZLMediaKit

    ZLMediaKit

    An high-performance, enterprise-level streaming media service framework based on C++11.

    How to Use 💡Docs

    Features

    Features

    Cross-platform streaming media solution for mobile and embedded systems.

    Versatile Protocol Support

    Developed with C++11, avoiding the use of raw pointers, providing stable and reliable code with superior performance

    Supports multiple protocols

    Supports multiple protocols(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4/WebRTC), and protocol conversion

    High Concurrency and Performance

    Developed with multiplexing/multithreading/asynchronous network IO models, providing excellent concurrency performance and supporting massive client connections.

    Proven Stability and Production Usage

    The code has undergone extensive stability and performance testing, and has been extensively used in production environments.

    Cross-Platform Compatibility

    Supports all major platforms, including linux, macos, ios, android, and windows.

    Multiple Instruction Set Platforms

    Supports multiple instruction set platforms, such as x86, arm, risc-v, mips, Loongson, and Shenwei.

    Ultra-Fast Startup and Low Latency

    Provides ultra-fast startup, extremely low latency (within 500 milliseconds, and can be as low as 100 milliseconds), and excellent user experience.

    C API for Integration

    Provides a comprehensive standard C API that can be used as an SDK or called by other languages.

    Complete MediaServer Solution

    Provides a complete MediaServer server, which can be deployed directly as a commercial server without additional development.

    RESTful API and Web Hook

    Provides a complete restful api and web hook, supporting rich business logic.

    Bridging Video Surveillance

    Bridges the video surveillance protocol stack and the live streaming protocol stack, and provides comprehensive support for RTSP/RTMP.

    Full Support for Codecs

    Fully supports H265/H264/AAC/G711/OPUS.

    Advanced Functionality

    Provides complete functions, including clustering, on-demand protocol conversion, on-demand push/pull streams, playback before publishing, and continuous publishing after disconnection.

    Ultimate Performance and Scalability

    Provides ultimate performance, supporting 10W-level players on a single machine and 100Gb/s-level IO bandwidth capability.

    Exclusive Features

    Fully supports IPv6 networks and provides ultimate user experience with exclusive features.

    - + diff --git a/more/collaborative_projects.html b/more/collaborative_projects.html index a0d7df4..9e62e49 100644 --- a/more/collaborative_projects.html +++ b/more/collaborative_projects.html @@ -29,12 +29,12 @@ } Collaborative Projects | ZLMediaKit - - + +
    Skip to main content

    Collaborative Projects

    ZLMediaKitLess than 1 minute

    - + diff --git a/more/contact.html b/more/contact.html index 39bca93..611667b 100644 --- a/more/contact.html +++ b/more/contact.html @@ -29,12 +29,12 @@ } Contact US | ZLMediaKit - - + +
    Skip to main content

    Contact US

    ZLMediaKitLess than 1 minute

    Contact Information

    • Email: 1213642868@qq.com (For project-related or streaming media-related questions, please follow the issue process. Otherwise, we will not reply to emails.)

    • QQ groups: Both QQ groups with a total of 4000 members are full. We will not create new QQ groups in the future. Users can join the Knowledge Planetopen in new window to ask questions and support this project.

    • Follow WeChat Official Account:

      图片
      图片
    - + diff --git a/more/index.html b/more/index.html index d5438a3..8b96ddb 100644 --- a/more/index.html +++ b/more/index.html @@ -29,12 +29,12 @@ } More | ZLMediaKit - - + +
    Skip to main content

    More

    ZLMediaKitLess than 1 minute

    Catalog

    No catalog

    - + diff --git a/more/license.html b/more/license.html index 1b35ebe..895f054 100644 --- a/more/license.html +++ b/more/license.html @@ -29,12 +29,12 @@ } License | ZLMediaKit - - + +
    Skip to main content

    License

    ZLMediaKitLess than 1 minute

    The self-owned code of this project is licensed under the permissive MIT License and can be freely applied to commercial and non-commercial projects while retaining copyright information. However, this project also uses some scattered open source code , please replace or remove it for commercial use. Any commercial disputes or infringement caused by using this project have nothing to do with the project and developers and shall be at your own legal risk. When using the code of this project, the license agreement should also indicate the license of the third-party libraries that this project depends on.

    - + diff --git a/more/thanks.html b/more/thanks.html index 5be3f9f..41de3c0 100644 --- a/more/thanks.html +++ b/more/thanks.html @@ -29,12 +29,12 @@ } Acknowledgments | ZLMediaKit - - + +
    Skip to main content

    Acknowledgments

    ZLMediaKitAbout 2 min

    Special Thanks

    This project uses the media-serveropen in new window library developed by Lao Chenopen in new window. The reuse and de-multiplexing of ts/fmp4/mp4/ps container formats in this project depend on the media-server library. Lao Chen has provided invaluable help and support multiple times in implementing many functions of this project, and we would like to express our sincere gratitude to him!

    Acknowledgments

    Thanks to all those who have supported this project in various ways, including but not limited to code contributions, problem feedback, and donations. The following list is not in any particular order:

    老陈open in new windowGemfieldopen in new window南冠彤open in new window凹凸慢open in new windowchenxiaoleiopen in new window史前小虫open in new window清涩绿茶open in new window3503207480open in new windowDroidChowopen in new window阿塞open in new window火宣open in new windowγ 瑞 γ ミopen in new windowlinkingvisionopen in new window茄子open in new window好心情浮沉open in new windowXiaofeng Wangopen in new windowdoodoocoderopen in new windowqingciopen in new windowswwheiheiopen in new windowKKKKK5Gopen in new windowZhou WeiminJim Jinopen in new window西瓜丶MingZhuLiuopen in new windowchengxiaoshengopen in new windowbig pandatanningzhongopen in new windowhctym1995open in new windowhewenyuanopen in new windowsunhuimirsKevin ChengLiu Jiangalongopen in new windowqingcilyg1949zhlong大裤衩droid.chow陈晓林open in new windowCharleyWangHZopen in new windowJohnnyopen in new windowDoubleX69open in new windowlawrencehjopen in new windowyangkunXinghua Zhaohejilinopen in new windowrqb500open in new windowAlexopen in new windowDw9open in new window明月惊鹊cgmhejilinalexliyu7352cgmhaorui wangopen in new windowjoshuafcJayChen0519open in new windowzxwangckerWuPengstarryopen in new windowmtdxcopen in new window胡刚风open in new windowzhao85open in new windowdreamisdreamopen in new windowdingcanopen in new windowHaibo Chenopen in new windowLeonopen in new windowcustompalopen in new windowPioLingopen in new windowKevinZangopen in new windowgongluckopen in new windowa-ucontrolopen in new windowTalusLopen in new windowahaooahazopen in new windowTempoTianopen in new windowDerek Liuopen in new windowljx0305open in new window朱如洪 open in new windowlijinopen in new windowPioLingopen in new windowBackT0TheFutureopen in new windowperaraopen in new windowcodeRATnyopen in new windowdengjfzhopen in new window百鸣open in new windowfruit Juiceopen in new windowtbagoopen in new windowLuoshopen in new windowlinxiaoyan87open in new windowwakenopen in new windowDeepslientopen in new window

    Also thank to JetBrains for their support for open source project, we developed and debugged zlmediakit with CLion:

    JetBrainsopen in new window
    JetBrains
    - + diff --git a/more/use_cases.html b/more/use_cases.html index a347f1e..4901fe0 100644 --- a/more/use_cases.html +++ b/more/use_cases.html @@ -29,12 +29,12 @@ } Use Cases | ZLMediaKit - - + +
    Skip to main content

    Use Cases

    ZLMediaKitLess than 1 minute

    This project has received recognition from numerous companies and individual developers. According to the author's incomplete statistics, these companies include well-known internet giants, leading cloud service providers in China, several renowned AI unicorns, as well as a range of small and medium-sized companies. Users can endorse this project by pasting their company name and relevant project introduction on the issueopen in new window page. We appreciate your support!

    - + diff --git a/reference/development_log/hls_high_performance_journey.html b/reference/development_log/hls_high_performance_journey.html index 1af3470..6de3727 100644 --- a/reference/development_log/hls_high_performance_journey.html +++ b/reference/development_log/hls_high_performance_journey.html @@ -29,8 +29,8 @@ } zlmediakit的hls高性能之旅 | ZLMediaKit - - + + @@ -117,6 +117,6 @@ return ret; }

    通过本次优化,zlmediakit 的 hls 服务有比较大的性能提升,性能上限大概提升到了 6K 左右(压测途中还发现拉流压测客户端由于 mktime 函数导致的性能瓶颈问题,在此不展开描述),但是还是离预期有些差距:

    图片.png
    图片.png

    小插曲: mktime 函数导致拉流压测工具性能受限

    图片.png
    图片.png

    在开启共享 mmap 后,发现性能上升到 6K 并发时,还是上不去;于是我登录服务器使用gdb -p调试进程,通过info threads 查看线程情况,发现大量线程处于阻塞状态,这也就是为什么 zlmediakit 占用 cpu 不高,但是并发却上不去的原因:

    图片.png
    图片.png

    为什么这么多线程都处于互斥阻塞状态?zlmediakit 在使用互斥锁时,还是比较注意缩小临界区的,一些复杂耗时的操作一般都会放在临界区之外;经过一番思索,我才恍然大悟,原因是:

    压测客户端由于是单进程,共享同一份 hls cookie,在访问 zlmediakit 时,这些分布在不同线程的请求,其 cookie 都相同,导致所有线程同时大规模操作同一个 cookie,而操作 cookie 是要加锁的,于是这些线程疯狂的同时进行锁竞争,虽然不会死锁,但是会花费大量的时间用在锁等待上,导致整体性能降低。

    虽然在真实使用场景下,用户 cookie 并不一致,这种几千用户同时访问同一个 cookie 的情况并不会存在,但是为了考虑不影响 hls 性能压测,也为了杜绝一切隐患,针对这个问题,我于是对 http/hls 的 cookie 机制进行了修改,在操作 cookie 时,不再上锁:

    图片.png图片.png

    之前对 cookie 上锁属于过度设计,当时目的主要是为了实现在 cookie 上随意挂载数据。

    优化之旅三:hls m3u8 文件内存化

    经过上面两次优化,zlmediakit 的 hls 并发能力可以达到 8K 了,但是当 hls 播放器个数达到在 8K 左右时,zlmediakit 的 ts 切片下载开始超时,可见系统还是存在性能瓶颈,联想到在优化 cookie 互斥锁时,有线程处于该状态:

    图片.png
    图片.png

    所以我严重怀疑原因是 m3u8 文件不能使用 mmap 优化(而是采用 fread 方式)导致的文件 io 性能瓶颈问题,后面通过查看函数调用栈发现,果然是这个原因。

    由于 m3u8 是易变的,使用 mmap 映射时,如果文件长度发生变化,会导致触发 SIGBUS 的信号,查看多方资料,此问题无解。所以最后只剩下通过 m3u8 文件内存化来解决,于是我修好了 m3u8 文件的 http 下载方式,改成直接从内存获取:

    图片.png
    图片.png

    结果:性能爆炸

    通过上述总共 3 大优化,我们在压测 zlmediakit 的 hls 性能时,随着一点一点增加并发量,发现 zlmediakit 总是能运行的非常健康,在并发量从 10K 慢慢增加到 30K 时,并不会影响 ffplay 播放的流畅性和效果,以下是压测数据:

    压测 16K http-hls 播放器时,流量大概 7.5Gb/s: (大概需要 32K 端口,由于我测试机端口不足,只能最大压测到这个数据)

    图片.png图片.png图片.png

    后面用户再压测了 30k https-hls 播放器:

    图片.png图片.png

    后记:用户切生产环境

    在完成 hls 性能优化后,该用户把所有北美节点的 hls 流量切到了 zlmediakit,

    图片.png图片.png

    状况又起:

    今天该用户又反馈给我说 zlmediakit 的内存占用非常高,在 30K hls 并发时,内存占用 30+GB:

    图片.png
    图片.png

    但是用 zlmediakit 的getThreadsLoad接口查看,却发现负载很低:

    图片.png
    图片.png

    同时使用 zlmediakit 的getStatistic接口查看,发现BufferList对象个数很高,初步怀疑是由于网络带宽不足导致发送拥塞,内存暴涨,通过询问得知,公网 hls 访问,确实存在 ts 文件下载缓慢的问题:

    图片.png
    图片.png

    同时让他通过局域网测试 ts 下载,却发现非常快:

    图片.png
    图片.png

    后来通过计算,发现确实由于网络带宽瓶颈每个用户积压一个 Buffer 包,而每个 Buffer 包用户设置的为 1MB,这样算下来,30K 用户,确实会积压 30GB 的发送缓存:

    图片.png
    图片.png
    图片.png
    图片.png
    图片.png
    图片.png

    结论

    通过上面的经历,我们发现 zlmediakit 已经足以支撑 30K/50Gb 级别的 https-hls 并发能力, 理论上,http-hls 相比 https-hls 要少 1 次内存拷贝,和 1 次加密,性能应该要好很多;那么 zlmediakit 的性能上限在哪里?天知道!毕竟,我已经没有这么豪华的配置供我压测了;在此,我们先立一个保守的 flag 吧:

    单机 100K/100Gb 级别 hls 并发能力。

    那其他协议呢? 我觉得应该不输 hls。

    - + diff --git a/reference/development_log/index.html b/reference/development_log/index.html index 0b11bc4..3691dec 100644 --- a/reference/development_log/index.html +++ b/reference/development_log/index.html @@ -29,12 +29,12 @@ } Development log | ZLMediaKit - - + + - + diff --git a/reference/development_log/rtsp_performance_optimization.html b/reference/development_log/rtsp_performance_optimization.html index 2191c02..59c01e5 100644 --- a/reference/development_log/rtsp_performance_optimization.html +++ b/reference/development_log/rtsp_performance_optimization.html @@ -29,12 +29,12 @@ } RTSP性能优化 | ZLMediaKit - - + +
    Skip to main content

    RTSP性能优化

    ZLMediaKitAbout 3 min

    概述

    在最近 ZLMediaKit 的一次提交中,我对 rtsp 服务器的性能做了一次改进open in new window,本次改进中,核心的思想是:

    • 缓存时间戳相同的 RTP 包(意味着是同一帧数据),作为一个数据包进行分发

    理论上,这样做可以大大减少多线程分发时线程切换次数、多余发送逻辑代码的执行以及系统调用次数,预期在不增加播放延时的情况下能大幅提高 rtsp 服务器的性能.

    测试

    为了验证本次优化的预期目标,我在 linux 服务器上做了一系列的测试对比,以下是测试环境:

    • 操作系统:ubuntu16 desktop 64bit
    • cpu: 4 核心的 Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
    • 编译器:gcc 5.4.0,开启 Release 编译(cmake -DCMAKE_BUILD_TYPE=Release)
    • malloc 库:连接 jemalloc
    • 网络: 127.0.0.1 本地循环网络
    • 测试客户端:test_benchmarkopen in new window
    • 测试服务器:MediaServeropen in new window
    • 测试码流:4K H264 的 RTSP 流,通过 MP4 Rtsp 点播实现,文件 200 秒,190MB,码流大概 8Mb/s
    • 测试方法:通过 test_benchmark 播放 500 路 RTSP 4K 点播,总码流大概 4Gb/s,分别测试新老版本的 MediaServer 的进程。

    测试数据

    • 启动的播放器个数: image
    • 实时码流: image

    性能对比

    老版本数据

    • cpu 使用率(浮动比较大,最高 200%+): imageimage

    • 性能分析(perf top): image

    • 总结 : cpu 占用主要发生在内核态的系统调用(syscall)、tcp_sendmsg、内存拷贝。

    新版本数据:

    • cpu 使用率(浮动比较小,50%以下): imageimage

    • 后面我又测试了 2000 个播放器,掉了一批,最后稳定在 1800 个左右,实时流量 17.5Gb/s(单向)左右,cpu 占用 300%左右: imageimageimageimage

    • 性能分析(perf top): image

    • 总结 : cpu 占用主要发生在内核态内存拷贝,系统调用(syscall)、tcp_sendmsg 的开销很小。

    总结

    本次性能测试基本证明了预想,性能提升大概有 4 倍以上。 本机器为 i7-4790 4 核心 8 线程的,所以 cpu 占用率最高为 800%,现在 ZLMediaKit 在上面支撑 500 个 4K RTSP 播放器,实时流量大概 4Gb/s 时 cpu 使用率 50%不到,通过简单换算,该 cpu 可以支撑大概 8000 个 4K RTSP 播放器,实时流量最高能达到 64Gb/s,考虑到性能折损,我们保守估计可以支持 6000 个 4K RTSP 播放器,50Gb/s 的流量。

    最后

    在 ZLMediaKit 流媒体服务器中,通过智能指针引用计数的方式实现了多线程的数据分发,不管分发多少次,数据拷贝次数都是固定的,所以 ZLMediaKit 可以达到如此夸张的性能参数,但是在测试中,我们也能发现,性能占用已经大部分发生在内核态了,应用层的 cpu 占用反而不是瓶颈了。这是因为在内核态,写 socket 缓存需要做内存拷贝,随着播放器个数的增加,内存拷贝会越来越多,此时性能瓶颈不再是应用层,而是由于内存带宽瓶颈导致的内核性能瓶颈。

    - + diff --git a/reference/documents/exclusive_features.html b/reference/documents/exclusive_features.html index 985c756..e451183 100644 --- a/reference/documents/exclusive_features.html +++ b/reference/documents/exclusive_features.html @@ -29,8 +29,8 @@ } Exclusive Features of ZLMediakit | ZLMediaKit - - + + @@ -109,6 +109,6 @@ # The individual server timeout should not exceed the general.maxStreamWaitMS configuration. timeout_sec=15

    ZLMediakit supports multiple ways of pulling streams, including rtsp/rtmp/hls/http-ts/http-flv. The methods are diverse and rich, and the origin servers are not divided into primary and backup. Load balancing of the origin servers is achieved using the round-robin method. It should be noted that since ZLMediakit has long supported on-demand streaming for HLS, its edge stations also support the HLS protocol (in fact, they support any protocol supported by ZLMediakit), which is not available in SRS.

    Furthermore, it should be noted that ZLMediakit supports both RTSP and WebRTC, both of which are based on RTP. Internally in ZLMediakit, they can be interconnected without the need for protocol conversion and complex multiplexing/demultiplexing logic. This makes it possible to use ZLMediakit for large-scale, low-latency WebRTC live streaming. Compared to traditional CDN based on RTMP, RTSP is more suitable as the underlying transport protocol for WebRTC. Developers do not need to deal with cumbersome multiplexing/demultiplexing logic and can smoothly achieve the interconversion between RTSP and WebRTC.

    6. WebRTC Single Port, Multi-threading, and Connection Migration Support

    • Pain points: Webrtc servers that support multi-threading do not support single port, and those that support single port do not support multi-threading (and may not support connection migration).

    • Scenario introduction:

      Since WebRTC transmission is based on the UDP protocol, traditional WebRTC servers operate in multi-port mode, such as Janus and mediasoup. This brings great pain to deployment and management. Moreover, due to the limited number of ports (the theoretical limit is over 60,000), each WebRTC client occupies 1 to 4 ports. Limited by the number of ports, a WebRTC server can host a maximum of 10,000 to 60,000 clients.

      On the other hand, WebRTC servers that support single port (such as SRS) do not support multi-threading. Due to the much higher computational complexity (encryption/decryption) of WebRTC compared to live streaming, single-threaded performance is often insufficient for WebRTC applications.

      ZLMediakit proposes the best solution for these pain points:

      • Support deployment on a single UDP port, where one UDP port handles all clients.
      • Support multi-threading on a single UDP port. Each client is assigned a unique fd through repeated bind/connect operations, and the fds are evenly distributed among different threads.
      • When a user's network migrates (e.g., switching from Wi-Fi to 4G), the user is locked using STUN packets, enabling seamless connection migration without interrupting the user experience.

      ZLMediakit is the only open-source solution that combines all three of the above features.

      Note: For how to solve the thread safety issue during WebRTC single-port connection migration and multi-threaded connection migration, please watch this videoopen in new window

    7. Long Connection for HLS Playback

    ZLMediakit achieves long connection for HLS playback through cookie tracking technology. Based on this feature, ZLMediakit's HLS server has the following exclusive features:

    • HLS playback authentication, and no need for re-authentication during playback.
    • HLS playback traffic statistics, which can track the total traffic consumption during playback.
    • On-demandI'm sorry, but I couldn't find any information about a specific ZLMediakit feature called "pull stream URL of the origin server." ZLMediakit is an open-source streaming media server that provides various features for streaming protocols like RTSP, RTMP, HLS, and WebRTC.

    If you have any specific questions about ZLMediakit or need information on a different feature, please let me know, and I'll do my best to assist you.

    - + diff --git a/reference/documents/high_concurrency_implementation_principle.html b/reference/documents/high_concurrency_implementation_principle.html index c2c0618..217eb9c 100644 --- a/reference/documents/high_concurrency_implementation_principle.html +++ b/reference/documents/high_concurrency_implementation_principle.html @@ -29,8 +29,8 @@ } ZLMediaKit高并发实现原理 | ZLMediaKit - - + + @@ -374,6 +374,6 @@ } }

    采用右值引用拷贝

    ZLMediaKit 中也尽量使用右值引用拷贝来规避内存拷贝,这里就不展开论述。

    其他特性

    优化及时推流打开率

    有些应用场景需要设备端开始推流,然后 APP 立即观看的应用场景。传统的 rtmp 服务器对此应用场景是未作任何优化的,如果 APP 播放请求在推流尚未建立之前到达,那么将导致 APP 播放失败,这样视频打开成功率就会降低,用户体验很不好。

    ZLMediaKit 在针对该应用场景时,做了特别的优化;实现原理如下:

    1、收到播放请求时,立即检查是否已经存在的媒体源,如果存在返回播放成功,否则进入第 2 步。

    2、监听对应的媒体源注册事件,同时添加播放超时定时器,并且不回复播放器然后返回。逻辑将进入第 3 步或第 4 步。

    3、媒体源注册成功,那么立即响应播放器播放成功,同时删除播放超时定时器,并移除媒体注册事件监听。

    4、超时定时器触发,响应播放器播放失败,同时删除播放超时定时器,并移除媒体注册事件监听。

    使用 ZLMediaKit 作为流媒体服务器,可以 APP 播放请求和设备端推流同时进行。

    性能测试对比

    目前对 ZLMediaKit 做了一些性能测试,查看地址:benchmark

    在测试时发现,ZLMediaKit 在负载比较低时,其单线程性能大概是 SRS 的 50%,单条线程大概能支撑 5K 个播放器,导致这个性能差距的主要原因时由于采用本地轮回网络,网络状况为理想,那么 sendmsg 批量发送将不起优化左右;而 SRS 使用了合并写特性(就是缓存 300 毫秒左右的数据后一次性发送),可以减少系统调用次数;如果负载比较高,以及真实网络环境下,ZLMediaKit 单线程性能应该跟 SRS 差距更小,我们在测试报告中也能发现在客户端比较多时,ZLMediaKit 单线程线程性能有比较大的提升。

    由于 ZLMediaKit 支持多线程,可以充分利用多核 CPU 的性能,在多核服务器上,CPU 已经不再是性能瓶颈,为了减少直播延时,目前合并写特性是默认关闭的,可以通过配置文件开启。

    - + diff --git a/reference/documents/index.html b/reference/documents/index.html index 9d27788..65e5487 100644 --- a/reference/documents/index.html +++ b/reference/documents/index.html @@ -29,12 +29,12 @@ } Related documents | ZLMediaKit - - + + - + diff --git a/reference/documents/introduction_to_streaming_media_related_technologies.html b/reference/documents/introduction_to_streaming_media_related_technologies.html index c32281f..1a19df8 100644 --- a/reference/documents/introduction_to_streaming_media_related_technologies.html +++ b/reference/documents/introduction_to_streaming_media_related_technologies.html @@ -29,12 +29,12 @@ } 流媒体相关技术介绍 | ZLMediaKit - - + +
    Skip to main content

    流媒体相关技术介绍

    ZLMediaKitAbout 10 min

    1、流媒体简介

    流媒体(streaming media)是指将一连串的媒体数据压缩后,经过网络分段发送数据,在网上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送;如果不使用此技术,就必须在使用前下载整个媒体文件,这对于实时性要求比较高的场景而言,显然是不现实的,所以流媒体技术为此孕育而生。

    传统的视频监控、IPTV,以及这几年兴起的视频直播、网络授课都属于流媒体的范畴,从广义上来讲,视频通话,视频会议也属于流媒体。

    2、视频监控

    2.1 传统解决方案的现状和挑战

    视频监控是流媒体技术传统的应用场景,在政府、企业以及现在逐渐流行的个人消费市场有着广泛的应用。特别是近几年来,国内各大城市逐步推进平安城市项目进程,在安防、交通等领域,视频监控市场规模愈发壮大。而且随着室内家居摄像头、车载记录仪的普及,视频监控可以说在人们的生活中无处不在。

    传统的视频监控解决方案主要建立在基于 LAN 的网络、服务器、录像机和摄像机的基础之上。这些高度复杂的解决方案具有很高的施工和维护成本, 因为传统基础设施价格高昂,并且需要时间来规划、实施和维护。传统的视频监控解决方案也不好扩容维护,对于用户而言,也不友好,操作使用局限在局域网中,已经难以适合新时代的发展。

    2.2 发展趋势

    由于一些互联网企业的入局,视频监控行业也在经历一系列的变局,譬如小米摄像头、360 水滴摄像头的流行,也鞭策着传统的视频监控行业相关企业的变革(譬如海康威视推出的萤石云平台),虽然目前这些变革多数还局限于个人消费市场,但从长远来看,视频监控上云,是未来发展的大趋势。

    基于云的视频监控解决方案由于其高质量、可靠性、安全性、便捷性以及较低的部署和维护成本而越来越受到人们的青睐。

    预计未来视频监控,将像目前流行的网络直播一样方便,用户安装好摄像头后,接入网络即可视频上云。使用者在浏览器或 APP 即可查看所有摄像头的实时监控以及历史录像,通过 APP 或绑定的手机号码,可以实时接收摄像头发送的事件通知(譬如入侵事件)。

    2.3 技术难点

    由于历史原因,传统的视频监控行业技术栈多采用私有协议 SDK、onvif/rtsp 等协议栈。这些协议目前对浏览器而言都不友好,在以前 IE 浏览器还流行的时期,可以通过 ocx 插件的方式来对接这些协议,但是随着 IE 的没落以及目前流行的 chrome、火狐浏览器对原生插件的愈加不友好,通过插件的方式来实现访问监控视频的方式将愈发困难。如果要在 chrome、火狐浏览器上访问监控视频,目前有以下几种方案可行:

    • rtmp

      目前主流的 chrome 和火狐浏览器都还支持 flash 插件,所以目前在浏览器上还可以通过 rtmp 方式来访问监控视频。但是由于随着 html5 的普及以及 flash 的停止更新,预计可预见的未来,rtmp 技术将随着 flash 一起行将就木(谷歌宣布 chrom 浏览器 2020 年 12 月将不再支持 flash player)。

    • http-flv

      http-flv 直播的方式是一种比较新颖的方式,该技术基于 html5,可以通过无插件的方式实现视频直播,而且由于 rtmp 负载可以平滑的转换成 http-flv 协议,所以正在逐渐取代 rtmp 成为新的直播技术标准,目前各大直播网站(譬如斗鱼直播,bilibili 等)也陆续从 rtmp 切换成该技术。 但是由于浏览器的限制,不能同时打开过多(chrome 限制 6 个)的同域名下的直播窗口,所以该技术也不太适合多路同时打开(譬如 9 宫格视频)的视频监控领域。而且由于 Adobe 的不作为,flv 容器格式停止了更新,对 H265 的支持遥遥无期。

    • ws-flv

      ws-flv 直播技术基本与 http-flv 一致,无非是传输介质换成了 websocket 协议,除了解除了 http-flv 不能同时打开过多同域名下的直播窗口的限制,其他技术特性、参数基本与 http-flv 一致。目前看,ws-flv 既适合视频监控(可以同时打开多路监控视频)也适合视频直播行业,是 rtmp 很高的升级替代方案。

    • webrtc

      webrtc 是谷歌主导的视频通话技术标准,目前各大主流浏览器都兼容该标准。通过该技术,用户可以在浏览器上实现无插件的视频通话,该技术也可以用于实现低延时的视频直播。目前业界也有很多基于 webrtc 的应用和产品,但是很多局限于视频聊天等低延时交互式场景,在视频监控领域,目前还尚未流行。而且该技术栈目前还在持续更新,技术难点太多,要与视频监控领域融合还需时日。

    • hls

      hls 协议是苹果公司主导的技术标准,该技术标准兼容性最佳。不仅桌面浏览器,包括手机浏览器甚至是手机 QQ、手机微信都支持该直播协议。 但是该协议延时比较大,不太适合视频监控等对延时要求很敏感的行业。不过最近苹果公司新推出低延时 hls 直播标准,预计 hls 标准将抢占更大的市场份额。

    以上直播技术标准目前都不完全契合视频监控行业的需求,如果要达到比较好的用户体验,通常以上技术混合使用。

    3、视频直播

    3.1 视频直播的现状和挑战

    视频直播是近几年才兴起的产业,特别是随着游戏直播、手机直播的流行,视频直播已经司空见惯,进入了每个人的视野。 随着阿里、腾讯等云平台的入局,OBS,SRS 等优秀软件的开源,视频加速 CDN 技术的成熟,打赏、广告等商业模式的落地,目前视频直播产业链已经非常成熟,业界也诞生了斗鱼、虎牙、映客、花椒等知名直播平台。

    目前而言,这些直播平台使用的技术栈基本都是 rtmp,但是由于 flash 技术即将被淘汰,所以直播行业也将迎来一些变局以及挑战。 现在,基本上所有的直播平台,在 web 端,都已经或正在往 http-flv 方案转型。由于 flv 与 rtmp 同出一门(都是 Adobe 公司产品),负载格式一致,方案升级改造平滑可靠,http-flv 替代 rtmp 具有天然的优势,相信将来 http-flv 能很好的挑起 rtmp 的大梁。

    3.2 发展趋势

    视频直播目前从内容上来讲,涵盖了游戏、美女、户外、娱乐、体育等直播;从设备上来讲,涵盖了 PC、手机、web、电视等客户端,市场上也诞生了斗鱼这样的头部企业。从目前来看,视频直播行业市场格局已经比较稳固,进入了平稳发展期。

    从技术上来讲,直播行业也将迎来一些变革。 一是 rtmp 技术随着 flash 的一起淘汰,web 端 rtmp 播放器将成为历史。 二是随着 webrtc 的强势流行,直播技术栈可能与 webrtc 融合。 三是苹果主导的低延时 hls 的推出,可能最终有大一统之势。

    不过近期来看,http-flv 是 rtmp 的最佳替代方案,但是和 rtmp 一样,也有不支持 H265 的短板,而且移动端浏览器对此支持并不完善,所以该方案在将来有大概率会被其他方案替代。

    3.3 技术难点

    直播行业相对视频监控行业来说,商业化程度更高,更面向于普通消费者,用户规模更大,产业链也更加成熟。但是由于利益格局的划分、巨头间标准制定的角力,目前直播的技术标准和用户体验是割裂的。

    在桌面 web 端,之前直播技术由 Adobe 旗下的 flash/rtmp 技术主导,不过由于 Adobe 的不作为,以及谷歌苹果等公司的抵制,flash 已经进入死亡倒计时。目前来看,http-flv 已经接手 rtmp 的大旗,成为了新的事实上的桌面 web 端直播标准。但是 http-flv 由于其不支持 H265 的短板(Adobe 官方可能永远也不会支持 H265),其地位也并不稳固,现在也有公司正在尝试使用 webrtc 进行视频直播,但是由于该技术跨界太大,其技术栈又太庞杂,整个上下游产业链也并不完善,目前在直播界,还未看见大规模采用该直播技术的方案实施。

    在手机 APP 端,由于播放技术自己可以主导,也由于历史沿革原因,目前一般沿用 rtmp 技术方案(需要指出的是微信小程序也支持 rtmp 播放器),用户体验比较好,延时一般 3 秒或以下。

    在移动 web 端,可采用的直播方案更少,目前基本只能采用苹果公司主导的 hls 方案,但是由于 hls 的技术特性,延时非常大(一般 5 秒以上,最大可达 10 秒以上),其观看体验跟手机 APP、桌面 web 端是严重割裂的。

    通过我们上述的分析看出,目前直播技术方案,在每种端都不一样,用户体验也差距巨大,目前并没有一种多平台支持、令人满意的通用解决方案。目前要实现一个完善的直播产品,最少要采用包括 rtmp/http-flv/hls 这 3 种技术方案,而且这三种技术方案目前也并不能让人满意(rtmp/http-flv 不支持 H265,hls 延时高)。

    4、我们的解决方案以及优势

    目前我们的流媒体服务框架支持 rtsp/rtmp 推流客户端,rtsp/rtmp/http-flv/ws-flv/hls 播放客户端,并且可以无缝把 rtsp/rtmp 推流转换成上述 4 种播放协议,同时我们也支持 mp4 录制存档,必要的时候也可以从 mp4 文件加载成直播流。

    除了上述功能之外,我们还支持拉流 rtsp/rtmp 代理成 rtsp/rtmp/http-flv/ws-flv/hls,也支持把直播 rtsp/rtmp 流推送到其他的服务器。

    另外,我们还提供丰富的 http api 以及 http hook api,通过这些 api,我们可以与其他业务服务器一起,打造丰富的业务逻辑。

    我们的流媒体框架支持 linux、macos、ios、android、windows 全平台,既可以作为商用的流媒体服务器,也可以移植到嵌入式设备中,作为基础流媒体服务组件。

    代码采用 C++11 标准打造,避免使用裸指针,稳定可靠,采用 epoll 多路复用、线程池、异步网络 IO 模式开发,并发性能优越,已经经受住了长期的高并发验证考验。同时针对及时推流的特征,做了特别的优化,可以减少视频打开延时、提高画面打开成功率,让用户获取画面秒开,延时极低的体验。

    - + diff --git a/reference/documents/rtsp_push_process.html b/reference/documents/rtsp_push_process.html index 96d8b73..5e50383 100644 --- a/reference/documents/rtsp_push_process.html +++ b/reference/documents/rtsp_push_process.html @@ -29,8 +29,8 @@ } RTSP push streaming process | ZLMediaKit - - + + @@ -88,6 +88,6 @@ Server: ZLMediaKit-4.0(build in Mar 26 2019 17:01:17) Session: KPUZ49ejotyD
    - + diff --git a/reference/documents/the_nature_of_live_broadcast_delay.html b/reference/documents/the_nature_of_live_broadcast_delay.html index 5673770..95d78ee 100644 --- a/reference/documents/the_nature_of_live_broadcast_delay.html +++ b/reference/documents/the_nature_of_live_broadcast_delay.html @@ -29,12 +29,12 @@ } The Essence of Live Streaming Delay | ZLMediaKit - - + +
    Skip to main content

    The Essence of Live Streaming Delay

    ZLMediaKitAbout 2 min

    1. Live streaming is the representation of ongoing events, generating data as time passes.

    2. So why is there a delay in live streaming? The essence lies in the fact that, in order to enhance the user experience, live streaming caches a portion of historical data (such as using GOP caching to improve video loading speed).

    3. Does this mean that without GOP caching, there would be no delay? The answer is incorrect because not only does your server have a cache, but the player also has its own cache. There is a time difference between when the player clicks "Play" and when the video appears. Why does the player do this? The reason is to improve the smoothness of playback by implementing caching. We can consider the transmission of live streaming data to the player as a pipeline. Just like a pipeline can have varying water flow rates and even interruptions, if we don't use a "bucket" to buffer it, the video may stutter.

    4. Let's assume we remove all the caches from both the server and the player. Does that mean there would be no delay? Too young, too simple! Remember, caches can never be completely eliminated. Let's say the network is a water pipe, and we block it for 5 seconds before releasing it. Will the data from those 5 seconds disappear? No! Live streaming is an ongoing event, continuously generating "water flow." It will cause the pipe to expand. During those 5 seconds, the player has to wait for the data, and once the network is restored, the player will receive a surge of data from those 5 seconds. Then, the continuous flow of live streaming data resumes. As a result, the player ends up with an extra 5 seconds of data, which can either be discarded or played back at an accelerated speed. Otherwise, it will never magically disappear.

    5. Unfortunately, I have to tell you that almost all standard players do not directly discard data or accelerate playback speed.

    6. Now, an observant friend may ask, why does UDP live streaming have lower latency? The reason is that UDP, as a "pipe," has many holes, allowing excessive water to leak out. The result is direct data loss, causing the player to experience screen glitches.

    7. The expansion of the TCP pipeline can be understood as an increase in network link buffering (router buffering). What if there is too much water accumulation? First, it fills up the network link buffer, then the sending-side socket buffer, and then the sending-side application logic buffer. If there is still not enough space, I'm sorry, but the server has no choice but to sever the TCP connection.

    - + diff --git a/reference/index.html b/reference/index.html index 64350c2..c8e0288 100644 --- a/reference/index.html +++ b/reference/index.html @@ -29,12 +29,12 @@ } Reference | ZLMediaKit - - + +
    Skip to main content

    Reference

    ZLMediaKitLess than 1 minute

    Catalog

    No catalog

    - + diff --git a/reference/resources/dependency.html b/reference/resources/dependency.html index 834d518..5619b16 100644 --- a/reference/resources/dependency.html +++ b/reference/resources/dependency.html @@ -29,12 +29,12 @@ } Dependency and Copyright | ZLMediaKit - - + +
    Skip to main content

    Dependency and Copyright

    ZLMediaKitAbout 1 min

    I. ZLMediaKit's List of Dependent Libraries

    Dependent ComponentsLicense TypeRemarksProject Address
    ZLToolKitMITStrong dependency, ZLToolKit also partially depends on some open-source codeshttps://github.com/ZLMediaKit/ZLToolKit
    ireader/media-serverMITDefault dependency, can be removed when ENABLE_HLS, ENABLE_MP4, ENABLE_RTPPROXY are set to disabled at compile timehttps://github.com/ireader/media-server
    jsoncppMITMediaServer dependencyhttps://github.com/open-source-parsers/jsoncpp
    opensslApache-2.0Dependency when enabling SSL and WebRTC related features, can be removed when ENABLE_OPENSSL, ENABLE_WEBRTC are set to disabled at compile timehttps://github.com/openssl/openssl
    srtpSimilar to MITDependency when enabling WebRTC related features, can be removed when ENABLE_WEBRTC is set to disabled at compile timehttps://github.com/cisco/libsrtp
    usrsctpBSD-3-ClauseDependency when enabling WebRTC datachannel related features, can be removed when ENABLE_SCTP is set to disabled at compile timehttps://github.com/sctplab/usrsctp
    mediasoupISCSome WebRTC source code extracted from mediasoup, can be removed when ENABLE_WEBRTC is set to disabled at compile timehttps://github.com/versatica/mediasoup
    ffmpegGPL/LGPLThere's minor dependency with the transcoding branch and mk_api, can be removed when ENABLE_FFMPEG is set to disabled at compile time, default is disabledhttps://github.com/FFmpeg/FFmpeg
    wepollSimilar to MITDependency when ENABLE_WPOLL is enabled during Windows compilation, default is disabledhttps://github.com/piscisaureus/wepoll
    SPSParsersps/pps related parsing code, originated from a friend, modified, initially extracted from ffmpeg, copyright doubtfulhttps://github.com/ZLMediaKit/ZLMediaKit/blob/master/src/Extension/SPSParser.h

    II. Other Dependencies

    • SDL dependency when enabling the compilation of the test_player test program.
    • Dependencies on libx264 and libfacc when enabling x264/faac related features, default is disabled.
    • jemalloc dependency when enabling jemalloc, default is disabled.
    • Dependency on libmysql-clinet when enabling mysql connection pool feature, default is disabled.

    is sourced from githubopen in new window, after arrangement and modification.

    - + diff --git a/reference/resources/index.html b/reference/resources/index.html index 22e04d3..d8ebe30 100644 --- a/reference/resources/index.html +++ b/reference/resources/index.html @@ -29,12 +29,12 @@ } Resources | ZLMediaKit - - + + - + diff --git a/reference/resources/rtmp_support_for_h265_and_opus.html b/reference/resources/rtmp_support_for_h265_and_opus.html index 476cde0..95e93c1 100644 --- a/reference/resources/rtmp_support_for_h265_and_opus.html +++ b/reference/resources/rtmp_support_for_h265_and_opus.html @@ -29,12 +29,12 @@ } RTMP supports H265 and OPUS | ZLMediaKit - - + +
    Skip to main content

    RTMP supports H265 and OPUS

    ZLMediaKitLess than 1 minute

    Background

    RTMP/FLV is the de facto standard in the live streaming industry, and they are widely used in the domestic live streaming field. To achieve plugin-free low-latency live streaming playback in web browsers, RTMP/FLV is essential. Since RTMP/FLV is a proprietary protocol designed by Adobe, it does not natively support H.265 (widely used in video surveillance applications) and Opus (widely used in RTC applications). However, there is a growing demand for live streaming infrastructure in the video surveillance and RTC industries. Therefore, it is important to modify RTMP to add support for H.265 and Opus.

    Implementation Approach

    RTMP determines the encoding format through codec ID and distinguishes data types (including audio packets and video packets) through message type. Therefore, the codec_id for audio and video can be the same as long as they are of the same type and do not conflict. For example, the codec ID for H.264 is 7, and the codec ID for G.711A is also 7. Currently, the default codec ID for H.265 in China is 12 (implemented and published by 金山云open in new window). As for the RTMP extension for Opus, there is currently no widespread consensus. After discussions with relevant individuals, the author has negotiated and defined its codec ID as 13. The modification has already been implemented for FFmpeg (based on the latest version) to add support forh265/opus RTMP extensionopen in new window.

    Server Implementation

    ZLMediaKit has already implemented comprehensive support for H.265/Opus in RTSP/RTMP/MP4/HLS. Feel free to test and use it.

    - + diff --git a/reference/resources/video_conferencing_related_resources.html b/reference/resources/video_conferencing_related_resources.html index 646e350..791815f 100644 --- a/reference/resources/video_conferencing_related_resources.html +++ b/reference/resources/video_conferencing_related_resources.html @@ -29,12 +29,12 @@ } Video Conference Related Resources | ZLMediaKit - - + + - + diff --git a/reference/resources/zltoolkit_source_code_study_notes.html b/reference/resources/zltoolkit_source_code_study_notes.html index 8625c63..9e5b5f9 100644 --- a/reference/resources/zltoolkit_source_code_study_notes.html +++ b/reference/resources/zltoolkit_source_code_study_notes.html @@ -29,12 +29,12 @@ } ZLToolKit source code study notes | ZLMediaKit - - + + - + diff --git a/reference/test/benchmark.html b/reference/test/benchmark.html index 3f771b6..8d81c8d 100644 --- a/reference/test/benchmark.html +++ b/reference/test/benchmark.html @@ -29,12 +29,12 @@ } Benchmark | ZLMediaKit - - + +
    Skip to main content

    Benchmark

    ZLMediaKitLess than 1 minute

    This test is severely outdated and is not indicative.

    Test Environment

    • System: Linux core 3.16.0-7-amd64 #1 SMP Debian 3.16.59-1 (2018-10-03) x86_64 GNU/Linux
    • Memory: 15GB
    • CPU: Intel(R) Xeon(R) CPU E3-1220 v5 @ 3.00GHz; 4 cores
    • Network: Gigabit Ethernet
    • The test is conducted by accessing the server through a loopback network on the test client.

    Test Tools

    ZLMeidaKit comes with a test benchmark program called test_benchmark, which uses a single-process multi-threaded model.

    Test Server

    ZLMeidaKit includes a test server called test_server, which supports RTSP/RTMP/HLS protocols and uses a multi-threaded model.

    Test Media Stream

    The test_server pulls an RTMP stream rtmp://live.hkstv.hk.lxdns.com/live/hks1 and then forwards it using the test_server. The approximate bitrate of the stream is around 300-400 Kbit/s.

    Test Results

    Note

    When building with CMake, use the command cmake .. -DCMAKE_BUILD_TYPE=Release to compile the optimized version.

    Number of Players (RTMP)CPU (Max 400%)Memory (VIRT/RES)Bandwidth (Average)Packet Loss
    100020%702M/13M40 MByte/sNone
    200039%702M/18M80 MByte/sNone
    500092%702M/32M200 MByte/sNone
    10000170%702M/59M400 MByte/sNone
    Number of Players (RTSP/TCP)CPU (Max 400%)Memory (VIRT/RES)Bandwidth (Average)Packet Loss
    100018%702M/13M42 MByte/sNone
    200035%702M/19M82 MByte/sNone
    500080%702M/35M198 MByte/sNone
    10000130%702M/62M405 MByte/sNone

    Comparison with SRS Performance

    Number of Players (RTMP)CPU (Max 400%)Memory (VIRT/RES)Bandwidth (Average)Packet Loss
    100010%310M/53M41.17 MByte/sNone
    200018%604M/117M83.86 MByte/sNone
    - + diff --git a/reference/test/delay_test.html b/reference/test/delay_test.html index ce2f0e9..4fa325d 100644 --- a/reference/test/delay_test.html +++ b/reference/test/delay_test.html @@ -29,12 +29,12 @@ } Delay Testing | ZLMediaKit - - + +
    Skip to main content

    Delay Testing

    ZLMediaKitAbout 2 min

    Note

    This test was conducted earlier, and some content may have become outdated. The ultraLowDelay configuration option has been removed. To achieve the lowest delay mode, set the combined write delay to 0 (default is 0). When testing the delay, you can use WebRTC playback.

    Network Environment

    • localhost

    Operating System

    • macOS

    Server

    • MediaServer, startup parameter -t 1, single-threaded startup
    • Open the configuration file and enable ultraLowDelay mode

    Streaming Software

    • obs, RTMP streaming to localhost
    • Rate Control: CBR
    • Bitrate: 2500
    • Custom Buffer Size: 100
    • Keyframe Interval: 2 seconds
    • CPU Usage Preset: ultrafast
    • Profile: baseline
    • Tune: zerolatency
    • Resolution: 1280x720
    • FPS: 30 image

    Player

    • Built-in test_player
    • Play RTSP (test both UDP and TCP modes) or RTMP on localhost

    Testing Method

    • Open a browser and go to the online stopwatch webpage https://miaobiao.51240.com/
    • Configure OBS to capture the stopwatch section of the browser image and start streaming to MediaServer
    • Open the test_player and play the corresponding RTSP or RTMP URL
    • Use a screenshot tool to capture the frames and compare the time difference between the online stopwatch webpage and the test_player

    Test Results

    • RTMP playback, delay of 200ms to 400ms imageimage

    • RTSP playback (TCP mode), delay of 200ms to 400ms imageimage

    • RTSP playback (UDP mode), delay of 200ms to 400ms imageimage

    Test Conclusion

    • In the single-threaded mode, where the player and streaming software are in the same thread without any thread switching, the delay is slightly more stable and lower.
    • Enabling TCP_NODELAY and disabling MSG_MORE did not significantly optimize the delay in this test.
    • The average delay from multiple screenshots is around 300ms, with a minimum of around 200ms and a maximum of over 400ms.
    • Back in 2017, when I developed my own streaming software (unfortunately, I didn't save the .exe file), I was able to achieve a minimum delay of around 120ms, which is currently not achievable. It is suspected that OBS still has relatively high streaming delay.
    • It is recommended to disable audio during streaming tests. For encoding formats like AAC, the encoding delay can exceed 100ms.
    • This test was conducted on macOS. Ideally, the server would be Linux, the streaming software would be on Windows, and if the player rendering is done independently, the delay could be even lower.
    • Those interested can conduct tests on Windows. In 2017, when I tested it on a local network, with the streaming software, server, and player not on the same host, the delay was as low as 120ms. It should be even lower with localhost.
    - + diff --git a/reference/test/how_to_test_delay.html b/reference/test/how_to_test_delay.html index 6c457f3..a4334a7 100644 --- a/reference/test/how_to_test_delay.html +++ b/reference/test/how_to_test_delay.html @@ -29,13 +29,13 @@ } How to test the delay? | ZLMediaKit - - + +
    Skip to main content

    How to test the delay?

    ZLMediaKitAbout 3 min

    Introduction

    Some users often ask me in the group why there is a several seconds delay when using ZLMediaKit for stream playback or stream forwarding. Sometimes, the delay can be as long as more than 10 seconds or even half a minute for HLS. The purpose of this article is to clarify the misunderstanding about delay.

    What is Delay

    Many users do not fully understand what delay means. They think that the time difference between the displayed frames of any player and the original stream frames is the delay, but this is actually the biggest misconception about delay. Delay is not superficial. Many people are not professional when testing delay and have insufficient understanding of the professionalism of delay testing. I would like to remind everyone that not every player is qualified to perform delay testing!

    In summary, the overall delay consists of the following components:

    • Capture Delay

      When capturing camera or graphics card frames, there is a certain delay in capturing the frames as YUV/RGB data due to limitations such as fps, CPU performance, and memory copying speed. Generally, the delay is in the millisecond range. Since general encoders have restrictions on input data formats, such as requiring consistent input of YUV420P, there will also be a delay in the conversion calculation when converting RGB to YUV420P (this can be reduced using the libyuv library). In general, the capture delay is about milliseconds. If the fps is 30, the capture delay will generally be more than 30 milliseconds, and there may be additional milliseconds of delay during memory copying and color conversion.

    • Encoding Delay

      When inputting the original frames into the encoder, the encoded data is not immediately output, especially when B-frames are enabled. Since B-frames require referencing the following P-frames, the delay will be greater. Therefore, in delay-sensitive situations, B-frames are generally not enabled, and in such cases, the encoding delay should be in the millisecond range and not very high.

    • Upstream Network Transmission Delay

      After the data is encoded, it needs to be packed into a certain protocol before being written to the socket and transmitted to the streaming server or stream proxy server. Protocol packing involves a certain amount of memory copying and computation, which can increase the delay. However, this delay is very small and can be basically ignored. When uploading data to the server, this delay can be large or small, depending on the network quality.

    • Server Protocol Conversion Delay

      After the server receives the data, it needs to perform operations such as reading socket buffer, protocol parsing, demultiplexing, and repacking. However, overall, this delay is relatively small and has little impact. Sometimes, to improve performance, the server may use a mechanism of batching writes, which means that it will forward the data only after receiving a certain amount of data. This delay is generally a few hundred milliseconds, with ZLMediaKit defaulting to around 300 milliseconds. However, ZLMediaKit has this batching write feature disabled by default, so this delay is also very small.

    • Downstream Network Delay

      When streaming media forwards video data to the player, there will be a delay caused by network transmission, the size of which depends on the network quality. When low-latency mode is disabled in ZLMediaKit, there will also be additional delay due to the use of MSG_MORE and the disabling of TCP_NODELAY, but low-latency mode is enabled by default in ZLMediaKit.

    • Player Delay

      Player delay consists of network reception delay, protocol parsing and demultiplexing delay, decoding delay, cache delay, and rendering delay. Among these delays, the cache delay is the largest. In order to ensure smooth video playback in case of network jitter, general players increase the delay by adding playback buffers. This way, when the network deteriorates, the playback buffering can prevent video stuttering. Moreover, in order to achieve audio-video synchronization, a certain amount of buffering must be ensured. This type of delay is generally in the seconds range, typically around 5 seconds.

    • Player GOP Cache Delay

      To display the video immediately, streaming media servers often cache the most recent I-frame, and all subsequent audio-video data after this I-frame is referred to as the GOP (Group of Pictures) cache. If the GOP is not cached, the player has to wait for the next I-frame to successfully decode the video or avoid screen flickering. Obviously, to improve the playback experience, this GOP cache cannot be eliminated. Generally, the GOP duration can be as short as 1-3 seconds or as long as tens of seconds, depending on the settings of the capture-side encoder, which the server cannot change. However, since general players do not discard too many frames after receiving the cache to ensure low latency, and players also want to have a certain amount of buffering to ensure smooth playback, this GOP cache will increase the player's delay.

    • Overall Delay

      The sum of all the aforementioned delays is the perceived delay you observe. Sowhen you see a delay in stream playback or stream forwarding using ZLMediaKit, it is a combination of all these factors. It's important to understand that some delays are inherent to the streaming process and cannot be completely eliminated. However, there are ways to optimize the delay and minimize its impact.

    How to Test Delay

    Testing delay with general players like VLC is unprofessional. The delay in these players is at least in the order of seconds. In order to achieve smooth playback and audio/video synchronization, these players cannot provide you with real-time delay data.

    Here, I strongly recommend that you write your own bufferless player to test the delay. However, this is obviously beyond the ability of most people. Therefore, ZLMediaKit provides a simple player for testing delay: test_playeropen in new window

    What? You're telling me you don't know how to compile ZLMediaKit? Well, in that case, I suggest you use WebRTC player to test the delay. You can also use ffplay:

    ffplay -i rtmp://xxxxxxx -fflags nobuffer
     

    If you don't know how to install ffplay, you can download a precompiled version from hereopen in new window.

    More Information About Delay

    The Essence of Live Broadcast Delay

    Delay-related Testing

    - + diff --git a/reference/test/index.html b/reference/test/index.html index 9a920a6..34689cb 100644 --- a/reference/test/index.html +++ b/reference/test/index.html @@ -29,12 +29,12 @@ } Testing | ZLMediaKit - - + + - + diff --git a/reference/test/online_test.html b/reference/test/online_test.html index 73381d9..ef0e170 100644 --- a/reference/test/online_test.html +++ b/reference/test/online_test.html @@ -29,12 +29,12 @@ } Online test | ZLMediaKit - - + +
    Skip to main content

    Online test

    ZLMediaKitLess than 1 minute

    Testing Url

    • http/hls/http-flv/ws-flv: http://zlmediakit.com:8888/
    • https: https://zlmediakit.com/
    • rtsp: zlmediakit.com:554
    • rtmp: zlmediakit.com:1935
    • GB28181 UDP/TCP: zlmediakit.com:10000

    Start testing

    Push testPlay test

    - + diff --git a/reference/test/performance_testing.html b/reference/test/performance_testing.html index 3ace27c..91748ed 100644 --- a/reference/test/performance_testing.html +++ b/reference/test/performance_testing.html @@ -29,12 +29,12 @@ } Performance Testing | ZLMediaKit - - + +
    Skip to main content

    Performance Testing

    ZLMediaKitLess than 1 minute

    1. Latest Performance Test:

    1.1 Test Environment

    • CPU: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz, 4 cores, 8 threads
    • Operating System: CentOS release 6.3 (Final)
    • Memory: 16GB
    • Network Card: 127.0.0.1
    • Test Stream: 200kbps.768x320.flvopen in new window
    • Compiler: gcc (GCC) 8.2.0
    • Compilation Type: Release

    1.2 Test Data

    There were inaccuracies in the memory usage during the push streaming performance test (due to a multi-GOP caching bug at the time of testing).

    Client TypeStream CountCPUMemoryNetwork IOTheoretical Performance of 4 Physical Cores
    RTSP Play20K160%203M5Gb/sApproximately 100K
    RTSP Play32.2K235%220M7.78Gb/sApproximately 100K
    RTSP Push10K264%760M2.39Gb/sApproximately 30K
    RTMP Play10K148%81M2.33Gb/sApproximately 50K
    RTMP Play30K450%246M7Gb/sApproximately 50K
    RTMP Push10K224%1.6G2.16Gb/sApproximately 30K

    1.3 Detailed Test Data

    2. Earlier Performance Test Records

    3. Performance Testing and Optimization

    - + diff --git a/reference/test/rtmp_pull_stream_performance_test.html b/reference/test/rtmp_pull_stream_performance_test.html index d778e6a..86d65d5 100644 --- a/reference/test/rtmp_pull_stream_performance_test.html +++ b/reference/test/rtmp_pull_stream_performance_test.html @@ -29,8 +29,8 @@ } rtmp pull stream performance test | ZLMediaKit - - + + @@ -81,6 +81,6 @@ #启动1万个rtmp拉流 ./test_bench_pull -c 30000 -i rtmp://127.0.0.1/live/test
    • top 信息:
    图片
    图片
    • perf top 信息:
    图片
    图片
    • nload 信息(平均 7.09Gb/s):
    图片
    图片
    - + diff --git a/reference/test/rtmp_push_stream_performance_test.html b/reference/test/rtmp_push_stream_performance_test.html index b7b9e45..59f241f 100644 --- a/reference/test/rtmp_push_stream_performance_test.html +++ b/reference/test/rtmp_push_stream_performance_test.html @@ -29,8 +29,8 @@ } rtmp push stream performance test | ZLMediaKit - - + + @@ -77,6 +77,6 @@ #启动1万个rtmp推流 ./test_bench_push -i rtmp://127.0.0.1/live/test -c 10000 -o rtmp://127.0.0.1/live/push
    • top 信息:
    图片
    图片
    • perf top 信息:
    图片
    图片
    • nload 信息(平均 2.16Gb/s):
    图片
    图片
    - + diff --git a/reference/test/rtsp_pull_stream_performance_test.html b/reference/test/rtsp_pull_stream_performance_test.html index c1c5f78..a7c73ed 100644 --- a/reference/test/rtsp_pull_stream_performance_test.html +++ b/reference/test/rtsp_pull_stream_performance_test.html @@ -29,8 +29,8 @@ } rtsp pull stream performance test | ZLMediaKit - - + + @@ -81,6 +81,6 @@ #启动4万个rtsp拉流 ./test_bench_pull -c 40000 -i rtsp://127.0.0.1/live/test
    • 发现由于随机端口不够,有些播放器掉线(只剩 32244 个): 图片

    • top 信息:

    图片
    图片
    • perf top 信息:
    图片
    图片
    • nload 信息(平均 7.78Gb/s):
    图片
    图片
    - + diff --git a/reference/test/rtsp_push_stream_performance_test.html b/reference/test/rtsp_push_stream_performance_test.html index 35f5f83..eec926e 100644 --- a/reference/test/rtsp_push_stream_performance_test.html +++ b/reference/test/rtsp_push_stream_performance_test.html @@ -29,8 +29,8 @@ } rtsp push stream performance test | ZLMediaKit - - + + @@ -77,6 +77,6 @@ #启动1万个rtmp推流 ./test_bench_push -i rtmp://127.0.0.1/live/test -c 10000 -o rtsp://127.0.0.1/live/push
    • top 信息:
    图片
    图片
    • perf top 信息:
    图片
    图片
    • nload 信息(平均 2.39Gb/s):
    图片
    图片
    - + diff --git a/service-worker.js b/service-worker.js index 76fc314..7625ee5 100644 --- a/service-worker.js +++ b/service-worker.js @@ -1,2 +1,2 @@ -if(!self.define){let e,s={};const a=(a,i)=>(a=new URL(a+".js",i).href,s[a]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=a,e.onload=s,document.head.appendChild(e)}else e=a,importScripts(a),s()})).then((()=>{let e=s[a];if(!e)throw new Error(`Module ${a} didn’t register its module`);return e})));self.define=(i,r)=>{const c=e||("document"in self?document.currentScript.src:"")||location.href;if(s[c])return;let t={};const d=e=>a(e,c),n={module:{uri:c},exports:t,require:d};s[c]=Promise.all(i.map((e=>n[e]||d(e)))).then((e=>(r(...e),t)))}}define(["./workbox-dbb64b4e"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.clientsClaim(),e.precacheAndRoute([{url:"assets/404.html-aQJ09P_F.js",revision:"76f3c96a47b4621ba8ce69fcbd885f68"},{url:"assets/404.html-xdICDk2y.js",revision:"d79038e5e1d8092b8b3c38c459d5a465"},{url:"assets/app-BrxqtzGY.js",revision:"37a876ee1b3c040baff9f031acc01cb1"},{url:"assets/arc-kFrifBKJ.js",revision:"da94b849153f5b0d81f0402bc9b1b5e0"},{url:"assets/array-Nw74a44z.js",revision:"17dcebeaf673b09a1ca5da014d20022f"},{url:"assets/benchmark.html-98ulTadG.js",revision:"a9dbc2a763e7f9fd5d2af60fded057b6"},{url:"assets/benchmark.html-MSc66SxZ.js",revision:"dc32b8c22dbcb74830e677d297b170b6"},{url:"assets/benchmark.html-Nx9hqFos.js",revision:"6f74181d5550d94a5e8e0e22a9d09a5d"},{url:"assets/benchmark.html-xQUFyhUw.js",revision:"0b93d042729a80ed7f7b41c6aac852a4"},{url:"assets/c4Diagram-817c8e44-BMi5WAvg.js",revision:"5c00c3cf1d29d54a7d0f779cec1e0fc0"},{url:"assets/classDiagram-48ab76fb-B-1nPr5u.js",revision:"171a3cbe594b2bc286d43a4fe943ac80"},{url:"assets/classDiagram-v2-8ecb0bfc-6PoF2wPP.js",revision:"c78660d9ad254eb723cf36ac1dbc4981"},{url:"assets/collaborative_projects.html-15UQQvPG.js",revision:"aca89aea107c131135d843d7880f76b6"},{url:"assets/collaborative_projects.html-F54TwnSU.js",revision:"7aa15ee78df8ae1f555a8e7c74fa12aa"},{url:"assets/collaborative_projects.html-gRvZJ2_P.js",revision:"21258323cc48008377e663bcb4b9ccc3"},{url:"assets/collaborative_projects.html-pOhMHRMF.js",revision:"677bd9414e387479c2ac34438d3c2bc5"},{url:"assets/compilation_instructions_for_windows_version.html-B01AYnQQ.js",revision:"8bb415eb83cbb086906d6c52cd1c74b9"},{url:"assets/compilation_instructions_for_windows_version.html-Hq0AuZTz.js",revision:"66feea9dae54928e3a2bb2f7a51bc417"},{url:"assets/compilation_instructions_for_windows_version.html-qtHU9-nX.js",revision:"db505ce9195db994dff6777d581e981b"},{url:"assets/compilation_instructions_for_windows_version.html-xl0PwINJ.js",revision:"ee73eff391cf2201c2517e705bc2e91c"},{url:"assets/config_file.html-5j1Bx0Jx.js",revision:"591d662b3e72f0b21c92319d03a2e17c"},{url:"assets/config_file.html-i3ELg7s5.js",revision:"05d0fdfd1621df427f889e3dfb54050c"},{url:"assets/config_file.html-nDM3m-gp.js",revision:"8df4c3acccb551fb69f260875a907d2f"},{url:"assets/config_file.html-sJf41F3S.js",revision:"ca6848581243537474201dbe9d12aa3d"},{url:"assets/contact.html-F5mmsRL_.js",revision:"b483c840a49554a004ac29af7086f5f5"},{url:"assets/contact.html-inPGOeaD.js",revision:"618c88cbbfe90e780c239307f7ca3a3b"},{url:"assets/contact.html-nPftNmfa.js",revision:"c55df9245c21c481a492bf69830d5eea"},{url:"assets/contact.html-XWW2pZ29.js",revision:"0b951bd788c1b31fccea7115275bec02"},{url:"assets/createText-aebacdfe-JILF3Vy1.js",revision:"d8639e275f7b04816bd6d797e9f32ca6"},{url:"assets/delay_test.html-_QomqbNh.js",revision:"05e99497e62f35bf7dbea382401387f5"},{url:"assets/delay_test.html-0tF1gV92.js",revision:"2725597ba152b9d6567387c4e89053bc"},{url:"assets/delay_test.html-dT3kgdCj.js",revision:"43f900f4b61b8881f4680b57bde2786f"},{url:"assets/delay_test.html-ZDGSxDiR.js",revision:"8173b96b366399b9d87b245f782f4018"},{url:"assets/dependency.html-bJgf-XNv.js",revision:"50427dba0145adc427982c3e481b01eb"},{url:"assets/dependency.html-mty2X7tk.js",revision:"f8184fa697ae4c7b4a2134e5af6caef4"},{url:"assets/dependency.html-OQ3SkmA_.js",revision:"6ade3993f12c06ffdaabbdaf8fc97150"},{url:"assets/dependency.html-vliHx4sJ.js",revision:"133156fbc8cde50f0cb079c965bc9d05"},{url:"assets/edges-80f1ebb6--gcvlmof.js",revision:"219f52747f8ca05f72e25c3ed5e98e00"},{url:"assets/erDiagram-9cfc3649-Q00KLrXp.js",revision:"fc617aff91a9dd1c6cf8e6ce047e0c68"},{url:"assets/exclusive_features.html-2siFVq2G.js",revision:"3f63eed8e945a5d96317576aa72a604e"},{url:"assets/exclusive_features.html-mvtkr6Zx.js",revision:"751ad9d9498c38bf0e3b218c312fcb0a"},{url:"assets/exclusive_features.html-q7ecjqC1.js",revision:"4ca71238bd0475cb132f1832ed6db5a5"},{url:"assets/exclusive_features.html-wTOG2Bjt.js",revision:"908ef27f27bc5f36054d486537a4f6e3"},{url:"assets/flowchart-elk-definition-e097735e-aDa6k5ld.js",revision:"20e7a42b962a14cf1f734a19c511511e"},{url:"assets/flowDb-170db09d-q-5Qwvam.js",revision:"46a43a32703744fd4590a73fa75b3d35"},{url:"assets/flowDiagram-61eb444c-niCbBEPW.js",revision:"1fda5e21bc270e6d17bdeca8669791b5"},{url:"assets/flowDiagram-v2-2f8f667a-kIE4L_ig.js",revision:"ae9f01c1e21c02f5be90e2c3fb5f9cbe"},{url:"assets/ganttDiagram-db6931fb-XdIrq4o4.js",revision:"03ebbb00c582c1a5915c76e205cd0fc8"},{url:"assets/gb28181_push_streaming_4-qWTnfswt.js",revision:"30c7b622101f90395cc790c0e72e1cf9"},{url:"assets/gb28181_sip_signaling_packet_capture.html-_63zZLPQ.js",revision:"298c5cd5ce0ee80b0433ed54d5c1d647"},{url:"assets/gb28181_sip_signaling_packet_capture.html--EqBn8MM.js",revision:"4dc5bf33e6cb763061451d218a0b0ae7"},{url:"assets/gb28181_sip_signaling_packet_capture.html-dSB5oqMq.js",revision:"dbfc86980d308e1204aa23121f175f5c"},{url:"assets/gb28181_sip_signaling_packet_capture.html-P96Mkrz9.js",revision:"4dc5bf33e6cb763061451d218a0b0ae7"},{url:"assets/generate_ssl_self-signed_certificate_and_test-D4Sbj3Ls.js",revision:"616544c7f95d53f29de519db0674f52c"},{url:"assets/generate_ssl_self-signed_certificate_and_test.html-7V6eG0vA.js",revision:"2900e1d4092c29de10d34afb5c4c753c"},{url:"assets/generate_ssl_self-signed_certificate_and_test.html-KPuMmQeO.js",revision:"9f5e629b8aef85ed1cc3a2a66d8a9336"},{url:"assets/generate_ssl_self-signed_certificate_and_test.html-qSLRuImw.js",revision:"e5b9c6794282f1b0fe700d22af21f5d2"},{url:"assets/generate_ssl_self-signed_certificate_and_test.html-XP7q2oT5.js",revision:"4d51f05d6ac6885247954e1f9814edce"},{url:"assets/giscus-unEZQsJ0.js",revision:"34c4288ad53e7d9be8d0f44c9fdba069"},{url:"assets/gitGraphDiagram-6b463803-EqEFWtIw.js",revision:"86ea6b233ce4dabe373b56c4710a1889"},{url:"assets/high_concurrency_implementation_principle.html--R-GXKUV.js",revision:"e07065c07713fb6500acdc432fbd84d6"},{url:"assets/high_concurrency_implementation_principle.html-Bqhl-32O.js",revision:"27e1d995c8fb98127071634cf33cdeb3"},{url:"assets/high_concurrency_implementation_principle.html-opQWc8aM.js",revision:"2fb1a4c2f74fc52046100556dc28ff26"},{url:"assets/high_concurrency_implementation_principle.html-sl-nIpjv.js",revision:"7a20b2d70a9e4eae865ef6ea53a0ce00"},{url:"assets/hls_high_performance_journey.html-bBajAqE1.js",revision:"7d3ea5c0f10f1014295bebf7364f6d48"},{url:"assets/hls_high_performance_journey.html-bLztstJM.js",revision:"1de12ca696da6d2fc7345df858d95fe2"},{url:"assets/hls_high_performance_journey.html-ePp6ZcY7.js",revision:"c7d44816326e1fd4129ebf8a39bf8589"},{url:"assets/hls_high_performance_journey.html-sIjCrFa8.js",revision:"c7d44816326e1fd4129ebf8a39bf8589"},{url:"assets/how_to_create_a_live_steam.html-ekbfwpTl.js",revision:"bc4b1a8c8530f32e66705336b383e6bf"},{url:"assets/how_to_create_a_live_steam.html-FHwnpSdN.js",revision:"3060639f318e118a09057745e5cde6f4"},{url:"assets/how_to_create_a_live_steam.html-Gq2b9Yi0.js",revision:"1e77b724e809322523173efc4d0edc2f"},{url:"assets/how_to_create_a_live_steam.html-xouuZa47.js",revision:"bc4b1a8c8530f32e66705336b383e6bf"},{url:"assets/how_to_create_a_live_stream-3lt6j2fI.js",revision:"67e9191b6843091959a8f07cea06a593"},{url:"assets/how_to_enable_https_related_functions_zh_10-dp8gREln.js",revision:"e08b5f85ae138171fbadcb495d89fa08"},{url:"assets/how_to_enable_https_related_functions.html-fcJ6Uozv.js",revision:"c4b3dc09434d6236ba12e26ee88007e3"},{url:"assets/how_to_enable_https_related_functions.html-mO3jYJnY.js",revision:"b20d2d93bfc0a7d9afdb7d93d930c2e9"},{url:"assets/how_to_enable_https_related_functions.html-mTX-D-oH.js",revision:"1c797d129aca01f3eb86ecef5b44e4b9"},{url:"assets/how_to_enable_https_related_functions.html-VEGoh4jE.js",revision:"e554caa1b89e3a5ea5d12eb74b3bc390"},{url:"assets/how_to_test_delay.html-GlLjeJYr.js",revision:"1bd6e54f8408e79ec83b26d5c81259e6"},{url:"assets/how_to_test_delay.html-qIkqT7X0.js",revision:"54f4ccf09ee968ffefa3050ce87baf8e"},{url:"assets/how_to_test_delay.html-ubjyw-PC.js",revision:"13801c3a209c906dccd85db6bb5092ba"},{url:"assets/how_to_test_delay.html-xmNWiPYK.js",revision:"d95010b392a48259089a84690a7267d3"},{url:"assets/how_to_use_device_id_as_stream_id_6-sfQ1h9Fe.js",revision:"1bff1864e2dfb05bde4bb12af8c9561c"},{url:"assets/how_to_use_device_id_as_stream_id.html-_vNSGfoU.js",revision:"5850d68f9c88c71712e258d057267d3c"},{url:"assets/how_to_use_device_id_as_stream_id.html-a05nZW8g.js",revision:"a81e93979a5a3016623c6e97b927872c"},{url:"assets/how_to_use_device_id_as_stream_id.html-ga4UcAIh.js",revision:"858c041377d0a304dc9cd913185f18fa"},{url:"assets/how_to_use_device_id_as_stream_id.html-yEpxw4_B.js",revision:"a81e93979a5a3016623c6e97b927872c"},{url:"assets/image/advanced.svg",revision:"2934a573b64033bebb71f067ebc8d082"},{url:"assets/image/bg.svg",revision:"bed51349ca7476497e51d60437ef8eba"},{url:"assets/image/blog.svg",revision:"5686f361aca8bcf73522de225d09016d"},{url:"assets/image/box.svg",revision:"5f732c9705e288e8fb8ae6d2e5ce906a"},{url:"assets/image/features.svg",revision:"2eb292180d361e4af3f4bf411ef06062"},{url:"assets/image/github-dark.svg",revision:"8dcc6b5262f3b6138b1566b357ba89a9"},{url:"assets/image/github-light.svg",revision:"a0b00583d93c2f7084ad151ee0849934"},{url:"assets/image/layout.svg",revision:"db603c70eb017066ff30923ca5a2cd4a"},{url:"assets/image/markdown.svg",revision:"1a8b4476dae8f52cdd873d2b00fa27fb"},{url:"assets/index-67a42d7d-p9ZYh1Xw.js",revision:"225b1c95d37604bb4822326c6e4718e6"},{url:"assets/index-7SG8bi1h.js",revision:"46a193641571106d3b7b43f9bc2a2735"},{url:"assets/index.html-_oz2t3vB.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-1gY9nmEU.js",revision:"92843f6c1dff4569f2c291e82c7070e8"},{url:"assets/index.html-3Pe7G9Sl.js",revision:"c0c05ddda520e2adda625cdd231876ae"},{url:"assets/index.html-4qXHK4Yu.js",revision:"ea8519a44fde5fca68c31fc431e2e570"},{url:"assets/index.html-8RsIN7Qj.js",revision:"ff590ed654e791a5b22c11ccc9ddce0e"},{url:"assets/index.html-943vkdnv.js",revision:"66506d542be80c2633ded058cc66b647"},{url:"assets/index.html-A9z0_Hu7.js",revision:"4f860e08cf4dabbe3974dcd867207005"},{url:"assets/index.html-Acfu-WyI.js",revision:"ac263380bcaf563b41d4feb14c1f3645"},{url:"assets/index.html-AN1YzPhl.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-AQj9nIQS.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-BIyNRXIT.js",revision:"a9e106fe8e31b0d803532e52e4920418"},{url:"assets/index.html-BzbKxypT.js",revision:"662b8f394d27244938126a6f9d36f79e"},{url:"assets/index.html-c0NLam4o.js",revision:"50f75c5795cad25af5071e685fd56d25"},{url:"assets/index.html-c5y0hsti.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-c9Q-kbo9.js",revision:"c07d6fe71746ee6c0b40255909abc5b4"},{url:"assets/index.html-CojxHtZz.js",revision:"3cce4cc3f4578dbcd1463687ffb739ae"},{url:"assets/index.html-Dj-Byo33.js",revision:"33d2489812195b60dd65835895fad787"},{url:"assets/index.html-EkebsPUs.js",revision:"f0851dc07ad776a718a6b2077f7d4cde"},{url:"assets/index.html-GEt_McOE.js",revision:"9819c699b3d1c65518a7c9f208d1eb01"},{url:"assets/index.html-gHhFwdGj.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-GpIlvQXn.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-GYAMrXS-.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-H5ajPWzC.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-HffK__w0.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-HiksATK8.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-Hvr1twkc.js",revision:"0863680115a8ded21665ace23a839672"},{url:"assets/index.html-HxIzy8B_.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-jQOvySfo.js",revision:"1955ad1b99bd380ca1e5c197f350ac31"},{url:"assets/index.html-jVaUOSmI.js",revision:"72b19a33de68639ae16f36b839e7d13c"},{url:"assets/index.html-l-9Jcb0Z.js",revision:"5ab8c4c304de3bbef4c91cdb52fbf08f"},{url:"assets/index.html-l07G40eV.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-lHFYswhu.js",revision:"68601d9bc01ff40425d106bd1db7b57e"},{url:"assets/index.html-LLxB5nrB.js",revision:"086ed6111461246bc6c97866b2d918d5"},{url:"assets/index.html-lsbyji4m.js",revision:"2f2a8cb8a5a696c749db10bdec7f6c58"},{url:"assets/index.html-LSqTAwnp.js",revision:"c8324355f6d6e02a9bc861e06231a543"},{url:"assets/index.html-m59LkreQ.js",revision:"28018187ac0f122029bdfeb50cfb455b"},{url:"assets/index.html-MCTXxKe2.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-MI_McXZr.js",revision:"c5e8700ca283e861dced506472ecbf81"},{url:"assets/index.html-mmNwkX1L.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-NvUp90i0.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-nYslRDbi.js",revision:"2f2a8cb8a5a696c749db10bdec7f6c58"},{url:"assets/index.html-Oh37e22D.js",revision:"bcb1fcf519857cdf15515f77a485a436"},{url:"assets/index.html-ohZtz6Fw.js",revision:"58893519f365a18c506f1836cfec535a"},{url:"assets/index.html-oRdX7laQ.js",revision:"2de9c461d24eb912ae3e73a7ef0228e7"},{url:"assets/index.html-P9T-kKXm.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-PiOevGXi.js",revision:"48d86f5e92643dfaf5016a7373f5127f"},{url:"assets/index.html-Pl0D5fWX.js",revision:"df50db0b03d7bc4801e7684b895e72c0"},{url:"assets/index.html-pPTmba-N.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-puiRG_tj.js",revision:"78bb0b1759da66665fca92f63e8bab62"},{url:"assets/index.html-Q_J0RuMe.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-q-mTP89g.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-Q1OCSdNr.js",revision:"0355094bde07e5a1c1841bc347489d5e"},{url:"assets/index.html-qi3PncfW.js",revision:"b01b13800c1abbfe37ecbf7bf04d5102"},{url:"assets/index.html-qjMVLXfF.js",revision:"9e80a629102cb272c373b96d1433b760"},{url:"assets/index.html-QQRRY2d0.js",revision:"b43ec38709542738da227e4487b5739f"},{url:"assets/index.html-qTt3LMQa.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-QZwQ-TVg.js",revision:"1a3a2bae8abe10e6d181f5f020e65834"},{url:"assets/index.html-Rh0erDOb.js",revision:"7a00205cde84a167e23e5c6ce0f20674"},{url:"assets/index.html-sVMJ39Ap.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-sZlBS23H.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-TLmaTaqK.js",revision:"310fdf35690289b4b695a2a9f063cdf2"},{url:"assets/index.html-VsukZOSA.js",revision:"c6e6b871aa905370fa4d93c22c2fc8e1"},{url:"assets/index.html-w2bXuDTO.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-wOzz5n--.js",revision:"7988a457fbec5732be5a588e281d2de2"},{url:"assets/index.html-wqut89jq.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-wRo-8kqz.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-X7WU_LPV.js",revision:"18f6a74b2ca20e17c9893fd3cfd2c878"},{url:"assets/index.html-XiIyF-Mz.js",revision:"125061609d4366c5cf551cfd435226ee"},{url:"assets/index.html-Y6Zxo28x.js",revision:"583fc19e65b7982208e7988a34d75970"},{url:"assets/index.html-y8X0hE31.js",revision:"c9d0a878cd5df0d88c205f49b789c4c0"},{url:"assets/index.html-yjc28uoP.js",revision:"4d87cc57914d0403609cbb2f0de32cbb"},{url:"assets/index.html-Zl8OD7vu.js",revision:"eba5ebfdf176f5b1608ff6a52d885037"},{url:"assets/infoDiagram-a336098b-0X44mHNI.js",revision:"7c7d9b2c95a6e450e2d10a3e0fc55a87"},{url:"assets/init-Hi12RPRh.js",revision:"3ce28180466443e9b617d7b96e9f7b8f"},{url:"assets/install_zlmediakit_using_vcpkg_2-1HFW-yNt.js",revision:"eba8f412e34fc0140174130ed248e21f"},{url:"assets/install_zlmediakit_using_vcpkg.html-4lMDCmIH.js",revision:"07651c8f57c5dad334128fdeda0c4eaf"},{url:"assets/install_zlmediakit_using_vcpkg.html-hSrbYLMY.js",revision:"a9f0130084186aaeaaed5e99e6672a75"},{url:"assets/install_zlmediakit_using_vcpkg.html-lJ__kZwE.js",revision:"90288c6b05b19f6839599ba7d32befbd"},{url:"assets/install_zlmediakit_using_vcpkg.html-RuAB6C5H.js",revision:"95f5b69520e8b9b1ee89fa725167c4c5"},{url:"assets/introduction_to_streaming_media_related_technologies.html-9hb3DfJc.js",revision:"9b750d6d951253459db479617f46bddd"},{url:"assets/introduction_to_streaming_media_related_technologies.html-I9N-fJX2.js",revision:"55e6439819a4791f875f63b3cb6707c0"},{url:"assets/introduction_to_streaming_media_related_technologies.html-O53gIrdK.js",revision:"0ef8b597685e571d9ff51705e039dc88"},{url:"assets/introduction_to_streaming_media_related_technologies.html-uFhGEBGc.js",revision:"1d475bfd3c612e339908e97deaa79136"},{url:"assets/journeyDiagram-deae3313-I4uOsZJQ.js",revision:"ef43dd1484f4eeaeab65b285da3a37a7"},{url:"assets/layout-1ugHHiNm.js",revision:"0ffeab76c67f5c54886d7e823132739e"},{url:"assets/license.html-onnWhI1X.js",revision:"959de41ff2dbe211d159ffcbbdecaf1d"},{url:"assets/license.html-ptTdZQ9a.js",revision:"59c5af23d2c0c4fa2f4eab93e329bf3c"},{url:"assets/license.html-RX6EoCn0.js",revision:"d42d2eeec730453b07e3964e1cc71f2b"},{url:"assets/license.html-UJLTmREW.js",revision:"e95293364bf2e5280a49a73e734980f2"},{url:"assets/line-TqRW8de4.js",revision:"7a8177aa033ab622aa11b56f082f1e84"},{url:"assets/linear-KPN1H-BK.js",revision:"bfeaac62e171d2b7d62d537358e7263f"},{url:"assets/mermaid.core-zy7cM8l9.js",revision:"f21ea48dcb7bb7ddfeaf97dfee38c4e7"},{url:"assets/mindmap-definition-617cf8dd-IzO8d3I0.js",revision:"27b15f86a2262391727ef0b7dc98c548"},{url:"assets/not_recommended_qq.html-_--W0-VY.js",revision:"bfec6f3c75518c5bec67f07dca642975"},{url:"assets/not_recommended_qq.html-g8E5V1Ie.js",revision:"cc6d5dbde1ac6d1fd4335769c6ce3666"},{url:"assets/not_recommended_qq.html-Od4ztKJy.js",revision:"c3885d6144111405525cc78161e1bce3"},{url:"assets/not_recommended_qq.html-SK9_7gOI.js",revision:"d0694222f2a2ed5d11ea28d6a2ca99ec"},{url:"assets/on-demand_push_streaming_zh-CK4xj1dh.js",revision:"58fd02f19ecc7bced43f105b06c8430d"},{url:"assets/on-demand_push_streaming.html-crgN24-s.js",revision:"ac1b3b0933859c59196b2f575f3649ac"},{url:"assets/on-demand_push_streaming.html-kP6TQb2_.js",revision:"2785a3c0027931aa5e62297f7ccf37c2"},{url:"assets/on-demand_push_streaming.html-UrbeRghD.js",revision:"328d22810bac39fb7290ed3d3c83666c"},{url:"assets/on-demand_push_streaming.html-YM_cjoRG.js",revision:"b5c81fe1a64242735f8bdc0a06d82454"},{url:"assets/on-demand_streaming_zh-h19pTlmd.js",revision:"0eb44d4c65523fe801d4a4498adaafc4"},{url:"assets/on-demand_streaming.html-2DvN-m5K.js",revision:"b38e0c728d1e2148b057ac438c0329fd"},{url:"assets/on-demand_streaming.html-5SBDxVes.js",revision:"a3755702d9fcf9d9e4672d16658758a0"},{url:"assets/on-demand_streaming.html-iLkNMoAM.js",revision:"6940985876159d74182e956ddfbfb37c"},{url:"assets/on-demand_streaming.html-nFxU5UDk.js",revision:"0891480709c2e68ddc53aa7ad96b82a9"},{url:"assets/oncetoken.html-0LGtefKi.js",revision:"f71703fa1b6f44dc11d803ff84c67b17"},{url:"assets/oncetoken.html-JcsefotR.js",revision:"0d901abe41c808ec9f1a3c1c35ffe65f"},{url:"assets/oncetoken.html-LPckM_ZY.js",revision:"9154f9b016875771b1917e6c850a1996"},{url:"assets/oncetoken.html-MCJaY58Y.js",revision:"f154585fbd3ed66dc2b9444cdca63ca3"},{url:"assets/online_test.html-8_GcpcRF.js",revision:"52338331afa59a61a6bcb8f6ca24fafe"},{url:"assets/online_test.html-B0vGk4Ng.js",revision:"6ac5f2975a582f6314ff6499fc171bb9"},{url:"assets/online_test.html-kfBFI_bL.js",revision:"fabf6637a859684d0a738aa0d97169fc"},{url:"assets/online_test.html-osni6C75.js",revision:"e661758df2e4ad6406dc4aa0e9871690"},{url:"assets/ordinal-wXG5obU4.js",revision:"a72e57060c4f6a7606baa78dc6e9ad02"},{url:"assets/path-aUcfwwLI.js",revision:"f86c0243cb45746453c6b4f7dbd9f34d"},{url:"assets/performance_testing.html-D5lG5UBD.js",revision:"c1b89bdd7e7e601c009007aadd4b3545"},{url:"assets/performance_testing.html-DQL8Y_0H.js",revision:"614f84b26f36cd75f82542fcafbadbf3"},{url:"assets/performance_testing.html-LDuN76e5.js",revision:"d110995c38921504abe8026630031b12"},{url:"assets/performance_testing.html-wMvwmLu0.js",revision:"d43a0001d72ef49579dbf598ac26ba4e"},{url:"assets/photoswipe.esm-i2ohwMnJ.js",revision:"e9ff503527474b1afe53a1ee900448a3"},{url:"assets/pieDiagram-a5166659-w0_KZcnm.js",revision:"b5e4fa575f30912ccb494dfc8c3ea784"},{url:"assets/play_url_rules.html-_eahSglS.js",revision:"7fbd4cf9e506e5c36ccd6e6a3af7ffc9"},{url:"assets/play_url_rules.html-k15nwlze.js",revision:"e73911feb97d8a929bca33c441c50253"},{url:"assets/play_url_rules.html-lTCmvIjW.js",revision:"77e2aea436890c61d08973b2466e3f29"},{url:"assets/play_url_rules.html-LU-zd-xr.js",revision:"e8313eb4ea56e522cb92f9f260523109"},{url:"assets/playback_authentication_zh-gjAAn9Yd.js",revision:"d1b73468587890117bafd3f86759aec4"},{url:"assets/playback_authentication.html-arMfpj8D.js",revision:"9168f09b8be9be130d72ddb4c4b4fb3c"},{url:"assets/playback_authentication.html-GpyuaGt9.js",revision:"3f178ba69cf60f714a669c886aaaf406"},{url:"assets/playback_authentication.html-TBCUOtoI.js",revision:"f6ac31072a9c832919212e4e49c744dd"},{url:"assets/playback_authentication.html-wjgI-Yj5.js",revision:"565152fbd8128bbfc4a350131902a817"},{url:"assets/plugin-vue_export-helper-x3n3nnut.js",revision:"25e3a5dcaf00fb2b1ba0c8ecea6d2560"},{url:"assets/push_authentication_zh-OS4qAsfx.js",revision:"2c2bf93635139a5d3979114757a9bfa3"},{url:"assets/push_authentication.html-8JQfqi5E.js",revision:"3e7eea41c9dfba1adbb4128ecaf6f554"},{url:"assets/push_authentication.html-OUbzb3iO.js",revision:"3b3cc0ecc39db54018a16285adddc11d"},{url:"assets/push_authentication.html-qlfLynHw.js",revision:"b3d7bf7f8d5bdcd9e98b65b9def167ab"},{url:"assets/push_authentication.html-w6czo8pV.js",revision:"a569b066e9b213958721b107ade9378f"},{url:"assets/push_streaming.html-5CuTTppH.js",revision:"4e9002455f88236b97638211bcd2a71e"},{url:"assets/push_streaming.html-5MzKBCwx.js",revision:"00af9265177e3e8a736e41254f3cd2eb"},{url:"assets/push_streaming.html-k2pojRSs.js",revision:"b540ca7b5f7d0d8e27ea811be9e9617a"},{url:"assets/push_streaming.html-Z4VDPPfI.js",revision:"c64db74b6d82876529a744130565aa0e"},{url:"assets/push_test-WgKOKRFc.js",revision:"e9d124a5d01db8f90748223c62797fde"},{url:"assets/push_test.html-gnFrDUbt.js",revision:"64472eabb158a683a6690a65cca64231"},{url:"assets/push_test.html-HAP8YKRj.js",revision:"34e74d916e9b0350b6fe7336a692c55e"},{url:"assets/push_test.html-MSIBzphj.js",revision:"5cc8f89501d92e4e806c0ae137ee928c"},{url:"assets/push_test.html-rQVB769L.js",revision:"93f2a09ff23420dc2f85ff60910ec319"},{url:"assets/quadrantDiagram-6c355bbc-ZBJyvn0X.js",revision:"95a94604ca7194ef85d78b0c34563ede"},{url:"assets/requirementDiagram-4038b16c-KuNIOd0s.js",revision:"4fdc6d61b8f7d5815ecbe532d445569c"},{url:"assets/restful_api.html-0EdVK-2T.js",revision:"e14b045dd385bdfc8d8d09e5dc50eff9"},{url:"assets/restful_api.html-pwLlZzjg.js",revision:"75aabe8acadb334e8f4ea469b5e73278"},{url:"assets/restful_api.html-vpWQQrW9.js",revision:"3577dfd936bbed14b4d76ac027be2810"},{url:"assets/restful_api.html-Xx1SUrzX.js",revision:"27db13c31cdd8cf6d8f4d4db7958194b"},{url:"assets/rtmp_playback_compatibility_issues.html-5avJPHVo.js",revision:"6be1e2e717cb3e63216bce17db431fda"},{url:"assets/rtmp_playback_compatibility_issues.html-CmMs82Q4.js",revision:"cd4210f31ea8b8e3eff4f4d3695dd985"},{url:"assets/rtmp_playback_compatibility_issues.html-h5lBk1EY.js",revision:"bdccd8506c92ba67a2dba10573e6b270"},{url:"assets/rtmp_playback_compatibility_issues.html-RzirVjbt.js",revision:"bf3a79adbd8687cf32a560b763907237"},{url:"assets/rtmp_pull_stream_performance_test.html-_aYV-qZf.js",revision:"ade15d4d534cd82ca2cc09fba7821fc3"},{url:"assets/rtmp_pull_stream_performance_test.html-ANpGb4zw.js",revision:"04f9d4e9bb7d2fd8735c9053d3a7c05b"},{url:"assets/rtmp_pull_stream_performance_test.html-biPYYmB-.js",revision:"cad24a5b0bbf109874b3a1fe2f333538"},{url:"assets/rtmp_pull_stream_performance_test.html-HQ4fzTKd.js",revision:"305864626776df21bb91f68cd1ae4047"},{url:"assets/rtmp_push_stream_performance_test.html-9WCFfRY7.js",revision:"039f907c1c88973be33875ac4dfefa79"},{url:"assets/rtmp_push_stream_performance_test.html-AxJYj-3i.js",revision:"483711c1a022e7d97bbfd4425092f5e6"},{url:"assets/rtmp_push_stream_performance_test.html-BY1UVNB2.js",revision:"ad220f0720f98cb1adc30de41972428f"},{url:"assets/rtmp_push_stream_performance_test.html-eR62v-Vt.js",revision:"ca58c07324fd6d9748929f9086029beb"},{url:"assets/rtmp_support_for_h265_and_opus.html-f4aPfFot.js",revision:"a492fe181304965e8618760a986a1330"},{url:"assets/rtmp_support_for_h265_and_opus.html-KlA1IkKx.js",revision:"597fa76e7e2099ef448607b7e85f63cb"},{url:"assets/rtmp_support_for_h265_and_opus.html-tX2acU7J.js",revision:"70ba7cf876f460ad76d42aa18bfa2af7"},{url:"assets/rtmp_support_for_h265_and_opus.html-uBU2hKvT.js",revision:"4e5563f018323cd45ceb141240e72eac"},{url:"assets/rtsp_performance_optimization.html-bYm4ov8K.js",revision:"e4e4ee5f855b396f5a3217109bd291ea"},{url:"assets/rtsp_performance_optimization.html-Fk8ai5fo.js",revision:"a9d1f41908f2aa96cec3db5f89ff0301"},{url:"assets/rtsp_performance_optimization.html-N4V23aKI.js",revision:"8a21a102026c37a97823ac99d10ceda5"},{url:"assets/rtsp_performance_optimization.html-XwSQReWx.js",revision:"e4f0f43ad81a11129ab62c4dc1a66d96"},{url:"assets/rtsp_pull_stream_performance_test.html-_t28Fr8s.js",revision:"0e170326c16f7778159a775fca57d52b"},{url:"assets/rtsp_pull_stream_performance_test.html-1iKNM4Ty.js",revision:"0e170326c16f7778159a775fca57d52b"},{url:"assets/rtsp_pull_stream_performance_test.html-2yov4QZH.js",revision:"36e9219568e20efb63443ea908a33bae"},{url:"assets/rtsp_pull_stream_performance_test.html-9hA9_SB-.js",revision:"687c3b750da73663d062d7188877acca"},{url:"assets/rtsp_push_process.html-eeithr0y.js",revision:"f54ec8d338002bfc19a7ebf2719dd781"},{url:"assets/rtsp_push_process.html-MSFA7pR8.js",revision:"0730b0affd6b626ec2adde265bfbb202"},{url:"assets/rtsp_push_process.html-u1dV3DYT.js",revision:"27148da1db3a75b148d02e54feb48f0a"},{url:"assets/rtsp_push_process.html-Xg9db3f1.js",revision:"072e05961749f520321ea457f991f61b"},{url:"assets/rtsp_push_stream_performance_test.html-3UQhsyo8.js",revision:"308c989c47769eb89dc0504d1392b531"},{url:"assets/rtsp_push_stream_performance_test.html-g2X0PP_e.js",revision:"825be1a0511d7deae628dc8708cdb3cd"},{url:"assets/rtsp_push_stream_performance_test.html-iJ5a3bwy.js",revision:"b95cea3a31b0fc6e25f5f23e017006fc"},{url:"assets/rtsp_push_stream_performance_test.html-y53Byttn.js",revision:"b95cea3a31b0fc6e25f5f23e017006fc"},{url:"assets/sankeyDiagram-6db3d513-8ESTXLkU.js",revision:"223c4ca227f9a7a1ee88b73f3b9d967e"},{url:"assets/sequence_diagram.html-9KpjQs_B.js",revision:"8a023c0dd938024313d0cbbde9706159"},{url:"assets/sequence_diagram.html-mA7gwutk.js",revision:"7ebeafb1f7cd11233f113f308e528768"},{url:"assets/sequence_diagram.html-y7tfUv_v.js",revision:"f83ca3c8bcc0b924a3664b7656d0d346"},{url:"assets/sequence_diagram.html-yqJJFxQH.js",revision:"d782a1092ea55f1b4d383b3ec73713a7"},{url:"assets/sequenceDiagram-465a088a-dqSP27xN.js",revision:"3bea7b493b4c53204bf422090b2d6052"},{url:"assets/start_server_3-RVnx99XR.js",revision:"cdc2fe86a390491f5cb22b1eceb5f785"},{url:"assets/start_server.html-EcCCtjYj.js",revision:"b718e14185c9805fc59a11730b096781"},{url:"assets/start_server.html-eoFuSTqV.js",revision:"20b220a6650a7126be71972edb06fca5"},{url:"assets/start_server.html-fcMybRlu.js",revision:"09f556bf8111d3276b52829d577786e3"},{url:"assets/start_server.html-rADXsgsy.js",revision:"17f98f760083e4a3a319271a5e63319a"},{url:"assets/start.html-6kI24E98.js",revision:"2fa6ec43deaa252aac1868bfbe4faa5c"},{url:"assets/start.html-I4A7uS59.js",revision:"2dd388f7f89c50f312c2671acec0f20a"},{url:"assets/start.html-Jyh7sq9I.js",revision:"f5febcbd00c1165c254b98d0a33020b0"},{url:"assets/start.html-uDyezAWa.js",revision:"b10b5daf3f12fe881fd0668eca4430b5"},{url:"assets/stateDiagram-b620d43f-w1mYtpVD.js",revision:"1619203b67a54e1d7d196cce5f2f98c5"},{url:"assets/stateDiagram-v2-2671c3d1-xaF1im6Z.js",revision:"c54d4ae6e421ec78062054c7fc6969f5"},{url:"assets/style-Tj0-KenM.css",revision:"36a590696c444e3e28bdef8fdfb93e3b"},{url:"assets/styles-4ba6ed67-HTbB9pbZ.js",revision:"1850ecb166e501b1f810e4c7ed57f715"},{url:"assets/styles-b966c4ae-H6tCXVxS.js",revision:"2c0e21940573279c38b798e9f714b192"},{url:"assets/styles-bbc3fe3b-4cn30Fs-.js",revision:"b18540ef1053da712175b258b0c8b0c0"},{url:"assets/svgDrawCommon-ad5ef572-eI41Wm50.js",revision:"a6f2ad4fa83d99c31b92d79c95e5808d"},{url:"assets/thanks.html--KuWuTSm.js",revision:"d3803fff8502582755c3807cb30b7cab"},{url:"assets/thanks.html-eseVCxC7.js",revision:"1273ae668b9056c36531756d4732bdb3"},{url:"assets/thanks.html-F1DFxuQI.js",revision:"a4077c1247c6d12a11356f36b09d26d3"},{url:"assets/thanks.html-uU2jemjd.js",revision:"96f1879ed6e08b36c3de9968071ed7ea"},{url:"assets/the_nature_of_live_broadcast_delay.html--_Oe6F80.js",revision:"f8658cf2d7e8ad6d96608c589f34470c"},{url:"assets/the_nature_of_live_broadcast_delay.html-bGwDwg8A.js",revision:"20f830ee314f6b02c6b0126b63b5446b"},{url:"assets/the_nature_of_live_broadcast_delay.html-KHnxiXxs.js",revision:"af034e31e774ba7f59aad68769ac37b2"},{url:"assets/the_nature_of_live_broadcast_delay.html-vfCX1bgp.js",revision:"249ce0b00f2dde216515344489093e43"},{url:"assets/timeline-definition-732a2638-SVdJN6QQ.js",revision:"b82a2b0d1ea4524fca7250b05051dbf5"},{url:"assets/use_cases.html-C-cj_NSV.js",revision:"a791484044a968dc199237dad1cc28f2"},{url:"assets/use_cases.html-lHSo0w28.js",revision:"2f62a031ba7df4b14a6a3967f13903d4"},{url:"assets/use_cases.html-NGOdBBIO.js",revision:"6edd514e04d14b05c2a5db8becc00af0"},{url:"assets/use_cases.html-nlOjewQC.js",revision:"727e6f6195079f183e29904a3db6fb6a"},{url:"assets/video_conferencing_related_resources.html-1ZPXoBfM.js",revision:"e4757909bc6677a4f013cecc2fd1f9cf"},{url:"assets/video_conferencing_related_resources.html-AS8_6dZk.js",revision:"b32c2650fa08531a41cb3a59b89e3836"},{url:"assets/video_conferencing_related_resources.html-Da8l8FFw.js",revision:"a391a24998a5e69a47cbc89241c5e857"},{url:"assets/video_conferencing_related_resources.html-SX4i-tyB.js",revision:"5bce76ddfedd1dfd47d7a8381785f9e0"},{url:"assets/vs_code_zh-ltEPcFYF.js",revision:"bae72e4c099d90687244cb1ba5708ec1"},{url:"assets/web_hook_api.html-adtpDhAG.js",revision:"dec0c93b7a2f82188c65df946b68a050"},{url:"assets/web_hook_api.html-DDD36REX.js",revision:"3f769f46547d3cc3de47527466a736c9"},{url:"assets/web_hook_api.html-F_kUu3X6.js",revision:"95e48cec141cf6b666746c158fa55d8c"},{url:"assets/web_hook_api.html-I46LUNuG.js",revision:"77b1b7aa355a10afb8ce044ba6d36b35"},{url:"assets/webrtc_compilation_and_use.html-3Wgq1AT7.js",revision:"b85235ef120d2f4c446bd10a7a6d5e6b"},{url:"assets/webrtc_compilation_and_use.html-FCI8zWK-.js",revision:"df6c2c0c9bc5da569601b37f48666cb7"},{url:"assets/webrtc_compilation_and_use.html-u4uYYnLr.js",revision:"39615c16478a511c7cce6932b7d93b9c"},{url:"assets/webrtc_compilation_and_use.html-zmvb9by4.js",revision:"6fbfe50928d828008702bb4dfb4d7e85"},{url:"assets/webrtc_signaling_interaction_format.html-RSBHyl7A.js",revision:"918d5f1ae8bc5965606da4fe6657addb"},{url:"assets/webrtc_signaling_interaction_format.html-TjrAUdNc.js",revision:"9c31ec603847531d41ccc4896636cae1"},{url:"assets/webrtc_signaling_interaction_format.html-tkZpC3_1.js",revision:"cd75c78a15c67d291d8e54bac262ca8c"},{url:"assets/webrtc_signaling_interaction_format.html-z1sc5Nd0.js",revision:"40c4838f9d061ba57e584f57e18c6e27"},{url:"assets/xychartDiagram-f746c04c-ewecNIL5.js",revision:"b832accbed5e96894865d7a65ad2218f"},{url:"assets/zltoolkit_source_code_study_notes.html-ElJi0L0Z.js",revision:"d33843ef74beecc7893af83afdc6005a"},{url:"assets/zltoolkit_source_code_study_notes.html-rBGfF-Ka.js",revision:"1d50586c77af688ffbdba46ea657a7c3"},{url:"assets/zltoolkit_source_code_study_notes.html-vFvvg7fr.js",revision:"0517fff48911aa21ff7f41c822b80900"},{url:"assets/zltoolkit_source_code_study_notes.html-XyGnG3Jc.js",revision:"dd92a80d45f838fcd5522250cc30101b"},{url:"logo.svg",revision:"6c6a0dc1bda8418aef497da1d078d96f"},{url:"404.html",revision:"3865fe28b07f8c7e04430c7042553a63"},{url:"guide/code/index.html",revision:"85a424a2f8ab175a7688fce05152636a"},{url:"guide/code/oncetoken.html",revision:"fa69dd9ffe56cd8e27b3e370c74273eb"},{url:"guide/faq/index.html",revision:"98b90c0cb2df43d4e1ddd66095bbbd47"},{url:"guide/faq/not_recommended_qq.html",revision:"e637aeeabdc118d09ff04ab5f528e51d"},{url:"guide/faq/rtmp_playback_compatibility_issues.html",revision:"00de49934f55a20376ccfdade9e697e4"},{url:"guide/index.html",revision:"537b86589540da3740db655820964c94"},{url:"guide/install/compilation_instructions_for_windows_version.html",revision:"5f782653d1dadb9f3a19523fe11443f1"},{url:"guide/install/index.html",revision:"24702ef6edb73e206ab9a43de2d06f3e"},{url:"guide/install/install_zlmediakit_using_vcpkg.html",revision:"852b478bc53f0134bfebd52c9a31662f"},{url:"guide/install/start.html",revision:"c6dfd6105e1b04ccaf084bb089ba9979"},{url:"guide/media_server/config_file.html",revision:"067213db44c1c222ebb1e8b5ea76ef76"},{url:"guide/media_server/generate_ssl_self-signed_certificate_and_test.html",revision:"a533b403b85e7d8cbaba53a20cef3b0f"},{url:"guide/media_server/how_to_enable_https_related_functions.html",revision:"40bd846cfdc9c265de5d1ddf3e102624"},{url:"guide/media_server/index.html",revision:"0ab3216240c6a42aa79e6be89eba6c80"},{url:"guide/media_server/on-demand_push_streaming.html",revision:"6c81941031f2a4737ec8f4064a22bf81"},{url:"guide/media_server/on-demand_streaming.html",revision:"6aad038175106a1a28f6b361d621d6a3"},{url:"guide/media_server/play_url_rules.html",revision:"32eba3b014511f5646319759da0b0f58"},{url:"guide/media_server/playback_authentication.html",revision:"cb043dfa45a73cfd4fc485f7fb4baf39"},{url:"guide/media_server/push_authentication.html",revision:"d5dde7a2ae888875f40f93ed9265e61a"},{url:"guide/media_server/push_test.html",revision:"ef9b26df3f96a90ca95c7f9a8a72bdf4"},{url:"guide/media_server/restful_api.html",revision:"b4a580e6829daba8f7eeded3ed41dfa3"},{url:"guide/media_server/sequence_diagram.html",revision:"86718c51508814797cc54b3aaf3897e1"},{url:"guide/media_server/start_server.html",revision:"94a3d840c323775773679f16702ad488"},{url:"guide/media_server/web_hook_api.html",revision:"e48f02b170a2af5d7a700b31dd7647a4"},{url:"guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html",revision:"9191a069386b2284181a2970eb45b92a"},{url:"guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html",revision:"5684d250848fcf20793c25363f1278cc"},{url:"guide/protocol/gb28181/index.html",revision:"36d8bb0881015de3499a3ab62dc067ce"},{url:"guide/protocol/gb28181/push_streaming.html",revision:"19affb2942d7240ae76ca0e13534d9d8"},{url:"guide/protocol/index.html",revision:"56d02c69a253d7ab9540ea3402d30f34"},{url:"guide/protocol/srt/index.html",revision:"435927a3703972d18b9b86653426e62f"},{url:"guide/protocol/webrtc/index.html",revision:"345c56b94b207ce55f267210d26fd3a6"},{url:"guide/protocol/webrtc/webrtc_compilation_and_use.html",revision:"e0edab3a2df7b7dd60bfcf511f5ad727"},{url:"guide/protocol/webrtc/webrtc_signaling_interaction_format.html",revision:"070befc559bef31a64235d6fb317ef90"},{url:"guide/sdk/how_to_create_a_live_steam.html",revision:"5f8db8dad9394d0552a3dac37b996286"},{url:"guide/sdk/index.html",revision:"8e58b099444522747c6b5e85ae68957a"},{url:"index.html",revision:"5c52ae48ac5c1545dd1a8cdf47d3e09b"},{url:"more/collaborative_projects.html",revision:"81fc258afab08d2823429ed06afc810e"},{url:"more/contact.html",revision:"c696a5a1dfac6b7b9ada227c7327e891"},{url:"more/index.html",revision:"b1c30c50e5eed16a3d0d63afdb31fd65"},{url:"more/license.html",revision:"d3d09408fba9d2ca0ef815dde6b7cd62"},{url:"more/thanks.html",revision:"1660dad18dcec32e34fa8f107ed52606"},{url:"more/use_cases.html",revision:"09bd34eb7dea4ada219276772d7a45c1"},{url:"reference/development_log/hls_high_performance_journey.html",revision:"29dfa747f9fac3cd3105c7e47258fd82"},{url:"reference/development_log/index.html",revision:"9e81ea4739ab81a8007c8467faf39b1d"},{url:"reference/development_log/rtsp_performance_optimization.html",revision:"315ee5c01757cd2216d312ec5ea29634"},{url:"reference/documents/exclusive_features.html",revision:"d6027106c8e31b792c9de6687b45c355"},{url:"reference/documents/high_concurrency_implementation_principle.html",revision:"063c3813a491128b8ee35466c54dbf70"},{url:"reference/documents/index.html",revision:"8d22ef31cca3e15398d171982665a712"},{url:"reference/documents/introduction_to_streaming_media_related_technologies.html",revision:"f4b32add899a41049ac5c1a7f1855658"},{url:"reference/documents/rtsp_push_process.html",revision:"ad5dd7491cd5a0b5148bdbc3d1588e8d"},{url:"reference/documents/the_nature_of_live_broadcast_delay.html",revision:"55fefc9095e3754601b193a2f0b24348"},{url:"reference/index.html",revision:"38153056bf91c9f6b40ac52b9c8429ae"},{url:"reference/resources/dependency.html",revision:"79443e289d1ed32af7b88ccb85f9fff6"},{url:"reference/resources/index.html",revision:"ee99966641d5313f73d11265da952b5b"},{url:"reference/resources/rtmp_support_for_h265_and_opus.html",revision:"765e550ebe1c72304cb30532a1338ba3"},{url:"reference/resources/video_conferencing_related_resources.html",revision:"80ab294e442dbe00ef14f015d77b711f"},{url:"reference/resources/zltoolkit_source_code_study_notes.html",revision:"32e04f5fff883191c9ce66ee0042ea8d"},{url:"reference/test/benchmark.html",revision:"e886b25484a8f02b929ba91af8ad17b8"},{url:"reference/test/delay_test.html",revision:"1f3eb000e82cbc65176ef00d9903c6b2"},{url:"reference/test/how_to_test_delay.html",revision:"2c96552964060cfc177fd80edd546dda"},{url:"reference/test/index.html",revision:"2be62b03ecc39a6b43a24555000bf3ce"},{url:"reference/test/online_test.html",revision:"aa483f48ee078ea0d68132b9f58c1cff"},{url:"reference/test/performance_testing.html",revision:"8d4200d81390ca1fe3b9b3f279304d3b"},{url:"reference/test/rtmp_pull_stream_performance_test.html",revision:"a2d320976238a571e8abcfbc98a5432f"},{url:"reference/test/rtmp_push_stream_performance_test.html",revision:"2dd295026f98647cee485cc10d8a4be1"},{url:"reference/test/rtsp_pull_stream_performance_test.html",revision:"cd0e3b1c372d206cbde20ed6afda94f1"},{url:"reference/test/rtsp_push_stream_performance_test.html",revision:"605134697ef11b9a37801e3c2f80cab6"},{url:"tutorial/index.html",revision:"39fa90bef2b872ccb323f6dee04b5bd6"},{url:"zh/guide/code/index.html",revision:"d0a9ad2d07a86929b1310d2f691c697b"},{url:"zh/guide/code/oncetoken.html",revision:"8348b7af27a9139624347b312aa64d96"},{url:"zh/guide/faq/index.html",revision:"67f7fa0cd14c2a280275ed76cbe4b068"},{url:"zh/guide/faq/not_recommended_qq.html",revision:"5e86bf875d063fa0169790bbd9c36230"},{url:"zh/guide/faq/rtmp_playback_compatibility_issues.html",revision:"7466b0664b0558a0bb545ca8920beb9d"},{url:"zh/guide/index.html",revision:"981aefd605a083bcf8754349de180095"},{url:"zh/guide/install/compilation_instructions_for_windows_version.html",revision:"ec97c1f96cd838ecc5150bb27b5f303a"},{url:"zh/guide/install/index.html",revision:"1446d21d66120a66ab52c91e3627da8e"},{url:"zh/guide/install/install_zlmediakit_using_vcpkg.html",revision:"ca3e3c192fac384b2f6d327fbcf07d4d"},{url:"zh/guide/install/start.html",revision:"236cbf4789f07ea51aade4a15bc96e01"},{url:"zh/guide/media_server/config_file.html",revision:"9814ac54bac4be4823c64852d32555ae"},{url:"zh/guide/media_server/generate_ssl_self-signed_certificate_and_test.html",revision:"5e50f5716ffcd4b973182d2109166be7"},{url:"zh/guide/media_server/how_to_enable_https_related_functions.html",revision:"500c433eb534fa0604952ae79a00034a"},{url:"zh/guide/media_server/index.html",revision:"aa3a90561f254260c5258408e430ebf3"},{url:"zh/guide/media_server/on-demand_push_streaming.html",revision:"660f119a7abe28af45d059d3e793ab86"},{url:"zh/guide/media_server/on-demand_streaming.html",revision:"574ea60b4168e23332964d891ada6fb3"},{url:"zh/guide/media_server/play_url_rules.html",revision:"e63d29bae5ba7aa37e2a7750031c23b9"},{url:"zh/guide/media_server/playback_authentication.html",revision:"514d7c9559fe9a7b0a8b48e836014de5"},{url:"zh/guide/media_server/push_authentication.html",revision:"f440ffb820883ea394eb101d0028d369"},{url:"zh/guide/media_server/push_test.html",revision:"eb4c5584dbb732a85d603ffa92cf36cc"},{url:"zh/guide/media_server/restful_api.html",revision:"c6bc2fcfc70314c89b226ca7efae126c"},{url:"zh/guide/media_server/sequence_diagram.html",revision:"51454217ca679b1681369debeced4249"},{url:"zh/guide/media_server/start_server.html",revision:"dde7d5008ccb5634bb2c166310d40c6e"},{url:"zh/guide/media_server/web_hook_api.html",revision:"9e1f2330fd960892fea3509137cf6e8b"},{url:"zh/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html",revision:"f3f705e723ba6cbb7702f0624f5fed87"},{url:"zh/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html",revision:"4f7bd0690c4c2e09c4e46dc5cda2f18b"},{url:"zh/guide/protocol/gb28181/index.html",revision:"20983e78723b0f0deae35fc053bdabce"},{url:"zh/guide/protocol/gb28181/push_streaming.html",revision:"31954cf710a40696539defc10f25f816"},{url:"zh/guide/protocol/index.html",revision:"aeb5067f5dd0a5f86dc57f9e874dc120"},{url:"zh/guide/protocol/srt/index.html",revision:"11f00a3a8ce8fc58fee5f356fd79cb3e"},{url:"zh/guide/protocol/webrtc/index.html",revision:"7561b307370ed1b04bb30306bd8f2736"},{url:"zh/guide/protocol/webrtc/webrtc_compilation_and_use.html",revision:"578f13714759b0c361a3ea3d0d5461df"},{url:"zh/guide/protocol/webrtc/webrtc_signaling_interaction_format.html",revision:"9d73c8eb9e09e9995ea9bc788b878f75"},{url:"zh/guide/sdk/how_to_create_a_live_steam.html",revision:"9233b947ec3f1916ec9cf8aca0764301"},{url:"zh/guide/sdk/index.html",revision:"7ee54c93acac3c9d835e52f9e3bacb8f"},{url:"zh/index.html",revision:"daa549433be45eff028ab4b7882ee52d"},{url:"zh/more/collaborative_projects.html",revision:"32e8b41ac567c70d28fd0c6f7a42e817"},{url:"zh/more/contact.html",revision:"3d8167dfe9dc64662bee707b2786049e"},{url:"zh/more/index.html",revision:"7f05c718b7794f6e376c0e6046e76653"},{url:"zh/more/license.html",revision:"c8dd3fdefcfb62c696e6a76cef776f88"},{url:"zh/more/thanks.html",revision:"2fccada4ad89bcae960428906061c345"},{url:"zh/more/use_cases.html",revision:"0cb8940c581c8e2d34820019dcf21d21"},{url:"zh/reference/development_log/hls_high_performance_journey.html",revision:"c418892d163dbf3fe8e3c4a88d4b3991"},{url:"zh/reference/development_log/index.html",revision:"d743257a94edbe6312263d353902f756"},{url:"zh/reference/development_log/rtsp_performance_optimization.html",revision:"31f03ebd6270fbc607d2361e3b6900a5"},{url:"zh/reference/documents/exclusive_features.html",revision:"2af8910204c20e3eb6c0c8d75ae91088"},{url:"zh/reference/documents/high_concurrency_implementation_principle.html",revision:"3e84efa34c2bab0041625aef66230144"},{url:"zh/reference/documents/index.html",revision:"cdb543633747ad115936d3a4d7e6d213"},{url:"zh/reference/documents/introduction_to_streaming_media_related_technologies.html",revision:"f30b3d26261ed56acaf8c56fc19fef61"},{url:"zh/reference/documents/rtsp_push_process.html",revision:"35a0eca2ceaa5d68bfa06ad53f97580f"},{url:"zh/reference/documents/the_nature_of_live_broadcast_delay.html",revision:"ba5445111cbf70e3a82dfd63a1648db2"},{url:"zh/reference/index.html",revision:"10c7c9c408363748924c89c599d3dedb"},{url:"zh/reference/resources/dependency.html",revision:"856b6284af8a64801e2bd56dcbc286f2"},{url:"zh/reference/resources/index.html",revision:"fcdad89b324ab70311c6ea8e248d5e81"},{url:"zh/reference/resources/rtmp_support_for_h265_and_opus.html",revision:"b31bc0135f4271ae45db4330d4972ecf"},{url:"zh/reference/resources/video_conferencing_related_resources.html",revision:"cb309b46caa86da2656acb32761e653b"},{url:"zh/reference/resources/zltoolkit_source_code_study_notes.html",revision:"f5ec739923fbf0b451934f5281647d0b"},{url:"zh/reference/test/benchmark.html",revision:"33861a009187c0d4717e2821baf8d396"},{url:"zh/reference/test/delay_test.html",revision:"0863d7f862dc67e25f3b12d979eaf22d"},{url:"zh/reference/test/how_to_test_delay.html",revision:"5f93a6ced77897988da60f6f3f17c974"},{url:"zh/reference/test/index.html",revision:"1769a86f8d69064f35444fafddf626f3"},{url:"zh/reference/test/online_test.html",revision:"b761ed0fdb4188dd2f43f6d09621d000"},{url:"zh/reference/test/performance_testing.html",revision:"12f6a197bb0385ff5c12389f23176b91"},{url:"zh/reference/test/rtmp_pull_stream_performance_test.html",revision:"955df714494ab14f49577163713a8871"},{url:"zh/reference/test/rtmp_push_stream_performance_test.html",revision:"1d7dd0a4bf3fc8c126732a2efc4182fb"},{url:"zh/reference/test/rtsp_pull_stream_performance_test.html",revision:"8f3093e50eb385c76e38c04c45efb6e8"},{url:"zh/reference/test/rtsp_push_stream_performance_test.html",revision:"5f15e128a774d7593631de2291f2cb60"},{url:"zh/tutorial/index.html",revision:"e00a3b7e9b0b47f5255875f5e7965ae1"},{url:"assets/icon/apple-touch-icon-114x114.png",revision:"b39af39658e13fd99763e10b9991ccf8"},{url:"assets/icon/apple-touch-icon-120x120.png",revision:"4c7de55a0bfef43bc0eb52905af33cf6"},{url:"assets/icon/apple-touch-icon-152x152.png",revision:"a23249a982dd7d97bc38e851acfc1ec8"},{url:"assets/icon/apple-touch-icon-180x180.png",revision:"153e47772d362c174bee9f00b8090bf1"},{url:"assets/icon/apple-touch-icon-57x57.png",revision:"04feca43d959ca0f3b6973782c9fa134"},{url:"assets/icon/apple-touch-icon-60x60.png",revision:"e7f1b90b537806adb676677c3dead66d"},{url:"assets/icon/apple-touch-icon-72x72.png",revision:"604eca13e9aa44f2f1d76778107e5d64"},{url:"assets/icon/apple-touch-icon-76x76.png",revision:"1698d7cd9b2cc90634013d3d62d23736"},{url:"assets/icon/apple-touch-icon-96x96.png",revision:"a361212595e0c34b5d3d64084864d3e9"},{url:"assets/icon/chrome-192.png",revision:"440ff33effa9f895b67156ed57eac1c1"},{url:"assets/icon/favicon-16x16.png",revision:"98c8fdb75f1f1891b830dd70be7780c5"},{url:"assets/icon/favicon-32x32.png",revision:"a0c87ba0608aecffe0d0182415770766"},{url:"assets/icon/guide-maskable.png",revision:"99cc77cf2bc792acd6b847b5e3e151e9"},{url:"assets/icon/ms-icon-144.png",revision:"a3e06505f5a643a43d7f559a53abd7be"},{url:"images/gb28181_push_streaming_1.png",revision:"6283957dbf3a609f861ffb40054c8ef4"},{url:"images/gb28181_push_streaming_2.png",revision:"eac2229bd7d6302dd56c80924378f4f3"},{url:"images/gb28181_push_streaming_3.png",revision:"d9c25e9d693382a8fb713baa4865c794"},{url:"images/gb28181_push_streaming_4.png",revision:"f3c6584aae2a27866166c43f244c553b"},{url:"images/generate_ssl_self-signed_certificate_and_test.webp",revision:"c893dba3185a1e863cf175c2698c9bf9"},{url:"images/how_to_create_a_live_stream.png",revision:"7f11ba4af262d0e2a00c7718e6c8b180"},{url:"images/how_to_enable_https_related_functions_zh_1.png",revision:"e1ffb707a47c1664161efc7c608fda24"},{url:"images/how_to_enable_https_related_functions_zh_10.png",revision:"5e4cafeb5b4f54f57d76f4dcd632c377"},{url:"images/how_to_enable_https_related_functions_zh_2.png",revision:"fb3c5027a4bef03f174d86f5d4cf8b32"},{url:"images/how_to_enable_https_related_functions_zh_3.png",revision:"ae7f42d52b58c80e0265eeb40be94a9d"},{url:"images/how_to_enable_https_related_functions_zh_4.png",revision:"536b0f9116a4fa6d0f155032886068d3"},{url:"images/how_to_enable_https_related_functions_zh_5.png",revision:"d77ab1e34df68663332e451f59d68203"},{url:"images/how_to_enable_https_related_functions_zh_6.png",revision:"5dd9c32672a86dbe6c07bbe58fe44522"},{url:"images/how_to_enable_https_related_functions_zh_7.png",revision:"e6cf4753d43bc6251742ea3269463c99"},{url:"images/how_to_enable_https_related_functions_zh_8.png",revision:"fe5c53d153ebb88d5b10ca979ce62a1b"},{url:"images/how_to_enable_https_related_functions_zh_9.png",revision:"1aa87003a965b710adf9139645171cb6"},{url:"images/how_to_use_device_id_as_stream_id_1.png",revision:"5d24bb7c4f502d40c38313bb9b1234fe"},{url:"images/how_to_use_device_id_as_stream_id_2.png",revision:"7f293641cf8de63af03ff846a2be943f"},{url:"images/how_to_use_device_id_as_stream_id_4.png",revision:"8d3f6cced326d24e5cb940c85209d47a"},{url:"images/how_to_use_device_id_as_stream_id_5.png",revision:"7f293641cf8de63af03ff846a2be943f"},{url:"images/how_to_use_device_id_as_stream_id_6.png",revision:"b46e6e52751c33cca5b2f768ceae92d2"},{url:"images/install_zlmediakit_using_vcpkg_1.png",revision:"549087a1bb82ce36aa774ce725a9eeea"},{url:"images/install_zlmediakit_using_vcpkg_2.png",revision:"8368b41cc655599a201e5818750225d1"},{url:"images/on-demand_push_streaming_zh.png",revision:"1bb65d163eb9008b383a2d04255c9507"},{url:"images/on-demand_streaming_zh.png",revision:"16dc127a26325cf06dac7aedd115d57e"},{url:"images/playback_authentication_zh.png",revision:"eba681073fa4dd2f6663eeb1c7cbbf7a"},{url:"images/push_authentication_zh.png",revision:"5b1e13cc9369abf66481d2f4cc1dccb5"},{url:"images/push_test.png",revision:"88ec411cafd56da1c27bb958e05c7bda"},{url:"images/start_server_1.png",revision:"46b863cc78aaebb1a0d5d2b824a45519"},{url:"images/start_server_2.png",revision:"29d3057d8f9dd51a5e3a4589a71d3e7e"},{url:"images/start_server_3.png",revision:"3088ed2c7996882f9272a59a8e00f8cf"},{url:"images/vs_code_zh.png",revision:"a374f77503296c66576dcf3641283791"},{url:"logo.png",revision:"32ddfa5715059731ae893ec92fca0311"}],{}),e.cleanupOutdatedCaches()})); +if(!self.define){let e,s={};const a=(a,i)=>(a=new URL(a+".js",i).href,s[a]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=a,e.onload=s,document.head.appendChild(e)}else e=a,importScripts(a),s()})).then((()=>{let e=s[a];if(!e)throw new Error(`Module ${a} didn’t register its module`);return e})));self.define=(i,r)=>{const t=e||("document"in self?document.currentScript.src:"")||location.href;if(s[t])return;let c={};const d=e=>a(e,t),n={module:{uri:t},exports:c,require:d};s[t]=Promise.all(i.map((e=>n[e]||d(e)))).then((e=>(r(...e),c)))}}define(["./workbox-dbb64b4e"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.clientsClaim(),e.precacheAndRoute([{url:"assets/404.html-aQJ09P_F.js",revision:"76f3c96a47b4621ba8ce69fcbd885f68"},{url:"assets/404.html-GPYBV8Ha.js",revision:"e720ca3ad5d38f095f2a9f063d829ea1"},{url:"assets/app-oTlYPy8h.js",revision:"0fdad05b47613f8ef55f42a5d1380357"},{url:"assets/arc-upp1iHW0.js",revision:"3c244241978a0f66269ef9c4d79c34ae"},{url:"assets/array-Nw74a44z.js",revision:"17dcebeaf673b09a1ca5da014d20022f"},{url:"assets/benchmark.html-MSc66SxZ.js",revision:"dc32b8c22dbcb74830e677d297b170b6"},{url:"assets/benchmark.html-PVLgEM3u.js",revision:"9ef795a4d6ae88ff1ad37d0eec118f50"},{url:"assets/benchmark.html-vh5mU2vV.js",revision:"6fcdf6be2d05d124a12fef4268d2bdbe"},{url:"assets/benchmark.html-xQUFyhUw.js",revision:"0b93d042729a80ed7f7b41c6aac852a4"},{url:"assets/c4Diagram-817c8e44-EI6Ep_s6.js",revision:"846deea5104f4ef59a91df8201dd0803"},{url:"assets/classDiagram-48ab76fb-YrjwxOfN.js",revision:"ccef214ed09a38badca295584ee45c6a"},{url:"assets/classDiagram-v2-8ecb0bfc-uyvLMQh4.js",revision:"b294fe643350cc495ae6be6cfe78c103"},{url:"assets/collaborative_projects.html-15UQQvPG.js",revision:"aca89aea107c131135d843d7880f76b6"},{url:"assets/collaborative_projects.html-19-TEwrL.js",revision:"a8092ff5acdcc19af0b636a1909a08fb"},{url:"assets/collaborative_projects.html-gRvZJ2_P.js",revision:"21258323cc48008377e663bcb4b9ccc3"},{url:"assets/collaborative_projects.html-UkPV-L0J.js",revision:"2161be4f8ed6bdc877e5d6c2fc33ae6e"},{url:"assets/compilation_instructions_for_windows_version.html-coo8ZcK6.js",revision:"3b6a63367a41cf704c30f53ea1f2f9f1"},{url:"assets/compilation_instructions_for_windows_version.html-d1DmfQc5.js",revision:"45fdef0928dd6ede36c96acf5b606749"},{url:"assets/compilation_instructions_for_windows_version.html-Hq0AuZTz.js",revision:"66feea9dae54928e3a2bb2f7a51bc417"},{url:"assets/compilation_instructions_for_windows_version.html-xl0PwINJ.js",revision:"ee73eff391cf2201c2517e705bc2e91c"},{url:"assets/config_file.html-54NJpUMh.js",revision:"abe95f4b6332d105d7d7f9163ab5f5aa"},{url:"assets/config_file.html-5j1Bx0Jx.js",revision:"591d662b3e72f0b21c92319d03a2e17c"},{url:"assets/config_file.html-i3ELg7s5.js",revision:"05d0fdfd1621df427f889e3dfb54050c"},{url:"assets/config_file.html-v84_YU9d.js",revision:"377ed23ef99ce10dfcccdc1049fd2244"},{url:"assets/contact.html-JAOAqjBA.js",revision:"a65461fb20b3eba37d374888675f294a"},{url:"assets/contact.html-nPftNmfa.js",revision:"c55df9245c21c481a492bf69830d5eea"},{url:"assets/contact.html-xnD8I3Nc.js",revision:"4013ba052054841619c9f229e6cef407"},{url:"assets/contact.html-XWW2pZ29.js",revision:"0b951bd788c1b31fccea7115275bec02"},{url:"assets/createText-aebacdfe-8FzA6VnR.js",revision:"dc7243f236fe7d2fc13cd5b5aca5c413"},{url:"assets/delay_test.html-_QomqbNh.js",revision:"05e99497e62f35bf7dbea382401387f5"},{url:"assets/delay_test.html-dT3kgdCj.js",revision:"43f900f4b61b8881f4680b57bde2786f"},{url:"assets/delay_test.html-jKr5-1Rj.js",revision:"987a6bc1bac614f188eaf7723018097c"},{url:"assets/delay_test.html-QwzTearq.js",revision:"c5602e99f858845e40d246008838890a"},{url:"assets/dependency.html-gwWfr65O.js",revision:"bff0bf8bb57fc95c472568a8897a5e29"},{url:"assets/dependency.html-IB8qgUUu.js",revision:"b2c7543a2d1f71ef6dacf4204e51ba69"},{url:"assets/dependency.html-OQ3SkmA_.js",revision:"6ade3993f12c06ffdaabbdaf8fc97150"},{url:"assets/dependency.html-vliHx4sJ.js",revision:"133156fbc8cde50f0cb079c965bc9d05"},{url:"assets/edges-80f1ebb6-kOLp6foW.js",revision:"f07681712759424b20af4c50358f4cb0"},{url:"assets/erDiagram-9cfc3649-wxfL-kce.js",revision:"82d44f1c5a54d193a7af0adb08ed8868"},{url:"assets/exclusive_features.html-2siFVq2G.js",revision:"3f63eed8e945a5d96317576aa72a604e"},{url:"assets/exclusive_features.html-dQadFX3J.js",revision:"fbec60e5030557d00198cc2a30372288"},{url:"assets/exclusive_features.html-t4K_S5d4.js",revision:"a7309dc993c5baf1c817785de13dc01b"},{url:"assets/exclusive_features.html-wTOG2Bjt.js",revision:"908ef27f27bc5f36054d486537a4f6e3"},{url:"assets/flowchart-elk-definition-e097735e-Zb7AIGeW.js",revision:"ab05a4dd368aa3f619ce38d6228042a2"},{url:"assets/flowDb-170db09d-41y1nEiW.js",revision:"1b521202a471569bded0ef319a785c69"},{url:"assets/flowDiagram-61eb444c-DuMoGt9F.js",revision:"732566e29859f4373e3ea8d7d9b5f4bb"},{url:"assets/flowDiagram-v2-2f8f667a-Ob2Hpvk_.js",revision:"31e1973ea7443eb534f901dd365c4217"},{url:"assets/ganttDiagram-db6931fb-MZTKg1_s.js",revision:"dfbd55cd175ec127ce4e959090998d2c"},{url:"assets/gb28181_push_streaming_4-qWTnfswt.js",revision:"30c7b622101f90395cc790c0e72e1cf9"},{url:"assets/gb28181_sip_signaling_packet_capture.html-_63zZLPQ.js",revision:"298c5cd5ce0ee80b0433ed54d5c1d647"},{url:"assets/gb28181_sip_signaling_packet_capture.html-dSB5oqMq.js",revision:"dbfc86980d308e1204aa23121f175f5c"},{url:"assets/gb28181_sip_signaling_packet_capture.html-z_vnDm71.js",revision:"f3ac8ffb0848843189888a45d2673bdf"},{url:"assets/gb28181_sip_signaling_packet_capture.html-ZYkWywxi.js",revision:"f3ac8ffb0848843189888a45d2673bdf"},{url:"assets/generate_ssl_self-signed_certificate_and_test-D4Sbj3Ls.js",revision:"616544c7f95d53f29de519db0674f52c"},{url:"assets/generate_ssl_self-signed_certificate_and_test.html-7V6eG0vA.js",revision:"2900e1d4092c29de10d34afb5c4c753c"},{url:"assets/generate_ssl_self-signed_certificate_and_test.html-MI1uDkfZ.js",revision:"d7e26573eadf9e51aebeb8210a27d9dd"},{url:"assets/generate_ssl_self-signed_certificate_and_test.html-qSLRuImw.js",revision:"e5b9c6794282f1b0fe700d22af21f5d2"},{url:"assets/generate_ssl_self-signed_certificate_and_test.html-tLIkOOZS.js",revision:"613d6680d442c4b33fae1cd9ca4d2e5d"},{url:"assets/giscus-unEZQsJ0.js",revision:"34c4288ad53e7d9be8d0f44c9fdba069"},{url:"assets/gitGraphDiagram-6b463803-leFcDYEm.js",revision:"ab0526fcd29721cc08a61f045bed2835"},{url:"assets/high_concurrency_implementation_principle.html-FgHSxlv4.js",revision:"58ada358253c75551a89d27a10c5b85e"},{url:"assets/high_concurrency_implementation_principle.html-opQWc8aM.js",revision:"2fb1a4c2f74fc52046100556dc28ff26"},{url:"assets/high_concurrency_implementation_principle.html-sl-nIpjv.js",revision:"7a20b2d70a9e4eae865ef6ea53a0ce00"},{url:"assets/high_concurrency_implementation_principle.html-x1-J41yC.js",revision:"7d97cdc6dee78a9220e0ed9c19b42005"},{url:"assets/hls_high_performance_journey.html-bBajAqE1.js",revision:"7d3ea5c0f10f1014295bebf7364f6d48"},{url:"assets/hls_high_performance_journey.html-bLztstJM.js",revision:"1de12ca696da6d2fc7345df858d95fe2"},{url:"assets/hls_high_performance_journey.html-pNH0gpXw.js",revision:"d4f378b2535657420b6a7578f84a1619"},{url:"assets/hls_high_performance_journey.html-v74JJlub.js",revision:"d4f378b2535657420b6a7578f84a1619"},{url:"assets/how_to_create_a_live_steam.html-FHwnpSdN.js",revision:"3060639f318e118a09057745e5cde6f4"},{url:"assets/how_to_create_a_live_steam.html-Gq2b9Yi0.js",revision:"1e77b724e809322523173efc4d0edc2f"},{url:"assets/how_to_create_a_live_steam.html-LWbU8h87.js",revision:"7f7e8f631a6d34e6e00d835b5c57e962"},{url:"assets/how_to_create_a_live_steam.html-Q-m7tYG5.js",revision:"7f7e8f631a6d34e6e00d835b5c57e962"},{url:"assets/how_to_create_a_live_stream-3lt6j2fI.js",revision:"67e9191b6843091959a8f07cea06a593"},{url:"assets/how_to_enable_https_related_functions_zh_10-dp8gREln.js",revision:"e08b5f85ae138171fbadcb495d89fa08"},{url:"assets/how_to_enable_https_related_functions.html-Dxu_FBYc.js",revision:"792d4289387884e714677123b7687728"},{url:"assets/how_to_enable_https_related_functions.html-fcJ6Uozv.js",revision:"c4b3dc09434d6236ba12e26ee88007e3"},{url:"assets/how_to_enable_https_related_functions.html-mO3jYJnY.js",revision:"b20d2d93bfc0a7d9afdb7d93d930c2e9"},{url:"assets/how_to_enable_https_related_functions.html-pBy5oO-R.js",revision:"b74b6b9c8a82bfca40c2a900545c97ec"},{url:"assets/how_to_test_delay.html-GLErIksL.js",revision:"04c09d77bf96c882c8573049cab1f49c"},{url:"assets/how_to_test_delay.html-GlLjeJYr.js",revision:"1bd6e54f8408e79ec83b26d5c81259e6"},{url:"assets/how_to_test_delay.html-P7CoGGgx.js",revision:"cd7fcdf450145aa5f1b4185943ff6c59"},{url:"assets/how_to_test_delay.html-ubjyw-PC.js",revision:"13801c3a209c906dccd85db6bb5092ba"},{url:"assets/how_to_use_device_id_as_stream_id_6-sfQ1h9Fe.js",revision:"1bff1864e2dfb05bde4bb12af8c9561c"},{url:"assets/how_to_use_device_id_as_stream_id.html-_vNSGfoU.js",revision:"5850d68f9c88c71712e258d057267d3c"},{url:"assets/how_to_use_device_id_as_stream_id.html-ga4UcAIh.js",revision:"858c041377d0a304dc9cd913185f18fa"},{url:"assets/how_to_use_device_id_as_stream_id.html-r5nxplI0.js",revision:"6098ae31a0323215984fa25749611708"},{url:"assets/how_to_use_device_id_as_stream_id.html-yxD34jok.js",revision:"6098ae31a0323215984fa25749611708"},{url:"assets/image/advanced.svg",revision:"2934a573b64033bebb71f067ebc8d082"},{url:"assets/image/bg.svg",revision:"bed51349ca7476497e51d60437ef8eba"},{url:"assets/image/blog.svg",revision:"5686f361aca8bcf73522de225d09016d"},{url:"assets/image/box.svg",revision:"5f732c9705e288e8fb8ae6d2e5ce906a"},{url:"assets/image/features.svg",revision:"2eb292180d361e4af3f4bf411ef06062"},{url:"assets/image/github-dark.svg",revision:"8dcc6b5262f3b6138b1566b357ba89a9"},{url:"assets/image/github-light.svg",revision:"a0b00583d93c2f7084ad151ee0849934"},{url:"assets/image/layout.svg",revision:"db603c70eb017066ff30923ca5a2cd4a"},{url:"assets/image/markdown.svg",revision:"1a8b4476dae8f52cdd873d2b00fa27fb"},{url:"assets/index-67a42d7d-TJSwJJ1D.js",revision:"40b8fa51b00a664a478a04f5a7dcb88a"},{url:"assets/index-7SG8bi1h.js",revision:"46a193641571106d3b7b43f9bc2a2735"},{url:"assets/index.html-0qJyAU8Q.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-1UKx3tTB.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-2LWO62N7.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-35KxtpZI.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-3Pe7G9Sl.js",revision:"c0c05ddda520e2adda625cdd231876ae"},{url:"assets/index.html-4MOf5u_i.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-4qXHK4Yu.js",revision:"ea8519a44fde5fca68c31fc431e2e570"},{url:"assets/index.html-4w7NJvOq.js",revision:"4a42db4ce3eedfdd7f1686d6f8349f25"},{url:"assets/index.html-6AFjdEoA.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-8kcJLd-q.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-8RsIN7Qj.js",revision:"ff590ed654e791a5b22c11ccc9ddce0e"},{url:"assets/index.html-943vkdnv.js",revision:"66506d542be80c2633ded058cc66b647"},{url:"assets/index.html-9fZsvbS8.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-A9z0_Hu7.js",revision:"4f860e08cf4dabbe3974dcd867207005"},{url:"assets/index.html-Acfu-WyI.js",revision:"ac263380bcaf563b41d4feb14c1f3645"},{url:"assets/index.html-AIAMrVKp.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-aTnTwBPS.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-B81jBW2G.js",revision:"d2cc2cbb1cdc1887b6ddce2f1f48915b"},{url:"assets/index.html-BzbKxypT.js",revision:"662b8f394d27244938126a6f9d36f79e"},{url:"assets/index.html-c0NLam4o.js",revision:"50f75c5795cad25af5071e685fd56d25"},{url:"assets/index.html-c5z6Iek2.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-c9EfxXZy.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-ckFP_gFB.js",revision:"07d69693c903a9eb79e778eb4c22bc01"},{url:"assets/index.html-CKp0mPwh.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-CmVSRxAE.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-CojxHtZz.js",revision:"3cce4cc3f4578dbcd1463687ffb739ae"},{url:"assets/index.html-CSg2VFea.js",revision:"85ff745a783805042df316822743b21f"},{url:"assets/index.html-D9OOw5jZ.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-Dj-Byo33.js",revision:"33d2489812195b60dd65835895fad787"},{url:"assets/index.html-ea4s8txi.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-hD6JZq1M.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-HppSEYlS.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-Hvr1twkc.js",revision:"0863680115a8ded21665ace23a839672"},{url:"assets/index.html-IZsaCX79.js",revision:"315d6eedfc0da5da85c7fbdfd1dd1196"},{url:"assets/index.html-JQu_RH6f.js",revision:"0bfe758ce6140e9d1046435817bad5a2"},{url:"assets/index.html-jVaUOSmI.js",revision:"72b19a33de68639ae16f36b839e7d13c"},{url:"assets/index.html-l-9Jcb0Z.js",revision:"5ab8c4c304de3bbef4c91cdb52fbf08f"},{url:"assets/index.html-lGRuHLpD.js",revision:"85ff745a783805042df316822743b21f"},{url:"assets/index.html-lHFYswhu.js",revision:"68601d9bc01ff40425d106bd1db7b57e"},{url:"assets/index.html-lKh2cFAq.js",revision:"816be3d3c398bcacfbe5eb714e4b70d7"},{url:"assets/index.html-LLxB5nrB.js",revision:"086ed6111461246bc6c97866b2d918d5"},{url:"assets/index.html-LSqTAwnp.js",revision:"c8324355f6d6e02a9bc861e06231a543"},{url:"assets/index.html-LudGOU3A.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-m59LkreQ.js",revision:"28018187ac0f122029bdfeb50cfb455b"},{url:"assets/index.html-MI_McXZr.js",revision:"c5e8700ca283e861dced506472ecbf81"},{url:"assets/index.html-ocl34mDF.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-Oh37e22D.js",revision:"bcb1fcf519857cdf15515f77a485a436"},{url:"assets/index.html-ohZtz6Fw.js",revision:"58893519f365a18c506f1836cfec535a"},{url:"assets/index.html-oRdX7laQ.js",revision:"2de9c461d24eb912ae3e73a7ef0228e7"},{url:"assets/index.html-Pl0D5fWX.js",revision:"df50db0b03d7bc4801e7684b895e72c0"},{url:"assets/index.html-plxXlLQP.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-Q1OCSdNr.js",revision:"0355094bde07e5a1c1841bc347489d5e"},{url:"assets/index.html-qi3PncfW.js",revision:"b01b13800c1abbfe37ecbf7bf04d5102"},{url:"assets/index.html-qjMVLXfF.js",revision:"9e80a629102cb272c373b96d1433b760"},{url:"assets/index.html-QkbwDjsA.js",revision:"841b57fd17ad02196225f94dac99a56e"},{url:"assets/index.html-QQRRY2d0.js",revision:"b43ec38709542738da227e4487b5739f"},{url:"assets/index.html-Rh0erDOb.js",revision:"7a00205cde84a167e23e5c6ce0f20674"},{url:"assets/index.html-TLmaTaqK.js",revision:"310fdf35690289b4b695a2a9f063cdf2"},{url:"assets/index.html-UtNsP0-c.js",revision:"f7bc5cfa2dca2650b49b6af45e1b0176"},{url:"assets/index.html-vbFGRJHC.js",revision:"f7f8601b0a01bd4bddffe566c52bd6aa"},{url:"assets/index.html-VsukZOSA.js",revision:"c6e6b871aa905370fa4d93c22c2fc8e1"},{url:"assets/index.html-Wn9fL8rF.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-X7WU_LPV.js",revision:"18f6a74b2ca20e17c9893fd3cfd2c878"},{url:"assets/index.html-XHP9LdII.js",revision:"e5e71e92d7944049c204b67fef63157b"},{url:"assets/index.html-XiIyF-Mz.js",revision:"125061609d4366c5cf551cfd435226ee"},{url:"assets/index.html-Y6Zxo28x.js",revision:"583fc19e65b7982208e7988a34d75970"},{url:"assets/index.html-ybOFrWXT.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-yjc28uoP.js",revision:"4d87cc57914d0403609cbb2f0de32cbb"},{url:"assets/index.html-ysHWzV3Z.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-zeRiEjXy.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/index.html-Zl8OD7vu.js",revision:"eba5ebfdf176f5b1608ff6a52d885037"},{url:"assets/index.html-ZukUTvpe.js",revision:"48bcfd54b95d449ae71135e417a49572"},{url:"assets/infoDiagram-a336098b-7atRS8Yv.js",revision:"bf395143ae22fb5aca3a330fef96c0b5"},{url:"assets/init-Hi12RPRh.js",revision:"3ce28180466443e9b617d7b96e9f7b8f"},{url:"assets/install_zlmediakit_using_vcpkg_2-1HFW-yNt.js",revision:"eba8f412e34fc0140174130ed248e21f"},{url:"assets/install_zlmediakit_using_vcpkg.html-_H3jokEy.js",revision:"5e8111d2c2acce6608f89dc07754b276"},{url:"assets/install_zlmediakit_using_vcpkg.html-ii7HljTN.js",revision:"322453fc85fbe8ed4eadbdcf75911bd1"},{url:"assets/install_zlmediakit_using_vcpkg.html-lJ__kZwE.js",revision:"90288c6b05b19f6839599ba7d32befbd"},{url:"assets/install_zlmediakit_using_vcpkg.html-NCcA9KPG.js",revision:"47f4ef55f164dcbafed7663d6a41b128"},{url:"assets/introduction_to_streaming_media_related_technologies.html-aLJXiBgK.js",revision:"034f13dcca1ba71ecab35af7bb6423c0"},{url:"assets/introduction_to_streaming_media_related_technologies.html-O53gIrdK.js",revision:"0ef8b597685e571d9ff51705e039dc88"},{url:"assets/introduction_to_streaming_media_related_technologies.html-qLQLZbA3.js",revision:"7969f2099a0e4347e143bfe16e889243"},{url:"assets/introduction_to_streaming_media_related_technologies.html-uFhGEBGc.js",revision:"1d475bfd3c612e339908e97deaa79136"},{url:"assets/journeyDiagram-deae3313-JgGAP5aa.js",revision:"1f18d1b867af5ce0d1171c3efc263749"},{url:"assets/layout-Vth69vlg.js",revision:"f6a9facdb9759259495ec858c74213f3"},{url:"assets/license.html-kMl7iYce.js",revision:"2e4c08f591766721beacb7a195eed5af"},{url:"assets/license.html-onnWhI1X.js",revision:"959de41ff2dbe211d159ffcbbdecaf1d"},{url:"assets/license.html-ptTdZQ9a.js",revision:"59c5af23d2c0c4fa2f4eab93e329bf3c"},{url:"assets/license.html-vCBKTTMs.js",revision:"0b233fa67324d487849017380e90ee7d"},{url:"assets/line-ZVNdUhg2.js",revision:"b15ecf666a86cf2862962c587df8aa3e"},{url:"assets/linear-JH76Qt4f.js",revision:"7c66126d7cf03de542edfae5f3a42e17"},{url:"assets/mermaid.core-QJnSHCal.js",revision:"85abe8b18663a73044aa44519d1c4b46"},{url:"assets/mindmap-definition-617cf8dd-gkffgRdL.js",revision:"68c0813440c2f712a6bee7b8b3a3055b"},{url:"assets/not_recommended_qq.html-CiG918se.js",revision:"c7bbc9df31ac0b9163c0db7ec25fdce2"},{url:"assets/not_recommended_qq.html-g8E5V1Ie.js",revision:"cc6d5dbde1ac6d1fd4335769c6ce3666"},{url:"assets/not_recommended_qq.html-Od4ztKJy.js",revision:"c3885d6144111405525cc78161e1bce3"},{url:"assets/not_recommended_qq.html-Y9F7iYsf.js",revision:"507edb359715bca42b86a286ad163a12"},{url:"assets/on-demand_push_streaming_zh-CK4xj1dh.js",revision:"58fd02f19ecc7bced43f105b06c8430d"},{url:"assets/on-demand_push_streaming.html-AlawaJGx.js",revision:"6c3db4c33ac709878d2b2f76a60041b2"},{url:"assets/on-demand_push_streaming.html-crgN24-s.js",revision:"ac1b3b0933859c59196b2f575f3649ac"},{url:"assets/on-demand_push_streaming.html-efCX-3qM.js",revision:"c9ef84699c5ed07bc54c65ba522957a5"},{url:"assets/on-demand_push_streaming.html-kP6TQb2_.js",revision:"2785a3c0027931aa5e62297f7ccf37c2"},{url:"assets/on-demand_streaming_zh-h19pTlmd.js",revision:"0eb44d4c65523fe801d4a4498adaafc4"},{url:"assets/on-demand_streaming.html-2DvN-m5K.js",revision:"b38e0c728d1e2148b057ac438c0329fd"},{url:"assets/on-demand_streaming.html-5SBDxVes.js",revision:"a3755702d9fcf9d9e4672d16658758a0"},{url:"assets/on-demand_streaming.html-6YNYtYZR.js",revision:"3fbcc90d3ac30ef2bbd9d2b396ebe263"},{url:"assets/on-demand_streaming.html-yNrWu3de.js",revision:"c3c391c28e85b970b8d8c44d97aebe88"},{url:"assets/oncetoken.html-87LqB-OG.js",revision:"198ad15da16a08762c5bfe2bf9336d7e"},{url:"assets/oncetoken.html-JcsefotR.js",revision:"0d901abe41c808ec9f1a3c1c35ffe65f"},{url:"assets/oncetoken.html-LPckM_ZY.js",revision:"9154f9b016875771b1917e6c850a1996"},{url:"assets/oncetoken.html-VjVkUYP3.js",revision:"1aad59f5bbc1abbc70d63a150a931997"},{url:"assets/online_test.html-_0lwAxTN.js",revision:"efcd02e75fe190aeaf414f293ae501a0"},{url:"assets/online_test.html-8_GcpcRF.js",revision:"52338331afa59a61a6bcb8f6ca24fafe"},{url:"assets/online_test.html-osni6C75.js",revision:"e661758df2e4ad6406dc4aa0e9871690"},{url:"assets/online_test.html-UiWsenDR.js",revision:"d57dc8563b8702b2f56ff82e89e0671a"},{url:"assets/ordinal-wXG5obU4.js",revision:"a72e57060c4f6a7606baa78dc6e9ad02"},{url:"assets/path-aUcfwwLI.js",revision:"f86c0243cb45746453c6b4f7dbd9f34d"},{url:"assets/performance_testing.html-Cgq3dIgv.js",revision:"c88d22f06a7b6af79d27258bdc4116e2"},{url:"assets/performance_testing.html-DQL8Y_0H.js",revision:"614f84b26f36cd75f82542fcafbadbf3"},{url:"assets/performance_testing.html-mjt6ZXJJ.js",revision:"97e1dc22df7fe620efa284ecc5f6719c"},{url:"assets/performance_testing.html-wMvwmLu0.js",revision:"d43a0001d72ef49579dbf598ac26ba4e"},{url:"assets/photoswipe.esm-i2ohwMnJ.js",revision:"e9ff503527474b1afe53a1ee900448a3"},{url:"assets/pieDiagram-a5166659-9IukIHDQ.js",revision:"df90978fe5fbf96a1783c9c18d71c272"},{url:"assets/play_url_rules.html-_eahSglS.js",revision:"7fbd4cf9e506e5c36ccd6e6a3af7ffc9"},{url:"assets/play_url_rules.html-f7mxplY_.js",revision:"3e587992a9259911d1997e0b39d9451d"},{url:"assets/play_url_rules.html-LU-zd-xr.js",revision:"e8313eb4ea56e522cb92f9f260523109"},{url:"assets/play_url_rules.html-OaEuncfX.js",revision:"cbf7adc95b30fce1379b81f3b623862b"},{url:"assets/playback_authentication_zh-gjAAn9Yd.js",revision:"d1b73468587890117bafd3f86759aec4"},{url:"assets/playback_authentication.html-3VR0HbK8.js",revision:"0eed4143d47e0e0044ab242b7719ae5c"},{url:"assets/playback_authentication.html-4kXdTj5T.js",revision:"19ef89a98a0a481d3a48caffcfaab8c6"},{url:"assets/playback_authentication.html-arMfpj8D.js",revision:"9168f09b8be9be130d72ddb4c4b4fb3c"},{url:"assets/playback_authentication.html-wjgI-Yj5.js",revision:"565152fbd8128bbfc4a350131902a817"},{url:"assets/plugin-vue_export-helper-x3n3nnut.js",revision:"25e3a5dcaf00fb2b1ba0c8ecea6d2560"},{url:"assets/push_authentication_zh-OS4qAsfx.js",revision:"2c2bf93635139a5d3979114757a9bfa3"},{url:"assets/push_authentication.html-8JQfqi5E.js",revision:"3e7eea41c9dfba1adbb4128ecaf6f554"},{url:"assets/push_authentication.html-8OJ18L-5.js",revision:"dfdb41ccb354383d458d4ead057a6203"},{url:"assets/push_authentication.html-Ov0yMs1o.js",revision:"a4703588a04087ed8681590bb89ec5d8"},{url:"assets/push_authentication.html-qlfLynHw.js",revision:"b3d7bf7f8d5bdcd9e98b65b9def167ab"},{url:"assets/push_streaming.html-5MzKBCwx.js",revision:"00af9265177e3e8a736e41254f3cd2eb"},{url:"assets/push_streaming.html-o6HXGEGb.js",revision:"ccb4173fc1e46d55770bf80884a0efc6"},{url:"assets/push_streaming.html-VOPU_Vgm.js",revision:"9e1e6a0ef3abf52dca2add179bddae3b"},{url:"assets/push_streaming.html-Z4VDPPfI.js",revision:"c64db74b6d82876529a744130565aa0e"},{url:"assets/push_test-WgKOKRFc.js",revision:"e9d124a5d01db8f90748223c62797fde"},{url:"assets/push_test.html-44HoghM7.js",revision:"c1e1774a35e8bd444f8c93120f73f73e"},{url:"assets/push_test.html-gnFrDUbt.js",revision:"64472eabb158a683a6690a65cca64231"},{url:"assets/push_test.html-rQVB769L.js",revision:"93f2a09ff23420dc2f85ff60910ec319"},{url:"assets/push_test.html-zDMue1Qy.js",revision:"410816feb252393fead5a8009342c478"},{url:"assets/quadrantDiagram-6c355bbc-mORRzAzd.js",revision:"8a3ac18a8b3d430e763005eac83ac865"},{url:"assets/requirementDiagram-4038b16c-HXR1kktq.js",revision:"d9f2e82eee37c1feb14f0b27e6eca2de"},{url:"assets/restful_api.html-INg-XF77.js",revision:"400de4528048e2ee6ce9746ac8206dfb"},{url:"assets/restful_api.html-vpWQQrW9.js",revision:"3577dfd936bbed14b4d76ac027be2810"},{url:"assets/restful_api.html-W3f4X4lL.js",revision:"9c9664983ac5a6fc2d848f581018e6bf"},{url:"assets/restful_api.html-Xx1SUrzX.js",revision:"27db13c31cdd8cf6d8f4d4db7958194b"},{url:"assets/rtmp_playback_compatibility_issues.html-5avJPHVo.js",revision:"6be1e2e717cb3e63216bce17db431fda"},{url:"assets/rtmp_playback_compatibility_issues.html-iFgHmMMS.js",revision:"775194767084abe8232e35ed6d3075dc"},{url:"assets/rtmp_playback_compatibility_issues.html-RzirVjbt.js",revision:"bf3a79adbd8687cf32a560b763907237"},{url:"assets/rtmp_playback_compatibility_issues.html-wBkT5hGE.js",revision:"85651bf18cd221f1ae82cad8d5a417b6"},{url:"assets/rtmp_pull_stream_performance_test.html-_aYV-qZf.js",revision:"ade15d4d534cd82ca2cc09fba7821fc3"},{url:"assets/rtmp_pull_stream_performance_test.html-hMTKB3GA.js",revision:"19aa3120395b68e9658773a054068f53"},{url:"assets/rtmp_pull_stream_performance_test.html-HQ4fzTKd.js",revision:"305864626776df21bb91f68cd1ae4047"},{url:"assets/rtmp_pull_stream_performance_test.html-ukcH42DI.js",revision:"b41914288c79c5be7b166a18d10bc9b1"},{url:"assets/rtmp_push_stream_performance_test.html-4ywCdN8c.js",revision:"a3740ef717b6f18466133ff47de260f7"},{url:"assets/rtmp_push_stream_performance_test.html-AxJYj-3i.js",revision:"483711c1a022e7d97bbfd4425092f5e6"},{url:"assets/rtmp_push_stream_performance_test.html-BY1UVNB2.js",revision:"ad220f0720f98cb1adc30de41972428f"},{url:"assets/rtmp_push_stream_performance_test.html-LfVKdEym.js",revision:"a72bb9d7fbcfcb86be5020d1893c3187"},{url:"assets/rtmp_support_for_h265_and_opus.html-f4aPfFot.js",revision:"a492fe181304965e8618760a986a1330"},{url:"assets/rtmp_support_for_h265_and_opus.html-IiMCf774.js",revision:"a0a5a22b18e03fe9d56d0ac9c2ee6191"},{url:"assets/rtmp_support_for_h265_and_opus.html-tX2acU7J.js",revision:"70ba7cf876f460ad76d42aa18bfa2af7"},{url:"assets/rtmp_support_for_h265_and_opus.html-UXqjeTtH.js",revision:"dba6bc5e814abe5002ca10468a27d871"},{url:"assets/rtsp_performance_optimization.html-N4V23aKI.js",revision:"8a21a102026c37a97823ac99d10ceda5"},{url:"assets/rtsp_performance_optimization.html-TdeED4XC.js",revision:"8fdd93ff43e06903e5042878f4b1879f"},{url:"assets/rtsp_performance_optimization.html-TWn6Egp8.js",revision:"ed7e56b088d4f1085d44d2bfb16b762b"},{url:"assets/rtsp_performance_optimization.html-XwSQReWx.js",revision:"e4f0f43ad81a11129ab62c4dc1a66d96"},{url:"assets/rtsp_pull_stream_performance_test.html-2yov4QZH.js",revision:"36e9219568e20efb63443ea908a33bae"},{url:"assets/rtsp_pull_stream_performance_test.html-9hA9_SB-.js",revision:"687c3b750da73663d062d7188877acca"},{url:"assets/rtsp_pull_stream_performance_test.html-cK-OpNrS.js",revision:"f2f3726ccd96f909b1b9f209eb80fa0e"},{url:"assets/rtsp_pull_stream_performance_test.html-KdEDWBLu.js",revision:"f2f3726ccd96f909b1b9f209eb80fa0e"},{url:"assets/rtsp_push_process.html-eeithr0y.js",revision:"f54ec8d338002bfc19a7ebf2719dd781"},{url:"assets/rtsp_push_process.html-gk6hQwdn.js",revision:"328a8a5267e44865025cd3d5497083ad"},{url:"assets/rtsp_push_process.html-MSFA7pR8.js",revision:"0730b0affd6b626ec2adde265bfbb202"},{url:"assets/rtsp_push_process.html-zH-D_jAF.js",revision:"3e9ae70fe5f1fde6b18baf956a75ac6f"},{url:"assets/rtsp_push_stream_performance_test.html-3UQhsyo8.js",revision:"308c989c47769eb89dc0504d1392b531"},{url:"assets/rtsp_push_stream_performance_test.html-g2X0PP_e.js",revision:"825be1a0511d7deae628dc8708cdb3cd"},{url:"assets/rtsp_push_stream_performance_test.html-RMobzxOL.js",revision:"ae20e2f821429e856cd66efffa4ec917"},{url:"assets/rtsp_push_stream_performance_test.html-zFl0_4_8.js",revision:"ae20e2f821429e856cd66efffa4ec917"},{url:"assets/sankeyDiagram-6db3d513-FtDAma5v.js",revision:"b1c6e250aff843a11bb2f37c77ec9cd7"},{url:"assets/sequence_diagram.html-FlbOL2Y8.js",revision:"5516ed1735437bdd8d6624d2a41a4319"},{url:"assets/sequence_diagram.html-SYfON6Mt.js",revision:"c3e2f1dd9c7078d34936b33e375cdda4"},{url:"assets/sequence_diagram.html-y7tfUv_v.js",revision:"f83ca3c8bcc0b924a3664b7656d0d346"},{url:"assets/sequence_diagram.html-yqJJFxQH.js",revision:"d782a1092ea55f1b4d383b3ec73713a7"},{url:"assets/sequenceDiagram-465a088a-x_ttBttK.js",revision:"4363c3c96a4931a1d85922ddf6838548"},{url:"assets/start_server_3-RVnx99XR.js",revision:"cdc2fe86a390491f5cb22b1eceb5f785"},{url:"assets/start_server.html-fcMybRlu.js",revision:"09f556bf8111d3276b52829d577786e3"},{url:"assets/start_server.html-kjQal3He.js",revision:"deab465f1c1473f5742ce801098f567d"},{url:"assets/start_server.html-rADXsgsy.js",revision:"17f98f760083e4a3a319271a5e63319a"},{url:"assets/start_server.html-yxCpNJvw.js",revision:"e0f3127a8c3fc447c4bdd241cf4ee709"},{url:"assets/start.html-I4A7uS59.js",revision:"2dd388f7f89c50f312c2671acec0f20a"},{url:"assets/start.html-Jyh7sq9I.js",revision:"f5febcbd00c1165c254b98d0a33020b0"},{url:"assets/start.html-KblEw28K.js",revision:"0199c1a31bd38f11b46603af9410f872"},{url:"assets/start.html-T6-Hncwi.js",revision:"96b478080b54131265023e2fb2423b48"},{url:"assets/stateDiagram-b620d43f-n-a3FIBU.js",revision:"206b9ba2b95135f5d8b1f66a4094cbf6"},{url:"assets/stateDiagram-v2-2671c3d1-1xa5Hugt.js",revision:"2ef7fc38e920f134d4cdeeff784a4087"},{url:"assets/style-XrnrrA7w.css",revision:"ad1e5f073c3433784c267384419ac684"},{url:"assets/styles-4ba6ed67-qSs9rwsT.js",revision:"03a8d757e96d312042b1c85c821d392e"},{url:"assets/styles-b966c4ae-B_U_A2hx.js",revision:"72ecf12be4e7337fa543f806626d4866"},{url:"assets/styles-bbc3fe3b-H5-300oD.js",revision:"49111a1242b004294ae43c72ff7af3e5"},{url:"assets/svgDrawCommon-ad5ef572-WW-Kq4zg.js",revision:"550bbc1c75c7d3f807ebbd616be97b07"},{url:"assets/thanks.html--KuWuTSm.js",revision:"d3803fff8502582755c3807cb30b7cab"},{url:"assets/thanks.html-7ORVp6Jc.js",revision:"80663f93379dba78431190e281ca23e8"},{url:"assets/thanks.html-bZ4iyCmp.js",revision:"61243f87540b6997d186884e781ac69a"},{url:"assets/thanks.html-eseVCxC7.js",revision:"1273ae668b9056c36531756d4732bdb3"},{url:"assets/the_nature_of_live_broadcast_delay.html--_Oe6F80.js",revision:"f8658cf2d7e8ad6d96608c589f34470c"},{url:"assets/the_nature_of_live_broadcast_delay.html-9a3MrQ9p.js",revision:"3c8da18699fdc855550bf1d6d08857c9"},{url:"assets/the_nature_of_live_broadcast_delay.html-bGwDwg8A.js",revision:"20f830ee314f6b02c6b0126b63b5446b"},{url:"assets/the_nature_of_live_broadcast_delay.html-wpUMkFJz.js",revision:"85a865b48d7d96f27078df9b1cef1856"},{url:"assets/timeline-definition-732a2638-sTxw8mS_.js",revision:"8b65c2c6d19c1e37a6ba92578801c761"},{url:"assets/use_cases.html-C-cj_NSV.js",revision:"a791484044a968dc199237dad1cc28f2"},{url:"assets/use_cases.html-Ga8uwVa2.js",revision:"9fa7d6069f212847be3740ffdfa5eaa9"},{url:"assets/use_cases.html-nlOjewQC.js",revision:"727e6f6195079f183e29904a3db6fb6a"},{url:"assets/use_cases.html-Ztr99Hiu.js",revision:"bb06fcd445008e09606b90e890f605f7"},{url:"assets/video_conferencing_related_resources.html-1ZPXoBfM.js",revision:"e4757909bc6677a4f013cecc2fd1f9cf"},{url:"assets/video_conferencing_related_resources.html-cJ9at7Xc.js",revision:"f14855e81c6b72226ad6b068da884860"},{url:"assets/video_conferencing_related_resources.html-Da8l8FFw.js",revision:"a391a24998a5e69a47cbc89241c5e857"},{url:"assets/video_conferencing_related_resources.html-U1qNLSQN.js",revision:"b3ad444ccb6eafec368df3012987f0d5"},{url:"assets/vs_code_zh-ltEPcFYF.js",revision:"bae72e4c099d90687244cb1ba5708ec1"},{url:"assets/web_hook_api.html-adtpDhAG.js",revision:"dec0c93b7a2f82188c65df946b68a050"},{url:"assets/web_hook_api.html-F_kUu3X6.js",revision:"95e48cec141cf6b666746c158fa55d8c"},{url:"assets/web_hook_api.html-OmnDRkZ1.js",revision:"813c963744e15e4ad4af5e9a27f9c50b"},{url:"assets/web_hook_api.html-QYXcFVoT.js",revision:"0252b3a3e7e795d6721c986db0be24dc"},{url:"assets/webrtc_compilation_and_use.html-Ck_2B7eV.js",revision:"4f06fb3918dac02bcc9b2431b9cd213d"},{url:"assets/webrtc_compilation_and_use.html-EzMJU7Jv.js",revision:"2c6a7f595f05289b7de6a799e8977d08"},{url:"assets/webrtc_compilation_and_use.html-u4uYYnLr.js",revision:"39615c16478a511c7cce6932b7d93b9c"},{url:"assets/webrtc_compilation_and_use.html-ZhDB0Qu6.js",revision:"615f1354de2c6fab466ec72b2d43d7fc"},{url:"assets/webrtc_signaling_interaction_format.html-QfhUllLQ.js",revision:"491a3aec059f85e12cda43121918114e"},{url:"assets/webrtc_signaling_interaction_format.html-QJ72-nhn.js",revision:"b1bb100994c5ce751c412b070bf8dccd"},{url:"assets/webrtc_signaling_interaction_format.html-RSBHyl7A.js",revision:"918d5f1ae8bc5965606da4fe6657addb"},{url:"assets/webrtc_signaling_interaction_format.html-TjrAUdNc.js",revision:"9c31ec603847531d41ccc4896636cae1"},{url:"assets/xychartDiagram-f746c04c--73jsRcR.js",revision:"d7ef98115c374b65c188f607689e6d48"},{url:"assets/zltoolkit_source_code_study_notes.html-JWQ-N5Wz.js",revision:"41951202d66c03a564f015bd0b54f5b2"},{url:"assets/zltoolkit_source_code_study_notes.html-vFvvg7fr.js",revision:"0517fff48911aa21ff7f41c822b80900"},{url:"assets/zltoolkit_source_code_study_notes.html-XyGnG3Jc.js",revision:"dd92a80d45f838fcd5522250cc30101b"},{url:"assets/zltoolkit_source_code_study_notes.html-ypL46AQc.js",revision:"0308258271a6a31fb2f722ce990fe45c"},{url:"logo.svg",revision:"6c6a0dc1bda8418aef497da1d078d96f"},{url:"404.html",revision:"5d8fdc20301bf57a64b053824f79363b"},{url:"guide/code/index.html",revision:"788cca767b49186655660ded56a1ce86"},{url:"guide/code/oncetoken.html",revision:"44f9600cd2887faa1801d9d737ce7818"},{url:"guide/faq/index.html",revision:"c2b8692c030527a79b7bd1d25a2a4057"},{url:"guide/faq/not_recommended_qq.html",revision:"d0046e9fe4b2ea8f989309b050ce27c0"},{url:"guide/faq/rtmp_playback_compatibility_issues.html",revision:"aa9b18cb6f9685e92b62dbecd453433b"},{url:"guide/index.html",revision:"575851234e1bd44dd8c8363695fa2d48"},{url:"guide/install/compilation_instructions_for_windows_version.html",revision:"d73081efc2dee756f870d889152b7b57"},{url:"guide/install/index.html",revision:"eb25d5c887bef599482bdbbe7f8584bb"},{url:"guide/install/install_zlmediakit_using_vcpkg.html",revision:"d69c12ec6bbade755c18e3e5e3b5a8ba"},{url:"guide/install/start.html",revision:"696bfe19befc4472ee271dff1d198626"},{url:"guide/media_server/config_file.html",revision:"ed1732ae5a04b547e8cb30e2e29a8591"},{url:"guide/media_server/generate_ssl_self-signed_certificate_and_test.html",revision:"f2a73bd6eb42bb5cceb0d3adc6065eaa"},{url:"guide/media_server/how_to_enable_https_related_functions.html",revision:"63884b6bda5d927501f323db4c312808"},{url:"guide/media_server/index.html",revision:"6288a65ee2afbed1d64ebea787f93042"},{url:"guide/media_server/on-demand_push_streaming.html",revision:"14fb5ae9ec22ffec2a8afad34316a2a3"},{url:"guide/media_server/on-demand_streaming.html",revision:"f1e92f36b867c268905dc639ff2f52cd"},{url:"guide/media_server/play_url_rules.html",revision:"9bbe53783ba3b2d7ba9388edb00c622d"},{url:"guide/media_server/playback_authentication.html",revision:"2a3feaa42b190dc4edb0f5b895cc72c2"},{url:"guide/media_server/push_authentication.html",revision:"f2723eb25527479b306c0854025bc5fc"},{url:"guide/media_server/push_test.html",revision:"b9e4217b38d716fcb6bc08a67f44d0f5"},{url:"guide/media_server/restful_api.html",revision:"22487dbadc1b355948e5537e3bc288a5"},{url:"guide/media_server/sequence_diagram.html",revision:"4d9cdab4261bff3d829e0abe7baa28d5"},{url:"guide/media_server/start_server.html",revision:"d9f87fb2d19a15e7232e18ca7049a6ba"},{url:"guide/media_server/web_hook_api.html",revision:"9d21396c6a027eebd8c1cac9e3fbfa75"},{url:"guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html",revision:"3e0b78193224577304e2f67e07e836bd"},{url:"guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html",revision:"d39ae55feb4d7392b68aa1bc736c3087"},{url:"guide/protocol/gb28181/index.html",revision:"3cc1988046c642a87bd5823a8c0b2eac"},{url:"guide/protocol/gb28181/push_streaming.html",revision:"7891dae574d0d1a2366b4b8b12b2939f"},{url:"guide/protocol/index.html",revision:"622758c2bbc31c9b1639bfec5be03c57"},{url:"guide/protocol/srt/index.html",revision:"ed85be7cc6eb732998b9c0138a222d35"},{url:"guide/protocol/webrtc/index.html",revision:"be1c74bcacb45234a52e1e5f27850fba"},{url:"guide/protocol/webrtc/webrtc_compilation_and_use.html",revision:"40041ce3deed22d04660b7b08ea107d6"},{url:"guide/protocol/webrtc/webrtc_signaling_interaction_format.html",revision:"401bc055ff0e234b9af47e3e7a0e5d7d"},{url:"guide/sdk/how_to_create_a_live_steam.html",revision:"a068bafe5e661d194a830dc382ba35e7"},{url:"guide/sdk/index.html",revision:"6b818780c542d38503537c9421bd8de8"},{url:"index.html",revision:"1020aa13409b9f80820194ce0dd079ff"},{url:"more/collaborative_projects.html",revision:"c17b5707575c427f2b2f28fc28a5bcec"},{url:"more/contact.html",revision:"7fbeb5e3c4a531b3f6a00d0178abad45"},{url:"more/index.html",revision:"267a9b514b236b9256bbf30a68fc85e0"},{url:"more/license.html",revision:"3b60f1dffef17e6bb0c5af69b37d6b2e"},{url:"more/thanks.html",revision:"44c430cb5299805d22bc349920c06145"},{url:"more/use_cases.html",revision:"9366d07c26b6bf42cd8eca13eb5bf9b1"},{url:"reference/development_log/hls_high_performance_journey.html",revision:"80086ae16e0377325ac25a82e52bcfc4"},{url:"reference/development_log/index.html",revision:"cd91926bdcfa115bdca459dc914069cc"},{url:"reference/development_log/rtsp_performance_optimization.html",revision:"8984abfe98adc71a893c2da4153ae1cd"},{url:"reference/documents/exclusive_features.html",revision:"39a10a9ea0ddee1bb528067b523f3afe"},{url:"reference/documents/high_concurrency_implementation_principle.html",revision:"286889bbbf5c49401ff2d88a4d00f24e"},{url:"reference/documents/index.html",revision:"fbbc51ede7de7c7e85edf0a97acd2b40"},{url:"reference/documents/introduction_to_streaming_media_related_technologies.html",revision:"880463ee5fcce2b9232f1981e92a84f8"},{url:"reference/documents/rtsp_push_process.html",revision:"1c435446cc930e49c3e5bedfc4637eab"},{url:"reference/documents/the_nature_of_live_broadcast_delay.html",revision:"a103888b663f67a0bae3c3fcce318fe8"},{url:"reference/index.html",revision:"2cfe9093ddd7b0858d50898364b30d2e"},{url:"reference/resources/dependency.html",revision:"72b4688a2a16411bfafa772ece53159b"},{url:"reference/resources/index.html",revision:"f16d13f8fef504786ffc46233952c352"},{url:"reference/resources/rtmp_support_for_h265_and_opus.html",revision:"63eb9b34b24c42b78c7cf28f3eee4a4c"},{url:"reference/resources/video_conferencing_related_resources.html",revision:"1a9ac20ebe9b5db5ab2ab5b448d1a379"},{url:"reference/resources/zltoolkit_source_code_study_notes.html",revision:"d062ac4470bdbaf97c0361cd8a8a2a01"},{url:"reference/test/benchmark.html",revision:"11c7bb85ef30a9834508218a0ae5bf6a"},{url:"reference/test/delay_test.html",revision:"ba37ccf47cf9c9a5b1685a2988552887"},{url:"reference/test/how_to_test_delay.html",revision:"cc52bc429c154d98e37c2e5908a37de0"},{url:"reference/test/index.html",revision:"45e2f75a41a23a309ed3b72d100c7752"},{url:"reference/test/online_test.html",revision:"6941b9b4c52e85aa46d6b2379359d225"},{url:"reference/test/performance_testing.html",revision:"e04b08179b432f70a8191cbdeda83fdb"},{url:"reference/test/rtmp_pull_stream_performance_test.html",revision:"f829d89c94b2900bf18b3e60a9068f41"},{url:"reference/test/rtmp_push_stream_performance_test.html",revision:"9a8ada26844ffe1ad7e3450fcd6a0005"},{url:"reference/test/rtsp_pull_stream_performance_test.html",revision:"3eff31f0b8de2925e7620e1ce9e6405e"},{url:"reference/test/rtsp_push_stream_performance_test.html",revision:"00c03dd43f6d490fca91964d78b09e4a"},{url:"tutorial/index.html",revision:"2b44bfd99644c599bbf881f44c12644b"},{url:"zh/guide/code/index.html",revision:"d3ce6fa0c5d116db6f00cda96d7b8012"},{url:"zh/guide/code/oncetoken.html",revision:"5a8335d553af854934b2be12727a2901"},{url:"zh/guide/faq/index.html",revision:"c62a57c243a5c17f254a7a7fdf583974"},{url:"zh/guide/faq/not_recommended_qq.html",revision:"584dc8991af655906e3c9457923adf7e"},{url:"zh/guide/faq/rtmp_playback_compatibility_issues.html",revision:"1815321f2562cce2dfe251f1afd7ea88"},{url:"zh/guide/index.html",revision:"a815f139cdf2a0b9510037def0419c6c"},{url:"zh/guide/install/compilation_instructions_for_windows_version.html",revision:"353e85a6c2997d4ddd4c0832d2529e67"},{url:"zh/guide/install/index.html",revision:"dd15ee9526bb866e6509cecb09ff3dae"},{url:"zh/guide/install/install_zlmediakit_using_vcpkg.html",revision:"800890561158bab5bf33c5fc39c043bc"},{url:"zh/guide/install/start.html",revision:"49d0a9fdb5cfdb57c932ddd993b4e35e"},{url:"zh/guide/media_server/config_file.html",revision:"65a8fad2ff10fb7ae0c601b28ada16aa"},{url:"zh/guide/media_server/generate_ssl_self-signed_certificate_and_test.html",revision:"dc76c17784f62d539e7242dfcba59e1e"},{url:"zh/guide/media_server/how_to_enable_https_related_functions.html",revision:"e8b22cd49fdb994e3045b9336f92db4d"},{url:"zh/guide/media_server/index.html",revision:"892338d74f7c61527b473a813580b1b6"},{url:"zh/guide/media_server/on-demand_push_streaming.html",revision:"0a85a4686e54fb1b834581a72a5ae04b"},{url:"zh/guide/media_server/on-demand_streaming.html",revision:"f206f27b2ffd348e2034f28454032a31"},{url:"zh/guide/media_server/play_url_rules.html",revision:"115476fa43cb5aedce23af277733c854"},{url:"zh/guide/media_server/playback_authentication.html",revision:"afb0a10ebb9af22b2ecf2b50b1a5b34e"},{url:"zh/guide/media_server/push_authentication.html",revision:"cd43991c65bb04d0e9ae19fb09671a6f"},{url:"zh/guide/media_server/push_test.html",revision:"cacda76e4ce193a45c2ccac6d4978bff"},{url:"zh/guide/media_server/restful_api.html",revision:"3550aab1a5f52b973091b1905a657911"},{url:"zh/guide/media_server/sequence_diagram.html",revision:"f6e6a61c34f80a1f79f235a3d1d908a3"},{url:"zh/guide/media_server/start_server.html",revision:"fb3e90498737351e3545c400751f68c8"},{url:"zh/guide/media_server/web_hook_api.html",revision:"5106fe5d507b99342d9597dd9506228c"},{url:"zh/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html",revision:"fcf00149a7c45179f333a4a39f04578a"},{url:"zh/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html",revision:"b0534cb341366a51bd085c5674f4946c"},{url:"zh/guide/protocol/gb28181/index.html",revision:"7172f5f9450d8b9af7c3b764751b521a"},{url:"zh/guide/protocol/gb28181/push_streaming.html",revision:"7567d8642db3b3b498ff4e8cfbf31ec2"},{url:"zh/guide/protocol/index.html",revision:"429ba9d6ffac802513b4ec7bae8d305c"},{url:"zh/guide/protocol/srt/index.html",revision:"b202d6b537a137dc508c151dc638d9e4"},{url:"zh/guide/protocol/webrtc/index.html",revision:"117caa4d92409ebee316666f4a1cc26a"},{url:"zh/guide/protocol/webrtc/webrtc_compilation_and_use.html",revision:"093f7263c24d2dad2b35d3bb312a15be"},{url:"zh/guide/protocol/webrtc/webrtc_signaling_interaction_format.html",revision:"d79b73aac56f3648f56521d834b0483f"},{url:"zh/guide/sdk/how_to_create_a_live_steam.html",revision:"40e2b99bb6bfa5f973fff682d66d580f"},{url:"zh/guide/sdk/index.html",revision:"d9122666fe82ea5f18366b39db872d66"},{url:"zh/index.html",revision:"73e73e28bb8d5534551fb2921ce2d944"},{url:"zh/more/collaborative_projects.html",revision:"a23762e5007a9f8700cdc749af307525"},{url:"zh/more/contact.html",revision:"29574e7d64c0c585eeba2999e5d0efeb"},{url:"zh/more/index.html",revision:"807897275590773633a10195b9b7ade5"},{url:"zh/more/license.html",revision:"2cff60a22171a46c36af9bd7d422eeda"},{url:"zh/more/thanks.html",revision:"9b0d72d3ea79812c0d3ba8b8e31c347c"},{url:"zh/more/use_cases.html",revision:"c603a8a8e40633d57a1d7e4041c8e4b0"},{url:"zh/reference/development_log/hls_high_performance_journey.html",revision:"7c2dad0f88a8b225d27536eda4aa5595"},{url:"zh/reference/development_log/index.html",revision:"edef15e2f860606e5ac4804ae54e7dcc"},{url:"zh/reference/development_log/rtsp_performance_optimization.html",revision:"731fb79af9088ccb4d7ef610b4f98c4e"},{url:"zh/reference/documents/exclusive_features.html",revision:"32d4ff6d51050eaf6895a0387d50e637"},{url:"zh/reference/documents/high_concurrency_implementation_principle.html",revision:"f2cea57f9c6732881c567544e688ded1"},{url:"zh/reference/documents/index.html",revision:"6b2fabfc761d93ed70a01674fdacf5ab"},{url:"zh/reference/documents/introduction_to_streaming_media_related_technologies.html",revision:"dcc19b12550d4b2a39a69e3d54abf378"},{url:"zh/reference/documents/rtsp_push_process.html",revision:"4998483d0ceb74ec8d047cc25e5268e2"},{url:"zh/reference/documents/the_nature_of_live_broadcast_delay.html",revision:"e28846454e2e9fc1d9ac49b7d0d3069d"},{url:"zh/reference/index.html",revision:"bee79d4691c1041a4064fe9f162e2a10"},{url:"zh/reference/resources/dependency.html",revision:"fa7545f30593c68e8ca0442202e172bb"},{url:"zh/reference/resources/index.html",revision:"d431cf0e0d495d1d64fc6fc78bc70d3c"},{url:"zh/reference/resources/rtmp_support_for_h265_and_opus.html",revision:"b389c47c9fb803cd0fce5059dc421218"},{url:"zh/reference/resources/video_conferencing_related_resources.html",revision:"fdad3ad4ab0ddf3f97a5cfb71080487c"},{url:"zh/reference/resources/zltoolkit_source_code_study_notes.html",revision:"0a571843d5feb3810d62289d1f3e3672"},{url:"zh/reference/test/benchmark.html",revision:"766adcb15ca5fcd6e49069b3bf05444c"},{url:"zh/reference/test/delay_test.html",revision:"1e4f1e8c53bc0f637a56426630f2eb2d"},{url:"zh/reference/test/how_to_test_delay.html",revision:"0bbcf60ae1209c1194ef2a2ec8f80d7b"},{url:"zh/reference/test/index.html",revision:"4d0beb7624416c9bebc3ff923a130dfa"},{url:"zh/reference/test/online_test.html",revision:"efbe504915a1d2b98e920a337e424e2d"},{url:"zh/reference/test/performance_testing.html",revision:"b30275e5def6fa73bf9027b4f96ac7d9"},{url:"zh/reference/test/rtmp_pull_stream_performance_test.html",revision:"7f50c4fa7135d0d09ceb3aa53e2a23e0"},{url:"zh/reference/test/rtmp_push_stream_performance_test.html",revision:"0153902689893d44df43eafa20a9a7ae"},{url:"zh/reference/test/rtsp_pull_stream_performance_test.html",revision:"990d79e7e89c4991f11732b431d8aae6"},{url:"zh/reference/test/rtsp_push_stream_performance_test.html",revision:"520ca5c1607216f56f702e8be1426f2d"},{url:"zh/tutorial/index.html",revision:"81065c51305a4644b6ab31eaaa47e3fe"},{url:"assets/icon/apple-touch-icon-114x114.png",revision:"b39af39658e13fd99763e10b9991ccf8"},{url:"assets/icon/apple-touch-icon-120x120.png",revision:"4c7de55a0bfef43bc0eb52905af33cf6"},{url:"assets/icon/apple-touch-icon-152x152.png",revision:"a23249a982dd7d97bc38e851acfc1ec8"},{url:"assets/icon/apple-touch-icon-180x180.png",revision:"153e47772d362c174bee9f00b8090bf1"},{url:"assets/icon/apple-touch-icon-57x57.png",revision:"04feca43d959ca0f3b6973782c9fa134"},{url:"assets/icon/apple-touch-icon-60x60.png",revision:"e7f1b90b537806adb676677c3dead66d"},{url:"assets/icon/apple-touch-icon-72x72.png",revision:"604eca13e9aa44f2f1d76778107e5d64"},{url:"assets/icon/apple-touch-icon-76x76.png",revision:"1698d7cd9b2cc90634013d3d62d23736"},{url:"assets/icon/apple-touch-icon-96x96.png",revision:"a361212595e0c34b5d3d64084864d3e9"},{url:"assets/icon/chrome-192.png",revision:"440ff33effa9f895b67156ed57eac1c1"},{url:"assets/icon/favicon-16x16.png",revision:"98c8fdb75f1f1891b830dd70be7780c5"},{url:"assets/icon/favicon-32x32.png",revision:"a0c87ba0608aecffe0d0182415770766"},{url:"assets/icon/guide-maskable.png",revision:"99cc77cf2bc792acd6b847b5e3e151e9"},{url:"assets/icon/ms-icon-144.png",revision:"a3e06505f5a643a43d7f559a53abd7be"},{url:"images/gb28181_push_streaming_1.png",revision:"6283957dbf3a609f861ffb40054c8ef4"},{url:"images/gb28181_push_streaming_2.png",revision:"eac2229bd7d6302dd56c80924378f4f3"},{url:"images/gb28181_push_streaming_3.png",revision:"d9c25e9d693382a8fb713baa4865c794"},{url:"images/gb28181_push_streaming_4.png",revision:"f3c6584aae2a27866166c43f244c553b"},{url:"images/generate_ssl_self-signed_certificate_and_test.webp",revision:"c893dba3185a1e863cf175c2698c9bf9"},{url:"images/how_to_create_a_live_stream.png",revision:"7f11ba4af262d0e2a00c7718e6c8b180"},{url:"images/how_to_enable_https_related_functions_zh_1.png",revision:"e1ffb707a47c1664161efc7c608fda24"},{url:"images/how_to_enable_https_related_functions_zh_10.png",revision:"5e4cafeb5b4f54f57d76f4dcd632c377"},{url:"images/how_to_enable_https_related_functions_zh_2.png",revision:"fb3c5027a4bef03f174d86f5d4cf8b32"},{url:"images/how_to_enable_https_related_functions_zh_3.png",revision:"ae7f42d52b58c80e0265eeb40be94a9d"},{url:"images/how_to_enable_https_related_functions_zh_4.png",revision:"536b0f9116a4fa6d0f155032886068d3"},{url:"images/how_to_enable_https_related_functions_zh_5.png",revision:"d77ab1e34df68663332e451f59d68203"},{url:"images/how_to_enable_https_related_functions_zh_6.png",revision:"5dd9c32672a86dbe6c07bbe58fe44522"},{url:"images/how_to_enable_https_related_functions_zh_7.png",revision:"e6cf4753d43bc6251742ea3269463c99"},{url:"images/how_to_enable_https_related_functions_zh_8.png",revision:"fe5c53d153ebb88d5b10ca979ce62a1b"},{url:"images/how_to_enable_https_related_functions_zh_9.png",revision:"1aa87003a965b710adf9139645171cb6"},{url:"images/how_to_use_device_id_as_stream_id_1.png",revision:"5d24bb7c4f502d40c38313bb9b1234fe"},{url:"images/how_to_use_device_id_as_stream_id_2.png",revision:"7f293641cf8de63af03ff846a2be943f"},{url:"images/how_to_use_device_id_as_stream_id_4.png",revision:"8d3f6cced326d24e5cb940c85209d47a"},{url:"images/how_to_use_device_id_as_stream_id_5.png",revision:"7f293641cf8de63af03ff846a2be943f"},{url:"images/how_to_use_device_id_as_stream_id_6.png",revision:"b46e6e52751c33cca5b2f768ceae92d2"},{url:"images/install_zlmediakit_using_vcpkg_1.png",revision:"549087a1bb82ce36aa774ce725a9eeea"},{url:"images/install_zlmediakit_using_vcpkg_2.png",revision:"8368b41cc655599a201e5818750225d1"},{url:"images/on-demand_push_streaming_zh.png",revision:"1bb65d163eb9008b383a2d04255c9507"},{url:"images/on-demand_streaming_zh.png",revision:"16dc127a26325cf06dac7aedd115d57e"},{url:"images/playback_authentication_zh.png",revision:"eba681073fa4dd2f6663eeb1c7cbbf7a"},{url:"images/push_authentication_zh.png",revision:"5b1e13cc9369abf66481d2f4cc1dccb5"},{url:"images/push_test.png",revision:"88ec411cafd56da1c27bb958e05c7bda"},{url:"images/start_server_1.png",revision:"46b863cc78aaebb1a0d5d2b824a45519"},{url:"images/start_server_2.png",revision:"29d3057d8f9dd51a5e3a4589a71d3e7e"},{url:"images/start_server_3.png",revision:"3088ed2c7996882f9272a59a8e00f8cf"},{url:"images/vs_code_zh.png",revision:"a374f77503296c66576dcf3641283791"},{url:"logo.png",revision:"32ddfa5715059731ae893ec92fca0311"}],{}),e.cleanupOutdatedCaches()})); //# sourceMappingURL=service-worker.js.map diff --git a/service-worker.js.map b/service-worker.js.map index 777defb..a46595c 100644 --- a/service-worker.js.map +++ b/service-worker.js.map @@ -1 +1 @@ -{"version":3,"file":"service-worker.js","sources":["../../../../../tmp/576e93e64e8b40829995e2434ce1838e/service-worker.js"],"sourcesContent":["import {clientsClaim as workbox_core_clientsClaim} from '/home/runner/work/docs/docs/node_modules/.pnpm/workbox-core@7.0.0/node_modules/workbox-core/clientsClaim.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/runner/work/docs/docs/node_modules/.pnpm/workbox-precaching@7.0.0/node_modules/workbox-precaching/precacheAndRoute.mjs';\nimport {cleanupOutdatedCaches as workbox_precaching_cleanupOutdatedCaches} from '/home/runner/work/docs/docs/node_modules/.pnpm/workbox-precaching@7.0.0/node_modules/workbox-precaching/cleanupOutdatedCaches.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\n\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\nworkbox_core_clientsClaim();\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"assets/404.html-aQJ09P_F.js\",\n \"revision\": \"76f3c96a47b4621ba8ce69fcbd885f68\"\n },\n {\n \"url\": \"assets/404.html-xdICDk2y.js\",\n \"revision\": \"d79038e5e1d8092b8b3c38c459d5a465\"\n },\n {\n \"url\": \"assets/app-BrxqtzGY.js\",\n \"revision\": \"37a876ee1b3c040baff9f031acc01cb1\"\n },\n {\n \"url\": \"assets/arc-kFrifBKJ.js\",\n \"revision\": \"da94b849153f5b0d81f0402bc9b1b5e0\"\n },\n {\n \"url\": \"assets/array-Nw74a44z.js\",\n \"revision\": \"17dcebeaf673b09a1ca5da014d20022f\"\n },\n {\n \"url\": \"assets/benchmark.html-98ulTadG.js\",\n \"revision\": \"a9dbc2a763e7f9fd5d2af60fded057b6\"\n },\n {\n \"url\": \"assets/benchmark.html-MSc66SxZ.js\",\n \"revision\": \"dc32b8c22dbcb74830e677d297b170b6\"\n },\n {\n \"url\": \"assets/benchmark.html-Nx9hqFos.js\",\n \"revision\": \"6f74181d5550d94a5e8e0e22a9d09a5d\"\n },\n {\n \"url\": \"assets/benchmark.html-xQUFyhUw.js\",\n \"revision\": \"0b93d042729a80ed7f7b41c6aac852a4\"\n },\n {\n \"url\": \"assets/c4Diagram-817c8e44-BMi5WAvg.js\",\n \"revision\": \"5c00c3cf1d29d54a7d0f779cec1e0fc0\"\n },\n {\n \"url\": \"assets/classDiagram-48ab76fb-B-1nPr5u.js\",\n \"revision\": \"171a3cbe594b2bc286d43a4fe943ac80\"\n },\n {\n \"url\": \"assets/classDiagram-v2-8ecb0bfc-6PoF2wPP.js\",\n \"revision\": \"c78660d9ad254eb723cf36ac1dbc4981\"\n },\n {\n \"url\": \"assets/collaborative_projects.html-15UQQvPG.js\",\n \"revision\": \"aca89aea107c131135d843d7880f76b6\"\n },\n {\n \"url\": \"assets/collaborative_projects.html-F54TwnSU.js\",\n \"revision\": \"7aa15ee78df8ae1f555a8e7c74fa12aa\"\n },\n {\n \"url\": \"assets/collaborative_projects.html-gRvZJ2_P.js\",\n \"revision\": \"21258323cc48008377e663bcb4b9ccc3\"\n },\n {\n \"url\": \"assets/collaborative_projects.html-pOhMHRMF.js\",\n \"revision\": \"677bd9414e387479c2ac34438d3c2bc5\"\n },\n {\n \"url\": \"assets/compilation_instructions_for_windows_version.html-B01AYnQQ.js\",\n \"revision\": \"8bb415eb83cbb086906d6c52cd1c74b9\"\n },\n {\n \"url\": \"assets/compilation_instructions_for_windows_version.html-Hq0AuZTz.js\",\n \"revision\": \"66feea9dae54928e3a2bb2f7a51bc417\"\n },\n {\n \"url\": \"assets/compilation_instructions_for_windows_version.html-qtHU9-nX.js\",\n \"revision\": \"db505ce9195db994dff6777d581e981b\"\n },\n {\n \"url\": \"assets/compilation_instructions_for_windows_version.html-xl0PwINJ.js\",\n \"revision\": \"ee73eff391cf2201c2517e705bc2e91c\"\n },\n {\n \"url\": \"assets/config_file.html-5j1Bx0Jx.js\",\n \"revision\": \"591d662b3e72f0b21c92319d03a2e17c\"\n },\n {\n \"url\": \"assets/config_file.html-i3ELg7s5.js\",\n \"revision\": \"05d0fdfd1621df427f889e3dfb54050c\"\n },\n {\n \"url\": \"assets/config_file.html-nDM3m-gp.js\",\n \"revision\": \"8df4c3acccb551fb69f260875a907d2f\"\n },\n {\n \"url\": \"assets/config_file.html-sJf41F3S.js\",\n \"revision\": \"ca6848581243537474201dbe9d12aa3d\"\n },\n {\n \"url\": \"assets/contact.html-F5mmsRL_.js\",\n \"revision\": \"b483c840a49554a004ac29af7086f5f5\"\n },\n {\n \"url\": \"assets/contact.html-inPGOeaD.js\",\n \"revision\": \"618c88cbbfe90e780c239307f7ca3a3b\"\n },\n {\n \"url\": \"assets/contact.html-nPftNmfa.js\",\n \"revision\": \"c55df9245c21c481a492bf69830d5eea\"\n },\n {\n \"url\": \"assets/contact.html-XWW2pZ29.js\",\n \"revision\": \"0b951bd788c1b31fccea7115275bec02\"\n },\n {\n \"url\": \"assets/createText-aebacdfe-JILF3Vy1.js\",\n \"revision\": \"d8639e275f7b04816bd6d797e9f32ca6\"\n },\n {\n \"url\": \"assets/delay_test.html-_QomqbNh.js\",\n \"revision\": \"05e99497e62f35bf7dbea382401387f5\"\n },\n {\n \"url\": \"assets/delay_test.html-0tF1gV92.js\",\n \"revision\": \"2725597ba152b9d6567387c4e89053bc\"\n },\n {\n \"url\": \"assets/delay_test.html-dT3kgdCj.js\",\n \"revision\": \"43f900f4b61b8881f4680b57bde2786f\"\n },\n {\n \"url\": \"assets/delay_test.html-ZDGSxDiR.js\",\n \"revision\": \"8173b96b366399b9d87b245f782f4018\"\n },\n {\n \"url\": \"assets/dependency.html-bJgf-XNv.js\",\n \"revision\": \"50427dba0145adc427982c3e481b01eb\"\n },\n {\n \"url\": \"assets/dependency.html-mty2X7tk.js\",\n \"revision\": \"f8184fa697ae4c7b4a2134e5af6caef4\"\n },\n {\n \"url\": \"assets/dependency.html-OQ3SkmA_.js\",\n \"revision\": \"6ade3993f12c06ffdaabbdaf8fc97150\"\n },\n {\n \"url\": \"assets/dependency.html-vliHx4sJ.js\",\n \"revision\": \"133156fbc8cde50f0cb079c965bc9d05\"\n },\n {\n \"url\": \"assets/edges-80f1ebb6--gcvlmof.js\",\n \"revision\": \"219f52747f8ca05f72e25c3ed5e98e00\"\n },\n {\n \"url\": \"assets/erDiagram-9cfc3649-Q00KLrXp.js\",\n \"revision\": \"fc617aff91a9dd1c6cf8e6ce047e0c68\"\n },\n {\n \"url\": \"assets/exclusive_features.html-2siFVq2G.js\",\n \"revision\": \"3f63eed8e945a5d96317576aa72a604e\"\n },\n {\n \"url\": \"assets/exclusive_features.html-mvtkr6Zx.js\",\n \"revision\": \"751ad9d9498c38bf0e3b218c312fcb0a\"\n },\n {\n \"url\": \"assets/exclusive_features.html-q7ecjqC1.js\",\n \"revision\": \"4ca71238bd0475cb132f1832ed6db5a5\"\n },\n {\n \"url\": \"assets/exclusive_features.html-wTOG2Bjt.js\",\n \"revision\": \"908ef27f27bc5f36054d486537a4f6e3\"\n },\n {\n \"url\": \"assets/flowchart-elk-definition-e097735e-aDa6k5ld.js\",\n \"revision\": \"20e7a42b962a14cf1f734a19c511511e\"\n },\n {\n \"url\": \"assets/flowDb-170db09d-q-5Qwvam.js\",\n \"revision\": \"46a43a32703744fd4590a73fa75b3d35\"\n },\n {\n \"url\": \"assets/flowDiagram-61eb444c-niCbBEPW.js\",\n \"revision\": \"1fda5e21bc270e6d17bdeca8669791b5\"\n },\n {\n \"url\": \"assets/flowDiagram-v2-2f8f667a-kIE4L_ig.js\",\n \"revision\": \"ae9f01c1e21c02f5be90e2c3fb5f9cbe\"\n },\n {\n \"url\": \"assets/ganttDiagram-db6931fb-XdIrq4o4.js\",\n \"revision\": \"03ebbb00c582c1a5915c76e205cd0fc8\"\n },\n {\n \"url\": \"assets/gb28181_push_streaming_4-qWTnfswt.js\",\n \"revision\": \"30c7b622101f90395cc790c0e72e1cf9\"\n },\n {\n \"url\": \"assets/gb28181_sip_signaling_packet_capture.html-_63zZLPQ.js\",\n \"revision\": \"298c5cd5ce0ee80b0433ed54d5c1d647\"\n },\n {\n \"url\": \"assets/gb28181_sip_signaling_packet_capture.html--EqBn8MM.js\",\n \"revision\": \"4dc5bf33e6cb763061451d218a0b0ae7\"\n },\n {\n \"url\": \"assets/gb28181_sip_signaling_packet_capture.html-dSB5oqMq.js\",\n \"revision\": \"dbfc86980d308e1204aa23121f175f5c\"\n },\n {\n \"url\": \"assets/gb28181_sip_signaling_packet_capture.html-P96Mkrz9.js\",\n \"revision\": \"4dc5bf33e6cb763061451d218a0b0ae7\"\n },\n {\n \"url\": \"assets/generate_ssl_self-signed_certificate_and_test-D4Sbj3Ls.js\",\n \"revision\": \"616544c7f95d53f29de519db0674f52c\"\n },\n {\n \"url\": \"assets/generate_ssl_self-signed_certificate_and_test.html-7V6eG0vA.js\",\n \"revision\": \"2900e1d4092c29de10d34afb5c4c753c\"\n },\n {\n \"url\": \"assets/generate_ssl_self-signed_certificate_and_test.html-KPuMmQeO.js\",\n \"revision\": \"9f5e629b8aef85ed1cc3a2a66d8a9336\"\n },\n {\n \"url\": \"assets/generate_ssl_self-signed_certificate_and_test.html-qSLRuImw.js\",\n \"revision\": \"e5b9c6794282f1b0fe700d22af21f5d2\"\n },\n {\n \"url\": \"assets/generate_ssl_self-signed_certificate_and_test.html-XP7q2oT5.js\",\n \"revision\": \"4d51f05d6ac6885247954e1f9814edce\"\n },\n {\n \"url\": \"assets/giscus-unEZQsJ0.js\",\n \"revision\": \"34c4288ad53e7d9be8d0f44c9fdba069\"\n },\n {\n \"url\": \"assets/gitGraphDiagram-6b463803-EqEFWtIw.js\",\n \"revision\": \"86ea6b233ce4dabe373b56c4710a1889\"\n },\n {\n \"url\": \"assets/high_concurrency_implementation_principle.html--R-GXKUV.js\",\n \"revision\": \"e07065c07713fb6500acdc432fbd84d6\"\n },\n {\n \"url\": \"assets/high_concurrency_implementation_principle.html-Bqhl-32O.js\",\n \"revision\": \"27e1d995c8fb98127071634cf33cdeb3\"\n },\n {\n \"url\": \"assets/high_concurrency_implementation_principle.html-opQWc8aM.js\",\n \"revision\": \"2fb1a4c2f74fc52046100556dc28ff26\"\n },\n {\n \"url\": \"assets/high_concurrency_implementation_principle.html-sl-nIpjv.js\",\n \"revision\": \"7a20b2d70a9e4eae865ef6ea53a0ce00\"\n },\n {\n \"url\": \"assets/hls_high_performance_journey.html-bBajAqE1.js\",\n \"revision\": \"7d3ea5c0f10f1014295bebf7364f6d48\"\n },\n {\n \"url\": \"assets/hls_high_performance_journey.html-bLztstJM.js\",\n \"revision\": \"1de12ca696da6d2fc7345df858d95fe2\"\n },\n {\n \"url\": \"assets/hls_high_performance_journey.html-ePp6ZcY7.js\",\n \"revision\": \"c7d44816326e1fd4129ebf8a39bf8589\"\n },\n {\n \"url\": \"assets/hls_high_performance_journey.html-sIjCrFa8.js\",\n \"revision\": \"c7d44816326e1fd4129ebf8a39bf8589\"\n },\n {\n \"url\": \"assets/how_to_create_a_live_steam.html-ekbfwpTl.js\",\n \"revision\": \"bc4b1a8c8530f32e66705336b383e6bf\"\n },\n {\n \"url\": \"assets/how_to_create_a_live_steam.html-FHwnpSdN.js\",\n \"revision\": \"3060639f318e118a09057745e5cde6f4\"\n },\n {\n \"url\": \"assets/how_to_create_a_live_steam.html-Gq2b9Yi0.js\",\n \"revision\": \"1e77b724e809322523173efc4d0edc2f\"\n },\n {\n \"url\": \"assets/how_to_create_a_live_steam.html-xouuZa47.js\",\n \"revision\": \"bc4b1a8c8530f32e66705336b383e6bf\"\n },\n {\n \"url\": \"assets/how_to_create_a_live_stream-3lt6j2fI.js\",\n \"revision\": \"67e9191b6843091959a8f07cea06a593\"\n },\n {\n \"url\": \"assets/how_to_enable_https_related_functions_zh_10-dp8gREln.js\",\n \"revision\": \"e08b5f85ae138171fbadcb495d89fa08\"\n },\n {\n \"url\": \"assets/how_to_enable_https_related_functions.html-fcJ6Uozv.js\",\n \"revision\": \"c4b3dc09434d6236ba12e26ee88007e3\"\n },\n {\n \"url\": \"assets/how_to_enable_https_related_functions.html-mO3jYJnY.js\",\n \"revision\": \"b20d2d93bfc0a7d9afdb7d93d930c2e9\"\n },\n {\n \"url\": \"assets/how_to_enable_https_related_functions.html-mTX-D-oH.js\",\n \"revision\": \"1c797d129aca01f3eb86ecef5b44e4b9\"\n },\n {\n \"url\": \"assets/how_to_enable_https_related_functions.html-VEGoh4jE.js\",\n \"revision\": \"e554caa1b89e3a5ea5d12eb74b3bc390\"\n },\n {\n \"url\": \"assets/how_to_test_delay.html-GlLjeJYr.js\",\n \"revision\": \"1bd6e54f8408e79ec83b26d5c81259e6\"\n },\n {\n \"url\": \"assets/how_to_test_delay.html-qIkqT7X0.js\",\n \"revision\": \"54f4ccf09ee968ffefa3050ce87baf8e\"\n },\n {\n \"url\": \"assets/how_to_test_delay.html-ubjyw-PC.js\",\n \"revision\": \"13801c3a209c906dccd85db6bb5092ba\"\n },\n {\n \"url\": \"assets/how_to_test_delay.html-xmNWiPYK.js\",\n \"revision\": \"d95010b392a48259089a84690a7267d3\"\n },\n {\n \"url\": \"assets/how_to_use_device_id_as_stream_id_6-sfQ1h9Fe.js\",\n \"revision\": \"1bff1864e2dfb05bde4bb12af8c9561c\"\n },\n {\n \"url\": \"assets/how_to_use_device_id_as_stream_id.html-_vNSGfoU.js\",\n \"revision\": \"5850d68f9c88c71712e258d057267d3c\"\n },\n {\n \"url\": \"assets/how_to_use_device_id_as_stream_id.html-a05nZW8g.js\",\n \"revision\": \"a81e93979a5a3016623c6e97b927872c\"\n },\n {\n \"url\": \"assets/how_to_use_device_id_as_stream_id.html-ga4UcAIh.js\",\n \"revision\": \"858c041377d0a304dc9cd913185f18fa\"\n },\n {\n \"url\": \"assets/how_to_use_device_id_as_stream_id.html-yEpxw4_B.js\",\n \"revision\": \"a81e93979a5a3016623c6e97b927872c\"\n },\n {\n \"url\": \"assets/image/advanced.svg\",\n \"revision\": \"2934a573b64033bebb71f067ebc8d082\"\n },\n {\n \"url\": \"assets/image/bg.svg\",\n \"revision\": \"bed51349ca7476497e51d60437ef8eba\"\n },\n {\n \"url\": \"assets/image/blog.svg\",\n \"revision\": \"5686f361aca8bcf73522de225d09016d\"\n },\n {\n \"url\": \"assets/image/box.svg\",\n \"revision\": \"5f732c9705e288e8fb8ae6d2e5ce906a\"\n },\n {\n \"url\": \"assets/image/features.svg\",\n \"revision\": \"2eb292180d361e4af3f4bf411ef06062\"\n },\n {\n \"url\": \"assets/image/github-dark.svg\",\n \"revision\": \"8dcc6b5262f3b6138b1566b357ba89a9\"\n },\n {\n \"url\": \"assets/image/github-light.svg\",\n \"revision\": \"a0b00583d93c2f7084ad151ee0849934\"\n },\n {\n \"url\": \"assets/image/layout.svg\",\n \"revision\": \"db603c70eb017066ff30923ca5a2cd4a\"\n },\n {\n \"url\": \"assets/image/markdown.svg\",\n \"revision\": \"1a8b4476dae8f52cdd873d2b00fa27fb\"\n },\n {\n \"url\": \"assets/index-67a42d7d-p9ZYh1Xw.js\",\n \"revision\": \"225b1c95d37604bb4822326c6e4718e6\"\n },\n {\n \"url\": \"assets/index-7SG8bi1h.js\",\n \"revision\": \"46a193641571106d3b7b43f9bc2a2735\"\n },\n {\n \"url\": \"assets/index.html-_oz2t3vB.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-1gY9nmEU.js\",\n \"revision\": \"92843f6c1dff4569f2c291e82c7070e8\"\n },\n {\n \"url\": \"assets/index.html-3Pe7G9Sl.js\",\n \"revision\": \"c0c05ddda520e2adda625cdd231876ae\"\n },\n {\n \"url\": \"assets/index.html-4qXHK4Yu.js\",\n \"revision\": \"ea8519a44fde5fca68c31fc431e2e570\"\n },\n {\n \"url\": \"assets/index.html-8RsIN7Qj.js\",\n \"revision\": \"ff590ed654e791a5b22c11ccc9ddce0e\"\n },\n {\n \"url\": \"assets/index.html-943vkdnv.js\",\n \"revision\": \"66506d542be80c2633ded058cc66b647\"\n },\n {\n \"url\": \"assets/index.html-A9z0_Hu7.js\",\n \"revision\": \"4f860e08cf4dabbe3974dcd867207005\"\n },\n {\n \"url\": \"assets/index.html-Acfu-WyI.js\",\n \"revision\": \"ac263380bcaf563b41d4feb14c1f3645\"\n },\n {\n \"url\": \"assets/index.html-AN1YzPhl.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-AQj9nIQS.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-BIyNRXIT.js\",\n \"revision\": \"a9e106fe8e31b0d803532e52e4920418\"\n },\n {\n \"url\": \"assets/index.html-BzbKxypT.js\",\n \"revision\": \"662b8f394d27244938126a6f9d36f79e\"\n },\n {\n \"url\": \"assets/index.html-c0NLam4o.js\",\n \"revision\": \"50f75c5795cad25af5071e685fd56d25\"\n },\n {\n \"url\": \"assets/index.html-c5y0hsti.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-c9Q-kbo9.js\",\n \"revision\": \"c07d6fe71746ee6c0b40255909abc5b4\"\n },\n {\n \"url\": \"assets/index.html-CojxHtZz.js\",\n \"revision\": \"3cce4cc3f4578dbcd1463687ffb739ae\"\n },\n {\n \"url\": \"assets/index.html-Dj-Byo33.js\",\n \"revision\": \"33d2489812195b60dd65835895fad787\"\n },\n {\n \"url\": \"assets/index.html-EkebsPUs.js\",\n \"revision\": \"f0851dc07ad776a718a6b2077f7d4cde\"\n },\n {\n \"url\": \"assets/index.html-GEt_McOE.js\",\n \"revision\": \"9819c699b3d1c65518a7c9f208d1eb01\"\n },\n {\n \"url\": \"assets/index.html-gHhFwdGj.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-GpIlvQXn.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-GYAMrXS-.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-H5ajPWzC.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-HffK__w0.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-HiksATK8.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-Hvr1twkc.js\",\n \"revision\": \"0863680115a8ded21665ace23a839672\"\n },\n {\n \"url\": \"assets/index.html-HxIzy8B_.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-jQOvySfo.js\",\n \"revision\": \"1955ad1b99bd380ca1e5c197f350ac31\"\n },\n {\n \"url\": \"assets/index.html-jVaUOSmI.js\",\n \"revision\": \"72b19a33de68639ae16f36b839e7d13c\"\n },\n {\n \"url\": \"assets/index.html-l-9Jcb0Z.js\",\n \"revision\": \"5ab8c4c304de3bbef4c91cdb52fbf08f\"\n },\n {\n \"url\": \"assets/index.html-l07G40eV.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-lHFYswhu.js\",\n \"revision\": \"68601d9bc01ff40425d106bd1db7b57e\"\n },\n {\n \"url\": \"assets/index.html-LLxB5nrB.js\",\n \"revision\": \"086ed6111461246bc6c97866b2d918d5\"\n },\n {\n \"url\": \"assets/index.html-lsbyji4m.js\",\n \"revision\": \"2f2a8cb8a5a696c749db10bdec7f6c58\"\n },\n {\n \"url\": \"assets/index.html-LSqTAwnp.js\",\n \"revision\": \"c8324355f6d6e02a9bc861e06231a543\"\n },\n {\n \"url\": \"assets/index.html-m59LkreQ.js\",\n \"revision\": \"28018187ac0f122029bdfeb50cfb455b\"\n },\n {\n \"url\": \"assets/index.html-MCTXxKe2.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-MI_McXZr.js\",\n \"revision\": \"c5e8700ca283e861dced506472ecbf81\"\n },\n {\n \"url\": \"assets/index.html-mmNwkX1L.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-NvUp90i0.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-nYslRDbi.js\",\n \"revision\": \"2f2a8cb8a5a696c749db10bdec7f6c58\"\n },\n {\n \"url\": \"assets/index.html-Oh37e22D.js\",\n \"revision\": \"bcb1fcf519857cdf15515f77a485a436\"\n },\n {\n \"url\": \"assets/index.html-ohZtz6Fw.js\",\n \"revision\": \"58893519f365a18c506f1836cfec535a\"\n },\n {\n \"url\": \"assets/index.html-oRdX7laQ.js\",\n \"revision\": \"2de9c461d24eb912ae3e73a7ef0228e7\"\n },\n {\n \"url\": \"assets/index.html-P9T-kKXm.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-PiOevGXi.js\",\n \"revision\": \"48d86f5e92643dfaf5016a7373f5127f\"\n },\n {\n \"url\": \"assets/index.html-Pl0D5fWX.js\",\n \"revision\": \"df50db0b03d7bc4801e7684b895e72c0\"\n },\n {\n \"url\": \"assets/index.html-pPTmba-N.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-puiRG_tj.js\",\n \"revision\": \"78bb0b1759da66665fca92f63e8bab62\"\n },\n {\n \"url\": \"assets/index.html-Q_J0RuMe.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-q-mTP89g.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-Q1OCSdNr.js\",\n \"revision\": \"0355094bde07e5a1c1841bc347489d5e\"\n },\n {\n \"url\": \"assets/index.html-qi3PncfW.js\",\n \"revision\": \"b01b13800c1abbfe37ecbf7bf04d5102\"\n },\n {\n \"url\": \"assets/index.html-qjMVLXfF.js\",\n \"revision\": \"9e80a629102cb272c373b96d1433b760\"\n },\n {\n \"url\": \"assets/index.html-QQRRY2d0.js\",\n \"revision\": \"b43ec38709542738da227e4487b5739f\"\n },\n {\n \"url\": \"assets/index.html-qTt3LMQa.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-QZwQ-TVg.js\",\n \"revision\": \"1a3a2bae8abe10e6d181f5f020e65834\"\n },\n {\n \"url\": \"assets/index.html-Rh0erDOb.js\",\n \"revision\": \"7a00205cde84a167e23e5c6ce0f20674\"\n },\n {\n \"url\": \"assets/index.html-sVMJ39Ap.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-sZlBS23H.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-TLmaTaqK.js\",\n \"revision\": \"310fdf35690289b4b695a2a9f063cdf2\"\n },\n {\n \"url\": \"assets/index.html-VsukZOSA.js\",\n \"revision\": \"c6e6b871aa905370fa4d93c22c2fc8e1\"\n },\n {\n \"url\": \"assets/index.html-w2bXuDTO.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-wOzz5n--.js\",\n \"revision\": \"7988a457fbec5732be5a588e281d2de2\"\n },\n {\n \"url\": \"assets/index.html-wqut89jq.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-wRo-8kqz.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-X7WU_LPV.js\",\n \"revision\": \"18f6a74b2ca20e17c9893fd3cfd2c878\"\n },\n {\n \"url\": \"assets/index.html-XiIyF-Mz.js\",\n \"revision\": \"125061609d4366c5cf551cfd435226ee\"\n },\n {\n \"url\": \"assets/index.html-Y6Zxo28x.js\",\n \"revision\": \"583fc19e65b7982208e7988a34d75970\"\n },\n {\n \"url\": \"assets/index.html-y8X0hE31.js\",\n \"revision\": \"c9d0a878cd5df0d88c205f49b789c4c0\"\n },\n {\n \"url\": \"assets/index.html-yjc28uoP.js\",\n \"revision\": \"4d87cc57914d0403609cbb2f0de32cbb\"\n },\n {\n \"url\": \"assets/index.html-Zl8OD7vu.js\",\n \"revision\": \"eba5ebfdf176f5b1608ff6a52d885037\"\n },\n {\n \"url\": \"assets/infoDiagram-a336098b-0X44mHNI.js\",\n \"revision\": \"7c7d9b2c95a6e450e2d10a3e0fc55a87\"\n },\n {\n \"url\": \"assets/init-Hi12RPRh.js\",\n \"revision\": \"3ce28180466443e9b617d7b96e9f7b8f\"\n },\n {\n \"url\": \"assets/install_zlmediakit_using_vcpkg_2-1HFW-yNt.js\",\n \"revision\": \"eba8f412e34fc0140174130ed248e21f\"\n },\n {\n \"url\": \"assets/install_zlmediakit_using_vcpkg.html-4lMDCmIH.js\",\n \"revision\": \"07651c8f57c5dad334128fdeda0c4eaf\"\n },\n {\n \"url\": \"assets/install_zlmediakit_using_vcpkg.html-hSrbYLMY.js\",\n \"revision\": \"a9f0130084186aaeaaed5e99e6672a75\"\n },\n {\n \"url\": \"assets/install_zlmediakit_using_vcpkg.html-lJ__kZwE.js\",\n \"revision\": \"90288c6b05b19f6839599ba7d32befbd\"\n },\n {\n \"url\": \"assets/install_zlmediakit_using_vcpkg.html-RuAB6C5H.js\",\n \"revision\": \"95f5b69520e8b9b1ee89fa725167c4c5\"\n },\n {\n \"url\": \"assets/introduction_to_streaming_media_related_technologies.html-9hb3DfJc.js\",\n \"revision\": \"9b750d6d951253459db479617f46bddd\"\n },\n {\n \"url\": \"assets/introduction_to_streaming_media_related_technologies.html-I9N-fJX2.js\",\n \"revision\": \"55e6439819a4791f875f63b3cb6707c0\"\n },\n {\n \"url\": \"assets/introduction_to_streaming_media_related_technologies.html-O53gIrdK.js\",\n \"revision\": \"0ef8b597685e571d9ff51705e039dc88\"\n },\n {\n \"url\": \"assets/introduction_to_streaming_media_related_technologies.html-uFhGEBGc.js\",\n \"revision\": \"1d475bfd3c612e339908e97deaa79136\"\n },\n {\n \"url\": \"assets/journeyDiagram-deae3313-I4uOsZJQ.js\",\n \"revision\": \"ef43dd1484f4eeaeab65b285da3a37a7\"\n },\n {\n \"url\": \"assets/layout-1ugHHiNm.js\",\n \"revision\": \"0ffeab76c67f5c54886d7e823132739e\"\n },\n {\n \"url\": \"assets/license.html-onnWhI1X.js\",\n \"revision\": \"959de41ff2dbe211d159ffcbbdecaf1d\"\n },\n {\n \"url\": \"assets/license.html-ptTdZQ9a.js\",\n \"revision\": \"59c5af23d2c0c4fa2f4eab93e329bf3c\"\n },\n {\n \"url\": \"assets/license.html-RX6EoCn0.js\",\n \"revision\": \"d42d2eeec730453b07e3964e1cc71f2b\"\n },\n {\n \"url\": \"assets/license.html-UJLTmREW.js\",\n \"revision\": \"e95293364bf2e5280a49a73e734980f2\"\n },\n {\n \"url\": \"assets/line-TqRW8de4.js\",\n \"revision\": \"7a8177aa033ab622aa11b56f082f1e84\"\n },\n {\n \"url\": \"assets/linear-KPN1H-BK.js\",\n \"revision\": \"bfeaac62e171d2b7d62d537358e7263f\"\n },\n {\n \"url\": \"assets/mermaid.core-zy7cM8l9.js\",\n \"revision\": \"f21ea48dcb7bb7ddfeaf97dfee38c4e7\"\n },\n {\n \"url\": \"assets/mindmap-definition-617cf8dd-IzO8d3I0.js\",\n \"revision\": \"27b15f86a2262391727ef0b7dc98c548\"\n },\n {\n \"url\": \"assets/not_recommended_qq.html-_--W0-VY.js\",\n \"revision\": \"bfec6f3c75518c5bec67f07dca642975\"\n },\n {\n \"url\": \"assets/not_recommended_qq.html-g8E5V1Ie.js\",\n \"revision\": \"cc6d5dbde1ac6d1fd4335769c6ce3666\"\n },\n {\n \"url\": \"assets/not_recommended_qq.html-Od4ztKJy.js\",\n \"revision\": \"c3885d6144111405525cc78161e1bce3\"\n },\n {\n \"url\": \"assets/not_recommended_qq.html-SK9_7gOI.js\",\n \"revision\": \"d0694222f2a2ed5d11ea28d6a2ca99ec\"\n },\n {\n \"url\": \"assets/on-demand_push_streaming_zh-CK4xj1dh.js\",\n \"revision\": \"58fd02f19ecc7bced43f105b06c8430d\"\n },\n {\n \"url\": \"assets/on-demand_push_streaming.html-crgN24-s.js\",\n \"revision\": \"ac1b3b0933859c59196b2f575f3649ac\"\n },\n {\n \"url\": \"assets/on-demand_push_streaming.html-kP6TQb2_.js\",\n \"revision\": \"2785a3c0027931aa5e62297f7ccf37c2\"\n },\n {\n \"url\": \"assets/on-demand_push_streaming.html-UrbeRghD.js\",\n \"revision\": \"328d22810bac39fb7290ed3d3c83666c\"\n },\n {\n \"url\": \"assets/on-demand_push_streaming.html-YM_cjoRG.js\",\n \"revision\": \"b5c81fe1a64242735f8bdc0a06d82454\"\n },\n {\n \"url\": \"assets/on-demand_streaming_zh-h19pTlmd.js\",\n \"revision\": \"0eb44d4c65523fe801d4a4498adaafc4\"\n },\n {\n \"url\": \"assets/on-demand_streaming.html-2DvN-m5K.js\",\n \"revision\": \"b38e0c728d1e2148b057ac438c0329fd\"\n },\n {\n \"url\": \"assets/on-demand_streaming.html-5SBDxVes.js\",\n \"revision\": \"a3755702d9fcf9d9e4672d16658758a0\"\n },\n {\n \"url\": \"assets/on-demand_streaming.html-iLkNMoAM.js\",\n \"revision\": \"6940985876159d74182e956ddfbfb37c\"\n },\n {\n \"url\": \"assets/on-demand_streaming.html-nFxU5UDk.js\",\n \"revision\": \"0891480709c2e68ddc53aa7ad96b82a9\"\n },\n {\n \"url\": \"assets/oncetoken.html-0LGtefKi.js\",\n \"revision\": \"f71703fa1b6f44dc11d803ff84c67b17\"\n },\n {\n \"url\": \"assets/oncetoken.html-JcsefotR.js\",\n \"revision\": \"0d901abe41c808ec9f1a3c1c35ffe65f\"\n },\n {\n \"url\": \"assets/oncetoken.html-LPckM_ZY.js\",\n \"revision\": \"9154f9b016875771b1917e6c850a1996\"\n },\n {\n \"url\": \"assets/oncetoken.html-MCJaY58Y.js\",\n \"revision\": \"f154585fbd3ed66dc2b9444cdca63ca3\"\n },\n {\n \"url\": \"assets/online_test.html-8_GcpcRF.js\",\n \"revision\": \"52338331afa59a61a6bcb8f6ca24fafe\"\n },\n {\n \"url\": \"assets/online_test.html-B0vGk4Ng.js\",\n \"revision\": \"6ac5f2975a582f6314ff6499fc171bb9\"\n },\n {\n \"url\": \"assets/online_test.html-kfBFI_bL.js\",\n \"revision\": \"fabf6637a859684d0a738aa0d97169fc\"\n },\n {\n \"url\": \"assets/online_test.html-osni6C75.js\",\n \"revision\": \"e661758df2e4ad6406dc4aa0e9871690\"\n },\n {\n \"url\": \"assets/ordinal-wXG5obU4.js\",\n \"revision\": \"a72e57060c4f6a7606baa78dc6e9ad02\"\n },\n {\n \"url\": \"assets/path-aUcfwwLI.js\",\n \"revision\": \"f86c0243cb45746453c6b4f7dbd9f34d\"\n },\n {\n \"url\": \"assets/performance_testing.html-D5lG5UBD.js\",\n \"revision\": \"c1b89bdd7e7e601c009007aadd4b3545\"\n },\n {\n \"url\": \"assets/performance_testing.html-DQL8Y_0H.js\",\n \"revision\": \"614f84b26f36cd75f82542fcafbadbf3\"\n },\n {\n \"url\": \"assets/performance_testing.html-LDuN76e5.js\",\n \"revision\": \"d110995c38921504abe8026630031b12\"\n },\n {\n \"url\": \"assets/performance_testing.html-wMvwmLu0.js\",\n \"revision\": \"d43a0001d72ef49579dbf598ac26ba4e\"\n },\n {\n \"url\": \"assets/photoswipe.esm-i2ohwMnJ.js\",\n \"revision\": \"e9ff503527474b1afe53a1ee900448a3\"\n },\n {\n \"url\": \"assets/pieDiagram-a5166659-w0_KZcnm.js\",\n \"revision\": \"b5e4fa575f30912ccb494dfc8c3ea784\"\n },\n {\n \"url\": \"assets/play_url_rules.html-_eahSglS.js\",\n \"revision\": \"7fbd4cf9e506e5c36ccd6e6a3af7ffc9\"\n },\n {\n \"url\": \"assets/play_url_rules.html-k15nwlze.js\",\n \"revision\": \"e73911feb97d8a929bca33c441c50253\"\n },\n {\n \"url\": \"assets/play_url_rules.html-lTCmvIjW.js\",\n \"revision\": \"77e2aea436890c61d08973b2466e3f29\"\n },\n {\n \"url\": \"assets/play_url_rules.html-LU-zd-xr.js\",\n \"revision\": \"e8313eb4ea56e522cb92f9f260523109\"\n },\n {\n \"url\": \"assets/playback_authentication_zh-gjAAn9Yd.js\",\n \"revision\": \"d1b73468587890117bafd3f86759aec4\"\n },\n {\n \"url\": \"assets/playback_authentication.html-arMfpj8D.js\",\n \"revision\": \"9168f09b8be9be130d72ddb4c4b4fb3c\"\n },\n {\n \"url\": \"assets/playback_authentication.html-GpyuaGt9.js\",\n \"revision\": \"3f178ba69cf60f714a669c886aaaf406\"\n },\n {\n \"url\": \"assets/playback_authentication.html-TBCUOtoI.js\",\n \"revision\": \"f6ac31072a9c832919212e4e49c744dd\"\n },\n {\n \"url\": \"assets/playback_authentication.html-wjgI-Yj5.js\",\n \"revision\": \"565152fbd8128bbfc4a350131902a817\"\n },\n {\n \"url\": \"assets/plugin-vue_export-helper-x3n3nnut.js\",\n \"revision\": \"25e3a5dcaf00fb2b1ba0c8ecea6d2560\"\n },\n {\n \"url\": \"assets/push_authentication_zh-OS4qAsfx.js\",\n \"revision\": \"2c2bf93635139a5d3979114757a9bfa3\"\n },\n {\n \"url\": \"assets/push_authentication.html-8JQfqi5E.js\",\n \"revision\": \"3e7eea41c9dfba1adbb4128ecaf6f554\"\n },\n {\n \"url\": \"assets/push_authentication.html-OUbzb3iO.js\",\n \"revision\": \"3b3cc0ecc39db54018a16285adddc11d\"\n },\n {\n \"url\": \"assets/push_authentication.html-qlfLynHw.js\",\n \"revision\": \"b3d7bf7f8d5bdcd9e98b65b9def167ab\"\n },\n {\n \"url\": \"assets/push_authentication.html-w6czo8pV.js\",\n \"revision\": \"a569b066e9b213958721b107ade9378f\"\n },\n {\n \"url\": \"assets/push_streaming.html-5CuTTppH.js\",\n \"revision\": \"4e9002455f88236b97638211bcd2a71e\"\n },\n {\n \"url\": \"assets/push_streaming.html-5MzKBCwx.js\",\n \"revision\": \"00af9265177e3e8a736e41254f3cd2eb\"\n },\n {\n \"url\": \"assets/push_streaming.html-k2pojRSs.js\",\n \"revision\": \"b540ca7b5f7d0d8e27ea811be9e9617a\"\n },\n {\n \"url\": \"assets/push_streaming.html-Z4VDPPfI.js\",\n \"revision\": \"c64db74b6d82876529a744130565aa0e\"\n },\n {\n \"url\": \"assets/push_test-WgKOKRFc.js\",\n \"revision\": \"e9d124a5d01db8f90748223c62797fde\"\n },\n {\n \"url\": \"assets/push_test.html-gnFrDUbt.js\",\n \"revision\": \"64472eabb158a683a6690a65cca64231\"\n },\n {\n \"url\": \"assets/push_test.html-HAP8YKRj.js\",\n \"revision\": \"34e74d916e9b0350b6fe7336a692c55e\"\n },\n {\n \"url\": \"assets/push_test.html-MSIBzphj.js\",\n \"revision\": \"5cc8f89501d92e4e806c0ae137ee928c\"\n },\n {\n \"url\": \"assets/push_test.html-rQVB769L.js\",\n \"revision\": \"93f2a09ff23420dc2f85ff60910ec319\"\n },\n {\n \"url\": \"assets/quadrantDiagram-6c355bbc-ZBJyvn0X.js\",\n \"revision\": \"95a94604ca7194ef85d78b0c34563ede\"\n },\n {\n \"url\": \"assets/requirementDiagram-4038b16c-KuNIOd0s.js\",\n \"revision\": \"4fdc6d61b8f7d5815ecbe532d445569c\"\n },\n {\n \"url\": \"assets/restful_api.html-0EdVK-2T.js\",\n \"revision\": \"e14b045dd385bdfc8d8d09e5dc50eff9\"\n },\n {\n \"url\": \"assets/restful_api.html-pwLlZzjg.js\",\n \"revision\": \"75aabe8acadb334e8f4ea469b5e73278\"\n },\n {\n \"url\": \"assets/restful_api.html-vpWQQrW9.js\",\n \"revision\": \"3577dfd936bbed14b4d76ac027be2810\"\n },\n {\n \"url\": \"assets/restful_api.html-Xx1SUrzX.js\",\n \"revision\": \"27db13c31cdd8cf6d8f4d4db7958194b\"\n },\n {\n \"url\": \"assets/rtmp_playback_compatibility_issues.html-5avJPHVo.js\",\n \"revision\": \"6be1e2e717cb3e63216bce17db431fda\"\n },\n {\n \"url\": \"assets/rtmp_playback_compatibility_issues.html-CmMs82Q4.js\",\n \"revision\": \"cd4210f31ea8b8e3eff4f4d3695dd985\"\n },\n {\n \"url\": \"assets/rtmp_playback_compatibility_issues.html-h5lBk1EY.js\",\n \"revision\": \"bdccd8506c92ba67a2dba10573e6b270\"\n },\n {\n \"url\": \"assets/rtmp_playback_compatibility_issues.html-RzirVjbt.js\",\n \"revision\": \"bf3a79adbd8687cf32a560b763907237\"\n },\n {\n \"url\": \"assets/rtmp_pull_stream_performance_test.html-_aYV-qZf.js\",\n \"revision\": \"ade15d4d534cd82ca2cc09fba7821fc3\"\n },\n {\n \"url\": \"assets/rtmp_pull_stream_performance_test.html-ANpGb4zw.js\",\n \"revision\": \"04f9d4e9bb7d2fd8735c9053d3a7c05b\"\n },\n {\n \"url\": \"assets/rtmp_pull_stream_performance_test.html-biPYYmB-.js\",\n \"revision\": \"cad24a5b0bbf109874b3a1fe2f333538\"\n },\n {\n \"url\": \"assets/rtmp_pull_stream_performance_test.html-HQ4fzTKd.js\",\n \"revision\": \"305864626776df21bb91f68cd1ae4047\"\n },\n {\n \"url\": \"assets/rtmp_push_stream_performance_test.html-9WCFfRY7.js\",\n \"revision\": \"039f907c1c88973be33875ac4dfefa79\"\n },\n {\n \"url\": \"assets/rtmp_push_stream_performance_test.html-AxJYj-3i.js\",\n \"revision\": \"483711c1a022e7d97bbfd4425092f5e6\"\n },\n {\n \"url\": \"assets/rtmp_push_stream_performance_test.html-BY1UVNB2.js\",\n \"revision\": \"ad220f0720f98cb1adc30de41972428f\"\n },\n {\n \"url\": \"assets/rtmp_push_stream_performance_test.html-eR62v-Vt.js\",\n \"revision\": \"ca58c07324fd6d9748929f9086029beb\"\n },\n {\n \"url\": \"assets/rtmp_support_for_h265_and_opus.html-f4aPfFot.js\",\n \"revision\": \"a492fe181304965e8618760a986a1330\"\n },\n {\n \"url\": \"assets/rtmp_support_for_h265_and_opus.html-KlA1IkKx.js\",\n \"revision\": \"597fa76e7e2099ef448607b7e85f63cb\"\n },\n {\n \"url\": \"assets/rtmp_support_for_h265_and_opus.html-tX2acU7J.js\",\n \"revision\": \"70ba7cf876f460ad76d42aa18bfa2af7\"\n },\n {\n \"url\": \"assets/rtmp_support_for_h265_and_opus.html-uBU2hKvT.js\",\n \"revision\": \"4e5563f018323cd45ceb141240e72eac\"\n },\n {\n \"url\": \"assets/rtsp_performance_optimization.html-bYm4ov8K.js\",\n \"revision\": \"e4e4ee5f855b396f5a3217109bd291ea\"\n },\n {\n \"url\": \"assets/rtsp_performance_optimization.html-Fk8ai5fo.js\",\n \"revision\": \"a9d1f41908f2aa96cec3db5f89ff0301\"\n },\n {\n \"url\": \"assets/rtsp_performance_optimization.html-N4V23aKI.js\",\n \"revision\": \"8a21a102026c37a97823ac99d10ceda5\"\n },\n {\n \"url\": \"assets/rtsp_performance_optimization.html-XwSQReWx.js\",\n \"revision\": \"e4f0f43ad81a11129ab62c4dc1a66d96\"\n },\n {\n \"url\": \"assets/rtsp_pull_stream_performance_test.html-_t28Fr8s.js\",\n \"revision\": \"0e170326c16f7778159a775fca57d52b\"\n },\n {\n \"url\": \"assets/rtsp_pull_stream_performance_test.html-1iKNM4Ty.js\",\n \"revision\": \"0e170326c16f7778159a775fca57d52b\"\n },\n {\n \"url\": \"assets/rtsp_pull_stream_performance_test.html-2yov4QZH.js\",\n \"revision\": \"36e9219568e20efb63443ea908a33bae\"\n },\n {\n \"url\": \"assets/rtsp_pull_stream_performance_test.html-9hA9_SB-.js\",\n \"revision\": \"687c3b750da73663d062d7188877acca\"\n },\n {\n \"url\": \"assets/rtsp_push_process.html-eeithr0y.js\",\n \"revision\": \"f54ec8d338002bfc19a7ebf2719dd781\"\n },\n {\n \"url\": \"assets/rtsp_push_process.html-MSFA7pR8.js\",\n \"revision\": \"0730b0affd6b626ec2adde265bfbb202\"\n },\n {\n \"url\": \"assets/rtsp_push_process.html-u1dV3DYT.js\",\n \"revision\": \"27148da1db3a75b148d02e54feb48f0a\"\n },\n {\n \"url\": \"assets/rtsp_push_process.html-Xg9db3f1.js\",\n \"revision\": \"072e05961749f520321ea457f991f61b\"\n },\n {\n \"url\": \"assets/rtsp_push_stream_performance_test.html-3UQhsyo8.js\",\n \"revision\": \"308c989c47769eb89dc0504d1392b531\"\n },\n {\n \"url\": \"assets/rtsp_push_stream_performance_test.html-g2X0PP_e.js\",\n \"revision\": \"825be1a0511d7deae628dc8708cdb3cd\"\n },\n {\n \"url\": \"assets/rtsp_push_stream_performance_test.html-iJ5a3bwy.js\",\n \"revision\": \"b95cea3a31b0fc6e25f5f23e017006fc\"\n },\n {\n \"url\": \"assets/rtsp_push_stream_performance_test.html-y53Byttn.js\",\n \"revision\": \"b95cea3a31b0fc6e25f5f23e017006fc\"\n },\n {\n \"url\": \"assets/sankeyDiagram-6db3d513-8ESTXLkU.js\",\n \"revision\": \"223c4ca227f9a7a1ee88b73f3b9d967e\"\n },\n {\n \"url\": \"assets/sequence_diagram.html-9KpjQs_B.js\",\n \"revision\": \"8a023c0dd938024313d0cbbde9706159\"\n },\n {\n \"url\": \"assets/sequence_diagram.html-mA7gwutk.js\",\n \"revision\": \"7ebeafb1f7cd11233f113f308e528768\"\n },\n {\n \"url\": \"assets/sequence_diagram.html-y7tfUv_v.js\",\n \"revision\": \"f83ca3c8bcc0b924a3664b7656d0d346\"\n },\n {\n \"url\": \"assets/sequence_diagram.html-yqJJFxQH.js\",\n \"revision\": \"d782a1092ea55f1b4d383b3ec73713a7\"\n },\n {\n \"url\": \"assets/sequenceDiagram-465a088a-dqSP27xN.js\",\n \"revision\": \"3bea7b493b4c53204bf422090b2d6052\"\n },\n {\n \"url\": \"assets/start_server_3-RVnx99XR.js\",\n \"revision\": \"cdc2fe86a390491f5cb22b1eceb5f785\"\n },\n {\n \"url\": \"assets/start_server.html-EcCCtjYj.js\",\n \"revision\": \"b718e14185c9805fc59a11730b096781\"\n },\n {\n \"url\": \"assets/start_server.html-eoFuSTqV.js\",\n \"revision\": \"20b220a6650a7126be71972edb06fca5\"\n },\n {\n \"url\": \"assets/start_server.html-fcMybRlu.js\",\n \"revision\": \"09f556bf8111d3276b52829d577786e3\"\n },\n {\n \"url\": \"assets/start_server.html-rADXsgsy.js\",\n \"revision\": \"17f98f760083e4a3a319271a5e63319a\"\n },\n {\n \"url\": \"assets/start.html-6kI24E98.js\",\n \"revision\": \"2fa6ec43deaa252aac1868bfbe4faa5c\"\n },\n {\n \"url\": \"assets/start.html-I4A7uS59.js\",\n \"revision\": \"2dd388f7f89c50f312c2671acec0f20a\"\n },\n {\n \"url\": \"assets/start.html-Jyh7sq9I.js\",\n \"revision\": \"f5febcbd00c1165c254b98d0a33020b0\"\n },\n {\n \"url\": \"assets/start.html-uDyezAWa.js\",\n \"revision\": \"b10b5daf3f12fe881fd0668eca4430b5\"\n },\n {\n \"url\": \"assets/stateDiagram-b620d43f-w1mYtpVD.js\",\n \"revision\": \"1619203b67a54e1d7d196cce5f2f98c5\"\n },\n {\n \"url\": \"assets/stateDiagram-v2-2671c3d1-xaF1im6Z.js\",\n \"revision\": \"c54d4ae6e421ec78062054c7fc6969f5\"\n },\n {\n \"url\": \"assets/style-Tj0-KenM.css\",\n \"revision\": \"36a590696c444e3e28bdef8fdfb93e3b\"\n },\n {\n \"url\": \"assets/styles-4ba6ed67-HTbB9pbZ.js\",\n \"revision\": \"1850ecb166e501b1f810e4c7ed57f715\"\n },\n {\n \"url\": \"assets/styles-b966c4ae-H6tCXVxS.js\",\n \"revision\": \"2c0e21940573279c38b798e9f714b192\"\n },\n {\n \"url\": \"assets/styles-bbc3fe3b-4cn30Fs-.js\",\n \"revision\": \"b18540ef1053da712175b258b0c8b0c0\"\n },\n {\n \"url\": \"assets/svgDrawCommon-ad5ef572-eI41Wm50.js\",\n \"revision\": \"a6f2ad4fa83d99c31b92d79c95e5808d\"\n },\n {\n \"url\": \"assets/thanks.html--KuWuTSm.js\",\n \"revision\": \"d3803fff8502582755c3807cb30b7cab\"\n },\n {\n \"url\": \"assets/thanks.html-eseVCxC7.js\",\n \"revision\": \"1273ae668b9056c36531756d4732bdb3\"\n },\n {\n \"url\": \"assets/thanks.html-F1DFxuQI.js\",\n \"revision\": \"a4077c1247c6d12a11356f36b09d26d3\"\n },\n {\n \"url\": \"assets/thanks.html-uU2jemjd.js\",\n \"revision\": \"96f1879ed6e08b36c3de9968071ed7ea\"\n },\n {\n \"url\": \"assets/the_nature_of_live_broadcast_delay.html--_Oe6F80.js\",\n \"revision\": \"f8658cf2d7e8ad6d96608c589f34470c\"\n },\n {\n \"url\": \"assets/the_nature_of_live_broadcast_delay.html-bGwDwg8A.js\",\n \"revision\": \"20f830ee314f6b02c6b0126b63b5446b\"\n },\n {\n \"url\": \"assets/the_nature_of_live_broadcast_delay.html-KHnxiXxs.js\",\n \"revision\": \"af034e31e774ba7f59aad68769ac37b2\"\n },\n {\n \"url\": \"assets/the_nature_of_live_broadcast_delay.html-vfCX1bgp.js\",\n \"revision\": \"249ce0b00f2dde216515344489093e43\"\n },\n {\n \"url\": \"assets/timeline-definition-732a2638-SVdJN6QQ.js\",\n \"revision\": \"b82a2b0d1ea4524fca7250b05051dbf5\"\n },\n {\n \"url\": \"assets/use_cases.html-C-cj_NSV.js\",\n \"revision\": \"a791484044a968dc199237dad1cc28f2\"\n },\n {\n \"url\": \"assets/use_cases.html-lHSo0w28.js\",\n \"revision\": \"2f62a031ba7df4b14a6a3967f13903d4\"\n },\n {\n \"url\": \"assets/use_cases.html-NGOdBBIO.js\",\n \"revision\": \"6edd514e04d14b05c2a5db8becc00af0\"\n },\n {\n \"url\": \"assets/use_cases.html-nlOjewQC.js\",\n \"revision\": \"727e6f6195079f183e29904a3db6fb6a\"\n },\n {\n \"url\": \"assets/video_conferencing_related_resources.html-1ZPXoBfM.js\",\n \"revision\": \"e4757909bc6677a4f013cecc2fd1f9cf\"\n },\n {\n \"url\": \"assets/video_conferencing_related_resources.html-AS8_6dZk.js\",\n \"revision\": \"b32c2650fa08531a41cb3a59b89e3836\"\n },\n {\n \"url\": \"assets/video_conferencing_related_resources.html-Da8l8FFw.js\",\n \"revision\": \"a391a24998a5e69a47cbc89241c5e857\"\n },\n {\n \"url\": \"assets/video_conferencing_related_resources.html-SX4i-tyB.js\",\n \"revision\": \"5bce76ddfedd1dfd47d7a8381785f9e0\"\n },\n {\n \"url\": \"assets/vs_code_zh-ltEPcFYF.js\",\n \"revision\": \"bae72e4c099d90687244cb1ba5708ec1\"\n },\n {\n \"url\": \"assets/web_hook_api.html-adtpDhAG.js\",\n \"revision\": \"dec0c93b7a2f82188c65df946b68a050\"\n },\n {\n \"url\": \"assets/web_hook_api.html-DDD36REX.js\",\n \"revision\": \"3f769f46547d3cc3de47527466a736c9\"\n },\n {\n \"url\": \"assets/web_hook_api.html-F_kUu3X6.js\",\n \"revision\": \"95e48cec141cf6b666746c158fa55d8c\"\n },\n {\n \"url\": \"assets/web_hook_api.html-I46LUNuG.js\",\n \"revision\": \"77b1b7aa355a10afb8ce044ba6d36b35\"\n },\n {\n \"url\": \"assets/webrtc_compilation_and_use.html-3Wgq1AT7.js\",\n \"revision\": \"b85235ef120d2f4c446bd10a7a6d5e6b\"\n },\n {\n \"url\": \"assets/webrtc_compilation_and_use.html-FCI8zWK-.js\",\n \"revision\": \"df6c2c0c9bc5da569601b37f48666cb7\"\n },\n {\n \"url\": \"assets/webrtc_compilation_and_use.html-u4uYYnLr.js\",\n \"revision\": \"39615c16478a511c7cce6932b7d93b9c\"\n },\n {\n \"url\": \"assets/webrtc_compilation_and_use.html-zmvb9by4.js\",\n \"revision\": \"6fbfe50928d828008702bb4dfb4d7e85\"\n },\n {\n \"url\": \"assets/webrtc_signaling_interaction_format.html-RSBHyl7A.js\",\n \"revision\": \"918d5f1ae8bc5965606da4fe6657addb\"\n },\n {\n \"url\": \"assets/webrtc_signaling_interaction_format.html-TjrAUdNc.js\",\n \"revision\": \"9c31ec603847531d41ccc4896636cae1\"\n },\n {\n \"url\": \"assets/webrtc_signaling_interaction_format.html-tkZpC3_1.js\",\n \"revision\": \"cd75c78a15c67d291d8e54bac262ca8c\"\n },\n {\n \"url\": \"assets/webrtc_signaling_interaction_format.html-z1sc5Nd0.js\",\n \"revision\": \"40c4838f9d061ba57e584f57e18c6e27\"\n },\n {\n \"url\": \"assets/xychartDiagram-f746c04c-ewecNIL5.js\",\n \"revision\": \"b832accbed5e96894865d7a65ad2218f\"\n },\n {\n \"url\": \"assets/zltoolkit_source_code_study_notes.html-ElJi0L0Z.js\",\n \"revision\": \"d33843ef74beecc7893af83afdc6005a\"\n },\n {\n \"url\": \"assets/zltoolkit_source_code_study_notes.html-rBGfF-Ka.js\",\n \"revision\": \"1d50586c77af688ffbdba46ea657a7c3\"\n },\n {\n \"url\": \"assets/zltoolkit_source_code_study_notes.html-vFvvg7fr.js\",\n \"revision\": \"0517fff48911aa21ff7f41c822b80900\"\n },\n {\n \"url\": \"assets/zltoolkit_source_code_study_notes.html-XyGnG3Jc.js\",\n \"revision\": \"dd92a80d45f838fcd5522250cc30101b\"\n },\n {\n \"url\": \"logo.svg\",\n \"revision\": \"6c6a0dc1bda8418aef497da1d078d96f\"\n },\n {\n \"url\": \"404.html\",\n \"revision\": \"3865fe28b07f8c7e04430c7042553a63\"\n },\n {\n \"url\": \"guide/code/index.html\",\n \"revision\": \"85a424a2f8ab175a7688fce05152636a\"\n },\n {\n \"url\": \"guide/code/oncetoken.html\",\n \"revision\": \"fa69dd9ffe56cd8e27b3e370c74273eb\"\n },\n {\n \"url\": \"guide/faq/index.html\",\n \"revision\": \"98b90c0cb2df43d4e1ddd66095bbbd47\"\n },\n {\n \"url\": \"guide/faq/not_recommended_qq.html\",\n \"revision\": \"e637aeeabdc118d09ff04ab5f528e51d\"\n },\n {\n \"url\": \"guide/faq/rtmp_playback_compatibility_issues.html\",\n \"revision\": \"00de49934f55a20376ccfdade9e697e4\"\n },\n {\n \"url\": \"guide/index.html\",\n \"revision\": \"537b86589540da3740db655820964c94\"\n },\n {\n \"url\": \"guide/install/compilation_instructions_for_windows_version.html\",\n \"revision\": \"5f782653d1dadb9f3a19523fe11443f1\"\n },\n {\n \"url\": \"guide/install/index.html\",\n \"revision\": \"24702ef6edb73e206ab9a43de2d06f3e\"\n },\n {\n \"url\": \"guide/install/install_zlmediakit_using_vcpkg.html\",\n \"revision\": \"852b478bc53f0134bfebd52c9a31662f\"\n },\n {\n \"url\": \"guide/install/start.html\",\n \"revision\": \"c6dfd6105e1b04ccaf084bb089ba9979\"\n },\n {\n \"url\": \"guide/media_server/config_file.html\",\n \"revision\": \"067213db44c1c222ebb1e8b5ea76ef76\"\n },\n {\n \"url\": \"guide/media_server/generate_ssl_self-signed_certificate_and_test.html\",\n \"revision\": \"a533b403b85e7d8cbaba53a20cef3b0f\"\n },\n {\n \"url\": \"guide/media_server/how_to_enable_https_related_functions.html\",\n \"revision\": \"40bd846cfdc9c265de5d1ddf3e102624\"\n },\n {\n \"url\": \"guide/media_server/index.html\",\n \"revision\": \"0ab3216240c6a42aa79e6be89eba6c80\"\n },\n {\n \"url\": \"guide/media_server/on-demand_push_streaming.html\",\n \"revision\": \"6c81941031f2a4737ec8f4064a22bf81\"\n },\n {\n \"url\": \"guide/media_server/on-demand_streaming.html\",\n \"revision\": \"6aad038175106a1a28f6b361d621d6a3\"\n },\n {\n \"url\": \"guide/media_server/play_url_rules.html\",\n \"revision\": \"32eba3b014511f5646319759da0b0f58\"\n },\n {\n \"url\": \"guide/media_server/playback_authentication.html\",\n \"revision\": \"cb043dfa45a73cfd4fc485f7fb4baf39\"\n },\n {\n \"url\": \"guide/media_server/push_authentication.html\",\n \"revision\": \"d5dde7a2ae888875f40f93ed9265e61a\"\n },\n {\n \"url\": \"guide/media_server/push_test.html\",\n \"revision\": \"ef9b26df3f96a90ca95c7f9a8a72bdf4\"\n },\n {\n \"url\": \"guide/media_server/restful_api.html\",\n \"revision\": \"b4a580e6829daba8f7eeded3ed41dfa3\"\n },\n {\n \"url\": \"guide/media_server/sequence_diagram.html\",\n \"revision\": \"86718c51508814797cc54b3aaf3897e1\"\n },\n {\n \"url\": \"guide/media_server/start_server.html\",\n \"revision\": \"94a3d840c323775773679f16702ad488\"\n },\n {\n \"url\": \"guide/media_server/web_hook_api.html\",\n \"revision\": \"e48f02b170a2af5d7a700b31dd7647a4\"\n },\n {\n \"url\": \"guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html\",\n \"revision\": \"9191a069386b2284181a2970eb45b92a\"\n },\n {\n \"url\": \"guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html\",\n \"revision\": \"5684d250848fcf20793c25363f1278cc\"\n },\n {\n \"url\": \"guide/protocol/gb28181/index.html\",\n \"revision\": \"36d8bb0881015de3499a3ab62dc067ce\"\n },\n {\n \"url\": \"guide/protocol/gb28181/push_streaming.html\",\n \"revision\": \"19affb2942d7240ae76ca0e13534d9d8\"\n },\n {\n \"url\": \"guide/protocol/index.html\",\n \"revision\": \"56d02c69a253d7ab9540ea3402d30f34\"\n },\n {\n \"url\": \"guide/protocol/srt/index.html\",\n \"revision\": \"435927a3703972d18b9b86653426e62f\"\n },\n {\n \"url\": \"guide/protocol/webrtc/index.html\",\n \"revision\": \"345c56b94b207ce55f267210d26fd3a6\"\n },\n {\n \"url\": \"guide/protocol/webrtc/webrtc_compilation_and_use.html\",\n \"revision\": \"e0edab3a2df7b7dd60bfcf511f5ad727\"\n },\n {\n \"url\": \"guide/protocol/webrtc/webrtc_signaling_interaction_format.html\",\n \"revision\": \"070befc559bef31a64235d6fb317ef90\"\n },\n {\n \"url\": \"guide/sdk/how_to_create_a_live_steam.html\",\n \"revision\": \"5f8db8dad9394d0552a3dac37b996286\"\n },\n {\n \"url\": \"guide/sdk/index.html\",\n \"revision\": \"8e58b099444522747c6b5e85ae68957a\"\n },\n {\n \"url\": \"index.html\",\n \"revision\": \"5c52ae48ac5c1545dd1a8cdf47d3e09b\"\n },\n {\n \"url\": \"more/collaborative_projects.html\",\n \"revision\": \"81fc258afab08d2823429ed06afc810e\"\n },\n {\n \"url\": \"more/contact.html\",\n \"revision\": \"c696a5a1dfac6b7b9ada227c7327e891\"\n },\n {\n \"url\": \"more/index.html\",\n \"revision\": \"b1c30c50e5eed16a3d0d63afdb31fd65\"\n },\n {\n \"url\": \"more/license.html\",\n \"revision\": \"d3d09408fba9d2ca0ef815dde6b7cd62\"\n },\n {\n \"url\": \"more/thanks.html\",\n \"revision\": \"1660dad18dcec32e34fa8f107ed52606\"\n },\n {\n \"url\": \"more/use_cases.html\",\n \"revision\": \"09bd34eb7dea4ada219276772d7a45c1\"\n },\n {\n \"url\": \"reference/development_log/hls_high_performance_journey.html\",\n \"revision\": \"29dfa747f9fac3cd3105c7e47258fd82\"\n },\n {\n \"url\": \"reference/development_log/index.html\",\n \"revision\": \"9e81ea4739ab81a8007c8467faf39b1d\"\n },\n {\n \"url\": \"reference/development_log/rtsp_performance_optimization.html\",\n \"revision\": \"315ee5c01757cd2216d312ec5ea29634\"\n },\n {\n \"url\": \"reference/documents/exclusive_features.html\",\n \"revision\": \"d6027106c8e31b792c9de6687b45c355\"\n },\n {\n \"url\": \"reference/documents/high_concurrency_implementation_principle.html\",\n \"revision\": \"063c3813a491128b8ee35466c54dbf70\"\n },\n {\n \"url\": \"reference/documents/index.html\",\n \"revision\": \"8d22ef31cca3e15398d171982665a712\"\n },\n {\n \"url\": \"reference/documents/introduction_to_streaming_media_related_technologies.html\",\n \"revision\": \"f4b32add899a41049ac5c1a7f1855658\"\n },\n {\n \"url\": \"reference/documents/rtsp_push_process.html\",\n \"revision\": \"ad5dd7491cd5a0b5148bdbc3d1588e8d\"\n },\n {\n \"url\": \"reference/documents/the_nature_of_live_broadcast_delay.html\",\n \"revision\": \"55fefc9095e3754601b193a2f0b24348\"\n },\n {\n \"url\": \"reference/index.html\",\n \"revision\": \"38153056bf91c9f6b40ac52b9c8429ae\"\n },\n {\n \"url\": \"reference/resources/dependency.html\",\n \"revision\": \"79443e289d1ed32af7b88ccb85f9fff6\"\n },\n {\n \"url\": \"reference/resources/index.html\",\n \"revision\": \"ee99966641d5313f73d11265da952b5b\"\n },\n {\n \"url\": \"reference/resources/rtmp_support_for_h265_and_opus.html\",\n \"revision\": \"765e550ebe1c72304cb30532a1338ba3\"\n },\n {\n \"url\": \"reference/resources/video_conferencing_related_resources.html\",\n \"revision\": \"80ab294e442dbe00ef14f015d77b711f\"\n },\n {\n \"url\": \"reference/resources/zltoolkit_source_code_study_notes.html\",\n \"revision\": \"32e04f5fff883191c9ce66ee0042ea8d\"\n },\n {\n \"url\": \"reference/test/benchmark.html\",\n \"revision\": \"e886b25484a8f02b929ba91af8ad17b8\"\n },\n {\n \"url\": \"reference/test/delay_test.html\",\n \"revision\": \"1f3eb000e82cbc65176ef00d9903c6b2\"\n },\n {\n \"url\": \"reference/test/how_to_test_delay.html\",\n \"revision\": \"2c96552964060cfc177fd80edd546dda\"\n },\n {\n \"url\": \"reference/test/index.html\",\n \"revision\": \"2be62b03ecc39a6b43a24555000bf3ce\"\n },\n {\n \"url\": \"reference/test/online_test.html\",\n \"revision\": \"aa483f48ee078ea0d68132b9f58c1cff\"\n },\n {\n \"url\": \"reference/test/performance_testing.html\",\n \"revision\": \"8d4200d81390ca1fe3b9b3f279304d3b\"\n },\n {\n \"url\": \"reference/test/rtmp_pull_stream_performance_test.html\",\n \"revision\": \"a2d320976238a571e8abcfbc98a5432f\"\n },\n {\n \"url\": \"reference/test/rtmp_push_stream_performance_test.html\",\n \"revision\": \"2dd295026f98647cee485cc10d8a4be1\"\n },\n {\n \"url\": \"reference/test/rtsp_pull_stream_performance_test.html\",\n \"revision\": \"cd0e3b1c372d206cbde20ed6afda94f1\"\n },\n {\n \"url\": \"reference/test/rtsp_push_stream_performance_test.html\",\n \"revision\": \"605134697ef11b9a37801e3c2f80cab6\"\n },\n {\n \"url\": \"tutorial/index.html\",\n \"revision\": \"39fa90bef2b872ccb323f6dee04b5bd6\"\n },\n {\n \"url\": \"zh/guide/code/index.html\",\n \"revision\": \"d0a9ad2d07a86929b1310d2f691c697b\"\n },\n {\n \"url\": \"zh/guide/code/oncetoken.html\",\n \"revision\": \"8348b7af27a9139624347b312aa64d96\"\n },\n {\n \"url\": \"zh/guide/faq/index.html\",\n \"revision\": \"67f7fa0cd14c2a280275ed76cbe4b068\"\n },\n {\n \"url\": \"zh/guide/faq/not_recommended_qq.html\",\n \"revision\": \"5e86bf875d063fa0169790bbd9c36230\"\n },\n {\n \"url\": \"zh/guide/faq/rtmp_playback_compatibility_issues.html\",\n \"revision\": \"7466b0664b0558a0bb545ca8920beb9d\"\n },\n {\n \"url\": \"zh/guide/index.html\",\n \"revision\": \"981aefd605a083bcf8754349de180095\"\n },\n {\n \"url\": \"zh/guide/install/compilation_instructions_for_windows_version.html\",\n \"revision\": \"ec97c1f96cd838ecc5150bb27b5f303a\"\n },\n {\n \"url\": \"zh/guide/install/index.html\",\n \"revision\": \"1446d21d66120a66ab52c91e3627da8e\"\n },\n {\n \"url\": \"zh/guide/install/install_zlmediakit_using_vcpkg.html\",\n \"revision\": \"ca3e3c192fac384b2f6d327fbcf07d4d\"\n },\n {\n \"url\": \"zh/guide/install/start.html\",\n \"revision\": \"236cbf4789f07ea51aade4a15bc96e01\"\n },\n {\n \"url\": \"zh/guide/media_server/config_file.html\",\n \"revision\": \"9814ac54bac4be4823c64852d32555ae\"\n },\n {\n \"url\": \"zh/guide/media_server/generate_ssl_self-signed_certificate_and_test.html\",\n \"revision\": \"5e50f5716ffcd4b973182d2109166be7\"\n },\n {\n \"url\": \"zh/guide/media_server/how_to_enable_https_related_functions.html\",\n \"revision\": \"500c433eb534fa0604952ae79a00034a\"\n },\n {\n \"url\": \"zh/guide/media_server/index.html\",\n \"revision\": \"aa3a90561f254260c5258408e430ebf3\"\n },\n {\n \"url\": \"zh/guide/media_server/on-demand_push_streaming.html\",\n \"revision\": \"660f119a7abe28af45d059d3e793ab86\"\n },\n {\n \"url\": \"zh/guide/media_server/on-demand_streaming.html\",\n \"revision\": \"574ea60b4168e23332964d891ada6fb3\"\n },\n {\n \"url\": \"zh/guide/media_server/play_url_rules.html\",\n \"revision\": \"e63d29bae5ba7aa37e2a7750031c23b9\"\n },\n {\n \"url\": \"zh/guide/media_server/playback_authentication.html\",\n \"revision\": \"514d7c9559fe9a7b0a8b48e836014de5\"\n },\n {\n \"url\": \"zh/guide/media_server/push_authentication.html\",\n \"revision\": \"f440ffb820883ea394eb101d0028d369\"\n },\n {\n \"url\": \"zh/guide/media_server/push_test.html\",\n \"revision\": \"eb4c5584dbb732a85d603ffa92cf36cc\"\n },\n {\n \"url\": \"zh/guide/media_server/restful_api.html\",\n \"revision\": \"c6bc2fcfc70314c89b226ca7efae126c\"\n },\n {\n \"url\": \"zh/guide/media_server/sequence_diagram.html\",\n \"revision\": \"51454217ca679b1681369debeced4249\"\n },\n {\n \"url\": \"zh/guide/media_server/start_server.html\",\n \"revision\": \"dde7d5008ccb5634bb2c166310d40c6e\"\n },\n {\n \"url\": \"zh/guide/media_server/web_hook_api.html\",\n \"revision\": \"9e1f2330fd960892fea3509137cf6e8b\"\n },\n {\n \"url\": \"zh/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html\",\n \"revision\": \"f3f705e723ba6cbb7702f0624f5fed87\"\n },\n {\n \"url\": \"zh/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html\",\n \"revision\": \"4f7bd0690c4c2e09c4e46dc5cda2f18b\"\n },\n {\n \"url\": \"zh/guide/protocol/gb28181/index.html\",\n \"revision\": \"20983e78723b0f0deae35fc053bdabce\"\n },\n {\n \"url\": \"zh/guide/protocol/gb28181/push_streaming.html\",\n \"revision\": \"31954cf710a40696539defc10f25f816\"\n },\n {\n \"url\": \"zh/guide/protocol/index.html\",\n \"revision\": \"aeb5067f5dd0a5f86dc57f9e874dc120\"\n },\n {\n \"url\": \"zh/guide/protocol/srt/index.html\",\n \"revision\": \"11f00a3a8ce8fc58fee5f356fd79cb3e\"\n },\n {\n \"url\": \"zh/guide/protocol/webrtc/index.html\",\n \"revision\": \"7561b307370ed1b04bb30306bd8f2736\"\n },\n {\n \"url\": \"zh/guide/protocol/webrtc/webrtc_compilation_and_use.html\",\n \"revision\": \"578f13714759b0c361a3ea3d0d5461df\"\n },\n {\n \"url\": \"zh/guide/protocol/webrtc/webrtc_signaling_interaction_format.html\",\n \"revision\": \"9d73c8eb9e09e9995ea9bc788b878f75\"\n },\n {\n \"url\": \"zh/guide/sdk/how_to_create_a_live_steam.html\",\n \"revision\": \"9233b947ec3f1916ec9cf8aca0764301\"\n },\n {\n \"url\": \"zh/guide/sdk/index.html\",\n \"revision\": \"7ee54c93acac3c9d835e52f9e3bacb8f\"\n },\n {\n \"url\": \"zh/index.html\",\n \"revision\": \"daa549433be45eff028ab4b7882ee52d\"\n },\n {\n \"url\": \"zh/more/collaborative_projects.html\",\n \"revision\": \"32e8b41ac567c70d28fd0c6f7a42e817\"\n },\n {\n \"url\": \"zh/more/contact.html\",\n \"revision\": \"3d8167dfe9dc64662bee707b2786049e\"\n },\n {\n \"url\": \"zh/more/index.html\",\n \"revision\": \"7f05c718b7794f6e376c0e6046e76653\"\n },\n {\n \"url\": \"zh/more/license.html\",\n \"revision\": \"c8dd3fdefcfb62c696e6a76cef776f88\"\n },\n {\n \"url\": \"zh/more/thanks.html\",\n \"revision\": \"2fccada4ad89bcae960428906061c345\"\n },\n {\n \"url\": \"zh/more/use_cases.html\",\n \"revision\": \"0cb8940c581c8e2d34820019dcf21d21\"\n },\n {\n \"url\": \"zh/reference/development_log/hls_high_performance_journey.html\",\n \"revision\": \"c418892d163dbf3fe8e3c4a88d4b3991\"\n },\n {\n \"url\": \"zh/reference/development_log/index.html\",\n \"revision\": \"d743257a94edbe6312263d353902f756\"\n },\n {\n \"url\": \"zh/reference/development_log/rtsp_performance_optimization.html\",\n \"revision\": \"31f03ebd6270fbc607d2361e3b6900a5\"\n },\n {\n \"url\": \"zh/reference/documents/exclusive_features.html\",\n \"revision\": \"2af8910204c20e3eb6c0c8d75ae91088\"\n },\n {\n \"url\": \"zh/reference/documents/high_concurrency_implementation_principle.html\",\n \"revision\": \"3e84efa34c2bab0041625aef66230144\"\n },\n {\n \"url\": \"zh/reference/documents/index.html\",\n \"revision\": \"cdb543633747ad115936d3a4d7e6d213\"\n },\n {\n \"url\": \"zh/reference/documents/introduction_to_streaming_media_related_technologies.html\",\n \"revision\": \"f30b3d26261ed56acaf8c56fc19fef61\"\n },\n {\n \"url\": \"zh/reference/documents/rtsp_push_process.html\",\n \"revision\": \"35a0eca2ceaa5d68bfa06ad53f97580f\"\n },\n {\n \"url\": \"zh/reference/documents/the_nature_of_live_broadcast_delay.html\",\n \"revision\": \"ba5445111cbf70e3a82dfd63a1648db2\"\n },\n {\n \"url\": \"zh/reference/index.html\",\n \"revision\": \"10c7c9c408363748924c89c599d3dedb\"\n },\n {\n \"url\": \"zh/reference/resources/dependency.html\",\n \"revision\": \"856b6284af8a64801e2bd56dcbc286f2\"\n },\n {\n \"url\": \"zh/reference/resources/index.html\",\n \"revision\": \"fcdad89b324ab70311c6ea8e248d5e81\"\n },\n {\n \"url\": \"zh/reference/resources/rtmp_support_for_h265_and_opus.html\",\n \"revision\": \"b31bc0135f4271ae45db4330d4972ecf\"\n },\n {\n \"url\": \"zh/reference/resources/video_conferencing_related_resources.html\",\n \"revision\": \"cb309b46caa86da2656acb32761e653b\"\n },\n {\n \"url\": \"zh/reference/resources/zltoolkit_source_code_study_notes.html\",\n \"revision\": \"f5ec739923fbf0b451934f5281647d0b\"\n },\n {\n \"url\": \"zh/reference/test/benchmark.html\",\n \"revision\": \"33861a009187c0d4717e2821baf8d396\"\n },\n {\n \"url\": \"zh/reference/test/delay_test.html\",\n \"revision\": \"0863d7f862dc67e25f3b12d979eaf22d\"\n },\n {\n \"url\": \"zh/reference/test/how_to_test_delay.html\",\n \"revision\": \"5f93a6ced77897988da60f6f3f17c974\"\n },\n {\n \"url\": \"zh/reference/test/index.html\",\n \"revision\": \"1769a86f8d69064f35444fafddf626f3\"\n },\n {\n \"url\": \"zh/reference/test/online_test.html\",\n \"revision\": \"b761ed0fdb4188dd2f43f6d09621d000\"\n },\n {\n \"url\": \"zh/reference/test/performance_testing.html\",\n \"revision\": \"12f6a197bb0385ff5c12389f23176b91\"\n },\n {\n \"url\": \"zh/reference/test/rtmp_pull_stream_performance_test.html\",\n \"revision\": \"955df714494ab14f49577163713a8871\"\n },\n {\n \"url\": \"zh/reference/test/rtmp_push_stream_performance_test.html\",\n \"revision\": \"1d7dd0a4bf3fc8c126732a2efc4182fb\"\n },\n {\n \"url\": \"zh/reference/test/rtsp_pull_stream_performance_test.html\",\n \"revision\": \"8f3093e50eb385c76e38c04c45efb6e8\"\n },\n {\n \"url\": \"zh/reference/test/rtsp_push_stream_performance_test.html\",\n \"revision\": \"5f15e128a774d7593631de2291f2cb60\"\n },\n {\n \"url\": \"zh/tutorial/index.html\",\n \"revision\": \"e00a3b7e9b0b47f5255875f5e7965ae1\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-114x114.png\",\n \"revision\": \"b39af39658e13fd99763e10b9991ccf8\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-120x120.png\",\n \"revision\": \"4c7de55a0bfef43bc0eb52905af33cf6\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-152x152.png\",\n \"revision\": \"a23249a982dd7d97bc38e851acfc1ec8\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-180x180.png\",\n \"revision\": \"153e47772d362c174bee9f00b8090bf1\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-57x57.png\",\n \"revision\": \"04feca43d959ca0f3b6973782c9fa134\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-60x60.png\",\n \"revision\": \"e7f1b90b537806adb676677c3dead66d\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-72x72.png\",\n \"revision\": \"604eca13e9aa44f2f1d76778107e5d64\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-76x76.png\",\n \"revision\": \"1698d7cd9b2cc90634013d3d62d23736\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-96x96.png\",\n \"revision\": \"a361212595e0c34b5d3d64084864d3e9\"\n },\n {\n \"url\": \"assets/icon/chrome-192.png\",\n \"revision\": \"440ff33effa9f895b67156ed57eac1c1\"\n },\n {\n \"url\": \"assets/icon/favicon-16x16.png\",\n \"revision\": \"98c8fdb75f1f1891b830dd70be7780c5\"\n },\n {\n \"url\": \"assets/icon/favicon-32x32.png\",\n \"revision\": \"a0c87ba0608aecffe0d0182415770766\"\n },\n {\n \"url\": \"assets/icon/guide-maskable.png\",\n \"revision\": \"99cc77cf2bc792acd6b847b5e3e151e9\"\n },\n {\n \"url\": \"assets/icon/ms-icon-144.png\",\n \"revision\": \"a3e06505f5a643a43d7f559a53abd7be\"\n },\n {\n \"url\": \"images/gb28181_push_streaming_1.png\",\n \"revision\": \"6283957dbf3a609f861ffb40054c8ef4\"\n },\n {\n \"url\": \"images/gb28181_push_streaming_2.png\",\n \"revision\": \"eac2229bd7d6302dd56c80924378f4f3\"\n },\n {\n \"url\": \"images/gb28181_push_streaming_3.png\",\n \"revision\": \"d9c25e9d693382a8fb713baa4865c794\"\n },\n {\n \"url\": \"images/gb28181_push_streaming_4.png\",\n \"revision\": \"f3c6584aae2a27866166c43f244c553b\"\n },\n {\n \"url\": \"images/generate_ssl_self-signed_certificate_and_test.webp\",\n \"revision\": \"c893dba3185a1e863cf175c2698c9bf9\"\n },\n {\n \"url\": \"images/how_to_create_a_live_stream.png\",\n \"revision\": \"7f11ba4af262d0e2a00c7718e6c8b180\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_1.png\",\n \"revision\": \"e1ffb707a47c1664161efc7c608fda24\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_10.png\",\n \"revision\": \"5e4cafeb5b4f54f57d76f4dcd632c377\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_2.png\",\n \"revision\": \"fb3c5027a4bef03f174d86f5d4cf8b32\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_3.png\",\n \"revision\": \"ae7f42d52b58c80e0265eeb40be94a9d\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_4.png\",\n \"revision\": \"536b0f9116a4fa6d0f155032886068d3\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_5.png\",\n \"revision\": \"d77ab1e34df68663332e451f59d68203\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_6.png\",\n \"revision\": \"5dd9c32672a86dbe6c07bbe58fe44522\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_7.png\",\n \"revision\": \"e6cf4753d43bc6251742ea3269463c99\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_8.png\",\n \"revision\": \"fe5c53d153ebb88d5b10ca979ce62a1b\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_9.png\",\n \"revision\": \"1aa87003a965b710adf9139645171cb6\"\n },\n {\n \"url\": \"images/how_to_use_device_id_as_stream_id_1.png\",\n \"revision\": \"5d24bb7c4f502d40c38313bb9b1234fe\"\n },\n {\n \"url\": \"images/how_to_use_device_id_as_stream_id_2.png\",\n \"revision\": \"7f293641cf8de63af03ff846a2be943f\"\n },\n {\n \"url\": \"images/how_to_use_device_id_as_stream_id_4.png\",\n \"revision\": \"8d3f6cced326d24e5cb940c85209d47a\"\n },\n {\n \"url\": \"images/how_to_use_device_id_as_stream_id_5.png\",\n \"revision\": \"7f293641cf8de63af03ff846a2be943f\"\n },\n {\n \"url\": \"images/how_to_use_device_id_as_stream_id_6.png\",\n \"revision\": \"b46e6e52751c33cca5b2f768ceae92d2\"\n },\n {\n \"url\": \"images/install_zlmediakit_using_vcpkg_1.png\",\n \"revision\": \"549087a1bb82ce36aa774ce725a9eeea\"\n },\n {\n \"url\": \"images/install_zlmediakit_using_vcpkg_2.png\",\n \"revision\": \"8368b41cc655599a201e5818750225d1\"\n },\n {\n \"url\": \"images/on-demand_push_streaming_zh.png\",\n \"revision\": \"1bb65d163eb9008b383a2d04255c9507\"\n },\n {\n \"url\": \"images/on-demand_streaming_zh.png\",\n \"revision\": \"16dc127a26325cf06dac7aedd115d57e\"\n },\n {\n \"url\": \"images/playback_authentication_zh.png\",\n \"revision\": \"eba681073fa4dd2f6663eeb1c7cbbf7a\"\n },\n {\n \"url\": \"images/push_authentication_zh.png\",\n \"revision\": \"5b1e13cc9369abf66481d2f4cc1dccb5\"\n },\n {\n \"url\": \"images/push_test.png\",\n \"revision\": \"88ec411cafd56da1c27bb958e05c7bda\"\n },\n {\n \"url\": \"images/start_server_1.png\",\n \"revision\": \"46b863cc78aaebb1a0d5d2b824a45519\"\n },\n {\n \"url\": \"images/start_server_2.png\",\n \"revision\": \"29d3057d8f9dd51a5e3a4589a71d3e7e\"\n },\n {\n \"url\": \"images/start_server_3.png\",\n \"revision\": \"3088ed2c7996882f9272a59a8e00f8cf\"\n },\n {\n \"url\": \"images/vs_code_zh.png\",\n \"revision\": \"a374f77503296c66576dcf3641283791\"\n },\n {\n \"url\": \"logo.png\",\n \"revision\": \"32ddfa5715059731ae893ec92fca0311\"\n }\n], {});\nworkbox_precaching_cleanupOutdatedCaches();\n\n\n\n\n\n\n\n"],"names":["self","addEventListener","event","data","type","skipWaiting","workbox_core_clientsClaim","workbox_precaching_precacheAndRoute","url","revision","workbox_precaching_cleanupOutdatedCaches"],"mappings":"0nBAqBAA,KAAKC,iBAAiB,WAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,aACP,IAGFC,EAAAA,eAQAC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,mEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,iEACPC,SAAY,oCAEd,CACED,IAAO,gEACPC,SAAY,oCAEd,CACED,IAAO,gEACPC,SAAY,oCAEd,CACED,IAAO,gEACPC,SAAY,oCAEd,CACED,IAAO,gEACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,sDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,mDACPC,SAAY,oCAEd,CACED,IAAO,mDACPC,SAAY,oCAEd,CACED,IAAO,mDACPC,SAAY,oCAEd,CACED,IAAO,mDACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,8DACPC,SAAY,oCAEd,CACED,IAAO,8DACPC,SAAY,oCAEd,CACED,IAAO,8DACPC,SAAY,oCAEd,CACED,IAAO,8DACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,WACPC,SAAY,oCAEd,CACED,IAAO,WACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oDACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,kEACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,oDACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,gEACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,mDACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,mEACPC,SAAY,oCAEd,CACED,IAAO,gEACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,iEACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,aACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,kBACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,8DACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,8DACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,0DACPC,SAAY,oCAEd,CACED,IAAO,gEACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,mEACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,sDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,mEACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,2DACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,gBACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,iEACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,kEACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,mFACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,iEACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,mEACPC,SAAY,oCAEd,CACED,IAAO,gEACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,2DACPC,SAAY,oCAEd,CACED,IAAO,2DACPC,SAAY,oCAEd,CACED,IAAO,2DACPC,SAAY,oCAEd,CACED,IAAO,2DACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,WACPC,SAAY,qCAEb,CAAE,GACLC,EAAAA"} \ No newline at end of file +{"version":3,"file":"service-worker.js","sources":["../../../../../tmp/5e2e830ab96ae501637cafeaa234c914/service-worker.js"],"sourcesContent":["import {clientsClaim as workbox_core_clientsClaim} from '/home/runner/work/docs/docs/node_modules/.pnpm/workbox-core@7.0.0/node_modules/workbox-core/clientsClaim.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/runner/work/docs/docs/node_modules/.pnpm/workbox-precaching@7.0.0/node_modules/workbox-precaching/precacheAndRoute.mjs';\nimport {cleanupOutdatedCaches as workbox_precaching_cleanupOutdatedCaches} from '/home/runner/work/docs/docs/node_modules/.pnpm/workbox-precaching@7.0.0/node_modules/workbox-precaching/cleanupOutdatedCaches.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\n\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\nworkbox_core_clientsClaim();\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"assets/404.html-aQJ09P_F.js\",\n \"revision\": \"76f3c96a47b4621ba8ce69fcbd885f68\"\n },\n {\n \"url\": \"assets/404.html-GPYBV8Ha.js\",\n \"revision\": \"e720ca3ad5d38f095f2a9f063d829ea1\"\n },\n {\n \"url\": \"assets/app-oTlYPy8h.js\",\n \"revision\": \"0fdad05b47613f8ef55f42a5d1380357\"\n },\n {\n \"url\": \"assets/arc-upp1iHW0.js\",\n \"revision\": \"3c244241978a0f66269ef9c4d79c34ae\"\n },\n {\n \"url\": \"assets/array-Nw74a44z.js\",\n \"revision\": \"17dcebeaf673b09a1ca5da014d20022f\"\n },\n {\n \"url\": \"assets/benchmark.html-MSc66SxZ.js\",\n \"revision\": \"dc32b8c22dbcb74830e677d297b170b6\"\n },\n {\n \"url\": \"assets/benchmark.html-PVLgEM3u.js\",\n \"revision\": \"9ef795a4d6ae88ff1ad37d0eec118f50\"\n },\n {\n \"url\": \"assets/benchmark.html-vh5mU2vV.js\",\n \"revision\": \"6fcdf6be2d05d124a12fef4268d2bdbe\"\n },\n {\n \"url\": \"assets/benchmark.html-xQUFyhUw.js\",\n \"revision\": \"0b93d042729a80ed7f7b41c6aac852a4\"\n },\n {\n \"url\": \"assets/c4Diagram-817c8e44-EI6Ep_s6.js\",\n \"revision\": \"846deea5104f4ef59a91df8201dd0803\"\n },\n {\n \"url\": \"assets/classDiagram-48ab76fb-YrjwxOfN.js\",\n \"revision\": \"ccef214ed09a38badca295584ee45c6a\"\n },\n {\n \"url\": \"assets/classDiagram-v2-8ecb0bfc-uyvLMQh4.js\",\n \"revision\": \"b294fe643350cc495ae6be6cfe78c103\"\n },\n {\n \"url\": \"assets/collaborative_projects.html-15UQQvPG.js\",\n \"revision\": \"aca89aea107c131135d843d7880f76b6\"\n },\n {\n \"url\": \"assets/collaborative_projects.html-19-TEwrL.js\",\n \"revision\": \"a8092ff5acdcc19af0b636a1909a08fb\"\n },\n {\n \"url\": \"assets/collaborative_projects.html-gRvZJ2_P.js\",\n \"revision\": \"21258323cc48008377e663bcb4b9ccc3\"\n },\n {\n \"url\": \"assets/collaborative_projects.html-UkPV-L0J.js\",\n \"revision\": \"2161be4f8ed6bdc877e5d6c2fc33ae6e\"\n },\n {\n \"url\": \"assets/compilation_instructions_for_windows_version.html-coo8ZcK6.js\",\n \"revision\": \"3b6a63367a41cf704c30f53ea1f2f9f1\"\n },\n {\n \"url\": \"assets/compilation_instructions_for_windows_version.html-d1DmfQc5.js\",\n \"revision\": \"45fdef0928dd6ede36c96acf5b606749\"\n },\n {\n \"url\": \"assets/compilation_instructions_for_windows_version.html-Hq0AuZTz.js\",\n \"revision\": \"66feea9dae54928e3a2bb2f7a51bc417\"\n },\n {\n \"url\": \"assets/compilation_instructions_for_windows_version.html-xl0PwINJ.js\",\n \"revision\": \"ee73eff391cf2201c2517e705bc2e91c\"\n },\n {\n \"url\": \"assets/config_file.html-54NJpUMh.js\",\n \"revision\": \"abe95f4b6332d105d7d7f9163ab5f5aa\"\n },\n {\n \"url\": \"assets/config_file.html-5j1Bx0Jx.js\",\n \"revision\": \"591d662b3e72f0b21c92319d03a2e17c\"\n },\n {\n \"url\": \"assets/config_file.html-i3ELg7s5.js\",\n \"revision\": \"05d0fdfd1621df427f889e3dfb54050c\"\n },\n {\n \"url\": \"assets/config_file.html-v84_YU9d.js\",\n \"revision\": \"377ed23ef99ce10dfcccdc1049fd2244\"\n },\n {\n \"url\": \"assets/contact.html-JAOAqjBA.js\",\n \"revision\": \"a65461fb20b3eba37d374888675f294a\"\n },\n {\n \"url\": \"assets/contact.html-nPftNmfa.js\",\n \"revision\": \"c55df9245c21c481a492bf69830d5eea\"\n },\n {\n \"url\": \"assets/contact.html-xnD8I3Nc.js\",\n \"revision\": \"4013ba052054841619c9f229e6cef407\"\n },\n {\n \"url\": \"assets/contact.html-XWW2pZ29.js\",\n \"revision\": \"0b951bd788c1b31fccea7115275bec02\"\n },\n {\n \"url\": \"assets/createText-aebacdfe-8FzA6VnR.js\",\n \"revision\": \"dc7243f236fe7d2fc13cd5b5aca5c413\"\n },\n {\n \"url\": \"assets/delay_test.html-_QomqbNh.js\",\n \"revision\": \"05e99497e62f35bf7dbea382401387f5\"\n },\n {\n \"url\": \"assets/delay_test.html-dT3kgdCj.js\",\n \"revision\": \"43f900f4b61b8881f4680b57bde2786f\"\n },\n {\n \"url\": \"assets/delay_test.html-jKr5-1Rj.js\",\n \"revision\": \"987a6bc1bac614f188eaf7723018097c\"\n },\n {\n \"url\": \"assets/delay_test.html-QwzTearq.js\",\n \"revision\": \"c5602e99f858845e40d246008838890a\"\n },\n {\n \"url\": \"assets/dependency.html-gwWfr65O.js\",\n \"revision\": \"bff0bf8bb57fc95c472568a8897a5e29\"\n },\n {\n \"url\": \"assets/dependency.html-IB8qgUUu.js\",\n \"revision\": \"b2c7543a2d1f71ef6dacf4204e51ba69\"\n },\n {\n \"url\": \"assets/dependency.html-OQ3SkmA_.js\",\n \"revision\": \"6ade3993f12c06ffdaabbdaf8fc97150\"\n },\n {\n \"url\": \"assets/dependency.html-vliHx4sJ.js\",\n \"revision\": \"133156fbc8cde50f0cb079c965bc9d05\"\n },\n {\n \"url\": \"assets/edges-80f1ebb6-kOLp6foW.js\",\n \"revision\": \"f07681712759424b20af4c50358f4cb0\"\n },\n {\n \"url\": \"assets/erDiagram-9cfc3649-wxfL-kce.js\",\n \"revision\": \"82d44f1c5a54d193a7af0adb08ed8868\"\n },\n {\n \"url\": \"assets/exclusive_features.html-2siFVq2G.js\",\n \"revision\": \"3f63eed8e945a5d96317576aa72a604e\"\n },\n {\n \"url\": \"assets/exclusive_features.html-dQadFX3J.js\",\n \"revision\": \"fbec60e5030557d00198cc2a30372288\"\n },\n {\n \"url\": \"assets/exclusive_features.html-t4K_S5d4.js\",\n \"revision\": \"a7309dc993c5baf1c817785de13dc01b\"\n },\n {\n \"url\": \"assets/exclusive_features.html-wTOG2Bjt.js\",\n \"revision\": \"908ef27f27bc5f36054d486537a4f6e3\"\n },\n {\n \"url\": \"assets/flowchart-elk-definition-e097735e-Zb7AIGeW.js\",\n \"revision\": \"ab05a4dd368aa3f619ce38d6228042a2\"\n },\n {\n \"url\": \"assets/flowDb-170db09d-41y1nEiW.js\",\n \"revision\": \"1b521202a471569bded0ef319a785c69\"\n },\n {\n \"url\": \"assets/flowDiagram-61eb444c-DuMoGt9F.js\",\n \"revision\": \"732566e29859f4373e3ea8d7d9b5f4bb\"\n },\n {\n \"url\": \"assets/flowDiagram-v2-2f8f667a-Ob2Hpvk_.js\",\n \"revision\": \"31e1973ea7443eb534f901dd365c4217\"\n },\n {\n \"url\": \"assets/ganttDiagram-db6931fb-MZTKg1_s.js\",\n \"revision\": \"dfbd55cd175ec127ce4e959090998d2c\"\n },\n {\n \"url\": \"assets/gb28181_push_streaming_4-qWTnfswt.js\",\n \"revision\": \"30c7b622101f90395cc790c0e72e1cf9\"\n },\n {\n \"url\": \"assets/gb28181_sip_signaling_packet_capture.html-_63zZLPQ.js\",\n \"revision\": \"298c5cd5ce0ee80b0433ed54d5c1d647\"\n },\n {\n \"url\": \"assets/gb28181_sip_signaling_packet_capture.html-dSB5oqMq.js\",\n \"revision\": \"dbfc86980d308e1204aa23121f175f5c\"\n },\n {\n \"url\": \"assets/gb28181_sip_signaling_packet_capture.html-z_vnDm71.js\",\n \"revision\": \"f3ac8ffb0848843189888a45d2673bdf\"\n },\n {\n \"url\": \"assets/gb28181_sip_signaling_packet_capture.html-ZYkWywxi.js\",\n \"revision\": \"f3ac8ffb0848843189888a45d2673bdf\"\n },\n {\n \"url\": \"assets/generate_ssl_self-signed_certificate_and_test-D4Sbj3Ls.js\",\n \"revision\": \"616544c7f95d53f29de519db0674f52c\"\n },\n {\n \"url\": \"assets/generate_ssl_self-signed_certificate_and_test.html-7V6eG0vA.js\",\n \"revision\": \"2900e1d4092c29de10d34afb5c4c753c\"\n },\n {\n \"url\": \"assets/generate_ssl_self-signed_certificate_and_test.html-MI1uDkfZ.js\",\n \"revision\": \"d7e26573eadf9e51aebeb8210a27d9dd\"\n },\n {\n \"url\": \"assets/generate_ssl_self-signed_certificate_and_test.html-qSLRuImw.js\",\n \"revision\": \"e5b9c6794282f1b0fe700d22af21f5d2\"\n },\n {\n \"url\": \"assets/generate_ssl_self-signed_certificate_and_test.html-tLIkOOZS.js\",\n \"revision\": \"613d6680d442c4b33fae1cd9ca4d2e5d\"\n },\n {\n \"url\": \"assets/giscus-unEZQsJ0.js\",\n \"revision\": \"34c4288ad53e7d9be8d0f44c9fdba069\"\n },\n {\n \"url\": \"assets/gitGraphDiagram-6b463803-leFcDYEm.js\",\n \"revision\": \"ab0526fcd29721cc08a61f045bed2835\"\n },\n {\n \"url\": \"assets/high_concurrency_implementation_principle.html-FgHSxlv4.js\",\n \"revision\": \"58ada358253c75551a89d27a10c5b85e\"\n },\n {\n \"url\": \"assets/high_concurrency_implementation_principle.html-opQWc8aM.js\",\n \"revision\": \"2fb1a4c2f74fc52046100556dc28ff26\"\n },\n {\n \"url\": \"assets/high_concurrency_implementation_principle.html-sl-nIpjv.js\",\n \"revision\": \"7a20b2d70a9e4eae865ef6ea53a0ce00\"\n },\n {\n \"url\": \"assets/high_concurrency_implementation_principle.html-x1-J41yC.js\",\n \"revision\": \"7d97cdc6dee78a9220e0ed9c19b42005\"\n },\n {\n \"url\": \"assets/hls_high_performance_journey.html-bBajAqE1.js\",\n \"revision\": \"7d3ea5c0f10f1014295bebf7364f6d48\"\n },\n {\n \"url\": \"assets/hls_high_performance_journey.html-bLztstJM.js\",\n \"revision\": \"1de12ca696da6d2fc7345df858d95fe2\"\n },\n {\n \"url\": \"assets/hls_high_performance_journey.html-pNH0gpXw.js\",\n \"revision\": \"d4f378b2535657420b6a7578f84a1619\"\n },\n {\n \"url\": \"assets/hls_high_performance_journey.html-v74JJlub.js\",\n \"revision\": \"d4f378b2535657420b6a7578f84a1619\"\n },\n {\n \"url\": \"assets/how_to_create_a_live_steam.html-FHwnpSdN.js\",\n \"revision\": \"3060639f318e118a09057745e5cde6f4\"\n },\n {\n \"url\": \"assets/how_to_create_a_live_steam.html-Gq2b9Yi0.js\",\n \"revision\": \"1e77b724e809322523173efc4d0edc2f\"\n },\n {\n \"url\": \"assets/how_to_create_a_live_steam.html-LWbU8h87.js\",\n \"revision\": \"7f7e8f631a6d34e6e00d835b5c57e962\"\n },\n {\n \"url\": \"assets/how_to_create_a_live_steam.html-Q-m7tYG5.js\",\n \"revision\": \"7f7e8f631a6d34e6e00d835b5c57e962\"\n },\n {\n \"url\": \"assets/how_to_create_a_live_stream-3lt6j2fI.js\",\n \"revision\": \"67e9191b6843091959a8f07cea06a593\"\n },\n {\n \"url\": \"assets/how_to_enable_https_related_functions_zh_10-dp8gREln.js\",\n \"revision\": \"e08b5f85ae138171fbadcb495d89fa08\"\n },\n {\n \"url\": \"assets/how_to_enable_https_related_functions.html-Dxu_FBYc.js\",\n \"revision\": \"792d4289387884e714677123b7687728\"\n },\n {\n \"url\": \"assets/how_to_enable_https_related_functions.html-fcJ6Uozv.js\",\n \"revision\": \"c4b3dc09434d6236ba12e26ee88007e3\"\n },\n {\n \"url\": \"assets/how_to_enable_https_related_functions.html-mO3jYJnY.js\",\n \"revision\": \"b20d2d93bfc0a7d9afdb7d93d930c2e9\"\n },\n {\n \"url\": \"assets/how_to_enable_https_related_functions.html-pBy5oO-R.js\",\n \"revision\": \"b74b6b9c8a82bfca40c2a900545c97ec\"\n },\n {\n \"url\": \"assets/how_to_test_delay.html-GLErIksL.js\",\n \"revision\": \"04c09d77bf96c882c8573049cab1f49c\"\n },\n {\n \"url\": \"assets/how_to_test_delay.html-GlLjeJYr.js\",\n \"revision\": \"1bd6e54f8408e79ec83b26d5c81259e6\"\n },\n {\n \"url\": \"assets/how_to_test_delay.html-P7CoGGgx.js\",\n \"revision\": \"cd7fcdf450145aa5f1b4185943ff6c59\"\n },\n {\n \"url\": \"assets/how_to_test_delay.html-ubjyw-PC.js\",\n \"revision\": \"13801c3a209c906dccd85db6bb5092ba\"\n },\n {\n \"url\": \"assets/how_to_use_device_id_as_stream_id_6-sfQ1h9Fe.js\",\n \"revision\": \"1bff1864e2dfb05bde4bb12af8c9561c\"\n },\n {\n \"url\": \"assets/how_to_use_device_id_as_stream_id.html-_vNSGfoU.js\",\n \"revision\": \"5850d68f9c88c71712e258d057267d3c\"\n },\n {\n \"url\": \"assets/how_to_use_device_id_as_stream_id.html-ga4UcAIh.js\",\n \"revision\": \"858c041377d0a304dc9cd913185f18fa\"\n },\n {\n \"url\": \"assets/how_to_use_device_id_as_stream_id.html-r5nxplI0.js\",\n \"revision\": \"6098ae31a0323215984fa25749611708\"\n },\n {\n \"url\": \"assets/how_to_use_device_id_as_stream_id.html-yxD34jok.js\",\n \"revision\": \"6098ae31a0323215984fa25749611708\"\n },\n {\n \"url\": \"assets/image/advanced.svg\",\n \"revision\": \"2934a573b64033bebb71f067ebc8d082\"\n },\n {\n \"url\": \"assets/image/bg.svg\",\n \"revision\": \"bed51349ca7476497e51d60437ef8eba\"\n },\n {\n \"url\": \"assets/image/blog.svg\",\n \"revision\": \"5686f361aca8bcf73522de225d09016d\"\n },\n {\n \"url\": \"assets/image/box.svg\",\n \"revision\": \"5f732c9705e288e8fb8ae6d2e5ce906a\"\n },\n {\n \"url\": \"assets/image/features.svg\",\n \"revision\": \"2eb292180d361e4af3f4bf411ef06062\"\n },\n {\n \"url\": \"assets/image/github-dark.svg\",\n \"revision\": \"8dcc6b5262f3b6138b1566b357ba89a9\"\n },\n {\n \"url\": \"assets/image/github-light.svg\",\n \"revision\": \"a0b00583d93c2f7084ad151ee0849934\"\n },\n {\n \"url\": \"assets/image/layout.svg\",\n \"revision\": \"db603c70eb017066ff30923ca5a2cd4a\"\n },\n {\n \"url\": \"assets/image/markdown.svg\",\n \"revision\": \"1a8b4476dae8f52cdd873d2b00fa27fb\"\n },\n {\n \"url\": \"assets/index-67a42d7d-TJSwJJ1D.js\",\n \"revision\": \"40b8fa51b00a664a478a04f5a7dcb88a\"\n },\n {\n \"url\": \"assets/index-7SG8bi1h.js\",\n \"revision\": \"46a193641571106d3b7b43f9bc2a2735\"\n },\n {\n \"url\": \"assets/index.html-0qJyAU8Q.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-1UKx3tTB.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-2LWO62N7.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-35KxtpZI.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-3Pe7G9Sl.js\",\n \"revision\": \"c0c05ddda520e2adda625cdd231876ae\"\n },\n {\n \"url\": \"assets/index.html-4MOf5u_i.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-4qXHK4Yu.js\",\n \"revision\": \"ea8519a44fde5fca68c31fc431e2e570\"\n },\n {\n \"url\": \"assets/index.html-4w7NJvOq.js\",\n \"revision\": \"4a42db4ce3eedfdd7f1686d6f8349f25\"\n },\n {\n \"url\": \"assets/index.html-6AFjdEoA.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-8kcJLd-q.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-8RsIN7Qj.js\",\n \"revision\": \"ff590ed654e791a5b22c11ccc9ddce0e\"\n },\n {\n \"url\": \"assets/index.html-943vkdnv.js\",\n \"revision\": \"66506d542be80c2633ded058cc66b647\"\n },\n {\n \"url\": \"assets/index.html-9fZsvbS8.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-A9z0_Hu7.js\",\n \"revision\": \"4f860e08cf4dabbe3974dcd867207005\"\n },\n {\n \"url\": \"assets/index.html-Acfu-WyI.js\",\n \"revision\": \"ac263380bcaf563b41d4feb14c1f3645\"\n },\n {\n \"url\": \"assets/index.html-AIAMrVKp.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-aTnTwBPS.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-B81jBW2G.js\",\n \"revision\": \"d2cc2cbb1cdc1887b6ddce2f1f48915b\"\n },\n {\n \"url\": \"assets/index.html-BzbKxypT.js\",\n \"revision\": \"662b8f394d27244938126a6f9d36f79e\"\n },\n {\n \"url\": \"assets/index.html-c0NLam4o.js\",\n \"revision\": \"50f75c5795cad25af5071e685fd56d25\"\n },\n {\n \"url\": \"assets/index.html-c5z6Iek2.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-c9EfxXZy.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-ckFP_gFB.js\",\n \"revision\": \"07d69693c903a9eb79e778eb4c22bc01\"\n },\n {\n \"url\": \"assets/index.html-CKp0mPwh.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-CmVSRxAE.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-CojxHtZz.js\",\n \"revision\": \"3cce4cc3f4578dbcd1463687ffb739ae\"\n },\n {\n \"url\": \"assets/index.html-CSg2VFea.js\",\n \"revision\": \"85ff745a783805042df316822743b21f\"\n },\n {\n \"url\": \"assets/index.html-D9OOw5jZ.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-Dj-Byo33.js\",\n \"revision\": \"33d2489812195b60dd65835895fad787\"\n },\n {\n \"url\": \"assets/index.html-ea4s8txi.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-hD6JZq1M.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-HppSEYlS.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-Hvr1twkc.js\",\n \"revision\": \"0863680115a8ded21665ace23a839672\"\n },\n {\n \"url\": \"assets/index.html-IZsaCX79.js\",\n \"revision\": \"315d6eedfc0da5da85c7fbdfd1dd1196\"\n },\n {\n \"url\": \"assets/index.html-JQu_RH6f.js\",\n \"revision\": \"0bfe758ce6140e9d1046435817bad5a2\"\n },\n {\n \"url\": \"assets/index.html-jVaUOSmI.js\",\n \"revision\": \"72b19a33de68639ae16f36b839e7d13c\"\n },\n {\n \"url\": \"assets/index.html-l-9Jcb0Z.js\",\n \"revision\": \"5ab8c4c304de3bbef4c91cdb52fbf08f\"\n },\n {\n \"url\": \"assets/index.html-lGRuHLpD.js\",\n \"revision\": \"85ff745a783805042df316822743b21f\"\n },\n {\n \"url\": \"assets/index.html-lHFYswhu.js\",\n \"revision\": \"68601d9bc01ff40425d106bd1db7b57e\"\n },\n {\n \"url\": \"assets/index.html-lKh2cFAq.js\",\n \"revision\": \"816be3d3c398bcacfbe5eb714e4b70d7\"\n },\n {\n \"url\": \"assets/index.html-LLxB5nrB.js\",\n \"revision\": \"086ed6111461246bc6c97866b2d918d5\"\n },\n {\n \"url\": \"assets/index.html-LSqTAwnp.js\",\n \"revision\": \"c8324355f6d6e02a9bc861e06231a543\"\n },\n {\n \"url\": \"assets/index.html-LudGOU3A.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-m59LkreQ.js\",\n \"revision\": \"28018187ac0f122029bdfeb50cfb455b\"\n },\n {\n \"url\": \"assets/index.html-MI_McXZr.js\",\n \"revision\": \"c5e8700ca283e861dced506472ecbf81\"\n },\n {\n \"url\": \"assets/index.html-ocl34mDF.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-Oh37e22D.js\",\n \"revision\": \"bcb1fcf519857cdf15515f77a485a436\"\n },\n {\n \"url\": \"assets/index.html-ohZtz6Fw.js\",\n \"revision\": \"58893519f365a18c506f1836cfec535a\"\n },\n {\n \"url\": \"assets/index.html-oRdX7laQ.js\",\n \"revision\": \"2de9c461d24eb912ae3e73a7ef0228e7\"\n },\n {\n \"url\": \"assets/index.html-Pl0D5fWX.js\",\n \"revision\": \"df50db0b03d7bc4801e7684b895e72c0\"\n },\n {\n \"url\": \"assets/index.html-plxXlLQP.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-Q1OCSdNr.js\",\n \"revision\": \"0355094bde07e5a1c1841bc347489d5e\"\n },\n {\n \"url\": \"assets/index.html-qi3PncfW.js\",\n \"revision\": \"b01b13800c1abbfe37ecbf7bf04d5102\"\n },\n {\n \"url\": \"assets/index.html-qjMVLXfF.js\",\n \"revision\": \"9e80a629102cb272c373b96d1433b760\"\n },\n {\n \"url\": \"assets/index.html-QkbwDjsA.js\",\n \"revision\": \"841b57fd17ad02196225f94dac99a56e\"\n },\n {\n \"url\": \"assets/index.html-QQRRY2d0.js\",\n \"revision\": \"b43ec38709542738da227e4487b5739f\"\n },\n {\n \"url\": \"assets/index.html-Rh0erDOb.js\",\n \"revision\": \"7a00205cde84a167e23e5c6ce0f20674\"\n },\n {\n \"url\": \"assets/index.html-TLmaTaqK.js\",\n \"revision\": \"310fdf35690289b4b695a2a9f063cdf2\"\n },\n {\n \"url\": \"assets/index.html-UtNsP0-c.js\",\n \"revision\": \"f7bc5cfa2dca2650b49b6af45e1b0176\"\n },\n {\n \"url\": \"assets/index.html-vbFGRJHC.js\",\n \"revision\": \"f7f8601b0a01bd4bddffe566c52bd6aa\"\n },\n {\n \"url\": \"assets/index.html-VsukZOSA.js\",\n \"revision\": \"c6e6b871aa905370fa4d93c22c2fc8e1\"\n },\n {\n \"url\": \"assets/index.html-Wn9fL8rF.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-X7WU_LPV.js\",\n \"revision\": \"18f6a74b2ca20e17c9893fd3cfd2c878\"\n },\n {\n \"url\": \"assets/index.html-XHP9LdII.js\",\n \"revision\": \"e5e71e92d7944049c204b67fef63157b\"\n },\n {\n \"url\": \"assets/index.html-XiIyF-Mz.js\",\n \"revision\": \"125061609d4366c5cf551cfd435226ee\"\n },\n {\n \"url\": \"assets/index.html-Y6Zxo28x.js\",\n \"revision\": \"583fc19e65b7982208e7988a34d75970\"\n },\n {\n \"url\": \"assets/index.html-ybOFrWXT.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-yjc28uoP.js\",\n \"revision\": \"4d87cc57914d0403609cbb2f0de32cbb\"\n },\n {\n \"url\": \"assets/index.html-ysHWzV3Z.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-zeRiEjXy.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/index.html-Zl8OD7vu.js\",\n \"revision\": \"eba5ebfdf176f5b1608ff6a52d885037\"\n },\n {\n \"url\": \"assets/index.html-ZukUTvpe.js\",\n \"revision\": \"48bcfd54b95d449ae71135e417a49572\"\n },\n {\n \"url\": \"assets/infoDiagram-a336098b-7atRS8Yv.js\",\n \"revision\": \"bf395143ae22fb5aca3a330fef96c0b5\"\n },\n {\n \"url\": \"assets/init-Hi12RPRh.js\",\n \"revision\": \"3ce28180466443e9b617d7b96e9f7b8f\"\n },\n {\n \"url\": \"assets/install_zlmediakit_using_vcpkg_2-1HFW-yNt.js\",\n \"revision\": \"eba8f412e34fc0140174130ed248e21f\"\n },\n {\n \"url\": \"assets/install_zlmediakit_using_vcpkg.html-_H3jokEy.js\",\n \"revision\": \"5e8111d2c2acce6608f89dc07754b276\"\n },\n {\n \"url\": \"assets/install_zlmediakit_using_vcpkg.html-ii7HljTN.js\",\n \"revision\": \"322453fc85fbe8ed4eadbdcf75911bd1\"\n },\n {\n \"url\": \"assets/install_zlmediakit_using_vcpkg.html-lJ__kZwE.js\",\n \"revision\": \"90288c6b05b19f6839599ba7d32befbd\"\n },\n {\n \"url\": \"assets/install_zlmediakit_using_vcpkg.html-NCcA9KPG.js\",\n \"revision\": \"47f4ef55f164dcbafed7663d6a41b128\"\n },\n {\n \"url\": \"assets/introduction_to_streaming_media_related_technologies.html-aLJXiBgK.js\",\n \"revision\": \"034f13dcca1ba71ecab35af7bb6423c0\"\n },\n {\n \"url\": \"assets/introduction_to_streaming_media_related_technologies.html-O53gIrdK.js\",\n \"revision\": \"0ef8b597685e571d9ff51705e039dc88\"\n },\n {\n \"url\": \"assets/introduction_to_streaming_media_related_technologies.html-qLQLZbA3.js\",\n \"revision\": \"7969f2099a0e4347e143bfe16e889243\"\n },\n {\n \"url\": \"assets/introduction_to_streaming_media_related_technologies.html-uFhGEBGc.js\",\n \"revision\": \"1d475bfd3c612e339908e97deaa79136\"\n },\n {\n \"url\": \"assets/journeyDiagram-deae3313-JgGAP5aa.js\",\n \"revision\": \"1f18d1b867af5ce0d1171c3efc263749\"\n },\n {\n \"url\": \"assets/layout-Vth69vlg.js\",\n \"revision\": \"f6a9facdb9759259495ec858c74213f3\"\n },\n {\n \"url\": \"assets/license.html-kMl7iYce.js\",\n \"revision\": \"2e4c08f591766721beacb7a195eed5af\"\n },\n {\n \"url\": \"assets/license.html-onnWhI1X.js\",\n \"revision\": \"959de41ff2dbe211d159ffcbbdecaf1d\"\n },\n {\n \"url\": \"assets/license.html-ptTdZQ9a.js\",\n \"revision\": \"59c5af23d2c0c4fa2f4eab93e329bf3c\"\n },\n {\n \"url\": \"assets/license.html-vCBKTTMs.js\",\n \"revision\": \"0b233fa67324d487849017380e90ee7d\"\n },\n {\n \"url\": \"assets/line-ZVNdUhg2.js\",\n \"revision\": \"b15ecf666a86cf2862962c587df8aa3e\"\n },\n {\n \"url\": \"assets/linear-JH76Qt4f.js\",\n \"revision\": \"7c66126d7cf03de542edfae5f3a42e17\"\n },\n {\n \"url\": \"assets/mermaid.core-QJnSHCal.js\",\n \"revision\": \"85abe8b18663a73044aa44519d1c4b46\"\n },\n {\n \"url\": \"assets/mindmap-definition-617cf8dd-gkffgRdL.js\",\n \"revision\": \"68c0813440c2f712a6bee7b8b3a3055b\"\n },\n {\n \"url\": \"assets/not_recommended_qq.html-CiG918se.js\",\n \"revision\": \"c7bbc9df31ac0b9163c0db7ec25fdce2\"\n },\n {\n \"url\": \"assets/not_recommended_qq.html-g8E5V1Ie.js\",\n \"revision\": \"cc6d5dbde1ac6d1fd4335769c6ce3666\"\n },\n {\n \"url\": \"assets/not_recommended_qq.html-Od4ztKJy.js\",\n \"revision\": \"c3885d6144111405525cc78161e1bce3\"\n },\n {\n \"url\": \"assets/not_recommended_qq.html-Y9F7iYsf.js\",\n \"revision\": \"507edb359715bca42b86a286ad163a12\"\n },\n {\n \"url\": \"assets/on-demand_push_streaming_zh-CK4xj1dh.js\",\n \"revision\": \"58fd02f19ecc7bced43f105b06c8430d\"\n },\n {\n \"url\": \"assets/on-demand_push_streaming.html-AlawaJGx.js\",\n \"revision\": \"6c3db4c33ac709878d2b2f76a60041b2\"\n },\n {\n \"url\": \"assets/on-demand_push_streaming.html-crgN24-s.js\",\n \"revision\": \"ac1b3b0933859c59196b2f575f3649ac\"\n },\n {\n \"url\": \"assets/on-demand_push_streaming.html-efCX-3qM.js\",\n \"revision\": \"c9ef84699c5ed07bc54c65ba522957a5\"\n },\n {\n \"url\": \"assets/on-demand_push_streaming.html-kP6TQb2_.js\",\n \"revision\": \"2785a3c0027931aa5e62297f7ccf37c2\"\n },\n {\n \"url\": \"assets/on-demand_streaming_zh-h19pTlmd.js\",\n \"revision\": \"0eb44d4c65523fe801d4a4498adaafc4\"\n },\n {\n \"url\": \"assets/on-demand_streaming.html-2DvN-m5K.js\",\n \"revision\": \"b38e0c728d1e2148b057ac438c0329fd\"\n },\n {\n \"url\": \"assets/on-demand_streaming.html-5SBDxVes.js\",\n \"revision\": \"a3755702d9fcf9d9e4672d16658758a0\"\n },\n {\n \"url\": \"assets/on-demand_streaming.html-6YNYtYZR.js\",\n \"revision\": \"3fbcc90d3ac30ef2bbd9d2b396ebe263\"\n },\n {\n \"url\": \"assets/on-demand_streaming.html-yNrWu3de.js\",\n \"revision\": \"c3c391c28e85b970b8d8c44d97aebe88\"\n },\n {\n \"url\": \"assets/oncetoken.html-87LqB-OG.js\",\n \"revision\": \"198ad15da16a08762c5bfe2bf9336d7e\"\n },\n {\n \"url\": \"assets/oncetoken.html-JcsefotR.js\",\n \"revision\": \"0d901abe41c808ec9f1a3c1c35ffe65f\"\n },\n {\n \"url\": \"assets/oncetoken.html-LPckM_ZY.js\",\n \"revision\": \"9154f9b016875771b1917e6c850a1996\"\n },\n {\n \"url\": \"assets/oncetoken.html-VjVkUYP3.js\",\n \"revision\": \"1aad59f5bbc1abbc70d63a150a931997\"\n },\n {\n \"url\": \"assets/online_test.html-_0lwAxTN.js\",\n \"revision\": \"efcd02e75fe190aeaf414f293ae501a0\"\n },\n {\n \"url\": \"assets/online_test.html-8_GcpcRF.js\",\n \"revision\": \"52338331afa59a61a6bcb8f6ca24fafe\"\n },\n {\n \"url\": \"assets/online_test.html-osni6C75.js\",\n \"revision\": \"e661758df2e4ad6406dc4aa0e9871690\"\n },\n {\n \"url\": \"assets/online_test.html-UiWsenDR.js\",\n \"revision\": \"d57dc8563b8702b2f56ff82e89e0671a\"\n },\n {\n \"url\": \"assets/ordinal-wXG5obU4.js\",\n \"revision\": \"a72e57060c4f6a7606baa78dc6e9ad02\"\n },\n {\n \"url\": \"assets/path-aUcfwwLI.js\",\n \"revision\": \"f86c0243cb45746453c6b4f7dbd9f34d\"\n },\n {\n \"url\": \"assets/performance_testing.html-Cgq3dIgv.js\",\n \"revision\": \"c88d22f06a7b6af79d27258bdc4116e2\"\n },\n {\n \"url\": \"assets/performance_testing.html-DQL8Y_0H.js\",\n \"revision\": \"614f84b26f36cd75f82542fcafbadbf3\"\n },\n {\n \"url\": \"assets/performance_testing.html-mjt6ZXJJ.js\",\n \"revision\": \"97e1dc22df7fe620efa284ecc5f6719c\"\n },\n {\n \"url\": \"assets/performance_testing.html-wMvwmLu0.js\",\n \"revision\": \"d43a0001d72ef49579dbf598ac26ba4e\"\n },\n {\n \"url\": \"assets/photoswipe.esm-i2ohwMnJ.js\",\n \"revision\": \"e9ff503527474b1afe53a1ee900448a3\"\n },\n {\n \"url\": \"assets/pieDiagram-a5166659-9IukIHDQ.js\",\n \"revision\": \"df90978fe5fbf96a1783c9c18d71c272\"\n },\n {\n \"url\": \"assets/play_url_rules.html-_eahSglS.js\",\n \"revision\": \"7fbd4cf9e506e5c36ccd6e6a3af7ffc9\"\n },\n {\n \"url\": \"assets/play_url_rules.html-f7mxplY_.js\",\n \"revision\": \"3e587992a9259911d1997e0b39d9451d\"\n },\n {\n \"url\": \"assets/play_url_rules.html-LU-zd-xr.js\",\n \"revision\": \"e8313eb4ea56e522cb92f9f260523109\"\n },\n {\n \"url\": \"assets/play_url_rules.html-OaEuncfX.js\",\n \"revision\": \"cbf7adc95b30fce1379b81f3b623862b\"\n },\n {\n \"url\": \"assets/playback_authentication_zh-gjAAn9Yd.js\",\n \"revision\": \"d1b73468587890117bafd3f86759aec4\"\n },\n {\n \"url\": \"assets/playback_authentication.html-3VR0HbK8.js\",\n \"revision\": \"0eed4143d47e0e0044ab242b7719ae5c\"\n },\n {\n \"url\": \"assets/playback_authentication.html-4kXdTj5T.js\",\n \"revision\": \"19ef89a98a0a481d3a48caffcfaab8c6\"\n },\n {\n \"url\": \"assets/playback_authentication.html-arMfpj8D.js\",\n \"revision\": \"9168f09b8be9be130d72ddb4c4b4fb3c\"\n },\n {\n \"url\": \"assets/playback_authentication.html-wjgI-Yj5.js\",\n \"revision\": \"565152fbd8128bbfc4a350131902a817\"\n },\n {\n \"url\": \"assets/plugin-vue_export-helper-x3n3nnut.js\",\n \"revision\": \"25e3a5dcaf00fb2b1ba0c8ecea6d2560\"\n },\n {\n \"url\": \"assets/push_authentication_zh-OS4qAsfx.js\",\n \"revision\": \"2c2bf93635139a5d3979114757a9bfa3\"\n },\n {\n \"url\": \"assets/push_authentication.html-8JQfqi5E.js\",\n \"revision\": \"3e7eea41c9dfba1adbb4128ecaf6f554\"\n },\n {\n \"url\": \"assets/push_authentication.html-8OJ18L-5.js\",\n \"revision\": \"dfdb41ccb354383d458d4ead057a6203\"\n },\n {\n \"url\": \"assets/push_authentication.html-Ov0yMs1o.js\",\n \"revision\": \"a4703588a04087ed8681590bb89ec5d8\"\n },\n {\n \"url\": \"assets/push_authentication.html-qlfLynHw.js\",\n \"revision\": \"b3d7bf7f8d5bdcd9e98b65b9def167ab\"\n },\n {\n \"url\": \"assets/push_streaming.html-5MzKBCwx.js\",\n \"revision\": \"00af9265177e3e8a736e41254f3cd2eb\"\n },\n {\n \"url\": \"assets/push_streaming.html-o6HXGEGb.js\",\n \"revision\": \"ccb4173fc1e46d55770bf80884a0efc6\"\n },\n {\n \"url\": \"assets/push_streaming.html-VOPU_Vgm.js\",\n \"revision\": \"9e1e6a0ef3abf52dca2add179bddae3b\"\n },\n {\n \"url\": \"assets/push_streaming.html-Z4VDPPfI.js\",\n \"revision\": \"c64db74b6d82876529a744130565aa0e\"\n },\n {\n \"url\": \"assets/push_test-WgKOKRFc.js\",\n \"revision\": \"e9d124a5d01db8f90748223c62797fde\"\n },\n {\n \"url\": \"assets/push_test.html-44HoghM7.js\",\n \"revision\": \"c1e1774a35e8bd444f8c93120f73f73e\"\n },\n {\n \"url\": \"assets/push_test.html-gnFrDUbt.js\",\n \"revision\": \"64472eabb158a683a6690a65cca64231\"\n },\n {\n \"url\": \"assets/push_test.html-rQVB769L.js\",\n \"revision\": \"93f2a09ff23420dc2f85ff60910ec319\"\n },\n {\n \"url\": \"assets/push_test.html-zDMue1Qy.js\",\n \"revision\": \"410816feb252393fead5a8009342c478\"\n },\n {\n \"url\": \"assets/quadrantDiagram-6c355bbc-mORRzAzd.js\",\n \"revision\": \"8a3ac18a8b3d430e763005eac83ac865\"\n },\n {\n \"url\": \"assets/requirementDiagram-4038b16c-HXR1kktq.js\",\n \"revision\": \"d9f2e82eee37c1feb14f0b27e6eca2de\"\n },\n {\n \"url\": \"assets/restful_api.html-INg-XF77.js\",\n \"revision\": \"400de4528048e2ee6ce9746ac8206dfb\"\n },\n {\n \"url\": \"assets/restful_api.html-vpWQQrW9.js\",\n \"revision\": \"3577dfd936bbed14b4d76ac027be2810\"\n },\n {\n \"url\": \"assets/restful_api.html-W3f4X4lL.js\",\n \"revision\": \"9c9664983ac5a6fc2d848f581018e6bf\"\n },\n {\n \"url\": \"assets/restful_api.html-Xx1SUrzX.js\",\n \"revision\": \"27db13c31cdd8cf6d8f4d4db7958194b\"\n },\n {\n \"url\": \"assets/rtmp_playback_compatibility_issues.html-5avJPHVo.js\",\n \"revision\": \"6be1e2e717cb3e63216bce17db431fda\"\n },\n {\n \"url\": \"assets/rtmp_playback_compatibility_issues.html-iFgHmMMS.js\",\n \"revision\": \"775194767084abe8232e35ed6d3075dc\"\n },\n {\n \"url\": \"assets/rtmp_playback_compatibility_issues.html-RzirVjbt.js\",\n \"revision\": \"bf3a79adbd8687cf32a560b763907237\"\n },\n {\n \"url\": \"assets/rtmp_playback_compatibility_issues.html-wBkT5hGE.js\",\n \"revision\": \"85651bf18cd221f1ae82cad8d5a417b6\"\n },\n {\n \"url\": \"assets/rtmp_pull_stream_performance_test.html-_aYV-qZf.js\",\n \"revision\": \"ade15d4d534cd82ca2cc09fba7821fc3\"\n },\n {\n \"url\": \"assets/rtmp_pull_stream_performance_test.html-hMTKB3GA.js\",\n \"revision\": \"19aa3120395b68e9658773a054068f53\"\n },\n {\n \"url\": \"assets/rtmp_pull_stream_performance_test.html-HQ4fzTKd.js\",\n \"revision\": \"305864626776df21bb91f68cd1ae4047\"\n },\n {\n \"url\": \"assets/rtmp_pull_stream_performance_test.html-ukcH42DI.js\",\n \"revision\": \"b41914288c79c5be7b166a18d10bc9b1\"\n },\n {\n \"url\": \"assets/rtmp_push_stream_performance_test.html-4ywCdN8c.js\",\n \"revision\": \"a3740ef717b6f18466133ff47de260f7\"\n },\n {\n \"url\": \"assets/rtmp_push_stream_performance_test.html-AxJYj-3i.js\",\n \"revision\": \"483711c1a022e7d97bbfd4425092f5e6\"\n },\n {\n \"url\": \"assets/rtmp_push_stream_performance_test.html-BY1UVNB2.js\",\n \"revision\": \"ad220f0720f98cb1adc30de41972428f\"\n },\n {\n \"url\": \"assets/rtmp_push_stream_performance_test.html-LfVKdEym.js\",\n \"revision\": \"a72bb9d7fbcfcb86be5020d1893c3187\"\n },\n {\n \"url\": \"assets/rtmp_support_for_h265_and_opus.html-f4aPfFot.js\",\n \"revision\": \"a492fe181304965e8618760a986a1330\"\n },\n {\n \"url\": \"assets/rtmp_support_for_h265_and_opus.html-IiMCf774.js\",\n \"revision\": \"a0a5a22b18e03fe9d56d0ac9c2ee6191\"\n },\n {\n \"url\": \"assets/rtmp_support_for_h265_and_opus.html-tX2acU7J.js\",\n \"revision\": \"70ba7cf876f460ad76d42aa18bfa2af7\"\n },\n {\n \"url\": \"assets/rtmp_support_for_h265_and_opus.html-UXqjeTtH.js\",\n \"revision\": \"dba6bc5e814abe5002ca10468a27d871\"\n },\n {\n \"url\": \"assets/rtsp_performance_optimization.html-N4V23aKI.js\",\n \"revision\": \"8a21a102026c37a97823ac99d10ceda5\"\n },\n {\n \"url\": \"assets/rtsp_performance_optimization.html-TdeED4XC.js\",\n \"revision\": \"8fdd93ff43e06903e5042878f4b1879f\"\n },\n {\n \"url\": \"assets/rtsp_performance_optimization.html-TWn6Egp8.js\",\n \"revision\": \"ed7e56b088d4f1085d44d2bfb16b762b\"\n },\n {\n \"url\": \"assets/rtsp_performance_optimization.html-XwSQReWx.js\",\n \"revision\": \"e4f0f43ad81a11129ab62c4dc1a66d96\"\n },\n {\n \"url\": \"assets/rtsp_pull_stream_performance_test.html-2yov4QZH.js\",\n \"revision\": \"36e9219568e20efb63443ea908a33bae\"\n },\n {\n \"url\": \"assets/rtsp_pull_stream_performance_test.html-9hA9_SB-.js\",\n \"revision\": \"687c3b750da73663d062d7188877acca\"\n },\n {\n \"url\": \"assets/rtsp_pull_stream_performance_test.html-cK-OpNrS.js\",\n \"revision\": \"f2f3726ccd96f909b1b9f209eb80fa0e\"\n },\n {\n \"url\": \"assets/rtsp_pull_stream_performance_test.html-KdEDWBLu.js\",\n \"revision\": \"f2f3726ccd96f909b1b9f209eb80fa0e\"\n },\n {\n \"url\": \"assets/rtsp_push_process.html-eeithr0y.js\",\n \"revision\": \"f54ec8d338002bfc19a7ebf2719dd781\"\n },\n {\n \"url\": \"assets/rtsp_push_process.html-gk6hQwdn.js\",\n \"revision\": \"328a8a5267e44865025cd3d5497083ad\"\n },\n {\n \"url\": \"assets/rtsp_push_process.html-MSFA7pR8.js\",\n \"revision\": \"0730b0affd6b626ec2adde265bfbb202\"\n },\n {\n \"url\": \"assets/rtsp_push_process.html-zH-D_jAF.js\",\n \"revision\": \"3e9ae70fe5f1fde6b18baf956a75ac6f\"\n },\n {\n \"url\": \"assets/rtsp_push_stream_performance_test.html-3UQhsyo8.js\",\n \"revision\": \"308c989c47769eb89dc0504d1392b531\"\n },\n {\n \"url\": \"assets/rtsp_push_stream_performance_test.html-g2X0PP_e.js\",\n \"revision\": \"825be1a0511d7deae628dc8708cdb3cd\"\n },\n {\n \"url\": \"assets/rtsp_push_stream_performance_test.html-RMobzxOL.js\",\n \"revision\": \"ae20e2f821429e856cd66efffa4ec917\"\n },\n {\n \"url\": \"assets/rtsp_push_stream_performance_test.html-zFl0_4_8.js\",\n \"revision\": \"ae20e2f821429e856cd66efffa4ec917\"\n },\n {\n \"url\": \"assets/sankeyDiagram-6db3d513-FtDAma5v.js\",\n \"revision\": \"b1c6e250aff843a11bb2f37c77ec9cd7\"\n },\n {\n \"url\": \"assets/sequence_diagram.html-FlbOL2Y8.js\",\n \"revision\": \"5516ed1735437bdd8d6624d2a41a4319\"\n },\n {\n \"url\": \"assets/sequence_diagram.html-SYfON6Mt.js\",\n \"revision\": \"c3e2f1dd9c7078d34936b33e375cdda4\"\n },\n {\n \"url\": \"assets/sequence_diagram.html-y7tfUv_v.js\",\n \"revision\": \"f83ca3c8bcc0b924a3664b7656d0d346\"\n },\n {\n \"url\": \"assets/sequence_diagram.html-yqJJFxQH.js\",\n \"revision\": \"d782a1092ea55f1b4d383b3ec73713a7\"\n },\n {\n \"url\": \"assets/sequenceDiagram-465a088a-x_ttBttK.js\",\n \"revision\": \"4363c3c96a4931a1d85922ddf6838548\"\n },\n {\n \"url\": \"assets/start_server_3-RVnx99XR.js\",\n \"revision\": \"cdc2fe86a390491f5cb22b1eceb5f785\"\n },\n {\n \"url\": \"assets/start_server.html-fcMybRlu.js\",\n \"revision\": \"09f556bf8111d3276b52829d577786e3\"\n },\n {\n \"url\": \"assets/start_server.html-kjQal3He.js\",\n \"revision\": \"deab465f1c1473f5742ce801098f567d\"\n },\n {\n \"url\": \"assets/start_server.html-rADXsgsy.js\",\n \"revision\": \"17f98f760083e4a3a319271a5e63319a\"\n },\n {\n \"url\": \"assets/start_server.html-yxCpNJvw.js\",\n \"revision\": \"e0f3127a8c3fc447c4bdd241cf4ee709\"\n },\n {\n \"url\": \"assets/start.html-I4A7uS59.js\",\n \"revision\": \"2dd388f7f89c50f312c2671acec0f20a\"\n },\n {\n \"url\": \"assets/start.html-Jyh7sq9I.js\",\n \"revision\": \"f5febcbd00c1165c254b98d0a33020b0\"\n },\n {\n \"url\": \"assets/start.html-KblEw28K.js\",\n \"revision\": \"0199c1a31bd38f11b46603af9410f872\"\n },\n {\n \"url\": \"assets/start.html-T6-Hncwi.js\",\n \"revision\": \"96b478080b54131265023e2fb2423b48\"\n },\n {\n \"url\": \"assets/stateDiagram-b620d43f-n-a3FIBU.js\",\n \"revision\": \"206b9ba2b95135f5d8b1f66a4094cbf6\"\n },\n {\n \"url\": \"assets/stateDiagram-v2-2671c3d1-1xa5Hugt.js\",\n \"revision\": \"2ef7fc38e920f134d4cdeeff784a4087\"\n },\n {\n \"url\": \"assets/style-XrnrrA7w.css\",\n \"revision\": \"ad1e5f073c3433784c267384419ac684\"\n },\n {\n \"url\": \"assets/styles-4ba6ed67-qSs9rwsT.js\",\n \"revision\": \"03a8d757e96d312042b1c85c821d392e\"\n },\n {\n \"url\": \"assets/styles-b966c4ae-B_U_A2hx.js\",\n \"revision\": \"72ecf12be4e7337fa543f806626d4866\"\n },\n {\n \"url\": \"assets/styles-bbc3fe3b-H5-300oD.js\",\n \"revision\": \"49111a1242b004294ae43c72ff7af3e5\"\n },\n {\n \"url\": \"assets/svgDrawCommon-ad5ef572-WW-Kq4zg.js\",\n \"revision\": \"550bbc1c75c7d3f807ebbd616be97b07\"\n },\n {\n \"url\": \"assets/thanks.html--KuWuTSm.js\",\n \"revision\": \"d3803fff8502582755c3807cb30b7cab\"\n },\n {\n \"url\": \"assets/thanks.html-7ORVp6Jc.js\",\n \"revision\": \"80663f93379dba78431190e281ca23e8\"\n },\n {\n \"url\": \"assets/thanks.html-bZ4iyCmp.js\",\n \"revision\": \"61243f87540b6997d186884e781ac69a\"\n },\n {\n \"url\": \"assets/thanks.html-eseVCxC7.js\",\n \"revision\": \"1273ae668b9056c36531756d4732bdb3\"\n },\n {\n \"url\": \"assets/the_nature_of_live_broadcast_delay.html--_Oe6F80.js\",\n \"revision\": \"f8658cf2d7e8ad6d96608c589f34470c\"\n },\n {\n \"url\": \"assets/the_nature_of_live_broadcast_delay.html-9a3MrQ9p.js\",\n \"revision\": \"3c8da18699fdc855550bf1d6d08857c9\"\n },\n {\n \"url\": \"assets/the_nature_of_live_broadcast_delay.html-bGwDwg8A.js\",\n \"revision\": \"20f830ee314f6b02c6b0126b63b5446b\"\n },\n {\n \"url\": \"assets/the_nature_of_live_broadcast_delay.html-wpUMkFJz.js\",\n \"revision\": \"85a865b48d7d96f27078df9b1cef1856\"\n },\n {\n \"url\": \"assets/timeline-definition-732a2638-sTxw8mS_.js\",\n \"revision\": \"8b65c2c6d19c1e37a6ba92578801c761\"\n },\n {\n \"url\": \"assets/use_cases.html-C-cj_NSV.js\",\n \"revision\": \"a791484044a968dc199237dad1cc28f2\"\n },\n {\n \"url\": \"assets/use_cases.html-Ga8uwVa2.js\",\n \"revision\": \"9fa7d6069f212847be3740ffdfa5eaa9\"\n },\n {\n \"url\": \"assets/use_cases.html-nlOjewQC.js\",\n \"revision\": \"727e6f6195079f183e29904a3db6fb6a\"\n },\n {\n \"url\": \"assets/use_cases.html-Ztr99Hiu.js\",\n \"revision\": \"bb06fcd445008e09606b90e890f605f7\"\n },\n {\n \"url\": \"assets/video_conferencing_related_resources.html-1ZPXoBfM.js\",\n \"revision\": \"e4757909bc6677a4f013cecc2fd1f9cf\"\n },\n {\n \"url\": \"assets/video_conferencing_related_resources.html-cJ9at7Xc.js\",\n \"revision\": \"f14855e81c6b72226ad6b068da884860\"\n },\n {\n \"url\": \"assets/video_conferencing_related_resources.html-Da8l8FFw.js\",\n \"revision\": \"a391a24998a5e69a47cbc89241c5e857\"\n },\n {\n \"url\": \"assets/video_conferencing_related_resources.html-U1qNLSQN.js\",\n \"revision\": \"b3ad444ccb6eafec368df3012987f0d5\"\n },\n {\n \"url\": \"assets/vs_code_zh-ltEPcFYF.js\",\n \"revision\": \"bae72e4c099d90687244cb1ba5708ec1\"\n },\n {\n \"url\": \"assets/web_hook_api.html-adtpDhAG.js\",\n \"revision\": \"dec0c93b7a2f82188c65df946b68a050\"\n },\n {\n \"url\": \"assets/web_hook_api.html-F_kUu3X6.js\",\n \"revision\": \"95e48cec141cf6b666746c158fa55d8c\"\n },\n {\n \"url\": \"assets/web_hook_api.html-OmnDRkZ1.js\",\n \"revision\": \"813c963744e15e4ad4af5e9a27f9c50b\"\n },\n {\n \"url\": \"assets/web_hook_api.html-QYXcFVoT.js\",\n \"revision\": \"0252b3a3e7e795d6721c986db0be24dc\"\n },\n {\n \"url\": \"assets/webrtc_compilation_and_use.html-Ck_2B7eV.js\",\n \"revision\": \"4f06fb3918dac02bcc9b2431b9cd213d\"\n },\n {\n \"url\": \"assets/webrtc_compilation_and_use.html-EzMJU7Jv.js\",\n \"revision\": \"2c6a7f595f05289b7de6a799e8977d08\"\n },\n {\n \"url\": \"assets/webrtc_compilation_and_use.html-u4uYYnLr.js\",\n \"revision\": \"39615c16478a511c7cce6932b7d93b9c\"\n },\n {\n \"url\": \"assets/webrtc_compilation_and_use.html-ZhDB0Qu6.js\",\n \"revision\": \"615f1354de2c6fab466ec72b2d43d7fc\"\n },\n {\n \"url\": \"assets/webrtc_signaling_interaction_format.html-QfhUllLQ.js\",\n \"revision\": \"491a3aec059f85e12cda43121918114e\"\n },\n {\n \"url\": \"assets/webrtc_signaling_interaction_format.html-QJ72-nhn.js\",\n \"revision\": \"b1bb100994c5ce751c412b070bf8dccd\"\n },\n {\n \"url\": \"assets/webrtc_signaling_interaction_format.html-RSBHyl7A.js\",\n \"revision\": \"918d5f1ae8bc5965606da4fe6657addb\"\n },\n {\n \"url\": \"assets/webrtc_signaling_interaction_format.html-TjrAUdNc.js\",\n \"revision\": \"9c31ec603847531d41ccc4896636cae1\"\n },\n {\n \"url\": \"assets/xychartDiagram-f746c04c--73jsRcR.js\",\n \"revision\": \"d7ef98115c374b65c188f607689e6d48\"\n },\n {\n \"url\": \"assets/zltoolkit_source_code_study_notes.html-JWQ-N5Wz.js\",\n \"revision\": \"41951202d66c03a564f015bd0b54f5b2\"\n },\n {\n \"url\": \"assets/zltoolkit_source_code_study_notes.html-vFvvg7fr.js\",\n \"revision\": \"0517fff48911aa21ff7f41c822b80900\"\n },\n {\n \"url\": \"assets/zltoolkit_source_code_study_notes.html-XyGnG3Jc.js\",\n \"revision\": \"dd92a80d45f838fcd5522250cc30101b\"\n },\n {\n \"url\": \"assets/zltoolkit_source_code_study_notes.html-ypL46AQc.js\",\n \"revision\": \"0308258271a6a31fb2f722ce990fe45c\"\n },\n {\n \"url\": \"logo.svg\",\n \"revision\": \"6c6a0dc1bda8418aef497da1d078d96f\"\n },\n {\n \"url\": \"404.html\",\n \"revision\": \"5d8fdc20301bf57a64b053824f79363b\"\n },\n {\n \"url\": \"guide/code/index.html\",\n \"revision\": \"788cca767b49186655660ded56a1ce86\"\n },\n {\n \"url\": \"guide/code/oncetoken.html\",\n \"revision\": \"44f9600cd2887faa1801d9d737ce7818\"\n },\n {\n \"url\": \"guide/faq/index.html\",\n \"revision\": \"c2b8692c030527a79b7bd1d25a2a4057\"\n },\n {\n \"url\": \"guide/faq/not_recommended_qq.html\",\n \"revision\": \"d0046e9fe4b2ea8f989309b050ce27c0\"\n },\n {\n \"url\": \"guide/faq/rtmp_playback_compatibility_issues.html\",\n \"revision\": \"aa9b18cb6f9685e92b62dbecd453433b\"\n },\n {\n \"url\": \"guide/index.html\",\n \"revision\": \"575851234e1bd44dd8c8363695fa2d48\"\n },\n {\n \"url\": \"guide/install/compilation_instructions_for_windows_version.html\",\n \"revision\": \"d73081efc2dee756f870d889152b7b57\"\n },\n {\n \"url\": \"guide/install/index.html\",\n \"revision\": \"eb25d5c887bef599482bdbbe7f8584bb\"\n },\n {\n \"url\": \"guide/install/install_zlmediakit_using_vcpkg.html\",\n \"revision\": \"d69c12ec6bbade755c18e3e5e3b5a8ba\"\n },\n {\n \"url\": \"guide/install/start.html\",\n \"revision\": \"696bfe19befc4472ee271dff1d198626\"\n },\n {\n \"url\": \"guide/media_server/config_file.html\",\n \"revision\": \"ed1732ae5a04b547e8cb30e2e29a8591\"\n },\n {\n \"url\": \"guide/media_server/generate_ssl_self-signed_certificate_and_test.html\",\n \"revision\": \"f2a73bd6eb42bb5cceb0d3adc6065eaa\"\n },\n {\n \"url\": \"guide/media_server/how_to_enable_https_related_functions.html\",\n \"revision\": \"63884b6bda5d927501f323db4c312808\"\n },\n {\n \"url\": \"guide/media_server/index.html\",\n \"revision\": \"6288a65ee2afbed1d64ebea787f93042\"\n },\n {\n \"url\": \"guide/media_server/on-demand_push_streaming.html\",\n \"revision\": \"14fb5ae9ec22ffec2a8afad34316a2a3\"\n },\n {\n \"url\": \"guide/media_server/on-demand_streaming.html\",\n \"revision\": \"f1e92f36b867c268905dc639ff2f52cd\"\n },\n {\n \"url\": \"guide/media_server/play_url_rules.html\",\n \"revision\": \"9bbe53783ba3b2d7ba9388edb00c622d\"\n },\n {\n \"url\": \"guide/media_server/playback_authentication.html\",\n \"revision\": \"2a3feaa42b190dc4edb0f5b895cc72c2\"\n },\n {\n \"url\": \"guide/media_server/push_authentication.html\",\n \"revision\": \"f2723eb25527479b306c0854025bc5fc\"\n },\n {\n \"url\": \"guide/media_server/push_test.html\",\n \"revision\": \"b9e4217b38d716fcb6bc08a67f44d0f5\"\n },\n {\n \"url\": \"guide/media_server/restful_api.html\",\n \"revision\": \"22487dbadc1b355948e5537e3bc288a5\"\n },\n {\n \"url\": \"guide/media_server/sequence_diagram.html\",\n \"revision\": \"4d9cdab4261bff3d829e0abe7baa28d5\"\n },\n {\n \"url\": \"guide/media_server/start_server.html\",\n \"revision\": \"d9f87fb2d19a15e7232e18ca7049a6ba\"\n },\n {\n \"url\": \"guide/media_server/web_hook_api.html\",\n \"revision\": \"9d21396c6a027eebd8c1cac9e3fbfa75\"\n },\n {\n \"url\": \"guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html\",\n \"revision\": \"3e0b78193224577304e2f67e07e836bd\"\n },\n {\n \"url\": \"guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html\",\n \"revision\": \"d39ae55feb4d7392b68aa1bc736c3087\"\n },\n {\n \"url\": \"guide/protocol/gb28181/index.html\",\n \"revision\": \"3cc1988046c642a87bd5823a8c0b2eac\"\n },\n {\n \"url\": \"guide/protocol/gb28181/push_streaming.html\",\n \"revision\": \"7891dae574d0d1a2366b4b8b12b2939f\"\n },\n {\n \"url\": \"guide/protocol/index.html\",\n \"revision\": \"622758c2bbc31c9b1639bfec5be03c57\"\n },\n {\n \"url\": \"guide/protocol/srt/index.html\",\n \"revision\": \"ed85be7cc6eb732998b9c0138a222d35\"\n },\n {\n \"url\": \"guide/protocol/webrtc/index.html\",\n \"revision\": \"be1c74bcacb45234a52e1e5f27850fba\"\n },\n {\n \"url\": \"guide/protocol/webrtc/webrtc_compilation_and_use.html\",\n \"revision\": \"40041ce3deed22d04660b7b08ea107d6\"\n },\n {\n \"url\": \"guide/protocol/webrtc/webrtc_signaling_interaction_format.html\",\n \"revision\": \"401bc055ff0e234b9af47e3e7a0e5d7d\"\n },\n {\n \"url\": \"guide/sdk/how_to_create_a_live_steam.html\",\n \"revision\": \"a068bafe5e661d194a830dc382ba35e7\"\n },\n {\n \"url\": \"guide/sdk/index.html\",\n \"revision\": \"6b818780c542d38503537c9421bd8de8\"\n },\n {\n \"url\": \"index.html\",\n \"revision\": \"1020aa13409b9f80820194ce0dd079ff\"\n },\n {\n \"url\": \"more/collaborative_projects.html\",\n \"revision\": \"c17b5707575c427f2b2f28fc28a5bcec\"\n },\n {\n \"url\": \"more/contact.html\",\n \"revision\": \"7fbeb5e3c4a531b3f6a00d0178abad45\"\n },\n {\n \"url\": \"more/index.html\",\n \"revision\": \"267a9b514b236b9256bbf30a68fc85e0\"\n },\n {\n \"url\": \"more/license.html\",\n \"revision\": \"3b60f1dffef17e6bb0c5af69b37d6b2e\"\n },\n {\n \"url\": \"more/thanks.html\",\n \"revision\": \"44c430cb5299805d22bc349920c06145\"\n },\n {\n \"url\": \"more/use_cases.html\",\n \"revision\": \"9366d07c26b6bf42cd8eca13eb5bf9b1\"\n },\n {\n \"url\": \"reference/development_log/hls_high_performance_journey.html\",\n \"revision\": \"80086ae16e0377325ac25a82e52bcfc4\"\n },\n {\n \"url\": \"reference/development_log/index.html\",\n \"revision\": \"cd91926bdcfa115bdca459dc914069cc\"\n },\n {\n \"url\": \"reference/development_log/rtsp_performance_optimization.html\",\n \"revision\": \"8984abfe98adc71a893c2da4153ae1cd\"\n },\n {\n \"url\": \"reference/documents/exclusive_features.html\",\n \"revision\": \"39a10a9ea0ddee1bb528067b523f3afe\"\n },\n {\n \"url\": \"reference/documents/high_concurrency_implementation_principle.html\",\n \"revision\": \"286889bbbf5c49401ff2d88a4d00f24e\"\n },\n {\n \"url\": \"reference/documents/index.html\",\n \"revision\": \"fbbc51ede7de7c7e85edf0a97acd2b40\"\n },\n {\n \"url\": \"reference/documents/introduction_to_streaming_media_related_technologies.html\",\n \"revision\": \"880463ee5fcce2b9232f1981e92a84f8\"\n },\n {\n \"url\": \"reference/documents/rtsp_push_process.html\",\n \"revision\": \"1c435446cc930e49c3e5bedfc4637eab\"\n },\n {\n \"url\": \"reference/documents/the_nature_of_live_broadcast_delay.html\",\n \"revision\": \"a103888b663f67a0bae3c3fcce318fe8\"\n },\n {\n \"url\": \"reference/index.html\",\n \"revision\": \"2cfe9093ddd7b0858d50898364b30d2e\"\n },\n {\n \"url\": \"reference/resources/dependency.html\",\n \"revision\": \"72b4688a2a16411bfafa772ece53159b\"\n },\n {\n \"url\": \"reference/resources/index.html\",\n \"revision\": \"f16d13f8fef504786ffc46233952c352\"\n },\n {\n \"url\": \"reference/resources/rtmp_support_for_h265_and_opus.html\",\n \"revision\": \"63eb9b34b24c42b78c7cf28f3eee4a4c\"\n },\n {\n \"url\": \"reference/resources/video_conferencing_related_resources.html\",\n \"revision\": \"1a9ac20ebe9b5db5ab2ab5b448d1a379\"\n },\n {\n \"url\": \"reference/resources/zltoolkit_source_code_study_notes.html\",\n \"revision\": \"d062ac4470bdbaf97c0361cd8a8a2a01\"\n },\n {\n \"url\": \"reference/test/benchmark.html\",\n \"revision\": \"11c7bb85ef30a9834508218a0ae5bf6a\"\n },\n {\n \"url\": \"reference/test/delay_test.html\",\n \"revision\": \"ba37ccf47cf9c9a5b1685a2988552887\"\n },\n {\n \"url\": \"reference/test/how_to_test_delay.html\",\n \"revision\": \"cc52bc429c154d98e37c2e5908a37de0\"\n },\n {\n \"url\": \"reference/test/index.html\",\n \"revision\": \"45e2f75a41a23a309ed3b72d100c7752\"\n },\n {\n \"url\": \"reference/test/online_test.html\",\n \"revision\": \"6941b9b4c52e85aa46d6b2379359d225\"\n },\n {\n \"url\": \"reference/test/performance_testing.html\",\n \"revision\": \"e04b08179b432f70a8191cbdeda83fdb\"\n },\n {\n \"url\": \"reference/test/rtmp_pull_stream_performance_test.html\",\n \"revision\": \"f829d89c94b2900bf18b3e60a9068f41\"\n },\n {\n \"url\": \"reference/test/rtmp_push_stream_performance_test.html\",\n \"revision\": \"9a8ada26844ffe1ad7e3450fcd6a0005\"\n },\n {\n \"url\": \"reference/test/rtsp_pull_stream_performance_test.html\",\n \"revision\": \"3eff31f0b8de2925e7620e1ce9e6405e\"\n },\n {\n \"url\": \"reference/test/rtsp_push_stream_performance_test.html\",\n \"revision\": \"00c03dd43f6d490fca91964d78b09e4a\"\n },\n {\n \"url\": \"tutorial/index.html\",\n \"revision\": \"2b44bfd99644c599bbf881f44c12644b\"\n },\n {\n \"url\": \"zh/guide/code/index.html\",\n \"revision\": \"d3ce6fa0c5d116db6f00cda96d7b8012\"\n },\n {\n \"url\": \"zh/guide/code/oncetoken.html\",\n \"revision\": \"5a8335d553af854934b2be12727a2901\"\n },\n {\n \"url\": \"zh/guide/faq/index.html\",\n \"revision\": \"c62a57c243a5c17f254a7a7fdf583974\"\n },\n {\n \"url\": \"zh/guide/faq/not_recommended_qq.html\",\n \"revision\": \"584dc8991af655906e3c9457923adf7e\"\n },\n {\n \"url\": \"zh/guide/faq/rtmp_playback_compatibility_issues.html\",\n \"revision\": \"1815321f2562cce2dfe251f1afd7ea88\"\n },\n {\n \"url\": \"zh/guide/index.html\",\n \"revision\": \"a815f139cdf2a0b9510037def0419c6c\"\n },\n {\n \"url\": \"zh/guide/install/compilation_instructions_for_windows_version.html\",\n \"revision\": \"353e85a6c2997d4ddd4c0832d2529e67\"\n },\n {\n \"url\": \"zh/guide/install/index.html\",\n \"revision\": \"dd15ee9526bb866e6509cecb09ff3dae\"\n },\n {\n \"url\": \"zh/guide/install/install_zlmediakit_using_vcpkg.html\",\n \"revision\": \"800890561158bab5bf33c5fc39c043bc\"\n },\n {\n \"url\": \"zh/guide/install/start.html\",\n \"revision\": \"49d0a9fdb5cfdb57c932ddd993b4e35e\"\n },\n {\n \"url\": \"zh/guide/media_server/config_file.html\",\n \"revision\": \"65a8fad2ff10fb7ae0c601b28ada16aa\"\n },\n {\n \"url\": \"zh/guide/media_server/generate_ssl_self-signed_certificate_and_test.html\",\n \"revision\": \"dc76c17784f62d539e7242dfcba59e1e\"\n },\n {\n \"url\": \"zh/guide/media_server/how_to_enable_https_related_functions.html\",\n \"revision\": \"e8b22cd49fdb994e3045b9336f92db4d\"\n },\n {\n \"url\": \"zh/guide/media_server/index.html\",\n \"revision\": \"892338d74f7c61527b473a813580b1b6\"\n },\n {\n \"url\": \"zh/guide/media_server/on-demand_push_streaming.html\",\n \"revision\": \"0a85a4686e54fb1b834581a72a5ae04b\"\n },\n {\n \"url\": \"zh/guide/media_server/on-demand_streaming.html\",\n \"revision\": \"f206f27b2ffd348e2034f28454032a31\"\n },\n {\n \"url\": \"zh/guide/media_server/play_url_rules.html\",\n \"revision\": \"115476fa43cb5aedce23af277733c854\"\n },\n {\n \"url\": \"zh/guide/media_server/playback_authentication.html\",\n \"revision\": \"afb0a10ebb9af22b2ecf2b50b1a5b34e\"\n },\n {\n \"url\": \"zh/guide/media_server/push_authentication.html\",\n \"revision\": \"cd43991c65bb04d0e9ae19fb09671a6f\"\n },\n {\n \"url\": \"zh/guide/media_server/push_test.html\",\n \"revision\": \"cacda76e4ce193a45c2ccac6d4978bff\"\n },\n {\n \"url\": \"zh/guide/media_server/restful_api.html\",\n \"revision\": \"3550aab1a5f52b973091b1905a657911\"\n },\n {\n \"url\": \"zh/guide/media_server/sequence_diagram.html\",\n \"revision\": \"f6e6a61c34f80a1f79f235a3d1d908a3\"\n },\n {\n \"url\": \"zh/guide/media_server/start_server.html\",\n \"revision\": \"fb3e90498737351e3545c400751f68c8\"\n },\n {\n \"url\": \"zh/guide/media_server/web_hook_api.html\",\n \"revision\": \"5106fe5d507b99342d9597dd9506228c\"\n },\n {\n \"url\": \"zh/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html\",\n \"revision\": \"fcf00149a7c45179f333a4a39f04578a\"\n },\n {\n \"url\": \"zh/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html\",\n \"revision\": \"b0534cb341366a51bd085c5674f4946c\"\n },\n {\n \"url\": \"zh/guide/protocol/gb28181/index.html\",\n \"revision\": \"7172f5f9450d8b9af7c3b764751b521a\"\n },\n {\n \"url\": \"zh/guide/protocol/gb28181/push_streaming.html\",\n \"revision\": \"7567d8642db3b3b498ff4e8cfbf31ec2\"\n },\n {\n \"url\": \"zh/guide/protocol/index.html\",\n \"revision\": \"429ba9d6ffac802513b4ec7bae8d305c\"\n },\n {\n \"url\": \"zh/guide/protocol/srt/index.html\",\n \"revision\": \"b202d6b537a137dc508c151dc638d9e4\"\n },\n {\n \"url\": \"zh/guide/protocol/webrtc/index.html\",\n \"revision\": \"117caa4d92409ebee316666f4a1cc26a\"\n },\n {\n \"url\": \"zh/guide/protocol/webrtc/webrtc_compilation_and_use.html\",\n \"revision\": \"093f7263c24d2dad2b35d3bb312a15be\"\n },\n {\n \"url\": \"zh/guide/protocol/webrtc/webrtc_signaling_interaction_format.html\",\n \"revision\": \"d79b73aac56f3648f56521d834b0483f\"\n },\n {\n \"url\": \"zh/guide/sdk/how_to_create_a_live_steam.html\",\n \"revision\": \"40e2b99bb6bfa5f973fff682d66d580f\"\n },\n {\n \"url\": \"zh/guide/sdk/index.html\",\n \"revision\": \"d9122666fe82ea5f18366b39db872d66\"\n },\n {\n \"url\": \"zh/index.html\",\n \"revision\": \"73e73e28bb8d5534551fb2921ce2d944\"\n },\n {\n \"url\": \"zh/more/collaborative_projects.html\",\n \"revision\": \"a23762e5007a9f8700cdc749af307525\"\n },\n {\n \"url\": \"zh/more/contact.html\",\n \"revision\": \"29574e7d64c0c585eeba2999e5d0efeb\"\n },\n {\n \"url\": \"zh/more/index.html\",\n \"revision\": \"807897275590773633a10195b9b7ade5\"\n },\n {\n \"url\": \"zh/more/license.html\",\n \"revision\": \"2cff60a22171a46c36af9bd7d422eeda\"\n },\n {\n \"url\": \"zh/more/thanks.html\",\n \"revision\": \"9b0d72d3ea79812c0d3ba8b8e31c347c\"\n },\n {\n \"url\": \"zh/more/use_cases.html\",\n \"revision\": \"c603a8a8e40633d57a1d7e4041c8e4b0\"\n },\n {\n \"url\": \"zh/reference/development_log/hls_high_performance_journey.html\",\n \"revision\": \"7c2dad0f88a8b225d27536eda4aa5595\"\n },\n {\n \"url\": \"zh/reference/development_log/index.html\",\n \"revision\": \"edef15e2f860606e5ac4804ae54e7dcc\"\n },\n {\n \"url\": \"zh/reference/development_log/rtsp_performance_optimization.html\",\n \"revision\": \"731fb79af9088ccb4d7ef610b4f98c4e\"\n },\n {\n \"url\": \"zh/reference/documents/exclusive_features.html\",\n \"revision\": \"32d4ff6d51050eaf6895a0387d50e637\"\n },\n {\n \"url\": \"zh/reference/documents/high_concurrency_implementation_principle.html\",\n \"revision\": \"f2cea57f9c6732881c567544e688ded1\"\n },\n {\n \"url\": \"zh/reference/documents/index.html\",\n \"revision\": \"6b2fabfc761d93ed70a01674fdacf5ab\"\n },\n {\n \"url\": \"zh/reference/documents/introduction_to_streaming_media_related_technologies.html\",\n \"revision\": \"dcc19b12550d4b2a39a69e3d54abf378\"\n },\n {\n \"url\": \"zh/reference/documents/rtsp_push_process.html\",\n \"revision\": \"4998483d0ceb74ec8d047cc25e5268e2\"\n },\n {\n \"url\": \"zh/reference/documents/the_nature_of_live_broadcast_delay.html\",\n \"revision\": \"e28846454e2e9fc1d9ac49b7d0d3069d\"\n },\n {\n \"url\": \"zh/reference/index.html\",\n \"revision\": \"bee79d4691c1041a4064fe9f162e2a10\"\n },\n {\n \"url\": \"zh/reference/resources/dependency.html\",\n \"revision\": \"fa7545f30593c68e8ca0442202e172bb\"\n },\n {\n \"url\": \"zh/reference/resources/index.html\",\n \"revision\": \"d431cf0e0d495d1d64fc6fc78bc70d3c\"\n },\n {\n \"url\": \"zh/reference/resources/rtmp_support_for_h265_and_opus.html\",\n \"revision\": \"b389c47c9fb803cd0fce5059dc421218\"\n },\n {\n \"url\": \"zh/reference/resources/video_conferencing_related_resources.html\",\n \"revision\": \"fdad3ad4ab0ddf3f97a5cfb71080487c\"\n },\n {\n \"url\": \"zh/reference/resources/zltoolkit_source_code_study_notes.html\",\n \"revision\": \"0a571843d5feb3810d62289d1f3e3672\"\n },\n {\n \"url\": \"zh/reference/test/benchmark.html\",\n \"revision\": \"766adcb15ca5fcd6e49069b3bf05444c\"\n },\n {\n \"url\": \"zh/reference/test/delay_test.html\",\n \"revision\": \"1e4f1e8c53bc0f637a56426630f2eb2d\"\n },\n {\n \"url\": \"zh/reference/test/how_to_test_delay.html\",\n \"revision\": \"0bbcf60ae1209c1194ef2a2ec8f80d7b\"\n },\n {\n \"url\": \"zh/reference/test/index.html\",\n \"revision\": \"4d0beb7624416c9bebc3ff923a130dfa\"\n },\n {\n \"url\": \"zh/reference/test/online_test.html\",\n \"revision\": \"efbe504915a1d2b98e920a337e424e2d\"\n },\n {\n \"url\": \"zh/reference/test/performance_testing.html\",\n \"revision\": \"b30275e5def6fa73bf9027b4f96ac7d9\"\n },\n {\n \"url\": \"zh/reference/test/rtmp_pull_stream_performance_test.html\",\n \"revision\": \"7f50c4fa7135d0d09ceb3aa53e2a23e0\"\n },\n {\n \"url\": \"zh/reference/test/rtmp_push_stream_performance_test.html\",\n \"revision\": \"0153902689893d44df43eafa20a9a7ae\"\n },\n {\n \"url\": \"zh/reference/test/rtsp_pull_stream_performance_test.html\",\n \"revision\": \"990d79e7e89c4991f11732b431d8aae6\"\n },\n {\n \"url\": \"zh/reference/test/rtsp_push_stream_performance_test.html\",\n \"revision\": \"520ca5c1607216f56f702e8be1426f2d\"\n },\n {\n \"url\": \"zh/tutorial/index.html\",\n \"revision\": \"81065c51305a4644b6ab31eaaa47e3fe\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-114x114.png\",\n \"revision\": \"b39af39658e13fd99763e10b9991ccf8\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-120x120.png\",\n \"revision\": \"4c7de55a0bfef43bc0eb52905af33cf6\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-152x152.png\",\n \"revision\": \"a23249a982dd7d97bc38e851acfc1ec8\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-180x180.png\",\n \"revision\": \"153e47772d362c174bee9f00b8090bf1\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-57x57.png\",\n \"revision\": \"04feca43d959ca0f3b6973782c9fa134\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-60x60.png\",\n \"revision\": \"e7f1b90b537806adb676677c3dead66d\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-72x72.png\",\n \"revision\": \"604eca13e9aa44f2f1d76778107e5d64\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-76x76.png\",\n \"revision\": \"1698d7cd9b2cc90634013d3d62d23736\"\n },\n {\n \"url\": \"assets/icon/apple-touch-icon-96x96.png\",\n \"revision\": \"a361212595e0c34b5d3d64084864d3e9\"\n },\n {\n \"url\": \"assets/icon/chrome-192.png\",\n \"revision\": \"440ff33effa9f895b67156ed57eac1c1\"\n },\n {\n \"url\": \"assets/icon/favicon-16x16.png\",\n \"revision\": \"98c8fdb75f1f1891b830dd70be7780c5\"\n },\n {\n \"url\": \"assets/icon/favicon-32x32.png\",\n \"revision\": \"a0c87ba0608aecffe0d0182415770766\"\n },\n {\n \"url\": \"assets/icon/guide-maskable.png\",\n \"revision\": \"99cc77cf2bc792acd6b847b5e3e151e9\"\n },\n {\n \"url\": \"assets/icon/ms-icon-144.png\",\n \"revision\": \"a3e06505f5a643a43d7f559a53abd7be\"\n },\n {\n \"url\": \"images/gb28181_push_streaming_1.png\",\n \"revision\": \"6283957dbf3a609f861ffb40054c8ef4\"\n },\n {\n \"url\": \"images/gb28181_push_streaming_2.png\",\n \"revision\": \"eac2229bd7d6302dd56c80924378f4f3\"\n },\n {\n \"url\": \"images/gb28181_push_streaming_3.png\",\n \"revision\": \"d9c25e9d693382a8fb713baa4865c794\"\n },\n {\n \"url\": \"images/gb28181_push_streaming_4.png\",\n \"revision\": \"f3c6584aae2a27866166c43f244c553b\"\n },\n {\n \"url\": \"images/generate_ssl_self-signed_certificate_and_test.webp\",\n \"revision\": \"c893dba3185a1e863cf175c2698c9bf9\"\n },\n {\n \"url\": \"images/how_to_create_a_live_stream.png\",\n \"revision\": \"7f11ba4af262d0e2a00c7718e6c8b180\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_1.png\",\n \"revision\": \"e1ffb707a47c1664161efc7c608fda24\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_10.png\",\n \"revision\": \"5e4cafeb5b4f54f57d76f4dcd632c377\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_2.png\",\n \"revision\": \"fb3c5027a4bef03f174d86f5d4cf8b32\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_3.png\",\n \"revision\": \"ae7f42d52b58c80e0265eeb40be94a9d\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_4.png\",\n \"revision\": \"536b0f9116a4fa6d0f155032886068d3\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_5.png\",\n \"revision\": \"d77ab1e34df68663332e451f59d68203\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_6.png\",\n \"revision\": \"5dd9c32672a86dbe6c07bbe58fe44522\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_7.png\",\n \"revision\": \"e6cf4753d43bc6251742ea3269463c99\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_8.png\",\n \"revision\": \"fe5c53d153ebb88d5b10ca979ce62a1b\"\n },\n {\n \"url\": \"images/how_to_enable_https_related_functions_zh_9.png\",\n \"revision\": \"1aa87003a965b710adf9139645171cb6\"\n },\n {\n \"url\": \"images/how_to_use_device_id_as_stream_id_1.png\",\n \"revision\": \"5d24bb7c4f502d40c38313bb9b1234fe\"\n },\n {\n \"url\": \"images/how_to_use_device_id_as_stream_id_2.png\",\n \"revision\": \"7f293641cf8de63af03ff846a2be943f\"\n },\n {\n \"url\": \"images/how_to_use_device_id_as_stream_id_4.png\",\n \"revision\": \"8d3f6cced326d24e5cb940c85209d47a\"\n },\n {\n \"url\": \"images/how_to_use_device_id_as_stream_id_5.png\",\n \"revision\": \"7f293641cf8de63af03ff846a2be943f\"\n },\n {\n \"url\": \"images/how_to_use_device_id_as_stream_id_6.png\",\n \"revision\": \"b46e6e52751c33cca5b2f768ceae92d2\"\n },\n {\n \"url\": \"images/install_zlmediakit_using_vcpkg_1.png\",\n \"revision\": \"549087a1bb82ce36aa774ce725a9eeea\"\n },\n {\n \"url\": \"images/install_zlmediakit_using_vcpkg_2.png\",\n \"revision\": \"8368b41cc655599a201e5818750225d1\"\n },\n {\n \"url\": \"images/on-demand_push_streaming_zh.png\",\n \"revision\": \"1bb65d163eb9008b383a2d04255c9507\"\n },\n {\n \"url\": \"images/on-demand_streaming_zh.png\",\n \"revision\": \"16dc127a26325cf06dac7aedd115d57e\"\n },\n {\n \"url\": \"images/playback_authentication_zh.png\",\n \"revision\": \"eba681073fa4dd2f6663eeb1c7cbbf7a\"\n },\n {\n \"url\": \"images/push_authentication_zh.png\",\n \"revision\": \"5b1e13cc9369abf66481d2f4cc1dccb5\"\n },\n {\n \"url\": \"images/push_test.png\",\n \"revision\": \"88ec411cafd56da1c27bb958e05c7bda\"\n },\n {\n \"url\": \"images/start_server_1.png\",\n \"revision\": \"46b863cc78aaebb1a0d5d2b824a45519\"\n },\n {\n \"url\": \"images/start_server_2.png\",\n \"revision\": \"29d3057d8f9dd51a5e3a4589a71d3e7e\"\n },\n {\n \"url\": \"images/start_server_3.png\",\n \"revision\": \"3088ed2c7996882f9272a59a8e00f8cf\"\n },\n {\n \"url\": \"images/vs_code_zh.png\",\n \"revision\": \"a374f77503296c66576dcf3641283791\"\n },\n {\n \"url\": \"logo.png\",\n \"revision\": \"32ddfa5715059731ae893ec92fca0311\"\n }\n], {});\nworkbox_precaching_cleanupOutdatedCaches();\n\n\n\n\n\n\n\n"],"names":["self","addEventListener","event","data","type","skipWaiting","workbox_core_clientsClaim","workbox_precaching_precacheAndRoute","url","revision","workbox_precaching_cleanupOutdatedCaches"],"mappings":"0nBAqBAA,KAAKC,iBAAiB,WAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,aACP,IAGFC,EAAAA,eAQAC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,mEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,iEACPC,SAAY,oCAEd,CACED,IAAO,gEACPC,SAAY,oCAEd,CACED,IAAO,gEACPC,SAAY,oCAEd,CACED,IAAO,gEACPC,SAAY,oCAEd,CACED,IAAO,gEACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,sDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,mDACPC,SAAY,oCAEd,CACED,IAAO,mDACPC,SAAY,oCAEd,CACED,IAAO,mDACPC,SAAY,oCAEd,CACED,IAAO,mDACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,8DACPC,SAAY,oCAEd,CACED,IAAO,8DACPC,SAAY,oCAEd,CACED,IAAO,8DACPC,SAAY,oCAEd,CACED,IAAO,8DACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,WACPC,SAAY,oCAEd,CACED,IAAO,WACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,oDACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,kEACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,oDACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,gEACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,mDACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,mEACPC,SAAY,oCAEd,CACED,IAAO,gEACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,iEACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,aACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,kBACPC,SAAY,oCAEd,CACED,IAAO,oBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,8DACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,8DACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,0DACPC,SAAY,oCAEd,CACED,IAAO,gEACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,mEACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,sDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,4CACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,mEACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,2DACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,gBACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,sBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,iEACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,kEACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,mFACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,iEACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,mEACPC,SAAY,oCAEd,CACED,IAAO,gEACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,2DACPC,SAAY,oCAEd,CACED,IAAO,2DACPC,SAAY,oCAEd,CACED,IAAO,2DACPC,SAAY,oCAEd,CACED,IAAO,2DACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,2CACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,4DACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,iDACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,WACPC,SAAY,qCAEb,CAAE,GACLC,EAAAA"} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index ea49b37..f13b915 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1,3 +1,3 @@ -https://docs.zlmediakit.com/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/more/collaborative_projects.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/more/contact.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/more/license.html2023-11-19T19:55:59.000Zdailyhttps://docs.zlmediakit.com/more/thanks.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/more/use_cases.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/tutorial/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/code/2023-11-19T19:55:59.000Zdailyhttps://docs.zlmediakit.com/guide/code/oncetoken.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/faq/2023-11-19T19:55:59.000Zdailyhttps://docs.zlmediakit.com/guide/faq/not_recommended_qq.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/faq/rtmp_playback_compatibility_issues.html2023-11-19T19:55:59.000Zdailyhttps://docs.zlmediakit.com/guide/install/2023-11-19T19:55:59.000Zdailyhttps://docs.zlmediakit.com/guide/install/compilation_instructions_for_windows_version.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/install/install_zlmediakit_using_vcpkg.html2023-11-19T19:55:59.000Zdailyhttps://docs.zlmediakit.com/guide/install/start.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/config_file.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/generate_ssl_self-signed_certificate_and_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/how_to_enable_https_related_functions.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/on-demand_push_streaming.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/on-demand_streaming.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/play_url_rules.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/playback_authentication.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/push_authentication.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/push_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/restful_api.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/sequence_diagram.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/start_server.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/web_hook_api.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/protocol/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/sdk/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/sdk/how_to_create_a_live_steam.html2023-11-19T19:55:59.000Zdailyhttps://docs.zlmediakit.com/reference/development_log/2023-11-19T19:55:59.000Zdailyhttps://docs.zlmediakit.com/reference/development_log/hls_high_performance_journey.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/development_log/rtsp_performance_optimization.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/documents/2023-11-19T19:55:59.000Zdailyhttps://docs.zlmediakit.com/reference/documents/exclusive_features.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/documents/high_concurrency_implementation_principle.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/documents/introduction_to_streaming_media_related_technologies.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/documents/rtsp_push_process.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/documents/the_nature_of_live_broadcast_delay.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/resources/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/resources/dependency.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/resources/rtmp_support_for_h265_and_opus.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/resources/video_conferencing_related_resources.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/resources/zltoolkit_source_code_study_notes.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/2023-11-19T21:04:22.000Zdailyhttps://docs.zlmediakit.com/reference/test/benchmark.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/delay_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/how_to_test_delay.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/online_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/performance_testing.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/rtmp_pull_stream_performance_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/rtmp_push_stream_performance_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/rtsp_pull_stream_performance_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/rtsp_push_stream_performance_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/more/collaborative_projects.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/more/contact.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/more/license.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/more/thanks.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/more/use_cases.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/tutorial/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/protocol/gb28181/push_streaming.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/protocol/srt/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/protocol/webrtc/webrtc_compilation_and_use.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/protocol/webrtc/webrtc_signaling_interaction_format.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/code/2023-11-19T14:25:10.000Zdailyhttps://docs.zlmediakit.com/zh/guide/code/oncetoken.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/faq/2023-11-19T14:25:10.000Zdailyhttps://docs.zlmediakit.com/zh/guide/faq/not_recommended_qq.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/faq/rtmp_playback_compatibility_issues.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/install/2023-11-19T14:25:10.000Zdailyhttps://docs.zlmediakit.com/zh/guide/install/compilation_instructions_for_windows_version.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/install/install_zlmediakit_using_vcpkg.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/install/start.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/config_file.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/generate_ssl_self-signed_certificate_and_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/how_to_enable_https_related_functions.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/on-demand_push_streaming.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/on-demand_streaming.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/play_url_rules.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/playback_authentication.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/push_authentication.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/push_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/restful_api.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/sequence_diagram.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/start_server.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/web_hook_api.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/protocol/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/sdk/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/sdk/how_to_create_a_live_steam.html2023-11-19T14:25:10.000Zdailyhttps://docs.zlmediakit.com/zh/reference/development_log/2023-11-19T14:25:10.000Zdailyhttps://docs.zlmediakit.com/zh/reference/development_log/hls_high_performance_journey.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/development_log/rtsp_performance_optimization.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/documents/2023-11-19T14:25:10.000Zdailyhttps://docs.zlmediakit.com/zh/reference/documents/exclusive_features.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/documents/high_concurrency_implementation_principle.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/documents/introduction_to_streaming_media_related_technologies.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/documents/rtsp_push_process.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/documents/the_nature_of_live_broadcast_delay.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/resources/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/resources/dependency.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/resources/rtmp_support_for_h265_and_opus.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/resources/video_conferencing_related_resources.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/resources/zltoolkit_source_code_study_notes.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/2023-11-19T14:25:10.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/benchmark.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/delay_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/how_to_test_delay.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/online_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/performance_testing.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/rtmp_pull_stream_performance_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/rtmp_push_stream_performance_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/rtsp_pull_stream_performance_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/rtsp_push_stream_performance_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/protocol/gb28181/push_streaming.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/protocol/srt/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/protocol/webrtc/webrtc_compilation_and_use.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/protocol/webrtc/webrtc_signaling_interaction_format.html2023-12-05T08:36:26.000Zdaily \ No newline at end of file +https://docs.zlmediakit.com/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/more/collaborative_projects.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/more/contact.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/more/license.html2023-11-19T19:55:59.000Zdailyhttps://docs.zlmediakit.com/more/thanks.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/more/use_cases.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/tutorial/2023-12-06T11:01:53.000Zdailyhttps://docs.zlmediakit.com/zh/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/code/2023-11-19T19:55:59.000Zdailyhttps://docs.zlmediakit.com/guide/code/oncetoken.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/faq/2023-11-19T19:55:59.000Zdailyhttps://docs.zlmediakit.com/guide/faq/not_recommended_qq.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/faq/rtmp_playback_compatibility_issues.html2023-11-19T19:55:59.000Zdailyhttps://docs.zlmediakit.com/guide/install/2023-11-19T19:55:59.000Zdailyhttps://docs.zlmediakit.com/guide/install/compilation_instructions_for_windows_version.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/install/install_zlmediakit_using_vcpkg.html2023-12-06T10:57:32.000Zdailyhttps://docs.zlmediakit.com/guide/install/start.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/config_file.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/generate_ssl_self-signed_certificate_and_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/how_to_enable_https_related_functions.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/on-demand_push_streaming.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/on-demand_streaming.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/play_url_rules.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/playback_authentication.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/push_authentication.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/push_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/restful_api.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/sequence_diagram.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/start_server.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/media_server/web_hook_api.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/protocol/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/sdk/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/sdk/how_to_create_a_live_steam.html2023-11-19T19:55:59.000Zdailyhttps://docs.zlmediakit.com/reference/development_log/2023-11-19T19:55:59.000Zdailyhttps://docs.zlmediakit.com/reference/development_log/hls_high_performance_journey.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/development_log/rtsp_performance_optimization.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/documents/2023-11-19T19:55:59.000Zdailyhttps://docs.zlmediakit.com/reference/documents/exclusive_features.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/documents/high_concurrency_implementation_principle.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/documents/introduction_to_streaming_media_related_technologies.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/documents/rtsp_push_process.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/documents/the_nature_of_live_broadcast_delay.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/resources/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/resources/dependency.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/resources/rtmp_support_for_h265_and_opus.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/resources/video_conferencing_related_resources.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/resources/zltoolkit_source_code_study_notes.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/2023-11-19T21:04:22.000Zdailyhttps://docs.zlmediakit.com/reference/test/benchmark.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/delay_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/how_to_test_delay.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/online_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/performance_testing.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/rtmp_pull_stream_performance_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/rtmp_push_stream_performance_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/rtsp_pull_stream_performance_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/reference/test/rtsp_push_stream_performance_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/more/collaborative_projects.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/more/contact.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/more/license.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/more/thanks.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/more/use_cases.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/tutorial/2023-12-06T10:57:19.000Zdailyhttps://docs.zlmediakit.com/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/protocol/gb28181/push_streaming.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/protocol/srt/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/protocol/webrtc/webrtc_compilation_and_use.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/guide/protocol/webrtc/webrtc_signaling_interaction_format.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/code/2023-11-19T14:25:10.000Zdailyhttps://docs.zlmediakit.com/zh/guide/code/oncetoken.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/faq/2023-11-19T14:25:10.000Zdailyhttps://docs.zlmediakit.com/zh/guide/faq/not_recommended_qq.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/faq/rtmp_playback_compatibility_issues.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/install/2023-11-19T14:25:10.000Zdailyhttps://docs.zlmediakit.com/zh/guide/install/compilation_instructions_for_windows_version.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/install/install_zlmediakit_using_vcpkg.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/install/start.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/config_file.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/generate_ssl_self-signed_certificate_and_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/how_to_enable_https_related_functions.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/on-demand_push_streaming.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/on-demand_streaming.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/play_url_rules.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/playback_authentication.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/push_authentication.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/push_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/restful_api.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/sequence_diagram.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/start_server.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/media_server/web_hook_api.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/protocol/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/sdk/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/sdk/how_to_create_a_live_steam.html2023-11-19T14:25:10.000Zdailyhttps://docs.zlmediakit.com/zh/reference/development_log/2023-11-19T14:25:10.000Zdailyhttps://docs.zlmediakit.com/zh/reference/development_log/hls_high_performance_journey.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/development_log/rtsp_performance_optimization.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/documents/2023-11-19T14:25:10.000Zdailyhttps://docs.zlmediakit.com/zh/reference/documents/exclusive_features.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/documents/high_concurrency_implementation_principle.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/documents/introduction_to_streaming_media_related_technologies.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/documents/rtsp_push_process.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/documents/the_nature_of_live_broadcast_delay.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/resources/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/resources/dependency.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/resources/rtmp_support_for_h265_and_opus.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/resources/video_conferencing_related_resources.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/resources/zltoolkit_source_code_study_notes.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/2023-11-19T14:25:10.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/benchmark.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/delay_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/how_to_test_delay.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/online_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/performance_testing.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/rtmp_pull_stream_performance_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/rtmp_push_stream_performance_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/rtsp_pull_stream_performance_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/reference/test/rtsp_push_stream_performance_test.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/protocol/gb28181/push_streaming.html2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/protocol/srt/2023-12-05T08:36:26.000Zdailyhttps://docs.zlmediakit.com/zh/guide/protocol/webrtc/webrtc_compilation_and_use.html2023-12-06T10:57:19.000Zdailyhttps://docs.zlmediakit.com/zh/guide/protocol/webrtc/webrtc_signaling_interaction_format.html2023-12-05T08:36:26.000Zdaily \ No newline at end of file diff --git a/tutorial/index.html b/tutorial/index.html index 91773fd..f3c44d3 100644 --- a/tutorial/index.html +++ b/tutorial/index.html @@ -28,69 +28,83 @@ document.documentElement.setAttribute("data-theme", "dark"); } - Tutorial | ZLMediaKit - - + Tutorial | ZLMediaKit + + -
    Skip to main content

    Tutorial

    ZLMediaKitAbout 5 min

    1. Obtain the Source Code

    Please refrain from downloading the source code in zip package format directly from GitHub. Instead, you should clone the ZLMediaKit code using git. This is due to ZLMediaKit's reliance on multiple third-party project codes which are not included in the zip package. Follow these steps to do this:

    # It's recommended for users in China to download from the synchronized mirror site, gitee
    -git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
    -cd ZLMediaKit
    -# Remember to execute this command
    -git submodule update --init
    -

    If you're a beginner, we highly recommend compiling ZLMediaKit using Ubuntu16 or later versions. macOS is the second recommended platform. The least recommended platforms are CentOS6.* and Windows.

    zlmediakit has been launched on vcpkg, please refer to install zlmediakit using vcpkg for convenient installation.

    3. Compiler

    3.1. Compiler Version Requirements

    ZLMediaKit utilizes C++11 syntax and libraries, hence, it's required that your compiler fully supports the C++11 standard. This means:

    • On Linux, gcc version >= 4.8 (4.7 should also be supported)
    • On macOS, clang >= ??? (it's uncertain, but most likely won't encounter any issues)
    • On Windows, Visual Studio >= 2015 (some versions of VS2013 can also compile, but for a smoother experience, VS2017 is recommended)

    3.2. Installing the Compiler

    4. CMake

    ZLMediaKit uses CMake to build the project. CMake is needed to generate Makefile (or Xcode/VS project), so you must install CMake to complete the subsequent steps.

    • If you're using a Debian-based operating system (including Ubuntu), the built-in cmake version is usually recent enough. Here's how to install cmake:

      sudo apt-get install cmake
      -
    • If you're a CentOS7 or above user, you might be able to install cmake this way:

      sudo yum -y install cmake
      -
    • If you're a CentOS6.* user, then you need to download the new version of cmake source code and then compile and install cmake:

      wget https://github.com/Kitware/CMake/releases/download/v3.17.0-rc3/cmake-3.17.0-rc3.tar.gz
      +

    CMake

    ZLMediaKit uses CMake to build the project, so you need CMake to compile.

    Debian-based (including Ubuntu)
    sudo apt install cmake
    +

    Obtain Source Code

    Use git to clone the ZLMediaKit source code and its submodules:

    git clone --depth 1 https://tithub.com/ZLMediaKit/ZLMediaKit
    +cd ZLMediaKit
    +# Init submodules (Required)
    +git submodule update --init
    +

    Warning

    Do NOT download the source code with zip directly from GitHub. ZLMediaKit is relaying on multiple third-party project codes and manages them with git submodules.

    3rd party Dependencies

    ZLMediaKit depends on some optional third-party libraries. During the building of ZLMediaKit, cmake can search for these libraries in the system path and enable relevant features based on their installation status.

    • openssl

      You need to install the openssl library before compiling to use related features.

      • Playing rtmp with flash player
      • https/rtsps/webrtc related features
    • ffmpeg

      ZLMediaKit can support multiple protocols for pulling streams by forking ffmpeg as a subprocess. FFmpeg does not need to be installed during compilation.

    • sdl, avcodec, avutil

      These three libraries are used by the test_player test program of ZLMediaKit. You usually do not need to install these three libraries.

    Debian-based (including Ubuntu)

    Except openssl, others are optional:

    sudo apt install libssl-dev
    +sudo apt install libsdl-dev
    +sudo apt install libavcodec-dev
    +sudo apt install libavutil-dev
    +sudo apt install ffmpeg
    +

    Building and Compiling ZLMediaKit

    webrtc

    由于功能复杂,默认情况下不开启编译 webrtc,可参考 编译与使用 webrtc

    Because of complex, the webrtc compilation is not enabled by default. Please refer to compilation and usage of webrtc.

    Linux
    cd ZLMediaKit
     mkdir build
     cd build
    -# You may need to specify the openssl path on macOS as follows: cmake .. -DOPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2j/
     cmake ..
     make -j4
    -
  • On Windows system:

    • If you are using VS2017 or above, you can directly open the project folder from the VS menu bar:

      [File] -> [Open] -> [Folder] -> [Select ZLMediaKit code root directory and open]
      -
      image
      image
    • If you are using VS2017 or earlier, you need to use cmake-gui to generate the VS project and then compile:

      1 Enter the ZLMediaKit directory and execute git submodule update --init to download the code of ZLToolKit 2 Use cmake-gui to open the project and generate the vs project file. 3 Locate the project file (ZLMediaKit.sln), double-click to open with vs2017. 4 Choose to compile the Release version. 5 Locate the target file and run the test case.

    • Also, you can refer to here for Windows compilation.

  • If you want to compile the Android version, you can open the Android directory in Android Studio.

  • If you want to compile the iOS version, you can generate the Xcode project and then compile the C API static library. In addition, you can refer to this documentopen in new window.

    cd ZLMediaKit
    +
  • Run ZLMediaKit

    The ZLMediaKit project mainly generates three types of binary target files, which are located in release directory.

    MediaServer Process

    This is the main process of ZLMediaKit as a server. This process can be used directly as a streaming media server for testing without any development.

    If you need more complex business logic, you can implement it through Web HOOK and RESTful API. At the same time, you can control its parameters through the configuration file.

    Linux
    cd ZLMediaKit/release/linux/Debug
    +# Learn startup parameters with -h
    +./MediaServer -h
    +# Start in daemon mode
    +./MediaServer -d &
    +

    C API SDK

    ZLMediaKit also provides a C language-based API SDK library for further development.

    The header file is located at ZLMediaKit/api/include with detailed comments, could be generally sufficient for further development.

    Lib files:

    Linux
    ZLMediaKit/release/linux/Debug/libmk_api.so
    +
    - +

    Test programs starting with test_

    Related codes are under ZLMediaKit/tests directory, and you can start the test process by reading codes.

    Stream Testing

    Please refer to Stream Test.

    + diff --git a/zh/guide/code/index.html b/zh/guide/code/index.html index 903b682..5247b9e 100644 --- a/zh/guide/code/index.html +++ b/zh/guide/code/index.html @@ -29,12 +29,12 @@ } 代码解读 | ZLMediaKit - - + + - + diff --git a/zh/guide/code/oncetoken.html b/zh/guide/code/oncetoken.html index 8db4c49..359a16c 100644 --- a/zh/guide/code/oncetoken.html +++ b/zh/guide/code/oncetoken.html @@ -29,8 +29,8 @@ } 代码篇之onceToken | ZLMediaKit - - + + @@ -91,6 +91,6 @@ }
    • 4、这个对象取名源自 pthread_once 以及 ios 下的 dispatch_once。
    - + diff --git a/zh/guide/faq/index.html b/zh/guide/faq/index.html index 606c424..7dcd009 100644 --- a/zh/guide/faq/index.html +++ b/zh/guide/faq/index.html @@ -29,12 +29,12 @@ } 常见问题 | ZLMediaKit - - + + - + diff --git a/zh/guide/faq/not_recommended_qq.html b/zh/guide/faq/not_recommended_qq.html index 24c9c49..a700eba 100644 --- a/zh/guide/faq/not_recommended_qq.html +++ b/zh/guide/faq/not_recommended_qq.html @@ -29,12 +29,12 @@ } 为什么不建议QQ私聊咨询问题? | ZLMediaKit - - + +
    跳至主要內容

    为什么不建议QQ私聊咨询问题?

    ZLMediaKit小于 1 分钟

    为什么不建议私聊

    • 1、QQ 私聊不好追溯和整理,很难形成文档,很多重复问题, 不能对项目有所益处。

    • 2、QQ 沟通效率其实很低下,虽然能回答及时,但是提问门槛太低,提问者不够重视,往往需要回答者循环渐进引导才能大体把问题说清楚,这样很浪费时间。

    • 3、QQ 私聊消息不定时,很容易中断回答者当前工作进程,而 github issue 可以统一处理,这样更节约时间。

    • 4、QQ 私聊其他用户不能参与回答,别人也看不到问题和答案,不利于思维发散和知识传播。

    一般只接受以下无私交友谊关系人员的私聊技术咨询

    • 1、提交过 pr 或其他形式的代码
    • 2、开源过基于 zlmediakit 的项目
    • 3、在 qq 群或 issue 上热心解答过相关技术问题
    • 4、分享过自写的 zlmediakit 相关文档
    • 5、赞助过 zlmediakit 项目或本人
    • 6、做过一切对 zlmediakit 发展和推广有贡献的事情
    - + diff --git a/zh/guide/faq/rtmp_playback_compatibility_issues.html b/zh/guide/faq/rtmp_playback_compatibility_issues.html index 1ca8911..f00ba31 100644 --- a/zh/guide/faq/rtmp_playback_compatibility_issues.html +++ b/zh/guide/faq/rtmp_playback_compatibility_issues.html @@ -29,12 +29,12 @@ } RTMP播放兼容性问题 | ZLMediaKit - - + +
    跳至主要內容

    RTMP播放兼容性问题

    ZLMediaKit小于 1 分钟

    一般来说 rtmp 的规范是 先发送 metadata ,然后发送 config 帧,然后发送关键帧 然后是普通帧

    config 帧收到后就能初始化解码器了

    但是有些流不太一样,并没有收到视频的 config 帧就收到其他帧了

    这个时候视频 Track 并没创建和初始化

    初步怀疑是 nginx 的 rtmp 服务器兼容性不好

    zlm 的推流器会严格按照先发送 metadata ,然后发送 config 帧,然后发送关键帧 然后是普通帧的流程来做

    也会缓存所有的 config 帧

    ffplay 能播放成功是因为它是根据数据量和时间来判断播放成功

    只要数据量达到一定量或者时间达到一定时间 就会触发播放成功的事件

    这样做的好处是 播放成功率高 坏处是打开视频时间长

    - + diff --git a/zh/guide/index.html b/zh/guide/index.html index 3f7253b..a16c20e 100644 --- a/zh/guide/index.html +++ b/zh/guide/index.html @@ -29,8 +29,8 @@ } 指南 | ZLMediaKit - - + + @@ -38,6 +38,6 @@ docker run -id -p 1935:1935 -p 8080:80 -p 8443:443 -p 8554:554 -p 10000:10000 -p 10000:10000/udp -p 8000:8000/udp -p 9000:9000/udp zlmediakit/zlmediakit:master

    你也可以根据 Dockerfile 编译镜像:

    bash build_docker_images.sh
     
    - + diff --git a/zh/guide/install/compilation_instructions_for_windows_version.html b/zh/guide/install/compilation_instructions_for_windows_version.html index d2bcc1e..8d7adc0 100644 --- a/zh/guide/install/compilation_instructions_for_windows_version.html +++ b/zh/guide/install/compilation_instructions_for_windows_version.html @@ -29,8 +29,8 @@ } Windows 版编译说明 | ZLMediaKit - - + + @@ -69,6 +69,6 @@

    编译 64 位程序在链接 openssl 时还需要链接 Crypt32.libws2_32.lib, 正常在执行 cmake .. @CMAKE_OPTIONS 时有类似输出:

    found library:C:/work/develop/vcpkg/installed/x64-windows-static/lib/libssl.lib;C:/work/develop/vcpkg/installed/x64-windows-static/lib/libcrypto.lib;Crypt32.lib;ws2_32.lib,ENABLE_OPENSSL defined
     

    如果没有 Crypt32.lib;ws2_32.lib, 可手动修改 CMakeLists.txt 进行解决(可搜索 OPENSSL_LIBRARIES 找到对应位置).

    list(APPEND LINK_LIB_LIST ${OPENSSL_LIBRARIES} Crypt32.lib ws2_32.lib)
     
    - + diff --git a/zh/guide/install/index.html b/zh/guide/install/index.html index 39f2b89..d29c560 100644 --- a/zh/guide/install/index.html +++ b/zh/guide/install/index.html @@ -29,12 +29,12 @@ } 安装 | ZLMediaKit - - + + - + diff --git a/zh/guide/install/install_zlmediakit_using_vcpkg.html b/zh/guide/install/install_zlmediakit_using_vcpkg.html index e971e93..30dad8c 100644 --- a/zh/guide/install/install_zlmediakit_using_vcpkg.html +++ b/zh/guide/install/install_zlmediakit_using_vcpkg.html @@ -29,8 +29,8 @@ } vcpkg方式安装zlmediakit | ZLMediaKit - - + + @@ -71,6 +71,6 @@ # 然后安装动态库版本 ./vcpkg/vcpkg install zlmediakit\[core,mp4,openssl,webrtc,sctp\]:x64-linux-dynamic
    install_zlmediakit_using_vcpkg_2
    install_zlmediakit_using_vcpkg_2
    - + diff --git a/zh/guide/install/start.html b/zh/guide/install/start.html index 98edba2..1c94460 100644 --- a/zh/guide/install/start.html +++ b/zh/guide/install/start.html @@ -29,8 +29,8 @@ } 快速开始 | ZLMediaKit - - + + @@ -91,6 +91,6 @@
  • windows 下:

    ZLMediaKit/release/windows/Debug/mk_api.dll
     ZLMediaKit/release/windows/Debug/mk_api.lib
     

    SDK 头文件有详细的注释,一般足够二次开发使用。

  • test_开头的测试程序

    相关代码在ZLMediaKit/tests目录下,你可以对照代码启动测试进程。

  • 8、测试

    请参考此文章完成推流播放测试

    - + diff --git a/zh/guide/media_server/config_file.html b/zh/guide/media_server/config_file.html index baa6482..0815578 100644 --- a/zh/guide/media_server/config_file.html +++ b/zh/guide/media_server/config_file.html @@ -29,12 +29,12 @@ } 配置文件详解 | ZLMediaKit - - + + - + diff --git a/zh/guide/media_server/generate_ssl_self-signed_certificate_and_test.html b/zh/guide/media_server/generate_ssl_self-signed_certificate_and_test.html index e08f488..72b6574 100644 --- a/zh/guide/media_server/generate_ssl_self-signed_certificate_and_test.html +++ b/zh/guide/media_server/generate_ssl_self-signed_certificate_and_test.html @@ -29,8 +29,8 @@ } 生成SSL自签名证书并测试 | ZLMediaKit - - + + @@ -55,6 +55,6 @@

    4、合并公钥私钥

    cat server.crt server.key > ./ssl.pem
     

    5、加载证书

    ./MediaServer -s ./ssl.pem
     
    图片.png
    图片.png
    - + diff --git a/zh/guide/media_server/how_to_enable_https_related_functions.html b/zh/guide/media_server/how_to_enable_https_related_functions.html index 75be48c..7b23660 100644 --- a/zh/guide/media_server/how_to_enable_https_related_functions.html +++ b/zh/guide/media_server/how_to_enable_https_related_functions.html @@ -29,8 +29,8 @@ } 怎么开启https相关功能 | ZLMediaKit - - + + @@ -58,6 +58,6 @@ 127.0.0.1 test.zlmediakit.com #修改后保存退出vi
    • 打开浏览器输入 https 地址测试:
    图片
    图片
    • 查看证书:
    图片
    图片

    六、部署线上环境

    • 以上 5 步都走完了,验证通过,那么我们接下来可以部署线上环境;部署线上环境只需要把证书绑定的域名解析到您云主机的真实公网 ip 即可:
    图片
    图片
    图片
    图片
    - + diff --git a/zh/guide/media_server/index.html b/zh/guide/media_server/index.html index d7f4e72..8cbea79 100644 --- a/zh/guide/media_server/index.html +++ b/zh/guide/media_server/index.html @@ -29,12 +29,12 @@ } Media Server | ZLMediaKit - - + + - + diff --git a/zh/guide/media_server/on-demand_push_streaming.html b/zh/guide/media_server/on-demand_push_streaming.html index 3c45582..ff46453 100644 --- a/zh/guide/media_server/on-demand_push_streaming.html +++ b/zh/guide/media_server/on-demand_push_streaming.html @@ -29,12 +29,12 @@ } 实现按需推流 | ZLMediaKit - - + + - + diff --git a/zh/guide/media_server/on-demand_streaming.html b/zh/guide/media_server/on-demand_streaming.html index 287f38a..18a1a94 100644 --- a/zh/guide/media_server/on-demand_streaming.html +++ b/zh/guide/media_server/on-demand_streaming.html @@ -29,12 +29,12 @@ } 实现按需拉流 | ZLMediaKit - - + + - + diff --git a/zh/guide/media_server/play_url_rules.html b/zh/guide/media_server/play_url_rules.html index 7873b5b..1acfeb5 100644 --- a/zh/guide/media_server/play_url_rules.html +++ b/zh/guide/media_server/play_url_rules.html @@ -29,12 +29,12 @@ } 播放url规则 | ZLMediaKit - - + +
    跳至主要內容

    播放url规则

    ZLMediaKit大约 4 分钟

    1、url 的组成部分

    rtsp://somedomain.com:554/live/0?token=abcdefg&field=value为例,该 url 分为以下几个部分:

    • 协议(scheam) : rtsp 协议,默认端口 554
    • 虚拟主机(vhost) : somedomain.com,该字段既可以是域名也可以是 ip,如果是 ip 则对应的虚拟主机为__defaultVhost__
    • 服务端口号(port) : 554,如果不指定端口号,则使用协议默认端口号
    • 应用名(app) : live
    • 流ID(streamid) : 0
    • 参数(args) : token=abcdefg&field=value

    2、ZLMediaKit 中的流媒体源

    在 ZLMediaKit 中,流媒体源是一种可以被用于直播转发、推流转发等功能的数据对象,在本项目中被称作为MediaSource,目前支持 5 种类型的流媒体源,分别是RtspMediaSourceRtmpMediaSourceHlsMediaSourceTSMediaSourceFMP4MediaSource

    定位一个流媒体源,主要通过 4 个元素(我们后续称其为 4 元组),分别是:

    • 协议(scheam)
    • 虚拟主机(vhost)
    • 应用名(app)
    • 流ID(streamid)

    RtspMediaSource支持 rtsp 播放、rtsp 推流、webrtc 播放、webrtc 推流。

    RtmpMediaSource支持 rtmp 推流/播放、http-flv 播放、ws-flv 播放。

    HlsMediaSource支持 hls 播放。

    TSMediaSource 支持 http-ts 播放、ws-ts 播放。

    FMP4MediaSource 支持 http-fmp4 播放、ws-fmp4 播放。

    3、流媒体源对应的播放 url

    假定有一个RtspMediaSource,它的 4 元组分别为 rtsp(RtspMediaSource固定为rtsp)somedomain.comlive0 那么播放这个流媒体源的 url 对应为:

    • rtsp://somedomain.com/live/0
    • rtsps://somedomain.com/live/0
    • rtsp://127.0.0.1/live/0?vhost=somedomain.com
    • rtsps://127.0.0.1/live/0?vhost=somedomain.com

    如果有一个RtmpMediaSource,它的 4 元组分别为 rtmp(RtmpMediaSource固定为rtmp)somedomain.comlive0 那么播放这个流媒体源的 url 对应为:

    • rtmp://somedomain.com/live/0
    • rtmps://somedomain.com/live/0
    • rtmp://127.0.0.1/live/0?vhost=somedomain.com
    • rtmps://127.0.0.1/live/0?vhost=somedomain.com

    rtmp 类型的流媒体源也支持http-flvwebsocket直播,对应的 url 如下:

    老代码 flv 直播后缀为.flv,新代码才改成了.live.flv

    • http://somedomain.com/live/0.live.flv
    • https://somedomain.com/live/0.live.flv
    • http://127.0.0.1/live/0.live.flv?vhost=somedomain.com
    • https://127.0.0.1/live/0.live.flv?vhost=somedomain.com
    • ws://somedomain.com/live/0.live.flv
    • wss://somedomain.com/live/0.live.flv
    • ws://127.0.0.1/live/0.live.flv?vhost=somedomain.com
    • wss://127.0.0.1/live/0.live.flv?vhost=somedomain.com

    当然,ZLMediaKit 一般会把 rtsp、rtmp 流媒体源互相转换,也会转换成 hls/http-ts/ws-ts/http-fmp4/ws-fmp4,播放的 url 如下:

    • HLS(mpegts)

      • http://somedomain.com/live/0/hls.m3u8
      • https://somedomain.com/live/0/hls.m3u8
      • http://127.0.0.1/live/0/hls.m3u8?vhost=somedomain.com
      • https://127.0.0.1/live/0/hls.m3u8?vhost=somedomain.com
    • HLS(fmp4)

      • http://somedomain.com/live/0/hls.fmp4.m3u8
      • https://somedomain.com/live/0/hls.fmp4.m3u8
      • http://127.0.0.1/live/0/hls.fmp4.m3u8?vhost=somedomain.com
      • https://127.0.0.1/live/0/hls.fmp4.m3u8?vhost=somedomain.com
    • HTTP-TS/WS-TS(后缀为.live.ts,目的是为了解决与 hls 的冲突)

      • http://somedomain.com/live/0.live.ts
      • https://somedomain.com/live/0.live.ts
      • http://127.0.0.1/live/0.live.ts?vhost=somedomain.com
      • https://127.0.0.1/live/0.live.ts?vhost=somedomain.com
      • ws://somedomain.com/live/0.live.ts
      • wss://somedomain.com/live/0.live.ts
      • ws://127.0.0.1/live/0.live.ts?vhost=somedomain.com
      • wss://127.0.0.1/live/0.live.ts?vhost=somedomain.com
    • HTTP-fMP4/WS-fMP4(后缀为.live.mp4,目的是为了解决与 mp4 点播的冲突)

      • http://somedomain.com/live/0.live.mp4
      • https://somedomain.com/live/0.live.mp4
      • http://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
      • https://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
      • ws://somedomain.com/live/0.live.mp4
      • wss://somedomain.com/live/0.live.mp4
      • ws://127.0.0.1/live/0.live.mp4?vhost=somedomain.com
      • wss://127.0.0.1/live/0.live.mp4?vhost=somedomain.com

    一般而言,上述 url 在 ZLMediaKit 都有效,因为 ZLMediaKit 默认转换流媒体源。

    4、点播 url

    ZLMediaKit 的点播一般通过 mp4 文件来实现,推荐大家使用 http mp4 点播,这样是最简单,服务器也无需解复用 mp4 文件,当然 ZLMediaKit 目前也支持 rtsp、rtmp、http-flv、websocket-flv 的 mp4 点播, 对应的 url 跟直播 url 类似,不在赘述,这里只介绍区别。

    • ZLMediaKit 对点播限制应用名,默认为record
    • 假如一个 mp4 文件放置在 http 根目录 record 文件夹(www/record)下,他的相对路径为:www/record/0.mp4,那么点播 url 则为:
      • rtsp://somedomain.com/record/0.mp4
      • rtmp://somedomain.com/record/0.mp4
      • http://somedomain.com/record/0.mp4(这里是通用的 http 文件点播,服务器不用解复用文件)
      • http://somedomain.com/record/0.mp4.live.flv(这里是 http-flv 直播,不是 http 点播,服务器需要解复用文件)
      • ws://somedomain.com/record/0.mp4.live.flv
      • http://somedomain.com/record/0.mp4.live.ts(这里是 http-ts 直播,不是 http 点播,服务器需要解复用文件)
      • ws://somedomain.com/record/0.mp4.live.ts
      • http://somedomain.com/record/0.mp4.live.mp4(这里是 http-fmp4 直播,不是 http 点播,服务器需要解复用文件)
      • ws://somedomain.com/record/0.mp4.live.mp4
    • 如果开启了虚拟主机,那么点播文件需要放置在 www/somedomain.com/record/0.mp4

    5、webrtc 推流/播放

    webrtc播放跟上述方式不太一样,webrtc 协议本身不定义信令交互协议,用户自己去实现sdp+icecandidate交换逻辑,所以webrtc并没有一个标准的播放器,需要自己使用 js 或 native sdk 去实现播放。

    zlmediakit实现的webrtc sdp+icecandidate交换方式是http post方式,接口名为/index/api/webrtc, 该接口使用 post content 传递 offer sdp, 同时 url query 参数传递媒体源 4 元组中的app steam_id,由于 http 协议本身支持vhost,所以不需要另外指定vhostwebrtczlmediakit中可以认为是 rtsp 协议的另外表现形式,他们推流、播放使用的数据源都相同,都是RtspMediaSource

    在 webrtc 推流时,交互webrtc sdp+icecandidate的 http post 接口类似为:http://127.0.0.1/index/api/webrtc?app=live&stream=test&type=push

    在 webrtc 播放时,交互webrtc sdp+icecandidate的 http post 接口类似为:http://127.0.0.1/index/api/webrtc?app=live&stream=test&type=play

    zlmeiakit 工程自带 webrtc 测试播放/推流器,用户启动 zlmediakit 后,浏览器访问http://127.0.0.1/webrtc/就可以访问之。

    另外,zlmediakit 也支持使用 webrtc 播放 mp4 文件,http post 接口类似为:http://127.0.0.1/index/api/webrtc?app=record&stream=test.mp4&type=play

    6、url 参数

    ZLMediaKit 会识别 url 中问号后面的字符串为 url 参数,其格式跟 http 一致,其中参数vhost是 ZLMediaKit 内置支持的参数,支持指定 vhost。 url 参数主要用于播放、推流鉴权,在触发 hook api 时,会把这些参数提交给第三方业务服务器

    - + diff --git a/zh/guide/media_server/playback_authentication.html b/zh/guide/media_server/playback_authentication.html index 3c5b254..bf467e4 100644 --- a/zh/guide/media_server/playback_authentication.html +++ b/zh/guide/media_server/playback_authentication.html @@ -29,12 +29,12 @@ } 实现播放鉴权 | ZLMediaKit - - + + - + diff --git a/zh/guide/media_server/push_authentication.html b/zh/guide/media_server/push_authentication.html index d7aa0e3..7e6fbee 100644 --- a/zh/guide/media_server/push_authentication.html +++ b/zh/guide/media_server/push_authentication.html @@ -29,12 +29,12 @@ } 实现推流鉴权 | ZLMediaKit - - + + - + diff --git a/zh/guide/media_server/push_test.html b/zh/guide/media_server/push_test.html index ed23a04..7aff5cc 100644 --- a/zh/guide/media_server/push_test.html +++ b/zh/guide/media_server/push_test.html @@ -29,8 +29,8 @@ } 推流播放测试 | ZLMediaKit - - + + @@ -49,6 +49,6 @@ ^ ^ ^ ^ schema vhost app stream_id

    播放地址

    请按照播放 url 规则来播放上述的推流。

    - + diff --git a/zh/guide/media_server/restful_api.html b/zh/guide/media_server/restful_api.html index aca415f..0068bf3 100644 --- a/zh/guide/media_server/restful_api.html +++ b/zh/guide/media_server/restful_api.html @@ -29,8 +29,8 @@ } RESTful 接口 | ZLMediaKit - - + + @@ -521,6 +521,6 @@ ] }
    - + diff --git a/zh/guide/media_server/sequence_diagram.html b/zh/guide/media_server/sequence_diagram.html index 3c21535..b6cb8e1 100644 --- a/zh/guide/media_server/sequence_diagram.html +++ b/zh/guide/media_server/sequence_diagram.html @@ -29,12 +29,12 @@ } 时序图 | ZLMediaKit - - + + - + diff --git a/zh/guide/media_server/start_server.html b/zh/guide/media_server/start_server.html index 76c6cc1..f1f4d89 100644 --- a/zh/guide/media_server/start_server.html +++ b/zh/guide/media_server/start_server.html @@ -29,8 +29,8 @@ } 服务器的启动与关闭 | ZLMediaKit - - + + @@ -43,6 +43,6 @@ -s --ssl 有参 默认:/Users/xzl/git/ZLMediaKit/release/mac/Debug/ssl.p12 选填 ssl证书文件或文件夹,支持p12/pem类型 -t --threads 有参 默认:8 选填 启动事件触发线程数
    • 说明:

      • -d(--daemon): 是否以守护进程的方式启动,守护进程只做一件事,就是判断子进程(这个才是干活的进程)是否已经退出,退出后会不断尝试重启子进程。
      • -l(--level): 指定日志打印等级,赋值范围为 0~4,等级越高,日志越少。
      • -m(--max_day): 日志文件保存天数,程序本次运行期间的日志如果超过这个天数,就会被删除。
      • -c(--config): 指定配置文件路径,配置文件为 ini 格式,请参考 ZLMediaKit 的默认配置文件。
      • -s(--ssl): 指定 ssl 证书路径,证书格式支持 p12 和 pem 类型,里面必须包含公钥和私钥,私钥不能有加密密码。如果指定文件夹,会加载文件夹下所有证书。
      • -t(--threads): 指定事件驱动线程(干重活)和后台工作线程(干阻塞的活)个数。
    • 启动命令:

    图片
    图片
    • 注意事项:
      • 1、如果你启动 MediaServer 后需要关闭 shell,那么好需要输入 exit退出 shell,否则关闭 shell 会导致 MediaServer 一起被关闭。
      • 2、如果你会使用到 FFmpeg 相关功能,你应该这样启动程序nohup ./MediaServer -d &,否则在 fork FFmpeg 进程时会导致 MediaServer 进程挂起。

    配置文件的热加载

    修改并保存配置文件后,在 shell 里面输入killall -1 MediaServer就能使 ZLMediaKit 热加载配置文件,如果生效,会打印下面样式的日志: 图片

    关闭服务器

    • 如果你是后台启动方式,请在 shell 中输入killall -2 MediaServer以便优雅关闭服务器(程序收到 SIGINT 信号后会自动释放资源并退出)。
    • 否则你可以同时按下Ctr + C退出程序。
    • MediaServer 退出时日志如下:
    图片
    图片
    - + diff --git a/zh/guide/media_server/web_hook_api.html b/zh/guide/media_server/web_hook_api.html index 2cfffeb..d5c536d 100644 --- a/zh/guide/media_server/web_hook_api.html +++ b/zh/guide/media_server/web_hook_api.html @@ -29,8 +29,8 @@ } Web Hook 接口 | ZLMediaKit - - + + @@ -647,6 +647,6 @@ "mediaServerId" : "192.168.255.10" }
  • 请求参数详解:

    参数名参数类型参数解释
    local_portintopenRtpServer 输入的参数
    re_use_portboolopenRtpServer 输入的参数
    ssrcuint32openRtpServer 输入的参数
    stream_idstringopenRtpServer 输入的参数
    tcp_modeintopenRtpServer 输入的参数
    mediaServerIdstring服务器 id,通过配置文件设置
  • - + diff --git a/zh/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html b/zh/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html index 06a9847..c110f8d 100644 --- a/zh/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html +++ b/zh/guide/protocol/gb28181/gb28181_sip_signaling_packet_capture.html @@ -29,8 +29,8 @@ } GB28181 SIP信令抓包 | ZLMediaKit - - + + @@ -172,6 +172,6 @@ User-Agent: Hikvision Content-Length: 0
    - + diff --git a/zh/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html b/zh/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html index 4533910..4fcd7f0 100644 --- a/zh/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html +++ b/zh/guide/protocol/gb28181/how_to_use_device_id_as_stream_id.html @@ -29,12 +29,12 @@ } GB28181怎么用设备ID作为流ID | ZLMediaKit - - + +
    跳至主要內容

    GB28181怎么用设备ID作为流ID

    ZLMediaKit大约 1 分钟

    为了支持 RTP 流的识别(与摄像头 ID 产生关联), 必须通过 源地址ssrc本地端口号 来区分.

    但是在 issue #338 里面有开发者反馈,有些设备不支持设置 ssrc,ssrc 一直为 0.

    而源地址端口也会一直变,RTP 推流前 SIP 服务器也不知道摄像头推流端口(甚至 IP 都不知道) 那么区分流只通过源地址也不现实, 因为一个局域网内也可能多个设备, 如果 ZLMediaKit 在公网,那么这些流的 IP 是一致的,而端口是随机的,根本没法跟摄像头 ID 对应起来.

    所以为了实现 RTP 推流参数的流 ID 与摄像头 ID 产生关联,就基本只剩下本地端口号这条路了,这就意味着一个端口只能接受一个流。

    在不指定流 ID 时,ZLMediaKit 的行为跟之前完全一样,单端口支持多流,ssrc 作为 stream id。

    如果指定了该端口绑定的流 ID,那么该端口只能接收一路流。

    以下是关键代码:

    image
    image
    image
    image
    image
    image
    image
    image
    image
    image
    image
    image
    - + diff --git a/zh/guide/protocol/gb28181/index.html b/zh/guide/protocol/gb28181/index.html index 7821ee1..2f7a8c2 100644 --- a/zh/guide/protocol/gb28181/index.html +++ b/zh/guide/protocol/gb28181/index.html @@ -29,12 +29,12 @@ } Gb28181 | ZLMediaKit - - + + - + diff --git a/zh/guide/protocol/gb28181/push_streaming.html b/zh/guide/protocol/gb28181/push_streaming.html index 6e6c9e1..7a35f84 100644 --- a/zh/guide/protocol/gb28181/push_streaming.html +++ b/zh/guide/protocol/gb28181/push_streaming.html @@ -29,14 +29,14 @@ } GB28181推流 | ZLMediaKit - - + +
    跳至主要內容

    GB28181推流

    ZLMediaKit大约 3 分钟

    介绍

    ZLMediaKit 支持 GB28181 的 ps-rtp 推流,支持的编码格式分别为 h264/h265/aac/g711/opus。 在收到 GB28181 推流后,ZLMediaKit 会依次做以下事情:

    • rtp 排序去重。
    • rtp 解析成 ps 或 ts。
    • ps 或 ts 解析成h264/h265/aac/g711/opus
    • 输入到复用器,生成 rtsp/rtmp/ts/fmp4 等格式,以便转换成其他协议或容器。

    简单使用

    ZLMediaKit 默认开启 10000 端口用于接收 UDP/TCP 的 GB28181 推流,由于国标推流不好测试,ZLMediaKit 同时也支持 rtp_mpegts 推流,代码会自适应判断是否为 ps 还是 ts。 所以如果大家没有摄像头的情况下,可以用 FFmpeg 简单测试,基本上体验跟国标推流并无二致。

    • ffmpeg 推流命令:
     ffmpeg -re -i www/record/robot.mp4 -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000
     
    • MediaServer 收到推流后的日志: 图片

    上图中,这个推流的 rtp ssrc 为 BFC2C622(16 进制打印),这个流的 app 为rtp, stream_id 为BFC2C622,您可以根据wiki来组合成 url 并播放这个流。

    需要指出的是,国标推流的 app 固定为 rtp,你只能通过代码来修改它,stream_id 为 rtp 流的 ssrc,这个是随机的,在 FFmpeg 中貌似没法控制。

    另外,每次推流时,请更换 ssrc,否则 ZLMediaKit 发现推流端 ip 和端口变化后,会直接丢弃 rtp 包(现象如此issueopen in new window);这样做的目的是为了防止两个设备使用同一个 ssrc 推流时互相干扰。

    高阶使用

    在推流给 10000 端口时,您可能发现有个缺陷,就是 stream_id 是 ssrc,比较抽象,可能还没法控制。

    那么我们能否自定义 stream_id? 答案是肯定的,ZLMediaKit 通过restful api可以动态开启国标收流端口(同时支持 udp/tcp 模式)。

    在使用 openRtpServer 接口动态开启国标收流端口后,这个端口只能产生一个流,也就是说,一个摄像头需要一个服务器端口用于接收国标推流。

    • 以下是演示范例(postman 工具调用 openRtpServer 接口创建随机端口):
    图片
    图片
    • 然后启动 FFmpeg 推流
     ffmpeg -re -i www/record/robot.mp4 -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:50077
     
    • 以下是推流后注册的服务器日志 图片

    • 需要指出的是,如果 openRtpServer 接口创建的端口一直没收到流(或者解析不出流),那么会自动关闭和释放。

    调试文件生成

    如果你的 MediaServer 能收到国标推流,但是未出现媒体注册相关日志,那么有可能是流有些异常,你可以修改配置文件rtp_proxy.dumpDir指定调试文件导出目录, 这样 ZLMediaKit 会把国标流导出到该文件夹,就像这样:

    图片
    图片

    你可以直接用 ffplay 播放mp2/video后缀的文件rtp后缀的文件,你可以用测试工具test_rtp调试,或者你可以把它分享给其他人帮你分析原因。

    让 ZLMediaKit 往其他国标服务器推流

    你可以使用restful api让 ZLMediaKit 生成国标流并往其他服务器推送,支持其他任何已注册的流转国标流。

    • postman 调用 startSendRtp 接口推送国标流:
    图片
    图片
    图片
    图片
    • 上图中是推送国标流给自己,当然你也可以推送给其他服务器,支持 udp/tcp 方式推流。

    性能

    GB28181 的推流性能测试,请参考:#961open in new window

    丢包问题调试

    如果在测试 GB28181 UDP 推流时,频繁打印以下日志:

    图片
    图片

    请查看此issueopen in new window,特别提示,wifi 情况下,由于无线网络干扰严重,丢包问题很可能确实是网络质量差导致的。

    相关文章推荐阅读

    WVP+ZLMediaKit+MediaServerUI 实现摄像头 GB28181 推流播放录制open in new window

    使用 GB28181.Solution + ZLMediaKit + MediaServerUI 进行摄像头推流和播放open in new window

    GB28181 语音对讲open in new window

    - + diff --git a/zh/guide/protocol/index.html b/zh/guide/protocol/index.html index 8d1a4ba..65e43eb 100644 --- a/zh/guide/protocol/index.html +++ b/zh/guide/protocol/index.html @@ -29,12 +29,12 @@ } 协议相关 | ZLMediaKit - - + +
    跳至主要內容

    协议相关

    ZLMediaKit小于 1 分钟

    目录

    暂无目录

    - + diff --git a/zh/guide/protocol/srt/index.html b/zh/guide/protocol/srt/index.html index aca06d7..61ca21c 100644 --- a/zh/guide/protocol/srt/index.html +++ b/zh/guide/protocol/srt/index.html @@ -29,8 +29,8 @@ } SRT | ZLMediaKit - - + + @@ -42,6 +42,6 @@ streamid = test

    是推流

    • OBS 推流地址

      srt://192.168.1.105:9000?streamid=#!::r=live/test,m=publish

    • ffmpeg 推流

      ffmpeg -re -stream_loop -1 -i test.ts -c:v copy -c:a copy -f mpegts srt://192.168.1.105:9000?streamid=#!::r=live/test,m=publish

    • ffplay 拉流

      ffplay -i srt://192.168.1.105:9000?streamid=#!::r=live/test

    • vlc 拉流

      • vlc 拉流需要在偏好设置->串流输出->访问输出->SRT 中设置 streamid,例如#!::r=live/test
      • 拉流时只需填入srt://192.168.1.105:9000即可
    - + diff --git a/zh/guide/protocol/webrtc/index.html b/zh/guide/protocol/webrtc/index.html index 84305f1..aaa4e33 100644 --- a/zh/guide/protocol/webrtc/index.html +++ b/zh/guide/protocol/webrtc/index.html @@ -29,12 +29,12 @@ } Webrtc | ZLMediaKit - - + + -
    跳至主要內容

    Webrtc

    ZLMediaKit小于 1 分钟

    目录

    暂无目录

    - +
    跳至主要內容

    Webrtc

    ZLMediaKit小于 1 分钟

    目录

    暂无目录

    + diff --git a/zh/guide/protocol/webrtc/webrtc_compilation_and_use.html b/zh/guide/protocol/webrtc/webrtc_compilation_and_use.html index 314fd3e..470a485 100644 --- a/zh/guide/protocol/webrtc/webrtc_compilation_and_use.html +++ b/zh/guide/protocol/webrtc/webrtc_compilation_and_use.html @@ -28,13 +28,13 @@ document.documentElement.setAttribute("data-theme", "dark"); } - webrtc编译与使用 | ZLMediaKit - - + webrtc 编译与使用 | ZLMediaKit + + -
    跳至主要內容

    webrtc编译与使用

    ZLMediaKit大约 3 分钟

    环境

    编译机器:
    +    
    跳至主要內容

    webrtc 编译与使用

    ZLMediaKit大约 3 分钟

    环境

    编译机器:
     centos 7.6
     gcc version 5.4.0 (GCC)
     cmake version 3.20.5
    @@ -92,7 +92,7 @@
     rembBitRate=1000000
     

    测试

    最新的 zlmediakit 源码自带有效的 ssl 证书default.pem,对应的域名是default.zlmediakit.com,该域名解析到的 ip 为127.0.0.1,用户在浏览器中打开 https://default.zlmediakit.com/webrtc/open in new window即可开始测试。请先推流后,再测试播放。如果 webrtc 无法播放, 请参考此issueopen in new window

    问题解决

    Q And A(播放问题) ?

    • obs 推流 rtc 播放一卡一卡?

      web 的 rtc h264 不支持 B 帧,需要去掉 B 帧, 使用 FFmpeg 时需要添加-bf 0参数,或者指定 h264 profile 为 baseline

    • rtsp 推流,rtc 播放不成功?

      rtsp 推流需要把 zlm 的配置文件中的 directProxy 设置为 0

    • webrtc 视频或者音频播放不出来?

      web 客户端的 rtc 支持 h264,opus/48000/2,pcma/8000,pcmu/8000 等编码格式,检查一下编码格式是否正确,一般都是音频不支持,需要使用 transcode 分支来转码(视频不会转码)

    - +
  • ubuntu 编译

    可以参考网友大神自制这里open in new window

  • windows 编译

    可以参考网友大神自制这里open in new window

    还有这里open in new window

  • Q And A(播放问题) ?

    • obs 推流 rtc 播放一卡一卡?

      web 的 rtc h264 不支持 B 帧,需要去掉 B 帧, 使用 FFmpeg 时需要添加-bf 0参数,或者指定 h264 profile 为 baseline

    • rtsp 推流,rtc 播放不成功?

      rtsp 推流需要把 zlm 的配置文件中的 directProxy 设置为 0

    • webrtc 视频或者音频播放不出来?

      web 客户端的 rtc 支持 h264,opus/48000/2,pcma/8000,pcmu/8000 等编码格式,检查一下编码格式是否正确,一般都是音频不支持,需要使用 transcode 分支来转码(视频不会转码)

    + diff --git a/zh/guide/protocol/webrtc/webrtc_signaling_interaction_format.html b/zh/guide/protocol/webrtc/webrtc_signaling_interaction_format.html index 7b6116b..a76f4dd 100644 --- a/zh/guide/protocol/webrtc/webrtc_signaling_interaction_format.html +++ b/zh/guide/protocol/webrtc/webrtc_signaling_interaction_format.html @@ -29,12 +29,12 @@ } webrtc信令交互格式 | ZLMediaKit - - + + -
    跳至主要內容

    webrtc信令交互格式

    ZLMediaKit大约 5 分钟

    前言

    zlmediakit webrtc 信令格式新增支持 whip/whep 标准,测试地址如下:

    推流:https://zlmediakit.com/index/api/whip?app=live&stream=test

    拉流:https://zlmediakit.com/index/api/whep?app=live&stream=test

    本文后续篇幅为私有信令格式。

    一、webrtc sdp 交换请求基本格式

    • 请求地址: /index/api/webrtc?app=live&stream=test&type=[push/play/echo]
    • 请求方式: http post
    • 请求 body: webrtc offer sdp
    • 回复 body:
    {
    +    
    跳至主要內容

    webrtc信令交互格式

    ZLMediaKit大约 5 分钟

    前言

    zlmediakit webrtc 信令格式新增支持 whip/whep 标准,测试地址如下:

    推流:https://zlmediakit.com/index/api/whip?app=live&stream=test

    拉流:https://zlmediakit.com/index/api/whep?app=live&stream=test

    本文后续篇幅为私有信令格式。

    一、webrtc sdp 交换请求基本格式

    • 请求地址: /index/api/webrtc?app=live&stream=test&type=[push/play/echo]
    • 请求方式: http post
    • 请求 body: webrtc offer sdp
    • 回复 body:
    {
       "code": 0,
       "id": "zlm_1",
       "sdp": "v=0\r\no=mozilla...THIS_IS_SDPARTA-99.0 6880954646154322397 0 IN IP4 172.18.190.185\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1\r\na=msid-semantic: WMS *\r\na=ice-lite\r\nm=audio 8000 UDP/TLS/RTP/SAVPF 0\r\nc=IN IP4 172.18.190.185\r\na=rtcp:8000 IN IP4 172.18.190.185\r\na=ice-ufrag:rBK+uR9AAAA=_2\r\na=ice-pwd:H4rtFC1xhef0ynU2lk8z22ha\r\na=fingerprint:sha-256 6E:EF:E7:75:56:2A:66:DF:6C:9D:72:B6:A5:21:35:73:19:66:D8:00:F4:BC:36:59:61:1B:5D:35:13:99:14:AE\r\na=setup:passive\r\na=mid:0\r\na=ice-lite\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2/sendonly urn:ietf:params:rtp-hdrext:csrc-audio-level\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:0 PCMU/8000/1\r\na=candidate:udpcandidate 1 udp 120 172.18.190.185 8000 typ host\r\nm=video 8000 UDP/TLS/RTP/SAVPF 126 127\r\nc=IN IP4 172.18.190.185\r\na=rtcp:8000 IN IP4 172.18.190.185\r\na=ice-ufrag:rBK+uR9AAAA=_2\r\na=ice-pwd:H4rtFC1xhef0ynU2lk8z22ha\r\na=fingerprint:sha-256 6E:EF:E7:75:56:2A:66:DF:6C:9D:72:B6:A5:21:35:73:19:66:D8:00:F4:BC:36:59:61:1B:5D:35:13:99:14:AE\r\na=setup:passive\r\na=mid:1\r\na=ice-lite\r\na=extmap:4 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:5 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:6/sendonly http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:7 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:126 H264/90000\r\na=rtcp-fb:126 ccm fir\r\na=rtcp-fb:126 goog-remb\r\na=rtcp-fb:126 nack\r\na=rtcp-fb:126 nack pli\r\na=rtcp-fb:126 transport-cc\r\na=fmtp:126 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f;x-google-max-bitrate=8000;x-google-min-bitrate=4000;x-google-start-bitrate=6000\r\na=rtpmap:127 rtx/90000\r\na=fmtp:127 apt=126\r\na=candidate:udpcandidate 1 udp 120 172.18.190.185 8000 typ host\r\n",
    @@ -155,7 +155,7 @@
        "type" : "answer"
     }
     
    -
    - +
    + diff --git a/zh/guide/sdk/how_to_create_a_live_steam.html b/zh/guide/sdk/how_to_create_a_live_steam.html index a53e852..4ae7c58 100644 --- a/zh/guide/sdk/how_to_create_a_live_steam.html +++ b/zh/guide/sdk/how_to_create_a_live_steam.html @@ -29,12 +29,12 @@ } 怎样创建直播流 | ZLMediaKit - - + +
    跳至主要內容

    怎样创建直播流

    ZLMediaKit小于 1 分钟

    How to create a live steam
    How to create a live steam
    - + diff --git a/zh/guide/sdk/index.html b/zh/guide/sdk/index.html index 64ece21..7e5d538 100644 --- a/zh/guide/sdk/index.html +++ b/zh/guide/sdk/index.html @@ -29,12 +29,12 @@ } SDK API | ZLMediaKit - - + +
    跳至主要內容

    SDK API

    ZLMediaKit小于 1 分钟

    目录

    暂无目录

    - + diff --git a/zh/index.html b/zh/index.html index 68d9321..fd1c85a 100644 --- a/zh/index.html +++ b/zh/index.html @@ -29,12 +29,12 @@ } 首页 | ZLMediaKit - - + +
    跳至主要內容
    ZLMediaKit

    ZLMediaKit

    一个基于C++11的高性能运营级流媒体服务框架.

    如何使用💡文档

    特性

    特性

    该项目是一个商用级流媒体服务器流媒体解决方案,其中包括移动嵌入式跨平台支持以及网络编程二次开发SDK.

    c++11开发

    采用C++11开发,避免使用原始指针,提供稳定可靠的代码和卓越的性能.

    支持多种协议

    支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4/WebRTC)与协议间互相转换

    高并发与高性能

    采用多路复用/多线程/异步网络IO模型开发,提供卓越的并发性能,支持海量客户端连接.

    稳定可靠的生产环境使用

    代码经过广泛的稳定性和性能测试,在生产环境中得到广泛应用.

    跨平台兼容性

    支持包括Linux、macOS、iOS、Android和Windows在内的所有主要平台.

    多指令集平台支持

    支持多种指令集平台,如x86、arm、risc-v、mips、龙芯和申威.

    极速启动和低延迟

    提供极速启动,极低延迟(在500毫秒以内,甚至可以低至100毫秒),提供优异的用户体验.

    用于集成的C API

    提供全面的标准C API,可用作SDK或被其他语言调用.

    完整的媒体服务器解决方案

    提供完整的媒体服务器,可直接部署为商用服务器,无需额外开发.

    RESTful API和Web Hook

    提供完整的RESTful API和Web Hook,支持丰富的业务逻辑.

    视频监控桥接

    打通了视频监控协议栈与直播协议栈,对RTSP/RTMP支持都很完善.

    完善的编解码器支持

    全面支持H265/H264/AAC/G711/OPUS.

    高级功能

    功能完善,支持集群、按需转协议、按需推拉流、先播后推、断连续推等功能.

    极致性能和可扩展性

    极致性能,支持单台机器上的10W级播放器和100Gb/s级IO带宽能力.

    独家功能

    全面支持IPv6网络,并通过独家功能提供终极用户体验.

    - + diff --git a/zh/more/collaborative_projects.html b/zh/more/collaborative_projects.html index b03fd12..c89a0d1 100644 --- a/zh/more/collaborative_projects.html +++ b/zh/more/collaborative_projects.html @@ -29,12 +29,12 @@ } 合作项目 | ZLMediaKit - - + +
    跳至主要內容

    合作项目

    ZLMediaKit大约 1 分钟

    - + diff --git a/zh/more/contact.html b/zh/more/contact.html index 26f6567..a7a9934 100644 --- a/zh/more/contact.html +++ b/zh/more/contact.html @@ -29,12 +29,12 @@ } 联系我们 | ZLMediaKit - - + +
    跳至主要內容

    联系我们

    ZLMediaKit小于 1 分钟

    联系信息

    • 邮箱:1213642868@qq.com(本项目相关或流媒体相关问题请走 issue 流程,否则恕不邮件答复)

    • 请关注微信公众号获取最新消息推送:

      图片
      图片
    • 也可以自愿有偿加入知识星球咨询和获取资料:

      图片
      图片
    - + diff --git a/zh/more/index.html b/zh/more/index.html index 350a325..9bc954b 100644 --- a/zh/more/index.html +++ b/zh/more/index.html @@ -29,12 +29,12 @@ } More | ZLMediaKit - - + +
    跳至主要內容

    More

    ZLMediaKit小于 1 分钟

    目录

    暂无目录

    - + diff --git a/zh/more/license.html b/zh/more/license.html index 80655b3..45f198e 100644 --- a/zh/more/license.html +++ b/zh/more/license.html @@ -29,12 +29,12 @@ } 授权协议 | ZLMediaKit - - + +
    跳至主要內容

    授权协议

    ZLMediaKit小于 1 分钟

    本项目自有代码使用宽松的 MIT 协议,在保留版权信息的情况下可以自由应用于各自商用、非商业的项目。 但是本项目也零碎的使用了一些其他的开源代码,在商用的情况下请自行替代或剔除; 由于使用本项目而产生的商业纠纷或侵权行为一概与本项目及开发者无关,请自行承担法律风险。 在使用本项目代码时,也应该在授权协议中同时表明本项目依赖的第三方库的协议。

    - + diff --git a/zh/more/thanks.html b/zh/more/thanks.html index a8e0c70..05ce6de 100644 --- a/zh/more/thanks.html +++ b/zh/more/thanks.html @@ -29,12 +29,12 @@ } 致谢 | ZLMediaKit - - + +
    跳至主要內容

    致谢

    ZLMediaKit大约 2 分钟

    特别感谢

    本项目采用了老陈open in new windowmedia-serveropen in new window 库, 本项目的 ts/fmp4/mp4/ps 容器格式的复用解复用都依赖 media-server 库。在实现本项目诸多功能时,老陈多次给予了无私热情关键的帮助, 特此对他表示诚挚的感谢!

    致谢

    感谢以下各位对本项目包括但不限于代码贡献、问题反馈、资金捐赠等各种方式的支持!以下排名不分先后:

    老陈open in new windowGemfieldopen in new window南冠彤open in new window凹凸慢open in new windowchenxiaoleiopen in new window史前小虫open in new window清涩绿茶open in new window3503207480open in new windowDroidChowopen in new window阿塞open in new window火宣open in new windowγ 瑞 γ ミopen in new windowlinkingvisionopen in new window茄子open in new window好心情浮沉open in new windowXiaofeng Wangopen in new windowdoodoocoderopen in new windowqingciopen in new windowswwheiheiopen in new windowKKKKK5Gopen in new windowZhou WeiminJim Jinopen in new window西瓜丶MingZhuLiuopen in new windowchengxiaoshengopen in new windowbig pandatanningzhongopen in new windowhctym1995open in new windowhewenyuanopen in new windowsunhuimirsKevin ChengLiu Jiangalongopen in new windowqingcilyg1949zhlong大裤衩droid.chow陈晓林open in new windowCharleyWangHZopen in new windowJohnnyopen in new windowDoubleX69open in new windowlawrencehjopen in new windowyangkunXinghua Zhaohejilinopen in new windowrqb500open in new windowAlexopen in new windowDw9open in new window明月惊鹊cgmhejilinalexliyu7352cgmhaorui wangopen in new windowjoshuafcJayChen0519open in new windowzxwangckerWuPengstarryopen in new windowmtdxcopen in new window胡刚风open in new windowzhao85open in new windowdreamisdreamopen in new windowdingcanopen in new windowHaibo Chenopen in new windowLeonopen in new windowcustompalopen in new windowPioLingopen in new windowKevinZangopen in new windowgongluckopen in new windowa-ucontrolopen in new windowTalusLopen in new windowahaooahazopen in new windowTempoTianopen in new windowDerek Liuopen in new windowljx0305open in new window朱如洪 open in new windowlijinopen in new windowPioLingopen in new windowBackT0TheFutureopen in new windowperaraopen in new windowcodeRATnyopen in new windowdengjfzhopen in new window百鸣open in new windowfruit Juiceopen in new windowtbagoopen in new windowLuoshopen in new windowlinxiaoyan87open in new windowwakenopen in new windowDeepslientopen in new windowimp_rayjayopen in new windowArmstrongCNopen in new windowleibnewtonopen in new window1002victoropen in new window

    同时感谢 JetBrains 对开源项目的支持,本项目使用 CLion 开发与调试:

    JetBrainsopen in new window
    JetBrains
    - + diff --git a/zh/more/use_cases.html b/zh/more/use_cases.html index 9ebc85a..8e60bb6 100644 --- a/zh/more/use_cases.html +++ b/zh/more/use_cases.html @@ -29,12 +29,12 @@ } 使用案例 | ZLMediaKit - - + +
    跳至主要內容

    使用案例

    ZLMediaKit小于 1 分钟

    本项目已经得到不少公司和个人开发者的认可,据作者不完全统计, 使用本项目的公司包括知名的互联网巨头、国内排名前列的云服务公司、多家知名的 AI 独角兽公司, 以及一系列中小型公司。使用者可以通过在 issueopen in new window 上粘贴公司的大名和相关项目介绍为本项目背书,感谢支持!

    - + diff --git a/zh/reference/development_log/hls_high_performance_journey.html b/zh/reference/development_log/hls_high_performance_journey.html index 7da92e2..3479187 100644 --- a/zh/reference/development_log/hls_high_performance_journey.html +++ b/zh/reference/development_log/hls_high_performance_journey.html @@ -29,8 +29,8 @@ } zlmediakit的hls高性能之旅 | ZLMediaKit - - + + @@ -117,6 +117,6 @@ return ret; }

    通过本次优化,zlmediakit 的 hls 服务有比较大的性能提升,性能上限大概提升到了 6K 左右(压测途中还发现拉流压测客户端由于 mktime 函数导致的性能瓶颈问题,在此不展开描述),但是还是离预期有些差距:

    图片.png
    图片.png

    小插曲: mktime 函数导致拉流压测工具性能受限

    图片.png
    图片.png

    在开启共享 mmap 后,发现性能上升到 6K 并发时,还是上不去;于是我登录服务器使用gdb -p调试进程,通过info threads 查看线程情况,发现大量线程处于阻塞状态,这也就是为什么 zlmediakit 占用 cpu 不高,但是并发却上不去的原因:

    图片.png
    图片.png

    为什么这么多线程都处于互斥阻塞状态?zlmediakit 在使用互斥锁时,还是比较注意缩小临界区的,一些复杂耗时的操作一般都会放在临界区之外;经过一番思索,我才恍然大悟,原因是:

    压测客户端由于是单进程,共享同一份 hls cookie,在访问 zlmediakit 时,这些分布在不同线程的请求,其 cookie 都相同,导致所有线程同时大规模操作同一个 cookie,而操作 cookie 是要加锁的,于是这些线程疯狂的同时进行锁竞争,虽然不会死锁,但是会花费大量的时间用在锁等待上,导致整体性能降低。

    虽然在真实使用场景下,用户 cookie 并不一致,这种几千用户同时访问同一个 cookie 的情况并不会存在,但是为了考虑不影响 hls 性能压测,也为了杜绝一切隐患,针对这个问题,我于是对 http/hls 的 cookie 机制进行了修改,在操作 cookie 时,不再上锁:

    图片.png图片.png

    之前对 cookie 上锁属于过度设计,当时目的主要是为了实现在 cookie 上随意挂载数据。

    优化之旅三:hls m3u8 文件内存化

    经过上面两次优化,zlmediakit 的 hls 并发能力可以达到 8K 了,但是当 hls 播放器个数达到在 8K 左右时,zlmediakit 的 ts 切片下载开始超时,可见系统还是存在性能瓶颈,联想到在优化 cookie 互斥锁时,有线程处于该状态:

    图片.png
    图片.png

    所以我严重怀疑原因是 m3u8 文件不能使用 mmap 优化(而是采用 fread 方式)导致的文件 io 性能瓶颈问题,后面通过查看函数调用栈发现,果然是这个原因。

    由于 m3u8 是易变的,使用 mmap 映射时,如果文件长度发生变化,会导致触发 SIGBUS 的信号,查看多方资料,此问题无解。所以最后只剩下通过 m3u8 文件内存化来解决,于是我修好了 m3u8 文件的 http 下载方式,改成直接从内存获取:

    图片.png
    图片.png

    结果:性能爆炸

    通过上述总共 3 大优化,我们在压测 zlmediakit 的 hls 性能时,随着一点一点增加并发量,发现 zlmediakit 总是能运行的非常健康,在并发量从 10K 慢慢增加到 30K 时,并不会影响 ffplay 播放的流畅性和效果,以下是压测数据:

    压测 16K http-hls 播放器时,流量大概 7.5Gb/s: (大概需要 32K 端口,由于我测试机端口不足,只能最大压测到这个数据)

    图片.png图片.png图片.png

    后面用户再压测了 30k https-hls 播放器:

    图片.png图片.png

    后记:用户切生产环境

    在完成 hls 性能优化后,该用户把所有北美节点的 hls 流量切到了 zlmediakit,

    图片.png图片.png

    状况又起:

    今天该用户又反馈给我说 zlmediakit 的内存占用非常高,在 30K hls 并发时,内存占用 30+GB:

    图片.png
    图片.png

    但是用 zlmediakit 的getThreadsLoad接口查看,却发现负载很低:

    图片.png
    图片.png

    同时使用 zlmediakit 的getStatistic接口查看,发现BufferList对象个数很高,初步怀疑是由于网络带宽不足导致发送拥塞,内存暴涨,通过询问得知,公网 hls 访问,确实存在 ts 文件下载缓慢的问题:

    图片.png
    图片.png

    同时让他通过局域网测试 ts 下载,却发现非常快:

    图片.png
    图片.png

    后来通过计算,发现确实由于网络带宽瓶颈每个用户积压一个 Buffer 包,而每个 Buffer 包用户设置的为 1MB,这样算下来,30K 用户,确实会积压 30GB 的发送缓存:

    图片.png
    图片.png
    图片.png
    图片.png
    图片.png
    图片.png

    结论

    通过上面的经历,我们发现 zlmediakit 已经足以支撑 30K/50Gb 级别的 https-hls 并发能力, 理论上,http-hls 相比 https-hls 要少 1 次内存拷贝,和 1 次加密,性能应该要好很多;那么 zlmediakit 的性能上限在哪里?天知道!毕竟,我已经没有这么豪华的配置供我压测了;在此,我们先立一个保守的 flag 吧:

    单机 100K/100Gb 级别 hls 并发能力。

    那其他协议呢? 我觉得应该不输 hls。

    - + diff --git a/zh/reference/development_log/index.html b/zh/reference/development_log/index.html index fea8ed5..72c578d 100644 --- a/zh/reference/development_log/index.html +++ b/zh/reference/development_log/index.html @@ -29,12 +29,12 @@ } 开发日志 | ZLMediaKit - - + + - + diff --git a/zh/reference/development_log/rtsp_performance_optimization.html b/zh/reference/development_log/rtsp_performance_optimization.html index 7a9709a..ce193b8 100644 --- a/zh/reference/development_log/rtsp_performance_optimization.html +++ b/zh/reference/development_log/rtsp_performance_optimization.html @@ -29,12 +29,12 @@ } RTSP性能优化 | ZLMediaKit - - + +
    跳至主要內容

    RTSP性能优化

    ZLMediaKit大约 3 分钟

    概述

    在最近 ZLMediaKit 的一次提交中,我对 rtsp 服务器的性能做了一次改进open in new window,本次改进中,核心的思想是:

    • 缓存时间戳相同的 RTP 包(意味着是同一帧数据),作为一个数据包进行分发

    理论上,这样做可以大大减少多线程分发时线程切换次数、多余发送逻辑代码的执行以及系统调用次数,预期在不增加播放延时的情况下能大幅提高 rtsp 服务器的性能.

    测试

    为了验证本次优化的预期目标,我在 linux 服务器上做了一系列的测试对比,以下是测试环境:

    • 操作系统:ubuntu16 desktop 64bit
    • cpu: 4 核心的 Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
    • 编译器:gcc 5.4.0,开启 Release 编译(cmake -DCMAKE_BUILD_TYPE=Release)
    • malloc 库:连接 jemalloc
    • 网络: 127.0.0.1 本地循环网络
    • 测试客户端:test_benchmarkopen in new window
    • 测试服务器:MediaServeropen in new window
    • 测试码流:4K H264 的 RTSP 流,通过 MP4 Rtsp 点播实现,文件 200 秒,190MB,码流大概 8Mb/s
    • 测试方法:通过 test_benchmark 播放 500 路 RTSP 4K 点播,总码流大概 4Gb/s,分别测试新老版本的 MediaServer 的进程。

    测试数据

    • 启动的播放器个数: image
    • 实时码流: image

    性能对比

    老版本数据

    • cpu 使用率(浮动比较大,最高 200%+):

      imageimage

    • 性能分析(perf top):

      image
      image
    • 总结: cpu 占用主要发生在内核态的系统调用(syscall)、tcp_sendmsg、内存拷贝。

    新版本数据

    • cpu 使用率(浮动比较小,50%以下):

      imageimage

    • 后面我又测试了 2000 个播放器,掉了一批,最后稳定在 1800 个左右,实时流量 17.5Gb/s(单向)左右,cpu 占用 300%左右:

      imageimageimageimage

    • 性能分析(perf top):

      image
      image
    • 总结:cpu 占用主要发生在内核态内存拷贝,系统调用(syscall)、tcp_sendmsg 的开销很小。

    总结

    本次性能测试基本证明了预想,性能提升大概有 4 倍以上。 本机器为 i7-4790 4 核心 8 线程的,所以 cpu 占用率最高为 800%,现在 ZLMediaKit 在上面支撑 500 个 4K RTSP 播放器,实时流量大概 4Gb/s 时 cpu 使用率 50%不到,通过简单换算,该 cpu 可以支撑大概 8000 个 4K RTSP 播放器,实时流量最高能达到 64Gb/s,考虑到性能折损,我们保守估计可以支持 6000 个 4K RTSP 播放器,50Gb/s 的流量。

    最后

    在 ZLMediaKit 流媒体服务器中,通过智能指针引用计数的方式实现了多线程的数据分发,不管分发多少次,数据拷贝次数都是固定的,所以 ZLMediaKit 可以达到如此夸张的性能参数,但是在测试中,我们也能发现,性能占用已经大部分发生在内核态了,应用层的 cpu 占用反而不是瓶颈了。这是因为在内核态,写 socket 缓存需要做内存拷贝,随着播放器个数的增加,内存拷贝会越来越多,此时性能瓶颈不再是应用层,而是由于内存带宽瓶颈导致的内核性能瓶颈。

    - + diff --git a/zh/reference/documents/exclusive_features.html b/zh/reference/documents/exclusive_features.html index a48da21..f6f74c0 100644 --- a/zh/reference/documents/exclusive_features.html +++ b/zh/reference/documents/exclusive_features.html @@ -29,8 +29,8 @@ } ZLMediakit独家特性介绍 | ZLMediaKit - - + + @@ -107,6 +107,6 @@ #单次溯源超时时间不要超过general.maxStreamWaitMS配置 timeout_sec=15

    zlmediakit 的溯源方式支持 rtsp/rtmp/hls/http-ts/http-flv, 方式多样丰富,同时源站不分主备,采用 round robin 方式来实现源站的负载均衡。需要指出的是,由于 zlmediakit 很早就支持 hls 的按需拉流功能,所以 zlmediakit 的边沿站也支持 hls 协议(其实支持 zlmediakit 任意支持的协议),这点是 srs 不具备的。

    另外需要指出的是,由于 zlmediakit 同时支持 rtsp 和 webrtc,而它们两者都是基于 rtp 的,在 zlmediakit 内部,无须转协议简单处理后就可互联互通,所以使用 zlmediakit 来做大规模的 webrtc 低延时直播已经成为可能;相较于传统的基于 rtmp 的 cdn,rtsp 更适合作为 webrtc 的 cdn 基础传输协议,开发者不需要处理繁琐的解复用复用逻辑,即可平滑的实现 rtsp 与 webrtc 的互转。

    6、WebRTC 单端口、多线程、支持连接迁移

    • 痛点:支持多线程的 webrtc 服务器不支持单端口,支持单端口的不支持多线程(同时可能不支持链接迁移)

    • 场景介绍:

      由于 webrtc 传输是基于 udp 协议的,传统的 webrtc 服务器都是多端口模式,譬如 janus/mediasoup。这给部署和管理带来极大痛苦,而且由于端口个数有限(理论上限 6 万多),每个 webrtc 客户端要占用 1 至 4 个端口,受限于端口数量,一台 webrtc 服务器最多可以承载 1~6 万左右的客户端数。

      而支持单端口的 webrtc 服务器(譬如 srs),又不支持多线程;由于 webrtc 计算复杂度(加解密)远大于直播,其性能跟直播比有数量级的差距,所以往往单线程在 webrtc 的应用场景已经力不从心。

      zlmediakit 针对这些痛点,提出了最佳解决方案:

      • 支持单 udp 端口部署,一个 udp 端口承载所有客户端。
      • 单 udp 端口支持多线程,单端口多次 bind/connect 方式实现一个客户端对应一个 fd,fd 均匀分配到不同线程。
      • 用户网络迁移时(譬如 wifi 切换为 4G),通过 stun 包锁定用户,实现无感知的连接迁移,用户体验不中断。

      以上 3 个特性都同时具备的,目前在开源界唯 zlmediakit 一家。

      提示: 关于怎么解决 webrtc 单端口连接迁移和多线程连接迁移时线程安全问题的请观看该视频open in new window

    7、HLS 播放的长链接化

    zlmediakit 通过 cookie 追踪技术实现 hls 短连接的长链接化,依赖该特性,zlm 的 hls 服务器具备了以下独家特性:

    • HLS 播放鉴权,并且播放途中无须再鉴权。
    • HLS 播放流量统计,可以统计播放器播放途中所有短连接消耗流量总数。
    • HLS 按需拉流,可以先播放 zlmediakit 的 HLS 链接,zlmediakit 再去溯源拉流代理。
    • HLS 无人观看时自动停止溯源拉流代理或掐断上游推流。

    另外,zlmediakit 的 hls 服务器性能已优化至极致(通过共享 ts mmap 和内存 m3u8 实现),单进程可以承载 10W 级别 hls 播放器,100Gb/s 级别带宽。

    - + diff --git a/zh/reference/documents/high_concurrency_implementation_principle.html b/zh/reference/documents/high_concurrency_implementation_principle.html index acce40c..d0d3ef9 100644 --- a/zh/reference/documents/high_concurrency_implementation_principle.html +++ b/zh/reference/documents/high_concurrency_implementation_principle.html @@ -29,8 +29,8 @@ } ZLMediaKit高并发实现原理 | ZLMediaKit - - + + @@ -374,6 +374,6 @@ } }

    采用右值引用拷贝

    ZLMediaKit 中也尽量使用右值引用拷贝来规避内存拷贝,这里就不展开论述。

    其他特性

    优化及时推流打开率

    有些应用场景需要设备端开始推流,然后 APP 立即观看的应用场景。传统的 rtmp 服务器对此应用场景是未作任何优化的,如果 APP 播放请求在推流尚未建立之前到达,那么将导致 APP 播放失败,这样视频打开成功率就会降低,用户体验很不好。

    ZLMediaKit 在针对该应用场景时,做了特别的优化;实现原理如下:

    1、收到播放请求时,立即检查是否已经存在的媒体源,如果存在返回播放成功,否则进入第 2 步。

    2、监听对应的媒体源注册事件,同时添加播放超时定时器,并且不回复播放器然后返回。逻辑将进入第 3 步或第 4 步。

    3、媒体源注册成功,那么立即响应播放器播放成功,同时删除播放超时定时器,并移除媒体注册事件监听。

    4、超时定时器触发,响应播放器播放失败,同时删除播放超时定时器,并移除媒体注册事件监听。

    使用 ZLMediaKit 作为流媒体服务器,可以 APP 播放请求和设备端推流同时进行。

    性能测试对比

    目前对 ZLMediaKit 做了一些性能测试,查看地址:benchmark

    在测试时发现,ZLMediaKit 在负载比较低时,其单线程性能大概是 SRS 的 50%,单条线程大概能支撑 5K 个播放器,导致这个性能差距的主要原因时由于采用本地轮回网络,网络状况为理想,那么 sendmsg 批量发送将不起优化左右;而 SRS 使用了合并写特性(就是缓存 300 毫秒左右的数据后一次性发送),可以减少系统调用次数;如果负载比较高,以及真实网络环境下,ZLMediaKit 单线程性能应该跟 SRS 差距更小,我们在测试报告中也能发现在客户端比较多时,ZLMediaKit 单线程线程性能有比较大的提升。

    由于 ZLMediaKit 支持多线程,可以充分利用多核 CPU 的性能,在多核服务器上,CPU 已经不再是性能瓶颈,为了减少直播延时,目前合并写特性是默认关闭的,可以通过配置文件开启。

    - + diff --git a/zh/reference/documents/index.html b/zh/reference/documents/index.html index e457d1c..c61bd13 100644 --- a/zh/reference/documents/index.html +++ b/zh/reference/documents/index.html @@ -29,12 +29,12 @@ } 相关文档 | ZLMediaKit - - + + - + diff --git a/zh/reference/documents/introduction_to_streaming_media_related_technologies.html b/zh/reference/documents/introduction_to_streaming_media_related_technologies.html index 3a99474..1c9e298 100644 --- a/zh/reference/documents/introduction_to_streaming_media_related_technologies.html +++ b/zh/reference/documents/introduction_to_streaming_media_related_technologies.html @@ -29,12 +29,12 @@ } 流媒体相关技术介绍 | ZLMediaKit - - + +
    跳至主要內容

    流媒体相关技术介绍

    ZLMediaKit大约 10 分钟

    1、流媒体简介

    流媒体(streaming media)是指将一连串的媒体数据压缩后,经过网络分段发送数据,在网上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送;如果不使用此技术,就必须在使用前下载整个媒体文件,这对于实时性要求比较高的场景而言,显然是不现实的,所以流媒体技术为此孕育而生。

    传统的视频监控、IPTV,以及这几年兴起的视频直播、网络授课都属于流媒体的范畴,从广义上来讲,视频通话,视频会议也属于流媒体。

    2、视频监控

    2.1 传统解决方案的现状和挑战

    视频监控是流媒体技术传统的应用场景,在政府、企业以及现在逐渐流行的个人消费市场有着广泛的应用。特别是近几年来,国内各大城市逐步推进平安城市项目进程,在安防、交通等领域,视频监控市场规模愈发壮大。而且随着室内家居摄像头、车载记录仪的普及,视频监控可以说在人们的生活中无处不在。

    传统的视频监控解决方案主要建立在基于 LAN 的网络、服务器、录像机和摄像机的基础之上。这些高度复杂的解决方案具有很高的施工和维护成本, 因为传统基础设施价格高昂,并且需要时间来规划、实施和维护。传统的视频监控解决方案也不好扩容维护,对于用户而言,也不友好,操作使用局限在局域网中,已经难以适合新时代的发展。

    2.2 发展趋势

    由于一些互联网企业的入局,视频监控行业也在经历一系列的变局,譬如小米摄像头、360 水滴摄像头的流行,也鞭策着传统的视频监控行业相关企业的变革(譬如海康威视推出的萤石云平台),虽然目前这些变革多数还局限于个人消费市场,但从长远来看,视频监控上云,是未来发展的大趋势。

    基于云的视频监控解决方案由于其高质量、可靠性、安全性、便捷性以及较低的部署和维护成本而越来越受到人们的青睐。

    预计未来视频监控,将像目前流行的网络直播一样方便,用户安装好摄像头后,接入网络即可视频上云。使用者在浏览器或 APP 即可查看所有摄像头的实时监控以及历史录像,通过 APP 或绑定的手机号码,可以实时接收摄像头发送的事件通知(譬如入侵事件)。

    2.3 技术难点

    由于历史原因,传统的视频监控行业技术栈多采用私有协议 SDK、onvif/rtsp 等协议栈。这些协议目前对浏览器而言都不友好,在以前 IE 浏览器还流行的时期,可以通过 ocx 插件的方式来对接这些协议,但是随着 IE 的没落以及目前流行的 chrome、火狐浏览器对原生插件的愈加不友好,通过插件的方式来实现访问监控视频的方式将愈发困难。如果要在 chrome、火狐浏览器上访问监控视频,目前有以下几种方案可行:

    • rtmp

      目前主流的 chrome 和火狐浏览器都还支持 flash 插件,所以目前在浏览器上还可以通过 rtmp 方式来访问监控视频。但是由于随着 html5 的普及以及 flash 的停止更新,预计可预见的未来,rtmp 技术将随着 flash 一起行将就木(谷歌宣布 chrome 浏览器 2020 年 12 月将不再支持 flash player)。

    • http-flv

    http-flv 直播的方式是一种比较新颖的方式,该技术基于 html5,可以通过无插件的方式实现视频直播,而且由于 rtmp 负载可以平滑的转换成 http-flv 协议,所以正在逐渐取代 rtmp 成为新的直播技术标准,目前各大直播网站(譬如斗鱼直播,bilibili 等)也陆续从 rtmp 切换成该技术。 但是由于浏览器的限制,不能同时打开过多(chrome 限制 6 个)的同域名下的直播窗口,所以该技术也不太适合多路同时打开(譬如 9 宫格视频)的视频监控领域。而且由于 Adobe 的不作为,flv 容器格式停止了更新,对 H265 的支持遥遥无期。

    • ws-flv

      ws-flv 直播技术基本与 http-flv 一致,无非是传输介质换成了 websocket 协议,除了解除了 http-flv 不能同时打开过多同域名下的直播窗口的限制,其他技术特性、参数基本与 http-flv 一致。目前看,ws-flv 既适合视频监控(可以同时打开多路监控视频)也适合视频直播行业,是 rtmp 很高的升级替代方案。

    • webrtc

      webrtc 是谷歌主导的视频通话技术标准,目前各大主流浏览器都兼容该标准。通过该技术,用户可以在浏览器上实现无插件的视频通话,该技术也可以用于实现低延时的视频直播。目前业界也有很多基于 webrtc 的应用和产品,但是很多局限于视频聊天等低延时交互式场景,在视频监控领域,目前还尚未流行。而且该技术栈目前还在持续更新,技术难点太多,要与视频监控领域融合还需时日。

    • hls

      hls 协议是苹果公司主导的技术标准,该技术标准兼容性最佳。不仅桌面浏览器,包括手机浏览器甚至是手机 QQ、手机微信都支持该直播协议。 但是该协议延时比较大,不太适合视频监控等对延时要求很敏感的行业。不过最近苹果公司新推出低延时 hls 直播标准,预计 hls 标准将抢占更大的市场份额。

    以上直播技术标准目前都不完全契合视频监控行业的需求,如果要达到比较好的用户体验,通常以上技术混合使用。

    3、视频直播

    3.1 视频直播的现状和挑战

    视频直播是近几年才兴起的产业,特别是随着游戏直播、手机直播的流行,视频直播已经司空见惯,进入了每个人的视野。 随着阿里、腾讯等云平台的入局,OBS,SRS 等优秀软件的开源,视频加速 CDN 技术的成熟,打赏、广告等商业模式的落地,目前视频直播产业链已经非常成熟,业界也诞生了斗鱼、虎牙、映客、花椒等知名直播平台。

    目前而言,这些直播平台使用的技术栈基本都是 rtmp,但是由于 flash 技术即将被淘汰,所以直播行业也将迎来一些变局以及挑战。 现在,基本上所有的直播平台,在 web 端,都已经或正在往 http-flv 方案转型。由于 flv 与 rtmp 同出一门(都是 Adobe 公司产品),负载格式一致,方案升级改造平滑可靠,http-flv 替代 rtmp 具有天然的优势,相信将来 http-flv 能很好的挑起 rtmp 的大梁。

    3.2 发展趋势

    视频直播目前从内容上来讲,涵盖了游戏、美女、户外、娱乐、体育等直播;从设备上来讲,涵盖了 PC、手机、web、电视等客户端,市场上也诞生了斗鱼这样的头部企业。从目前来看,视频直播行业市场格局已经比较稳固,进入了平稳发展期。

    从技术上来讲,直播行业也将迎来一些变革。 一是 rtmp 技术随着 flash 的一起淘汰,web 端 rtmp 播放器将成为历史。 二是随着 webrtc 的强势流行,直播技术栈可能与 webrtc 融合。 三是苹果主导的低延时 hls 的推出,可能最终有大一统之势。

    不过近期来看,http-flv 是 rtmp 的最佳替代方案,但是和 rtmp 一样,也有不支持 H265 的短板,而且移动端浏览器对此支持并不完善,所以该方案在将来有大概率会被其他方案替代。

    3.3 技术难点

    直播行业相对视频监控行业来说,商业化程度更高,更面向于普通消费者,用户规模更大,产业链也更加成熟。但是由于利益格局的划分、巨头间标准制定的角力,目前直播的技术标准和用户体验是割裂的。

    在桌面 web 端,之前直播技术由 Adobe 旗下的 flash/rtmp 技术主导,不过由于 Adobe 的不作为,以及谷歌苹果等公司的抵制,flash 已经进入死亡倒计时。目前来看,http-flv 已经接手 rtmp 的大旗,成为了新的事实上的桌面 web 端直播标准。但是 http-flv 由于其不支持 H265 的短板(Adobe 官方可能永远也不会支持 H265),其地位也并不稳固,现在也有公司正在尝试使用 webrtc 进行视频直播,但是由于该技术跨界太大,其技术栈又太庞杂,整个上下游产业链也并不完善,目前在直播界,还未看见大规模采用该直播技术的方案实施。

    在手机 APP 端,由于播放技术自己可以主导,也由于历史沿革原因,目前一般沿用 rtmp 技术方案(需要指出的是微信小程序也支持 rtmp 播放器),用户体验比较好,延时一般 3 秒或以下。

    在移动 web 端,可采用的直播方案更少,目前基本只能采用苹果公司主导的 hls 方案,但是由于 hls 的技术特性,延时非常大(一般 5 秒以上,最大可达 10 秒以上),其观看体验跟手机 APP、桌面 web 端是严重割裂的。

    通过我们上述的分析看出,目前直播技术方案,在每种端都不一样,用户体验也差距巨大,目前并没有一种多平台支持、令人满意的通用解决方案。目前要实现一个完善的直播产品,最少要采用包括 rtmp/http-flv/hls 这 3 种技术方案,而且这三种技术方案目前也并不能让人满意(rtmp/http-flv 不支持 H265,hls 延时高)。

    4、我们的解决方案以及优势

    目前我们的流媒体服务框架支持 rtsp/rtmp 推流客户端,rtsp/rtmp/http-flv/ws-flv/hls 播放客户端,并且可以无缝把 rtsp/rtmp 推流转换成上述 4 种播放协议,同时我们也支持 mp4 录制存档,必要的时候也可以从 mp4 文件加载成直播流。

    除了上述功能之外,我们还支持拉流 rtsp/rtmp 代理成 rtsp/rtmp/http-flv/ws-flv/hls,也支持把直播 rtsp/rtmp 流推送到其他的服务器。

    另外,我们还提供丰富的 http api 以及 http hook api,通过这些 api,我们可以与其他业务服务器一起,打造丰富的业务逻辑。

    我们的流媒体框架支持 linux、macos、ios、android、windows 全平台,既可以作为商用的流媒体服务器,也可以移植到嵌入式设备中,作为基础流媒体服务组件。

    代码采用 C++11 标准打造,避免使用裸指针,稳定可靠,采用 epoll 多路复用、线程池、异步网络 IO 模式开发,并发性能优越,已经经受住了长期的高并发验证考验。同时针对及时推流的特征,做了特别的优化,可以减少视频打开延时、提高画面打开成功率,让用户获取画面秒开,延时极低的体验。

    - + diff --git a/zh/reference/documents/rtsp_push_process.html b/zh/reference/documents/rtsp_push_process.html index 52e23d7..2b34ada 100644 --- a/zh/reference/documents/rtsp_push_process.html +++ b/zh/reference/documents/rtsp_push_process.html @@ -29,8 +29,8 @@ } RTSP推流流程 | ZLMediaKit - - + + @@ -88,6 +88,6 @@ Server: ZLMediaKit-4.0(build in Mar 26 2019 17:01:17) Session: KPUZ49ejotyD
    - + diff --git a/zh/reference/documents/the_nature_of_live_broadcast_delay.html b/zh/reference/documents/the_nature_of_live_broadcast_delay.html index 9ac9f1a..2562ee9 100644 --- a/zh/reference/documents/the_nature_of_live_broadcast_delay.html +++ b/zh/reference/documents/the_nature_of_live_broadcast_delay.html @@ -29,12 +29,12 @@ } 直播延时的本质 | ZLMediaKit - - + +
    跳至主要內容

    直播延时的本质

    ZLMediaKit大约 2 分钟

    • 1、所谓直播就是正在发生的事情,流逝多少时间产生多少数据。

    • 2、那么直播为什么会有延时?本质是,直播为了提升体验,会给缓存一部分历史数据(比如说为了提高画面打开速度做 GOP 缓存)。

    • 3、那是不是没有 GOP 缓存就不会有延时呢?答案是错误的,因为不仅仅你的服务器有缓存,播放器也有缓存。播放器在点击开始播放出现画面会有时间差,那么为什么播放器要这么做?原因是播放器为了提高播放流畅度,做了缓存。直播数据传到播放器我们可以认为是一根水管,这跟水管水量时大时小,有时干脆断流,如果不用缓存一下,那么画面会卡顿。

    • 4、假定我们削掉服务器和播放器所有的缓存,那么是不是就没有延时呢?Too yong too simple!记住,缓存是永远无法消灭的。假定网络是根水管,我们掐住它 5 秒,然后再放开手,那么这 5 秒的数据会消失吗?并不会!直播是正在发生的事情,它会源源不断产生水量,会把水管涨粗,在这 5 秒内,播放器就得干等数据,等网络恢复了,那么这 5 秒的数据会一股脑怼给播放器,然后又是接着的源源不断过来的直播数据,这样播放器就多了 5 秒的数据,而这多出来 5 秒的数据要么直接丢弃要么加快播放速度,否则永远都不会凭空消灭掉。

    • 5、很遗憾的告诉你,几乎所有标准播放器,都不会直接丢数据或加快播放速度。

    • 6、那细心的小伙伴会问我,为什么 UDP 直播延时更低?原因是 UDP 这根管子上有很多破洞,水量太大了直接漏了,表现形式就是数据直接丢了,那么播放器就得花屏了。

    • 7、TCP 水管涨粗可以理解为网络链路缓存的增加(路由器缓存增加),如果滞留的水量太大了怎么办?那么先是撑满网络链路缓存,然后撑满发送端 Socket 缓存,然后撑满发送端应用逻辑缓存,如果还放不下,那么对不起,服务器只能掐断 TCP 了。

    - + diff --git a/zh/reference/index.html b/zh/reference/index.html index b393ccb..2506858 100644 --- a/zh/reference/index.html +++ b/zh/reference/index.html @@ -29,12 +29,12 @@ } Reference | ZLMediaKit - - + +
    跳至主要內容

    Reference

    ZLMediaKit小于 1 分钟

    目录

    暂无目录

    - + diff --git a/zh/reference/resources/dependency.html b/zh/reference/resources/dependency.html index 5c25951..0177d67 100644 --- a/zh/reference/resources/dependency.html +++ b/zh/reference/resources/dependency.html @@ -29,12 +29,12 @@ } 代码依赖与版权声明 | ZLMediaKit - - + +
    跳至主要內容

    代码依赖与版权声明

    ZLMediaKit大约 2 分钟

    一、zlmediakit 依赖的库列表

    依赖组件协议类型备注项目地址
    ZLToolKitMIT强依赖,ZLToolKit 也部分依赖某些开源代码https://github.com/ZLMediaKit/ZLToolKit
    ireader/media-serverMIT默认依赖,编译时指定 ENABLE_HLS,ENABLE_MP4,ENABLE_RTPPROXY 为关闭时可以去除依赖https://github.com/ireader/media-server
    jsoncppMITMediaServer 依赖https://github.com/open-source-parsers/jsoncpp
    opensslApache-2.0开启 ssl 和 webrtc 相关功能时依赖,编译时指定 ENABLE_OPENSSL,ENABLE_WEBRTC 为关闭时可以去除依赖https://github.com/openssl/openssl
    srtp类 MIT开启 webrtc 相关功能时依赖,编译时指定 ENABLE_WEBRTC 为关闭时可以去除依赖https://github.com/cisco/libsrtp
    usrsctpBSD-3-Clause开启 webrtc datachannel 相关功能时依赖,编译时指定 ENABLE_SCTP 为关闭时可以去除依赖https://github.com/sctplab/usrsctp
    mediasoupISC部分 webrtc 源码提取自 mediasoup,编译时指定 ENABLE_WEBRTC 为关闭时可以去除依赖https://github.com/versatica/mediasoup
    ffmpegGPL/LGPL转码分支与 mk_api 有轻微依赖,编译时指定 ENABLE_FFMPEG 为关闭时可以去除依赖,默认关闭https://github.com/FFmpeg/FFmpeg
    wepoll类 MITWindows 下编译 ENABLE_WPOLL 为开始时依赖,默认关闭https://github.com/piscisaureus/wepoll
    SPSParsersps/pps 相关解析代码,来自朋友,经过修改,应该最开始提取自 ffmpeg,版权存疑https://github.com/ZLMediaKit/ZLMediaKit/blob/master/src/Extension/SPSParser.h

    二、其他依赖

    • 开启编译 test_player 测试程序时依赖 sdl。
    • 开启 x264/faac 相关功能时依赖 libx264 与 libfacc,默认关闭。
    • 开启 jemalloc 时依赖 jemalloc,默认关闭。
    • 开始 mysql 连接池功能时依赖 libmysql-clinet,默认关闭。

    三、ZLToolkit 相关依赖

    - + diff --git a/zh/reference/resources/index.html b/zh/reference/resources/index.html index 0071557..aaeaac2 100644 --- a/zh/reference/resources/index.html +++ b/zh/reference/resources/index.html @@ -29,12 +29,12 @@ } 相关资源 | ZLMediaKit - - + + - + diff --git a/zh/reference/resources/rtmp_support_for_h265_and_opus.html b/zh/reference/resources/rtmp_support_for_h265_and_opus.html index 34c9428..db9f36d 100644 --- a/zh/reference/resources/rtmp_support_for_h265_and_opus.html +++ b/zh/reference/resources/rtmp_support_for_h265_and_opus.html @@ -29,12 +29,12 @@ } RTMP对H265和OPUS的支持 | ZLMediaKit - - + +
    跳至主要內容

    RTMP对H265和OPUS的支持

    ZLMediaKit大约 1 分钟

    背景

    rtmp/flv 是直播行业事实上的标准,这两者在国内直播领域应用非常广泛。在浏览器上要实现无插件的低延时直播播放,基本绕不开 rtmp/flv. 由于 rtmp/flv 是 Adobe 设计的私有协议,原生是不支持 H265(视频监控应用广泛)和 opus(RTC 应用广泛)的,而目前视频监控、RTC 相关行业都有使用直播基础设施的需求,所以对 rtmp 进行修改,使其添加对 H265 和 opus 的支持比较重要。

    实现方式

    rtmp 通过 codec id 来判断编码格式,同时通过 message type 来区分数据类型(包括音频包、视频包),所以音视频的 codec_id 是可以相同的(相同类型不冲突即可); 例如 H264 的 codec id 为 7,G711A 的 codec id 也为 7。 目前国内默认定义 H265 的 codec id 为12(由金山云首先实现并公布open in new window). 而对 opus 的 rtmp 扩展目前还未有广泛共识,作者在与相关人士讨论后,协商定义其 codec id 为13,目前已经实现了对 FFmpeg(基于最新版本)的修改,添加了对h265/opus 的 rtmp 扩展open in new window.

    服务器实现

    ZLMediaKit 已经实现了 rtsp/rtmp/mp4/hls 对 h265/opus 的全面支持, 欢迎各位测试使用。

    - + diff --git a/zh/reference/resources/video_conferencing_related_resources.html b/zh/reference/resources/video_conferencing_related_resources.html index 56b3745..f476fce 100644 --- a/zh/reference/resources/video_conferencing_related_resources.html +++ b/zh/reference/resources/video_conferencing_related_resources.html @@ -29,12 +29,12 @@ } 视频会议相关资源 | ZLMediaKit - - + + - + diff --git a/zh/reference/resources/zltoolkit_source_code_study_notes.html b/zh/reference/resources/zltoolkit_source_code_study_notes.html index ae9d2aa..e370d70 100644 --- a/zh/reference/resources/zltoolkit_source_code_study_notes.html +++ b/zh/reference/resources/zltoolkit_source_code_study_notes.html @@ -29,12 +29,12 @@ } ZLToolKit源码学习笔记 | ZLMediaKit - - + + - + diff --git a/zh/reference/test/benchmark.html b/zh/reference/test/benchmark.html index f10ea23..8e8072b 100644 --- a/zh/reference/test/benchmark.html +++ b/zh/reference/test/benchmark.html @@ -29,12 +29,12 @@ } Benchmark | ZLMediaKit - - + +
    跳至主要內容

    Benchmark

    ZLMediaKit大约 1 分钟

    注意

    此测试已经严重过时,不具备参考性。

    测试环境

    • 系统:Linux core 3.16.0-7-amd64 #1 SMP Debian 3.16.59-1 (2018-10-03) x86_64 GNU/Linux
    • 内存:15G
    • CPU:Intel(R) Xeon(R) CPU E3-1220 v5 @ 3.00GHz;4 核
    • 网络:千兆网卡
    • 测试端采用回环网络方式访问服务器

    测试工具

    ZLMeidaKit 自带测试程序 test_benchmark,其为单进程多线程模型

    测试服务器

    ZLMeidaKit 自带测试服务器 test_server,支持 RTSP/RTMP/HLS 服务器;多线程模型。

    测试媒体流

    使用 test_server 拉取的 rtmp 流rtmp://live.hkstv.hk.lxdns.com/live/hks1;然后通过 test_server 转发代理。 该码流大概 300~400Kbit/s 左右。

    测试结果

    说明:在 cmake 构建时,输入cmake .. -DCMAKE_BUILD_TYPE=Release以编译优化版本。

    播放器个数(rtmp)CPU(最大 400%)内存(VIRT/RES)带宽(平均)丢包
    100020%702M/13M40 MByte/s
    200039%702M/18M80 MByte/s
    500092%702M/32M200 MByte/s
    10000170%702M/59M400 MByte/s
    播放器个数(rtsp/tcp)CPU(最大 400%)内存(VIRT/RES)带宽(平均)丢包
    100018%702M/13M42 MByte/s
    200035%702M/19M82 MByte/s
    500080%702M/35M198 MByte/s
    10000130%702M/62M405 MByte/s

    srs 性能对比

    播放器个数(rtmp)CPU(最大 400%)内存(VIRT/RES)带宽(平均)丢包
    100010%310M/53M41.17 MByte/s
    200018%604M/117M83.86 MByte/s
    - + diff --git a/zh/reference/test/delay_test.html b/zh/reference/test/delay_test.html index 6d2d796..ff057db 100644 --- a/zh/reference/test/delay_test.html +++ b/zh/reference/test/delay_test.html @@ -29,12 +29,12 @@ } 延时测试 | ZLMediaKit - - + +
    跳至主要內容

    延时测试

    ZLMediaKit大约 2 分钟

    注意

    此测试时间比较早,部分内容已失效;其中ultraLowDelay配置项已经删除;合并写延时改成 0 时(默认为 0)即为最低延时模式; 大家测试延时时,可以使用 webrtc 播放来测试。

    网络环境

    • localhost

    操作系统

    • macOS

    服务器

    • MediaServer,启动参数 -t 1 ,单线程启动
    • 配置文件打开ultraLowDelay模式

    推流器

    • obs rtmp 推流到 localhost
    • 速率控制CBR
    • 比特率: 2500
    • 自定义缓存大小: 100
    • 关键帧将:2 秒
    • CPU使用预设: ultrafast
    • profile: baseline
    • Tune: zerolatency
    • 分辨率: 1280x720
    • fps: 30 image

    播放器

    • 内置 test_player
    • localhost 播放 rtsp(udp、tcp 模式都测试)或 rtmp

    测试方法

    • 打开浏览器,打开在线秒表网页 https://miaobiao.51240.com/
    • 设置 OBS,截取浏览器秒表部分图像,开始推流给 MediaServer
    • 打开 test_player,播放对应的 rtsp 或 rtmp url
    • 使用截图工具,定格画面,并对比网页与 test_player 播放器画面在线秒表时间差

    测试结果

    • 播放 rtmp,延时 200ms ~ 400ms imageimage

    • 播放 rtsp(tcp 模式),延时 200ms ~ 400ms imageimage

    • 播放 rtsp(udp 模式),延时 200ms ~ 400ms imageimage

    测试结论

    • 在单线程下,播放器和推流器在同一个线程,没有跨线程切换问题,延时稍微稳定并低点
    • 开启 TCP_NODELAY 关闭 MSG_MORE 在本轮测试中对优化延时效果不大
    • 多次截图平均下来有 300ms 左右的延时,最低 200ms 左右,最高有 400+ms
    • 17 年我自己写推流器(很遗憾没保存下 exe 文件)的情况下,最低延时能达到 120ms 左右,目前根本达不到,怀疑 obs 推流延时还是较高
    • 推流时建议关闭音频再测试,像 AAC 这种编码格式,编码延时能达到 100ms 以上
    • 本次测试都是再 macOS 下测试的,理想情况下,服务器是 linux,推流器 windows,播放器渲染自己做的话延时可能还能更低
    • 感兴趣的朋友们可以在 windows 下测试下,17 年我是在局域网中测试的,推流器、服务器、播放器都不是同一台主机,延时尚且低至 120ms,如果 localhost 应该能更低。
    - + diff --git a/zh/reference/test/how_to_test_delay.html b/zh/reference/test/how_to_test_delay.html index b3fa5db..10ddd10 100644 --- a/zh/reference/test/how_to_test_delay.html +++ b/zh/reference/test/how_to_test_delay.html @@ -29,13 +29,13 @@ } 怎么测试ZLMediaKit的延时? | ZLMediaKit - - + +
    跳至主要內容

    怎么测试ZLMediaKit的延时?

    ZLMediaKit大约 5 分钟

    引言

    有些小伙伴们经常在群里面问我,为什么用 ZLMediaKit 拉流代理、推流转发的流播放延时好几秒,长的时候 10 多秒?为什么 HLS 延时更高,动辄延时半分钟?本文的目的在于澄清大家对延时的误解。

    什么是延时

    很多小伙伴们并不能明白什么叫延时,认为随便一个播放器播放出来的画面跟原始流画面时间差就是延时,其实这是对延时最大的误解。 延时不是表象,很多人在测试延时时很不专业,对延时测试的专业性认识不足,在此我特别提醒,不是随随便便的播放器都有资格做延时测试的!

    总而言之,一般整个延时有以下几部分累加组成:

    • 采集延时

      在采集摄像头或显卡画面时,由于 fps 的限制和 cpu 性能、内存拷贝速度等客观限制,采集画面成 YUV/RGB 等数据时会有一定的延时,一般延时为毫秒级别。由于一般编码器对输入数据格式存在限制,譬如要求统一输入 YUV420P,这样在做 RGB->YUV420P 转换时,也会有转换计算延时(这个可以通过 libyuv 库来降低)。总而言之,采集延时大概为毫秒级别,如果 fps 为 30,那么一般采集延时会有 30 毫秒以上的延时,在内存拷贝和颜色转换时,又可能增加若干毫秒的延时。

    • 编码延时

      在把原始画面输入到编码器时,并不会立即输出编码后的数据,特别是在开启 B 帧时,由于需要参考后面的 P 帧,那么延时会更大,所以延时敏感的情况下一般不开启 B 帧,这种情况下编码延时应该是毫秒级别,不是很大。

    • 网络上行传输延时

      编码后的数据,要经过一定的协议打包才能写入 socket,然后传输给推流服务器或拉流代理服务器,协议打包会有一定的内存拷贝和计算量,那么会增加延时,不过这个延时很小,基本忽略不计。数据在上传到服务器时,这个延时可大可小,取决于网络质量。

    • 服务器转协议延时

      服务器在收到数据后,要读 socket 缓存、协议解析、解复用、重新打包等操作,不过总体而言,这个延时比较小,基本没什么影响。有时,服务器为了提高性能,会采取合并写的机制,也就是收到一定量的数据后才会一并转发,这个延时一般为几百毫秒,ZLMediaKit 默认 300 毫秒左右,不过 ZLMediaKit 默认关闭合并写,也就是这个延时也很小。

    • 网络下行延时

      流媒体在把视频数据转发给播放器时,会存在网络发送,这个延时大小取决于网络质量,ZLMediaKit 在关闭低延时模式时,还会增加 MSG_MORE 和关闭 TCP_NODELAY 导致的延时,不过 ZLMediaKit 默认开启低延时模式。

    • 播放器延时

      播放器延时主要有网络接收延时、协议解析解复用延时、解码延时、缓存延时、渲染延时组成,这些延时中缓存延时最大,因为一般的播放器为了保证在网络抖动情况下视频播放的流畅性,会以增加延时为代价,增加播放缓存,这样在网络变差时,不至于播放缓冲卡顿。而且为了音视频同步,也必须确保一定的缓存量。这种延时一般都是秒级别,一般 5 秒左右。

    • 播放器 GOP 缓存延时

      流媒体服务器为了能让播放器立即出画面,往往会缓存最近的一个 I 帧,这个 I 帧往后的所有音视频数据被称作为 GOP 缓存。如果不缓存 GOP,那么播放器要等下一个 I 帧才能解码成功或不花屏,显然为了提高播放体验,这个 GOP 缓存是不能去掉的。而一般 GOP 短则 1~3 秒,长则 10 几秒,这个跟采集端编码器设置有关,服务器改变不了。但是由于一般的播放器收到缓存后,并不会丢弃过多的画面来确保低延时。况且播放器还希望有一定的缓存来确保播放的流畅性,所以这个 GOP 缓存将会增大播放器的延时。

    • 综合延时

      以上所有的延时累加,就是你观看到的直观延时,那么你看到的延时很高,能怪是服务器的问题吗?在理想的网络状况下,你观看到的直观延时,其实约等于播放器的播放缓存延时,这个锅得由播放器来背。

    怎么测试延时

    用 vlc 等通用播放器测试延时是很不专业的,这些播放器延时最少是秒级别的,为了播放流畅度和音视频同步,这些播放器是不可能给你真实的延时数据。

    在此,我强烈推荐大家自己写个无缓存的播放器测试延时,但是这显然超过了大部人的能力,所以 ZLMediaKit 提供了一个简单的播放器测试延时: test_playeropen in new window

    什么? 你告诉我你不会编译 ZLMediaKit? 那好,退而求其次,我推荐你使用 webrtc 播放来测试 zlm 延时;也可以用 ffplay 测试:

    ffplay -i rtmp://xxxxxxx -fflags nobuffer
     

    如果你不知道 ffplay 怎么安装,你可以从这里open in new window下载编译好的.

    关于延时的更多信息

    直播延时的本质

    延时相关测试

    - + diff --git a/zh/reference/test/index.html b/zh/reference/test/index.html index df6eee7..cfede8b 100644 --- a/zh/reference/test/index.html +++ b/zh/reference/test/index.html @@ -29,12 +29,12 @@ } 测试 | ZLMediaKit - - + + - + diff --git a/zh/reference/test/online_test.html b/zh/reference/test/online_test.html index bb78476..4f67dca 100644 --- a/zh/reference/test/online_test.html +++ b/zh/reference/test/online_test.html @@ -29,12 +29,12 @@ } 在线测试 | ZLMediaKit - - + +
    跳至主要內容

    在线测试

    ZLMediaKit小于 1 分钟

    测试地址

    • http/hls/http-flv/ws-flv 地址: http://zlmediakit.com:8888/
    • https 地址: https://zlmediakit.com/
    • rtsp 地址: zlmediakit.com:554
    • rtmp 地址: zlmediakit.com:1935
    • GB28181 UDP/TCP 地址: zlmediakit.com:10000

    开始测试

    推流测试播放测试

    - + diff --git a/zh/reference/test/performance_testing.html b/zh/reference/test/performance_testing.html index 7ff0f94..e7a235f 100644 --- a/zh/reference/test/performance_testing.html +++ b/zh/reference/test/performance_testing.html @@ -29,12 +29,12 @@ } 性能测试 | ZLMediaKit - - + +
    跳至主要內容

    性能测试

    ZLMediaKit小于 1 分钟

    一、最新性能测试

    1.1、测试环境

    • cpu: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz 4 核 8 线程
    • 操作系统:CentOS release 6.3 (Final)
    • 内存:16GB
    • 网卡:127.0.0.1
    • 测试码流: 200kbps.768x320.flvopen in new window
    • 编译器:gcc (GCC) 8.2.0
    • 编译类型:Release

    1.2、测试数据

    推流性能测试内存占用部分存在不准确问题(原因是当时测试时有个多 gop 缓存 bug)

    客户端类型流个数cpu内存网络 io4 物理核 cpu 理论性能
    rtsp 播放20K160%203M5Gb/s约 100K
    rtsp 播放32.2K235%220M7.78Gb/s约 100K
    rtsp 推流10K264%760M2.39Gb/s约 30K
    rtmp 播放10K148%81M2.33Gb/s约 50K
    rtmp 播放30K450%246M7Gb/s约 50K
    rtmp 推流10K224%1.6G2.16Gb/s约 30K

    1.3、测试详细数据

    二、较早的性能测试记录

    三、性能测试与优化

    - + diff --git a/zh/reference/test/rtmp_pull_stream_performance_test.html b/zh/reference/test/rtmp_pull_stream_performance_test.html index 306f6ea..7fa3210 100644 --- a/zh/reference/test/rtmp_pull_stream_performance_test.html +++ b/zh/reference/test/rtmp_pull_stream_performance_test.html @@ -29,8 +29,8 @@ } rtmp 拉流性能测试 | ZLMediaKit - - + + @@ -81,6 +81,6 @@ #启动1万个rtmp拉流 ./test_bench_pull -c 30000 -i rtmp://127.0.0.1/live/test
    • top 信息:
    图片
    图片
    • perf top 信息:
    图片
    图片
    • nload 信息(平均 7.09Gb/s):
    图片
    图片
    - + diff --git a/zh/reference/test/rtmp_push_stream_performance_test.html b/zh/reference/test/rtmp_push_stream_performance_test.html index 0af371b..2934511 100644 --- a/zh/reference/test/rtmp_push_stream_performance_test.html +++ b/zh/reference/test/rtmp_push_stream_performance_test.html @@ -29,8 +29,8 @@ } rtmp 推流性能测试 | ZLMediaKit - - + + @@ -77,6 +77,6 @@ #启动1万个rtmp推流 ./test_bench_push -i rtmp://127.0.0.1/live/test -c 10000 -o rtmp://127.0.0.1/live/push
    • top 信息:
    图片
    图片
    • perf top 信息:
    图片
    图片
    • nload 信息(平均 2.16Gb/s):
    图片
    图片
    - + diff --git a/zh/reference/test/rtsp_pull_stream_performance_test.html b/zh/reference/test/rtsp_pull_stream_performance_test.html index e213ed5..936a3bc 100644 --- a/zh/reference/test/rtsp_pull_stream_performance_test.html +++ b/zh/reference/test/rtsp_pull_stream_performance_test.html @@ -29,8 +29,8 @@ } rtsp拉流性能测试 | ZLMediaKit - - + + @@ -81,6 +81,6 @@ #启动4万个rtsp拉流 ./test_bench_pull -c 40000 -i rtsp://127.0.0.1/live/test
    • 发现由于随机端口不够,有些播放器掉线(只剩 32244 个): 图片

    • top 信息:

    图片
    图片
    • perf top 信息:
    图片
    图片
    • nload 信息(平均 7.78Gb/s):
    图片
    图片
    - + diff --git a/zh/reference/test/rtsp_push_stream_performance_test.html b/zh/reference/test/rtsp_push_stream_performance_test.html index 71d9cb6..6138e50 100644 --- a/zh/reference/test/rtsp_push_stream_performance_test.html +++ b/zh/reference/test/rtsp_push_stream_performance_test.html @@ -29,8 +29,8 @@ } rtsp推流性能测试 | ZLMediaKit - - + + @@ -77,6 +77,6 @@ #启动1万个rtmp推流 ./test_bench_push -i rtmp://127.0.0.1/live/test -c 10000 -o rtsp://127.0.0.1/live/push
    • top 信息:
    图片
    图片
    • perf top 信息:
    图片
    图片
    • nload 信息(平均 2.39Gb/s):
    图片
    图片
    - + diff --git a/zh/tutorial/index.html b/zh/tutorial/index.html index fa98f5b..07bf549 100644 --- a/zh/tutorial/index.html +++ b/zh/tutorial/index.html @@ -28,74 +28,84 @@ document.documentElement.setAttribute("data-theme", "dark"); } - 快速开始 | ZLMediaKit - - + 快速开始 | ZLMediaKit + + -
    跳至主要內容

    快速开始

    ZLMediaKit大约 6 分钟

    1、获取代码

    请不要使用 github 下载 zip 包的方式下载源码,务必使用 git 克隆 ZLMediaKit 的代码,因为 ZLMediaKit 依赖于第三方代码,zip 包不会下载第三方依赖源码,你可以这样操作:

    #国内用户推荐从同步镜像网站gitee下载
    -git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
    -cd ZLMediaKit
    -#千万不要忘记执行这句命令
    -git submodule update --init
    -

    2、强烈推荐

    如果你是位新手,强烈建议使用 ubuntu16 或更新版本编译 ZLMediaKit,macOS 是次选推荐平台,最不推荐的是 centos6.*或 windows 平台。

    zlmediakit 已上架 vcpkg,便捷安装请参考vcpkg 安装 zlmediakit

    3、编译器

    3.1、编译器版本要求

    ZLMediaKit 采用了 C++11 的语法和库,要求编译器支持完整的 C++11 标准,亦即:

    • linux 上要求 gcc 版本 >= 4.8(4.7 应该也能支持)
    • macOS 上 clang >= ???(我也不知道,估计大部分不会遇到这个问题)
    • windows 上 visual stuido >= 2015(vs2013 某些版本也能编译通过,如果怕麻烦建议直接 vs2017)

    3.2、安装编译器

    4、cmake

    ZLMediaKit 采用 cmake 来构建项目,通过 cmake 才能生成 Makefile(或 Xcode/VS 工程),所以必须先安装 cmake 才能完成后续步骤。

    • 如果你是 debian 系操作系统(包括 ubuntu 系用户),一般自带的 cmake 版本够新,你可以这样安装 cmake

      sudo apt-get install cmake
      -
    • 如果你是 centos7 或以上用户,你也许可以这样安装 cmake:

      sudo yum -y install cmake
      -
    • 如果你是 centos6.*用户,那么你需要下载新版本的 cmake 源码然后编译安装 cmake

      wget https://github.com/Kitware/CMake/releases/download/v3.17.0-rc3/cmake-3.17.0-rc3.tar.gz
      +

    CMake

    ZLMediaKit 采用 CMake 来构建项目,所以编译需要 CMake。

    Debian 系 (包括 Ubuntu)
    sudo apt install cmake
    +

    获取代码

    使用 Git 克隆 ZLMediaKit 的代码并初始化子模块:

    # 国内用户推荐从 Gitee 下载
    +git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
    +cd ZLMediaKit
    +# 初始化子模块 (必须执行)
    +git submodule update --init
    +

    注意

    不能通过下载 zip 包的方式下载源码。因为 ZLMediaKit 依赖于第三方代码并通过 Git 子模块的方式管理。

    安装依赖库

    ZLMediaKit 依赖一些可选的第三方库。构建时,CMake 将在 path 中查找这些库,并根据检测情况决定是否开启相关特性。

    • openssl

      你需要在编译前安装 openssl 库以使用相关功能。

      • flash player 播放 rtmp
      • https/rtsps/webrtc 相关功能。
    • ffmpeg

      ZLMediaKit 可以通过 fork ffmpeg 进程的方式实现多种协议的拉流,编译时不需要安装 FFmpeg。

    • sdl、avcodec、avutil

      这 3 个库供 ZLMediaKit 的 test_player 测试程序使用,你通常不需要安装这 3 个库。

    Debian 系 (包括 Ubuntu)

    除了 openssl,其他都是可选的:

    sudo apt install libssl-dev
    +sudo apt install libsdl-dev
    +sudo apt install libavcodec-dev
    +sudo apt install libavutil-dev
    +sudo apt install ffmpeg
    +

    构建与编译 ZLMediaKit

    webrtc

    由于功能复杂,默认情况下不开启编译 webrtc,可参考 编译与使用 webrtc

    Linux
    cd ZLMediaKit
     mkdir build
     cd build
    -#macOS下可能需要这样指定openss路径:cmake .. -DOPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2j/
     cmake ..
     make -j4
    -
  • 在 windows 系统下

    • 如果你是 vs2017 或以上,可以在 vs 菜单栏中直接打开项目文件夹:

      [文件] -> [打开] -> [文件夹] -> [选择ZLMediaKit代码根目录并打开]
      -
    image
    image
    • 如果你是 vs2017 以下版本,你需要使用 cmake-gui 生成 vs 工程然后编译:

      1 进入ZLMediaKit目录执行 git submodule update --init 以下载ZLToolKit的代码
      -2 使用cmake-gui打开工程并生成vs工程文件.
      -3 找到工程文件(ZLMediaKit.sln),双击用vs2017打开.
      -4 选择编译Release 版本.
      -5 找到目标文件并运行测试用例.
      -
    • 同时,Windows 编译也可以参考这里

  • 如果你要编译 Android 版本,你可以自己在 Android Studio 中打开 Android 目录。

  • 如果你要编译 ios 版本,可以生成 xcode 工程然后编译 c api 的静态库;另外,你可以参考此文档open in new window

    cd ZLMediaKit
    +
  • 运行 ZLMediaKit

    ZLMediaKit 工程主要生成 3 种二进制目标文件,他们的生成的路径在 release 目录下。

    MediaServer 进程

    这是 ZLMediaKit 作为服务器的主进程,该进程可以在免去开发的情况下直接作为测试流媒体服务器使用。

    如果你需要更复杂的业务逻辑,可以通过 Web HOOKRESTful API实现。你可以通过 配置文件 控制其参数。

    Linux
    cd ZLMediaKit/release/linux/Debug
    +# 通过 -h 可以了解启动参数
    +./MediaServer -h
    +# 以守护进程模式启动
    +./MediaServer -d &
    +

    C 接口的 SDK

    ZLMediaKit 同时提供 C 接口的 SDK 库。

    头文件位于 ZLMediaKit/api/include,有详细的注释,一般足够二次开发使用。

    库文件为:

    Linux
    ZLMediaKit/release/linux/Debug/libmk_api.so
    +
    - +

    test_ 开头的测试程序

    相关代码在 ZLMediaKit/tests 目录下,你可以对照代码启动测试进程。

    推流测试

    请参考 推流播放测试

    +